package config import ( "encoding/json" "fmt" "os" ) type Config struct { DBURL string `json:"db_url"` CurrentUsername string `json:"current_user_name"` } func getConfigFilePath() (string, error) { const configFileName = ".gatorconfig.json" homeDir, err := os.UserHomeDir() if err != nil { return "", err } configFilePath := homeDir + "/" + configFileName return configFilePath, nil } func write(cfg *Config) error { configFilePath, err := getConfigFilePath() if err != nil { return err } configPretty, err := json.MarshalIndent(cfg, "", " ") if err != nil { return err } err = os.WriteFile(configFilePath, configPretty, 0644) if err != nil { return err } return nil } func (cfg *Config) Read() Config { configFilePath, err := getConfigFilePath() if err != nil { panic(err) } configFile, err := os.ReadFile(configFilePath) if err != nil { panic(err) } var configData Config if err := json.Unmarshal(configFile, &configData); err != nil { panic(err) } return configData } func (cfg *Config) SetUser(userName string) error { if userName == "" { return fmt.Errorf("username cannot be empty string") } cfg.CurrentUsername = userName if err := write(cfg); err != nil { return fmt.Errorf("could not set current user! Err: %w", err) } return nil }