package yamlsaver import "slices" // This struct is used to generate indexes for ordering of map keys. // The ordering defined based on any predefined Order in `Order` field // or running Order based on `index` type Order struct { index int order []string } func NewOrder(o []string) *Order { return &Order{index: 0, order: o} } // Returns an integer which represents the order of map key in resulting // The lower the index, the earlier in the list the key is. // If the order is not predefined, it uses running order and any subsequential call to // order.Get returns an increasing index. func (o *Order) Get(key string) int { index := slices.Index(o.order, key) // If the key is found in predefined order list // We return a negative index which put the value at the top of the order compared to other // not predefined keys. The earlier value in predefined list, the lower negative index value if index != -1 { return index - len(o.order) } // Otherwise we just increase the order index o.index += 1 return o.index }