use clap::Parser; #[derive(Parser, Debug)] #[clap( name = "kittybox-mf2", author = "Vika ", version = env!("CARGO_PKG_VERSION"), about = "Fetch HTML and turn it into MF2-JSON" )] struct Args { #[clap(value_parser)] url: url::Url, } #[derive(thiserror::Error, Debug)] enum Error { #[error("http request error: {0}")] Http(#[from] reqwest::Error), #[error("microformats error: {0}")] Microformats(#[from] microformats::Error), #[error("json error: {0}")] Json(#[from] serde_json::Error), #[error("url parse error: {0}")] UrlParse(#[from] url::ParseError), } #[tokio::main] async fn main() -> Result<(), Error> { let args = Args::parse(); let http: reqwest::Client = { #[allow(unused_mut)] let mut builder = reqwest::Client::builder() .user_agent(concat!( env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION") )); builder.build().unwrap() }; let response = http.get(args.url.clone()).send().await?; let text = response.text().await?; let mf2 = microformats::from_html(text.as_ref(), args.url)?; println!("{}", serde_json::to_string_pretty(&mf2)?); Ok(()) }