Files
accounting/internal/config/config.go
2025-08-27 21:29:52 +02:00

50 lines
1.1 KiB
Go

package config
import (
"encoding/json"
"os"
"git.schreifuchs.ch/lou-taylor/accounting/internal/email"
"github.com/caarlos0/env/v10"
)
// PDF holds the configuration for the PDF generator.
type PDF struct {
Hostname string `json:"hostname" env:"HOSTNAME"`
}
// Gitea holds the configuration for the Gitea client.
type Gitea struct {
URL string `json:"url" env:"URL"`
Token string `json:"token" env:"TOKEN"`
}
// Config holds the configuration for the entire application.
type Config struct {
Email email.Config `json:"email" envPrefix:"EMAIL_"`
PDF PDF `json:"pdf" envPrefix:"PDF_"`
Gitea Gitea `json:"gitea" envPrefix:"GITEA_"`
}
// Load loads the configuration from a JSON file and environment variables.
func Load(path string) (*Config, error) {
cfg := &Config{}
file, err := os.Open(path)
if err == nil {
defer file.Close()
decoder := json.NewDecoder(file)
if err := decoder.Decode(cfg); err != nil {
return nil, err
}
} else if !os.IsNotExist(err) {
return nil, err
}
if err := env.Parse(cfg); err != nil {
return nil, err
}
return cfg, nil
}