code: func Decode(dest, src interface{}, os ...Option) error {
  	opts := options{
  		TagName:     _defaultTagName,
  		Unmarshaler: _decoderUnmarshaler,
  	}
  	for _, o := range os {
  		o(&opts)
  	}
  	return decodeFrom(&opts, src)(dest)
  }
docs: // Decode from src into dest where dest is a pointer to the value being
  // decoded.
  //
  // Primitives are mapped as-is with pointers created or dereferenced as
  // necessary. Maps and slices use Decode recursively for each of their items.
  // For structs, the source must be a map[string]interface{} or
  // map[interface{}]interface{}. Each key in the map calls Decode recursively
  // with the field of the struct that has a name similar to the key (case
  // insensitive match).
  //
  // 	var item struct{ Key, Value string }
  // 	err := Decode(&item, map[string]string{"key": "some key", "Value": "some value"})
  //
  // The name of the field in the map may be customized with the `mapdecode`
  // tag. (Use the TagName option to change the name of the tag.)
  //
  // 	var item struct {
  // 		Key   string `mapdecode:"name"`
  // 		Value string
  // 	}
  // 	var item struct{ Key, Value string }
  // 	err := Decode(&item, map[string]string{"name": "token", "Value": "some value"})
  //
  // The destination type or any subtype may implement the Decoder interface to
  // customize how it gets decoded.