Skip to main content

jacquard_api/tools_ozone/team/
add_member.rs

1// @generated by jacquard-lexicon. DO NOT EDIT.
2//
3// Lexicon: tools.ozone.team.addMember
4//
5// This file was automatically generated from Lexicon schemas.
6// Any manual changes will be overwritten on the next regeneration.
7
8#[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 AddMember<'a> {
23    #[serde(borrow)]
24    pub did: Did<'a>,
25    #[serde(borrow)]
26    pub role: AddMemberRole<'a>,
27}
28
29
30#[derive(Debug, Clone, PartialEq, Eq, Hash)]
31pub enum AddMemberRole<'a> {
32    RoleAdmin,
33    RoleModerator,
34    RoleVerifier,
35    RoleTriage,
36    Other(CowStr<'a>),
37}
38
39impl<'a> AddMemberRole<'a> {
40    pub fn as_str(&self) -> &str {
41        match self {
42            Self::RoleAdmin => "tools.ozone.team.defs#roleAdmin",
43            Self::RoleModerator => "tools.ozone.team.defs#roleModerator",
44            Self::RoleVerifier => "tools.ozone.team.defs#roleVerifier",
45            Self::RoleTriage => "tools.ozone.team.defs#roleTriage",
46            Self::Other(s) => s.as_ref(),
47        }
48    }
49}
50
51impl<'a> From<&'a str> for AddMemberRole<'a> {
52    fn from(s: &'a str) -> Self {
53        match s {
54            "tools.ozone.team.defs#roleAdmin" => Self::RoleAdmin,
55            "tools.ozone.team.defs#roleModerator" => Self::RoleModerator,
56            "tools.ozone.team.defs#roleVerifier" => Self::RoleVerifier,
57            "tools.ozone.team.defs#roleTriage" => Self::RoleTriage,
58            _ => Self::Other(CowStr::from(s)),
59        }
60    }
61}
62
63impl<'a> From<String> for AddMemberRole<'a> {
64    fn from(s: String) -> Self {
65        match s.as_str() {
66            "tools.ozone.team.defs#roleAdmin" => Self::RoleAdmin,
67            "tools.ozone.team.defs#roleModerator" => Self::RoleModerator,
68            "tools.ozone.team.defs#roleVerifier" => Self::RoleVerifier,
69            "tools.ozone.team.defs#roleTriage" => Self::RoleTriage,
70            _ => Self::Other(CowStr::from(s)),
71        }
72    }
73}
74
75impl<'a> core::fmt::Display for AddMemberRole<'a> {
76    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
77        write!(f, "{}", self.as_str())
78    }
79}
80
81impl<'a> AsRef<str> for AddMemberRole<'a> {
82    fn as_ref(&self) -> &str {
83        self.as_str()
84    }
85}
86
87impl<'a> serde::Serialize for AddMemberRole<'a> {
88    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
89    where
90        S: serde::Serializer,
91    {
92        serializer.serialize_str(self.as_str())
93    }
94}
95
96impl<'de, 'a> serde::Deserialize<'de> for AddMemberRole<'a>
97where
98    'de: 'a,
99{
100    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
101    where
102        D: serde::Deserializer<'de>,
103    {
104        let s = <&'de str>::deserialize(deserializer)?;
105        Ok(Self::from(s))
106    }
107}
108
109impl<'a> Default for AddMemberRole<'a> {
110    fn default() -> Self {
111        Self::Other(Default::default())
112    }
113}
114
115impl jacquard_common::IntoStatic for AddMemberRole<'_> {
116    type Output = AddMemberRole<'static>;
117    fn into_static(self) -> Self::Output {
118        match self {
119            AddMemberRole::RoleAdmin => AddMemberRole::RoleAdmin,
120            AddMemberRole::RoleModerator => AddMemberRole::RoleModerator,
121            AddMemberRole::RoleVerifier => AddMemberRole::RoleVerifier,
122            AddMemberRole::RoleTriage => AddMemberRole::RoleTriage,
123            AddMemberRole::Other(v) => AddMemberRole::Other(v.into_static()),
124        }
125    }
126}
127
128
129#[lexicon]
130#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, IntoStatic)]
131#[serde(rename_all = "camelCase")]
132pub struct AddMemberOutput<'a> {
133    #[serde(flatten)]
134    #[serde(borrow)]
135    pub value: Member<'a>,
136}
137
138
139#[open_union]
140#[derive(
141    Serialize,
142    Deserialize,
143    Debug,
144    Clone,
145    PartialEq,
146    Eq,
147    thiserror::Error,
148    miette::Diagnostic,
149    IntoStatic
150)]
151
152#[serde(tag = "error", content = "message")]
153#[serde(bound(deserialize = "'de: 'a"))]
154pub enum AddMemberError<'a> {
155    /// Member already exists in the team.
156    #[serde(rename = "MemberAlreadyExists")]
157    MemberAlreadyExists(Option<CowStr<'a>>),
158}
159
160impl core::fmt::Display for AddMemberError<'_> {
161    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
162        match self {
163            Self::MemberAlreadyExists(msg) => {
164                write!(f, "MemberAlreadyExists")?;
165                if let Some(msg) = msg {
166                    write!(f, ": {}", msg)?;
167                }
168                Ok(())
169            }
170            Self::Unknown(err) => write!(f, "Unknown error: {:?}", err),
171        }
172    }
173}
174
175/// Response type for tools.ozone.team.addMember
176pub struct AddMemberResponse;
177impl jacquard_common::xrpc::XrpcResp for AddMemberResponse {
178    const NSID: &'static str = "tools.ozone.team.addMember";
179    const ENCODING: &'static str = "application/json";
180    type Output<'de> = AddMemberOutput<'de>;
181    type Err<'de> = AddMemberError<'de>;
182}
183
184impl<'a> jacquard_common::xrpc::XrpcRequest for AddMember<'a> {
185    const NSID: &'static str = "tools.ozone.team.addMember";
186    const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
187        "application/json",
188    );
189    type Response = AddMemberResponse;
190}
191
192/// Endpoint type for tools.ozone.team.addMember
193pub struct AddMemberRequest;
194impl jacquard_common::xrpc::XrpcEndpoint for AddMemberRequest {
195    const PATH: &'static str = "/xrpc/tools.ozone.team.addMember";
196    const METHOD: jacquard_common::xrpc::XrpcMethod = jacquard_common::xrpc::XrpcMethod::Procedure(
197        "application/json",
198    );
199    type Request<'de> = AddMember<'de>;
200    type Response = AddMemberResponse;
201}
202
203pub mod add_member_state {
204
205    pub use crate::builder_types::{Set, Unset, IsSet, IsUnset};
206    #[allow(unused)]
207    use ::core::marker::PhantomData;
208    mod sealed {
209        pub trait Sealed {}
210    }
211    /// State trait tracking which required fields have been set
212    pub trait State: sealed::Sealed {
213        type Did;
214        type Role;
215    }
216    /// Empty state - all required fields are unset
217    pub struct Empty(());
218    impl sealed::Sealed for Empty {}
219    impl State for Empty {
220        type Did = Unset;
221        type Role = Unset;
222    }
223    ///State transition - sets the `did` field to Set
224    pub struct SetDid<S: State = Empty>(PhantomData<fn() -> S>);
225    impl<S: State> sealed::Sealed for SetDid<S> {}
226    impl<S: State> State for SetDid<S> {
227        type Did = Set<members::did>;
228        type Role = S::Role;
229    }
230    ///State transition - sets the `role` field to Set
231    pub struct SetRole<S: State = Empty>(PhantomData<fn() -> S>);
232    impl<S: State> sealed::Sealed for SetRole<S> {}
233    impl<S: State> State for SetRole<S> {
234        type Did = S::Did;
235        type Role = Set<members::role>;
236    }
237    /// Marker types for field names
238    #[allow(non_camel_case_types)]
239    pub mod members {
240        ///Marker type for the `did` field
241        pub struct did(());
242        ///Marker type for the `role` field
243        pub struct role(());
244    }
245}
246
247/// Builder for constructing an instance of this type
248pub struct AddMemberBuilder<'a, S: add_member_state::State> {
249    _state: PhantomData<fn() -> S>,
250    _fields: (Option<Did<'a>>, Option<AddMemberRole<'a>>),
251    _lifetime: PhantomData<&'a ()>,
252}
253
254impl<'a> AddMember<'a> {
255    /// Create a new builder for this type
256    pub fn new() -> AddMemberBuilder<'a, add_member_state::Empty> {
257        AddMemberBuilder::new()
258    }
259}
260
261impl<'a> AddMemberBuilder<'a, add_member_state::Empty> {
262    /// Create a new builder with all fields unset
263    pub fn new() -> Self {
264        AddMemberBuilder {
265            _state: PhantomData,
266            _fields: (None, None),
267            _lifetime: PhantomData,
268        }
269    }
270}
271
272impl<'a, S> AddMemberBuilder<'a, S>
273where
274    S: add_member_state::State,
275    S::Did: add_member_state::IsUnset,
276{
277    /// Set the `did` field (required)
278    pub fn did(
279        mut self,
280        value: impl Into<Did<'a>>,
281    ) -> AddMemberBuilder<'a, add_member_state::SetDid<S>> {
282        self._fields.0 = Option::Some(value.into());
283        AddMemberBuilder {
284            _state: PhantomData,
285            _fields: self._fields,
286            _lifetime: PhantomData,
287        }
288    }
289}
290
291impl<'a, S> AddMemberBuilder<'a, S>
292where
293    S: add_member_state::State,
294    S::Role: add_member_state::IsUnset,
295{
296    /// Set the `role` field (required)
297    pub fn role(
298        mut self,
299        value: impl Into<AddMemberRole<'a>>,
300    ) -> AddMemberBuilder<'a, add_member_state::SetRole<S>> {
301        self._fields.1 = Option::Some(value.into());
302        AddMemberBuilder {
303            _state: PhantomData,
304            _fields: self._fields,
305            _lifetime: PhantomData,
306        }
307    }
308}
309
310impl<'a, S> AddMemberBuilder<'a, S>
311where
312    S: add_member_state::State,
313    S::Did: add_member_state::IsSet,
314    S::Role: add_member_state::IsSet,
315{
316    /// Build the final struct
317    pub fn build(self) -> AddMember<'a> {
318        AddMember {
319            did: self._fields.0.unwrap(),
320            role: self._fields.1.unwrap(),
321            extra_data: Default::default(),
322        }
323    }
324    /// Build the final struct with custom extra_data
325    pub fn build_with_data(
326        self,
327        extra_data: BTreeMap<
328            jacquard_common::deps::smol_str::SmolStr,
329            jacquard_common::types::value::Data<'a>,
330        >,
331    ) -> AddMember<'a> {
332        AddMember {
333            did: self._fields.0.unwrap(),
334            role: self._fields.1.unwrap(),
335            extra_data: Some(extra_data),
336        }
337    }
338}