diff --git a/fields/main.go b/fields/main.go index f284c51..613b217 100644 --- a/fields/main.go +++ b/fields/main.go @@ -109,7 +109,7 @@ type FieldInfo struct { } func NewResource(structName string, resourcePath string) *Resource { - baseType := NewFieldInfo(structName, resourcePath, "struct", "", false, false) + baseType := NewFieldInfo(structName, resourcePath, "struct", "", false, false, "") resource := &Resource{ StructName: structName, ResourcePath: resourcePath, @@ -125,14 +125,14 @@ func NewResource(structName string, resourcePath string) *Resource { // // This hack is here for stability of the generatd code, but can be removed if desired. baseType.Fields = map[string]*FieldInfo{ - " ID": NewFieldInfo("ID", "_id", "string", "", true, false), - " SiteID": NewFieldInfo("SiteID", "site_id", "string", "", true, false), + " ID": NewFieldInfo("ID", "_id", "string", "", true, false, ""), + " SiteID": NewFieldInfo("SiteID", "site_id", "string", "", true, false, ""), " _Spacer": nil, - " Hidden": NewFieldInfo("Hidden", "attr_hidden", "bool", "", true, false), - " HiddenID": NewFieldInfo("HiddenID", "attr_hidden_id", "string", "", true, false), - " NoDelete": NewFieldInfo("NoDelete", "attr_no_delete", "bool", "", true, false), - " NoEdit": NewFieldInfo("NoEdit", "attr_no_edit", "bool", "", true, false), + " Hidden": NewFieldInfo("Hidden", "attr_hidden", "bool", "", true, false, ""), + " HiddenID": NewFieldInfo("HiddenID", "attr_hidden_id", "string", "", true, false, ""), + " NoDelete": NewFieldInfo("NoDelete", "attr_no_delete", "bool", "", true, false, ""), + " NoEdit": NewFieldInfo("NoEdit", "attr_no_edit", "bool", "", true, false, ""), " _Spacer": nil, " _Spacer": nil, @@ -141,28 +141,29 @@ func NewResource(structName string, resourcePath string) *Resource { switch { case resource.IsSetting(): resource.ResourcePath = strcase.ToSnake(strings.TrimPrefix(structName, "Setting")) - baseType.Fields[" Key"] = NewFieldInfo("Key", "key", "string", "", false, false) + baseType.Fields[" Key"] = NewFieldInfo("Key", "key", "string", "", false, false, "") case resource.StructName == "Device": - baseType.Fields[" MAC"] = NewFieldInfo("MAC", "mac", "string", "", true, false) + baseType.Fields[" MAC"] = NewFieldInfo("MAC", "mac", "string", "", true, false, "") case resource.StructName == "User": - baseType.Fields[" IP"] = NewFieldInfo("IP", "ip", "string", "non-generated field", true, false) - baseType.Fields[" DevIdOverride"] = NewFieldInfo("DevIdOverride", "dev_id_override", "int", "non-generated field", true, false) + baseType.Fields[" IP"] = NewFieldInfo("IP", "ip", "string", "non-generated field", true, false, "") + baseType.Fields[" DevIdOverride"] = NewFieldInfo("DevIdOverride", "dev_id_override", "int", "non-generated field", true, false, "") case resource.StructName == "WLAN": // this field removed in v6, retaining for backwards compatibility - baseType.Fields["WLANGroupID"] = NewFieldInfo("WLANGroupID", "wlangroup_id", "string", "", false, false) + baseType.Fields["WLANGroupID"] = NewFieldInfo("WLANGroupID", "wlangroup_id", "string", "", false, false, "") } return resource } -func NewFieldInfo(fieldName string, jsonName string, fieldType string, fieldValidation string, omitempty bool, isArray bool) *FieldInfo { +func NewFieldInfo(fieldName string, jsonName string, fieldType string, fieldValidation string, omitempty bool, isArray bool, customUnmarshalType string) *FieldInfo { return &FieldInfo{ - FieldName: fieldName, - JSONName: jsonName, - FieldType: fieldType, - FieldValidation: fieldValidation, - OmitEmpty: omitempty, - IsArray: isArray, + FieldName: fieldName, + JSONName: jsonName, + FieldType: fieldType, + FieldValidation: fieldValidation, + OmitEmpty: omitempty, + IsArray: isArray, + CustomUnmarshalType: customUnmarshalType, } } @@ -308,14 +309,14 @@ func main() { return nil } case "SettingMgmt": - sshKeyField := NewFieldInfo(resource.StructName+"XSshKeys", "x_ssh_keys", "struct", "", false, false) + sshKeyField := NewFieldInfo(resource.StructName+"XSshKeys", "x_ssh_keys", "struct", "", false, false, "") sshKeyField.Fields = map[string]*FieldInfo{ - "name": NewFieldInfo("name", "name", "string", "", false, false), - "keyType": NewFieldInfo("keyType", "type", "string", "", false, false), - "key": NewFieldInfo("key", "key", "string", "", false, false), - "comment": NewFieldInfo("comment", "comment", "string", "", false, false), - "date": NewFieldInfo("date", "date", "string", "", false, false), - "fingerprint": NewFieldInfo("fingerprint", "fingerprint", "string", "", false, false), + "name": NewFieldInfo("name", "name", "string", "", false, false, ""), + "keyType": NewFieldInfo("keyType", "type", "string", "", false, false, ""), + "key": NewFieldInfo("key", "key", "string", "", false, false, ""), + "comment": NewFieldInfo("comment", "comment", "string", "", false, false, ""), + "date": NewFieldInfo("date", "date", "string", "", false, false, ""), + "fingerprint": NewFieldInfo("fingerprint", "fingerprint", "string", "", false, false, ""), } resource.Types[sshKeyField.FieldName] = sshKeyField @@ -388,7 +389,7 @@ func (r *Resource) fieldInfoFromValidation(name string, validation interface{}) switch validation := validation.(type) { case []interface{}: if len(validation) == 0 { - fieldInfo, err = NewFieldInfo(fieldName, name, "string", "", false, true), nil + fieldInfo, err = NewFieldInfo(fieldName, name, "string", "", false, true, ""), nil err = r.FieldProcessor(fieldName, fieldInfo) return fieldInfo, err } @@ -410,7 +411,7 @@ func (r *Resource) fieldInfoFromValidation(name string, validation interface{}) case map[string]interface{}: typeName := r.StructName + fieldName - result := NewFieldInfo(fieldName, name, typeName, "", true, false) + result := NewFieldInfo(fieldName, name, typeName, "", true, false, "") result.Fields = make(map[string]*FieldInfo) for name, fv := range validation { @@ -434,7 +435,7 @@ func (r *Resource) fieldInfoFromValidation(name string, validation interface{}) switch { case normalized == "falsetrue" || normalized == "truefalse": - fieldInfo, err = NewFieldInfo(fieldName, name, "bool", "", omitEmpty, false), nil + fieldInfo, err = NewFieldInfo(fieldName, name, "bool", "", omitEmpty, false, ""), nil return fieldInfo, r.FieldProcessor(fieldName, fieldInfo) default: if _, err := strconv.ParseFloat(normalized, 64); err == nil { @@ -449,12 +450,12 @@ func (r *Resource) fieldInfoFromValidation(name string, validation interface{}) } omitEmpty = true - fieldInfo = NewFieldInfo(fieldName, name, "float64", fieldValidation, omitEmpty, false) + fieldInfo = NewFieldInfo(fieldName, name, "float64", fieldValidation, omitEmpty, false, "") return fieldInfo, r.FieldProcessor(fieldName, fieldInfo) } omitEmpty = true - fieldInfo = NewFieldInfo(fieldName, name, "int", fieldValidation, omitEmpty, false) + fieldInfo = NewFieldInfo(fieldName, name, "int", fieldValidation, omitEmpty, false, "") fieldInfo.CustomUnmarshalType = "emptyStringInt" return fieldInfo, r.FieldProcessor(fieldName, fieldInfo) } @@ -464,7 +465,7 @@ func (r *Resource) fieldInfoFromValidation(name string, validation interface{}) } omitEmpty = omitEmpty || (!strings.Contains(validation, "^$") && !strings.HasSuffix(fieldName, "ID")) - fieldInfo, err = NewFieldInfo(fieldName, name, "string", fieldValidation, omitEmpty, false), nil + fieldInfo, err = NewFieldInfo(fieldName, name, "string", fieldValidation, omitEmpty, false, ""), nil return fieldInfo, r.FieldProcessor(fieldName, fieldInfo) } diff --git a/fields/main_test.go b/fields/main_test.go index fc4f2e9..58e79d4 100644 --- a/fields/main_test.go +++ b/fields/main_test.go @@ -71,11 +71,11 @@ func TestResourceTypes(t *testing.T) { } ` expectedFields := map[string]*FieldInfo{ - "Note": NewFieldInfo("Note", "note", "string", ".{0,1024}", true, false), - "Date": NewFieldInfo("Date", "date", "string", "^$|^(20[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])Z?$", false, false), - "MAC": NewFieldInfo("MAC", "mac", "string", "^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$", true, false), - "Number": NewFieldInfo("Number", "number", "int", "", true, false), - "Boolean": NewFieldInfo("Boolean", "boolean", "bool", "", false, false), + "Note": NewFieldInfo("Note", "note", "string", ".{0,1024}", true, false, ""), + "Date": NewFieldInfo("Date", "date", "string", "^$|^(20[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])Z?$", false, false, ""), + "MAC": NewFieldInfo("MAC", "mac", "string", "^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$", true, false, ""), + "Number": NewFieldInfo("Number", "number", "int", "", true, false, "emptyStringInt"), + "Boolean": NewFieldInfo("Boolean", "boolean", "bool", "", false, false, ""), "NestedType": { FieldName: "NestedType", JSONName: "nested_type", @@ -84,7 +84,7 @@ func TestResourceTypes(t *testing.T) { OmitEmpty: true, IsArray: false, Fields: map[string]*FieldInfo{ - "NestedFieldModified": NewFieldInfo("NestedFieldModified", "nested_field", "string", "^$", false, false), + "NestedFieldModified": NewFieldInfo("NestedFieldModified", "nested_field", "string", "^$", false, false, ""), }, }, "NestedTypeArray": { @@ -95,7 +95,7 @@ func TestResourceTypes(t *testing.T) { OmitEmpty: true, IsArray: true, Fields: map[string]*FieldInfo{ - "NestedFieldModified": NewFieldInfo("NestedFieldModified", "nested_field", "string", "^$", false, false), + "NestedFieldModified": NewFieldInfo("NestedFieldModified", "nested_field", "string", "^$", false, false, ""), }, }, } @@ -109,13 +109,13 @@ func TestResourceTypes(t *testing.T) { OmitEmpty: false, IsArray: false, Fields: map[string]*FieldInfo{ - " ID": NewFieldInfo("ID", "_id", "string", "", true, false), - " SiteID": NewFieldInfo("SiteID", "site_id", "string", "", true, false), + " ID": NewFieldInfo("ID", "_id", "string", "", true, false, ""), + " SiteID": NewFieldInfo("SiteID", "site_id", "string", "", true, false, ""), " _Spacer": nil, - " Hidden": NewFieldInfo("Hidden", "attr_hidden", "bool", "", true, false), - " HiddenID": NewFieldInfo("HiddenID", "attr_hidden_id", "string", "", true, false), - " NoDelete": NewFieldInfo("NoDelete", "attr_no_delete", "bool", "", true, false), - " NoEdit": NewFieldInfo("NoEdit", "attr_no_edit", "bool", "", true, false), + " Hidden": NewFieldInfo("Hidden", "attr_hidden", "bool", "", true, false, ""), + " HiddenID": NewFieldInfo("HiddenID", "attr_hidden_id", "string", "", true, false, ""), + " NoDelete": NewFieldInfo("NoDelete", "attr_no_delete", "bool", "", true, false, ""), + " NoEdit": NewFieldInfo("NoEdit", "attr_no_edit", "bool", "", true, false, ""), " _Spacer": nil, " _Spacer": nil, },