Skip to content
Snippets Groups Projects
export.go 1.58 KiB
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
}