diff --git a/lib/feed_reader/feed.ex b/lib/feed_reader/feed.ex new file mode 100644 index 0000000..4e529d8 --- /dev/null +++ b/lib/feed_reader/feed.ex @@ -0,0 +1,26 @@ +defmodule FeedReader.Feed do + @moduledoc """ + Normalized metadata for a feed. + + Extension metadata is keyed by namespace URI. Format implementations control + which bounded extension values are retained. + """ + + @type t :: %__MODULE__{ + title: String.t() | nil, + description: String.t() | nil, + feed_url: String.t() | nil, + html_url: String.t() | nil, + type: :rss | :atom | :rdf, + categories: [String.t()], + extensions: %{optional(String.t()) => map()} + } + + defstruct title: nil, + description: nil, + feed_url: nil, + html_url: nil, + type: nil, + categories: [], + extensions: %{} +end diff --git a/lib/feed_reader/item.ex b/lib/feed_reader/item.ex new file mode 100644 index 0000000..7e979b1 --- /dev/null +++ b/lib/feed_reader/item.ex @@ -0,0 +1,27 @@ +defmodule FeedReader.Item do + @moduledoc "A normalized item delivered by a feed parser." + + @type t :: %__MODULE__{ + uuid: String.t() | nil, + title: String.t() | nil, + content_full: String.t() | nil, + content_summary: String.t() | nil, + language: atom() | nil, + published_at: DateTime.t() | nil, + canonical_url: String.t() | nil, + alternate: map(), + author: String.t() | nil, + extensions: %{optional(String.t()) => map()} + } + + defstruct uuid: nil, + title: nil, + content_full: nil, + content_summary: nil, + language: nil, + published_at: nil, + canonical_url: nil, + alternate: %{}, + author: nil, + extensions: %{} +end