github.com/oNaiPs/go-generate-fast@v0.3.0/src/core/config/config.go (about) 1 package config 2 3 import ( 4 "os" 5 "path" 6 7 "github.com/spf13/viper" 8 "go.uber.org/zap" 9 ) 10 11 type Config struct { 12 ConfigDir string 13 CacheDir string 14 Disable bool 15 ReadOnly bool 16 ReCache bool 17 ForceUseCache bool 18 Debug bool 19 } 20 21 var instance *Config 22 23 func Get() *Config { 24 return instance 25 } 26 27 func Init() { 28 if instance != nil { 29 zap.S().Panic("Config was already initialized") 30 } 31 32 instance = &Config{} 33 34 userConfigDir, err := os.UserConfigDir() 35 if err != nil { 36 zap.S().Fatal("Error finding user config dir: ", err) 37 } 38 userConfigDir = path.Join(userConfigDir, "go-generate-fast") 39 40 viper.SetEnvPrefix("GO_GENERATE_FAST") 41 viper.AutomaticEnv() 42 viper.SetConfigName("config") 43 viper.SetConfigType("yaml") 44 viper.AddConfigPath(userConfigDir) 45 if err := viper.ReadInConfig(); err != nil { 46 if _, ok := err.(viper.ConfigFileNotFoundError); ok { 47 // Config file not found; ignore error 48 } else { 49 zap.S().Errorf("Cannot parse config file: %s", err) 50 } 51 } 52 53 viper.SetDefault("dir", userConfigDir) 54 instance.ConfigDir = viper.GetString("dir") 55 CreateDirIfNotExists(instance.ConfigDir) 56 57 viper.SetDefault("cache_dir", path.Join(instance.ConfigDir, "cache")) 58 instance.CacheDir = viper.GetString("cache_dir") 59 CreateDirIfNotExists(instance.CacheDir) 60 61 instance.Disable = viper.GetBool("disable") 62 instance.ReadOnly = viper.GetBool("read_only") 63 instance.ReCache = viper.GetBool("recache") 64 instance.ForceUseCache = viper.GetBool("force_use_cache") 65 instance.Debug = viper.GetBool("debug") 66 } 67 68 func CreateDirIfNotExists(path string) { 69 if _, err := os.Stat(path); os.IsNotExist(err) { 70 err = os.MkdirAll(path, 0700) 71 if err != nil { 72 zap.S().Fatal("Error creating config directory: ", err) 73 return 74 } 75 } 76 }