code: func composeDecodeHooks(hooks []DecodeHookFunc) DecodeHookFunc {
  	return func(from, to reflect.Type, data reflect.Value) (reflect.Value, error) {
  		var err error
  		for _, hook := range hooks {
  			data, err = hook(from, to, data)
  			if err != nil {
  				return data, err
  			}
  
  			// Update the `from` type to reflect changes made by the hook.
  			from = data.Type()
  		}
  		return data, err
  	}
  }
docs: // Composes multiple DecodeHookFuncs into one. The hooks are applied in-order
  // and values produced by a hook are fed into the next hook.