package config import ( "errors" "strings" "go.wit.com/log" "google.golang.org/protobuf/proto" ) // loads foo.proto from ~/.config//foo.text func ConfigLoad(pb proto.Message) error { appname, err := GetAppname() // already configured by your application if err != nil { return err } protoname, err := GetProtobufName(pb) // defined in the foo.proto file if err != nil { return err } curfilename, err := GetFilename(pb) if err == nil { return err } // Get ~/.config/appname/protoname.text fullname := GetConfigFilename(appname, protoname) if err = loadTEXT(pb, fullname); err == nil { // If the config is old or broken, this sets the filename if curfilename != fullname { _, err := SetFilename(pb, fullname) if err != nil { log.Info("FILENAME COULD NOT BE SET old=", curfilename) log.Info("FILENAME COULD NOT BE SET new=", fullname) return errors.Join(err, errors.New("something is wrong in lib/config")) } } return nil } else { if strings.HasSuffix(fullname, ".text") { fulljson := fullname + ".json" // If the config is old or broken, this sets the filename if err := loadJSON(pb, fulljson); err == nil { if curfilename != fullname { _, err := SetFilename(pb, fullname) if err != nil { log.Info("FILENAME COULD NOT BE SET old=", curfilename) log.Info("FILENAME COULD NOT BE SET new=", fullname) return errors.Join(err, errors.New("something is wrong in lib/config")) } } return nil } } } return ErrMarshal }