Add local one-pass event streaming #15

Closed
opened 2026-10-16 10:12:47 +00:00 by mmacia · 0 comments
Owner

Objective

Implement FeedReader.stream_file/2 as the primary large-feed local API.

Scope

Make one Saxy pass over a caller-owned XML file, emit {:feed, feed} before {:item, item} events, emit terminal parser errors, and preserve caller-owned files. Do not collect all raw or normalized items.

Acceptance Criteria

  • Feed metadata is the first event.
  • Items are delivered lazily in source order.
  • A malformed tail produces a terminal error after prior events in default mode.
  • Parser state retains only bounded current-item and consumer state.
  • Caller-owned files are never removed.
  • Event order, empty feeds, malformed tails, and cleanup are tested.
## Objective Implement `FeedReader.stream_file/2` as the primary large-feed local API. ## Scope Make one Saxy pass over a caller-owned XML file, emit `{:feed, feed}` before `{:item, item}` events, emit terminal parser errors, and preserve caller-owned files. Do not collect all raw or normalized items. ## Acceptance Criteria - Feed metadata is the first event. - Items are delivered lazily in source order. - A malformed tail produces a terminal error after prior events in default mode. - Parser state retains only bounded current-item and consumer state. - Caller-owned files are never removed. - Event order, empty feeds, malformed tails, and cleanup are tested.
mmacia self-assigned this 2026-10-16 10:12:47 +00:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mmacia/feed_reader#15