package main import "fmt" type AddonService struct { Addons map[string]*Addon } var addons = map[string]*Addon{ "Channeler": NewAddon("Channeler", "https://git.site.quack-lab.dev/dave/wow_channeler"), "Heimdall": NewAddon("Heimdall", "https://git.site.quack-lab.dev/dave/wow-Heimdall"), "Dechickenator": NewAddon("Dechickenator", "https://git.site.quack-lab.dev/dave/wow_dechickenator"), } func NewAddonService() *AddonService { return &AddonService{ Addons: addons, } } func (a *AddonService) GetAddon(name string) (*Addon, error) { addon, ok := a.Addons[name] if !ok { return nil, fmt.Errorf("addon with name %s not found", name) } return addon, nil } func (a *AddonService) GetRemoteVersion(name string) (string, error) { addon, err := a.GetAddon(name) if err != nil { return "", err } return addon.GetRemoteVersion() } func (a *AddonService) GetLocalVersion(name string) (string, error) { addon, err := a.GetAddon(name) if err != nil { return "", err } return addon.GetLocalVersion() } func (a *AddonService) UpdateAddon(name string) (*Addon, error) { addon, err := a.GetAddon(name) if err != nil { return nil, err } release, err := addon.GetRemoteRelease() if err != nil { return nil, err } err = addon.Update(release) if err != nil { return nil, err } return addon, nil }