package app import ( "flag" "fmt" "go.uber.org/zap" "go.uber.org/zap/zapcore" "penahub.gitlab.yandexcloud.net/pena-services/bluepint/blueprint" "penahub.gitlab.yandexcloud.net/pena-services/bluepint/creator" ) type App struct { Config *Config logger *zap.Logger } type Config struct { Version string } func NewApp(cfg *Config) *App { cfgLogger := zap.NewDevelopmentConfig() cfgLogger.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder cfgLogger.EncoderConfig.ConsoleSeparator = " " logger, err := cfgLogger.Build() if err != nil { panic(err) } return &App{ Config: cfg, logger: logger, } } // Execute - Любой вызов приложения. func (r *App) Execute() { versionFlag := flag.Bool("v", false, "Show current version") flag.Parse() if *versionFlag { if err := r.Version(); err != nil { r.logger.Fatal("app.Version", zap.Error(err)) return } return } r.Run() } // Run - Запуск приложения. func (r *App) Run() { file, err := blueprint.FileToStruct("") if err != nil { r.logger.Fatal("blueprint.FileToStruct", zap.Error(err)) } creator := creator.NewCreator(creator.Deps{Blueprint: file}) if err = creator.CreateApp(); err != nil { r.logger.Fatal("creator.CreateApp", zap.Error(err)) } } // Version - Вывод версии приложения. func (r *App) Version() error { _, err := fmt.Println("Version: ", r.Config.Version) return err }