146 lines
3.4 KiB
Go
146 lines
3.4 KiB
Go
// 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 converters = 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
|
|
}
|