Add support for writing modified config file to disk

This commit is contained in:
2023-02-25 01:03:19 -07:00
parent 8a901413a8
commit 14390a27b2
+34 -15
View File
@@ -27,49 +27,68 @@ func getConfigDir(n string) string {
} }
func (c *Config[T]) Get() (bool, error) { func (c *Config[T]) Get() (bool, error) {
config_dir := getConfigDir(c.Name) configDir := getConfigDir(c.Name)
err := os.MkdirAll(config_dir, 0755) err := os.MkdirAll(configDir, 0755)
if err != nil { if err != nil {
return false, fmt.Errorf("Could not create config directory: %v", err) return false, fmt.Errorf("Could not create config directory: %w", err)
} }
configFile := filepath.Join(config_dir, c.Filename+".toml") configFilepath := filepath.Join(configDir, c.Filename+".toml")
c.ConfigFile = &configFile c.ConfigFile = &configFilepath
// open file, creating it if empty // open file, creating it if empty
config_file, err := os.OpenFile(*c.ConfigFile, os.O_RDWR|os.O_CREATE, 0755) configFile, err := os.OpenFile(*c.ConfigFile, os.O_RDWR|os.O_CREATE, 0755)
defer config_file.Close() defer configFile.Close()
if err != nil { if err != nil {
return false, fmt.Errorf("Could not open config file: %v", err) return false, fmt.Errorf("Could not open config file: %w", err)
} }
fi, err := config_file.Stat() fi, err := configFile.Stat()
if err != nil { if err != nil {
return false, fmt.Errorf("Could not get config file size: %v", err) return false, fmt.Errorf("Could not get config file size: %w", err)
} }
if fi.Size() == 0 { if fi.Size() == 0 {
// if file is empty, write default config // if file is empty, write default config
data, err := toml.Marshal(c.Config) data, err := toml.Marshal(c.Config)
if err != nil { if err != nil {
return false, fmt.Errorf("Could not write default config to file: %v", err) return false, fmt.Errorf("Could not write default config to file: %w", err)
} }
config_file.Write(data) configFile.Write(data)
// return nil as the user must edit the config file // return nil as the user must edit the config file
return true, nil return true, nil
} else { } else {
// try to parse config file // try to parse config file
data, err := ioutil.ReadAll(config_file) data, err := ioutil.ReadAll(configFile)
if err != nil { if err != nil {
return false, fmt.Errorf("Could not read data from config file: %v", err) return false, fmt.Errorf("Could not read data from config file: %w", err)
} }
err = toml.Unmarshal(data, &c.Config) err = toml.Unmarshal(data, &c.Config)
if err != nil { if err != nil {
return false, fmt.Errorf("Could not parse config file contents: %v", err) return false, fmt.Errorf("Could not parse config file contents: %w", err)
} }
return false, nil return false, nil
} }
} }
func (c *Config[T]) Write() error {
configDir := getConfigDir(c.Name)
configFilepath := filepath.Join(configDir)
data, err := toml.Marshal(c.Config)
if err != nil {
return fmt.Errorf("Could not marshal config: %w", err)
}
configFile, err := os.OpenFile(*c.ConfigFile, os.O_RDWR, 0755)
defer configFile.Close()
_, err = configFile.Write(data)
if err != nil {
return fmt.Errorf("Could not write to config file: %w", err)
}
return nil
}