Implement better error handling and fix logging newlines

This commit is contained in:
2026-02-21 15:35:02 +01:00
parent 7d010c4b7b
commit bb0139ac0a

171
ini.go
View File

@@ -3,9 +3,10 @@ package ezconf
import ( import (
"errors" "errors"
"fmt" "fmt"
"gopkg.in/ini.v1"
"os" "os"
"strings" "strings"
"gopkg.in/ini.v1"
) )
type Configuration struct { type Configuration struct {
@@ -13,22 +14,32 @@ type Configuration struct {
file *ini.File file *ini.File
} }
func CreateConfigurationFile(fileLocation string, defaultConfig string) { func CreateConfigurationFile(fileLocation string, defaultConfig string) error {
createFile(fileLocation, []byte(defaultConfig)) 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 := new(Configuration)
conf.fileLocation = fileLocation conf.fileLocation = fileLocation
conf.createAndLoad(defaultConfig) err := conf.createAndLoad(defaultConfig)
return conf if err != nil {
return nil, err
}
return conf, nil
} }
func LoadConfiguration(fileLocation string) *Configuration { func LoadConfiguration(fileLocation string) (*Configuration, error) {
conf := new(Configuration) conf := new(Configuration)
conf.fileLocation = fileLocation conf.fileLocation = fileLocation
conf.load() err := conf.load()
return conf if err != nil {
return nil, err
}
return conf, nil
} }
func (config *Configuration) GetSection(sectionName string) (*ini.Section, error) { 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 { func CreateSection(path string, file *ini.File) error {
pathSplit := strings.Split(path, ".") pathSplit := strings.Split(path, ".")
for i := 0; i < len(pathSplit)-1; i++ { for i := 0; i < len(pathSplit)-1; i++ {
file.NewSections() err := file.NewSections()
if err != nil {
return err
}
} }
return nil return nil
@@ -87,125 +101,132 @@ func (config *Configuration) SetValue(path string, value string) {
splitPath := strings.Split(path, ".") splitPath := strings.Split(path, ".")
err = config.file.NewSections(splitPath[0 : len(splitPath)-1]...) err = config.file.NewSections(splitPath[0 : len(splitPath)-1]...)
if err != nil { 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) 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) key, err = config.GetKey(path)
if err != nil { 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) os.Exit(1)
} }
key.SetValue(value) key.SetValue(value)
} }
func (config *Configuration) GetAsString(path string) string { func (config *Configuration) GetAsString(path string) (string, error) {
key, err := config.GetKey(path) key, err := config.GetKey(path)
if err != nil { 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) key, err := config.GetKey(path)
if err != nil { 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 i int
var err error
key, err := config.GetKey(path) key, err := config.GetKey(path)
if err != nil { 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() i, err = key.Int()
if err != nil { if err != nil {
fmt.Printf("Error parsing integer: %v", err) fmt.Printf("Error parsing integer: %v\n", err)
os.Exit(1) 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) key, err := config.GetKey(path)
if err != nil { 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 i uint
var err error
key, err := config.GetKey(path) key, err := config.GetKey(path)
if err != nil { 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() i, err = key.Uint()
if err != nil { if err != nil {
fmt.Printf("Error parsing integer: %v", err) fmt.Printf("Error parsing integer: %v\n", err)
os.Exit(1) 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) key, err := config.GetKey(path)
if err != nil { 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 f float64
var err error
key, err := config.GetKey(path) key, err := config.GetKey(path)
if err != nil { 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() f, err = key.Float64()
if err != nil { if err != nil {
fmt.Printf("Error parsing float: %v", err) fmt.Printf("Error parsing float: %v\n", err)
os.Exit(1) 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) key, err := config.GetKey(path)
if err != nil { 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 b bool
var err error var err error
key, err := config.GetKey(path) key, err := config.GetKey(path)
if err != nil { 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() b, err = key.Bool()
if err != nil { if err != nil {
fmt.Printf("Error parsingn bool: %v", err) fmt.Printf("Error parsing bool: %v\n", err)
os.Exit(1) 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) key, err := config.GetKey(path)
if err != nil { 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 { func (config *Configuration) IsSet(path string) bool {
@@ -217,45 +238,57 @@ func (config *Configuration) IsSet(path string) bool {
return key.Value() != "" return key.Value() != ""
} }
func (config *Configuration) createAndLoad(defaultConfig string) { func (config *Configuration) createAndLoad(defaultConfig string) error {
createFile(config.fileLocation, []byte(defaultConfig)) err := createFile(config.fileLocation, []byte(defaultConfig))
config.load() 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 var err error
config.file, err = ini.Load(config.fileLocation) config.file, err = ini.Load(config.fileLocation)
if err != nil { if err != nil {
fmt.Printf("Failed to open configuration file: %v", err) fmt.Printf("Failed to open configuration file: %v\n", err)
os.Exit(1) return err
} }
return nil
} }
func (config *Configuration) Save() { func (config *Configuration) Save() error {
err := config.file.SaveTo(config.fileLocation) err := config.file.SaveTo(config.fileLocation)
if err != nil { if err != nil {
fmt.Printf("Failed to save configuration file: %v", err) fmt.Printf("Failed to save configuration file: %v\n", err)
os.Exit(1) return err
} }
return nil
} }
func createFile(fileLocation string, data []byte) { func createFile(fileLocation string, data []byte) error {
_, err := os.Stat(fileLocation) _, err := os.Stat(fileLocation)
if errors.Is(err, os.ErrNotExist) { if errors.Is(err, os.ErrNotExist) {
file, err := os.Create(fileLocation) file, err := os.Create(fileLocation)
if err != nil { if err != nil {
fmt.Printf("Failed to create file: %v", err) fmt.Printf("Failed to create file: %v", err)
os.Exit(1) return err
} }
defer file.Close()
_, err = file.Write(data) _, err = file.Write(data)
if err != nil { if err != nil {
fmt.Printf("Error writing to file: %v", err) fmt.Printf("Error writing to file: %v", err)
os.Exit(1) return err
} }
return nil
} else if err != nil { } else if err != nil {
fmt.Printf("Error creating file: %v", err) fmt.Printf("Error creating file: %v", err)
os.Exit(1) return err
} else {
fmt.Printf("File already exists...")
} }
fmt.Printf("File already exists...")
return nil
} }