jacquard_api/tools_ozone/team/
update_member.rs1#[allow(unused_imports)]
9use alloc::collections::BTreeMap;
10
11#[allow(unused_imports)]
12use core::marker::PhantomData;
13use jacquard_common::CowStr;
14use jacquard_common::types::string::Did;
15use jacquard_derive::{IntoStatic, lexicon, open_union};
16use serde::{Serialize, Deserialize};
17use crate::tools_ozone::team::Member;
18
19#[lexicon]
20#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
21#[serde(rename_all = "camelCase")]
22pub struct UpdateMember<'a> {
23 #[serde(borrow)]
24 pub did: Did<'a>,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 pub disabled: Option<bool>,
27 #[serde(skip_serializing_if = "Option::is_none")]
28 #[serde(borrow)]
29 pub role: Option<UpdateMemberRole<'a>>,
30}
31
32
33#[derive(Debug, Clone, PartialEq, Eq, Hash)]
34pub enum UpdateMemberRole<'a> {
35 RoleAdmin,
36 RoleModerator,
37 RoleVerifier,
38 RoleTriage,
39 Other(CowStr<'a>),
40}
41
42impl<'a> UpdateMemberRole<'a> {
43 pub fn as_str(&self) -> &str {
44 match self {
45 Self::RoleAdmin => "tools.ozone.team.defs#roleAdmin",
46 Self::RoleModerator => "tools.ozone.team.defs#roleModerator",
47 Self::RoleVerifier => "tools.ozone.team.defs#roleVerifier",
48 Self::RoleTriage => "tools.ozone.team.defs#roleTriage",
49 Self::Other(s) => s.as_ref(),
50 }
51 }
52}
53
54impl<'a> From<&'a str> for UpdateMemberRole<'a> {
55 fn from(s: &'a str) -> Self {
56 match s {
57 "tools.ozone.team.defs#roleAdmin" => Self::RoleAdmin,
58 "tools.ozone.team.defs#roleModerator" => Self::RoleModerator,
59 "tools.ozone.team.defs#roleVerifier" => Self::RoleVerifier,
60 "tools.ozone.team.defs#roleTriage" => Self::RoleTriage,
61 _ => Self::Other(CowStr::from(s)),
62 }
63 }
64}
65
66impl<'a> From<String> for UpdateMemberRole<'a> {
67 fn from(s: String) -> Self {
68 match s.as_str() {
69 "tools.ozone.team.defs#roleAdmin" => Self::RoleAdmin,
70 "tools.ozone.team.defs#roleModerator" => Self::RoleModerator,
71 "tools.ozone.team.defs#roleVerifier" => Self::RoleVerifier,
72 "tools.ozone.team.defs#roleTriage" => Self::RoleTriage,
73 _ => Self::Other(CowStr::from(s)),
74 }
75 }
76}
77
78impl<'a> core::fmt::Display for UpdateMemberRole<'a> {
79 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
80 write!(f, "{}", self.as_str())
81 }
82}
83
84impl<'a> AsRef<str> for UpdateMemberRole<'a> {
85 fn as_ref(&self) -> &str {
86 self.as_str()
87 }
88}
89
90impl<'a> serde::Serialize for UpdateMemberRole<'a> {
91 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
92 where
93 S: serde::Serializer,
94 {
95 serializer.serialize_str(self.as_str())
96 }
97}
98
99impl<'de, 'a> serde::Deserialize<'de> for UpdateMemberRole<'a>
100where
101 'de: 'a,
102{
103 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
104 where
105 D: serde::Deserializer<'de>,
106 {
107 let s = <&'de str>::deserialize(deserializer)?;
108 Ok(Self::from(s))
109 }
110}
111
112impl<'a> Default for UpdateMemberRole<'a> {
113 fn default() -> Self {
114 Self::Other(Default::default())
115 }
116}
117
118impl jacquard_common::IntoStatic for UpdateMemberRole<'_> {
119 type Output = UpdateMemberRole<'static>;
120 fn into_static(self) -> Self::Output {
121 match self {
122 UpdateMemberRole::RoleAdmin => UpdateMemberRole::RoleAdmin,
123 UpdateMemberRole::RoleModerator => UpdateMemberRole::RoleModerator,
124 UpdateMemberRole::RoleVerifier => UpdateMemberRole::RoleVerifier,
125 UpdateMemberRole::RoleTriage => UpdateMemberRole::RoleTriage,
126 UpdateMemberRole::Other(v) => UpdateMemberRole::Other(v.into_static()),
127 }
128 }
129}
130
131
132#[lexicon]
133#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
134#[serde(rename_all = "camelCase")]
135pub struct UpdateMemberOutput<'a> {
136 #[serde(flatten)]
137 #[serde(borrow)]
138 pub value: Member<'a>,
139}
140
141
142#[open_union]
143#[derive(
144 Serialize,
145 Deserialize,
146 Debug,
147 Clone,
148 PartialEq,
149 Eq,
150 thiserror::Error,
151 miette::Diagnostic,
152 IntoStatic
153)]
154
155#[serde(tag = "error", content = "message")]
156#[serde(bound(deserialize = "'de: 'a"))]
157pub enum UpdateMemberError<'a> {
158 #[serde(rename = "MemberNotFound")]
160 MemberNotFound(Option<CowStr<'a>>),
161}
162
163impl core::fmt::Display for UpdateMemberError<'_> {
164 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
165 match self {
166 Self::MemberNotFound(msg) => {
167 write!(f, "MemberNotFound")?;
168 if let Some(msg) = msg {
169 write!(f, ": {}", msg)?;
170 }
171 Ok(())
172 }
173 Self::Unknown(err) => write!(f, "Unknown error: {:?}", err),
174 }
175 }
176}
177
178pub struct UpdateMemberResponse;
180impl jacquard_common::xrpc::XrpcResp for UpdateMemberResponse {
181 const NSID: &'static str = "tools.ozone.team.updateMember";
182 const ENCODING: &'static str = "application/json";
183 type Output<'de> = UpdateMemberOutput<'de>;
184 type Err<'de> = UpdateMemberError<'de>;
185}
186
187impl<'a> jacquard_common::xrpc::XrpcRequest for UpdateMember<'a> {
188 const NSID: &'static str = "tools.ozone.team.updateMember";
189 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
190 "application/json",
191 );
192 type Response = UpdateMemberResponse;
193}
194
195pub struct UpdateMemberRequest;
197impl jacquard_common::xrpc::XrpcEndpoint for UpdateMemberRequest {
198 const PATH: &'static str = "/xrpc/tools.ozone.team.updateMember";
199 const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
200 "application/json",
201 );
202 type Request<'de> = UpdateMember<'de>;
203 type Response = UpdateMemberResponse;
204}
205
206pub mod update_member_state {
207
208 pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
209 #[allow(unused)]
210 use ::core::marker::PhantomData;
211 mod sealed {
212 pub trait Sealed {}
213 }
214 pub trait State: sealed::Sealed {
216 type Did;
217 }
218 pub struct Empty(());
220 impl sealed::Sealed for Empty {}
221 impl State for Empty {
222 type Did = Unset;
223 }
224 pub struct SetDid<S: State = Empty>(PhantomData<fn() -> S>);
226 impl<S: State> sealed::Sealed for SetDid<S> {}
227 impl<S: State> State for SetDid<S> {
228 type Did = Set<members::did>;
229 }
230 #[allow(non_camel_case_types)]
232 pub mod members {
233 pub struct did(());
235 }
236}
237
238pub struct UpdateMemberBuilder<'a, S: update_member_state::State> {
240 _state: PhantomData<fn() -> S>,
241 _fields: (Option<Did<'a>>, Option<bool>, Option<UpdateMemberRole<'a>>),
242 _lifetime: PhantomData<&'a ()>,
243}
244
245impl<'a> UpdateMember<'a> {
246 pub fn new() -> UpdateMemberBuilder<'a, update_member_state::Empty> {
248 UpdateMemberBuilder::new()
249 }
250}
251
252impl<'a> UpdateMemberBuilder<'a, update_member_state::Empty> {
253 pub fn new() -> Self {
255 UpdateMemberBuilder {
256 _state: PhantomData,
257 _fields: (None, None, None),
258 _lifetime: PhantomData,
259 }
260 }
261}
262
263impl<'a, S> UpdateMemberBuilder<'a, S>
264where
265 S: update_member_state::State,
266 S::Did: update_member_state::IsUnset,
267{
268 pub fn did(
270 mut self,
271 value: impl Into<Did<'a>>,
272 ) -> UpdateMemberBuilder<'a, update_member_state::SetDid<S>> {
273 self._fields.0 = Option::Some(value.into());
274 UpdateMemberBuilder {
275 _state: PhantomData,
276 _fields: self._fields,
277 _lifetime: PhantomData,
278 }
279 }
280}
281
282impl<'a, S: update_member_state::State> UpdateMemberBuilder<'a, S> {
283 pub fn disabled(mut self, value: impl Into<Option<bool>>) -> Self {
285 self._fields.1 = value.into();
286 self
287 }
288 pub fn maybe_disabled(mut self, value: Option<bool>) -> Self {
290 self._fields.1 = value;
291 self
292 }
293}
294
295impl<'a, S: update_member_state::State> UpdateMemberBuilder<'a, S> {
296 pub fn role(mut self, value: impl Into<Option<UpdateMemberRole<'a>>>) -> Self {
298 self._fields.2 = value.into();
299 self
300 }
301 pub fn maybe_role(mut self, value: Option<UpdateMemberRole<'a>>) -> Self {
303 self._fields.2 = value;
304 self
305 }
306}
307
308impl<'a, S> UpdateMemberBuilder<'a, S>
309where
310 S: update_member_state::State,
311 S::Did: update_member_state::IsSet,
312{
313 pub fn build(self) -> UpdateMember<'a> {
315 UpdateMember {
316 did: self._fields.0.unwrap(),
317 disabled: self._fields.1,
318 role: self._fields.2,
319 extra_data: Default::default(),
320 }
321 }
322 pub fn build_with_data(
324 self,
325 extra_data: BTreeMap<
326 jacquard_common::deps::smol_str::SmolStr,
327 jacquard_common::types::value::Data<'a>,
328 >,
329 ) -> UpdateMember<'a> {
330 UpdateMember {
331 did: self._fields.0.unwrap(),
332 disabled: self._fields.1,
333 role: self._fields.2,
334 extra_data: Some(extra_data),
335 }
336 }
337}