v1.0.0
This commit is contained in:
161
ini.go
Normal file
161
ini.go
Normal file
@@ -0,0 +1,161 @@
|
||||
package ezconf
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"gopkg.in/ini.v1"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Configuration struct {
|
||||
fileLocation string
|
||||
file *ini.File
|
||||
}
|
||||
|
||||
func NewConfiguration(fileLocation string) *Configuration {
|
||||
conf := new(Configuration)
|
||||
conf.fileLocation = fileLocation
|
||||
conf.load()
|
||||
return conf
|
||||
}
|
||||
|
||||
func (config *Configuration) getSection(sectionName string) *ini.Section {
|
||||
section, err := config.file.GetSection(sectionName)
|
||||
if err != nil {
|
||||
fmt.Printf("Error getting section %v in config: %v", sectionName, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return section
|
||||
}
|
||||
|
||||
func getChildSection(section *ini.Section, childSectionName string) (childSection *ini.Section, err error) {
|
||||
childSections := section.ChildSections()
|
||||
for _, childSection := range childSections {
|
||||
if childSection.Name() == childSectionName {
|
||||
return childSection, nil
|
||||
}
|
||||
}
|
||||
return nil, errors.New("subsection " + childSectionName + " not found")
|
||||
}
|
||||
|
||||
func (config *Configuration) GetKey(path string) *ini.Key {
|
||||
splitPaths := strings.Split(path, ".")
|
||||
if len(splitPaths) == 1 {
|
||||
splitPaths = append([]string{"."}, splitPaths...)
|
||||
}
|
||||
section := config.getSection(splitPaths[0])
|
||||
var key *ini.Key
|
||||
var err error
|
||||
if len(splitPaths) > 2 {
|
||||
tempSection := section
|
||||
for i := 0; i < len(splitPaths)-1; i++ {
|
||||
tempSection, err = getChildSection(tempSection, splitPaths[i])
|
||||
if err != nil {
|
||||
fmt.Printf("Error getting child section %v: %v", splitPaths[i], err)
|
||||
os.Exit(1)
|
||||
}
|
||||
if len(splitPaths) == i+1 {
|
||||
key, err = tempSection.GetKey(splitPaths[i+1])
|
||||
if err != nil {
|
||||
fmt.Printf("Error getting key %v: %v", splitPaths[i+1], err)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
key, err = section.GetKey(splitPaths[1])
|
||||
if err != nil {
|
||||
fmt.Printf("Error getting key %v: %v", splitPaths[1], err)
|
||||
}
|
||||
}
|
||||
return key
|
||||
}
|
||||
|
||||
func (config *Configuration) GetString(path string) string {
|
||||
return config.GetKey(path).String()
|
||||
}
|
||||
|
||||
func (config *Configuration) GetStrings(path string) []string {
|
||||
return config.GetKey(path).Strings(",")
|
||||
}
|
||||
|
||||
func (config *Configuration) GetInt(path string) int {
|
||||
var i int
|
||||
var err error
|
||||
i, err = config.GetKey(path).Int()
|
||||
if err != nil {
|
||||
fmt.Printf("Error parsing integer: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
func (config *Configuration) GetInts(path string) []int {
|
||||
return config.GetKey(path).Ints(",")
|
||||
}
|
||||
|
||||
func (config *Configuration) GetUInt(path string) uint {
|
||||
var i uint
|
||||
var err error
|
||||
i, err = config.GetKey(path).Uint()
|
||||
if err != nil {
|
||||
fmt.Printf("Error parsing integer: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
func (config *Configuration) GetUInts(path string) []uint {
|
||||
return config.GetKey(path).Uints(",")
|
||||
}
|
||||
|
||||
func (config *Configuration) GetFloat(path string) float64 {
|
||||
var f float64
|
||||
var err error
|
||||
f, err = config.GetKey(path).Float64()
|
||||
if err != nil {
|
||||
fmt.Printf("Error parsing float: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return f
|
||||
}
|
||||
|
||||
func (config *Configuration) GetFloats(path string) []float64 {
|
||||
return config.GetKey(path).Float64s(",")
|
||||
}
|
||||
|
||||
func (config *Configuration) GetBoolean(path string) bool {
|
||||
var b bool
|
||||
var err error
|
||||
b, err = config.GetKey(path).Bool()
|
||||
if err != nil {
|
||||
fmt.Printf("Error parsingn bool: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
func (config *Configuration) GetBooleans(path string) []bool {
|
||||
return config.GetKey(path).Bools(",")
|
||||
}
|
||||
|
||||
func (config *Configuration) load() {
|
||||
var err error = nil
|
||||
config.file, err = ini.Load(config.fileLocation)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to open configuration file: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func (config *Configuration) Reload() {
|
||||
config.load()
|
||||
}
|
||||
|
||||
func (config *Configuration) Save() {
|
||||
err := config.file.SaveTo(config.fileLocation)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to save configuration file: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user