@@ -14,10 +14,30 @@ High-performance RSS/Atom/JSON Feed parser written in Rust, with Python and Node
1414
1515- ** Multi-format support** — RSS 0.9x, 1.0, 2.0 / Atom 0.3, 1.0 / JSON Feed 1.0, 1.1
1616- ** Tolerant parsing** — Handles malformed feeds gracefully with ` bozo ` flag pattern
17- - ** HTTP fetching** — Built-in URL fetching with compression support (gzip, deflate, brotli)
17+ - ** HTTP fetching** — Built-in URL fetching with compression (gzip, deflate, brotli)
18+ - ** Conditional GET** — ETag/Last-Modified support for bandwidth-efficient polling
19+ - ** Podcast support** — iTunes and Podcast 2.0 namespace extensions
1820- ** Multi-language bindings** — Native Python (PyO3) and Node.js (napi-rs) bindings
1921- ** Familiar API** — Inspired by Python's feedparser, easy to migrate existing code
2022
23+ ## Supported Formats
24+
25+ | Format | Versions | Status |
26+ | --------| ----------| --------|
27+ | RSS | 0.90, 0.91, 0.92, 1.0, 2.0 | ✅ Full support |
28+ | Atom | 0.3, 1.0 | ✅ Full support |
29+ | JSON Feed | 1.0, 1.1 | ✅ Full support |
30+
31+ ### Namespace Extensions
32+
33+ | Namespace | Description |
34+ | -----------| -------------|
35+ | Dublin Core | Creator, date, rights metadata |
36+ | Content | Encoded HTML content |
37+ | Media RSS | Media attachments and metadata |
38+ | iTunes | Podcast metadata (author, duration, explicit) |
39+ | Podcast 2.0 | Chapters, transcripts, funding |
40+
2141## Installation
2242
2343### Rust
@@ -54,7 +74,7 @@ pip install feedparser-rs
5474
5575## Usage
5676
57- ### Rust Usage
77+ ### Rust
5878
5979``` rust
6080use feedparser_rs :: parse;
@@ -103,7 +123,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
103123> [ !TIP]
104124> Use ` fetch_and_parse ` for URL fetching with automatic compression handling (gzip, deflate, brotli).
105125
106- ### Node.js Usage
126+ ### Node.js
107127
108128``` javascript
109129import { parse , fetchAndParse } from ' feedparser-rs' ;
@@ -120,7 +140,7 @@ const remoteFeed = await fetchAndParse('https://example.com/feed.xml');
120140
121141See [ Node.js API documentation] ( crates/feedparser-rs-node/README.md ) for complete reference.
122142
123- ### Python Usage
143+ ### Python
124144
125145``` python
126146import feedparser_rs
@@ -134,15 +154,15 @@ print(d.entries[0].published_parsed) # time.struct_time
134154```
135155
136156> [ !NOTE]
137- > Python bindings provide ` time.struct_time ` for date fields, similar to feedparser's API.
157+ > Python bindings provide ` time.struct_time ` for date fields, matching feedparser's API for easy migration .
138158
139159## Cargo Features
140160
141161| Feature | Description | Default |
142162| ---------| -------------| ---------|
143163| ` http ` | Enable URL fetching with reqwest (gzip/deflate/brotli support) | Yes |
144164
145- To disable HTTP support:
165+ To disable HTTP support and reduce dependencies :
146166
147167``` toml
148168[dependencies ]
@@ -151,8 +171,6 @@ feedparser-rs = { version = "0.1", default-features = false }
151171
152172## Workspace Structure
153173
154- This repository contains multiple crates:
155-
156174| Crate | Description | Package |
157175| -------| -------------| ---------|
158176| [ ` feedparser-rs ` ] ( crates/feedparser-rs-core ) | Core Rust parser | [ crates.io] ( https://crates.io/crates/feedparser-rs ) |
@@ -161,17 +179,15 @@ This repository contains multiple crates:
161179
162180## Development
163181
164- This project uses [ cargo-make] ( https://github.com/sagiegurari/cargo-make ) for task automation.
165-
166182``` bash
167183# Install cargo-make
168184cargo install cargo-make
169185
170186# Run all checks (format, lint, test)
171187cargo make ci-all
172188
173- # Run tests
174- cargo make test
189+ # Run tests with coverage
190+ cargo make coverage
175191
176192# Run benchmarks
177193cargo make bench
0 commit comments