35 lines
868 B
Rust
35 lines
868 B
Rust
use anyhow::{Context, Result};
|
|
use serde::Deserialize;
|
|
|
|
use crate::lexicons::{self, com_atproto_identity};
|
|
|
|
#[derive(Debug, Deserialize)]
|
|
struct ResolveHandleResponse {
|
|
did: String,
|
|
}
|
|
|
|
/// Resolve handle to DID
|
|
pub async fn resolve(handle: &str, server: &str) -> Result<()> {
|
|
let client = reqwest::Client::new();
|
|
let url = format!(
|
|
"{}?handle={}",
|
|
lexicons::url(server, &com_atproto_identity::RESOLVE_HANDLE),
|
|
handle
|
|
);
|
|
|
|
let res = client.get(&url).send().await?;
|
|
|
|
if !res.status().is_success() {
|
|
let status = res.status();
|
|
let body = res.text().await.unwrap_or_default();
|
|
anyhow::bail!("Failed to resolve handle: {} - {}", status, body);
|
|
}
|
|
|
|
let result: ResolveHandleResponse = res.json().await
|
|
.context("Failed to parse response")?;
|
|
|
|
println!("{}", result.did);
|
|
|
|
Ok(())
|
|
}
|