From e59b06e5195da90da837f5b660e6b76cca9fd632 Mon Sep 17 00:00:00 2001 From: ikiris <4852950+ikiris@users.noreply.github.com> Date: Sun, 16 Jul 2023 07:25:52 -0700 Subject: [PATCH] fix(vm): add missing unmarshal for vm custom startup order (#428) * fix b421 - add missing unmarshal for custom startup order * fix linter errors --------- Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com> --- proxmox/nodes/vms/vms_types.go | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/proxmox/nodes/vms/vms_types.go b/proxmox/nodes/vms/vms_types.go index db6f93b9..cfe1a13f 100644 --- a/proxmox/nodes/vms/vms_types.go +++ b/proxmox/nodes/vms/vms_types.go @@ -1696,6 +1696,49 @@ func (r *CustomSMBIOS) UnmarshalJSON(b []byte) error { return nil } +// UnmarshalJSON converts a CustomStartupOrder string to an object. +func (r *CustomStartupOrder) UnmarshalJSON(b []byte) error { + var s string + + if err := json.Unmarshal(b, &s); err != nil { + return fmt.Errorf("failed to unmarshal CustomStartupOrder: %w", err) + } + + pairs := strings.Split(s, ",") + + for _, p := range pairs { + v := strings.Split(strings.TrimSpace(p), "=") + + if len(v) == 2 { + switch v[0] { + case "order": + order, err := strconv.Atoi(v[1]) + if err != nil { + return fmt.Errorf("failed to parse int: %w", err) + } + + r.Order = &order + case "up": + up, err := strconv.Atoi(v[1]) + if err != nil { + return fmt.Errorf("failed to parse int: %w", err) + } + + r.Up = &up + case "down": + down, err := strconv.Atoi(v[1]) + if err != nil { + return fmt.Errorf("failed to parse int: %w", err) + } + + r.Down = &down + } + } + } + + return nil +} + // UnmarshalJSON converts a CustomStorageDevice string to an object. func (r *CustomStorageDevice) UnmarshalJSON(b []byte) error { var s string