ddnet_account_client/
delete.rs1use ddnet_accounts_shared::client::delete;
2use thiserror::Error;
3
4use crate::{
5 errors::{FsLikeError, HttpLikeError},
6 interface::Io,
7 safe_interface::{IoSafe, SafeIo},
8};
9
10#[derive(Error, Debug)]
12pub enum DeleteResult {
13 #[error("{0}")]
15 HttpLikeError(HttpLikeError),
16 #[error("{0}")]
18 FsLikeError(FsLikeError),
19 #[error("Delete failed: {0}")]
21 Other(anyhow::Error),
22}
23
24impl From<HttpLikeError> for DeleteResult {
25 fn from(value: HttpLikeError) -> Self {
26 Self::HttpLikeError(value)
27 }
28}
29
30impl From<FsLikeError> for DeleteResult {
31 fn from(value: FsLikeError) -> Self {
32 Self::FsLikeError(value)
33 }
34}
35
36pub async fn delete(account_token_hex: String, io: &dyn Io) -> anyhow::Result<(), DeleteResult> {
38 delete_impl(account_token_hex, io.into()).await
39}
40
41async fn delete_impl(
42 account_token_hex: String,
43 io: IoSafe<'_>,
44) -> anyhow::Result<(), DeleteResult> {
45 let delete_req = delete::delete(account_token_hex).map_err(DeleteResult::Other)?;
46
47 io.request_delete_account(delete_req)
48 .await?
49 .map_err(|err| DeleteResult::Other(err.into()))?;
50 let _ = io.remove_serialized_session_key_pair().await;
52
53 Ok(())
54}