package notification import ( // External werr "git.gibonuddevalla.se/go/wrappederror" // Standard "log/slog" "slices" "strings" ) var ( allServices []Service ) func ServiceFactory(t string, config []byte, prio int, ackURL string, logger *slog.Logger) (Service, error) { switch t { case "NTFY": ntfy, err := NewNTFY(config, prio, ackURL) if err != nil { err = werr.Wrap(err).WithData(config) return nil, err } ntfy.SetLogger(logger) return ntfy, nil case "SCRIPT": script, err := NewScript(config, prio, ackURL) if err != nil { err = werr.Wrap(err).WithData(config) return nil, err } script.SetLogger(logger) return script, nil } return nil, werr.New("Unknown notification service, '%s'", t).WithCode("002-0000") } func NewInstance(typ string) Service { switch typ { case "NTFY": return new(NTFY) case "SCRIPT": return new(Script) } return nil } func GetInstance(typ string) Service { for _, svc := range allServices { if strings.ToLower(svc.GetType()) == strings.ToLower(typ) { return svc } } return nil } func AvailableServices() []Service { slices.SortFunc(allServices, func(a, b Service) int { if a.GetType() < b.GetType() { return -1 } if a.GetType() > b.GetType() { return 1 } return 0 }) return allServices }