internal/processor/libArchitecture.go (60 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. package processor import ( "encoding/json" "fmt" mapset "github.com/deckarep/golang-set/v2" "gopkg.in/yaml.v3" ) // LibArchitecture represents a management group hierarchy in the library. type LibArchitecture struct { Name string `json:"name" yaml:"name"` ManagementGroups []LibArchitectureManagementGroup `json:"management_groups" yaml:"management_groups"` } // LibArchitectureManagementGroup represents a management group in the library. type LibArchitectureManagementGroup struct { Id string `json:"id" yaml:"id"` DisplayName string `json:"display_name" yaml:"display_name"` Archetypes mapset.Set[string] `json:"archetypes" yaml:"archetypes"` ParentId *string `json:"parent_id" yaml:"parent_id"` Exists bool `json:"exists" yaml:"exists"` } type libArchitectureUnmarshaler struct { Name string `json:"name" yaml:"name"` ManagementGroups []struct { Id string `json:"id" yaml:"id"` DisplayName string `json:"display_name" yaml:"display_name"` Archetypes []string `json:"archetypes" yaml:"archetypes"` ParentId *string `json:"parent_id" yaml:"parent_id"` Exists bool `json:"exists" yaml:"exists"` } `json:"management_groups" yaml:"management_groups"` } // UnmarshalJSON creates a LibArchitecture from the supplied JSON bytes. func (la *LibArchitecture) UnmarshalJSON(data []byte) error { tmp := libArchitectureUnmarshaler{} if err := json.Unmarshal(data, &tmp); err != nil { return fmt.Errorf("LibArchitecture.UnmarshalJSON: json.Unmarshal error: %w", err) } la.Name = tmp.Name la.ManagementGroups = make([]LibArchitectureManagementGroup, len(tmp.ManagementGroups)) for i, mg := range tmp.ManagementGroups { la.ManagementGroups[i].Id = mg.Id la.ManagementGroups[i].DisplayName = mg.DisplayName la.ManagementGroups[i].Archetypes = mapset.NewSet[string](mg.Archetypes...) la.ManagementGroups[i].ParentId = mg.ParentId la.ManagementGroups[i].Exists = mg.Exists } return nil } // UnmarshalJSON creates a LibArchitecture from the supplied JSON bytes. func (la *LibArchitecture) UnmarshalYAML(n *yaml.Node) error { tmp := libArchitectureUnmarshaler{} if err := n.Decode(&tmp); err != nil { return fmt.Errorf("LibArchitecture.UnmarshalYAML: yaml.Node.Decode error: %w", err) } la.Name = tmp.Name la.ManagementGroups = make([]LibArchitectureManagementGroup, len(tmp.ManagementGroups)) for i, mg := range tmp.ManagementGroups { la.ManagementGroups[i].Id = mg.Id la.ManagementGroups[i].DisplayName = mg.DisplayName la.ManagementGroups[i].Archetypes = mapset.NewSet[string](mg.Archetypes...) la.ManagementGroups[i].ParentId = mg.ParentId la.ManagementGroups[i].Exists = mg.Exists } return nil }