diff options
| author | Kyren223 <Kyren223@proton.me> | 2024-12-21 19:42:01 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2024-12-21 19:42:01 +0200 |
| commit | eb6156ff10d8ba1bca1b8223ab33bad2eabc4f7a (patch) | |
| tree | 4c4b88fbf19788749acb45b9c223d358811ce272 /internal/client/config | |
| parent | e6237f5b1265f43d25963408ab09689e38050a3e (diff) | |
Refactored local config and added support for tab in insert mode in
viminput
Diffstat (limited to 'internal/client/config')
| -rw-r--r-- | internal/client/config/config.go | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/internal/client/config/config.go b/internal/client/config/config.go index 2353747..ce5a62a 100644 --- a/internal/client/config/config.go +++ b/internal/client/config/config.go @@ -3,20 +3,30 @@ package config import ( "encoding/json" "errors" + "fmt" "os" "path/filepath" + "reflect" ) type Config struct { - PrivateKeyPath string + PrivateKeyPath string `json:"private_key_path"` + InsertModeTabToSpace bool `json:"insert_mode_tab_to_space"` + InsertModeSpacesPerTab uint8 `json:"insert_mode_spaces_per_tab"` } func Default() Config { return Config{ - PrivateKeyPath: "", + PrivateKeyPath: "", + InsertModeTabToSpace: true, + InsertModeSpacesPerTab: 4, } } +func Verify(config *Config) error { + return nil +} + var ( config = Config{} Dir string @@ -45,12 +55,42 @@ func Load() error { return err } - err = json.Unmarshal(contents, &config) + var rawMap map[string]json.RawMessage + if err := json.Unmarshal(contents, &rawMap); err != nil { + return err + } + + defaultVal := reflect.ValueOf(Default()) + finalConfig := reflect.New(defaultVal.Type()).Elem() + finalConfig.Set(defaultVal) + + for i := 0; i < defaultVal.NumField(); i++ { + field := defaultVal.Type().Field(i) + jsonTag := field.Tag.Get("json") + if jsonTag == "" { + jsonTag = field.Name + } + + rawValue, found := rawMap[jsonTag] + fieldValue := finalConfig.Field(i) + if !found || !fieldValue.CanAddr() { + continue + } + + err := json.Unmarshal(rawValue, fieldValue.Addr().Interface()) + if err != nil { + return fmt.Errorf("error unmarshaling field %s: %w", field.Name, err) + } + } + + config = finalConfig.Interface().(Config) + + err = Verify(&config) if err != nil { return err } - return nil + return write() } func write() error { |
