code: func strconvHook(from, to reflect.Type, data reflect.Value) (reflect.Value, error) {
  	if from.Kind() != reflect.String {
  		return data, nil
  	}
  
  	s := data.String()
  	switch to.Kind() {
  	case reflect.Bool:
  		b, err := strconv.ParseBool(s)
  		return reflect.ValueOf(b), err
  	case reflect.Float32, reflect.Float64:
  		f, err := strconv.ParseFloat(s, to.Bits())
  		return reflect.ValueOf(f).Convert(to), err
  	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  		i, err := strconv.ParseInt(s, 10, to.Bits())
  		return reflect.ValueOf(i).Convert(to), err
  	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
  		u, err := strconv.ParseUint(s, 10, to.Bits())
  		return reflect.ValueOf(u).Convert(to), err
  	}
  
  	return data, nil
  }
docs: // stringToPrimitivesHook is a DecodeHookFunc which decodes strings into
  // primitives.
  //
  // Integers are parsed in base 10.