package config import ( "os" "path/filepath" "strings" "gopkg.in/yaml.v3" ) type Config struct { ServerName string `yaml:"server_name"` ListenAddr string `yaml:"listen_addr"` Domain string `yaml:"domain"` DataDir string `yaml:"data_dir"` MaxFileSize int64 `yaml:"max_file_size"` Federation bool `yaml:"federation"` FederatedWith []string `yaml:"federated_with"` LogLevel string `yaml:"log_level"` } func Default() *Config { return &Config{ ServerName: "JustAMessenger", ListenAddr: ":8443", Domain: "localhost", DataDir: "./data", MaxFileSize: 2 << 30, Federation: false, LogLevel: "info", } } func Load(path string) (*Config, error) { cfg := Default() abs, err := filepath.Abs(path) if err != nil { return cfg, nil } data, err := os.ReadFile(abs) if err != nil { return cfg, nil } ext := strings.ToLower(filepath.Ext(path)) switch ext { case ".yaml", ".yml": if err := yaml.Unmarshal(data, cfg); err != nil { return nil, err } default: return cfg, nil } return cfg, nil }