diff options
| author | Jeff Carr <[email protected]> | 2025-09-11 07:54:03 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-11 07:54:03 -0500 |
| commit | d158e4cb11ae3f1dff4cf3917085adee1f5d9673 (patch) | |
| tree | 533b20b587abe7fc8cdd4f6cdedbaec463ec940a /load.go | |
| parent | 68f0c43da6507e37c744e1788f0a1861780327ef (diff) | |
also save JSON files since protoTEXT() is unstable stillv0.0.2
Diffstat (limited to 'load.go')
| -rw-r--r-- | load.go | 63 |
1 files changed, 62 insertions, 1 deletions
@@ -7,8 +7,10 @@ import ( "errors" "os" "path/filepath" + "strings" "go.wit.com/log" + "google.golang.org/protobuf/encoding/protojson" "google.golang.org/protobuf/encoding/prototext" "google.golang.org/protobuf/proto" ) @@ -26,15 +28,35 @@ var ErrEmpty error = log.Errorf("file was empty") // - []byte : the contents of the file // - error on read func ConfigLoad(pb proto.Message, argname string, protoname string) error { - var data []byte var fullname string homeDir, err := os.UserHomeDir() if err != nil { + log.Warn("ConfigLoad() UserHomeDir() err", err) return err } fullname = filepath.Join(homeDir, ".config", argname, protoname+".text") + if err := loadTEXT(pb, fullname); err == nil { + return nil + } + + if strings.HasSuffix(fullname, ".text") { + fullname = strings.TrimSuffix(fullname, ".text") + fullname += ".json" + if err := loadJSON(pb, fullname); err != nil { + return err + } + return nil + } + + log.Info("Config file load failed:", fullname) + return log.Errorf("could not load config file") +} + +func loadTEXT(pb proto.Message, fullname string) error { + var data []byte + var err error if data, err = loadFile(fullname); err != nil { log.Warn("config file failed to load", err) // set pb.Filename that was attempted @@ -44,11 +66,50 @@ func ConfigLoad(pb proto.Message, argname string, protoname string) error { // don't even bother with Marshal() if data == nil { + log.Warn("ConfigLoad() config file was empty", fullname) return ErrEmpty // file is empty } // Unmarshal() if err = prototext.Unmarshal(data, pb); err != nil { + log.Warn("ConfigLoad() file", fullname) + log.Warn("ConfigLoad() Unmarshal() err", err) + return err + } + + if fn, ok := GetFilename(pb); ok { + if fn != fullname { + log.Info("config.ConfigLoad() new filename:", fullname) + SetFilename(pb, fullname) + } + } + + if os.Getenv("CONFIG_VERBOSE") == "true" { + log.Infof("ConfigLoad() %s len()=%d\n", fullname, len(data)) + } + return nil +} + +func loadJSON(pb proto.Message, fullname string) error { + var data []byte + var err error + if data, err = loadFile(fullname); err != nil { + log.Warn("config file failed to load", err) + // set pb.Filename that was attempted + SetFilename(pb, fullname) + return err + } + + // don't even bother with Marshal() + if data == nil { + log.Warn("ConfigLoad() config file was empty", fullname) + return ErrEmpty // file is empty + } + + // Unmarshal() + if err = protojson.Unmarshal(data, pb); err != nil { + log.Warn("ConfigLoad() file", fullname) + log.Warn("ConfigLoad() Unmarshal() err", err) return err } |
