diff --git a/ini.go b/ini.go index 58e5d3b..786220e 100644 --- a/ini.go +++ b/ini.go @@ -3,9 +3,10 @@ package ezconf import ( "errors" "fmt" - "gopkg.in/ini.v1" "os" "strings" + + "gopkg.in/ini.v1" ) type Configuration struct { @@ -13,22 +14,32 @@ type Configuration struct { file *ini.File } -func CreateConfigurationFile(fileLocation string, defaultConfig string) { - createFile(fileLocation, []byte(defaultConfig)) +func CreateConfigurationFile(fileLocation string, defaultConfig string) error { + err := createFile(fileLocation, []byte(defaultConfig)) + if err != nil { + return err + } + return nil } -func NewConfiguration(fileLocation string, defaultConfig string) *Configuration { +func NewConfiguration(fileLocation string, defaultConfig string) (*Configuration, error) { conf := new(Configuration) conf.fileLocation = fileLocation - conf.createAndLoad(defaultConfig) - return conf + err := conf.createAndLoad(defaultConfig) + if err != nil { + return nil, err + } + return conf, nil } -func LoadConfiguration(fileLocation string) *Configuration { +func LoadConfiguration(fileLocation string) (*Configuration, error) { conf := new(Configuration) conf.fileLocation = fileLocation - conf.load() - return conf + err := conf.load() + if err != nil { + return nil, err + } + return conf, nil } func (config *Configuration) GetSection(sectionName string) (*ini.Section, error) { @@ -56,7 +67,10 @@ func GetChildSections(section *ini.Section) (childSections []*ini.Section) { func CreateSection(path string, file *ini.File) error { pathSplit := strings.Split(path, ".") for i := 0; i < len(pathSplit)-1; i++ { - file.NewSections() + err := file.NewSections() + if err != nil { + return err + } } return nil @@ -87,125 +101,132 @@ func (config *Configuration) SetValue(path string, value string) { splitPath := strings.Split(path, ".") err = config.file.NewSections(splitPath[0 : len(splitPath)-1]...) if err != nil { - fmt.Printf("Error creating section %v in config: %v", path, err) + fmt.Printf("Error creating section %v in config: %v\n", path, err) os.Exit(1) } - fmt.Printf("New Val: Split Path: %v", splitPath) + fmt.Printf("New Val: Split Path: %v\n", splitPath) } key, err = config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) os.Exit(1) } key.SetValue(value) } -func (config *Configuration) GetAsString(path string) string { +func (config *Configuration) GetAsString(path string) (string, error) { key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return "", nil } - return key.String() + return key.String(), nil } -func (config *Configuration) GetAsStrings(path string) []string { +func (config *Configuration) GetAsStrings(path string) ([]string, error) { key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return nil, err } - return key.Strings(",") + return key.Strings(","), nil } -func (config *Configuration) GetAsInt(path string) int { +func (config *Configuration) GetAsInt(path string) (int, error) { var i int - var err error key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return 0, err } i, err = key.Int() if err != nil { - fmt.Printf("Error parsing integer: %v", err) - os.Exit(1) + fmt.Printf("Error parsing integer: %v\n", err) + return 0, err } - return i + return i, nil } -func (config *Configuration) GetAsInts(path string) []int { +func (config *Configuration) GetAsInts(path string) ([]int, error) { key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return nil, err } - return key.Ints(",") + return key.Ints(","), nil } -func (config *Configuration) GetAsUInt(path string) uint { +func (config *Configuration) GetAsUInt(path string) (uint, error) { var i uint - var err error key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return 0, err } i, err = key.Uint() if err != nil { - fmt.Printf("Error parsing integer: %v", err) - os.Exit(1) + fmt.Printf("Error parsing integer: %v\n", err) + return 0, err } - return i + return i, nil } -func (config *Configuration) GetAsUInts(path string) []uint { +func (config *Configuration) GetAsUInts(path string) ([]uint, error) { key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return nil, err } - return key.Uints(",") + return key.Uints(","), nil } -func (config *Configuration) GetAsFloat(path string) float64 { +func (config *Configuration) GetAsFloat(path string) (float64, error) { var f float64 - var err error key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return 0, err } f, err = key.Float64() if err != nil { - fmt.Printf("Error parsing float: %v", err) - os.Exit(1) + fmt.Printf("Error parsing float: %v\n", err) + return 0, err } - return f + return f, nil } -func (config *Configuration) GetAsFloats(path string) []float64 { +func (config *Configuration) GetAsFloats(path string) ([]float64, error) { key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return nil, err } - return key.Float64s(",") + return key.Float64s(","), nil } -func (config *Configuration) GetAsBoolean(path string) bool { +func (config *Configuration) GetAsBoolean(path string) (bool, error) { var b bool var err error key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return false, err } b, err = key.Bool() if err != nil { - fmt.Printf("Error parsingn bool: %v", err) - os.Exit(1) + fmt.Printf("Error parsing bool: %v\n", err) + return false, err } - return b + return b, nil } -func (config *Configuration) GetAsBooleans(path string) []bool { +func (config *Configuration) GetAsBooleans(path string) ([]bool, error) { key, err := config.GetKey(path) if err != nil { - fmt.Printf("Error getting path %v in config: %v", path, err) + fmt.Printf("Error getting path %v in config: %v\n", path, err) + return nil, err } - return key.Bools(",") + return key.Bools(","), nil } func (config *Configuration) IsSet(path string) bool { @@ -217,45 +238,57 @@ func (config *Configuration) IsSet(path string) bool { return key.Value() != "" } -func (config *Configuration) createAndLoad(defaultConfig string) { - createFile(config.fileLocation, []byte(defaultConfig)) - config.load() +func (config *Configuration) createAndLoad(defaultConfig string) error { + err := createFile(config.fileLocation, []byte(defaultConfig)) + if err != nil { + return err + } + err = config.load() + if err != nil { + return err + } + return nil } -func (config *Configuration) load() { +func (config *Configuration) load() error { var err error config.file, err = ini.Load(config.fileLocation) if err != nil { - fmt.Printf("Failed to open configuration file: %v", err) - os.Exit(1) + fmt.Printf("Failed to open configuration file: %v\n", err) + return err } + return nil } -func (config *Configuration) Save() { +func (config *Configuration) Save() error { err := config.file.SaveTo(config.fileLocation) if err != nil { - fmt.Printf("Failed to save configuration file: %v", err) - os.Exit(1) + fmt.Printf("Failed to save configuration file: %v\n", err) + return err } + return nil } -func createFile(fileLocation string, data []byte) { +func createFile(fileLocation string, data []byte) error { _, err := os.Stat(fileLocation) if errors.Is(err, os.ErrNotExist) { file, err := os.Create(fileLocation) if err != nil { fmt.Printf("Failed to create file: %v", err) - os.Exit(1) + return err } + defer file.Close() _, err = file.Write(data) if err != nil { fmt.Printf("Error writing to file: %v", err) - os.Exit(1) + return err } + return nil } else if err != nil { fmt.Printf("Error creating file: %v", err) - os.Exit(1) - } else { - fmt.Printf("File already exists...") + return err } + + fmt.Printf("File already exists...") + return nil }