Skip to main content

proto_blue_api/generated/com/atproto/server/
deactivateAccount.rs

1// Generated by atproto-codegen. Do not edit.
2//! Lexicon: com.atproto.server.deactivateAccount
3
4use serde::{Deserialize, Serialize};
5
6/// Deactivates a currently active account. Stops serving of repo, and future writes to repo until reactivated. Used to finalize account migration with the old host after the account has been activated on the new host.
7/// XRPC Procedure: com.atproto.server.deactivateAccount
8#[derive(Debug, Clone, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct Input {
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub delete_after: Option<String>,
13}
14
15/// Errors a `call()` on this method can return.
16#[derive(Debug, thiserror::Error)]
17pub enum CallError {
18    #[error("{0}")]
19    Xrpc(proto_blue_xrpc::XrpcError),
20    #[error(transparent)]
21    Transport(#[from] proto_blue_xrpc::Error),
22    #[error(transparent)]
23    Json(#[from] serde_json::Error),
24}
25
26fn map_xrpc_error(err: proto_blue_xrpc::XrpcError) -> CallError {
27    CallError::Xrpc(err)
28}
29
30/// Execute the procedure.
31pub async fn call(
32    client: &proto_blue_xrpc::XrpcClient,
33    input: &Input,
34    opts: Option<&proto_blue_xrpc::CallOptions>,
35) -> Result<serde_json::Value, CallError> {
36    let qp_ref: Option<&proto_blue_xrpc::QueryParams> = None;
37    let body = proto_blue_xrpc::XrpcBody::Json(serde_json::to_value(input)?);
38    let response = match client.procedure("com.atproto.server.deactivateAccount", qp_ref, Some(body), opts).await {
39        Ok(r) => r,
40        Err(proto_blue_xrpc::Error::Xrpc(x)) => return Err(map_xrpc_error(x)),
41        Err(e) => return Err(CallError::Transport(e)),
42    };
43    Ok(response.data)
44}
45
46/// Register a typed handler for this procedure on an [`XrpcServer`].
47#[cfg(feature = "server")]
48pub fn register<F, Fut>(
49server: proto_blue_xrpc::XrpcServer,
50handler: F,
51) -> proto_blue_xrpc::XrpcServer
52where
53    F: Fn(proto_blue_xrpc::HandlerContext, Option<Input>) -> Fut + Send + Sync + 'static,
54    Fut: std::future::Future<Output = Result<serde_json::Value, proto_blue_xrpc::XrpcServerError>> + Send + 'static,
55{
56    let handler = std::sync::Arc::new(handler);
57    server.procedure("com.atproto.server.deactivateAccount", move |ctx| {
58        let handler = handler.clone();
59        async move {
60            let input = match ctx.json_body()? {
61                Some(v) => Some(serde_json::from_value::<Input>(v).map_err(|e| proto_blue_xrpc::XrpcServerError::new(proto_blue_xrpc::ResponseType::InvalidRequest, format!("input deserialize: {e}")))?),
62                None => None,
63            };
64            let out = handler(ctx, input).await?;
65            Ok::<_, proto_blue_xrpc::XrpcServerError>(out)
66        }
67    })
68}
69