proto-blue-api 0.3.3

AT Protocol high-level API: agent, rich text, moderation, generated types
Documentation
// Generated by atproto-codegen. Do not edit.
//! Lexicon: com.atproto.server.checkAccountStatus
#![allow(clippy::pedantic, clippy::nursery, clippy::all)]

use serde::{Deserialize, Serialize};

/// Returns the status of an account, especially as pertaining to import or recovery. Can be called many times over the course of an account migration. Requires auth and can only be called pertaining to oneself.
/// XRPC Query: com.atproto.server.checkAccountStatus
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Output {
    pub activated: bool,
    pub expected_blobs: i64,
    pub imported_blobs: i64,
    pub indexed_records: i64,
    pub private_state_values: i64,
    pub repo_blocks: i64,
    pub repo_commit: String,
    pub repo_rev: String,
    pub valid_did: bool,
}

/// Errors a `call()` on this method can return.
#[derive(Debug, thiserror::Error)]
pub enum CallError {
    #[error("{0}")]
    Xrpc(proto_blue_xrpc::XrpcError),
    #[error(transparent)]
    Transport(#[from] proto_blue_xrpc::Error),
    #[error(transparent)]
    Json(#[from] serde_json::Error),
}

fn map_xrpc_error(err: proto_blue_xrpc::XrpcError) -> CallError {
    CallError::Xrpc(err)
}

/// Execute the query.
pub async fn call(
    client: &proto_blue_xrpc::XrpcClient,
    opts: Option<&proto_blue_xrpc::CallOptions>,
) -> Result<Output, CallError> {
    let response = match client
        .query("com.atproto.server.checkAccountStatus", None, opts)
        .await
    {
        Ok(r) => r,
        Err(proto_blue_xrpc::Error::Xrpc(x)) => return Err(map_xrpc_error(x)),
        Err(e) => return Err(CallError::Transport(e)),
    };
    Ok(serde_json::from_value(response.data)?)
}

/// Register a typed handler for this method on an [`proto_blue_xrpc::XrpcServer`].
#[cfg(feature = "server")]
pub fn register<F, Fut>(
    server: proto_blue_xrpc::XrpcServer,
    handler: F,
) -> proto_blue_xrpc::XrpcServer
where
    F: Fn(proto_blue_xrpc::HandlerContext) -> Fut + Send + Sync + 'static,
    Fut: std::future::Future<Output = Result<Output, proto_blue_xrpc::XrpcServerError>>
        + Send
        + 'static,
{
    let handler = std::sync::Arc::new(handler);
    server.query("com.atproto.server.checkAccountStatus", move |ctx| {
        let handler = handler.clone();
        async move {
            let out = handler(ctx).await?;
            let value = serde_json::to_value(&out).map_err(|e| {
                proto_blue_xrpc::XrpcServerError::new(
                    proto_blue_xrpc::ResponseType::InternalServerError,
                    format!("output serialize: {e}"),
                )
            })?;
            Ok::<_, proto_blue_xrpc::XrpcServerError>(value)
        }
    })
}