(v DBMappable, m map[string]interface{})
| 189 | } |
| 190 | |
| 191 | func FromDBMap(v DBMappable, m map[string]interface{}) { |
| 192 | if CheckNil(v) { |
| 193 | panic("StructFromDBMap, v cannot be nil") |
| 194 | } |
| 195 | rv := reflect.ValueOf(v) |
| 196 | if rv.Kind() == reflect.Pointer { |
| 197 | rv = rv.Elem() |
| 198 | } |
| 199 | if rv.Kind() != reflect.Struct { |
| 200 | panic(fmt.Sprintf("invalid type %T (non-struct) passed to StructFromDBMap", v)) |
| 201 | } |
| 202 | rt := rv.Type() |
| 203 | numFields := rt.NumField() |
| 204 | for i := 0; i < numFields; i++ { |
| 205 | field := rt.Field(i) |
| 206 | fieldVal := rv.FieldByIndex(field.Index) |
| 207 | dbName := field.Tag.Get("dbmap") |
| 208 | if dbName == "" { |
| 209 | dbName = strings.ToLower(field.Name) |
| 210 | } |
| 211 | if dbName == "-" { |
| 212 | continue |
| 213 | } |
| 214 | if isByteArrayType(field.Type) { |
| 215 | barrVal := fieldVal.Addr().Interface() |
| 216 | QuickSetBytes(barrVal.(*[]byte), m, dbName) |
| 217 | } else if field.Type.Kind() == reflect.Slice { |
| 218 | QuickSetJsonArr(fieldVal.Addr().Interface(), m, dbName) |
| 219 | } else if isStructType(field.Type) || isStringMapType(field.Type) { |
| 220 | QuickSetJson(fieldVal.Addr().Interface(), m, dbName) |
| 221 | } else if field.Type.Kind() == reflect.String { |
| 222 | strVal := fieldVal.Addr().Interface() |
| 223 | QuickSetStr(strVal.(*string), m, dbName) |
| 224 | } else if field.Type.Kind() == reflect.Int64 { |
| 225 | intVal := fieldVal.Addr().Interface() |
| 226 | QuickSetInt64(intVal.(*int64), m, dbName) |
| 227 | } else if field.Type.Kind() == reflect.Int { |
| 228 | intVal := fieldVal.Addr().Interface() |
| 229 | QuickSetInt(intVal.(*int), m, dbName) |
| 230 | } else if field.Type.Kind() == reflect.Bool { |
| 231 | boolVal := fieldVal.Addr().Interface() |
| 232 | QuickSetBool(boolVal.(*bool), m, dbName) |
| 233 | } else { |
| 234 | panic(fmt.Sprintf("StructFromDBMap invalid field type %v in %T", fieldVal.Type(), v)) |
| 235 | } |
| 236 | } |
| 237 | } |
no test coverage detected