store.go 846 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package config
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "github.com/TecharoHQ/anubis/lib/store"
  7. _ "github.com/TecharoHQ/anubis/lib/store/all"
  8. )
  9. var (
  10. ErrNoStoreBackend = errors.New("config.Store: no backend defined")
  11. ErrUnknownStoreBackend = errors.New("config.Store: unknown backend")
  12. )
  13. type Store struct {
  14. Backend string `json:"backend"`
  15. Parameters json.RawMessage `json:"parameters"`
  16. }
  17. func (s *Store) Valid() error {
  18. var errs []error
  19. if len(s.Backend) == 0 {
  20. errs = append(errs, ErrNoStoreBackend)
  21. }
  22. fac, ok := store.Get(s.Backend)
  23. switch ok {
  24. case true:
  25. if err := fac.Valid(s.Parameters); err != nil {
  26. errs = append(errs, err)
  27. }
  28. case false:
  29. errs = append(errs, fmt.Errorf("%w: %q", ErrUnknownStoreBackend, s.Backend))
  30. }
  31. if len(errs) != 0 {
  32. return errors.Join(errs...)
  33. }
  34. return nil
  35. }