summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-22 16:34:38 -0500
committerJeff Carr <[email protected]>2025-09-22 16:34:38 -0500
commit77f7f39c250b0b4e603df6c2e6cd9110e3a02021 (patch)
tree13f761bf2f2d23d62cf380fdb593b33ca6a7a76b
parent0e805acc675e374b54cad33ef63f282d46b621af (diff)
load and save PB() funcsv0.0.5
-rw-r--r--load.go31
-rw-r--r--save.go23
2 files changed, 54 insertions, 0 deletions
diff --git a/load.go b/load.go
index 427ae5e..1df5665 100644
--- a/load.go
+++ b/load.go
@@ -53,6 +53,37 @@ func ConfigLoad(pb proto.Message, argname string, protoname string) error {
return log.Errorf("could not load config file")
}
+func LoadPB(pb proto.Message, argname string, protoname string) (string, error) {
+ var fullname string
+ if strings.HasPrefix(argname, "/") {
+ fullname = filepath.Join(argname, protoname+".pb")
+ } else {
+ homeDir, err := os.UserHomeDir()
+ if err != nil {
+ log.Warn("ConfigLoad() UserHomeDir() err", err)
+ return "", err
+ }
+
+ fullname = filepath.Join(homeDir, ".config", argname, protoname+".pb")
+ }
+
+ data, err := loadFile(fullname)
+ if err != nil {
+ log.Warn("LoadPB()", fullname, err)
+ // set pb.Filename that was attempted
+ return fullname, err
+ }
+
+ // Unmarshal()
+ if err = proto.Unmarshal(data, pb); err != nil {
+ log.Warn("LoadPB() file", fullname)
+ log.Warn("LoadPB() Unmarshal() err", err)
+ return fullname, err
+ }
+
+ return fullname, nil
+}
+
func loadTEXT(pb proto.Message, fullname string) error {
var data []byte
var err error
diff --git a/save.go b/save.go
index 2d64d68..43e4044 100644
--- a/save.go
+++ b/save.go
@@ -19,6 +19,29 @@ func ConfigSave(pb proto.Message) error {
return saveTEXT(pb, "")
}
+func SavePB(pb proto.Message, fullname string) error {
+ if !strings.HasSuffix(fullname, ".pb") {
+ // todo: append .text here?
+ return log.Errorf("%s needs to end in '.pb'", fullname)
+ }
+
+ dir, name := filepath.Split(fullname)
+ if name == "" {
+ return fmt.Errorf("filename was blank")
+ }
+ if err := os.MkdirAll(dir, os.ModePerm); err != nil {
+ return err
+ }
+
+ data, err := proto.Marshal(pb)
+ if err != nil {
+ return err
+ }
+
+ log.Infof("ConfigSave() filename=%s %d\n", fullname, len(data))
+ return configWrite(fullname, data)
+}
+
func ConfigSaveWithHeader(pb proto.Message, header string) error {
var final error
if err := saveTEXT(pb, header); err != nil {