jmap_client/identity/
helpers.rs

1/*
2 * Copyright Stalwart Labs LLC See the COPYING
3 * file at the top-level directory of this distribution.
4 *
5 * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 * https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 * <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
8 * option. This file may not be copied, modified, or distributed
9 * except according to those terms.
10 */
11
12use crate::{
13    client::Client,
14    core::{
15        changes::{ChangesRequest, ChangesResponse},
16        get::GetRequest,
17        request::{Arguments, Request},
18        response::{IdentityGetResponse, IdentitySetResponse},
19        set::{SetObject, SetRequest},
20    },
21    Get, Method, Set,
22};
23
24use super::{Identity, Property};
25
26impl Client {
27    #[maybe_async::maybe_async]
28    pub async fn identity_create(
29        &self,
30        name: impl Into<String>,
31        email: impl Into<String>,
32    ) -> crate::Result<Identity> {
33        let mut request = self.build();
34        let id = request
35            .set_identity()
36            .create()
37            .name(name)
38            .email(email)
39            .create_id()
40            .unwrap();
41        request
42            .send_single::<IdentitySetResponse>()
43            .await?
44            .created(&id)
45    }
46
47    #[maybe_async::maybe_async]
48    pub async fn identity_destroy(&self, id: &str) -> crate::Result<()> {
49        let mut request = self.build();
50        request.set_identity().destroy([id]);
51        request
52            .send_single::<IdentitySetResponse>()
53            .await?
54            .destroyed(id)
55    }
56
57    #[maybe_async::maybe_async]
58    pub async fn identity_get(
59        &self,
60        id: &str,
61        properties: Option<Vec<Property>>,
62    ) -> crate::Result<Option<Identity>> {
63        let mut request = self.build();
64        let get_request = request.get_identity().ids([id]);
65        if let Some(properties) = properties {
66            get_request.properties(properties.into_iter());
67        }
68        request
69            .send_single::<IdentityGetResponse>()
70            .await
71            .map(|mut r| r.take_list().pop())
72    }
73
74    #[maybe_async::maybe_async]
75    pub async fn identity_changes(
76        &self,
77        since_state: impl Into<String>,
78        max_changes: usize,
79    ) -> crate::Result<ChangesResponse<Identity<Get>>> {
80        let mut request = self.build();
81        request
82            .changes_identity(since_state)
83            .max_changes(max_changes);
84        request.send_single().await
85    }
86}
87
88impl Request<'_> {
89    pub fn get_identity(&mut self) -> &mut GetRequest<Identity<Set>> {
90        self.add_method_call(
91            Method::GetIdentity,
92            Arguments::identity_get(self.params(Method::GetIdentity)),
93        )
94        .identity_get_mut()
95    }
96
97    #[maybe_async::maybe_async]
98    pub async fn send_get_identity(self) -> crate::Result<IdentityGetResponse> {
99        self.send_single().await
100    }
101
102    pub fn set_identity(&mut self) -> &mut SetRequest<Identity<Set>> {
103        self.add_method_call(
104            Method::SetIdentity,
105            Arguments::identity_set(self.params(Method::SetIdentity)),
106        )
107        .identity_set_mut()
108    }
109
110    #[maybe_async::maybe_async]
111    pub async fn send_set_identity(self) -> crate::Result<IdentitySetResponse> {
112        self.send_single().await
113    }
114
115    pub fn changes_identity(&mut self, since_state: impl Into<String>) -> &mut ChangesRequest {
116        self.add_method_call(
117            Method::ChangesIdentity,
118            Arguments::changes(self.params(Method::ChangesIdentity), since_state.into()),
119        )
120        .changes_mut()
121    }
122
123    #[maybe_async::maybe_async]
124    pub async fn send_changes_identity(self) -> crate::Result<ChangesResponse<Identity<Get>>> {
125        self.send_single().await
126    }
127}