jmap_client/identity/
helpers.rs1use 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}