config/config.go (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
package config import ( "fmt" "html/template" "os" "strings" "gopkg.in/yaml.v3" ) type Config struct { Repo struct { ScanPath string `yaml:"scanPath"` Readme []string `yaml:"readme"` MainBranch []string `yaml:"mainBranch"` Ignore []string `yaml:"ignore,omitempty"` } `yaml:"repo"` Dirs struct { Templates string `yaml:"templates"` Static string `yaml:"static"` } `yaml:"dirs"` Meta struct { Title string `yaml:"title"` Description string `yaml:"description"` Footer string `yaml:"footer,omitempty"` MaintainerEmail string `yaml:"maintainerEmail,omitempty"` CompiledFooter template.HTML `yaml:"thisIsNotSupposedToBeHere,omitempty"` } `yaml:"meta"` Server struct { Name string `yaml:"name,omitempty"` Host string `yaml:"host"` Port int `yaml:"port"` } `yaml:"server"` Mailmap string `yaml:"mailmap,omitempty"` } func compileFooter(c *Config, version string) { if c.Meta.Footer != "" { c.Meta.CompiledFooter = template.HTML( strings.ReplaceAll( strings.ReplaceAll( c.Meta.Footer, "VERSION", version), "MAINTAINER", fmt.Sprintf( "<a href='mailto:%s'>%s</a>", c.Meta.MaintainerEmail, c.Meta.MaintainerEmail))) } } func Read(f, v string) (*Config, error) { b, err := os.ReadFile(f) if err != nil { return nil, fmt.Errorf("reading config: %w", err) } c := Config{} if err := yaml.Unmarshal(b, &c); err != nil { return nil, fmt.Errorf("parsing config: %w", err) } compileFooter(&c, v) return &c, nil } |