impressum.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package config
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "io"
  7. )
  8. var ErrMissingValue = errors.New("config: missing value")
  9. type Impressum struct {
  10. Footer string `json:"footer" yaml:"footer"`
  11. Page ImpressumPage `json:"page" yaml:"page"`
  12. }
  13. func (i Impressum) Render(_ context.Context, w io.Writer) error {
  14. if _, err := fmt.Fprint(w, i.Footer); err != nil {
  15. return err
  16. }
  17. return nil
  18. }
  19. func (i Impressum) Valid() error {
  20. var errs []error
  21. if len(i.Footer) == 0 {
  22. errs = append(errs, fmt.Errorf("%w: impressum footer must be defined", ErrMissingValue))
  23. }
  24. if err := i.Page.Valid(); err != nil {
  25. errs = append(errs, err)
  26. }
  27. if len(errs) != 0 {
  28. return errors.Join(errs...)
  29. }
  30. return nil
  31. }
  32. type ImpressumPage struct {
  33. Title string `json:"title" yaml:"title"`
  34. Body string `json:"body" yaml:"body"`
  35. }
  36. func (ip ImpressumPage) Render(_ context.Context, w io.Writer) error {
  37. if _, err := fmt.Fprint(w, ip.Body); err != nil {
  38. return err
  39. }
  40. return nil
  41. }
  42. func (ip ImpressumPage) Valid() error {
  43. var errs []error
  44. if len(ip.Title) == 0 {
  45. errs = append(errs, fmt.Errorf("%w: impressum page title must be defined", ErrMissingValue))
  46. }
  47. if len(ip.Body) == 0 {
  48. errs = append(errs, fmt.Errorf("%w: impressum body title must be defined", ErrMissingValue))
  49. }
  50. if len(errs) != 0 {
  51. return errors.Join(errs...)
  52. }
  53. return nil
  54. }