package config import ( "errors" "strings" "go.wit.com/lib/ENV" "go.wit.com/log" "google.golang.org/protobuf/proto" ) // loads foo.proto from ~/.config//foo.text func ConfigLoad(pb proto.Message) error { appname, err := ENV.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 := makeConfigFilename(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 } // loads foo.proto from ~/.config//customName.text func ConfigLoadByName(pb proto.Message, customName string) (string, error) { if customName == "" { return "", errors.New("config.Load() customName can not be blank") } appname, err := ENV.GetAppname() // already configured by your application if err != nil { return "", err } // Get ~/.config/appname/customName.text fullname := makeConfigFilename(appname, customName) curfilename, err := GetFilename(pb) if err != nil { // pb doesn't have 'Filename' // probably try to load anyway? log.Info("ConfigLoadByName() FILENAME old=", curfilename) log.Info("ConfigLoadByName() FILENAME new=", fullname) log.Info("pb doesn't have 'Filename'") log.Printf("err = (%v)\n", err) panic("blah") // return fullname, err } if curfilename == "" { // log.Printf("ConfigLoadByName() read in %s\n", fullname) } 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 fullname, errors.Join(err, errors.New("something is wrong in lib/config")) } } return fullname, 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 fullname, errors.Join(err, errors.New("something is wrong in lib/config")) } } return fullname, nil } } } return fullname, ErrMarshal } func LoadByAppName(pb proto.Message, customName string, appName string) (string, error) { if customName == "" { return "", errors.New("config.LoadByAppName() customName can not be blank") } if appName == "" { return "", errors.New("config.LoadByAppName() appName can not be blank") } // Get ~/.config/appname/customName.text fullname := makeConfigFilename(appName, customName) curfilename, err := GetFilename(pb) if err != nil { // pb doesn't have 'Filename' // probably try to load anyway? log.Info("ConfigLoadByName() FILENAME old=", curfilename) log.Info("ConfigLoadByName() FILENAME new=", fullname) log.Info("pb doesn't have 'Filename'") log.Printf("err = (%v)\n", err) panic("blah") // return fullname, err } if curfilename == "" { // log.Printf("ConfigLoadByName() read in %s\n", fullname) } 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 fullname, errors.Join(err, errors.New("something is wrong in lib/config")) } } return fullname, 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 fullname, errors.Join(err, errors.New("something is wrong in lib/config")) } } return fullname, nil } } } return fullname, ErrMarshal }