gosimpleconf/gosimpleconf.go

62 lines
1023 B
Go

package gosimpleconf
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
func Load(filename string) (map[string]string, error) {
var err error
file, err := os.Open(filename)
if err != nil {
return nil, err
}
defer file.Close()
parsedMap, err := parse(file)
if err != nil {
return nil, err
}
return parsedMap, nil
}
func parse(config io.Reader) (map[string]string, error) {
var err error
parsedMap := make(map[string]string)
scanner := bufio.NewScanner(config)
for scanner.Scan() {
line := scanner.Text()
trimmed := strings.TrimSpace(line)
if len(trimmed) == 0 {
// ignore empty lines
continue
}
if trimmed[0] == '#' {
// ignore comments
continue
}
split := strings.Split(trimmed, "=")
if len(split) != 2 {
return nil, fmt.Errorf("failed to parse config line: %v", trimmed)
}
key := strings.TrimSpace(split[0])
value := strings.TrimSpace(split[1])
parsedMap[key] = value
}
if err = scanner.Err(); err != nil {
return nil, err
}
return parsedMap, nil
}