A better Rust ATProto crate
1use axum::Router; 2use jacquard::api::com_atproto::identity::resolve_did::ResolveDidRequest; 3use jacquard_axum::{ExtractXrpc, IntoRouter}; 4use miette::{IntoDiagnostic, Result}; 5use tracing_subscriber::EnvFilter; 6 7#[axum_macros::debug_handler] 8async fn handler(ExtractXrpc(_args): ExtractXrpc<ResolveDidRequest>) -> &'static str { 9 "hello world!" 10 // let res = jacquard::identity::slingshot_resolver_default(); 11 // let doc = res.resolve_did_doc(&args.did).await?; 12 // let valid_doc = doc.parse()?; 13 // let doc_value = serde_json::to_value(valid_doc).unwrap(); 14 // Ok(ResolveDidOutput { 15 // did_doc: Data::from_json(&doc_value).unwrap().into_static(), 16 // extra_data: Default::default(), 17 // } 18 // .into()) 19} 20 21#[tokio::main] 22async fn main() -> Result<()> { 23 tracing_subscriber::fmt() 24 .with_timer(tracing_subscriber::fmt::time::UtcTime::rfc_3339()) 25 .with_env_filter(EnvFilter::from_env("QDPDS_LOG")) 26 .init(); 27 let app = Router::new() 28 .route("/", axum::routing::get(|| async { "hello world!" })) 29 .merge(ResolveDidRequest::into_router(handler)) 30 .layer(tower_http::trace::TraceLayer::new_for_http()); 31 let listener = tokio::net::TcpListener::bind("0.0.0.0:3000") 32 .await 33 .into_diagnostic()?; 34 axum::serve(listener, app).await.unwrap(); 35 Ok(()) 36}