// relation_query — Example: query the offline IANA Link Relation Types
// registry snapshot (no network access at runtime) and filter links by
// relation type.
//
// Run: moon run examples/relation_query

///|
fn main {
  // Registry membership is checked against the bundled offline snapshot.
  for name in ["next", "canonical", "not-a-real-rel"] {
    if @weblink.is_registered_relation(name) {
      match @weblink.relation_info(name) {
        Some(info) => println("\{name}: registered — \{info.description()}")
        None => println("\{name}: registered")
      }
    } else {
      println("\{name}: not registered (not in the offline IANA snapshot)")
    }
  }

  // Filter a header by relation type.
  let header = "; rel=\"next\", ; rel=\"alternate\""
  match @weblink.parse_link_header(header, @weblink.Limits::default()) {
    Err(e) => println("error: \{e.to_display()}")
    Ok(links) => {
      let nexts = @weblink.filter_by_relation(links, "next")
      println("links with rel=next: \{nexts.length()}")
      for l in nexts {
        println("  \{l.target()}")
      }
    }
  }

  println(
    "registered relations in the snapshot: \{@weblink.registered_relation_count()}",
  )
}