parser.go 800 B

1234567891011121314151617181920212223242526272829303132
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package atom // import "miniflux.app/v2/internal/reader/atom"
  4. import (
  5. "fmt"
  6. "io"
  7. "miniflux.app/v2/internal/model"
  8. xml_decoder "miniflux.app/v2/internal/reader/xml"
  9. )
  10. type atomFeed interface {
  11. Transform(baseURL string) *model.Feed
  12. }
  13. // Parse returns a normalized feed struct from a Atom feed.
  14. func Parse(baseURL string, r io.ReadSeeker, version string) (*model.Feed, error) {
  15. var rawFeed atomFeed
  16. if version == "0.3" {
  17. rawFeed = new(atom03Feed)
  18. } else {
  19. rawFeed = new(atom10Feed)
  20. }
  21. if err := xml_decoder.NewXMLDecoder(r).Decode(rawFeed); err != nil {
  22. return nil, fmt.Errorf("atom: unable to parse feed: %w", err)
  23. }
  24. return rawFeed.Transform(baseURL), nil
  25. }