diff options
Diffstat (limited to 'formats/config/section.go')
-rw-r--r-- | formats/config/section.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/formats/config/section.go b/formats/config/section.go new file mode 100644 index 0000000..6d6a891 --- /dev/null +++ b/formats/config/section.go @@ -0,0 +1,76 @@ +package config + +import "strings" + +type Section struct { + Name string + Options Options + Subsections Subsections +} + +type Subsection struct { + Name string + Options Options +} + +type Sections []*Section + +type Subsections []*Subsection + +func (s *Section) IsName(name string) bool { + return strings.ToLower(s.Name) == strings.ToLower(name) +} + +func (s *Subsection) IsName(name string) bool { + return s.Name == name +} + +func (s *Section) Option(key string) string { + return s.Options.Get(key) +} + +func (s *Subsection) Option(key string) string { + return s.Options.Get(key) +} + +func (s *Section) AddOption(key string, value string) *Section { + s.Options = s.Options.withAddedOption(key, value) + return s +} + +func (s *Subsection) AddOption(key string, value string) *Subsection { + s.Options = s.Options.withAddedOption(key, value) + return s +} + +func (s *Section) SetOption(key string, value string) *Section { + s.Options = s.Options.withSettedOption(key, value) + return s +} + +func (s *Section) RemoveOption(key string) *Section { + s.Options = s.Options.withoutOption(key) + return s +} + +func (s *Subsection) SetOption(key string, value string) *Subsection { + s.Options = s.Options.withSettedOption(key, value) + return s +} + +func (s *Subsection) RemoveOption(key string) *Subsection { + s.Options = s.Options.withoutOption(key) + return s +} + +func (s *Section) Subsection(name string) *Subsection { + for i := len(s.Subsections) - 1; i >= 0; i-- { + ss := s.Subsections[i] + if ss.IsName(name) { + return ss + } + } + ss := &Subsection{Name: name} + s.Subsections = append(s.Subsections, ss) + return ss +} |