git.sr.ht/~pingoo/stdx@v0.0.0-20240218134121-094174641f6e/schema/converter.go (about) 1 // Copyright 2012 The Gorilla Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package schema 6 7 import ( 8 "reflect" 9 "strconv" 10 ) 11 12 type Converter func(string) reflect.Value 13 14 var ( 15 invalidValue = reflect.Value{} 16 boolType = reflect.Bool 17 float32Type = reflect.Float32 18 float64Type = reflect.Float64 19 intType = reflect.Int 20 int8Type = reflect.Int8 21 int16Type = reflect.Int16 22 int32Type = reflect.Int32 23 int64Type = reflect.Int64 24 stringType = reflect.String 25 uintType = reflect.Uint 26 uint8Type = reflect.Uint8 27 uint16Type = reflect.Uint16 28 uint32Type = reflect.Uint32 29 uint64Type = reflect.Uint64 30 ) 31 32 // Default converters for basic types. 33 var builtinConverters = map[reflect.Kind]Converter{ 34 boolType: convertBool, 35 float32Type: convertFloat32, 36 float64Type: convertFloat64, 37 intType: convertInt, 38 int8Type: convertInt8, 39 int16Type: convertInt16, 40 int32Type: convertInt32, 41 int64Type: convertInt64, 42 stringType: convertString, 43 uintType: convertUint, 44 uint8Type: convertUint8, 45 uint16Type: convertUint16, 46 uint32Type: convertUint32, 47 uint64Type: convertUint64, 48 } 49 50 func convertBool(value string) reflect.Value { 51 if value == "on" { 52 return reflect.ValueOf(true) 53 } else if v, err := strconv.ParseBool(value); err == nil { 54 return reflect.ValueOf(v) 55 } 56 return invalidValue 57 } 58 59 func convertFloat32(value string) reflect.Value { 60 if v, err := strconv.ParseFloat(value, 32); err == nil { 61 return reflect.ValueOf(float32(v)) 62 } 63 return invalidValue 64 } 65 66 func convertFloat64(value string) reflect.Value { 67 if v, err := strconv.ParseFloat(value, 64); err == nil { 68 return reflect.ValueOf(v) 69 } 70 return invalidValue 71 } 72 73 func convertInt(value string) reflect.Value { 74 if v, err := strconv.ParseInt(value, 10, 0); err == nil { 75 return reflect.ValueOf(int(v)) 76 } 77 return invalidValue 78 } 79 80 func convertInt8(value string) reflect.Value { 81 if v, err := strconv.ParseInt(value, 10, 8); err == nil { 82 return reflect.ValueOf(int8(v)) 83 } 84 return invalidValue 85 } 86 87 func convertInt16(value string) reflect.Value { 88 if v, err := strconv.ParseInt(value, 10, 16); err == nil { 89 return reflect.ValueOf(int16(v)) 90 } 91 return invalidValue 92 } 93 94 func convertInt32(value string) reflect.Value { 95 if v, err := strconv.ParseInt(value, 10, 32); err == nil { 96 return reflect.ValueOf(int32(v)) 97 } 98 return invalidValue 99 } 100 101 func convertInt64(value string) reflect.Value { 102 if v, err := strconv.ParseInt(value, 10, 64); err == nil { 103 return reflect.ValueOf(v) 104 } 105 return invalidValue 106 } 107 108 func convertString(value string) reflect.Value { 109 return reflect.ValueOf(value) 110 } 111 112 func convertUint(value string) reflect.Value { 113 if v, err := strconv.ParseUint(value, 10, 0); err == nil { 114 return reflect.ValueOf(uint(v)) 115 } 116 return invalidValue 117 } 118 119 func convertUint8(value string) reflect.Value { 120 if v, err := strconv.ParseUint(value, 10, 8); err == nil { 121 return reflect.ValueOf(uint8(v)) 122 } 123 return invalidValue 124 } 125 126 func convertUint16(value string) reflect.Value { 127 if v, err := strconv.ParseUint(value, 10, 16); err == nil { 128 return reflect.ValueOf(uint16(v)) 129 } 130 return invalidValue 131 } 132 133 func convertUint32(value string) reflect.Value { 134 if v, err := strconv.ParseUint(value, 10, 32); err == nil { 135 return reflect.ValueOf(uint32(v)) 136 } 137 return invalidValue 138 } 139 140 func convertUint64(value string) reflect.Value { 141 if v, err := strconv.ParseUint(value, 10, 64); err == nil { 142 return reflect.ValueOf(v) 143 } 144 return invalidValue 145 }