code: func ComposeDecodeHookFunc(fs ...DecodeHookFunc) DecodeHookFunc {
  	return func(
  		f reflect.Type,
  		t reflect.Type,
  		data interface{}) (interface{}, error) {
  		var err error
  		for _, f1 := range fs {
  			data, err = DecodeHookExec(f1, f, t, data)
  			if err != nil {
  				return nil, err
  			}
  
  			// Modify the from kind to be correct with the new data
  			f = nil
  			if val := reflect.ValueOf(data); val.IsValid() {
  				f = val.Type()
  			}
  		}
  
  		return data, nil
  	}
  }
docs: // ComposeDecodeHookFunc creates a single DecodeHookFunc that
  // automatically composes multiple DecodeHookFuncs.
  //
  // The composed funcs are called in order, with the result of the
  // previous transformation.