///|
/// This package imports only the public library, not the CLI renderer or XML
/// implementation. The document is embedded so the example needs no network.
fn main {
let input =
#|{"version":"https://jsonfeed.org/version/1.1","title":"Reader sample","language":"en-US","icon":"icons/feed.png","items":[{"id":"story-1","content_text":"Body","url":"posts/one","external_url":"elsewhere/story","image":"images/preview.png","date_published":"2026-10-19T10:30:00+02:00"}]}
match @feedlens.parse_with_source(input, "https://example.test/feed.json") {
Ok(feed) => {
let entry = feed.entries[0]
let published = match
@feedlens.normalize_date(feed.format, entry.published_at) {
Ok(Some(date)) => date.utc
_ => "(date unavailable)"
}
println("feed=" + feed.title.unwrap_or("(untitled)"))
println("language=" + feed.language.unwrap_or("(none)"))
println("icon=" + feed.images[0].url)
println("permalink=" + entry.link.unwrap_or("(none)"))
println("outside=" + entry.external_url.unwrap_or("(none)"))
println("featured=" + entry.images[0].url)
println("published=" + published)
}
Err(_) => println("feed parse failed")
}
let atom =
#|f
Plan A
2026-10-21T00:00:00ZN
match @feedlens.parse(atom) {
Ok(feed) => {
match
@feedlens.normalize_date(feed.format, Some("2026-10-14T13:00:00-00:00")) {
Ok(Some(date)) =>
println(
"unknown_local_zone=" +
date.utc +
":" +
date.offset_known.to_string(),
)
_ => println("unknown local zone date failed")
}
match
@feedlens.normalize_date(feed.format, Some("2016-12-31T23:59:60Z")) {
Ok(Some(date)) =>
println(
"leap_second=" + date.utc + ":" + date.is_leap_second.to_string(),
)
_ => println("leap-second date failed")
}
if feed.title_kind is @feedlens.Xhtml {
match feed.title_xhtml {
Some(fragment) => {
println("xhtml_title=" + feed.title.unwrap_or(""))
println("xhtml_markup=" + fragment.markup)
}
None => println("xhtml fragment unavailable")
}
}
}
Err(_) => println("Atom XHTML parse failed")
}
let atom_body =
#|fF2026-10-21T00:00:00ZNeE2026-10-21T00:00:00ZSAQID
match @feedlens.parse(atom_body) {
Ok(feed) =>
match feed.entries[0].atom_body {
Some(@feedlens.InlineBinary(bytes, media_type)) => {
println("atom_binary_type=" + media_type)
println("atom_binary_bytes=" + bytes.length().to_string())
}
_ => println("Atom binary body unavailable")
}
Err(_) => println("Atom binary parse failed")
}
let standalone =
#|urn:eIndependent entry2026-10-21T00:00:00ZN
match
@feedlens.parse_document_with_source(
standalone, "https://example.test/news/entry.atom",
) {
Ok(@feedlens.AtomEntryDocument(entry, _)) => {
println("atom_entry=" + entry.title.unwrap_or(""))
println("atom_entry_link=" + entry.link.unwrap_or(""))
}
_ => println("Atom Entry Document parse failed")
}
let rss =
#|Deskhttps://example.test/News../rss-spec.htmlSearchArchivesq../search
match
@feedlens.parse_with_source(rss, "https://example.test/feeds/daily.xml") {
Ok(feed) => {
println("rss_docs=" + feed.docs_url.unwrap_or(""))
match feed.cloud {
Some(cloud) =>
println("rss_cloud=" + cloud.domain + ":" + cloud.port.to_string())
None => ()
}
match feed.text_input {
Some(form) => println("rss_search=" + form.link)
None => ()
}
}
Err(_) => println("RSS channel parse failed")
}
}