mirror of https://github.com/gorilla/schema
Mirror of https://github.com/gorilla/schema
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
3.4 KiB
145 lines
3.4 KiB
// 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 |
|
}
|
|
|