diff options
Diffstat (limited to 'save.go')
| -rw-r--r-- | save.go | 32 |
1 files changed, 28 insertions, 4 deletions
@@ -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) |
