Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 509bdc1a70 | |||
| 4af838c9ab | |||
| 7d010c4b7b |
308
ini.go
308
ini.go
@@ -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,18 +14,32 @@ type Configuration struct {
|
|||||||
file *ini.File
|
file *ini.File
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewConfiguration(fileLocation string, defaultConfig string) *Configuration {
|
func CreateConfigurationFile(fileLocation string, defaultConfig string) error {
|
||||||
conf := new(Configuration)
|
err := createFile(fileLocation, []byte(defaultConfig))
|
||||||
conf.fileLocation = fileLocation
|
if err != nil {
|
||||||
conf.createAndLoad(defaultConfig)
|
return err
|
||||||
return conf
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadConfiguration(fileLocation string) *Configuration {
|
func NewConfiguration(fileLocation string, defaultConfig string) (*Configuration, error) {
|
||||||
conf := new(Configuration)
|
conf := new(Configuration)
|
||||||
conf.fileLocation = fileLocation
|
conf.fileLocation = fileLocation
|
||||||
conf.load()
|
err := conf.createAndLoad(defaultConfig)
|
||||||
return conf
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return conf, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadConfiguration(fileLocation string) (*Configuration, error) {
|
||||||
|
conf := new(Configuration)
|
||||||
|
conf.fileLocation = fileLocation
|
||||||
|
err := conf.load()
|
||||||
|
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) {
|
||||||
@@ -52,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
|
||||||
@@ -83,127 +101,265 @@ 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)
|
return
|
||||||
}
|
}
|
||||||
fmt.Printf("New Val: Split Path: %v", 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)
|
return
|
||||||
}
|
}
|
||||||
key.SetValue(value)
|
key.SetValue(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) SetValueErr(path string, value string) error {
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
err = nil
|
||||||
|
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\n", path, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
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\n", path, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
key.SetValue(value)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsString(path string) string {
|
func (config *Configuration) GetAsString(path string) string {
|
||||||
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 ""
|
||||||
}
|
}
|
||||||
return key.String()
|
return key.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsStringErr(path string) (string, error) {
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error getting path %v in config: %v\n", path, err)
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
return key.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsStrings(path string) []string {
|
func (config *Configuration) GetAsStrings(path string) []string {
|
||||||
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.Strings(",")
|
return key.Strings(",")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsInt(path string) int {
|
func (config *Configuration) GetAsStringsErr(path string) ([]string, error) {
|
||||||
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 nil, err
|
||||||
|
}
|
||||||
|
return key.Strings(","), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsInt(path string) int {
|
||||||
|
var i int
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error getting path %v in config: %v\n", path, err)
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
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
|
||||||
}
|
}
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsIntErr(path string) (int, error) {
|
||||||
|
var i int
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
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\n", err)
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return i, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsInts(path string) []int {
|
func (config *Configuration) GetAsInts(path string) []int {
|
||||||
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.Ints(",")
|
return key.Ints(",")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsUInt(path string) uint {
|
func (config *Configuration) GetAsIntsErr(path string) ([]int, error) {
|
||||||
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 nil, err
|
||||||
|
}
|
||||||
|
return key.Ints(","), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsUInt(path string) uint {
|
||||||
|
var i uint
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error getting path %v in config: %v\n", path, err)
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
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
|
||||||
}
|
}
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsUIntErr(path string) (uint, error) {
|
||||||
|
var i uint
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
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\n", err)
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return i, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsUInts(path string) []uint {
|
func (config *Configuration) GetAsUInts(path string) []uint {
|
||||||
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.Uints(",")
|
return key.Uints(",")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsFloat(path string) float64 {
|
func (config *Configuration) GetAsUIntsErr(path string) ([]uint, error) {
|
||||||
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 nil, err
|
||||||
|
}
|
||||||
|
return key.Uints(","), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsFloat(path string) float64 {
|
||||||
|
var f float64
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error getting path %v in config: %v\n", path, err)
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
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
|
||||||
}
|
}
|
||||||
return f
|
return f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsFloatErr(path string) (float64, error) {
|
||||||
|
var f float64
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
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\n", err)
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return f, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsFloats(path string) []float64 {
|
func (config *Configuration) GetAsFloats(path string) []float64 {
|
||||||
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.Float64s(",")
|
return key.Float64s(",")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsBoolean(path string) bool {
|
func (config *Configuration) GetAsFloatsErr(path string) ([]float64, error) {
|
||||||
var b bool
|
|
||||||
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 nil, err
|
||||||
}
|
}
|
||||||
b, err = key.Bool()
|
return key.Float64s(","), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsBoolean(path string) bool {
|
||||||
|
key, err := config.GetKey(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error parsingn bool: %v", err)
|
fmt.Printf("Error getting path %v in config: %v\n", path, err)
|
||||||
os.Exit(1)
|
return false
|
||||||
|
}
|
||||||
|
b, err := key.Bool()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error parsing bool: %v\n", err)
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsBooleanErr(path string) (bool, error) {
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
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 parsing bool: %v\n", err)
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (config *Configuration) GetAsBooleans(path string) []bool {
|
func (config *Configuration) GetAsBooleans(path string) []bool {
|
||||||
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.Bools(",")
|
return key.Bools(",")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config *Configuration) GetAsBooleansErr(path string) ([]bool, error) {
|
||||||
|
key, err := config.GetKey(path)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error getting path %v in config: %v\n", path, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return key.Bools(","), nil
|
||||||
|
}
|
||||||
|
|
||||||
func (config *Configuration) IsSet(path string) bool {
|
func (config *Configuration) IsSet(path string) bool {
|
||||||
key, err := config.GetKey(path)
|
key, err := config.GetKey(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -213,41 +369,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 {
|
||||||
_, err := os.Stat(config.fileLocation)
|
err := createFile(config.fileLocation, []byte(defaultConfig))
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
|
||||||
file, err := os.Create(config.fileLocation)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to create configuration file: %v", err)
|
return err
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
_, err = file.WriteString(defaultConfig)
|
err = config.load()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error creating configuration file: %v", err)
|
return err
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
} else if err != nil {
|
return nil
|
||||||
fmt.Printf("Error loading configuration file: %v", err)
|
|
||||||
os.Exit(1)
|
|
||||||
} else {
|
|
||||||
fmt.Printf("Configuration File already exists... loading")
|
|
||||||
}
|
|
||||||
config.load()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) 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)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
_, err = file.Write(data)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error writing to file: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
} else if err != nil {
|
||||||
|
fmt.Printf("Error creating file: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("File already exists...")
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user