package configuration import ( "encoding/json" "github.com/magiconair/properties" "io" "os" "github.com/pelletier/go-toml/v2" "gopkg.in/yaml.v3" ) func (s *setting[C]) Export() *setting[C] { return s } func (s *setting[C]) writeJson(writer io.Writer) error { encoder := json.NewEncoder(writer) return encoder.Encode(s.config) } func (s *setting[C]) writeYaml(writer io.Writer) error { encoder := yaml.NewEncoder(writer) return encoder.Encode(s.config) } func (s *setting[C]) writeToml(writer io.Writer) error { encoder := toml.NewEncoder(writer) return encoder.Encode(s.config) } func (s *setting[C]) writeProperties(writer io.Writer) error { m, errors := getMapForProperties[C](s.config) if len(errors) > 0 { for _, err := range errors { s.errors = append(s.errors, err) } } p := properties.LoadMap(m) _, err := p.Write(writer, properties.UTF8) return err } func (s *setting[C]) WriteFile(fn string, format Format) *setting[C] { var err error var file *os.File if fn == "" { file = os.Stdout } else { file, err = os.Create(fn) if err != nil { s.errors = append(s.errors, err) return s } } defer file.Close() s.Write(io.Writer(file), format) return s } func (s *setting[C]) Write(writer io.Writer, format Format) *setting[C] { var err error switch format { case Json: err = s.writeJson(writer) case Yaml: err = s.writeYaml(writer) case Toml: err = s.writeToml(writer) case Properties: err = s.writeProperties(writer) default: err = newFormatNotSupportedError(format) } if err != nil { s.errors = append(s.errors, err) } return s }