From 852aa03280f91b4ad87971852d075daedea6ee7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Cluseau?= Date: Sat, 7 Jul 2018 10:08:42 +1100 Subject: [PATCH] feat: more load options --- config/config.go | 60 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/config/config.go b/config/config.go index ca246db..dc9a902 100644 --- a/config/config.go +++ b/config/config.go @@ -2,12 +2,54 @@ package config import ( "fmt" - "io/ioutil" + "io" "os" yaml "gopkg.in/yaml.v2" ) +// Load a config from a file. +func Load(file string) (config *Config, err error) { + f, err := os.Open(file) + if err != nil { + return + } + + defer f.Close() + + config, err = Read(f) + if err != nil { + return nil, fmt.Errorf("failed to parse %s: %v", file, err) + } + + return +} + +// Read a config from a reader. +func Read(reader io.Reader) (config *Config, err error) { + config = &Config{} + + err = yaml.NewDecoder(reader).Decode(config) + + if err != nil { + return nil, err + } + + return +} + +// Parse the config in data. +func Parse(data []byte) (config *Config, err error) { + config = &Config{} + + err = yaml.Unmarshal(data, config) + if err != nil { + return nil, err + } + + return +} + // Config represent this system's configuration type Config struct { Vars []VarDefault @@ -83,19 +125,3 @@ type NetworkDef struct { Optional bool Script string } - -func Load(file string) (config *Config, err error) { - config = &Config{} - - configData, err := ioutil.ReadFile(file) - if err != nil { - return nil, fmt.Errorf("failed to read %s: %v", file, err) - } - - err = yaml.Unmarshal(configData, config) - if err != nil { - return nil, fmt.Errorf("failed to parse %s: %v", file, err) - } - - return -}