package ini import ( "fmt" "io" "git.ali33.ru/fcg-xvii/go-tools/text/config" "git.ali33.ru/fcg-xvii/go-tools/value" ) func newConfig() *Config { mainSection := []config.Section{ newSection(), } return &Config{ sections: map[string][]config.Section{ "main": mainSection, }, } } type Config struct { sections map[string][]config.Section } func (s *Config) Sections(name string) ([]config.Section, bool) { sections, check := s.sections[name] return sections, check } func (s *Config) Section(name string) (config.Section, bool) { if sections, check := s.Sections(name); check { return sections[0], true } return nil, false } func (s *Config) AppendSection(name string) config.Section { section := newSection() if sections, check := s.Sections(name); check { sections = append(sections, section) s.sections[name] = sections } else { s.sections[name] = []config.Section{section} } return section } func (s *Config) ValueSetup(name string, ptr interface{}) bool { if main, check := s.Section("main"); check { return main.ValueSetup(name, ptr) } return false } func (s *Config) Value(name string) (value.Value, bool) { if main, check := s.Section("main"); check { return main.Value(name) } return value.Value{}, false } func (s *Config) ValueDefault(name string, defaultVal interface{}) interface{} { s.ValueSetup(name, &defaultVal) return defaultVal } func (s *Config) Save(w io.Writer) (err error) { for name, sections := range s.sections { for _, section := range sections { if _, err = w.Write([]byte(fmt.Sprintf("[%v]\n", name))); err != nil { return } if err = section.Save(w); err != nil { return } } } return }