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 {