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#![allow(clippy::pedantic, clippy::nursery, clippy::all)]
4
5use serde::{Deserialize, Serialize};
6
7/// 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.
8/// XRPC Procedure: com.atproto.server.deactivateAccount
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct Input {
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub delete_after: Option<proto_blue_syntax::Datetime>,
14}
15
16/// Errors a `call()` on this method can return.
17#[derive(Debug, thiserror::Error)]
18pub enum CallError {
19    #[error("{0}")]
20    Xrpc(proto_blue_xrpc::XrpcError),
21    #[error(transparent)]
22    Transport(#[from] proto_blue_xrpc::Error),
23    #[error(transparent)]
24    Json(#[from] serde_json::Error),
25}
26
27fn map_xrpc_error(err: proto_blue_xrpc::XrpcError) -> CallError {
28    CallError::Xrpc(err)
29}
30
31/// Execute the procedure.
32pub async fn call(
33    client: &proto_blue_xrpc::XrpcClient,
34    input: &Input,
35    opts: Option<&proto_blue_xrpc::CallOptions>,
36) -> Result<serde_json::Value, CallError> {
37    let qp_ref: Option<&proto_blue_xrpc::QueryParams> = None;
38    let body = proto_blue_xrpc::XrpcBody::Json(serde_json::to_value(input)?);
39    let response = match client
40        .procedure(
41            "com.atproto.server.deactivateAccount",
42            qp_ref,
43            Some(body),
44            opts,
45        )
46        .await
47    {
48        Ok(r) => r,
49        Err(proto_blue_xrpc::Error::Xrpc(x)) => return Err(map_xrpc_error(x)),
50        Err(e) => return Err(CallError::Transport(e)),
51    };
52    Ok(response.data)
53}
54
55/// Register a typed handler for this procedure on an [`proto_blue_xrpc::XrpcServer`].
56#[cfg(feature = "server")]
57pub fn register<F, Fut>(
58    server: proto_blue_xrpc::XrpcServer,
59    handler: F,
60) -> proto_blue_xrpc::XrpcServer
61where
62    F: Fn(proto_blue_xrpc::HandlerContext, Option<Input>) -> Fut + Send + Sync + 'static,
63    Fut: std::future::Future<Output = Result<serde_json::Value, proto_blue_xrpc::XrpcServerError>>
64        + Send
65        + 'static,
66{
67    let handler = std::sync::Arc::new(handler);
68    server.procedure("com.atproto.server.deactivateAccount", move |ctx| {
69        let handler = handler.clone();
70        async move {
71            let input = match ctx.json_body()? {
72                Some(v) => Some(serde_json::from_value::<Input>(v).map_err(|e| {
73                    proto_blue_xrpc::XrpcServerError::new(
74                        proto_blue_xrpc::ResponseType::InvalidRequest,
75                        format!("input deserialize: {e}"),
76                    )
77                })?),
78                None => None,
79            };
80            let out = handler(ctx, input).await?;
81            Ok::<_, proto_blue_xrpc::XrpcServerError>(out)
82        }
83    })
84}