| package configschema |
| |
| // NoneRequired returns a deep copy of the receiver with any required |
| // attributes translated to optional. |
| func (b *Block) NoneRequired() *Block { |
| ret := &Block{} |
| |
| if b.Attributes != nil { |
| ret.Attributes = make(map[string]*Attribute, len(b.Attributes)) |
| } |
| for name, attrS := range b.Attributes { |
| ret.Attributes[name] = attrS.forceOptional() |
| } |
| |
| if b.BlockTypes != nil { |
| ret.BlockTypes = make(map[string]*NestedBlock, len(b.BlockTypes)) |
| } |
| for name, blockS := range b.BlockTypes { |
| ret.BlockTypes[name] = blockS.noneRequired() |
| } |
| |
| return ret |
| } |
| |
| func (b *NestedBlock) noneRequired() *NestedBlock { |
| ret := *b |
| ret.Block = *(ret.Block.NoneRequired()) |
| ret.MinItems = 0 |
| ret.MaxItems = 0 |
| return &ret |
| } |
| |
| func (a *Attribute) forceOptional() *Attribute { |
| ret := *a |
| ret.Optional = true |
| ret.Required = false |
| return &ret |
| } |