blgo/config.go

57 lines
1.1 KiB
Go

package main
import (
"encoding/json"
"errors"
"os"
)
const configPath = "config.json"
type config struct {
Port int `json:"port"`
ThemeName string `json:"theme"`
}
// createDefaultConfig checks if a config file is present. If not, it creates the default config file.
// It returns true if a file is created.
func createDefaultConfig() (bool, error) {
info, err := os.Stat(configPath)
if err == nil {
if info.IsDir() {
return false, errors.New("config.json is a directory")
}
return false, nil
}
if !os.IsNotExist(err) {
return false, err
}
// Create the file.
f, err := os.Create(configPath)
if err != nil {
return false, err
}
encoder := json.NewEncoder(f)
encoder.SetIndent("", "\t")
err = encoder.Encode(config{
Port: 80,
ThemeName: "default",
})
return true, err
}
// parseConfig parses the config file into a struct
func parseConfig() (config, error) {
// Open the file.
f, err := os.Open(configPath)
if err != nil {
return config{}, err
}
defer f.Close()
// Decode it into the config struct.
var cfg config
err = json.NewDecoder(f).Decode(&cfg)
return cfg, err
}