From 14390a27b2b8d7b0cb330f3e62601eb164c9550b Mon Sep 17 00:00:00 2001 From: restitux Date: Sat, 25 Feb 2023 01:03:19 -0700 Subject: [PATCH] Add support for writing modified config file to disk --- config.go | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/config.go b/config.go index 519bd93..6836428 100644 --- a/config.go +++ b/config.go @@ -27,49 +27,68 @@ func getConfigDir(n string) string { } 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 { - 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") - c.ConfigFile = &configFile + configFilepath := filepath.Join(configDir, c.Filename+".toml") + c.ConfigFile = &configFilepath // open file, creating it if empty - config_file, err := os.OpenFile(*c.ConfigFile, os.O_RDWR|os.O_CREATE, 0755) - defer config_file.Close() + configFile, err := os.OpenFile(*c.ConfigFile, os.O_RDWR|os.O_CREATE, 0755) + defer configFile.Close() 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 { - 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 file is empty, write default config data, err := toml.Marshal(c.Config) 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 true, nil } else { // try to parse config file - data, err := ioutil.ReadAll(config_file) + data, err := ioutil.ReadAll(configFile) 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) 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 } } + +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 +}