// Package config читает конфигурацию сервиса из переменных окружения. package config import ( "fmt" "time" "github.com/caarlos0/env/v11" ) // API — конфигурация публичного сервиса api. type API struct { HTTPAddr string `env:"HTTP_ADDR" envDefault:":8080"` DatabaseURL string `env:"DATABASE_URL,required"` RedisURL string `env:"REDIS_URL,required"` LogLevel string `env:"LOG_LEVEL" envDefault:"info"` MigrateOnStart bool `env:"MIGRATE_ON_START" envDefault:"true"` ShutdownTimeout time.Duration `env:"SHUTDOWN_TIMEOUT" envDefault:"15s"` SupportedLocales []string `env:"SUPPORTED_LOCALES" envDefault:"ru,en" envSeparator:","` MinAndroidVersionCode int `env:"MIN_ANDROID_VERSION_CODE" envDefault:"0"` } // StorageAgent — конфигурация внутреннего сервиса storage-agent. type StorageAgent struct { HTTPAddr string `env:"HTTP_ADDR" envDefault:":8090"` InternalToken string `env:"INTERNAL_TOKEN,required"` LibraryRoot string `env:"LIBRARY_ROOT" envDefault:"/library"` LogLevel string `env:"LOG_LEVEL" envDefault:"info"` } // Load заполняет структуру конфигурации T из окружения. func Load[T any]() (T, error) { var cfg T if err := env.Parse(&cfg); err != nil { return cfg, fmt.Errorf("config: %w", err) } return cfg, nil }