///|
/// 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<div xmlns="http://www.w3.org/1999/xhtml">Plan <em>A</em></div>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")
  }
}