123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- // Copyright 2012 The Gorilla Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package schema
- import (
- "reflect"
- "strconv"
- )
- type Converter func(string) reflect.Value
- var (
- invalidValue = reflect.Value{}
- boolType = reflect.Bool
- float32Type = reflect.Float32
- float64Type = reflect.Float64
- intType = reflect.Int
- int8Type = reflect.Int8
- int16Type = reflect.Int16
- int32Type = reflect.Int32
- int64Type = reflect.Int64
- stringType = reflect.String
- uintType = reflect.Uint
- uint8Type = reflect.Uint8
- uint16Type = reflect.Uint16
- uint32Type = reflect.Uint32
- uint64Type = reflect.Uint64
- )
- // Default converters for basic types.
- var builtinConverters = map[reflect.Kind]Converter{
- boolType: convertBool,
- float32Type: convertFloat32,
- float64Type: convertFloat64,
- intType: convertInt,
- int8Type: convertInt8,
- int16Type: convertInt16,
- int32Type: convertInt32,
- int64Type: convertInt64,
- stringType: convertString,
- uintType: convertUint,
- uint8Type: convertUint8,
- uint16Type: convertUint16,
- uint32Type: convertUint32,
- uint64Type: convertUint64,
- }
- func convertBool(value string) reflect.Value {
- if value == "on" {
- return reflect.ValueOf(true)
- } else if v, err := strconv.ParseBool(value); err == nil {
- return reflect.ValueOf(v)
- }
- return invalidValue
- }
- func convertFloat32(value string) reflect.Value {
- if v, err := strconv.ParseFloat(value, 32); err == nil {
- return reflect.ValueOf(float32(v))
- }
- return invalidValue
- }
- func convertFloat64(value string) reflect.Value {
- if v, err := strconv.ParseFloat(value, 64); err == nil {
- return reflect.ValueOf(v)
- }
- return invalidValue
- }
- func convertInt(value string) reflect.Value {
- if v, err := strconv.ParseInt(value, 10, 0); err == nil {
- return reflect.ValueOf(int(v))
- }
- return invalidValue
- }
- func convertInt8(value string) reflect.Value {
- if v, err := strconv.ParseInt(value, 10, 8); err == nil {
- return reflect.ValueOf(int8(v))
- }
- return invalidValue
- }
- func convertInt16(value string) reflect.Value {
- if v, err := strconv.ParseInt(value, 10, 16); err == nil {
- return reflect.ValueOf(int16(v))
- }
- return invalidValue
- }
- func convertInt32(value string) reflect.Value {
- if v, err := strconv.ParseInt(value, 10, 32); err == nil {
- return reflect.ValueOf(int32(v))
- }
- return invalidValue
- }
- func convertInt64(value string) reflect.Value {
- if v, err := strconv.ParseInt(value, 10, 64); err == nil {
- return reflect.ValueOf(v)
- }
- return invalidValue
- }
- func convertString(value string) reflect.Value {
- return reflect.ValueOf(value)
- }
- func convertUint(value string) reflect.Value {
- if v, err := strconv.ParseUint(value, 10, 0); err == nil {
- return reflect.ValueOf(uint(v))
- }
- return invalidValue
- }
- func convertUint8(value string) reflect.Value {
- if v, err := strconv.ParseUint(value, 10, 8); err == nil {
- return reflect.ValueOf(uint8(v))
- }
- return invalidValue
- }
- func convertUint16(value string) reflect.Value {
- if v, err := strconv.ParseUint(value, 10, 16); err == nil {
- return reflect.ValueOf(uint16(v))
- }
- return invalidValue
- }
- func convertUint32(value string) reflect.Value {
- if v, err := strconv.ParseUint(value, 10, 32); err == nil {
- return reflect.ValueOf(uint32(v))
- }
- return invalidValue
- }
- func convertUint64(value string) reflect.Value {
- if v, err := strconv.ParseUint(value, 10, 64); err == nil {
- return reflect.ValueOf(v)
- }
- return invalidValue
- }
|