123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- package config
- import (
- "errors"
- "io/ioutil"
- "os"
- "path/filepath"
- "strings"
- "github.com/tal-tech/go-zero/tools/goctl/util"
- "gopkg.in/yaml.v2"
- )
- const (
- configFile = "config.yaml"
- configFolder = "config"
- DefaultFormat = "gozero"
- )
- const defaultYaml = `# namingFormat is used to define the naming format of the generated file name.
- # just like time formatting, you can specify the formatting style through the
- # two format characters go, and zero. for example: snake format you can
- # define as go_zero, camel case format you can it is defined as goZero,
- # and even split characters can be specified, such as go#zero. in theory,
- # any combination can be used, but the prerequisite must meet the naming conventions
- # of each operating system file name. if you want to independently control the file
- # naming style of the api, rpc, and model layers, you can set it through apiNamingFormat,
- # rpcNamingFormat, modelNamingFormat, and independent control is not enabled by default.
- # for more information, please see #{apiNamingFormat},#{rpcNamingFormat},#{modelNamingFormat}
- # Note: namingFormat is based on snake or camel string
- namingFormat: gozero
- `
- type Config struct {
- // NamingFormat is used to define the naming format of the generated file name.
- // just like time formatting, you can specify the formatting style through the
- // two format characters go, and zero. for example: snake format you can
- // define as go_zero, camel case format you can it is defined as goZero,
- // and even split characters can be specified, such as go#zero. in theory,
- // any combination can be used, but the prerequisite must meet the naming conventions
- // of each operating system file name.
- // Note: NamingFormat is based on snake or camel string
- NamingFormat string `yaml:"namingFormat"`
- }
- func NewConfig(format string) (*Config, error) {
- if len(format) == 0 {
- format = DefaultFormat
- }
- cfg := &Config{NamingFormat: format}
- err := validate(cfg)
- return cfg, err
- }
- func InitOrGetConfig() (*Config, error) {
- var (
- defaultConfig Config
- )
- err := yaml.Unmarshal([]byte(defaultYaml), &defaultConfig)
- if err != nil {
- return nil, err
- }
- goctlHome, err := util.GetGoctlHome()
- if err != nil {
- return nil, err
- }
- configDir := filepath.Join(goctlHome, configFolder)
- configFilename := filepath.Join(configDir, configFile)
- if util.FileExists(configFilename) {
- data, err := ioutil.ReadFile(configFilename)
- if err != nil {
- return nil, err
- }
- err = yaml.Unmarshal(data, &defaultConfig)
- if err != nil {
- return nil, err
- }
- err = validate(&defaultConfig)
- if err != nil {
- return nil, err
- }
- return &defaultConfig, nil
- }
- err = util.MkdirIfNotExist(configDir)
- if err != nil {
- return nil, err
- }
- f, err := os.Create(configFilename)
- if err != nil {
- return nil, err
- }
- defer func() {
- _ = f.Close()
- }()
- _, err = f.WriteString(defaultYaml)
- if err != nil {
- return nil, err
- }
- err = validate(&defaultConfig)
- if err != nil {
- return nil, err
- }
- return &defaultConfig, nil
- }
- func validate(cfg *Config) error {
- if len(strings.TrimSpace(cfg.NamingFormat)) == 0 {
- return errors.New("missing namingFormat")
- }
- return nil
- }
|