diff --git a/util/templates/defaults.yaml b/util/templates/defaults.yaml index 316c8d15a..3fe09e663 100644 --- a/util/templates/defaults.yaml +++ b/util/templates/defaults.yaml @@ -14,6 +14,7 @@ params: description: en: Modbus Type de: Modbus Typ + required: true - name: host required: true description: diff --git a/util/templates/init.go b/util/templates/init.go index 65e3e9c34..619b9c729 100644 --- a/util/templates/init.go +++ b/util/templates/init.go @@ -73,7 +73,7 @@ func fromBytes(b []byte) (Template, error) { return Template{}, err } - for _, f := range []func() error{tmpl.ResolvePresets, tmpl.ResolveGroup, tmpl.UpdateParamsWithDefaults, tmpl.UpdateModbusParamsWithDefaults, tmpl.Validate} { + for _, f := range []func() error{tmpl.ResolvePresets, tmpl.ResolveGroup, tmpl.UpdateParamsWithDefaults, tmpl.UpdateModbusParamsWithDefaults, tmpl.SortRequiredParamsFirst, tmpl.Validate} { if err := f(); err != nil { return tmpl, fmt.Errorf("template '%s': %w", tmpl.Template, err) } diff --git a/util/templates/template.go b/util/templates/template.go index 6c92cc2af..247b07a4a 100644 --- a/util/templates/template.go +++ b/util/templates/template.go @@ -65,6 +65,20 @@ func (t *Template) UpdateModbusParamsWithDefaults() error { return nil } +func (t *Template) SortRequiredParamsFirst() error { + slices.SortStableFunc(t.Params, func(a, b Param) int { + if a.Required && !b.Required { + return -1 + } + if b.Required && !a.Required { + return +1 + } + return 0 + }) + + return nil +} + // validate the template (only rudimentary for now) func (t *Template) Validate() error { for _, c := range t.Capabilities {