diff options
author | 2024-03-15 16:39:32 -0700 | |
---|---|---|
committer | 2024-03-15 17:27:16 -0700 | |
commit | dd4fb660c19fd1f6ce5716f9f5783eb7565fed2d (patch) | |
tree | d814186ac8eaada0e529e8f5959fb62f5f8bbf77 /internal/reader/atom/parser.go | |
parent | 2ba893bc79eb7e8cdcf5dfe4929f818247fcd82d (diff) | |
download | v2-dd4fb660c19fd1f6ce5716f9f5783eb7565fed2d.tar.gz v2-dd4fb660c19fd1f6ce5716f9f5783eb7565fed2d.tar.zst v2-dd4fb660c19fd1f6ce5716f9f5783eb7565fed2d.zip |
Refactor Atom parser to use an adapter
Diffstat (limited to 'internal/reader/atom/parser.go')
-rw-r--r-- | internal/reader/atom/parser.go | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/internal/reader/atom/parser.go b/internal/reader/atom/parser.go index 55c17ee5..f97985bc 100644 --- a/internal/reader/atom/parser.go +++ b/internal/reader/atom/parser.go @@ -11,22 +11,20 @@ import ( xml_decoder "miniflux.app/v2/internal/reader/xml" ) -type atomFeed interface { - Transform(baseURL string) *model.Feed -} - // Parse returns a normalized feed struct from a Atom feed. func Parse(baseURL string, r io.ReadSeeker, version string) (*model.Feed, error) { - var rawFeed atomFeed - if version == "0.3" { - rawFeed = new(atom03Feed) - } else { - rawFeed = new(atom10Feed) + switch version { + case "0.3": + atomFeed := new(Atom03Feed) + if err := xml_decoder.NewXMLDecoder(r).Decode(atomFeed); err != nil { + return nil, fmt.Errorf("atom: unable to parse Atom 0.3 feed: %w", err) + } + return NewAtom03Adapter(atomFeed).BuildFeed(baseURL), nil + default: + atomFeed := new(Atom10Feed) + if err := xml_decoder.NewXMLDecoder(r).Decode(atomFeed); err != nil { + return nil, fmt.Errorf("atom: unable to parse Atom 1.0 feed: %w", err) + } + return NewAtom10Adapter(atomFeed).BuildFeed(baseURL), nil } - - if err := xml_decoder.NewXMLDecoder(r).Decode(rawFeed); err != nil { - return nil, fmt.Errorf("atom: unable to parse feed: %w", err) - } - - return rawFeed.Transform(baseURL), nil } |