package config import "encoding/json" type SectionValue struct { Name string Value map[string]ConfigValue Comments []string } func NewNamedSection(name string) SectionValue { return SectionValue{ Name: name, Value: make(map[string]ConfigValue), Comments: make([]string, 0), } } func NewAnonymousSection() SectionValue { return SectionValue{ Value: make(map[string]ConfigValue), Comments: make([]string, 0), } } func (this SectionValue) GetType() ConfigType { return SECTION } func (this SectionValue) GetValue() interface{} { return this.Value } func (this SectionValue) AddComment(comment string) { this.Comments = append(this.Comments, comment) } func (this SectionValue) Set(name string, value ConfigValue) { this.Value[name] = value } func (this SectionValue) Get(name string) ConfigValue { return this.Value[name] } func (this SectionValue) GetSection(name string) SectionValue { value := this.Value[name] return value.(SectionValue) } func (this SectionValue) GetString(name string) StringValue { value := this.Value[name] return value.(StringValue) } func (this SectionValue) GetInteger(name string) IntegerValue { value := this.Value[name] return value.(IntegerValue) } func (this SectionValue) GetFloat(name string) FloatValue { value := this.Value[name] return value.(FloatValue) } func (this SectionValue) Contains(name string) bool { _, ok := this.Value[name] return ok } func (this SectionValue) ToJSON() ([]byte, error) { data, err := this.ToMap() if err != nil { return nil, err } return json.Marshal(data) } func (this SectionValue) ToMap() (map[string]interface{}, error) { settings := make(map[string]interface{}) for name, value := range this.Value { if value.GetType() == SECTION { data, err := value.(SectionValue).ToMap() if err != nil { return nil, err } settings[name] = data } else { settings[name] = value.GetValue() } } return settings, nil }