summaryrefslogtreecommitdiff
path: root/save.go
diff options
context:
space:
mode:
Diffstat (limited to 'save.go')
-rw-r--r--save.go32
1 files changed, 28 insertions, 4 deletions
diff --git a/save.go b/save.go
index a1f48e0..6231b3b 100644
--- a/save.go
+++ b/save.go
@@ -4,8 +4,10 @@ import (
"fmt"
"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"
)
@@ -41,21 +43,43 @@ func ConfigSaveWithHeader(pb proto.Message, header string) error {
return ErrProtoFilename
}
- s := prototext.Format(pb)
-
dir, name := filepath.Split(fullname)
if name == "" {
return fmt.Errorf("filename was blank")
}
- err := os.MkdirAll(dir, os.ModePerm)
- if err != nil {
+ if err := os.MkdirAll(dir, os.ModePerm); err != nil {
return err
}
+ var final error
+ if err := configTEXT(fullname, pb, header); err != nil {
+ final = err
+ }
+
+ if strings.HasSuffix(fullname, ".text") {
+ fullname = strings.TrimSuffix(fullname, ".text")
+ fullname += ".json"
+ if err := configJSON(fullname, pb); err != nil {
+ final = err
+ }
+ }
+ return final
+}
+
+func configTEXT(fullname string, pb proto.Message, header string) error {
+ s := prototext.Format(pb)
+
log.Infof("ConfigSave() filename=%s %d\n", fullname, len(s))
return configWrite(fullname, []byte(header+s))
}
+func configJSON(fullname string, pb proto.Message) error {
+ data := protojson.Format(pb)
+
+ log.Infof("ConfigSave() filename=%s %d\n", fullname, len(data))
+ return configWrite(fullname, []byte(data))
+}
+
func configWrite(fullname string, data []byte) error {
cfgfile, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)