From 3446c3aa4d60c7d7e87e4b2c5fea1564181f82c1 Mon Sep 17 00:00:00 2001 From: Moises Macia Date: Mon, 23 Feb 2026 21:51:31 +0000 Subject: [PATCH] feed format behaviour --- lib/feed_reader/format.ex | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 lib/feed_reader/format.ex diff --git a/lib/feed_reader/format.ex b/lib/feed_reader/format.ex new file mode 100644 index 0000000..ff52156 --- /dev/null +++ b/lib/feed_reader/format.ex @@ -0,0 +1,22 @@ +defmodule FeedReader.Format do + @moduledoc """ + Behaviour implemented by built-in and explicitly supplied feed formats. + + Detection examines only the bounded, replayable prefix provided by the caller. + XML formats provide their dedicated Saxy handler and create parser state with + an event sink; normalization returns the standalone feed and item value types. + """ + + @callback id() :: atom() + @callback detect(prefix :: binary()) :: :match | :no_match + @callback handler() :: module() + @callback new_parser_state(event_sink :: function(), opts :: keyword()) :: term() + + @callback normalize_feed(state :: term(), opts :: keyword()) :: FeedReader.Feed.t() + + @callback normalize_item( + raw_item :: map(), + feed :: FeedReader.Feed.t(), + opts :: keyword() + ) :: {:ok, FeedReader.Item.t()} | :skip | {:error, term()} +end