Files
mirror-sync/cmd/cli/config/config.go
2025-11-02 14:35:20 +01:00

61 lines
1.1 KiB
Go

package config
import (
"encoding/json"
"errors"
"os"
"path/filepath"
)
type (
ClientConfiguration struct {
Deamon ClientDaemonConfiguration `json:"daemon"`
}
ClientDaemonConfiguration struct {
URL string `json:"url"`
}
)
func Load() ClientConfiguration {
userConfigDir, err := os.UserConfigDir()
if err != nil {
panic("failed to get user config path: " + err.Error())
}
path := filepath.Join(userConfigDir, "mirror-sync", "config.json")
f, err := os.OpenFile(path, os.O_RDONLY, 0)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
return Default()
}
panic("failed to load configuration file (" + path + "): " + err.Error())
}
defer f.Close()
var c ClientConfiguration
d := json.NewDecoder(f)
if err := d.Decode(&c); err != nil {
panic("failed to read the configuration file: " + err.Error())
}
return fillDefault(c)
}
func Default() ClientConfiguration {
return ClientConfiguration{
Deamon: ClientDaemonConfiguration{
URL: "http://localhost:25697",
},
}
}
func fillDefault(c ClientConfiguration) ClientConfiguration {
if len(c.Deamon.URL) == 0 {
c.Deamon.URL = Default().Deamon.URL
}
return c
}