You've already forked civ
This commit is contained in:
142
pkg/config/config.go
Normal file
142
pkg/config/config.go
Normal file
@ -0,0 +1,142 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"git.cryptic.systems/volker.raschek/civ/pkg/domain"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type FileReader interface {
|
||||
ReadFile() (*domain.Config, error)
|
||||
}
|
||||
|
||||
func NewFileReader(name string) FileReader {
|
||||
switch filepath.Ext(name) {
|
||||
case ".json":
|
||||
return &JSONReader{
|
||||
name: name,
|
||||
}
|
||||
default:
|
||||
return &YAMLReader{
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type FileWriter interface {
|
||||
WriteFile(config *domain.Config) error
|
||||
}
|
||||
|
||||
func NewFileWriter(name string) FileWriter {
|
||||
switch filepath.Ext(name) {
|
||||
case ".json":
|
||||
return &JSONWriter{
|
||||
name: name,
|
||||
}
|
||||
default:
|
||||
return &YAMLWriter{
|
||||
name: name,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type JSONReader struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (jr *JSONReader) read(r io.Reader) (*domain.Config, error) {
|
||||
config := new(domain.Config)
|
||||
jsonDecoder := json.NewDecoder(r)
|
||||
|
||||
err := jsonDecoder.Decode(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
func (jr *JSONReader) ReadFile() (*domain.Config, error) {
|
||||
f, err := os.Open(jr.name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
return jr.read(f)
|
||||
}
|
||||
|
||||
type JSONWriter struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (jw *JSONWriter) WriteFile(config *domain.Config) error {
|
||||
f, err := os.Create(jw.name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() { f.Close() }()
|
||||
return jw.write(f, config)
|
||||
}
|
||||
|
||||
func (jw *JSONWriter) write(w io.Writer, config *domain.Config) error {
|
||||
jsonEncoder := json.NewEncoder(w)
|
||||
jsonEncoder.SetIndent("", " ")
|
||||
|
||||
err := jsonEncoder.Encode(config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type YAMLReader struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (yr *YAMLReader) ReadFile() (*domain.Config, error) {
|
||||
f, err := os.Open(yr.name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
return yr.read(f)
|
||||
}
|
||||
|
||||
func (yr *YAMLReader) read(r io.Reader) (*domain.Config, error) {
|
||||
config := new(domain.Config)
|
||||
yamlDecoder := yaml.NewDecoder(r)
|
||||
|
||||
err := yamlDecoder.Decode(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
type YAMLWriter struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (yw *YAMLWriter) WriteFile(config *domain.Config) error {
|
||||
f, err := os.Create(yw.name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() { f.Close() }()
|
||||
return yw.write(f, config)
|
||||
}
|
||||
|
||||
func (yw *YAMLWriter) write(w io.Writer, config *domain.Config) error {
|
||||
err := yaml.NewEncoder(w).Encode(config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user