Files
transcriber/internal/config/config.go

91 lines
1.9 KiB
Go

package config
import (
"fmt"
"os"
"github.com/BurntSushi/toml"
)
type Config struct {
Server ServerConfig `toml:"server"`
Database DatabaseConfig `toml:"database"`
AWS AWSConfig `toml:"aws"`
Yandex YandexConfig `toml:"yandex"`
Telegram TelegramConfig `toml:"telegram"`
}
type ServerConfig struct {
Port int `toml:"port"`
ShutdownTimeout int `toml:"shutdown_timeout"`
ForceShutdownTimeout int `toml:"force_shutdown_timeout"`
}
type DatabaseConfig struct {
Path string `toml:"path"`
}
type AWSConfig struct {
Region string `toml:"region"`
AccessKey string `toml:"access_key_id"`
SecretKey string `toml:"secret_access_key"`
BucketName string `toml:"bucket_name"`
Endpoint string `toml:"endpoint"`
}
type YandexConfig struct {
APIKey string `toml:"api_key"`
FolderID string `toml:"folder_id"`
}
type TelegramConfig struct {
BotToken string `toml:"bot_token"`
UpdateTimeout int `toml:"update_timeout"`
}
// DefaultConfig returns a Config with default values
func DefaultConfig() *Config {
return &Config{
Server: ServerConfig{
Port: 8080,
ShutdownTimeout: 5,
ForceShutdownTimeout: 20,
},
Database: DatabaseConfig{
Path: "data/transcriber.db",
},
AWS: AWSConfig{
Region: "ru-central1",
AccessKey: "",
SecretKey: "",
BucketName: "",
Endpoint: "",
},
Yandex: YandexConfig{
APIKey: "",
FolderID: "",
},
Telegram: TelegramConfig{
BotToken: "",
UpdateTimeout: 10,
},
}
}
// LoadConfig loads configuration from a TOML file
func LoadConfig(path string) (*Config, error) {
// Check if file exists
if _, err := os.Stat(path); os.IsNotExist(err) {
return nil, fmt.Errorf("config file not found: %s", path)
}
config := DefaultConfig()
// Load configuration from file
if _, err := toml.DecodeFile(path, &config); err != nil {
return nil, fmt.Errorf("failed to decode config file: %w", err)
}
return config, nil
}