krystal/go-katapult

View on GitHub
buildspec/system_disk.go

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package buildspec

import "encoding/xml"

type SystemDisk struct {
    Name           string          `json:"name,omitempty" yaml:"name,omitempty"`
    Size           int             `json:"size,omitempty" yaml:"size,omitempty"`
    Speed          string          `json:"speed,omitempty" yaml:"speed,omitempty"`
    IOProfile      *DiskIOProfile  `json:"io_profile,omitempty" yaml:"io_profile,omitempty"`
    FileSystemType string          `json:"file_system_type,omitempty" yaml:"file_system_type,omitempty"`
    BackupPolicies []*BackupPolicy `json:"backup_policies,omitempty" yaml:"backup_policies,omitempty"`
}

func (s *SystemDisk) MarshalXML(
    e *xml.Encoder,
    start xml.StartElement,
) error {
    x := &xmlSystemDisk{
        Name:           s.Name,
        Size:           s.Size,
        Speed:          s.Speed,
        IOProfile:      s.IOProfile,
        FileSystemType: s.FileSystemType,
    }

    if len(s.BackupPolicies) > 0 {
        x.BackupPolicies = &xmlBackupPolicies{
            BackupPolicies: s.BackupPolicies,
        }
    }

    return e.EncodeElement(x, start)
}

func (s *SystemDisk) UnmarshalXML(
    d *xml.Decoder,
    start xml.StartElement,
) error {
    x := &xmlSystemDisk{}
    _ = d.DecodeElement(x, &start)

    v := SystemDisk{
        Name:           x.Name,
        Size:           x.Size,
        Speed:          x.Speed,
        IOProfile:      x.IOProfile,
        FileSystemType: x.FileSystemType,
    }

    if x.BackupPolicies != nil {
        v.BackupPolicies = x.BackupPolicies.BackupPolicies
    }

    *s = v

    return nil
}

type xmlSystemDisk struct {
    Name           string             `xml:",omitempty"`
    Size           int                `xml:",omitempty"`
    Speed          string             `xml:",omitempty"`
    IOProfile      *DiskIOProfile     `xml:",omitempty"`
    FileSystemType string             `xml:",omitempty"`
    BackupPolicies *xmlBackupPolicies `xml:",omitempty"`
}

type xmlSystemDisks struct {
    SystemDisks []*SystemDisk `xml:"Disk,omitempty"`
}