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  }