config.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package comp
  2. import (
  3. "git.wanbits.io/joe/franklin/protos"
  4. "git.wanbits.io/joe/kettle/utl"
  5. "github.com/spf13/viper"
  6. "path/filepath"
  7. )
  8. func LoadConf(fullfile string, defPaths ...string) (*protos.AppConf, error) {
  9. c := protos.AppConf{}
  10. dir, f := filepath.Split(fullfile)
  11. if len(dir) <= 0 {
  12. dir = "./"
  13. }
  14. v := viper.New()
  15. v.SetConfigType("toml")
  16. v.AddConfigPath(dir)
  17. for _, path := range defPaths {
  18. v.AddConfigPath(path)
  19. }
  20. v.SetConfigFile(f)
  21. err := v.ReadInConfig()
  22. if err != nil {
  23. return nil, err
  24. }
  25. err = v.Unmarshal(&c)
  26. if err != nil {
  27. return nil, err
  28. }
  29. err = checkAppConf(&c)
  30. if err != nil {
  31. return nil, err
  32. }
  33. return &c, nil
  34. }
  35. func checkAppConf(c *protos.AppConf) error {
  36. if c == nil {
  37. return utl.ErrForCode(int(protos.ErrCode_INVALID_PARAMS))
  38. }
  39. if len(c.Namespace) <= 0 {
  40. return utl.ErrForCode(int(protos.ErrCode_LENGTH))
  41. }
  42. if _, err := Parse(c.Id); err != nil {
  43. return utl.ErrForCode(int(protos.ErrCode_BAD_FORMAT))
  44. }
  45. if len(c.Zoo.Addrs) <= 0 {
  46. return utl.ErrForCode(int(protos.ErrCode_LENGTH))
  47. }
  48. return nil
  49. }