diff --git a/pkg/generate/generator.go b/pkg/generate/generator.go index d74cdad0..8fde676d 100644 --- a/pkg/generate/generator.go +++ b/pkg/generate/generator.go @@ -123,6 +123,7 @@ func (c *Creator) parseTemplate(templateName string) (*template.Template, error) "locationType": translate.LocationType, "specParamType": translate.SpecParamType, "xmlParamType": translate.XmlParamType, + "xmlName": translate.XmlName, "xmlTag": translate.XmlTag, "specifyEntryAssignment": translate.SpecifyEntryAssignment, "normalizeAssignment": translate.NormalizeAssignment, diff --git a/pkg/translate/structs.go b/pkg/translate/structs.go index df85ad52..b3639ce1 100644 --- a/pkg/translate/structs.go +++ b/pkg/translate/structs.go @@ -102,6 +102,15 @@ func calculateNestedXmlSpecType(parent string, param *properties.SpecParam) stri return fmt.Sprintf("spec%s%sXml", parent, naming.CamelCase("", param.Name.CamelCase, "", true)) } +// XmlName creates a string with xml name (e.g. `description`). +func XmlName(param *properties.SpecParam) string { + if param.Profiles != nil && len(param.Profiles) > 0 { + return param.Profiles[0].Xpath[len(param.Profiles[0].Xpath)-1] + } + + return "" +} + // XmlTag creates a string with xml tag (e.g. `xml:"description,omitempty"`). func XmlTag(param *properties.SpecParam) string { if param.Profiles != nil && len(param.Profiles) > 0 { @@ -110,7 +119,7 @@ func XmlTag(param *properties.SpecParam) string { suffix = ",omitempty" } - return fmt.Sprintf("`xml:\"%s%s\"`", param.Profiles[0].Xpath[len(param.Profiles[0].Xpath)-1], suffix) + return fmt.Sprintf("`xml:\"%s%s\"`", XmlName(param), suffix) } return "" diff --git a/specs/device/dns.yaml b/specs/device/dns.yaml index 1991704f..20960ae3 100644 --- a/specs/device/dns.yaml +++ b/specs/device/dns.yaml @@ -71,15 +71,12 @@ spec: - xpath: ["servers"] spec: - properties: - params: - primary: - description: 'Primary DNS server IP address' - profiles: - - - xpath: ["primary"] - secondary: - description: 'Secondary DNS server IP address' - profiles: - - - xpath: ["secondary"] + params: + primary: + description: 'Primary DNS server IP address' + profiles: + - xpath: [ "primary" ] + secondary: + description: 'Secondary DNS server IP address' + profiles: + - xpath: [ "secondary" ] diff --git a/templates/sdk/config.tmpl b/templates/sdk/config.tmpl index 6ff63e36..4dad7748 100644 --- a/templates/sdk/config.tmpl +++ b/templates/sdk/config.tmpl @@ -183,12 +183,22 @@ {{- end}} func (c configXml) MarshalXML(e *xml.Encoder, start xml.StartElement) error { -if c.NtpServers != nil { -start.Name = xml.Name{Local: "ntp-servers"} -if err := e.EncodeElement(c.NtpServers, start); err != nil { -return err -} -} +{{- range $_, $param := $.Spec.Params}} + if c.{{$param.Name.CamelCase}} != nil { + start.Name = xml.Name{Local: "{{xmlName $param}}"} + if err := e.EncodeElement(c.{{$param.Name.CamelCase}}, start); err != nil { + return err + } + } +{{- end}} +{{- range $_, $param := $.Spec.OneOf}} + if c.{{$param.Name.CamelCase}} != nil { + start.Name = xml.Name{Local: "{{xmlName $param}}"} + if err := e.EncodeElement(c.{{$param.Name.CamelCase}}, start); err != nil { + return err + } + } +{{- end}} for _, v := range c.Misc { if err := e.Encode(v); err != nil {