From cd698294c1a760fa8deda516764b7bc8f6970124 Mon Sep 17 00:00:00 2001 From: Moises Macia Date: Wed, 8 Jul 2026 22:27:50 +0000 Subject: [PATCH] parser return halt when the root tag is reached, all trailing content is skipped --- lib/feed_reader/parser.ex | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/feed_reader/parser.ex b/lib/feed_reader/parser.ex index f2a0e5b..7c95028 100644 --- a/lib/feed_reader/parser.ex +++ b/lib/feed_reader/parser.ex @@ -92,9 +92,17 @@ defmodule FeedReader.Parser do Saxy.parse_stream(input, format.handler(), state, character_data_max_length: chunk_size) case result do - {:ok, _state} -> send(parent, {reference, :done}) - {:error, reason} -> send(parent, {reference, {:event, {:error, reason}}}) - {:halt, _state, _rest} -> send(parent, {reference, {:event, {:error, :parser_halted}}}) + {:ok, _state} -> + send(parent, {reference, :done}) + + {:error, reason} -> + send(parent, {reference, {:event, {:error, reason}}}) + + {:halt, state, _rest} when is_map(state) and state.root_closed -> + send(parent, {reference, :done}) + + {:halt, _state, _rest} -> + send(parent, {reference, {:event, {:error, :parser_halted}}}) end end)