Skip to main content

dropbox_sdk/generated/types/
team.rs

1// DO NOT EDIT
2// This file was @generated by Stone
3
4#![allow(
5    clippy::too_many_arguments,
6    clippy::large_enum_variant,
7    clippy::result_large_err,
8    clippy::doc_markdown,
9    clippy::doc_lazy_continuation,
10)]
11
12pub type GroupsGetInfoResult = Vec<GroupsGetInfoItem>;
13pub type LegalHoldId = String;
14pub type LegalHoldPolicyDescription = String;
15pub type LegalHoldPolicyName = String;
16pub type LegalHoldsGetPolicyResult = LegalHoldPolicy;
17pub type LegalHoldsPolicyCreateResult = LegalHoldPolicy;
18pub type LegalHoldsPolicyUpdateResult = LegalHoldPolicy;
19pub type ListHeldRevisionCursor = String;
20pub type MembersGetInfoResult = Vec<MembersGetInfoItem>;
21pub type NumberPerDay = Vec<Option<u64>>;
22pub type Path = String;
23pub type TeamMemberRoleId = String;
24pub type UserQuota = u32;
25
26/// Information on active web sessions.
27#[derive(Debug, Clone, PartialEq, Eq)]
28#[non_exhaustive] // structs may have more fields added in the future.
29pub struct ActiveWebSession {
30    /// The session id.
31    pub session_id: String,
32    /// Information on the hosting device.
33    pub user_agent: String,
34    /// Information on the hosting operating system.
35    pub os: String,
36    /// Information on the browser used for this web session.
37    pub browser: String,
38    /// The IP address of the last activity from this session.
39    pub ip_address: Option<String>,
40    /// The country from which the last activity from this session was made.
41    pub country: Option<String>,
42    /// The time this session was created.
43    pub created: Option<crate::types::common::DropboxTimestamp>,
44    /// The time of the last activity from this session.
45    pub updated: Option<crate::types::common::DropboxTimestamp>,
46    /// The time this session expires.
47    pub expires: Option<crate::types::common::DropboxTimestamp>,
48}
49
50impl ActiveWebSession {
51    pub fn new(session_id: String, user_agent: String, os: String, browser: String) -> Self {
52        ActiveWebSession {
53            session_id,
54            user_agent,
55            os,
56            browser,
57            ip_address: None,
58            country: None,
59            created: None,
60            updated: None,
61            expires: None,
62        }
63    }
64
65    pub fn with_ip_address(mut self, value: String) -> Self {
66        self.ip_address = Some(value);
67        self
68    }
69
70    pub fn with_country(mut self, value: String) -> Self {
71        self.country = Some(value);
72        self
73    }
74
75    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
76        self.created = Some(value);
77        self
78    }
79
80    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
81        self.updated = Some(value);
82        self
83    }
84
85    pub fn with_expires(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
86        self.expires = Some(value);
87        self
88    }
89}
90
91const ACTIVE_WEB_SESSION_FIELDS: &[&str] = &["session_id",
92                                             "user_agent",
93                                             "os",
94                                             "browser",
95                                             "ip_address",
96                                             "country",
97                                             "created",
98                                             "updated",
99                                             "expires"];
100impl ActiveWebSession {
101    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
102        map: V,
103    ) -> Result<ActiveWebSession, V::Error> {
104        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
105    }
106
107    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
108        mut map: V,
109        optional: bool,
110    ) -> Result<Option<ActiveWebSession>, V::Error> {
111        let mut field_session_id = None;
112        let mut field_user_agent = None;
113        let mut field_os = None;
114        let mut field_browser = None;
115        let mut field_ip_address = None;
116        let mut field_country = None;
117        let mut field_created = None;
118        let mut field_updated = None;
119        let mut field_expires = None;
120        let mut nothing = true;
121        while let Some(key) = map.next_key::<&str>()? {
122            nothing = false;
123            match key {
124                "session_id" => {
125                    if field_session_id.is_some() {
126                        return Err(::serde::de::Error::duplicate_field("session_id"));
127                    }
128                    field_session_id = Some(map.next_value()?);
129                }
130                "user_agent" => {
131                    if field_user_agent.is_some() {
132                        return Err(::serde::de::Error::duplicate_field("user_agent"));
133                    }
134                    field_user_agent = Some(map.next_value()?);
135                }
136                "os" => {
137                    if field_os.is_some() {
138                        return Err(::serde::de::Error::duplicate_field("os"));
139                    }
140                    field_os = Some(map.next_value()?);
141                }
142                "browser" => {
143                    if field_browser.is_some() {
144                        return Err(::serde::de::Error::duplicate_field("browser"));
145                    }
146                    field_browser = Some(map.next_value()?);
147                }
148                "ip_address" => {
149                    if field_ip_address.is_some() {
150                        return Err(::serde::de::Error::duplicate_field("ip_address"));
151                    }
152                    field_ip_address = Some(map.next_value()?);
153                }
154                "country" => {
155                    if field_country.is_some() {
156                        return Err(::serde::de::Error::duplicate_field("country"));
157                    }
158                    field_country = Some(map.next_value()?);
159                }
160                "created" => {
161                    if field_created.is_some() {
162                        return Err(::serde::de::Error::duplicate_field("created"));
163                    }
164                    field_created = Some(map.next_value()?);
165                }
166                "updated" => {
167                    if field_updated.is_some() {
168                        return Err(::serde::de::Error::duplicate_field("updated"));
169                    }
170                    field_updated = Some(map.next_value()?);
171                }
172                "expires" => {
173                    if field_expires.is_some() {
174                        return Err(::serde::de::Error::duplicate_field("expires"));
175                    }
176                    field_expires = Some(map.next_value()?);
177                }
178                _ => {
179                    // unknown field allowed and ignored
180                    map.next_value::<::serde_json::Value>()?;
181                }
182            }
183        }
184        if optional && nothing {
185            return Ok(None);
186        }
187        let result = ActiveWebSession {
188            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
189            user_agent: field_user_agent.ok_or_else(|| ::serde::de::Error::missing_field("user_agent"))?,
190            os: field_os.ok_or_else(|| ::serde::de::Error::missing_field("os"))?,
191            browser: field_browser.ok_or_else(|| ::serde::de::Error::missing_field("browser"))?,
192            ip_address: field_ip_address.and_then(Option::flatten),
193            country: field_country.and_then(Option::flatten),
194            created: field_created.and_then(Option::flatten),
195            updated: field_updated.and_then(Option::flatten),
196            expires: field_expires.and_then(Option::flatten),
197        };
198        Ok(Some(result))
199    }
200
201    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
202        &self,
203        s: &mut S::SerializeStruct,
204    ) -> Result<(), S::Error> {
205        use serde::ser::SerializeStruct;
206        s.serialize_field("session_id", &self.session_id)?;
207        s.serialize_field("user_agent", &self.user_agent)?;
208        s.serialize_field("os", &self.os)?;
209        s.serialize_field("browser", &self.browser)?;
210        if let Some(val) = &self.ip_address {
211            s.serialize_field("ip_address", val)?;
212        }
213        if let Some(val) = &self.country {
214            s.serialize_field("country", val)?;
215        }
216        if let Some(val) = &self.created {
217            s.serialize_field("created", val)?;
218        }
219        if let Some(val) = &self.updated {
220            s.serialize_field("updated", val)?;
221        }
222        if let Some(val) = &self.expires {
223            s.serialize_field("expires", val)?;
224        }
225        Ok(())
226    }
227}
228
229impl<'de> ::serde::de::Deserialize<'de> for ActiveWebSession {
230    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
231        // struct deserializer
232        use serde::de::{MapAccess, Visitor};
233        struct StructVisitor;
234        impl<'de> Visitor<'de> for StructVisitor {
235            type Value = ActiveWebSession;
236            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
237                f.write_str("a ActiveWebSession struct")
238            }
239            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
240                ActiveWebSession::internal_deserialize(map)
241            }
242        }
243        deserializer.deserialize_struct("ActiveWebSession", ACTIVE_WEB_SESSION_FIELDS, StructVisitor)
244    }
245}
246
247impl ::serde::ser::Serialize for ActiveWebSession {
248    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
249        // struct serializer
250        use serde::ser::SerializeStruct;
251        let mut s = serializer.serialize_struct("ActiveWebSession", 9)?;
252        self.internal_serialize::<S>(&mut s)?;
253        s.end()
254    }
255}
256
257// struct extends DeviceSession
258impl From<ActiveWebSession> for DeviceSession {
259    fn from(subtype: ActiveWebSession) -> Self {
260        Self {
261            session_id: subtype.session_id,
262            ip_address: subtype.ip_address,
263            country: subtype.country,
264            created: subtype.created,
265            updated: subtype.updated,
266        }
267    }
268}
269/// Result of trying to add a secondary email to a user. 'success' is the only value indicating that
270/// a secondary email was successfully added to a user. The other values explain the type of error
271/// that occurred, and include the email for which the error occurred.
272#[derive(Debug, Clone, PartialEq, Eq)]
273#[non_exhaustive] // variants may be added in the future
274pub enum AddSecondaryEmailResult {
275    /// Describes a secondary email that was successfully added to a user.
276    Success(crate::types::secondary_emails::SecondaryEmail),
277    /// Secondary email is not available to be claimed by the user.
278    Unavailable(crate::types::common::EmailAddress),
279    /// Secondary email is already a pending email for the user.
280    AlreadyPending(crate::types::common::EmailAddress),
281    /// Secondary email is already a verified email for the user.
282    AlreadyOwnedByUser(crate::types::common::EmailAddress),
283    /// User already has the maximum number of secondary emails allowed.
284    ReachedLimit(crate::types::common::EmailAddress),
285    /// Field is deprecated. A transient error occurred. Please try again later.
286    #[deprecated]
287    TransientError(crate::types::common::EmailAddress),
288    /// An error occurred due to conflicting updates. Please try again later.
289    TooManyUpdates(crate::types::common::EmailAddress),
290    /// An unknown error occurred.
291    UnknownError(crate::types::common::EmailAddress),
292    /// Too many emails are being sent to this email address. Please try again later.
293    RateLimited(crate::types::common::EmailAddress),
294    /// Catch-all used for unrecognized values returned from the server. Encountering this value
295    /// typically indicates that this SDK version is out of date.
296    Other,
297}
298
299impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailResult {
300    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
301        // union deserializer
302        use serde::de::{self, MapAccess, Visitor};
303        struct EnumVisitor;
304        impl<'de> Visitor<'de> for EnumVisitor {
305            type Value = AddSecondaryEmailResult;
306            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
307                f.write_str("a AddSecondaryEmailResult structure")
308            }
309            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
310                let tag: &str = match map.next_key()? {
311                    Some(".tag") => map.next_value()?,
312                    _ => return Err(de::Error::missing_field(".tag"))
313                };
314                let value = match tag {
315                    "success" => AddSecondaryEmailResult::Success(crate::types::secondary_emails::SecondaryEmail::internal_deserialize(&mut map)?),
316                    "unavailable" => {
317                        match map.next_key()? {
318                            Some("unavailable") => AddSecondaryEmailResult::Unavailable(map.next_value()?),
319                            None => return Err(de::Error::missing_field("unavailable")),
320                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
321                        }
322                    }
323                    "already_pending" => {
324                        match map.next_key()? {
325                            Some("already_pending") => AddSecondaryEmailResult::AlreadyPending(map.next_value()?),
326                            None => return Err(de::Error::missing_field("already_pending")),
327                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
328                        }
329                    }
330                    "already_owned_by_user" => {
331                        match map.next_key()? {
332                            Some("already_owned_by_user") => AddSecondaryEmailResult::AlreadyOwnedByUser(map.next_value()?),
333                            None => return Err(de::Error::missing_field("already_owned_by_user")),
334                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
335                        }
336                    }
337                    "reached_limit" => {
338                        match map.next_key()? {
339                            Some("reached_limit") => AddSecondaryEmailResult::ReachedLimit(map.next_value()?),
340                            None => return Err(de::Error::missing_field("reached_limit")),
341                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
342                        }
343                    }
344                    #[allow(deprecated)]
345                    "transient_error" => {
346                        match map.next_key()? {
347                            Some("transient_error") => AddSecondaryEmailResult::TransientError(map.next_value()?),
348                            None => return Err(de::Error::missing_field("transient_error")),
349                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
350                        }
351                    }
352                    "too_many_updates" => {
353                        match map.next_key()? {
354                            Some("too_many_updates") => AddSecondaryEmailResult::TooManyUpdates(map.next_value()?),
355                            None => return Err(de::Error::missing_field("too_many_updates")),
356                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
357                        }
358                    }
359                    "unknown_error" => {
360                        match map.next_key()? {
361                            Some("unknown_error") => AddSecondaryEmailResult::UnknownError(map.next_value()?),
362                            None => return Err(de::Error::missing_field("unknown_error")),
363                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
364                        }
365                    }
366                    "rate_limited" => {
367                        match map.next_key()? {
368                            Some("rate_limited") => AddSecondaryEmailResult::RateLimited(map.next_value()?),
369                            None => return Err(de::Error::missing_field("rate_limited")),
370                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
371                        }
372                    }
373                    _ => AddSecondaryEmailResult::Other,
374                };
375                crate::eat_json_fields(&mut map)?;
376                Ok(value)
377            }
378        }
379        const VARIANTS: &[&str] = &["success",
380                                    "unavailable",
381                                    "already_pending",
382                                    "already_owned_by_user",
383                                    "reached_limit",
384                                    "transient_error",
385                                    "too_many_updates",
386                                    "unknown_error",
387                                    "rate_limited",
388                                    "other"];
389        deserializer.deserialize_struct("AddSecondaryEmailResult", VARIANTS, EnumVisitor)
390    }
391}
392
393impl ::serde::ser::Serialize for AddSecondaryEmailResult {
394    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
395        // union serializer
396        use serde::ser::SerializeStruct;
397        match self {
398            AddSecondaryEmailResult::Success(x) => {
399                // struct
400                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 3)?;
401                s.serialize_field(".tag", "success")?;
402                x.internal_serialize::<S>(&mut s)?;
403                s.end()
404            }
405            AddSecondaryEmailResult::Unavailable(x) => {
406                // primitive
407                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
408                s.serialize_field(".tag", "unavailable")?;
409                s.serialize_field("unavailable", x)?;
410                s.end()
411            }
412            AddSecondaryEmailResult::AlreadyPending(x) => {
413                // primitive
414                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
415                s.serialize_field(".tag", "already_pending")?;
416                s.serialize_field("already_pending", x)?;
417                s.end()
418            }
419            AddSecondaryEmailResult::AlreadyOwnedByUser(x) => {
420                // primitive
421                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
422                s.serialize_field(".tag", "already_owned_by_user")?;
423                s.serialize_field("already_owned_by_user", x)?;
424                s.end()
425            }
426            AddSecondaryEmailResult::ReachedLimit(x) => {
427                // primitive
428                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
429                s.serialize_field(".tag", "reached_limit")?;
430                s.serialize_field("reached_limit", x)?;
431                s.end()
432            }
433            #[allow(deprecated)]
434            AddSecondaryEmailResult::TransientError(x) => {
435                // primitive
436                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
437                s.serialize_field(".tag", "transient_error")?;
438                s.serialize_field("transient_error", x)?;
439                s.end()
440            }
441            AddSecondaryEmailResult::TooManyUpdates(x) => {
442                // primitive
443                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
444                s.serialize_field(".tag", "too_many_updates")?;
445                s.serialize_field("too_many_updates", x)?;
446                s.end()
447            }
448            AddSecondaryEmailResult::UnknownError(x) => {
449                // primitive
450                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
451                s.serialize_field(".tag", "unknown_error")?;
452                s.serialize_field("unknown_error", x)?;
453                s.end()
454            }
455            AddSecondaryEmailResult::RateLimited(x) => {
456                // primitive
457                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
458                s.serialize_field(".tag", "rate_limited")?;
459                s.serialize_field("rate_limited", x)?;
460                s.end()
461            }
462            AddSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
463        }
464    }
465}
466
467#[derive(Debug, Clone, PartialEq, Eq)]
468#[non_exhaustive] // structs may have more fields added in the future.
469pub struct AddSecondaryEmailsArg {
470    /// List of users and secondary emails to add.
471    pub new_secondary_emails: Vec<UserSecondaryEmailsArg>,
472}
473
474impl AddSecondaryEmailsArg {
475    pub fn new(new_secondary_emails: Vec<UserSecondaryEmailsArg>) -> Self {
476        AddSecondaryEmailsArg {
477            new_secondary_emails,
478        }
479    }
480}
481
482const ADD_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["new_secondary_emails"];
483impl AddSecondaryEmailsArg {
484    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
485        map: V,
486    ) -> Result<AddSecondaryEmailsArg, V::Error> {
487        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
488    }
489
490    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
491        mut map: V,
492        optional: bool,
493    ) -> Result<Option<AddSecondaryEmailsArg>, V::Error> {
494        let mut field_new_secondary_emails = None;
495        let mut nothing = true;
496        while let Some(key) = map.next_key::<&str>()? {
497            nothing = false;
498            match key {
499                "new_secondary_emails" => {
500                    if field_new_secondary_emails.is_some() {
501                        return Err(::serde::de::Error::duplicate_field("new_secondary_emails"));
502                    }
503                    field_new_secondary_emails = Some(map.next_value()?);
504                }
505                _ => {
506                    // unknown field allowed and ignored
507                    map.next_value::<::serde_json::Value>()?;
508                }
509            }
510        }
511        if optional && nothing {
512            return Ok(None);
513        }
514        let result = AddSecondaryEmailsArg {
515            new_secondary_emails: field_new_secondary_emails.ok_or_else(|| ::serde::de::Error::missing_field("new_secondary_emails"))?,
516        };
517        Ok(Some(result))
518    }
519
520    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
521        &self,
522        s: &mut S::SerializeStruct,
523    ) -> Result<(), S::Error> {
524        use serde::ser::SerializeStruct;
525        s.serialize_field("new_secondary_emails", &self.new_secondary_emails)?;
526        Ok(())
527    }
528}
529
530impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsArg {
531    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
532        // struct deserializer
533        use serde::de::{MapAccess, Visitor};
534        struct StructVisitor;
535        impl<'de> Visitor<'de> for StructVisitor {
536            type Value = AddSecondaryEmailsArg;
537            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
538                f.write_str("a AddSecondaryEmailsArg struct")
539            }
540            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
541                AddSecondaryEmailsArg::internal_deserialize(map)
542            }
543        }
544        deserializer.deserialize_struct("AddSecondaryEmailsArg", ADD_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
545    }
546}
547
548impl ::serde::ser::Serialize for AddSecondaryEmailsArg {
549    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
550        // struct serializer
551        use serde::ser::SerializeStruct;
552        let mut s = serializer.serialize_struct("AddSecondaryEmailsArg", 1)?;
553        self.internal_serialize::<S>(&mut s)?;
554        s.end()
555    }
556}
557
558/// Error returned when adding secondary emails fails.
559#[derive(Debug, Clone, PartialEq, Eq)]
560#[non_exhaustive] // variants may be added in the future
561pub enum AddSecondaryEmailsError {
562    /// Secondary emails are disabled for the team.
563    SecondaryEmailsDisabled,
564    /// A maximum of 20 secondary emails can be added in a single call.
565    TooManyEmails,
566    /// Catch-all used for unrecognized values returned from the server. Encountering this value
567    /// typically indicates that this SDK version is out of date.
568    Other,
569}
570
571impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsError {
572    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
573        // union deserializer
574        use serde::de::{self, MapAccess, Visitor};
575        struct EnumVisitor;
576        impl<'de> Visitor<'de> for EnumVisitor {
577            type Value = AddSecondaryEmailsError;
578            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
579                f.write_str("a AddSecondaryEmailsError structure")
580            }
581            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
582                let tag: &str = match map.next_key()? {
583                    Some(".tag") => map.next_value()?,
584                    _ => return Err(de::Error::missing_field(".tag"))
585                };
586                let value = match tag {
587                    "secondary_emails_disabled" => AddSecondaryEmailsError::SecondaryEmailsDisabled,
588                    "too_many_emails" => AddSecondaryEmailsError::TooManyEmails,
589                    _ => AddSecondaryEmailsError::Other,
590                };
591                crate::eat_json_fields(&mut map)?;
592                Ok(value)
593            }
594        }
595        const VARIANTS: &[&str] = &["secondary_emails_disabled",
596                                    "too_many_emails",
597                                    "other"];
598        deserializer.deserialize_struct("AddSecondaryEmailsError", VARIANTS, EnumVisitor)
599    }
600}
601
602impl ::serde::ser::Serialize for AddSecondaryEmailsError {
603    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
604        // union serializer
605        use serde::ser::SerializeStruct;
606        match self {
607            AddSecondaryEmailsError::SecondaryEmailsDisabled => {
608                // unit
609                let mut s = serializer.serialize_struct("AddSecondaryEmailsError", 1)?;
610                s.serialize_field(".tag", "secondary_emails_disabled")?;
611                s.end()
612            }
613            AddSecondaryEmailsError::TooManyEmails => {
614                // unit
615                let mut s = serializer.serialize_struct("AddSecondaryEmailsError", 1)?;
616                s.serialize_field(".tag", "too_many_emails")?;
617                s.end()
618            }
619            AddSecondaryEmailsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
620        }
621    }
622}
623
624impl ::std::error::Error for AddSecondaryEmailsError {
625}
626
627impl ::std::fmt::Display for AddSecondaryEmailsError {
628    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
629        match self {
630            AddSecondaryEmailsError::SecondaryEmailsDisabled => f.write_str("Secondary emails are disabled for the team."),
631            AddSecondaryEmailsError::TooManyEmails => f.write_str("A maximum of 20 secondary emails can be added in a single call."),
632            _ => write!(f, "{:?}", *self),
633        }
634    }
635}
636
637#[derive(Debug, Clone, PartialEq, Eq)]
638#[non_exhaustive] // structs may have more fields added in the future.
639pub struct AddSecondaryEmailsResult {
640    /// List of users and secondary email results.
641    pub results: Vec<UserAddResult>,
642}
643
644impl AddSecondaryEmailsResult {
645    pub fn new(results: Vec<UserAddResult>) -> Self {
646        AddSecondaryEmailsResult {
647            results,
648        }
649    }
650}
651
652const ADD_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["results"];
653impl AddSecondaryEmailsResult {
654    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
655        map: V,
656    ) -> Result<AddSecondaryEmailsResult, V::Error> {
657        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
658    }
659
660    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
661        mut map: V,
662        optional: bool,
663    ) -> Result<Option<AddSecondaryEmailsResult>, V::Error> {
664        let mut field_results = None;
665        let mut nothing = true;
666        while let Some(key) = map.next_key::<&str>()? {
667            nothing = false;
668            match key {
669                "results" => {
670                    if field_results.is_some() {
671                        return Err(::serde::de::Error::duplicate_field("results"));
672                    }
673                    field_results = Some(map.next_value()?);
674                }
675                _ => {
676                    // unknown field allowed and ignored
677                    map.next_value::<::serde_json::Value>()?;
678                }
679            }
680        }
681        if optional && nothing {
682            return Ok(None);
683        }
684        let result = AddSecondaryEmailsResult {
685            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
686        };
687        Ok(Some(result))
688    }
689
690    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
691        &self,
692        s: &mut S::SerializeStruct,
693    ) -> Result<(), S::Error> {
694        use serde::ser::SerializeStruct;
695        s.serialize_field("results", &self.results)?;
696        Ok(())
697    }
698}
699
700impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsResult {
701    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
702        // struct deserializer
703        use serde::de::{MapAccess, Visitor};
704        struct StructVisitor;
705        impl<'de> Visitor<'de> for StructVisitor {
706            type Value = AddSecondaryEmailsResult;
707            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
708                f.write_str("a AddSecondaryEmailsResult struct")
709            }
710            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
711                AddSecondaryEmailsResult::internal_deserialize(map)
712            }
713        }
714        deserializer.deserialize_struct("AddSecondaryEmailsResult", ADD_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
715    }
716}
717
718impl ::serde::ser::Serialize for AddSecondaryEmailsResult {
719    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
720        // struct serializer
721        use serde::ser::SerializeStruct;
722        let mut s = serializer.serialize_struct("AddSecondaryEmailsResult", 1)?;
723        self.internal_serialize::<S>(&mut s)?;
724        s.end()
725    }
726}
727
728/// Describes which team-related admin permissions a user has.
729#[derive(Debug, Clone, PartialEq, Eq)]
730pub enum AdminTier {
731    /// User is an administrator of the team - has all permissions.
732    TeamAdmin,
733    /// User can do most user provisioning, de-provisioning and management.
734    UserManagementAdmin,
735    /// User can do a limited set of common support tasks for existing users. Note: Dropbox is
736    /// adding new types of admin roles; these may display as support_admin.
737    SupportAdmin,
738    /// User is not an admin of the team.
739    MemberOnly,
740}
741
742impl<'de> ::serde::de::Deserialize<'de> for AdminTier {
743    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
744        // union deserializer
745        use serde::de::{self, MapAccess, Visitor};
746        struct EnumVisitor;
747        impl<'de> Visitor<'de> for EnumVisitor {
748            type Value = AdminTier;
749            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
750                f.write_str("a AdminTier structure")
751            }
752            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
753                let tag: &str = match map.next_key()? {
754                    Some(".tag") => map.next_value()?,
755                    _ => return Err(de::Error::missing_field(".tag"))
756                };
757                let value = match tag {
758                    "team_admin" => AdminTier::TeamAdmin,
759                    "user_management_admin" => AdminTier::UserManagementAdmin,
760                    "support_admin" => AdminTier::SupportAdmin,
761                    "member_only" => AdminTier::MemberOnly,
762                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
763                };
764                crate::eat_json_fields(&mut map)?;
765                Ok(value)
766            }
767        }
768        const VARIANTS: &[&str] = &["team_admin",
769                                    "user_management_admin",
770                                    "support_admin",
771                                    "member_only"];
772        deserializer.deserialize_struct("AdminTier", VARIANTS, EnumVisitor)
773    }
774}
775
776impl ::serde::ser::Serialize for AdminTier {
777    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
778        // union serializer
779        use serde::ser::SerializeStruct;
780        match self {
781            AdminTier::TeamAdmin => {
782                // unit
783                let mut s = serializer.serialize_struct("AdminTier", 1)?;
784                s.serialize_field(".tag", "team_admin")?;
785                s.end()
786            }
787            AdminTier::UserManagementAdmin => {
788                // unit
789                let mut s = serializer.serialize_struct("AdminTier", 1)?;
790                s.serialize_field(".tag", "user_management_admin")?;
791                s.end()
792            }
793            AdminTier::SupportAdmin => {
794                // unit
795                let mut s = serializer.serialize_struct("AdminTier", 1)?;
796                s.serialize_field(".tag", "support_admin")?;
797                s.end()
798            }
799            AdminTier::MemberOnly => {
800                // unit
801                let mut s = serializer.serialize_struct("AdminTier", 1)?;
802                s.serialize_field(".tag", "member_only")?;
803                s.end()
804            }
805        }
806    }
807}
808
809/// Information on linked third party applications.
810#[derive(Debug, Clone, PartialEq, Eq)]
811#[non_exhaustive] // structs may have more fields added in the future.
812pub struct ApiApp {
813    /// The application unique id.
814    pub app_id: String,
815    /// The application name.
816    pub app_name: String,
817    /// Whether the linked application uses a dedicated folder.
818    pub is_app_folder: bool,
819    /// The application publisher name.
820    pub publisher: Option<String>,
821    /// The publisher's URL.
822    pub publisher_url: Option<String>,
823    /// The time this application was linked.
824    pub linked: Option<crate::types::common::DropboxTimestamp>,
825}
826
827impl ApiApp {
828    pub fn new(app_id: String, app_name: String, is_app_folder: bool) -> Self {
829        ApiApp {
830            app_id,
831            app_name,
832            is_app_folder,
833            publisher: None,
834            publisher_url: None,
835            linked: None,
836        }
837    }
838
839    pub fn with_publisher(mut self, value: String) -> Self {
840        self.publisher = Some(value);
841        self
842    }
843
844    pub fn with_publisher_url(mut self, value: String) -> Self {
845        self.publisher_url = Some(value);
846        self
847    }
848
849    pub fn with_linked(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
850        self.linked = Some(value);
851        self
852    }
853}
854
855const API_APP_FIELDS: &[&str] = &["app_id",
856                                  "app_name",
857                                  "is_app_folder",
858                                  "publisher",
859                                  "publisher_url",
860                                  "linked"];
861impl ApiApp {
862    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
863        map: V,
864    ) -> Result<ApiApp, V::Error> {
865        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
866    }
867
868    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
869        mut map: V,
870        optional: bool,
871    ) -> Result<Option<ApiApp>, V::Error> {
872        let mut field_app_id = None;
873        let mut field_app_name = None;
874        let mut field_is_app_folder = None;
875        let mut field_publisher = None;
876        let mut field_publisher_url = None;
877        let mut field_linked = None;
878        let mut nothing = true;
879        while let Some(key) = map.next_key::<&str>()? {
880            nothing = false;
881            match key {
882                "app_id" => {
883                    if field_app_id.is_some() {
884                        return Err(::serde::de::Error::duplicate_field("app_id"));
885                    }
886                    field_app_id = Some(map.next_value()?);
887                }
888                "app_name" => {
889                    if field_app_name.is_some() {
890                        return Err(::serde::de::Error::duplicate_field("app_name"));
891                    }
892                    field_app_name = Some(map.next_value()?);
893                }
894                "is_app_folder" => {
895                    if field_is_app_folder.is_some() {
896                        return Err(::serde::de::Error::duplicate_field("is_app_folder"));
897                    }
898                    field_is_app_folder = Some(map.next_value()?);
899                }
900                "publisher" => {
901                    if field_publisher.is_some() {
902                        return Err(::serde::de::Error::duplicate_field("publisher"));
903                    }
904                    field_publisher = Some(map.next_value()?);
905                }
906                "publisher_url" => {
907                    if field_publisher_url.is_some() {
908                        return Err(::serde::de::Error::duplicate_field("publisher_url"));
909                    }
910                    field_publisher_url = Some(map.next_value()?);
911                }
912                "linked" => {
913                    if field_linked.is_some() {
914                        return Err(::serde::de::Error::duplicate_field("linked"));
915                    }
916                    field_linked = Some(map.next_value()?);
917                }
918                _ => {
919                    // unknown field allowed and ignored
920                    map.next_value::<::serde_json::Value>()?;
921                }
922            }
923        }
924        if optional && nothing {
925            return Ok(None);
926        }
927        let result = ApiApp {
928            app_id: field_app_id.ok_or_else(|| ::serde::de::Error::missing_field("app_id"))?,
929            app_name: field_app_name.ok_or_else(|| ::serde::de::Error::missing_field("app_name"))?,
930            is_app_folder: field_is_app_folder.ok_or_else(|| ::serde::de::Error::missing_field("is_app_folder"))?,
931            publisher: field_publisher.and_then(Option::flatten),
932            publisher_url: field_publisher_url.and_then(Option::flatten),
933            linked: field_linked.and_then(Option::flatten),
934        };
935        Ok(Some(result))
936    }
937
938    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
939        &self,
940        s: &mut S::SerializeStruct,
941    ) -> Result<(), S::Error> {
942        use serde::ser::SerializeStruct;
943        s.serialize_field("app_id", &self.app_id)?;
944        s.serialize_field("app_name", &self.app_name)?;
945        s.serialize_field("is_app_folder", &self.is_app_folder)?;
946        if let Some(val) = &self.publisher {
947            s.serialize_field("publisher", val)?;
948        }
949        if let Some(val) = &self.publisher_url {
950            s.serialize_field("publisher_url", val)?;
951        }
952        if let Some(val) = &self.linked {
953            s.serialize_field("linked", val)?;
954        }
955        Ok(())
956    }
957}
958
959impl<'de> ::serde::de::Deserialize<'de> for ApiApp {
960    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
961        // struct deserializer
962        use serde::de::{MapAccess, Visitor};
963        struct StructVisitor;
964        impl<'de> Visitor<'de> for StructVisitor {
965            type Value = ApiApp;
966            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
967                f.write_str("a ApiApp struct")
968            }
969            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
970                ApiApp::internal_deserialize(map)
971            }
972        }
973        deserializer.deserialize_struct("ApiApp", API_APP_FIELDS, StructVisitor)
974    }
975}
976
977impl ::serde::ser::Serialize for ApiApp {
978    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
979        // struct serializer
980        use serde::ser::SerializeStruct;
981        let mut s = serializer.serialize_struct("ApiApp", 6)?;
982        self.internal_serialize::<S>(&mut s)?;
983        s.end()
984    }
985}
986
987/// Base report structure.
988#[derive(Debug, Clone, PartialEq, Eq)]
989#[non_exhaustive] // structs may have more fields added in the future.
990pub struct BaseDfbReport {
991    /// First date present in the results as 'YYYY-MM-DD' or None.
992    pub start_date: String,
993}
994
995impl BaseDfbReport {
996    pub fn new(start_date: String) -> Self {
997        BaseDfbReport {
998            start_date,
999        }
1000    }
1001}
1002
1003const BASE_DFB_REPORT_FIELDS: &[&str] = &["start_date"];
1004impl BaseDfbReport {
1005    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1006        map: V,
1007    ) -> Result<BaseDfbReport, V::Error> {
1008        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1009    }
1010
1011    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1012        mut map: V,
1013        optional: bool,
1014    ) -> Result<Option<BaseDfbReport>, V::Error> {
1015        let mut field_start_date = None;
1016        let mut nothing = true;
1017        while let Some(key) = map.next_key::<&str>()? {
1018            nothing = false;
1019            match key {
1020                "start_date" => {
1021                    if field_start_date.is_some() {
1022                        return Err(::serde::de::Error::duplicate_field("start_date"));
1023                    }
1024                    field_start_date = Some(map.next_value()?);
1025                }
1026                _ => {
1027                    // unknown field allowed and ignored
1028                    map.next_value::<::serde_json::Value>()?;
1029                }
1030            }
1031        }
1032        if optional && nothing {
1033            return Ok(None);
1034        }
1035        let result = BaseDfbReport {
1036            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
1037        };
1038        Ok(Some(result))
1039    }
1040
1041    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1042        &self,
1043        s: &mut S::SerializeStruct,
1044    ) -> Result<(), S::Error> {
1045        use serde::ser::SerializeStruct;
1046        s.serialize_field("start_date", &self.start_date)?;
1047        Ok(())
1048    }
1049}
1050
1051impl<'de> ::serde::de::Deserialize<'de> for BaseDfbReport {
1052    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1053        // struct deserializer
1054        use serde::de::{MapAccess, Visitor};
1055        struct StructVisitor;
1056        impl<'de> Visitor<'de> for StructVisitor {
1057            type Value = BaseDfbReport;
1058            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1059                f.write_str("a BaseDfbReport struct")
1060            }
1061            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1062                BaseDfbReport::internal_deserialize(map)
1063            }
1064        }
1065        deserializer.deserialize_struct("BaseDfbReport", BASE_DFB_REPORT_FIELDS, StructVisitor)
1066    }
1067}
1068
1069impl ::serde::ser::Serialize for BaseDfbReport {
1070    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1071        // struct serializer
1072        use serde::ser::SerializeStruct;
1073        let mut s = serializer.serialize_struct("BaseDfbReport", 1)?;
1074        self.internal_serialize::<S>(&mut s)?;
1075        s.end()
1076    }
1077}
1078
1079/// Base error that all errors for existing team folders should extend.
1080#[derive(Debug, Clone, PartialEq, Eq)]
1081#[non_exhaustive] // variants may be added in the future
1082pub enum BaseTeamFolderError {
1083    AccessError(TeamFolderAccessError),
1084    StatusError(TeamFolderInvalidStatusError),
1085    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
1086    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1087    /// typically indicates that this SDK version is out of date.
1088    Other,
1089}
1090
1091impl<'de> ::serde::de::Deserialize<'de> for BaseTeamFolderError {
1092    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1093        // union deserializer
1094        use serde::de::{self, MapAccess, Visitor};
1095        struct EnumVisitor;
1096        impl<'de> Visitor<'de> for EnumVisitor {
1097            type Value = BaseTeamFolderError;
1098            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1099                f.write_str("a BaseTeamFolderError structure")
1100            }
1101            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1102                let tag: &str = match map.next_key()? {
1103                    Some(".tag") => map.next_value()?,
1104                    _ => return Err(de::Error::missing_field(".tag"))
1105                };
1106                let value = match tag {
1107                    "access_error" => {
1108                        match map.next_key()? {
1109                            Some("access_error") => BaseTeamFolderError::AccessError(map.next_value()?),
1110                            None => return Err(de::Error::missing_field("access_error")),
1111                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1112                        }
1113                    }
1114                    "status_error" => {
1115                        match map.next_key()? {
1116                            Some("status_error") => BaseTeamFolderError::StatusError(map.next_value()?),
1117                            None => return Err(de::Error::missing_field("status_error")),
1118                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1119                        }
1120                    }
1121                    "team_shared_dropbox_error" => {
1122                        match map.next_key()? {
1123                            Some("team_shared_dropbox_error") => BaseTeamFolderError::TeamSharedDropboxError(map.next_value()?),
1124                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
1125                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1126                        }
1127                    }
1128                    _ => BaseTeamFolderError::Other,
1129                };
1130                crate::eat_json_fields(&mut map)?;
1131                Ok(value)
1132            }
1133        }
1134        const VARIANTS: &[&str] = &["access_error",
1135                                    "status_error",
1136                                    "team_shared_dropbox_error",
1137                                    "other"];
1138        deserializer.deserialize_struct("BaseTeamFolderError", VARIANTS, EnumVisitor)
1139    }
1140}
1141
1142impl ::serde::ser::Serialize for BaseTeamFolderError {
1143    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1144        // union serializer
1145        use serde::ser::SerializeStruct;
1146        match self {
1147            BaseTeamFolderError::AccessError(x) => {
1148                // union or polymporphic struct
1149                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1150                s.serialize_field(".tag", "access_error")?;
1151                s.serialize_field("access_error", x)?;
1152                s.end()
1153            }
1154            BaseTeamFolderError::StatusError(x) => {
1155                // union or polymporphic struct
1156                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1157                s.serialize_field(".tag", "status_error")?;
1158                s.serialize_field("status_error", x)?;
1159                s.end()
1160            }
1161            BaseTeamFolderError::TeamSharedDropboxError(x) => {
1162                // union or polymporphic struct
1163                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1164                s.serialize_field(".tag", "team_shared_dropbox_error")?;
1165                s.serialize_field("team_shared_dropbox_error", x)?;
1166                s.end()
1167            }
1168            BaseTeamFolderError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1169        }
1170    }
1171}
1172
1173impl ::std::error::Error for BaseTeamFolderError {
1174    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
1175        match self {
1176            BaseTeamFolderError::AccessError(inner) => Some(inner),
1177            BaseTeamFolderError::StatusError(inner) => Some(inner),
1178            BaseTeamFolderError::TeamSharedDropboxError(inner) => Some(inner),
1179            _ => None,
1180        }
1181    }
1182}
1183
1184impl ::std::fmt::Display for BaseTeamFolderError {
1185    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1186        match self {
1187            BaseTeamFolderError::AccessError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1188            BaseTeamFolderError::StatusError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1189            BaseTeamFolderError::TeamSharedDropboxError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1190            _ => write!(f, "{:?}", *self),
1191        }
1192    }
1193}
1194
1195/// Launches one action-specific bulk suspend job.
1196#[derive(Debug, Clone, PartialEq, Eq)]
1197#[non_exhaustive] // structs may have more fields added in the future.
1198pub struct BulkSuspendArg {
1199    /// Must contain between 1 and 500 targets. The launch handler also rejects duplicate client
1200    /// item IDs and duplicate member selectors.
1201    pub members: Vec<BulkSuspendMemberTarget>,
1202}
1203
1204impl BulkSuspendArg {
1205    pub fn new(members: Vec<BulkSuspendMemberTarget>) -> Self {
1206        BulkSuspendArg {
1207            members,
1208        }
1209    }
1210}
1211
1212const BULK_SUSPEND_ARG_FIELDS: &[&str] = &["members"];
1213impl BulkSuspendArg {
1214    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1215        map: V,
1216    ) -> Result<BulkSuspendArg, V::Error> {
1217        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1218    }
1219
1220    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1221        mut map: V,
1222        optional: bool,
1223    ) -> Result<Option<BulkSuspendArg>, V::Error> {
1224        let mut field_members = None;
1225        let mut nothing = true;
1226        while let Some(key) = map.next_key::<&str>()? {
1227            nothing = false;
1228            match key {
1229                "members" => {
1230                    if field_members.is_some() {
1231                        return Err(::serde::de::Error::duplicate_field("members"));
1232                    }
1233                    field_members = Some(map.next_value()?);
1234                }
1235                _ => {
1236                    // unknown field allowed and ignored
1237                    map.next_value::<::serde_json::Value>()?;
1238                }
1239            }
1240        }
1241        if optional && nothing {
1242            return Ok(None);
1243        }
1244        let result = BulkSuspendArg {
1245            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
1246        };
1247        Ok(Some(result))
1248    }
1249
1250    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1251        &self,
1252        s: &mut S::SerializeStruct,
1253    ) -> Result<(), S::Error> {
1254        use serde::ser::SerializeStruct;
1255        s.serialize_field("members", &self.members)?;
1256        Ok(())
1257    }
1258}
1259
1260impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendArg {
1261    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1262        // struct deserializer
1263        use serde::de::{MapAccess, Visitor};
1264        struct StructVisitor;
1265        impl<'de> Visitor<'de> for StructVisitor {
1266            type Value = BulkSuspendArg;
1267            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1268                f.write_str("a BulkSuspendArg struct")
1269            }
1270            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1271                BulkSuspendArg::internal_deserialize(map)
1272            }
1273        }
1274        deserializer.deserialize_struct("BulkSuspendArg", BULK_SUSPEND_ARG_FIELDS, StructVisitor)
1275    }
1276}
1277
1278impl ::serde::ser::Serialize for BulkSuspendArg {
1279    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1280        // struct serializer
1281        use serde::ser::SerializeStruct;
1282        let mut s = serializer.serialize_struct("BulkSuspendArg", 1)?;
1283        self.internal_serialize::<S>(&mut s)?;
1284        s.end()
1285    }
1286}
1287
1288#[derive(Debug, Clone, PartialEq, Eq)]
1289#[non_exhaustive] // structs may have more fields added in the future.
1290pub struct BulkSuspendComplete {
1291    pub requested: i64,
1292    pub suspended: i64,
1293    pub failed: i64,
1294    pub unknown: i64,
1295    pub report_delivery: BulkSuspendReportDeliveryStatus,
1296}
1297
1298impl BulkSuspendComplete {
1299    pub fn new(
1300        requested: i64,
1301        suspended: i64,
1302        failed: i64,
1303        unknown: i64,
1304        report_delivery: BulkSuspendReportDeliveryStatus,
1305    ) -> Self {
1306        BulkSuspendComplete {
1307            requested,
1308            suspended,
1309            failed,
1310            unknown,
1311            report_delivery,
1312        }
1313    }
1314}
1315
1316const BULK_SUSPEND_COMPLETE_FIELDS: &[&str] = &["requested",
1317                                                "suspended",
1318                                                "failed",
1319                                                "unknown",
1320                                                "report_delivery"];
1321impl BulkSuspendComplete {
1322    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1323        map: V,
1324    ) -> Result<BulkSuspendComplete, V::Error> {
1325        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1326    }
1327
1328    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1329        mut map: V,
1330        optional: bool,
1331    ) -> Result<Option<BulkSuspendComplete>, V::Error> {
1332        let mut field_requested = None;
1333        let mut field_suspended = None;
1334        let mut field_failed = None;
1335        let mut field_unknown = None;
1336        let mut field_report_delivery = None;
1337        let mut nothing = true;
1338        while let Some(key) = map.next_key::<&str>()? {
1339            nothing = false;
1340            match key {
1341                "requested" => {
1342                    if field_requested.is_some() {
1343                        return Err(::serde::de::Error::duplicate_field("requested"));
1344                    }
1345                    field_requested = Some(map.next_value()?);
1346                }
1347                "suspended" => {
1348                    if field_suspended.is_some() {
1349                        return Err(::serde::de::Error::duplicate_field("suspended"));
1350                    }
1351                    field_suspended = Some(map.next_value()?);
1352                }
1353                "failed" => {
1354                    if field_failed.is_some() {
1355                        return Err(::serde::de::Error::duplicate_field("failed"));
1356                    }
1357                    field_failed = Some(map.next_value()?);
1358                }
1359                "unknown" => {
1360                    if field_unknown.is_some() {
1361                        return Err(::serde::de::Error::duplicate_field("unknown"));
1362                    }
1363                    field_unknown = Some(map.next_value()?);
1364                }
1365                "report_delivery" => {
1366                    if field_report_delivery.is_some() {
1367                        return Err(::serde::de::Error::duplicate_field("report_delivery"));
1368                    }
1369                    field_report_delivery = Some(map.next_value()?);
1370                }
1371                _ => {
1372                    // unknown field allowed and ignored
1373                    map.next_value::<::serde_json::Value>()?;
1374                }
1375            }
1376        }
1377        if optional && nothing {
1378            return Ok(None);
1379        }
1380        let result = BulkSuspendComplete {
1381            requested: field_requested.ok_or_else(|| ::serde::de::Error::missing_field("requested"))?,
1382            suspended: field_suspended.ok_or_else(|| ::serde::de::Error::missing_field("suspended"))?,
1383            failed: field_failed.ok_or_else(|| ::serde::de::Error::missing_field("failed"))?,
1384            unknown: field_unknown.ok_or_else(|| ::serde::de::Error::missing_field("unknown"))?,
1385            report_delivery: field_report_delivery.ok_or_else(|| ::serde::de::Error::missing_field("report_delivery"))?,
1386        };
1387        Ok(Some(result))
1388    }
1389
1390    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1391        &self,
1392        s: &mut S::SerializeStruct,
1393    ) -> Result<(), S::Error> {
1394        use serde::ser::SerializeStruct;
1395        s.serialize_field("requested", &self.requested)?;
1396        s.serialize_field("suspended", &self.suspended)?;
1397        s.serialize_field("failed", &self.failed)?;
1398        s.serialize_field("unknown", &self.unknown)?;
1399        s.serialize_field("report_delivery", &self.report_delivery)?;
1400        Ok(())
1401    }
1402}
1403
1404impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendComplete {
1405    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1406        // struct deserializer
1407        use serde::de::{MapAccess, Visitor};
1408        struct StructVisitor;
1409        impl<'de> Visitor<'de> for StructVisitor {
1410            type Value = BulkSuspendComplete;
1411            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1412                f.write_str("a BulkSuspendComplete struct")
1413            }
1414            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1415                BulkSuspendComplete::internal_deserialize(map)
1416            }
1417        }
1418        deserializer.deserialize_struct("BulkSuspendComplete", BULK_SUSPEND_COMPLETE_FIELDS, StructVisitor)
1419    }
1420}
1421
1422impl ::serde::ser::Serialize for BulkSuspendComplete {
1423    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1424        // struct serializer
1425        use serde::ser::SerializeStruct;
1426        let mut s = serializer.serialize_struct("BulkSuspendComplete", 5)?;
1427        self.internal_serialize::<S>(&mut s)?;
1428        s.end()
1429    }
1430}
1431
1432/// A typed launch rejection. Authorization failures continue to use the API v2
1433/// authentication/permission error surface.
1434#[derive(Debug, Clone, PartialEq, Eq)]
1435#[non_exhaustive] // variants may be added in the future
1436pub enum BulkSuspendError {
1437    InvalidRequest,
1438    TooManyMembers,
1439    DuplicateClientItemId,
1440    DuplicateTeamMemberId,
1441    ActingAdmin,
1442    LastAdmin,
1443    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1444    /// typically indicates that this SDK version is out of date.
1445    Other,
1446}
1447
1448impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendError {
1449    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1450        // union deserializer
1451        use serde::de::{self, MapAccess, Visitor};
1452        struct EnumVisitor;
1453        impl<'de> Visitor<'de> for EnumVisitor {
1454            type Value = BulkSuspendError;
1455            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1456                f.write_str("a BulkSuspendError structure")
1457            }
1458            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1459                let tag: &str = match map.next_key()? {
1460                    Some(".tag") => map.next_value()?,
1461                    _ => return Err(de::Error::missing_field(".tag"))
1462                };
1463                let value = match tag {
1464                    "invalid_request" => BulkSuspendError::InvalidRequest,
1465                    "too_many_members" => BulkSuspendError::TooManyMembers,
1466                    "duplicate_client_item_id" => BulkSuspendError::DuplicateClientItemId,
1467                    "duplicate_team_member_id" => BulkSuspendError::DuplicateTeamMemberId,
1468                    "acting_admin" => BulkSuspendError::ActingAdmin,
1469                    "last_admin" => BulkSuspendError::LastAdmin,
1470                    _ => BulkSuspendError::Other,
1471                };
1472                crate::eat_json_fields(&mut map)?;
1473                Ok(value)
1474            }
1475        }
1476        const VARIANTS: &[&str] = &["invalid_request",
1477                                    "too_many_members",
1478                                    "duplicate_client_item_id",
1479                                    "duplicate_team_member_id",
1480                                    "acting_admin",
1481                                    "last_admin",
1482                                    "other"];
1483        deserializer.deserialize_struct("BulkSuspendError", VARIANTS, EnumVisitor)
1484    }
1485}
1486
1487impl ::serde::ser::Serialize for BulkSuspendError {
1488    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1489        // union serializer
1490        use serde::ser::SerializeStruct;
1491        match self {
1492            BulkSuspendError::InvalidRequest => {
1493                // unit
1494                let mut s = serializer.serialize_struct("BulkSuspendError", 1)?;
1495                s.serialize_field(".tag", "invalid_request")?;
1496                s.end()
1497            }
1498            BulkSuspendError::TooManyMembers => {
1499                // unit
1500                let mut s = serializer.serialize_struct("BulkSuspendError", 1)?;
1501                s.serialize_field(".tag", "too_many_members")?;
1502                s.end()
1503            }
1504            BulkSuspendError::DuplicateClientItemId => {
1505                // unit
1506                let mut s = serializer.serialize_struct("BulkSuspendError", 1)?;
1507                s.serialize_field(".tag", "duplicate_client_item_id")?;
1508                s.end()
1509            }
1510            BulkSuspendError::DuplicateTeamMemberId => {
1511                // unit
1512                let mut s = serializer.serialize_struct("BulkSuspendError", 1)?;
1513                s.serialize_field(".tag", "duplicate_team_member_id")?;
1514                s.end()
1515            }
1516            BulkSuspendError::ActingAdmin => {
1517                // unit
1518                let mut s = serializer.serialize_struct("BulkSuspendError", 1)?;
1519                s.serialize_field(".tag", "acting_admin")?;
1520                s.end()
1521            }
1522            BulkSuspendError::LastAdmin => {
1523                // unit
1524                let mut s = serializer.serialize_struct("BulkSuspendError", 1)?;
1525                s.serialize_field(".tag", "last_admin")?;
1526                s.end()
1527            }
1528            BulkSuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1529        }
1530    }
1531}
1532
1533impl ::std::error::Error for BulkSuspendError {
1534}
1535
1536impl ::std::fmt::Display for BulkSuspendError {
1537    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1538        write!(f, "{:?}", *self)
1539    }
1540}
1541
1542/// Coarse job state. Live row progress and report contents are intentionally omitted; callers
1543/// receive row details in the terminal email report.
1544#[derive(Debug, Clone, PartialEq, Eq)]
1545#[non_exhaustive] // variants may be added in the future
1546pub enum BulkSuspendJobStatus {
1547    /// The asynchronous job is still in progress.
1548    InProgress,
1549    Complete(BulkSuspendComplete),
1550    Failed(BulkSuspendTaskFailure),
1551    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1552    /// typically indicates that this SDK version is out of date.
1553    Other,
1554}
1555
1556impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendJobStatus {
1557    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1558        // union deserializer
1559        use serde::de::{self, MapAccess, Visitor};
1560        struct EnumVisitor;
1561        impl<'de> Visitor<'de> for EnumVisitor {
1562            type Value = BulkSuspendJobStatus;
1563            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1564                f.write_str("a BulkSuspendJobStatus structure")
1565            }
1566            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1567                let tag: &str = match map.next_key()? {
1568                    Some(".tag") => map.next_value()?,
1569                    _ => return Err(de::Error::missing_field(".tag"))
1570                };
1571                let value = match tag {
1572                    "in_progress" => BulkSuspendJobStatus::InProgress,
1573                    "complete" => BulkSuspendJobStatus::Complete(BulkSuspendComplete::internal_deserialize(&mut map)?),
1574                    "failed" => {
1575                        match map.next_key()? {
1576                            Some("failed") => BulkSuspendJobStatus::Failed(map.next_value()?),
1577                            None => return Err(de::Error::missing_field("failed")),
1578                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1579                        }
1580                    }
1581                    _ => BulkSuspendJobStatus::Other,
1582                };
1583                crate::eat_json_fields(&mut map)?;
1584                Ok(value)
1585            }
1586        }
1587        const VARIANTS: &[&str] = &["in_progress",
1588                                    "complete",
1589                                    "failed",
1590                                    "other"];
1591        deserializer.deserialize_struct("BulkSuspendJobStatus", VARIANTS, EnumVisitor)
1592    }
1593}
1594
1595impl ::serde::ser::Serialize for BulkSuspendJobStatus {
1596    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1597        // union serializer
1598        use serde::ser::SerializeStruct;
1599        match self {
1600            BulkSuspendJobStatus::InProgress => {
1601                // unit
1602                let mut s = serializer.serialize_struct("BulkSuspendJobStatus", 1)?;
1603                s.serialize_field(".tag", "in_progress")?;
1604                s.end()
1605            }
1606            BulkSuspendJobStatus::Complete(x) => {
1607                // struct
1608                let mut s = serializer.serialize_struct("BulkSuspendJobStatus", 6)?;
1609                s.serialize_field(".tag", "complete")?;
1610                x.internal_serialize::<S>(&mut s)?;
1611                s.end()
1612            }
1613            BulkSuspendJobStatus::Failed(x) => {
1614                // union or polymporphic struct
1615                let mut s = serializer.serialize_struct("BulkSuspendJobStatus", 2)?;
1616                s.serialize_field(".tag", "failed")?;
1617                s.serialize_field("failed", x)?;
1618                s.end()
1619            }
1620            BulkSuspendJobStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1621        }
1622    }
1623}
1624
1625// union extends crate::types::dbx_async::PollResultBase
1626impl From<crate::types::dbx_async::PollResultBase> for BulkSuspendJobStatus {
1627    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
1628        match parent {
1629            crate::types::dbx_async::PollResultBase::InProgress => BulkSuspendJobStatus::InProgress,
1630        }
1631    }
1632}
1633/// One member selected for suspension. The opaque client item ID correlates the eventual report row
1634/// with the caller's input without sending CSV data.
1635#[derive(Debug, Clone, PartialEq, Eq)]
1636#[non_exhaustive] // structs may have more fields added in the future.
1637pub struct BulkSuspendMemberTarget {
1638    pub client_item_id: String,
1639    pub suspend_arg: MembersDeactivateArg,
1640}
1641
1642impl BulkSuspendMemberTarget {
1643    pub fn new(client_item_id: String, suspend_arg: MembersDeactivateArg) -> Self {
1644        BulkSuspendMemberTarget {
1645            client_item_id,
1646            suspend_arg,
1647        }
1648    }
1649}
1650
1651const BULK_SUSPEND_MEMBER_TARGET_FIELDS: &[&str] = &["client_item_id",
1652                                                     "suspend_arg"];
1653impl BulkSuspendMemberTarget {
1654    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1655        map: V,
1656    ) -> Result<BulkSuspendMemberTarget, V::Error> {
1657        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1658    }
1659
1660    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1661        mut map: V,
1662        optional: bool,
1663    ) -> Result<Option<BulkSuspendMemberTarget>, V::Error> {
1664        let mut field_client_item_id = None;
1665        let mut field_suspend_arg = None;
1666        let mut nothing = true;
1667        while let Some(key) = map.next_key::<&str>()? {
1668            nothing = false;
1669            match key {
1670                "client_item_id" => {
1671                    if field_client_item_id.is_some() {
1672                        return Err(::serde::de::Error::duplicate_field("client_item_id"));
1673                    }
1674                    field_client_item_id = Some(map.next_value()?);
1675                }
1676                "suspend_arg" => {
1677                    if field_suspend_arg.is_some() {
1678                        return Err(::serde::de::Error::duplicate_field("suspend_arg"));
1679                    }
1680                    field_suspend_arg = Some(map.next_value()?);
1681                }
1682                _ => {
1683                    // unknown field allowed and ignored
1684                    map.next_value::<::serde_json::Value>()?;
1685                }
1686            }
1687        }
1688        if optional && nothing {
1689            return Ok(None);
1690        }
1691        let result = BulkSuspendMemberTarget {
1692            client_item_id: field_client_item_id.ok_or_else(|| ::serde::de::Error::missing_field("client_item_id"))?,
1693            suspend_arg: field_suspend_arg.ok_or_else(|| ::serde::de::Error::missing_field("suspend_arg"))?,
1694        };
1695        Ok(Some(result))
1696    }
1697
1698    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1699        &self,
1700        s: &mut S::SerializeStruct,
1701    ) -> Result<(), S::Error> {
1702        use serde::ser::SerializeStruct;
1703        s.serialize_field("client_item_id", &self.client_item_id)?;
1704        s.serialize_field("suspend_arg", &self.suspend_arg)?;
1705        Ok(())
1706    }
1707}
1708
1709impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendMemberTarget {
1710    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1711        // struct deserializer
1712        use serde::de::{MapAccess, Visitor};
1713        struct StructVisitor;
1714        impl<'de> Visitor<'de> for StructVisitor {
1715            type Value = BulkSuspendMemberTarget;
1716            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1717                f.write_str("a BulkSuspendMemberTarget struct")
1718            }
1719            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1720                BulkSuspendMemberTarget::internal_deserialize(map)
1721            }
1722        }
1723        deserializer.deserialize_struct("BulkSuspendMemberTarget", BULK_SUSPEND_MEMBER_TARGET_FIELDS, StructVisitor)
1724    }
1725}
1726
1727impl ::serde::ser::Serialize for BulkSuspendMemberTarget {
1728    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1729        // struct serializer
1730        use serde::ser::SerializeStruct;
1731        let mut s = serializer.serialize_struct("BulkSuspendMemberTarget", 2)?;
1732        self.internal_serialize::<S>(&mut s)?;
1733        s.end()
1734    }
1735}
1736
1737#[derive(Debug, Clone, PartialEq, Eq)]
1738#[non_exhaustive] // variants may be added in the future
1739pub enum BulkSuspendReportDeliveryStatus {
1740    BulkSuspendReportDeliveryStatusUnspecified,
1741    BulkSuspendReportDeliveryStatusPending,
1742    BulkSuspendReportDeliveryStatusDelivered,
1743    BulkSuspendReportDeliveryStatusFailed,
1744    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1745    /// typically indicates that this SDK version is out of date.
1746    Other,
1747}
1748
1749impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendReportDeliveryStatus {
1750    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1751        // union deserializer
1752        use serde::de::{self, MapAccess, Visitor};
1753        struct EnumVisitor;
1754        impl<'de> Visitor<'de> for EnumVisitor {
1755            type Value = BulkSuspendReportDeliveryStatus;
1756            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1757                f.write_str("a BulkSuspendReportDeliveryStatus structure")
1758            }
1759            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1760                let tag: &str = match map.next_key()? {
1761                    Some(".tag") => map.next_value()?,
1762                    _ => return Err(de::Error::missing_field(".tag"))
1763                };
1764                let value = match tag {
1765                    "bulk_suspend_report_delivery_status_unspecified" => BulkSuspendReportDeliveryStatus::BulkSuspendReportDeliveryStatusUnspecified,
1766                    "bulk_suspend_report_delivery_status_pending" => BulkSuspendReportDeliveryStatus::BulkSuspendReportDeliveryStatusPending,
1767                    "bulk_suspend_report_delivery_status_delivered" => BulkSuspendReportDeliveryStatus::BulkSuspendReportDeliveryStatusDelivered,
1768                    "bulk_suspend_report_delivery_status_failed" => BulkSuspendReportDeliveryStatus::BulkSuspendReportDeliveryStatusFailed,
1769                    _ => BulkSuspendReportDeliveryStatus::Other,
1770                };
1771                crate::eat_json_fields(&mut map)?;
1772                Ok(value)
1773            }
1774        }
1775        const VARIANTS: &[&str] = &["bulk_suspend_report_delivery_status_unspecified",
1776                                    "bulk_suspend_report_delivery_status_pending",
1777                                    "bulk_suspend_report_delivery_status_delivered",
1778                                    "bulk_suspend_report_delivery_status_failed",
1779                                    "other"];
1780        deserializer.deserialize_struct("BulkSuspendReportDeliveryStatus", VARIANTS, EnumVisitor)
1781    }
1782}
1783
1784impl ::serde::ser::Serialize for BulkSuspendReportDeliveryStatus {
1785    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1786        // union serializer
1787        use serde::ser::SerializeStruct;
1788        match self {
1789            BulkSuspendReportDeliveryStatus::BulkSuspendReportDeliveryStatusUnspecified => {
1790                // unit
1791                let mut s = serializer.serialize_struct("BulkSuspendReportDeliveryStatus", 1)?;
1792                s.serialize_field(".tag", "bulk_suspend_report_delivery_status_unspecified")?;
1793                s.end()
1794            }
1795            BulkSuspendReportDeliveryStatus::BulkSuspendReportDeliveryStatusPending => {
1796                // unit
1797                let mut s = serializer.serialize_struct("BulkSuspendReportDeliveryStatus", 1)?;
1798                s.serialize_field(".tag", "bulk_suspend_report_delivery_status_pending")?;
1799                s.end()
1800            }
1801            BulkSuspendReportDeliveryStatus::BulkSuspendReportDeliveryStatusDelivered => {
1802                // unit
1803                let mut s = serializer.serialize_struct("BulkSuspendReportDeliveryStatus", 1)?;
1804                s.serialize_field(".tag", "bulk_suspend_report_delivery_status_delivered")?;
1805                s.end()
1806            }
1807            BulkSuspendReportDeliveryStatus::BulkSuspendReportDeliveryStatusFailed => {
1808                // unit
1809                let mut s = serializer.serialize_struct("BulkSuspendReportDeliveryStatus", 1)?;
1810                s.serialize_field(".tag", "bulk_suspend_report_delivery_status_failed")?;
1811                s.end()
1812            }
1813            BulkSuspendReportDeliveryStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1814        }
1815    }
1816}
1817
1818/// Stable machine-readable reasons used by the terminal row report.
1819#[derive(Debug, Clone, PartialEq, Eq)]
1820#[non_exhaustive] // variants may be added in the future
1821pub enum BulkSuspendRowFailure {
1822    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
1823    /// this team.
1824    UserNotFound,
1825    /// The user is not a member of the team.
1826    UserNotInTeam,
1827    /// The user is not active, so it cannot be suspended.
1828    SuspendInactiveUser,
1829    /// The user is the last admin of the team, so it cannot be suspended.
1830    SuspendLastAdmin,
1831    /// Team is full. The organization has no available licenses.
1832    TeamLicenseLimit,
1833    ProtectedActingAdmin,
1834    PermissionChanged,
1835    SuspendFailed,
1836    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1837    /// typically indicates that this SDK version is out of date.
1838    Other,
1839}
1840
1841impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendRowFailure {
1842    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1843        // union deserializer
1844        use serde::de::{self, MapAccess, Visitor};
1845        struct EnumVisitor;
1846        impl<'de> Visitor<'de> for EnumVisitor {
1847            type Value = BulkSuspendRowFailure;
1848            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1849                f.write_str("a BulkSuspendRowFailure structure")
1850            }
1851            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1852                let tag: &str = match map.next_key()? {
1853                    Some(".tag") => map.next_value()?,
1854                    _ => return Err(de::Error::missing_field(".tag"))
1855                };
1856                let value = match tag {
1857                    "user_not_found" => BulkSuspendRowFailure::UserNotFound,
1858                    "user_not_in_team" => BulkSuspendRowFailure::UserNotInTeam,
1859                    "suspend_inactive_user" => BulkSuspendRowFailure::SuspendInactiveUser,
1860                    "suspend_last_admin" => BulkSuspendRowFailure::SuspendLastAdmin,
1861                    "team_license_limit" => BulkSuspendRowFailure::TeamLicenseLimit,
1862                    "protected_acting_admin" => BulkSuspendRowFailure::ProtectedActingAdmin,
1863                    "permission_changed" => BulkSuspendRowFailure::PermissionChanged,
1864                    "suspend_failed" => BulkSuspendRowFailure::SuspendFailed,
1865                    _ => BulkSuspendRowFailure::Other,
1866                };
1867                crate::eat_json_fields(&mut map)?;
1868                Ok(value)
1869            }
1870        }
1871        const VARIANTS: &[&str] = &["user_not_found",
1872                                    "user_not_in_team",
1873                                    "other",
1874                                    "suspend_inactive_user",
1875                                    "suspend_last_admin",
1876                                    "team_license_limit",
1877                                    "protected_acting_admin",
1878                                    "permission_changed",
1879                                    "suspend_failed"];
1880        deserializer.deserialize_struct("BulkSuspendRowFailure", VARIANTS, EnumVisitor)
1881    }
1882}
1883
1884impl ::serde::ser::Serialize for BulkSuspendRowFailure {
1885    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1886        // union serializer
1887        use serde::ser::SerializeStruct;
1888        match self {
1889            BulkSuspendRowFailure::UserNotFound => {
1890                // unit
1891                let mut s = serializer.serialize_struct("BulkSuspendRowFailure", 1)?;
1892                s.serialize_field(".tag", "user_not_found")?;
1893                s.end()
1894            }
1895            BulkSuspendRowFailure::UserNotInTeam => {
1896                // unit
1897                let mut s = serializer.serialize_struct("BulkSuspendRowFailure", 1)?;
1898                s.serialize_field(".tag", "user_not_in_team")?;
1899                s.end()
1900            }
1901            BulkSuspendRowFailure::SuspendInactiveUser => {
1902                // unit
1903                let mut s = serializer.serialize_struct("BulkSuspendRowFailure", 1)?;
1904                s.serialize_field(".tag", "suspend_inactive_user")?;
1905                s.end()
1906            }
1907            BulkSuspendRowFailure::SuspendLastAdmin => {
1908                // unit
1909                let mut s = serializer.serialize_struct("BulkSuspendRowFailure", 1)?;
1910                s.serialize_field(".tag", "suspend_last_admin")?;
1911                s.end()
1912            }
1913            BulkSuspendRowFailure::TeamLicenseLimit => {
1914                // unit
1915                let mut s = serializer.serialize_struct("BulkSuspendRowFailure", 1)?;
1916                s.serialize_field(".tag", "team_license_limit")?;
1917                s.end()
1918            }
1919            BulkSuspendRowFailure::ProtectedActingAdmin => {
1920                // unit
1921                let mut s = serializer.serialize_struct("BulkSuspendRowFailure", 1)?;
1922                s.serialize_field(".tag", "protected_acting_admin")?;
1923                s.end()
1924            }
1925            BulkSuspendRowFailure::PermissionChanged => {
1926                // unit
1927                let mut s = serializer.serialize_struct("BulkSuspendRowFailure", 1)?;
1928                s.serialize_field(".tag", "permission_changed")?;
1929                s.end()
1930            }
1931            BulkSuspendRowFailure::SuspendFailed => {
1932                // unit
1933                let mut s = serializer.serialize_struct("BulkSuspendRowFailure", 1)?;
1934                s.serialize_field(".tag", "suspend_failed")?;
1935                s.end()
1936            }
1937            BulkSuspendRowFailure::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1938        }
1939    }
1940}
1941
1942// union extends MembersSuspendError
1943impl From<MembersSuspendError> for BulkSuspendRowFailure {
1944    fn from(parent: MembersSuspendError) -> Self {
1945        match parent {
1946            MembersSuspendError::UserNotFound => BulkSuspendRowFailure::UserNotFound,
1947            MembersSuspendError::UserNotInTeam => BulkSuspendRowFailure::UserNotInTeam,
1948            MembersSuspendError::Other => BulkSuspendRowFailure::Other,
1949            MembersSuspendError::SuspendInactiveUser => BulkSuspendRowFailure::SuspendInactiveUser,
1950            MembersSuspendError::SuspendLastAdmin => BulkSuspendRowFailure::SuspendLastAdmin,
1951            MembersSuspendError::TeamLicenseLimit => BulkSuspendRowFailure::TeamLicenseLimit,
1952        }
1953    }
1954}
1955/// The terminal outcome for one requested member. Row outcomes are delivered in the report rather
1956/// than embedded in the status response.
1957#[derive(Debug, Clone, PartialEq, Eq)]
1958#[non_exhaustive] // variants may be added in the future
1959pub enum BulkSuspendRowOutcome {
1960    Suspended,
1961    Failed(BulkSuspendRowFailure),
1962    Unknown,
1963    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1964    /// typically indicates that this SDK version is out of date.
1965    Other,
1966}
1967
1968impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendRowOutcome {
1969    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1970        // union deserializer
1971        use serde::de::{self, MapAccess, Visitor};
1972        struct EnumVisitor;
1973        impl<'de> Visitor<'de> for EnumVisitor {
1974            type Value = BulkSuspendRowOutcome;
1975            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1976                f.write_str("a BulkSuspendRowOutcome structure")
1977            }
1978            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1979                let tag: &str = match map.next_key()? {
1980                    Some(".tag") => map.next_value()?,
1981                    _ => return Err(de::Error::missing_field(".tag"))
1982                };
1983                let value = match tag {
1984                    "suspended" => BulkSuspendRowOutcome::Suspended,
1985                    "failed" => {
1986                        match map.next_key()? {
1987                            Some("failed") => BulkSuspendRowOutcome::Failed(map.next_value()?),
1988                            None => return Err(de::Error::missing_field("failed")),
1989                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1990                        }
1991                    }
1992                    "unknown" => BulkSuspendRowOutcome::Unknown,
1993                    _ => BulkSuspendRowOutcome::Other,
1994                };
1995                crate::eat_json_fields(&mut map)?;
1996                Ok(value)
1997            }
1998        }
1999        const VARIANTS: &[&str] = &["suspended",
2000                                    "failed",
2001                                    "unknown",
2002                                    "other"];
2003        deserializer.deserialize_struct("BulkSuspendRowOutcome", VARIANTS, EnumVisitor)
2004    }
2005}
2006
2007impl ::serde::ser::Serialize for BulkSuspendRowOutcome {
2008    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2009        // union serializer
2010        use serde::ser::SerializeStruct;
2011        match self {
2012            BulkSuspendRowOutcome::Suspended => {
2013                // unit
2014                let mut s = serializer.serialize_struct("BulkSuspendRowOutcome", 1)?;
2015                s.serialize_field(".tag", "suspended")?;
2016                s.end()
2017            }
2018            BulkSuspendRowOutcome::Failed(x) => {
2019                // union or polymporphic struct
2020                let mut s = serializer.serialize_struct("BulkSuspendRowOutcome", 2)?;
2021                s.serialize_field(".tag", "failed")?;
2022                s.serialize_field("failed", x)?;
2023                s.end()
2024            }
2025            BulkSuspendRowOutcome::Unknown => {
2026                // unit
2027                let mut s = serializer.serialize_struct("BulkSuspendRowOutcome", 1)?;
2028                s.serialize_field(".tag", "unknown")?;
2029                s.end()
2030            }
2031            BulkSuspendRowOutcome::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2032        }
2033    }
2034}
2035
2036#[derive(Debug, Clone, PartialEq, Eq)]
2037#[non_exhaustive] // variants may be added in the future
2038pub enum BulkSuspendTaskFailure {
2039    UnusableResult,
2040    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2041    /// typically indicates that this SDK version is out of date.
2042    Other,
2043}
2044
2045impl<'de> ::serde::de::Deserialize<'de> for BulkSuspendTaskFailure {
2046    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2047        // union deserializer
2048        use serde::de::{self, MapAccess, Visitor};
2049        struct EnumVisitor;
2050        impl<'de> Visitor<'de> for EnumVisitor {
2051            type Value = BulkSuspendTaskFailure;
2052            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2053                f.write_str("a BulkSuspendTaskFailure structure")
2054            }
2055            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2056                let tag: &str = match map.next_key()? {
2057                    Some(".tag") => map.next_value()?,
2058                    _ => return Err(de::Error::missing_field(".tag"))
2059                };
2060                let value = match tag {
2061                    "unusable_result" => BulkSuspendTaskFailure::UnusableResult,
2062                    _ => BulkSuspendTaskFailure::Other,
2063                };
2064                crate::eat_json_fields(&mut map)?;
2065                Ok(value)
2066            }
2067        }
2068        const VARIANTS: &[&str] = &["unusable_result",
2069                                    "other"];
2070        deserializer.deserialize_struct("BulkSuspendTaskFailure", VARIANTS, EnumVisitor)
2071    }
2072}
2073
2074impl ::serde::ser::Serialize for BulkSuspendTaskFailure {
2075    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2076        // union serializer
2077        use serde::ser::SerializeStruct;
2078        match self {
2079            BulkSuspendTaskFailure::UnusableResult => {
2080                // unit
2081                let mut s = serializer.serialize_struct("BulkSuspendTaskFailure", 1)?;
2082                s.serialize_field(".tag", "unusable_result")?;
2083                s.end()
2084            }
2085            BulkSuspendTaskFailure::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2086        }
2087    }
2088}
2089
2090/// Error returned when getting member custom quota.
2091#[derive(Debug, Clone, PartialEq, Eq)]
2092#[non_exhaustive] // variants may be added in the future
2093pub enum CustomQuotaError {
2094    /// A maximum of 1000 users can be set for a single call.
2095    TooManyUsers,
2096    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2097    /// typically indicates that this SDK version is out of date.
2098    Other,
2099}
2100
2101impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaError {
2102    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2103        // union deserializer
2104        use serde::de::{self, MapAccess, Visitor};
2105        struct EnumVisitor;
2106        impl<'de> Visitor<'de> for EnumVisitor {
2107            type Value = CustomQuotaError;
2108            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2109                f.write_str("a CustomQuotaError structure")
2110            }
2111            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2112                let tag: &str = match map.next_key()? {
2113                    Some(".tag") => map.next_value()?,
2114                    _ => return Err(de::Error::missing_field(".tag"))
2115                };
2116                let value = match tag {
2117                    "too_many_users" => CustomQuotaError::TooManyUsers,
2118                    _ => CustomQuotaError::Other,
2119                };
2120                crate::eat_json_fields(&mut map)?;
2121                Ok(value)
2122            }
2123        }
2124        const VARIANTS: &[&str] = &["too_many_users",
2125                                    "other"];
2126        deserializer.deserialize_struct("CustomQuotaError", VARIANTS, EnumVisitor)
2127    }
2128}
2129
2130impl ::serde::ser::Serialize for CustomQuotaError {
2131    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2132        // union serializer
2133        use serde::ser::SerializeStruct;
2134        match self {
2135            CustomQuotaError::TooManyUsers => {
2136                // unit
2137                let mut s = serializer.serialize_struct("CustomQuotaError", 1)?;
2138                s.serialize_field(".tag", "too_many_users")?;
2139                s.end()
2140            }
2141            CustomQuotaError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2142        }
2143    }
2144}
2145
2146impl ::std::error::Error for CustomQuotaError {
2147}
2148
2149impl ::std::fmt::Display for CustomQuotaError {
2150    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2151        match self {
2152            CustomQuotaError::TooManyUsers => f.write_str("A maximum of 1000 users can be set for a single call."),
2153            _ => write!(f, "{:?}", *self),
2154        }
2155    }
2156}
2157
2158/// User custom quota.
2159#[derive(Debug, Clone, PartialEq, Eq)]
2160#[non_exhaustive] // variants may be added in the future
2161pub enum CustomQuotaResult {
2162    /// User's custom quota.
2163    Success(UserCustomQuotaResult),
2164    /// Invalid user (not in team).
2165    InvalidUser(UserSelectorArg),
2166    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2167    /// typically indicates that this SDK version is out of date.
2168    Other,
2169}
2170
2171impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaResult {
2172    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2173        // union deserializer
2174        use serde::de::{self, MapAccess, Visitor};
2175        struct EnumVisitor;
2176        impl<'de> Visitor<'de> for EnumVisitor {
2177            type Value = CustomQuotaResult;
2178            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2179                f.write_str("a CustomQuotaResult structure")
2180            }
2181            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2182                let tag: &str = match map.next_key()? {
2183                    Some(".tag") => map.next_value()?,
2184                    _ => return Err(de::Error::missing_field(".tag"))
2185                };
2186                let value = match tag {
2187                    "success" => CustomQuotaResult::Success(UserCustomQuotaResult::internal_deserialize(&mut map)?),
2188                    "invalid_user" => {
2189                        match map.next_key()? {
2190                            Some("invalid_user") => CustomQuotaResult::InvalidUser(map.next_value()?),
2191                            None => return Err(de::Error::missing_field("invalid_user")),
2192                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
2193                        }
2194                    }
2195                    _ => CustomQuotaResult::Other,
2196                };
2197                crate::eat_json_fields(&mut map)?;
2198                Ok(value)
2199            }
2200        }
2201        const VARIANTS: &[&str] = &["success",
2202                                    "invalid_user",
2203                                    "other"];
2204        deserializer.deserialize_struct("CustomQuotaResult", VARIANTS, EnumVisitor)
2205    }
2206}
2207
2208impl ::serde::ser::Serialize for CustomQuotaResult {
2209    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2210        // union serializer
2211        use serde::ser::SerializeStruct;
2212        match self {
2213            CustomQuotaResult::Success(x) => {
2214                // struct
2215                let mut s = serializer.serialize_struct("CustomQuotaResult", 3)?;
2216                s.serialize_field(".tag", "success")?;
2217                x.internal_serialize::<S>(&mut s)?;
2218                s.end()
2219            }
2220            CustomQuotaResult::InvalidUser(x) => {
2221                // union or polymporphic struct
2222                let mut s = serializer.serialize_struct("CustomQuotaResult", 2)?;
2223                s.serialize_field(".tag", "invalid_user")?;
2224                s.serialize_field("invalid_user", x)?;
2225                s.end()
2226            }
2227            CustomQuotaResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2228        }
2229    }
2230}
2231
2232#[derive(Debug, Clone, PartialEq, Eq)]
2233#[non_exhaustive] // structs may have more fields added in the future.
2234pub struct CustomQuotaUsersArg {
2235    /// List of users.
2236    pub users: Vec<UserSelectorArg>,
2237}
2238
2239impl CustomQuotaUsersArg {
2240    pub fn new(users: Vec<UserSelectorArg>) -> Self {
2241        CustomQuotaUsersArg {
2242            users,
2243        }
2244    }
2245}
2246
2247const CUSTOM_QUOTA_USERS_ARG_FIELDS: &[&str] = &["users"];
2248impl CustomQuotaUsersArg {
2249    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2250        map: V,
2251    ) -> Result<CustomQuotaUsersArg, V::Error> {
2252        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2253    }
2254
2255    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2256        mut map: V,
2257        optional: bool,
2258    ) -> Result<Option<CustomQuotaUsersArg>, V::Error> {
2259        let mut field_users = None;
2260        let mut nothing = true;
2261        while let Some(key) = map.next_key::<&str>()? {
2262            nothing = false;
2263            match key {
2264                "users" => {
2265                    if field_users.is_some() {
2266                        return Err(::serde::de::Error::duplicate_field("users"));
2267                    }
2268                    field_users = Some(map.next_value()?);
2269                }
2270                _ => {
2271                    // unknown field allowed and ignored
2272                    map.next_value::<::serde_json::Value>()?;
2273                }
2274            }
2275        }
2276        if optional && nothing {
2277            return Ok(None);
2278        }
2279        let result = CustomQuotaUsersArg {
2280            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
2281        };
2282        Ok(Some(result))
2283    }
2284
2285    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2286        &self,
2287        s: &mut S::SerializeStruct,
2288    ) -> Result<(), S::Error> {
2289        use serde::ser::SerializeStruct;
2290        s.serialize_field("users", &self.users)?;
2291        Ok(())
2292    }
2293}
2294
2295impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaUsersArg {
2296    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2297        // struct deserializer
2298        use serde::de::{MapAccess, Visitor};
2299        struct StructVisitor;
2300        impl<'de> Visitor<'de> for StructVisitor {
2301            type Value = CustomQuotaUsersArg;
2302            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2303                f.write_str("a CustomQuotaUsersArg struct")
2304            }
2305            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2306                CustomQuotaUsersArg::internal_deserialize(map)
2307            }
2308        }
2309        deserializer.deserialize_struct("CustomQuotaUsersArg", CUSTOM_QUOTA_USERS_ARG_FIELDS, StructVisitor)
2310    }
2311}
2312
2313impl ::serde::ser::Serialize for CustomQuotaUsersArg {
2314    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2315        // struct serializer
2316        use serde::ser::SerializeStruct;
2317        let mut s = serializer.serialize_struct("CustomQuotaUsersArg", 1)?;
2318        self.internal_serialize::<S>(&mut s)?;
2319        s.end()
2320    }
2321}
2322
2323/// Input arguments that can be provided for most reports.
2324#[derive(Debug, Clone, PartialEq, Eq, Default)]
2325#[non_exhaustive] // structs may have more fields added in the future.
2326pub struct DateRange {
2327    /// Optional starting date (inclusive). If start_date is None or too long ago, this field will
2328    /// be set to 6 months ago.
2329    pub start_date: Option<crate::types::common::Date>,
2330    /// Optional ending date (exclusive).
2331    pub end_date: Option<crate::types::common::Date>,
2332}
2333
2334impl DateRange {
2335    pub fn with_start_date(mut self, value: crate::types::common::Date) -> Self {
2336        self.start_date = Some(value);
2337        self
2338    }
2339
2340    pub fn with_end_date(mut self, value: crate::types::common::Date) -> Self {
2341        self.end_date = Some(value);
2342        self
2343    }
2344}
2345
2346const DATE_RANGE_FIELDS: &[&str] = &["start_date",
2347                                     "end_date"];
2348impl DateRange {
2349    // no _opt deserializer
2350    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2351        mut map: V,
2352    ) -> Result<DateRange, V::Error> {
2353        let mut field_start_date = None;
2354        let mut field_end_date = None;
2355        while let Some(key) = map.next_key::<&str>()? {
2356            match key {
2357                "start_date" => {
2358                    if field_start_date.is_some() {
2359                        return Err(::serde::de::Error::duplicate_field("start_date"));
2360                    }
2361                    field_start_date = Some(map.next_value()?);
2362                }
2363                "end_date" => {
2364                    if field_end_date.is_some() {
2365                        return Err(::serde::de::Error::duplicate_field("end_date"));
2366                    }
2367                    field_end_date = Some(map.next_value()?);
2368                }
2369                _ => {
2370                    // unknown field allowed and ignored
2371                    map.next_value::<::serde_json::Value>()?;
2372                }
2373            }
2374        }
2375        let result = DateRange {
2376            start_date: field_start_date.and_then(Option::flatten),
2377            end_date: field_end_date.and_then(Option::flatten),
2378        };
2379        Ok(result)
2380    }
2381
2382    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2383        &self,
2384        s: &mut S::SerializeStruct,
2385    ) -> Result<(), S::Error> {
2386        use serde::ser::SerializeStruct;
2387        if let Some(val) = &self.start_date {
2388            s.serialize_field("start_date", val)?;
2389        }
2390        if let Some(val) = &self.end_date {
2391            s.serialize_field("end_date", val)?;
2392        }
2393        Ok(())
2394    }
2395}
2396
2397impl<'de> ::serde::de::Deserialize<'de> for DateRange {
2398    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2399        // struct deserializer
2400        use serde::de::{MapAccess, Visitor};
2401        struct StructVisitor;
2402        impl<'de> Visitor<'de> for StructVisitor {
2403            type Value = DateRange;
2404            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2405                f.write_str("a DateRange struct")
2406            }
2407            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2408                DateRange::internal_deserialize(map)
2409            }
2410        }
2411        deserializer.deserialize_struct("DateRange", DATE_RANGE_FIELDS, StructVisitor)
2412    }
2413}
2414
2415impl ::serde::ser::Serialize for DateRange {
2416    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2417        // struct serializer
2418        use serde::ser::SerializeStruct;
2419        let mut s = serializer.serialize_struct("DateRange", 2)?;
2420        self.internal_serialize::<S>(&mut s)?;
2421        s.end()
2422    }
2423}
2424
2425/// Errors that can originate from problems in input arguments to reports.
2426#[derive(Debug, Clone, PartialEq, Eq)]
2427#[non_exhaustive] // variants may be added in the future
2428pub enum DateRangeError {
2429    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2430    /// typically indicates that this SDK version is out of date.
2431    Other,
2432}
2433
2434impl<'de> ::serde::de::Deserialize<'de> for DateRangeError {
2435    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2436        // union deserializer
2437        use serde::de::{self, MapAccess, Visitor};
2438        struct EnumVisitor;
2439        impl<'de> Visitor<'de> for EnumVisitor {
2440            type Value = DateRangeError;
2441            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2442                f.write_str("a DateRangeError structure")
2443            }
2444            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2445                let tag: &str = match map.next_key()? {
2446                    Some(".tag") => map.next_value()?,
2447                    _ => return Err(de::Error::missing_field(".tag"))
2448                };
2449                // open enum with no defined variants
2450                let _ = tag;
2451                crate::eat_json_fields(&mut map)?;
2452                Ok(DateRangeError::Other)
2453            }
2454        }
2455        const VARIANTS: &[&str] = &["other"];
2456        deserializer.deserialize_struct("DateRangeError", VARIANTS, EnumVisitor)
2457    }
2458}
2459
2460impl ::serde::ser::Serialize for DateRangeError {
2461    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2462        // union serializer
2463        #![allow(unused_variables)]
2464        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
2465    }
2466}
2467
2468impl ::std::error::Error for DateRangeError {
2469}
2470
2471impl ::std::fmt::Display for DateRangeError {
2472    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2473        write!(f, "{:?}", *self)
2474    }
2475}
2476
2477/// Result of trying to delete a secondary email address. 'success' is the only value indicating
2478/// that a secondary email was successfully deleted. The other values explain the type of error that
2479/// occurred, and include the email for which the error occurred.
2480#[derive(Debug, Clone, PartialEq, Eq)]
2481#[non_exhaustive] // variants may be added in the future
2482pub enum DeleteSecondaryEmailResult {
2483    /// The secondary email was successfully deleted.
2484    Success(crate::types::common::EmailAddress),
2485    /// The email address was not found for the user.
2486    NotFound(crate::types::common::EmailAddress),
2487    /// The email address is the primary email address of the user, and cannot be removed.
2488    CannotRemovePrimary(crate::types::common::EmailAddress),
2489    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2490    /// typically indicates that this SDK version is out of date.
2491    Other,
2492}
2493
2494impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailResult {
2495    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2496        // union deserializer
2497        use serde::de::{self, MapAccess, Visitor};
2498        struct EnumVisitor;
2499        impl<'de> Visitor<'de> for EnumVisitor {
2500            type Value = DeleteSecondaryEmailResult;
2501            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2502                f.write_str("a DeleteSecondaryEmailResult structure")
2503            }
2504            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2505                let tag: &str = match map.next_key()? {
2506                    Some(".tag") => map.next_value()?,
2507                    _ => return Err(de::Error::missing_field(".tag"))
2508                };
2509                let value = match tag {
2510                    "success" => {
2511                        match map.next_key()? {
2512                            Some("success") => DeleteSecondaryEmailResult::Success(map.next_value()?),
2513                            None => return Err(de::Error::missing_field("success")),
2514                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
2515                        }
2516                    }
2517                    "not_found" => {
2518                        match map.next_key()? {
2519                            Some("not_found") => DeleteSecondaryEmailResult::NotFound(map.next_value()?),
2520                            None => return Err(de::Error::missing_field("not_found")),
2521                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
2522                        }
2523                    }
2524                    "cannot_remove_primary" => {
2525                        match map.next_key()? {
2526                            Some("cannot_remove_primary") => DeleteSecondaryEmailResult::CannotRemovePrimary(map.next_value()?),
2527                            None => return Err(de::Error::missing_field("cannot_remove_primary")),
2528                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
2529                        }
2530                    }
2531                    _ => DeleteSecondaryEmailResult::Other,
2532                };
2533                crate::eat_json_fields(&mut map)?;
2534                Ok(value)
2535            }
2536        }
2537        const VARIANTS: &[&str] = &["success",
2538                                    "not_found",
2539                                    "cannot_remove_primary",
2540                                    "other"];
2541        deserializer.deserialize_struct("DeleteSecondaryEmailResult", VARIANTS, EnumVisitor)
2542    }
2543}
2544
2545impl ::serde::ser::Serialize for DeleteSecondaryEmailResult {
2546    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2547        // union serializer
2548        use serde::ser::SerializeStruct;
2549        match self {
2550            DeleteSecondaryEmailResult::Success(x) => {
2551                // primitive
2552                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
2553                s.serialize_field(".tag", "success")?;
2554                s.serialize_field("success", x)?;
2555                s.end()
2556            }
2557            DeleteSecondaryEmailResult::NotFound(x) => {
2558                // primitive
2559                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
2560                s.serialize_field(".tag", "not_found")?;
2561                s.serialize_field("not_found", x)?;
2562                s.end()
2563            }
2564            DeleteSecondaryEmailResult::CannotRemovePrimary(x) => {
2565                // primitive
2566                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
2567                s.serialize_field(".tag", "cannot_remove_primary")?;
2568                s.serialize_field("cannot_remove_primary", x)?;
2569                s.end()
2570            }
2571            DeleteSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2572        }
2573    }
2574}
2575
2576#[derive(Debug, Clone, PartialEq, Eq)]
2577#[non_exhaustive] // structs may have more fields added in the future.
2578pub struct DeleteSecondaryEmailsArg {
2579    /// List of users and their secondary emails to delete.
2580    pub emails_to_delete: Vec<UserSecondaryEmailsArg>,
2581}
2582
2583impl DeleteSecondaryEmailsArg {
2584    pub fn new(emails_to_delete: Vec<UserSecondaryEmailsArg>) -> Self {
2585        DeleteSecondaryEmailsArg {
2586            emails_to_delete,
2587        }
2588    }
2589}
2590
2591const DELETE_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["emails_to_delete"];
2592impl DeleteSecondaryEmailsArg {
2593    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2594        map: V,
2595    ) -> Result<DeleteSecondaryEmailsArg, V::Error> {
2596        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2597    }
2598
2599    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2600        mut map: V,
2601        optional: bool,
2602    ) -> Result<Option<DeleteSecondaryEmailsArg>, V::Error> {
2603        let mut field_emails_to_delete = None;
2604        let mut nothing = true;
2605        while let Some(key) = map.next_key::<&str>()? {
2606            nothing = false;
2607            match key {
2608                "emails_to_delete" => {
2609                    if field_emails_to_delete.is_some() {
2610                        return Err(::serde::de::Error::duplicate_field("emails_to_delete"));
2611                    }
2612                    field_emails_to_delete = Some(map.next_value()?);
2613                }
2614                _ => {
2615                    // unknown field allowed and ignored
2616                    map.next_value::<::serde_json::Value>()?;
2617                }
2618            }
2619        }
2620        if optional && nothing {
2621            return Ok(None);
2622        }
2623        let result = DeleteSecondaryEmailsArg {
2624            emails_to_delete: field_emails_to_delete.ok_or_else(|| ::serde::de::Error::missing_field("emails_to_delete"))?,
2625        };
2626        Ok(Some(result))
2627    }
2628
2629    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2630        &self,
2631        s: &mut S::SerializeStruct,
2632    ) -> Result<(), S::Error> {
2633        use serde::ser::SerializeStruct;
2634        s.serialize_field("emails_to_delete", &self.emails_to_delete)?;
2635        Ok(())
2636    }
2637}
2638
2639impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailsArg {
2640    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2641        // struct deserializer
2642        use serde::de::{MapAccess, Visitor};
2643        struct StructVisitor;
2644        impl<'de> Visitor<'de> for StructVisitor {
2645            type Value = DeleteSecondaryEmailsArg;
2646            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2647                f.write_str("a DeleteSecondaryEmailsArg struct")
2648            }
2649            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2650                DeleteSecondaryEmailsArg::internal_deserialize(map)
2651            }
2652        }
2653        deserializer.deserialize_struct("DeleteSecondaryEmailsArg", DELETE_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
2654    }
2655}
2656
2657impl ::serde::ser::Serialize for DeleteSecondaryEmailsArg {
2658    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2659        // struct serializer
2660        use serde::ser::SerializeStruct;
2661        let mut s = serializer.serialize_struct("DeleteSecondaryEmailsArg", 1)?;
2662        self.internal_serialize::<S>(&mut s)?;
2663        s.end()
2664    }
2665}
2666
2667#[derive(Debug, Clone, PartialEq, Eq)]
2668#[non_exhaustive] // structs may have more fields added in the future.
2669pub struct DeleteSecondaryEmailsResult {
2670    pub results: Vec<UserDeleteResult>,
2671}
2672
2673impl DeleteSecondaryEmailsResult {
2674    pub fn new(results: Vec<UserDeleteResult>) -> Self {
2675        DeleteSecondaryEmailsResult {
2676            results,
2677        }
2678    }
2679}
2680
2681const DELETE_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["results"];
2682impl DeleteSecondaryEmailsResult {
2683    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2684        map: V,
2685    ) -> Result<DeleteSecondaryEmailsResult, V::Error> {
2686        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2687    }
2688
2689    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2690        mut map: V,
2691        optional: bool,
2692    ) -> Result<Option<DeleteSecondaryEmailsResult>, V::Error> {
2693        let mut field_results = None;
2694        let mut nothing = true;
2695        while let Some(key) = map.next_key::<&str>()? {
2696            nothing = false;
2697            match key {
2698                "results" => {
2699                    if field_results.is_some() {
2700                        return Err(::serde::de::Error::duplicate_field("results"));
2701                    }
2702                    field_results = Some(map.next_value()?);
2703                }
2704                _ => {
2705                    // unknown field allowed and ignored
2706                    map.next_value::<::serde_json::Value>()?;
2707                }
2708            }
2709        }
2710        if optional && nothing {
2711            return Ok(None);
2712        }
2713        let result = DeleteSecondaryEmailsResult {
2714            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
2715        };
2716        Ok(Some(result))
2717    }
2718
2719    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2720        &self,
2721        s: &mut S::SerializeStruct,
2722    ) -> Result<(), S::Error> {
2723        use serde::ser::SerializeStruct;
2724        s.serialize_field("results", &self.results)?;
2725        Ok(())
2726    }
2727}
2728
2729impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailsResult {
2730    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2731        // struct deserializer
2732        use serde::de::{MapAccess, Visitor};
2733        struct StructVisitor;
2734        impl<'de> Visitor<'de> for StructVisitor {
2735            type Value = DeleteSecondaryEmailsResult;
2736            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2737                f.write_str("a DeleteSecondaryEmailsResult struct")
2738            }
2739            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2740                DeleteSecondaryEmailsResult::internal_deserialize(map)
2741            }
2742        }
2743        deserializer.deserialize_struct("DeleteSecondaryEmailsResult", DELETE_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
2744    }
2745}
2746
2747impl ::serde::ser::Serialize for DeleteSecondaryEmailsResult {
2748    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2749        // struct serializer
2750        use serde::ser::SerializeStruct;
2751        let mut s = serializer.serialize_struct("DeleteSecondaryEmailsResult", 1)?;
2752        self.internal_serialize::<S>(&mut s)?;
2753        s.end()
2754    }
2755}
2756
2757/// Information about linked Dropbox desktop client sessions.
2758#[derive(Debug, Clone, PartialEq, Eq)]
2759#[non_exhaustive] // structs may have more fields added in the future.
2760pub struct DesktopClientSession {
2761    /// The session id.
2762    pub session_id: String,
2763    /// Name of the hosting desktop.
2764    pub host_name: String,
2765    /// The Dropbox desktop client type.
2766    pub client_type: DesktopPlatform,
2767    /// The Dropbox client version.
2768    pub client_version: String,
2769    /// Information on the hosting platform.
2770    pub platform: String,
2771    /// Whether it's possible to delete all of the account files upon unlinking.
2772    pub is_delete_on_unlink_supported: bool,
2773    /// The IP address of the last activity from this session.
2774    pub ip_address: Option<String>,
2775    /// The country from which the last activity from this session was made.
2776    pub country: Option<String>,
2777    /// The time this session was created.
2778    pub created: Option<crate::types::common::DropboxTimestamp>,
2779    /// The time of the last activity from this session.
2780    pub updated: Option<crate::types::common::DropboxTimestamp>,
2781}
2782
2783impl DesktopClientSession {
2784    pub fn new(
2785        session_id: String,
2786        host_name: String,
2787        client_type: DesktopPlatform,
2788        client_version: String,
2789        platform: String,
2790        is_delete_on_unlink_supported: bool,
2791    ) -> Self {
2792        DesktopClientSession {
2793            session_id,
2794            host_name,
2795            client_type,
2796            client_version,
2797            platform,
2798            is_delete_on_unlink_supported,
2799            ip_address: None,
2800            country: None,
2801            created: None,
2802            updated: None,
2803        }
2804    }
2805
2806    pub fn with_ip_address(mut self, value: String) -> Self {
2807        self.ip_address = Some(value);
2808        self
2809    }
2810
2811    pub fn with_country(mut self, value: String) -> Self {
2812        self.country = Some(value);
2813        self
2814    }
2815
2816    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
2817        self.created = Some(value);
2818        self
2819    }
2820
2821    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
2822        self.updated = Some(value);
2823        self
2824    }
2825}
2826
2827const DESKTOP_CLIENT_SESSION_FIELDS: &[&str] = &["session_id",
2828                                                 "host_name",
2829                                                 "client_type",
2830                                                 "client_version",
2831                                                 "platform",
2832                                                 "is_delete_on_unlink_supported",
2833                                                 "ip_address",
2834                                                 "country",
2835                                                 "created",
2836                                                 "updated"];
2837impl DesktopClientSession {
2838    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2839        map: V,
2840    ) -> Result<DesktopClientSession, V::Error> {
2841        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2842    }
2843
2844    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2845        mut map: V,
2846        optional: bool,
2847    ) -> Result<Option<DesktopClientSession>, V::Error> {
2848        let mut field_session_id = None;
2849        let mut field_host_name = None;
2850        let mut field_client_type = None;
2851        let mut field_client_version = None;
2852        let mut field_platform = None;
2853        let mut field_is_delete_on_unlink_supported = None;
2854        let mut field_ip_address = None;
2855        let mut field_country = None;
2856        let mut field_created = None;
2857        let mut field_updated = None;
2858        let mut nothing = true;
2859        while let Some(key) = map.next_key::<&str>()? {
2860            nothing = false;
2861            match key {
2862                "session_id" => {
2863                    if field_session_id.is_some() {
2864                        return Err(::serde::de::Error::duplicate_field("session_id"));
2865                    }
2866                    field_session_id = Some(map.next_value()?);
2867                }
2868                "host_name" => {
2869                    if field_host_name.is_some() {
2870                        return Err(::serde::de::Error::duplicate_field("host_name"));
2871                    }
2872                    field_host_name = Some(map.next_value()?);
2873                }
2874                "client_type" => {
2875                    if field_client_type.is_some() {
2876                        return Err(::serde::de::Error::duplicate_field("client_type"));
2877                    }
2878                    field_client_type = Some(map.next_value()?);
2879                }
2880                "client_version" => {
2881                    if field_client_version.is_some() {
2882                        return Err(::serde::de::Error::duplicate_field("client_version"));
2883                    }
2884                    field_client_version = Some(map.next_value()?);
2885                }
2886                "platform" => {
2887                    if field_platform.is_some() {
2888                        return Err(::serde::de::Error::duplicate_field("platform"));
2889                    }
2890                    field_platform = Some(map.next_value()?);
2891                }
2892                "is_delete_on_unlink_supported" => {
2893                    if field_is_delete_on_unlink_supported.is_some() {
2894                        return Err(::serde::de::Error::duplicate_field("is_delete_on_unlink_supported"));
2895                    }
2896                    field_is_delete_on_unlink_supported = Some(map.next_value()?);
2897                }
2898                "ip_address" => {
2899                    if field_ip_address.is_some() {
2900                        return Err(::serde::de::Error::duplicate_field("ip_address"));
2901                    }
2902                    field_ip_address = Some(map.next_value()?);
2903                }
2904                "country" => {
2905                    if field_country.is_some() {
2906                        return Err(::serde::de::Error::duplicate_field("country"));
2907                    }
2908                    field_country = Some(map.next_value()?);
2909                }
2910                "created" => {
2911                    if field_created.is_some() {
2912                        return Err(::serde::de::Error::duplicate_field("created"));
2913                    }
2914                    field_created = Some(map.next_value()?);
2915                }
2916                "updated" => {
2917                    if field_updated.is_some() {
2918                        return Err(::serde::de::Error::duplicate_field("updated"));
2919                    }
2920                    field_updated = Some(map.next_value()?);
2921                }
2922                _ => {
2923                    // unknown field allowed and ignored
2924                    map.next_value::<::serde_json::Value>()?;
2925                }
2926            }
2927        }
2928        if optional && nothing {
2929            return Ok(None);
2930        }
2931        let result = DesktopClientSession {
2932            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2933            host_name: field_host_name.ok_or_else(|| ::serde::de::Error::missing_field("host_name"))?,
2934            client_type: field_client_type.ok_or_else(|| ::serde::de::Error::missing_field("client_type"))?,
2935            client_version: field_client_version.ok_or_else(|| ::serde::de::Error::missing_field("client_version"))?,
2936            platform: field_platform.ok_or_else(|| ::serde::de::Error::missing_field("platform"))?,
2937            is_delete_on_unlink_supported: field_is_delete_on_unlink_supported.ok_or_else(|| ::serde::de::Error::missing_field("is_delete_on_unlink_supported"))?,
2938            ip_address: field_ip_address.and_then(Option::flatten),
2939            country: field_country.and_then(Option::flatten),
2940            created: field_created.and_then(Option::flatten),
2941            updated: field_updated.and_then(Option::flatten),
2942        };
2943        Ok(Some(result))
2944    }
2945
2946    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2947        &self,
2948        s: &mut S::SerializeStruct,
2949    ) -> Result<(), S::Error> {
2950        use serde::ser::SerializeStruct;
2951        s.serialize_field("session_id", &self.session_id)?;
2952        s.serialize_field("host_name", &self.host_name)?;
2953        s.serialize_field("client_type", &self.client_type)?;
2954        s.serialize_field("client_version", &self.client_version)?;
2955        s.serialize_field("platform", &self.platform)?;
2956        s.serialize_field("is_delete_on_unlink_supported", &self.is_delete_on_unlink_supported)?;
2957        if let Some(val) = &self.ip_address {
2958            s.serialize_field("ip_address", val)?;
2959        }
2960        if let Some(val) = &self.country {
2961            s.serialize_field("country", val)?;
2962        }
2963        if let Some(val) = &self.created {
2964            s.serialize_field("created", val)?;
2965        }
2966        if let Some(val) = &self.updated {
2967            s.serialize_field("updated", val)?;
2968        }
2969        Ok(())
2970    }
2971}
2972
2973impl<'de> ::serde::de::Deserialize<'de> for DesktopClientSession {
2974    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2975        // struct deserializer
2976        use serde::de::{MapAccess, Visitor};
2977        struct StructVisitor;
2978        impl<'de> Visitor<'de> for StructVisitor {
2979            type Value = DesktopClientSession;
2980            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2981                f.write_str("a DesktopClientSession struct")
2982            }
2983            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2984                DesktopClientSession::internal_deserialize(map)
2985            }
2986        }
2987        deserializer.deserialize_struct("DesktopClientSession", DESKTOP_CLIENT_SESSION_FIELDS, StructVisitor)
2988    }
2989}
2990
2991impl ::serde::ser::Serialize for DesktopClientSession {
2992    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2993        // struct serializer
2994        use serde::ser::SerializeStruct;
2995        let mut s = serializer.serialize_struct("DesktopClientSession", 10)?;
2996        self.internal_serialize::<S>(&mut s)?;
2997        s.end()
2998    }
2999}
3000
3001// struct extends DeviceSession
3002impl From<DesktopClientSession> for DeviceSession {
3003    fn from(subtype: DesktopClientSession) -> Self {
3004        Self {
3005            session_id: subtype.session_id,
3006            ip_address: subtype.ip_address,
3007            country: subtype.country,
3008            created: subtype.created,
3009            updated: subtype.updated,
3010        }
3011    }
3012}
3013#[derive(Debug, Clone, PartialEq, Eq)]
3014#[non_exhaustive] // variants may be added in the future
3015pub enum DesktopPlatform {
3016    /// Official Windows Dropbox desktop client.
3017    Windows,
3018    /// Official Mac Dropbox desktop client.
3019    Mac,
3020    /// Official Linux Dropbox desktop client.
3021    Linux,
3022    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3023    /// typically indicates that this SDK version is out of date.
3024    Other,
3025}
3026
3027impl<'de> ::serde::de::Deserialize<'de> for DesktopPlatform {
3028    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3029        // union deserializer
3030        use serde::de::{self, MapAccess, Visitor};
3031        struct EnumVisitor;
3032        impl<'de> Visitor<'de> for EnumVisitor {
3033            type Value = DesktopPlatform;
3034            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3035                f.write_str("a DesktopPlatform structure")
3036            }
3037            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3038                let tag: &str = match map.next_key()? {
3039                    Some(".tag") => map.next_value()?,
3040                    _ => return Err(de::Error::missing_field(".tag"))
3041                };
3042                let value = match tag {
3043                    "windows" => DesktopPlatform::Windows,
3044                    "mac" => DesktopPlatform::Mac,
3045                    "linux" => DesktopPlatform::Linux,
3046                    _ => DesktopPlatform::Other,
3047                };
3048                crate::eat_json_fields(&mut map)?;
3049                Ok(value)
3050            }
3051        }
3052        const VARIANTS: &[&str] = &["windows",
3053                                    "mac",
3054                                    "linux",
3055                                    "other"];
3056        deserializer.deserialize_struct("DesktopPlatform", VARIANTS, EnumVisitor)
3057    }
3058}
3059
3060impl ::serde::ser::Serialize for DesktopPlatform {
3061    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3062        // union serializer
3063        use serde::ser::SerializeStruct;
3064        match self {
3065            DesktopPlatform::Windows => {
3066                // unit
3067                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
3068                s.serialize_field(".tag", "windows")?;
3069                s.end()
3070            }
3071            DesktopPlatform::Mac => {
3072                // unit
3073                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
3074                s.serialize_field(".tag", "mac")?;
3075                s.end()
3076            }
3077            DesktopPlatform::Linux => {
3078                // unit
3079                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
3080                s.serialize_field(".tag", "linux")?;
3081                s.end()
3082            }
3083            DesktopPlatform::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3084        }
3085    }
3086}
3087
3088#[derive(Debug, Clone, PartialEq, Eq)]
3089#[non_exhaustive] // structs may have more fields added in the future.
3090pub struct DeviceSession {
3091    /// The session id.
3092    pub session_id: String,
3093    /// The IP address of the last activity from this session.
3094    pub ip_address: Option<String>,
3095    /// The country from which the last activity from this session was made.
3096    pub country: Option<String>,
3097    /// The time this session was created.
3098    pub created: Option<crate::types::common::DropboxTimestamp>,
3099    /// The time of the last activity from this session.
3100    pub updated: Option<crate::types::common::DropboxTimestamp>,
3101}
3102
3103impl DeviceSession {
3104    pub fn new(session_id: String) -> Self {
3105        DeviceSession {
3106            session_id,
3107            ip_address: None,
3108            country: None,
3109            created: None,
3110            updated: None,
3111        }
3112    }
3113
3114    pub fn with_ip_address(mut self, value: String) -> Self {
3115        self.ip_address = Some(value);
3116        self
3117    }
3118
3119    pub fn with_country(mut self, value: String) -> Self {
3120        self.country = Some(value);
3121        self
3122    }
3123
3124    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
3125        self.created = Some(value);
3126        self
3127    }
3128
3129    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
3130        self.updated = Some(value);
3131        self
3132    }
3133}
3134
3135const DEVICE_SESSION_FIELDS: &[&str] = &["session_id",
3136                                         "ip_address",
3137                                         "country",
3138                                         "created",
3139                                         "updated"];
3140impl DeviceSession {
3141    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3142        map: V,
3143    ) -> Result<DeviceSession, V::Error> {
3144        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3145    }
3146
3147    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3148        mut map: V,
3149        optional: bool,
3150    ) -> Result<Option<DeviceSession>, V::Error> {
3151        let mut field_session_id = None;
3152        let mut field_ip_address = None;
3153        let mut field_country = None;
3154        let mut field_created = None;
3155        let mut field_updated = None;
3156        let mut nothing = true;
3157        while let Some(key) = map.next_key::<&str>()? {
3158            nothing = false;
3159            match key {
3160                "session_id" => {
3161                    if field_session_id.is_some() {
3162                        return Err(::serde::de::Error::duplicate_field("session_id"));
3163                    }
3164                    field_session_id = Some(map.next_value()?);
3165                }
3166                "ip_address" => {
3167                    if field_ip_address.is_some() {
3168                        return Err(::serde::de::Error::duplicate_field("ip_address"));
3169                    }
3170                    field_ip_address = Some(map.next_value()?);
3171                }
3172                "country" => {
3173                    if field_country.is_some() {
3174                        return Err(::serde::de::Error::duplicate_field("country"));
3175                    }
3176                    field_country = Some(map.next_value()?);
3177                }
3178                "created" => {
3179                    if field_created.is_some() {
3180                        return Err(::serde::de::Error::duplicate_field("created"));
3181                    }
3182                    field_created = Some(map.next_value()?);
3183                }
3184                "updated" => {
3185                    if field_updated.is_some() {
3186                        return Err(::serde::de::Error::duplicate_field("updated"));
3187                    }
3188                    field_updated = Some(map.next_value()?);
3189                }
3190                _ => {
3191                    // unknown field allowed and ignored
3192                    map.next_value::<::serde_json::Value>()?;
3193                }
3194            }
3195        }
3196        if optional && nothing {
3197            return Ok(None);
3198        }
3199        let result = DeviceSession {
3200            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
3201            ip_address: field_ip_address.and_then(Option::flatten),
3202            country: field_country.and_then(Option::flatten),
3203            created: field_created.and_then(Option::flatten),
3204            updated: field_updated.and_then(Option::flatten),
3205        };
3206        Ok(Some(result))
3207    }
3208
3209    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3210        &self,
3211        s: &mut S::SerializeStruct,
3212    ) -> Result<(), S::Error> {
3213        use serde::ser::SerializeStruct;
3214        s.serialize_field("session_id", &self.session_id)?;
3215        if let Some(val) = &self.ip_address {
3216            s.serialize_field("ip_address", val)?;
3217        }
3218        if let Some(val) = &self.country {
3219            s.serialize_field("country", val)?;
3220        }
3221        if let Some(val) = &self.created {
3222            s.serialize_field("created", val)?;
3223        }
3224        if let Some(val) = &self.updated {
3225            s.serialize_field("updated", val)?;
3226        }
3227        Ok(())
3228    }
3229}
3230
3231impl<'de> ::serde::de::Deserialize<'de> for DeviceSession {
3232    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3233        // struct deserializer
3234        use serde::de::{MapAccess, Visitor};
3235        struct StructVisitor;
3236        impl<'de> Visitor<'de> for StructVisitor {
3237            type Value = DeviceSession;
3238            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3239                f.write_str("a DeviceSession struct")
3240            }
3241            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3242                DeviceSession::internal_deserialize(map)
3243            }
3244        }
3245        deserializer.deserialize_struct("DeviceSession", DEVICE_SESSION_FIELDS, StructVisitor)
3246    }
3247}
3248
3249impl ::serde::ser::Serialize for DeviceSession {
3250    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3251        // struct serializer
3252        use serde::ser::SerializeStruct;
3253        let mut s = serializer.serialize_struct("DeviceSession", 5)?;
3254        self.internal_serialize::<S>(&mut s)?;
3255        s.end()
3256    }
3257}
3258
3259#[derive(Debug, Clone, PartialEq, Eq)]
3260#[non_exhaustive] // structs may have more fields added in the future.
3261pub struct DeviceSessionArg {
3262    /// The session id.
3263    pub session_id: String,
3264    /// The unique id of the member owning the device.
3265    pub team_member_id: String,
3266}
3267
3268impl DeviceSessionArg {
3269    pub fn new(session_id: String, team_member_id: String) -> Self {
3270        DeviceSessionArg {
3271            session_id,
3272            team_member_id,
3273        }
3274    }
3275}
3276
3277const DEVICE_SESSION_ARG_FIELDS: &[&str] = &["session_id",
3278                                             "team_member_id"];
3279impl DeviceSessionArg {
3280    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3281        map: V,
3282    ) -> Result<DeviceSessionArg, V::Error> {
3283        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3284    }
3285
3286    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3287        mut map: V,
3288        optional: bool,
3289    ) -> Result<Option<DeviceSessionArg>, V::Error> {
3290        let mut field_session_id = None;
3291        let mut field_team_member_id = None;
3292        let mut nothing = true;
3293        while let Some(key) = map.next_key::<&str>()? {
3294            nothing = false;
3295            match key {
3296                "session_id" => {
3297                    if field_session_id.is_some() {
3298                        return Err(::serde::de::Error::duplicate_field("session_id"));
3299                    }
3300                    field_session_id = Some(map.next_value()?);
3301                }
3302                "team_member_id" => {
3303                    if field_team_member_id.is_some() {
3304                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
3305                    }
3306                    field_team_member_id = Some(map.next_value()?);
3307                }
3308                _ => {
3309                    // unknown field allowed and ignored
3310                    map.next_value::<::serde_json::Value>()?;
3311                }
3312            }
3313        }
3314        if optional && nothing {
3315            return Ok(None);
3316        }
3317        let result = DeviceSessionArg {
3318            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
3319            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
3320        };
3321        Ok(Some(result))
3322    }
3323
3324    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3325        &self,
3326        s: &mut S::SerializeStruct,
3327    ) -> Result<(), S::Error> {
3328        use serde::ser::SerializeStruct;
3329        s.serialize_field("session_id", &self.session_id)?;
3330        s.serialize_field("team_member_id", &self.team_member_id)?;
3331        Ok(())
3332    }
3333}
3334
3335impl<'de> ::serde::de::Deserialize<'de> for DeviceSessionArg {
3336    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3337        // struct deserializer
3338        use serde::de::{MapAccess, Visitor};
3339        struct StructVisitor;
3340        impl<'de> Visitor<'de> for StructVisitor {
3341            type Value = DeviceSessionArg;
3342            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3343                f.write_str("a DeviceSessionArg struct")
3344            }
3345            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3346                DeviceSessionArg::internal_deserialize(map)
3347            }
3348        }
3349        deserializer.deserialize_struct("DeviceSessionArg", DEVICE_SESSION_ARG_FIELDS, StructVisitor)
3350    }
3351}
3352
3353impl ::serde::ser::Serialize for DeviceSessionArg {
3354    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3355        // struct serializer
3356        use serde::ser::SerializeStruct;
3357        let mut s = serializer.serialize_struct("DeviceSessionArg", 2)?;
3358        self.internal_serialize::<S>(&mut s)?;
3359        s.end()
3360    }
3361}
3362
3363/// Each of the items is an array of values, one value per day. The value is the number of devices
3364/// active within a time window, ending with that day. If there is no data for a day, then the value
3365/// will be None.
3366#[derive(Debug, Clone, PartialEq, Eq)]
3367#[non_exhaustive] // structs may have more fields added in the future.
3368pub struct DevicesActive {
3369    /// Array of number of linked windows (desktop) clients with activity.
3370    pub windows: NumberPerDay,
3371    /// Array of number of linked mac (desktop) clients with activity.
3372    pub macos: NumberPerDay,
3373    /// Array of number of linked linus (desktop) clients with activity.
3374    pub linux: NumberPerDay,
3375    /// Array of number of linked ios devices with activity.
3376    pub ios: NumberPerDay,
3377    /// Array of number of linked android devices with activity.
3378    pub android: NumberPerDay,
3379    /// Array of number of other linked devices (blackberry, windows phone, etc) with activity.
3380    pub other: NumberPerDay,
3381    /// Array of total number of linked clients with activity.
3382    pub total: NumberPerDay,
3383}
3384
3385impl DevicesActive {
3386    pub fn new(
3387        windows: NumberPerDay,
3388        macos: NumberPerDay,
3389        linux: NumberPerDay,
3390        ios: NumberPerDay,
3391        android: NumberPerDay,
3392        other: NumberPerDay,
3393        total: NumberPerDay,
3394    ) -> Self {
3395        DevicesActive {
3396            windows,
3397            macos,
3398            linux,
3399            ios,
3400            android,
3401            other,
3402            total,
3403        }
3404    }
3405}
3406
3407const DEVICES_ACTIVE_FIELDS: &[&str] = &["windows",
3408                                         "macos",
3409                                         "linux",
3410                                         "ios",
3411                                         "android",
3412                                         "other",
3413                                         "total"];
3414impl DevicesActive {
3415    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3416        map: V,
3417    ) -> Result<DevicesActive, V::Error> {
3418        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3419    }
3420
3421    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3422        mut map: V,
3423        optional: bool,
3424    ) -> Result<Option<DevicesActive>, V::Error> {
3425        let mut field_windows = None;
3426        let mut field_macos = None;
3427        let mut field_linux = None;
3428        let mut field_ios = None;
3429        let mut field_android = None;
3430        let mut field_other = None;
3431        let mut field_total = None;
3432        let mut nothing = true;
3433        while let Some(key) = map.next_key::<&str>()? {
3434            nothing = false;
3435            match key {
3436                "windows" => {
3437                    if field_windows.is_some() {
3438                        return Err(::serde::de::Error::duplicate_field("windows"));
3439                    }
3440                    field_windows = Some(map.next_value()?);
3441                }
3442                "macos" => {
3443                    if field_macos.is_some() {
3444                        return Err(::serde::de::Error::duplicate_field("macos"));
3445                    }
3446                    field_macos = Some(map.next_value()?);
3447                }
3448                "linux" => {
3449                    if field_linux.is_some() {
3450                        return Err(::serde::de::Error::duplicate_field("linux"));
3451                    }
3452                    field_linux = Some(map.next_value()?);
3453                }
3454                "ios" => {
3455                    if field_ios.is_some() {
3456                        return Err(::serde::de::Error::duplicate_field("ios"));
3457                    }
3458                    field_ios = Some(map.next_value()?);
3459                }
3460                "android" => {
3461                    if field_android.is_some() {
3462                        return Err(::serde::de::Error::duplicate_field("android"));
3463                    }
3464                    field_android = Some(map.next_value()?);
3465                }
3466                "other" => {
3467                    if field_other.is_some() {
3468                        return Err(::serde::de::Error::duplicate_field("other"));
3469                    }
3470                    field_other = Some(map.next_value()?);
3471                }
3472                "total" => {
3473                    if field_total.is_some() {
3474                        return Err(::serde::de::Error::duplicate_field("total"));
3475                    }
3476                    field_total = Some(map.next_value()?);
3477                }
3478                _ => {
3479                    // unknown field allowed and ignored
3480                    map.next_value::<::serde_json::Value>()?;
3481                }
3482            }
3483        }
3484        if optional && nothing {
3485            return Ok(None);
3486        }
3487        let result = DevicesActive {
3488            windows: field_windows.ok_or_else(|| ::serde::de::Error::missing_field("windows"))?,
3489            macos: field_macos.ok_or_else(|| ::serde::de::Error::missing_field("macos"))?,
3490            linux: field_linux.ok_or_else(|| ::serde::de::Error::missing_field("linux"))?,
3491            ios: field_ios.ok_or_else(|| ::serde::de::Error::missing_field("ios"))?,
3492            android: field_android.ok_or_else(|| ::serde::de::Error::missing_field("android"))?,
3493            other: field_other.ok_or_else(|| ::serde::de::Error::missing_field("other"))?,
3494            total: field_total.ok_or_else(|| ::serde::de::Error::missing_field("total"))?,
3495        };
3496        Ok(Some(result))
3497    }
3498
3499    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3500        &self,
3501        s: &mut S::SerializeStruct,
3502    ) -> Result<(), S::Error> {
3503        use serde::ser::SerializeStruct;
3504        s.serialize_field("windows", &self.windows)?;
3505        s.serialize_field("macos", &self.macos)?;
3506        s.serialize_field("linux", &self.linux)?;
3507        s.serialize_field("ios", &self.ios)?;
3508        s.serialize_field("android", &self.android)?;
3509        s.serialize_field("other", &self.other)?;
3510        s.serialize_field("total", &self.total)?;
3511        Ok(())
3512    }
3513}
3514
3515impl<'de> ::serde::de::Deserialize<'de> for DevicesActive {
3516    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3517        // struct deserializer
3518        use serde::de::{MapAccess, Visitor};
3519        struct StructVisitor;
3520        impl<'de> Visitor<'de> for StructVisitor {
3521            type Value = DevicesActive;
3522            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3523                f.write_str("a DevicesActive struct")
3524            }
3525            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3526                DevicesActive::internal_deserialize(map)
3527            }
3528        }
3529        deserializer.deserialize_struct("DevicesActive", DEVICES_ACTIVE_FIELDS, StructVisitor)
3530    }
3531}
3532
3533impl ::serde::ser::Serialize for DevicesActive {
3534    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3535        // struct serializer
3536        use serde::ser::SerializeStruct;
3537        let mut s = serializer.serialize_struct("DevicesActive", 7)?;
3538        self.internal_serialize::<S>(&mut s)?;
3539        s.end()
3540    }
3541}
3542
3543/// Excluded users list argument.
3544#[derive(Debug, Clone, PartialEq, Eq)]
3545#[non_exhaustive] // structs may have more fields added in the future.
3546pub struct ExcludedUsersListArg {
3547    /// Number of results to return per call.
3548    pub limit: u32,
3549}
3550
3551impl Default for ExcludedUsersListArg {
3552    fn default() -> Self {
3553        ExcludedUsersListArg {
3554            limit: 1000,
3555        }
3556    }
3557}
3558
3559impl ExcludedUsersListArg {
3560    pub fn with_limit(mut self, value: u32) -> Self {
3561        self.limit = value;
3562        self
3563    }
3564}
3565
3566const EXCLUDED_USERS_LIST_ARG_FIELDS: &[&str] = &["limit"];
3567impl ExcludedUsersListArg {
3568    // no _opt deserializer
3569    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3570        mut map: V,
3571    ) -> Result<ExcludedUsersListArg, V::Error> {
3572        let mut field_limit = None;
3573        while let Some(key) = map.next_key::<&str>()? {
3574            match key {
3575                "limit" => {
3576                    if field_limit.is_some() {
3577                        return Err(::serde::de::Error::duplicate_field("limit"));
3578                    }
3579                    field_limit = Some(map.next_value()?);
3580                }
3581                _ => {
3582                    // unknown field allowed and ignored
3583                    map.next_value::<::serde_json::Value>()?;
3584                }
3585            }
3586        }
3587        let result = ExcludedUsersListArg {
3588            limit: field_limit.unwrap_or(1000),
3589        };
3590        Ok(result)
3591    }
3592
3593    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3594        &self,
3595        s: &mut S::SerializeStruct,
3596    ) -> Result<(), S::Error> {
3597        use serde::ser::SerializeStruct;
3598        if self.limit != 1000 {
3599            s.serialize_field("limit", &self.limit)?;
3600        }
3601        Ok(())
3602    }
3603}
3604
3605impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListArg {
3606    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3607        // struct deserializer
3608        use serde::de::{MapAccess, Visitor};
3609        struct StructVisitor;
3610        impl<'de> Visitor<'de> for StructVisitor {
3611            type Value = ExcludedUsersListArg;
3612            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3613                f.write_str("a ExcludedUsersListArg struct")
3614            }
3615            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3616                ExcludedUsersListArg::internal_deserialize(map)
3617            }
3618        }
3619        deserializer.deserialize_struct("ExcludedUsersListArg", EXCLUDED_USERS_LIST_ARG_FIELDS, StructVisitor)
3620    }
3621}
3622
3623impl ::serde::ser::Serialize for ExcludedUsersListArg {
3624    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3625        // struct serializer
3626        use serde::ser::SerializeStruct;
3627        let mut s = serializer.serialize_struct("ExcludedUsersListArg", 1)?;
3628        self.internal_serialize::<S>(&mut s)?;
3629        s.end()
3630    }
3631}
3632
3633/// Excluded users list continue argument.
3634#[derive(Debug, Clone, PartialEq, Eq)]
3635#[non_exhaustive] // structs may have more fields added in the future.
3636pub struct ExcludedUsersListContinueArg {
3637    /// Indicates from what point to get the next set of users.
3638    pub cursor: String,
3639}
3640
3641impl ExcludedUsersListContinueArg {
3642    pub fn new(cursor: String) -> Self {
3643        ExcludedUsersListContinueArg {
3644            cursor,
3645        }
3646    }
3647}
3648
3649const EXCLUDED_USERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
3650impl ExcludedUsersListContinueArg {
3651    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3652        map: V,
3653    ) -> Result<ExcludedUsersListContinueArg, V::Error> {
3654        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3655    }
3656
3657    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3658        mut map: V,
3659        optional: bool,
3660    ) -> Result<Option<ExcludedUsersListContinueArg>, V::Error> {
3661        let mut field_cursor = None;
3662        let mut nothing = true;
3663        while let Some(key) = map.next_key::<&str>()? {
3664            nothing = false;
3665            match key {
3666                "cursor" => {
3667                    if field_cursor.is_some() {
3668                        return Err(::serde::de::Error::duplicate_field("cursor"));
3669                    }
3670                    field_cursor = Some(map.next_value()?);
3671                }
3672                _ => {
3673                    // unknown field allowed and ignored
3674                    map.next_value::<::serde_json::Value>()?;
3675                }
3676            }
3677        }
3678        if optional && nothing {
3679            return Ok(None);
3680        }
3681        let result = ExcludedUsersListContinueArg {
3682            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
3683        };
3684        Ok(Some(result))
3685    }
3686
3687    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3688        &self,
3689        s: &mut S::SerializeStruct,
3690    ) -> Result<(), S::Error> {
3691        use serde::ser::SerializeStruct;
3692        s.serialize_field("cursor", &self.cursor)?;
3693        Ok(())
3694    }
3695}
3696
3697impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListContinueArg {
3698    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3699        // struct deserializer
3700        use serde::de::{MapAccess, Visitor};
3701        struct StructVisitor;
3702        impl<'de> Visitor<'de> for StructVisitor {
3703            type Value = ExcludedUsersListContinueArg;
3704            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3705                f.write_str("a ExcludedUsersListContinueArg struct")
3706            }
3707            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3708                ExcludedUsersListContinueArg::internal_deserialize(map)
3709            }
3710        }
3711        deserializer.deserialize_struct("ExcludedUsersListContinueArg", EXCLUDED_USERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
3712    }
3713}
3714
3715impl ::serde::ser::Serialize for ExcludedUsersListContinueArg {
3716    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3717        // struct serializer
3718        use serde::ser::SerializeStruct;
3719        let mut s = serializer.serialize_struct("ExcludedUsersListContinueArg", 1)?;
3720        self.internal_serialize::<S>(&mut s)?;
3721        s.end()
3722    }
3723}
3724
3725/// Excluded users list continue error.
3726#[derive(Debug, Clone, PartialEq, Eq)]
3727#[non_exhaustive] // variants may be added in the future
3728pub enum ExcludedUsersListContinueError {
3729    /// The cursor is invalid.
3730    InvalidCursor,
3731    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3732    /// typically indicates that this SDK version is out of date.
3733    Other,
3734}
3735
3736impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListContinueError {
3737    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3738        // union deserializer
3739        use serde::de::{self, MapAccess, Visitor};
3740        struct EnumVisitor;
3741        impl<'de> Visitor<'de> for EnumVisitor {
3742            type Value = ExcludedUsersListContinueError;
3743            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3744                f.write_str("a ExcludedUsersListContinueError structure")
3745            }
3746            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3747                let tag: &str = match map.next_key()? {
3748                    Some(".tag") => map.next_value()?,
3749                    _ => return Err(de::Error::missing_field(".tag"))
3750                };
3751                let value = match tag {
3752                    "invalid_cursor" => ExcludedUsersListContinueError::InvalidCursor,
3753                    _ => ExcludedUsersListContinueError::Other,
3754                };
3755                crate::eat_json_fields(&mut map)?;
3756                Ok(value)
3757            }
3758        }
3759        const VARIANTS: &[&str] = &["invalid_cursor",
3760                                    "other"];
3761        deserializer.deserialize_struct("ExcludedUsersListContinueError", VARIANTS, EnumVisitor)
3762    }
3763}
3764
3765impl ::serde::ser::Serialize for ExcludedUsersListContinueError {
3766    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3767        // union serializer
3768        use serde::ser::SerializeStruct;
3769        match self {
3770            ExcludedUsersListContinueError::InvalidCursor => {
3771                // unit
3772                let mut s = serializer.serialize_struct("ExcludedUsersListContinueError", 1)?;
3773                s.serialize_field(".tag", "invalid_cursor")?;
3774                s.end()
3775            }
3776            ExcludedUsersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3777        }
3778    }
3779}
3780
3781impl ::std::error::Error for ExcludedUsersListContinueError {
3782}
3783
3784impl ::std::fmt::Display for ExcludedUsersListContinueError {
3785    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3786        match self {
3787            ExcludedUsersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
3788            _ => write!(f, "{:?}", *self),
3789        }
3790    }
3791}
3792
3793/// Excluded users list error.
3794#[derive(Debug, Clone, PartialEq, Eq)]
3795#[non_exhaustive] // variants may be added in the future
3796pub enum ExcludedUsersListError {
3797    /// An error occurred.
3798    ListError,
3799    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3800    /// typically indicates that this SDK version is out of date.
3801    Other,
3802}
3803
3804impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListError {
3805    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3806        // union deserializer
3807        use serde::de::{self, MapAccess, Visitor};
3808        struct EnumVisitor;
3809        impl<'de> Visitor<'de> for EnumVisitor {
3810            type Value = ExcludedUsersListError;
3811            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3812                f.write_str("a ExcludedUsersListError structure")
3813            }
3814            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3815                let tag: &str = match map.next_key()? {
3816                    Some(".tag") => map.next_value()?,
3817                    _ => return Err(de::Error::missing_field(".tag"))
3818                };
3819                let value = match tag {
3820                    "list_error" => ExcludedUsersListError::ListError,
3821                    _ => ExcludedUsersListError::Other,
3822                };
3823                crate::eat_json_fields(&mut map)?;
3824                Ok(value)
3825            }
3826        }
3827        const VARIANTS: &[&str] = &["list_error",
3828                                    "other"];
3829        deserializer.deserialize_struct("ExcludedUsersListError", VARIANTS, EnumVisitor)
3830    }
3831}
3832
3833impl ::serde::ser::Serialize for ExcludedUsersListError {
3834    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3835        // union serializer
3836        use serde::ser::SerializeStruct;
3837        match self {
3838            ExcludedUsersListError::ListError => {
3839                // unit
3840                let mut s = serializer.serialize_struct("ExcludedUsersListError", 1)?;
3841                s.serialize_field(".tag", "list_error")?;
3842                s.end()
3843            }
3844            ExcludedUsersListError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3845        }
3846    }
3847}
3848
3849impl ::std::error::Error for ExcludedUsersListError {
3850}
3851
3852impl ::std::fmt::Display for ExcludedUsersListError {
3853    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3854        match self {
3855            ExcludedUsersListError::ListError => f.write_str("An error occurred."),
3856            _ => write!(f, "{:?}", *self),
3857        }
3858    }
3859}
3860
3861/// Excluded users list result.
3862#[derive(Debug, Clone, PartialEq, Eq)]
3863#[non_exhaustive] // structs may have more fields added in the future.
3864pub struct ExcludedUsersListResult {
3865    pub users: Vec<MemberProfile>,
3866    /// Is true if there are additional excluded users that have not been returned yet. An
3867    /// additional call to
3868    /// [`member_space_limits_excluded_users_list_continue()`](crate::team::member_space_limits_excluded_users_list_continue)
3869    /// can retrieve them.
3870    pub has_more: bool,
3871    /// Pass the cursor into
3872    /// [`member_space_limits_excluded_users_list_continue()`](crate::team::member_space_limits_excluded_users_list_continue)
3873    /// to obtain additional excluded users.
3874    pub cursor: Option<String>,
3875}
3876
3877impl ExcludedUsersListResult {
3878    pub fn new(users: Vec<MemberProfile>, has_more: bool) -> Self {
3879        ExcludedUsersListResult {
3880            users,
3881            has_more,
3882            cursor: None,
3883        }
3884    }
3885
3886    pub fn with_cursor(mut self, value: String) -> Self {
3887        self.cursor = Some(value);
3888        self
3889    }
3890}
3891
3892const EXCLUDED_USERS_LIST_RESULT_FIELDS: &[&str] = &["users",
3893                                                     "has_more",
3894                                                     "cursor"];
3895impl ExcludedUsersListResult {
3896    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3897        map: V,
3898    ) -> Result<ExcludedUsersListResult, V::Error> {
3899        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3900    }
3901
3902    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3903        mut map: V,
3904        optional: bool,
3905    ) -> Result<Option<ExcludedUsersListResult>, V::Error> {
3906        let mut field_users = None;
3907        let mut field_has_more = None;
3908        let mut field_cursor = None;
3909        let mut nothing = true;
3910        while let Some(key) = map.next_key::<&str>()? {
3911            nothing = false;
3912            match key {
3913                "users" => {
3914                    if field_users.is_some() {
3915                        return Err(::serde::de::Error::duplicate_field("users"));
3916                    }
3917                    field_users = Some(map.next_value()?);
3918                }
3919                "has_more" => {
3920                    if field_has_more.is_some() {
3921                        return Err(::serde::de::Error::duplicate_field("has_more"));
3922                    }
3923                    field_has_more = Some(map.next_value()?);
3924                }
3925                "cursor" => {
3926                    if field_cursor.is_some() {
3927                        return Err(::serde::de::Error::duplicate_field("cursor"));
3928                    }
3929                    field_cursor = Some(map.next_value()?);
3930                }
3931                _ => {
3932                    // unknown field allowed and ignored
3933                    map.next_value::<::serde_json::Value>()?;
3934                }
3935            }
3936        }
3937        if optional && nothing {
3938            return Ok(None);
3939        }
3940        let result = ExcludedUsersListResult {
3941            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
3942            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
3943            cursor: field_cursor.and_then(Option::flatten),
3944        };
3945        Ok(Some(result))
3946    }
3947
3948    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3949        &self,
3950        s: &mut S::SerializeStruct,
3951    ) -> Result<(), S::Error> {
3952        use serde::ser::SerializeStruct;
3953        s.serialize_field("users", &self.users)?;
3954        s.serialize_field("has_more", &self.has_more)?;
3955        if let Some(val) = &self.cursor {
3956            s.serialize_field("cursor", val)?;
3957        }
3958        Ok(())
3959    }
3960}
3961
3962impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListResult {
3963    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3964        // struct deserializer
3965        use serde::de::{MapAccess, Visitor};
3966        struct StructVisitor;
3967        impl<'de> Visitor<'de> for StructVisitor {
3968            type Value = ExcludedUsersListResult;
3969            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3970                f.write_str("a ExcludedUsersListResult struct")
3971            }
3972            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3973                ExcludedUsersListResult::internal_deserialize(map)
3974            }
3975        }
3976        deserializer.deserialize_struct("ExcludedUsersListResult", EXCLUDED_USERS_LIST_RESULT_FIELDS, StructVisitor)
3977    }
3978}
3979
3980impl ::serde::ser::Serialize for ExcludedUsersListResult {
3981    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3982        // struct serializer
3983        use serde::ser::SerializeStruct;
3984        let mut s = serializer.serialize_struct("ExcludedUsersListResult", 3)?;
3985        self.internal_serialize::<S>(&mut s)?;
3986        s.end()
3987    }
3988}
3989
3990/// Argument of excluded users update operation. Should include a list of users to add/remove
3991/// (according to endpoint), Maximum size of the list is 1000 users.
3992#[derive(Debug, Clone, PartialEq, Eq, Default)]
3993#[non_exhaustive] // structs may have more fields added in the future.
3994pub struct ExcludedUsersUpdateArg {
3995    /// List of users to be added/removed.
3996    pub users: Option<Vec<UserSelectorArg>>,
3997}
3998
3999impl ExcludedUsersUpdateArg {
4000    pub fn with_users(mut self, value: Vec<UserSelectorArg>) -> Self {
4001        self.users = Some(value);
4002        self
4003    }
4004}
4005
4006const EXCLUDED_USERS_UPDATE_ARG_FIELDS: &[&str] = &["users"];
4007impl ExcludedUsersUpdateArg {
4008    // no _opt deserializer
4009    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4010        mut map: V,
4011    ) -> Result<ExcludedUsersUpdateArg, V::Error> {
4012        let mut field_users = None;
4013        while let Some(key) = map.next_key::<&str>()? {
4014            match key {
4015                "users" => {
4016                    if field_users.is_some() {
4017                        return Err(::serde::de::Error::duplicate_field("users"));
4018                    }
4019                    field_users = Some(map.next_value()?);
4020                }
4021                _ => {
4022                    // unknown field allowed and ignored
4023                    map.next_value::<::serde_json::Value>()?;
4024                }
4025            }
4026        }
4027        let result = ExcludedUsersUpdateArg {
4028            users: field_users.and_then(Option::flatten),
4029        };
4030        Ok(result)
4031    }
4032
4033    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4034        &self,
4035        s: &mut S::SerializeStruct,
4036    ) -> Result<(), S::Error> {
4037        use serde::ser::SerializeStruct;
4038        if let Some(val) = &self.users {
4039            s.serialize_field("users", val)?;
4040        }
4041        Ok(())
4042    }
4043}
4044
4045impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateArg {
4046    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4047        // struct deserializer
4048        use serde::de::{MapAccess, Visitor};
4049        struct StructVisitor;
4050        impl<'de> Visitor<'de> for StructVisitor {
4051            type Value = ExcludedUsersUpdateArg;
4052            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4053                f.write_str("a ExcludedUsersUpdateArg struct")
4054            }
4055            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4056                ExcludedUsersUpdateArg::internal_deserialize(map)
4057            }
4058        }
4059        deserializer.deserialize_struct("ExcludedUsersUpdateArg", EXCLUDED_USERS_UPDATE_ARG_FIELDS, StructVisitor)
4060    }
4061}
4062
4063impl ::serde::ser::Serialize for ExcludedUsersUpdateArg {
4064    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4065        // struct serializer
4066        use serde::ser::SerializeStruct;
4067        let mut s = serializer.serialize_struct("ExcludedUsersUpdateArg", 1)?;
4068        self.internal_serialize::<S>(&mut s)?;
4069        s.end()
4070    }
4071}
4072
4073/// Excluded users update error.
4074#[derive(Debug, Clone, PartialEq, Eq)]
4075#[non_exhaustive] // variants may be added in the future
4076pub enum ExcludedUsersUpdateError {
4077    /// At least one of the users is not part of your team.
4078    UsersNotInTeam,
4079    /// A maximum of 1000 users for each of addition/removal can be supplied.
4080    TooManyUsers,
4081    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4082    /// typically indicates that this SDK version is out of date.
4083    Other,
4084}
4085
4086impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateError {
4087    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4088        // union deserializer
4089        use serde::de::{self, MapAccess, Visitor};
4090        struct EnumVisitor;
4091        impl<'de> Visitor<'de> for EnumVisitor {
4092            type Value = ExcludedUsersUpdateError;
4093            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4094                f.write_str("a ExcludedUsersUpdateError structure")
4095            }
4096            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4097                let tag: &str = match map.next_key()? {
4098                    Some(".tag") => map.next_value()?,
4099                    _ => return Err(de::Error::missing_field(".tag"))
4100                };
4101                let value = match tag {
4102                    "users_not_in_team" => ExcludedUsersUpdateError::UsersNotInTeam,
4103                    "too_many_users" => ExcludedUsersUpdateError::TooManyUsers,
4104                    _ => ExcludedUsersUpdateError::Other,
4105                };
4106                crate::eat_json_fields(&mut map)?;
4107                Ok(value)
4108            }
4109        }
4110        const VARIANTS: &[&str] = &["users_not_in_team",
4111                                    "too_many_users",
4112                                    "other"];
4113        deserializer.deserialize_struct("ExcludedUsersUpdateError", VARIANTS, EnumVisitor)
4114    }
4115}
4116
4117impl ::serde::ser::Serialize for ExcludedUsersUpdateError {
4118    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4119        // union serializer
4120        use serde::ser::SerializeStruct;
4121        match self {
4122            ExcludedUsersUpdateError::UsersNotInTeam => {
4123                // unit
4124                let mut s = serializer.serialize_struct("ExcludedUsersUpdateError", 1)?;
4125                s.serialize_field(".tag", "users_not_in_team")?;
4126                s.end()
4127            }
4128            ExcludedUsersUpdateError::TooManyUsers => {
4129                // unit
4130                let mut s = serializer.serialize_struct("ExcludedUsersUpdateError", 1)?;
4131                s.serialize_field(".tag", "too_many_users")?;
4132                s.end()
4133            }
4134            ExcludedUsersUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4135        }
4136    }
4137}
4138
4139impl ::std::error::Error for ExcludedUsersUpdateError {
4140}
4141
4142impl ::std::fmt::Display for ExcludedUsersUpdateError {
4143    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4144        match self {
4145            ExcludedUsersUpdateError::UsersNotInTeam => f.write_str("At least one of the users is not part of your team."),
4146            ExcludedUsersUpdateError::TooManyUsers => f.write_str("A maximum of 1000 users for each of addition/removal can be supplied."),
4147            _ => write!(f, "{:?}", *self),
4148        }
4149    }
4150}
4151
4152/// Excluded users update result.
4153#[derive(Debug, Clone, PartialEq, Eq)]
4154#[non_exhaustive] // structs may have more fields added in the future.
4155pub struct ExcludedUsersUpdateResult {
4156    /// Update status.
4157    pub status: ExcludedUsersUpdateStatus,
4158}
4159
4160impl ExcludedUsersUpdateResult {
4161    pub fn new(status: ExcludedUsersUpdateStatus) -> Self {
4162        ExcludedUsersUpdateResult {
4163            status,
4164        }
4165    }
4166}
4167
4168const EXCLUDED_USERS_UPDATE_RESULT_FIELDS: &[&str] = &["status"];
4169impl ExcludedUsersUpdateResult {
4170    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4171        map: V,
4172    ) -> Result<ExcludedUsersUpdateResult, V::Error> {
4173        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4174    }
4175
4176    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4177        mut map: V,
4178        optional: bool,
4179    ) -> Result<Option<ExcludedUsersUpdateResult>, V::Error> {
4180        let mut field_status = None;
4181        let mut nothing = true;
4182        while let Some(key) = map.next_key::<&str>()? {
4183            nothing = false;
4184            match key {
4185                "status" => {
4186                    if field_status.is_some() {
4187                        return Err(::serde::de::Error::duplicate_field("status"));
4188                    }
4189                    field_status = Some(map.next_value()?);
4190                }
4191                _ => {
4192                    // unknown field allowed and ignored
4193                    map.next_value::<::serde_json::Value>()?;
4194                }
4195            }
4196        }
4197        if optional && nothing {
4198            return Ok(None);
4199        }
4200        let result = ExcludedUsersUpdateResult {
4201            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
4202        };
4203        Ok(Some(result))
4204    }
4205
4206    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4207        &self,
4208        s: &mut S::SerializeStruct,
4209    ) -> Result<(), S::Error> {
4210        use serde::ser::SerializeStruct;
4211        s.serialize_field("status", &self.status)?;
4212        Ok(())
4213    }
4214}
4215
4216impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateResult {
4217    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4218        // struct deserializer
4219        use serde::de::{MapAccess, Visitor};
4220        struct StructVisitor;
4221        impl<'de> Visitor<'de> for StructVisitor {
4222            type Value = ExcludedUsersUpdateResult;
4223            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4224                f.write_str("a ExcludedUsersUpdateResult struct")
4225            }
4226            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4227                ExcludedUsersUpdateResult::internal_deserialize(map)
4228            }
4229        }
4230        deserializer.deserialize_struct("ExcludedUsersUpdateResult", EXCLUDED_USERS_UPDATE_RESULT_FIELDS, StructVisitor)
4231    }
4232}
4233
4234impl ::serde::ser::Serialize for ExcludedUsersUpdateResult {
4235    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4236        // struct serializer
4237        use serde::ser::SerializeStruct;
4238        let mut s = serializer.serialize_struct("ExcludedUsersUpdateResult", 1)?;
4239        self.internal_serialize::<S>(&mut s)?;
4240        s.end()
4241    }
4242}
4243
4244/// Excluded users update operation status.
4245#[derive(Debug, Clone, PartialEq, Eq)]
4246#[non_exhaustive] // variants may be added in the future
4247pub enum ExcludedUsersUpdateStatus {
4248    /// Update successful.
4249    Success,
4250    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4251    /// typically indicates that this SDK version is out of date.
4252    Other,
4253}
4254
4255impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateStatus {
4256    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4257        // union deserializer
4258        use serde::de::{self, MapAccess, Visitor};
4259        struct EnumVisitor;
4260        impl<'de> Visitor<'de> for EnumVisitor {
4261            type Value = ExcludedUsersUpdateStatus;
4262            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4263                f.write_str("a ExcludedUsersUpdateStatus structure")
4264            }
4265            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4266                let tag: &str = match map.next_key()? {
4267                    Some(".tag") => map.next_value()?,
4268                    _ => return Err(de::Error::missing_field(".tag"))
4269                };
4270                let value = match tag {
4271                    "success" => ExcludedUsersUpdateStatus::Success,
4272                    _ => ExcludedUsersUpdateStatus::Other,
4273                };
4274                crate::eat_json_fields(&mut map)?;
4275                Ok(value)
4276            }
4277        }
4278        const VARIANTS: &[&str] = &["success",
4279                                    "other"];
4280        deserializer.deserialize_struct("ExcludedUsersUpdateStatus", VARIANTS, EnumVisitor)
4281    }
4282}
4283
4284impl ::serde::ser::Serialize for ExcludedUsersUpdateStatus {
4285    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4286        // union serializer
4287        use serde::ser::SerializeStruct;
4288        match self {
4289            ExcludedUsersUpdateStatus::Success => {
4290                // unit
4291                let mut s = serializer.serialize_struct("ExcludedUsersUpdateStatus", 1)?;
4292                s.serialize_field(".tag", "success")?;
4293                s.end()
4294            }
4295            ExcludedUsersUpdateStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4296        }
4297    }
4298}
4299
4300/// A set of features that a Dropbox Business account may support.
4301#[derive(Debug, Clone, PartialEq, Eq)]
4302#[non_exhaustive] // variants may be added in the future
4303pub enum Feature {
4304    /// The number of upload API calls allowed per month.
4305    UploadApiRateLimit,
4306    /// Does this team have a shared team root.
4307    HasTeamSharedDropbox,
4308    /// Does this team have file events.
4309    HasTeamFileEvents,
4310    /// Does this team have team selective sync enabled.
4311    HasTeamSelectiveSync,
4312    /// Does this team have team member folder.
4313    HasDistinctMemberHomes,
4314    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4315    /// typically indicates that this SDK version is out of date.
4316    Other,
4317}
4318
4319impl<'de> ::serde::de::Deserialize<'de> for Feature {
4320    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4321        // union deserializer
4322        use serde::de::{self, MapAccess, Visitor};
4323        struct EnumVisitor;
4324        impl<'de> Visitor<'de> for EnumVisitor {
4325            type Value = Feature;
4326            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4327                f.write_str("a Feature structure")
4328            }
4329            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4330                let tag: &str = match map.next_key()? {
4331                    Some(".tag") => map.next_value()?,
4332                    _ => return Err(de::Error::missing_field(".tag"))
4333                };
4334                let value = match tag {
4335                    "upload_api_rate_limit" => Feature::UploadApiRateLimit,
4336                    "has_team_shared_dropbox" => Feature::HasTeamSharedDropbox,
4337                    "has_team_file_events" => Feature::HasTeamFileEvents,
4338                    "has_team_selective_sync" => Feature::HasTeamSelectiveSync,
4339                    "has_distinct_member_homes" => Feature::HasDistinctMemberHomes,
4340                    _ => Feature::Other,
4341                };
4342                crate::eat_json_fields(&mut map)?;
4343                Ok(value)
4344            }
4345        }
4346        const VARIANTS: &[&str] = &["upload_api_rate_limit",
4347                                    "has_team_shared_dropbox",
4348                                    "has_team_file_events",
4349                                    "has_team_selective_sync",
4350                                    "has_distinct_member_homes",
4351                                    "other"];
4352        deserializer.deserialize_struct("Feature", VARIANTS, EnumVisitor)
4353    }
4354}
4355
4356impl ::serde::ser::Serialize for Feature {
4357    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4358        // union serializer
4359        use serde::ser::SerializeStruct;
4360        match self {
4361            Feature::UploadApiRateLimit => {
4362                // unit
4363                let mut s = serializer.serialize_struct("Feature", 1)?;
4364                s.serialize_field(".tag", "upload_api_rate_limit")?;
4365                s.end()
4366            }
4367            Feature::HasTeamSharedDropbox => {
4368                // unit
4369                let mut s = serializer.serialize_struct("Feature", 1)?;
4370                s.serialize_field(".tag", "has_team_shared_dropbox")?;
4371                s.end()
4372            }
4373            Feature::HasTeamFileEvents => {
4374                // unit
4375                let mut s = serializer.serialize_struct("Feature", 1)?;
4376                s.serialize_field(".tag", "has_team_file_events")?;
4377                s.end()
4378            }
4379            Feature::HasTeamSelectiveSync => {
4380                // unit
4381                let mut s = serializer.serialize_struct("Feature", 1)?;
4382                s.serialize_field(".tag", "has_team_selective_sync")?;
4383                s.end()
4384            }
4385            Feature::HasDistinctMemberHomes => {
4386                // unit
4387                let mut s = serializer.serialize_struct("Feature", 1)?;
4388                s.serialize_field(".tag", "has_distinct_member_homes")?;
4389                s.end()
4390            }
4391            Feature::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4392        }
4393    }
4394}
4395
4396/// The values correspond to entries in [`Feature`]. You may get different value according to your
4397/// Dropbox Business plan.
4398#[derive(Debug, Clone, PartialEq, Eq)]
4399#[non_exhaustive] // variants may be added in the future
4400pub enum FeatureValue {
4401    UploadApiRateLimit(UploadApiRateLimitValue),
4402    HasTeamSharedDropbox(HasTeamSharedDropboxValue),
4403    HasTeamFileEvents(HasTeamFileEventsValue),
4404    HasTeamSelectiveSync(HasTeamSelectiveSyncValue),
4405    HasDistinctMemberHomes(HasDistinctMemberHomesValue),
4406    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4407    /// typically indicates that this SDK version is out of date.
4408    Other,
4409}
4410
4411impl<'de> ::serde::de::Deserialize<'de> for FeatureValue {
4412    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4413        // union deserializer
4414        use serde::de::{self, MapAccess, Visitor};
4415        struct EnumVisitor;
4416        impl<'de> Visitor<'de> for EnumVisitor {
4417            type Value = FeatureValue;
4418            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4419                f.write_str("a FeatureValue structure")
4420            }
4421            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4422                let tag: &str = match map.next_key()? {
4423                    Some(".tag") => map.next_value()?,
4424                    _ => return Err(de::Error::missing_field(".tag"))
4425                };
4426                let value = match tag {
4427                    "upload_api_rate_limit" => {
4428                        match map.next_key()? {
4429                            Some("upload_api_rate_limit") => FeatureValue::UploadApiRateLimit(map.next_value()?),
4430                            None => return Err(de::Error::missing_field("upload_api_rate_limit")),
4431                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
4432                        }
4433                    }
4434                    "has_team_shared_dropbox" => {
4435                        match map.next_key()? {
4436                            Some("has_team_shared_dropbox") => FeatureValue::HasTeamSharedDropbox(map.next_value()?),
4437                            None => return Err(de::Error::missing_field("has_team_shared_dropbox")),
4438                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
4439                        }
4440                    }
4441                    "has_team_file_events" => {
4442                        match map.next_key()? {
4443                            Some("has_team_file_events") => FeatureValue::HasTeamFileEvents(map.next_value()?),
4444                            None => return Err(de::Error::missing_field("has_team_file_events")),
4445                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
4446                        }
4447                    }
4448                    "has_team_selective_sync" => {
4449                        match map.next_key()? {
4450                            Some("has_team_selective_sync") => FeatureValue::HasTeamSelectiveSync(map.next_value()?),
4451                            None => return Err(de::Error::missing_field("has_team_selective_sync")),
4452                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
4453                        }
4454                    }
4455                    "has_distinct_member_homes" => {
4456                        match map.next_key()? {
4457                            Some("has_distinct_member_homes") => FeatureValue::HasDistinctMemberHomes(map.next_value()?),
4458                            None => return Err(de::Error::missing_field("has_distinct_member_homes")),
4459                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
4460                        }
4461                    }
4462                    _ => FeatureValue::Other,
4463                };
4464                crate::eat_json_fields(&mut map)?;
4465                Ok(value)
4466            }
4467        }
4468        const VARIANTS: &[&str] = &["upload_api_rate_limit",
4469                                    "has_team_shared_dropbox",
4470                                    "has_team_file_events",
4471                                    "has_team_selective_sync",
4472                                    "has_distinct_member_homes",
4473                                    "other"];
4474        deserializer.deserialize_struct("FeatureValue", VARIANTS, EnumVisitor)
4475    }
4476}
4477
4478impl ::serde::ser::Serialize for FeatureValue {
4479    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4480        // union serializer
4481        use serde::ser::SerializeStruct;
4482        match self {
4483            FeatureValue::UploadApiRateLimit(x) => {
4484                // union or polymporphic struct
4485                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
4486                s.serialize_field(".tag", "upload_api_rate_limit")?;
4487                s.serialize_field("upload_api_rate_limit", x)?;
4488                s.end()
4489            }
4490            FeatureValue::HasTeamSharedDropbox(x) => {
4491                // union or polymporphic struct
4492                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
4493                s.serialize_field(".tag", "has_team_shared_dropbox")?;
4494                s.serialize_field("has_team_shared_dropbox", x)?;
4495                s.end()
4496            }
4497            FeatureValue::HasTeamFileEvents(x) => {
4498                // union or polymporphic struct
4499                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
4500                s.serialize_field(".tag", "has_team_file_events")?;
4501                s.serialize_field("has_team_file_events", x)?;
4502                s.end()
4503            }
4504            FeatureValue::HasTeamSelectiveSync(x) => {
4505                // union or polymporphic struct
4506                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
4507                s.serialize_field(".tag", "has_team_selective_sync")?;
4508                s.serialize_field("has_team_selective_sync", x)?;
4509                s.end()
4510            }
4511            FeatureValue::HasDistinctMemberHomes(x) => {
4512                // union or polymporphic struct
4513                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
4514                s.serialize_field(".tag", "has_distinct_member_homes")?;
4515                s.serialize_field("has_distinct_member_homes", x)?;
4516                s.end()
4517            }
4518            FeatureValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4519        }
4520    }
4521}
4522
4523#[derive(Debug, Clone, PartialEq, Eq)]
4524#[non_exhaustive] // structs may have more fields added in the future.
4525pub struct FeaturesGetValuesBatchArg {
4526    /// A list of features in [`Feature`]. If the list is empty, this route will return
4527    /// [`FeaturesGetValuesBatchError`].
4528    pub features: Vec<Feature>,
4529}
4530
4531impl FeaturesGetValuesBatchArg {
4532    pub fn new(features: Vec<Feature>) -> Self {
4533        FeaturesGetValuesBatchArg {
4534            features,
4535        }
4536    }
4537}
4538
4539const FEATURES_GET_VALUES_BATCH_ARG_FIELDS: &[&str] = &["features"];
4540impl FeaturesGetValuesBatchArg {
4541    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4542        map: V,
4543    ) -> Result<FeaturesGetValuesBatchArg, V::Error> {
4544        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4545    }
4546
4547    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4548        mut map: V,
4549        optional: bool,
4550    ) -> Result<Option<FeaturesGetValuesBatchArg>, V::Error> {
4551        let mut field_features = None;
4552        let mut nothing = true;
4553        while let Some(key) = map.next_key::<&str>()? {
4554            nothing = false;
4555            match key {
4556                "features" => {
4557                    if field_features.is_some() {
4558                        return Err(::serde::de::Error::duplicate_field("features"));
4559                    }
4560                    field_features = Some(map.next_value()?);
4561                }
4562                _ => {
4563                    // unknown field allowed and ignored
4564                    map.next_value::<::serde_json::Value>()?;
4565                }
4566            }
4567        }
4568        if optional && nothing {
4569            return Ok(None);
4570        }
4571        let result = FeaturesGetValuesBatchArg {
4572            features: field_features.ok_or_else(|| ::serde::de::Error::missing_field("features"))?,
4573        };
4574        Ok(Some(result))
4575    }
4576
4577    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4578        &self,
4579        s: &mut S::SerializeStruct,
4580    ) -> Result<(), S::Error> {
4581        use serde::ser::SerializeStruct;
4582        s.serialize_field("features", &self.features)?;
4583        Ok(())
4584    }
4585}
4586
4587impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchArg {
4588    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4589        // struct deserializer
4590        use serde::de::{MapAccess, Visitor};
4591        struct StructVisitor;
4592        impl<'de> Visitor<'de> for StructVisitor {
4593            type Value = FeaturesGetValuesBatchArg;
4594            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4595                f.write_str("a FeaturesGetValuesBatchArg struct")
4596            }
4597            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4598                FeaturesGetValuesBatchArg::internal_deserialize(map)
4599            }
4600        }
4601        deserializer.deserialize_struct("FeaturesGetValuesBatchArg", FEATURES_GET_VALUES_BATCH_ARG_FIELDS, StructVisitor)
4602    }
4603}
4604
4605impl ::serde::ser::Serialize for FeaturesGetValuesBatchArg {
4606    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4607        // struct serializer
4608        use serde::ser::SerializeStruct;
4609        let mut s = serializer.serialize_struct("FeaturesGetValuesBatchArg", 1)?;
4610        self.internal_serialize::<S>(&mut s)?;
4611        s.end()
4612    }
4613}
4614
4615#[derive(Debug, Clone, PartialEq, Eq)]
4616#[non_exhaustive] // variants may be added in the future
4617pub enum FeaturesGetValuesBatchError {
4618    /// At least one [`Feature`] must be included in the [`FeaturesGetValuesBatchArg`].features
4619    /// list.
4620    EmptyFeaturesList,
4621    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4622    /// typically indicates that this SDK version is out of date.
4623    Other,
4624}
4625
4626impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchError {
4627    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4628        // union deserializer
4629        use serde::de::{self, MapAccess, Visitor};
4630        struct EnumVisitor;
4631        impl<'de> Visitor<'de> for EnumVisitor {
4632            type Value = FeaturesGetValuesBatchError;
4633            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4634                f.write_str("a FeaturesGetValuesBatchError structure")
4635            }
4636            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4637                let tag: &str = match map.next_key()? {
4638                    Some(".tag") => map.next_value()?,
4639                    _ => return Err(de::Error::missing_field(".tag"))
4640                };
4641                let value = match tag {
4642                    "empty_features_list" => FeaturesGetValuesBatchError::EmptyFeaturesList,
4643                    _ => FeaturesGetValuesBatchError::Other,
4644                };
4645                crate::eat_json_fields(&mut map)?;
4646                Ok(value)
4647            }
4648        }
4649        const VARIANTS: &[&str] = &["empty_features_list",
4650                                    "other"];
4651        deserializer.deserialize_struct("FeaturesGetValuesBatchError", VARIANTS, EnumVisitor)
4652    }
4653}
4654
4655impl ::serde::ser::Serialize for FeaturesGetValuesBatchError {
4656    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4657        // union serializer
4658        use serde::ser::SerializeStruct;
4659        match self {
4660            FeaturesGetValuesBatchError::EmptyFeaturesList => {
4661                // unit
4662                let mut s = serializer.serialize_struct("FeaturesGetValuesBatchError", 1)?;
4663                s.serialize_field(".tag", "empty_features_list")?;
4664                s.end()
4665            }
4666            FeaturesGetValuesBatchError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4667        }
4668    }
4669}
4670
4671impl ::std::error::Error for FeaturesGetValuesBatchError {
4672}
4673
4674impl ::std::fmt::Display for FeaturesGetValuesBatchError {
4675    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4676        write!(f, "{:?}", *self)
4677    }
4678}
4679
4680#[derive(Debug, Clone, PartialEq, Eq)]
4681#[non_exhaustive] // structs may have more fields added in the future.
4682pub struct FeaturesGetValuesBatchResult {
4683    pub values: Vec<FeatureValue>,
4684}
4685
4686impl FeaturesGetValuesBatchResult {
4687    pub fn new(values: Vec<FeatureValue>) -> Self {
4688        FeaturesGetValuesBatchResult {
4689            values,
4690        }
4691    }
4692}
4693
4694const FEATURES_GET_VALUES_BATCH_RESULT_FIELDS: &[&str] = &["values"];
4695impl FeaturesGetValuesBatchResult {
4696    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4697        map: V,
4698    ) -> Result<FeaturesGetValuesBatchResult, V::Error> {
4699        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4700    }
4701
4702    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4703        mut map: V,
4704        optional: bool,
4705    ) -> Result<Option<FeaturesGetValuesBatchResult>, V::Error> {
4706        let mut field_values = None;
4707        let mut nothing = true;
4708        while let Some(key) = map.next_key::<&str>()? {
4709            nothing = false;
4710            match key {
4711                "values" => {
4712                    if field_values.is_some() {
4713                        return Err(::serde::de::Error::duplicate_field("values"));
4714                    }
4715                    field_values = Some(map.next_value()?);
4716                }
4717                _ => {
4718                    // unknown field allowed and ignored
4719                    map.next_value::<::serde_json::Value>()?;
4720                }
4721            }
4722        }
4723        if optional && nothing {
4724            return Ok(None);
4725        }
4726        let result = FeaturesGetValuesBatchResult {
4727            values: field_values.ok_or_else(|| ::serde::de::Error::missing_field("values"))?,
4728        };
4729        Ok(Some(result))
4730    }
4731
4732    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4733        &self,
4734        s: &mut S::SerializeStruct,
4735    ) -> Result<(), S::Error> {
4736        use serde::ser::SerializeStruct;
4737        s.serialize_field("values", &self.values)?;
4738        Ok(())
4739    }
4740}
4741
4742impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchResult {
4743    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4744        // struct deserializer
4745        use serde::de::{MapAccess, Visitor};
4746        struct StructVisitor;
4747        impl<'de> Visitor<'de> for StructVisitor {
4748            type Value = FeaturesGetValuesBatchResult;
4749            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4750                f.write_str("a FeaturesGetValuesBatchResult struct")
4751            }
4752            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4753                FeaturesGetValuesBatchResult::internal_deserialize(map)
4754            }
4755        }
4756        deserializer.deserialize_struct("FeaturesGetValuesBatchResult", FEATURES_GET_VALUES_BATCH_RESULT_FIELDS, StructVisitor)
4757    }
4758}
4759
4760impl ::serde::ser::Serialize for FeaturesGetValuesBatchResult {
4761    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4762        // struct serializer
4763        use serde::ser::SerializeStruct;
4764        let mut s = serializer.serialize_struct("FeaturesGetValuesBatchResult", 1)?;
4765        self.internal_serialize::<S>(&mut s)?;
4766        s.end()
4767    }
4768}
4769
4770/// Activity Report Result. Each of the items in the storage report is an array of values, one value
4771/// per day. If there is no data for a day, then the value will be None.
4772#[derive(Debug, Clone, PartialEq, Eq)]
4773#[non_exhaustive] // structs may have more fields added in the future.
4774pub struct GetActivityReport {
4775    /// First date present in the results as 'YYYY-MM-DD' or None.
4776    pub start_date: String,
4777    /// Array of total number of adds by team members.
4778    pub adds: NumberPerDay,
4779    /// Array of number of edits by team members. If the same user edits the same file multiple
4780    /// times this is counted as a single edit.
4781    pub edits: NumberPerDay,
4782    /// Array of total number of deletes by team members.
4783    pub deletes: NumberPerDay,
4784    /// Array of the number of users who have been active in the last 28 days.
4785    pub active_users_28_day: NumberPerDay,
4786    /// Array of the number of users who have been active in the last week.
4787    pub active_users_7_day: NumberPerDay,
4788    /// Array of the number of users who have been active in the last day.
4789    pub active_users_1_day: NumberPerDay,
4790    /// Array of the number of shared folders with some activity in the last 28 days.
4791    pub active_shared_folders_28_day: NumberPerDay,
4792    /// Array of the number of shared folders with some activity in the last week.
4793    pub active_shared_folders_7_day: NumberPerDay,
4794    /// Array of the number of shared folders with some activity in the last day.
4795    pub active_shared_folders_1_day: NumberPerDay,
4796    /// Array of the number of shared links created.
4797    pub shared_links_created: NumberPerDay,
4798    /// Array of the number of views by team users to shared links created by the team.
4799    pub shared_links_viewed_by_team: NumberPerDay,
4800    /// Array of the number of views by users outside of the team to shared links created by the
4801    /// team.
4802    pub shared_links_viewed_by_outside_user: NumberPerDay,
4803    /// Array of the number of views by non-logged-in users to shared links created by the team.
4804    pub shared_links_viewed_by_not_logged_in: NumberPerDay,
4805    /// Array of the total number of views to shared links created by the team.
4806    pub shared_links_viewed_total: NumberPerDay,
4807}
4808
4809impl GetActivityReport {
4810    pub fn new(
4811        start_date: String,
4812        adds: NumberPerDay,
4813        edits: NumberPerDay,
4814        deletes: NumberPerDay,
4815        active_users_28_day: NumberPerDay,
4816        active_users_7_day: NumberPerDay,
4817        active_users_1_day: NumberPerDay,
4818        active_shared_folders_28_day: NumberPerDay,
4819        active_shared_folders_7_day: NumberPerDay,
4820        active_shared_folders_1_day: NumberPerDay,
4821        shared_links_created: NumberPerDay,
4822        shared_links_viewed_by_team: NumberPerDay,
4823        shared_links_viewed_by_outside_user: NumberPerDay,
4824        shared_links_viewed_by_not_logged_in: NumberPerDay,
4825        shared_links_viewed_total: NumberPerDay,
4826    ) -> Self {
4827        GetActivityReport {
4828            start_date,
4829            adds,
4830            edits,
4831            deletes,
4832            active_users_28_day,
4833            active_users_7_day,
4834            active_users_1_day,
4835            active_shared_folders_28_day,
4836            active_shared_folders_7_day,
4837            active_shared_folders_1_day,
4838            shared_links_created,
4839            shared_links_viewed_by_team,
4840            shared_links_viewed_by_outside_user,
4841            shared_links_viewed_by_not_logged_in,
4842            shared_links_viewed_total,
4843        }
4844    }
4845}
4846
4847const GET_ACTIVITY_REPORT_FIELDS: &[&str] = &["start_date",
4848                                              "adds",
4849                                              "edits",
4850                                              "deletes",
4851                                              "active_users_28_day",
4852                                              "active_users_7_day",
4853                                              "active_users_1_day",
4854                                              "active_shared_folders_28_day",
4855                                              "active_shared_folders_7_day",
4856                                              "active_shared_folders_1_day",
4857                                              "shared_links_created",
4858                                              "shared_links_viewed_by_team",
4859                                              "shared_links_viewed_by_outside_user",
4860                                              "shared_links_viewed_by_not_logged_in",
4861                                              "shared_links_viewed_total"];
4862impl GetActivityReport {
4863    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4864        map: V,
4865    ) -> Result<GetActivityReport, V::Error> {
4866        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4867    }
4868
4869    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4870        mut map: V,
4871        optional: bool,
4872    ) -> Result<Option<GetActivityReport>, V::Error> {
4873        let mut field_start_date = None;
4874        let mut field_adds = None;
4875        let mut field_edits = None;
4876        let mut field_deletes = None;
4877        let mut field_active_users_28_day = None;
4878        let mut field_active_users_7_day = None;
4879        let mut field_active_users_1_day = None;
4880        let mut field_active_shared_folders_28_day = None;
4881        let mut field_active_shared_folders_7_day = None;
4882        let mut field_active_shared_folders_1_day = None;
4883        let mut field_shared_links_created = None;
4884        let mut field_shared_links_viewed_by_team = None;
4885        let mut field_shared_links_viewed_by_outside_user = None;
4886        let mut field_shared_links_viewed_by_not_logged_in = None;
4887        let mut field_shared_links_viewed_total = None;
4888        let mut nothing = true;
4889        while let Some(key) = map.next_key::<&str>()? {
4890            nothing = false;
4891            match key {
4892                "start_date" => {
4893                    if field_start_date.is_some() {
4894                        return Err(::serde::de::Error::duplicate_field("start_date"));
4895                    }
4896                    field_start_date = Some(map.next_value()?);
4897                }
4898                "adds" => {
4899                    if field_adds.is_some() {
4900                        return Err(::serde::de::Error::duplicate_field("adds"));
4901                    }
4902                    field_adds = Some(map.next_value()?);
4903                }
4904                "edits" => {
4905                    if field_edits.is_some() {
4906                        return Err(::serde::de::Error::duplicate_field("edits"));
4907                    }
4908                    field_edits = Some(map.next_value()?);
4909                }
4910                "deletes" => {
4911                    if field_deletes.is_some() {
4912                        return Err(::serde::de::Error::duplicate_field("deletes"));
4913                    }
4914                    field_deletes = Some(map.next_value()?);
4915                }
4916                "active_users_28_day" => {
4917                    if field_active_users_28_day.is_some() {
4918                        return Err(::serde::de::Error::duplicate_field("active_users_28_day"));
4919                    }
4920                    field_active_users_28_day = Some(map.next_value()?);
4921                }
4922                "active_users_7_day" => {
4923                    if field_active_users_7_day.is_some() {
4924                        return Err(::serde::de::Error::duplicate_field("active_users_7_day"));
4925                    }
4926                    field_active_users_7_day = Some(map.next_value()?);
4927                }
4928                "active_users_1_day" => {
4929                    if field_active_users_1_day.is_some() {
4930                        return Err(::serde::de::Error::duplicate_field("active_users_1_day"));
4931                    }
4932                    field_active_users_1_day = Some(map.next_value()?);
4933                }
4934                "active_shared_folders_28_day" => {
4935                    if field_active_shared_folders_28_day.is_some() {
4936                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_28_day"));
4937                    }
4938                    field_active_shared_folders_28_day = Some(map.next_value()?);
4939                }
4940                "active_shared_folders_7_day" => {
4941                    if field_active_shared_folders_7_day.is_some() {
4942                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_7_day"));
4943                    }
4944                    field_active_shared_folders_7_day = Some(map.next_value()?);
4945                }
4946                "active_shared_folders_1_day" => {
4947                    if field_active_shared_folders_1_day.is_some() {
4948                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_1_day"));
4949                    }
4950                    field_active_shared_folders_1_day = Some(map.next_value()?);
4951                }
4952                "shared_links_created" => {
4953                    if field_shared_links_created.is_some() {
4954                        return Err(::serde::de::Error::duplicate_field("shared_links_created"));
4955                    }
4956                    field_shared_links_created = Some(map.next_value()?);
4957                }
4958                "shared_links_viewed_by_team" => {
4959                    if field_shared_links_viewed_by_team.is_some() {
4960                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_team"));
4961                    }
4962                    field_shared_links_viewed_by_team = Some(map.next_value()?);
4963                }
4964                "shared_links_viewed_by_outside_user" => {
4965                    if field_shared_links_viewed_by_outside_user.is_some() {
4966                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_outside_user"));
4967                    }
4968                    field_shared_links_viewed_by_outside_user = Some(map.next_value()?);
4969                }
4970                "shared_links_viewed_by_not_logged_in" => {
4971                    if field_shared_links_viewed_by_not_logged_in.is_some() {
4972                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_not_logged_in"));
4973                    }
4974                    field_shared_links_viewed_by_not_logged_in = Some(map.next_value()?);
4975                }
4976                "shared_links_viewed_total" => {
4977                    if field_shared_links_viewed_total.is_some() {
4978                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_total"));
4979                    }
4980                    field_shared_links_viewed_total = Some(map.next_value()?);
4981                }
4982                _ => {
4983                    // unknown field allowed and ignored
4984                    map.next_value::<::serde_json::Value>()?;
4985                }
4986            }
4987        }
4988        if optional && nothing {
4989            return Ok(None);
4990        }
4991        let result = GetActivityReport {
4992            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4993            adds: field_adds.ok_or_else(|| ::serde::de::Error::missing_field("adds"))?,
4994            edits: field_edits.ok_or_else(|| ::serde::de::Error::missing_field("edits"))?,
4995            deletes: field_deletes.ok_or_else(|| ::serde::de::Error::missing_field("deletes"))?,
4996            active_users_28_day: field_active_users_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_28_day"))?,
4997            active_users_7_day: field_active_users_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_7_day"))?,
4998            active_users_1_day: field_active_users_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_1_day"))?,
4999            active_shared_folders_28_day: field_active_shared_folders_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_28_day"))?,
5000            active_shared_folders_7_day: field_active_shared_folders_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_7_day"))?,
5001            active_shared_folders_1_day: field_active_shared_folders_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_1_day"))?,
5002            shared_links_created: field_shared_links_created.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_created"))?,
5003            shared_links_viewed_by_team: field_shared_links_viewed_by_team.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_by_team"))?,
5004            shared_links_viewed_by_outside_user: field_shared_links_viewed_by_outside_user.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_by_outside_user"))?,
5005            shared_links_viewed_by_not_logged_in: field_shared_links_viewed_by_not_logged_in.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_by_not_logged_in"))?,
5006            shared_links_viewed_total: field_shared_links_viewed_total.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_total"))?,
5007        };
5008        Ok(Some(result))
5009    }
5010
5011    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5012        &self,
5013        s: &mut S::SerializeStruct,
5014    ) -> Result<(), S::Error> {
5015        use serde::ser::SerializeStruct;
5016        s.serialize_field("start_date", &self.start_date)?;
5017        s.serialize_field("adds", &self.adds)?;
5018        s.serialize_field("edits", &self.edits)?;
5019        s.serialize_field("deletes", &self.deletes)?;
5020        s.serialize_field("active_users_28_day", &self.active_users_28_day)?;
5021        s.serialize_field("active_users_7_day", &self.active_users_7_day)?;
5022        s.serialize_field("active_users_1_day", &self.active_users_1_day)?;
5023        s.serialize_field("active_shared_folders_28_day", &self.active_shared_folders_28_day)?;
5024        s.serialize_field("active_shared_folders_7_day", &self.active_shared_folders_7_day)?;
5025        s.serialize_field("active_shared_folders_1_day", &self.active_shared_folders_1_day)?;
5026        s.serialize_field("shared_links_created", &self.shared_links_created)?;
5027        s.serialize_field("shared_links_viewed_by_team", &self.shared_links_viewed_by_team)?;
5028        s.serialize_field("shared_links_viewed_by_outside_user", &self.shared_links_viewed_by_outside_user)?;
5029        s.serialize_field("shared_links_viewed_by_not_logged_in", &self.shared_links_viewed_by_not_logged_in)?;
5030        s.serialize_field("shared_links_viewed_total", &self.shared_links_viewed_total)?;
5031        Ok(())
5032    }
5033}
5034
5035impl<'de> ::serde::de::Deserialize<'de> for GetActivityReport {
5036    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5037        // struct deserializer
5038        use serde::de::{MapAccess, Visitor};
5039        struct StructVisitor;
5040        impl<'de> Visitor<'de> for StructVisitor {
5041            type Value = GetActivityReport;
5042            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5043                f.write_str("a GetActivityReport struct")
5044            }
5045            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5046                GetActivityReport::internal_deserialize(map)
5047            }
5048        }
5049        deserializer.deserialize_struct("GetActivityReport", GET_ACTIVITY_REPORT_FIELDS, StructVisitor)
5050    }
5051}
5052
5053impl ::serde::ser::Serialize for GetActivityReport {
5054    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5055        // struct serializer
5056        use serde::ser::SerializeStruct;
5057        let mut s = serializer.serialize_struct("GetActivityReport", 15)?;
5058        self.internal_serialize::<S>(&mut s)?;
5059        s.end()
5060    }
5061}
5062
5063// struct extends BaseDfbReport
5064impl From<GetActivityReport> for BaseDfbReport {
5065    fn from(subtype: GetActivityReport) -> Self {
5066        Self {
5067            start_date: subtype.start_date,
5068        }
5069    }
5070}
5071/// Devices Report Result. Contains subsections for different time ranges of activity. Each of the
5072/// items in each subsection of the storage report is an array of values, one value per day. If
5073/// there is no data for a day, then the value will be None.
5074#[derive(Debug, Clone, PartialEq, Eq)]
5075#[non_exhaustive] // structs may have more fields added in the future.
5076pub struct GetDevicesReport {
5077    /// First date present in the results as 'YYYY-MM-DD' or None.
5078    pub start_date: String,
5079    /// Report of the number of devices active in the last day.
5080    pub active_1_day: DevicesActive,
5081    /// Report of the number of devices active in the last 7 days.
5082    pub active_7_day: DevicesActive,
5083    /// Report of the number of devices active in the last 28 days.
5084    pub active_28_day: DevicesActive,
5085}
5086
5087impl GetDevicesReport {
5088    pub fn new(
5089        start_date: String,
5090        active_1_day: DevicesActive,
5091        active_7_day: DevicesActive,
5092        active_28_day: DevicesActive,
5093    ) -> Self {
5094        GetDevicesReport {
5095            start_date,
5096            active_1_day,
5097            active_7_day,
5098            active_28_day,
5099        }
5100    }
5101}
5102
5103const GET_DEVICES_REPORT_FIELDS: &[&str] = &["start_date",
5104                                             "active_1_day",
5105                                             "active_7_day",
5106                                             "active_28_day"];
5107impl GetDevicesReport {
5108    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5109        map: V,
5110    ) -> Result<GetDevicesReport, V::Error> {
5111        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5112    }
5113
5114    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5115        mut map: V,
5116        optional: bool,
5117    ) -> Result<Option<GetDevicesReport>, V::Error> {
5118        let mut field_start_date = None;
5119        let mut field_active_1_day = None;
5120        let mut field_active_7_day = None;
5121        let mut field_active_28_day = None;
5122        let mut nothing = true;
5123        while let Some(key) = map.next_key::<&str>()? {
5124            nothing = false;
5125            match key {
5126                "start_date" => {
5127                    if field_start_date.is_some() {
5128                        return Err(::serde::de::Error::duplicate_field("start_date"));
5129                    }
5130                    field_start_date = Some(map.next_value()?);
5131                }
5132                "active_1_day" => {
5133                    if field_active_1_day.is_some() {
5134                        return Err(::serde::de::Error::duplicate_field("active_1_day"));
5135                    }
5136                    field_active_1_day = Some(map.next_value()?);
5137                }
5138                "active_7_day" => {
5139                    if field_active_7_day.is_some() {
5140                        return Err(::serde::de::Error::duplicate_field("active_7_day"));
5141                    }
5142                    field_active_7_day = Some(map.next_value()?);
5143                }
5144                "active_28_day" => {
5145                    if field_active_28_day.is_some() {
5146                        return Err(::serde::de::Error::duplicate_field("active_28_day"));
5147                    }
5148                    field_active_28_day = Some(map.next_value()?);
5149                }
5150                _ => {
5151                    // unknown field allowed and ignored
5152                    map.next_value::<::serde_json::Value>()?;
5153                }
5154            }
5155        }
5156        if optional && nothing {
5157            return Ok(None);
5158        }
5159        let result = GetDevicesReport {
5160            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
5161            active_1_day: field_active_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_1_day"))?,
5162            active_7_day: field_active_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_7_day"))?,
5163            active_28_day: field_active_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_28_day"))?,
5164        };
5165        Ok(Some(result))
5166    }
5167
5168    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5169        &self,
5170        s: &mut S::SerializeStruct,
5171    ) -> Result<(), S::Error> {
5172        use serde::ser::SerializeStruct;
5173        s.serialize_field("start_date", &self.start_date)?;
5174        s.serialize_field("active_1_day", &self.active_1_day)?;
5175        s.serialize_field("active_7_day", &self.active_7_day)?;
5176        s.serialize_field("active_28_day", &self.active_28_day)?;
5177        Ok(())
5178    }
5179}
5180
5181impl<'de> ::serde::de::Deserialize<'de> for GetDevicesReport {
5182    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5183        // struct deserializer
5184        use serde::de::{MapAccess, Visitor};
5185        struct StructVisitor;
5186        impl<'de> Visitor<'de> for StructVisitor {
5187            type Value = GetDevicesReport;
5188            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5189                f.write_str("a GetDevicesReport struct")
5190            }
5191            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5192                GetDevicesReport::internal_deserialize(map)
5193            }
5194        }
5195        deserializer.deserialize_struct("GetDevicesReport", GET_DEVICES_REPORT_FIELDS, StructVisitor)
5196    }
5197}
5198
5199impl ::serde::ser::Serialize for GetDevicesReport {
5200    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5201        // struct serializer
5202        use serde::ser::SerializeStruct;
5203        let mut s = serializer.serialize_struct("GetDevicesReport", 4)?;
5204        self.internal_serialize::<S>(&mut s)?;
5205        s.end()
5206    }
5207}
5208
5209// struct extends BaseDfbReport
5210impl From<GetDevicesReport> for BaseDfbReport {
5211    fn from(subtype: GetDevicesReport) -> Self {
5212        Self {
5213            start_date: subtype.start_date,
5214        }
5215    }
5216}
5217/// Membership Report Result. Each of the items in the storage report is an array of values, one
5218/// value per day. If there is no data for a day, then the value will be None.
5219#[derive(Debug, Clone, PartialEq, Eq)]
5220#[non_exhaustive] // structs may have more fields added in the future.
5221pub struct GetMembershipReport {
5222    /// First date present in the results as 'YYYY-MM-DD' or None.
5223    pub start_date: String,
5224    /// Team size, for each day.
5225    pub team_size: NumberPerDay,
5226    /// The number of pending invites to the team, for each day.
5227    pub pending_invites: NumberPerDay,
5228    /// The number of members that joined the team, for each day.
5229    pub members_joined: NumberPerDay,
5230    /// The number of suspended team members, for each day.
5231    pub suspended_members: NumberPerDay,
5232    /// The total number of licenses the team has, for each day.
5233    pub licenses: NumberPerDay,
5234}
5235
5236impl GetMembershipReport {
5237    pub fn new(
5238        start_date: String,
5239        team_size: NumberPerDay,
5240        pending_invites: NumberPerDay,
5241        members_joined: NumberPerDay,
5242        suspended_members: NumberPerDay,
5243        licenses: NumberPerDay,
5244    ) -> Self {
5245        GetMembershipReport {
5246            start_date,
5247            team_size,
5248            pending_invites,
5249            members_joined,
5250            suspended_members,
5251            licenses,
5252        }
5253    }
5254}
5255
5256const GET_MEMBERSHIP_REPORT_FIELDS: &[&str] = &["start_date",
5257                                                "team_size",
5258                                                "pending_invites",
5259                                                "members_joined",
5260                                                "suspended_members",
5261                                                "licenses"];
5262impl GetMembershipReport {
5263    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5264        map: V,
5265    ) -> Result<GetMembershipReport, V::Error> {
5266        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5267    }
5268
5269    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5270        mut map: V,
5271        optional: bool,
5272    ) -> Result<Option<GetMembershipReport>, V::Error> {
5273        let mut field_start_date = None;
5274        let mut field_team_size = None;
5275        let mut field_pending_invites = None;
5276        let mut field_members_joined = None;
5277        let mut field_suspended_members = None;
5278        let mut field_licenses = None;
5279        let mut nothing = true;
5280        while let Some(key) = map.next_key::<&str>()? {
5281            nothing = false;
5282            match key {
5283                "start_date" => {
5284                    if field_start_date.is_some() {
5285                        return Err(::serde::de::Error::duplicate_field("start_date"));
5286                    }
5287                    field_start_date = Some(map.next_value()?);
5288                }
5289                "team_size" => {
5290                    if field_team_size.is_some() {
5291                        return Err(::serde::de::Error::duplicate_field("team_size"));
5292                    }
5293                    field_team_size = Some(map.next_value()?);
5294                }
5295                "pending_invites" => {
5296                    if field_pending_invites.is_some() {
5297                        return Err(::serde::de::Error::duplicate_field("pending_invites"));
5298                    }
5299                    field_pending_invites = Some(map.next_value()?);
5300                }
5301                "members_joined" => {
5302                    if field_members_joined.is_some() {
5303                        return Err(::serde::de::Error::duplicate_field("members_joined"));
5304                    }
5305                    field_members_joined = Some(map.next_value()?);
5306                }
5307                "suspended_members" => {
5308                    if field_suspended_members.is_some() {
5309                        return Err(::serde::de::Error::duplicate_field("suspended_members"));
5310                    }
5311                    field_suspended_members = Some(map.next_value()?);
5312                }
5313                "licenses" => {
5314                    if field_licenses.is_some() {
5315                        return Err(::serde::de::Error::duplicate_field("licenses"));
5316                    }
5317                    field_licenses = Some(map.next_value()?);
5318                }
5319                _ => {
5320                    // unknown field allowed and ignored
5321                    map.next_value::<::serde_json::Value>()?;
5322                }
5323            }
5324        }
5325        if optional && nothing {
5326            return Ok(None);
5327        }
5328        let result = GetMembershipReport {
5329            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
5330            team_size: field_team_size.ok_or_else(|| ::serde::de::Error::missing_field("team_size"))?,
5331            pending_invites: field_pending_invites.ok_or_else(|| ::serde::de::Error::missing_field("pending_invites"))?,
5332            members_joined: field_members_joined.ok_or_else(|| ::serde::de::Error::missing_field("members_joined"))?,
5333            suspended_members: field_suspended_members.ok_or_else(|| ::serde::de::Error::missing_field("suspended_members"))?,
5334            licenses: field_licenses.ok_or_else(|| ::serde::de::Error::missing_field("licenses"))?,
5335        };
5336        Ok(Some(result))
5337    }
5338
5339    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5340        &self,
5341        s: &mut S::SerializeStruct,
5342    ) -> Result<(), S::Error> {
5343        use serde::ser::SerializeStruct;
5344        s.serialize_field("start_date", &self.start_date)?;
5345        s.serialize_field("team_size", &self.team_size)?;
5346        s.serialize_field("pending_invites", &self.pending_invites)?;
5347        s.serialize_field("members_joined", &self.members_joined)?;
5348        s.serialize_field("suspended_members", &self.suspended_members)?;
5349        s.serialize_field("licenses", &self.licenses)?;
5350        Ok(())
5351    }
5352}
5353
5354impl<'de> ::serde::de::Deserialize<'de> for GetMembershipReport {
5355    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5356        // struct deserializer
5357        use serde::de::{MapAccess, Visitor};
5358        struct StructVisitor;
5359        impl<'de> Visitor<'de> for StructVisitor {
5360            type Value = GetMembershipReport;
5361            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5362                f.write_str("a GetMembershipReport struct")
5363            }
5364            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5365                GetMembershipReport::internal_deserialize(map)
5366            }
5367        }
5368        deserializer.deserialize_struct("GetMembershipReport", GET_MEMBERSHIP_REPORT_FIELDS, StructVisitor)
5369    }
5370}
5371
5372impl ::serde::ser::Serialize for GetMembershipReport {
5373    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5374        // struct serializer
5375        use serde::ser::SerializeStruct;
5376        let mut s = serializer.serialize_struct("GetMembershipReport", 6)?;
5377        self.internal_serialize::<S>(&mut s)?;
5378        s.end()
5379    }
5380}
5381
5382// struct extends BaseDfbReport
5383impl From<GetMembershipReport> for BaseDfbReport {
5384    fn from(subtype: GetMembershipReport) -> Self {
5385        Self {
5386            start_date: subtype.start_date,
5387        }
5388    }
5389}
5390/// Storage Report Result. Each of the items in the storage report is an array of values, one value
5391/// per day. If there is no data for a day, then the value will be None.
5392#[derive(Debug, Clone, PartialEq, Eq)]
5393#[non_exhaustive] // structs may have more fields added in the future.
5394pub struct GetStorageReport {
5395    /// First date present in the results as 'YYYY-MM-DD' or None.
5396    pub start_date: String,
5397    /// Sum of the shared, unshared, and datastore usages, for each day.
5398    pub total_usage: NumberPerDay,
5399    /// Array of the combined size (bytes) of team members' shared folders, for each day.
5400    pub shared_usage: NumberPerDay,
5401    /// Array of the combined size (bytes) of team members' root namespaces, for each day.
5402    pub unshared_usage: NumberPerDay,
5403    /// Array of the number of shared folders owned by team members, for each day.
5404    pub shared_folders: NumberPerDay,
5405    /// Array of storage summaries of team members' account sizes. Each storage summary is an array
5406    /// of key, value pairs, where each pair describes a storage bucket. The key indicates the upper
5407    /// bound of the bucket and the value is the number of users in that bucket. There is one such
5408    /// summary per day. If there is no data for a day, the storage summary will be empty.
5409    pub member_storage_map: Vec<Vec<StorageBucket>>,
5410}
5411
5412impl GetStorageReport {
5413    pub fn new(
5414        start_date: String,
5415        total_usage: NumberPerDay,
5416        shared_usage: NumberPerDay,
5417        unshared_usage: NumberPerDay,
5418        shared_folders: NumberPerDay,
5419        member_storage_map: Vec<Vec<StorageBucket>>,
5420    ) -> Self {
5421        GetStorageReport {
5422            start_date,
5423            total_usage,
5424            shared_usage,
5425            unshared_usage,
5426            shared_folders,
5427            member_storage_map,
5428        }
5429    }
5430}
5431
5432const GET_STORAGE_REPORT_FIELDS: &[&str] = &["start_date",
5433                                             "total_usage",
5434                                             "shared_usage",
5435                                             "unshared_usage",
5436                                             "shared_folders",
5437                                             "member_storage_map"];
5438impl GetStorageReport {
5439    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5440        map: V,
5441    ) -> Result<GetStorageReport, V::Error> {
5442        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5443    }
5444
5445    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5446        mut map: V,
5447        optional: bool,
5448    ) -> Result<Option<GetStorageReport>, V::Error> {
5449        let mut field_start_date = None;
5450        let mut field_total_usage = None;
5451        let mut field_shared_usage = None;
5452        let mut field_unshared_usage = None;
5453        let mut field_shared_folders = None;
5454        let mut field_member_storage_map = None;
5455        let mut nothing = true;
5456        while let Some(key) = map.next_key::<&str>()? {
5457            nothing = false;
5458            match key {
5459                "start_date" => {
5460                    if field_start_date.is_some() {
5461                        return Err(::serde::de::Error::duplicate_field("start_date"));
5462                    }
5463                    field_start_date = Some(map.next_value()?);
5464                }
5465                "total_usage" => {
5466                    if field_total_usage.is_some() {
5467                        return Err(::serde::de::Error::duplicate_field("total_usage"));
5468                    }
5469                    field_total_usage = Some(map.next_value()?);
5470                }
5471                "shared_usage" => {
5472                    if field_shared_usage.is_some() {
5473                        return Err(::serde::de::Error::duplicate_field("shared_usage"));
5474                    }
5475                    field_shared_usage = Some(map.next_value()?);
5476                }
5477                "unshared_usage" => {
5478                    if field_unshared_usage.is_some() {
5479                        return Err(::serde::de::Error::duplicate_field("unshared_usage"));
5480                    }
5481                    field_unshared_usage = Some(map.next_value()?);
5482                }
5483                "shared_folders" => {
5484                    if field_shared_folders.is_some() {
5485                        return Err(::serde::de::Error::duplicate_field("shared_folders"));
5486                    }
5487                    field_shared_folders = Some(map.next_value()?);
5488                }
5489                "member_storage_map" => {
5490                    if field_member_storage_map.is_some() {
5491                        return Err(::serde::de::Error::duplicate_field("member_storage_map"));
5492                    }
5493                    field_member_storage_map = Some(map.next_value()?);
5494                }
5495                _ => {
5496                    // unknown field allowed and ignored
5497                    map.next_value::<::serde_json::Value>()?;
5498                }
5499            }
5500        }
5501        if optional && nothing {
5502            return Ok(None);
5503        }
5504        let result = GetStorageReport {
5505            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
5506            total_usage: field_total_usage.ok_or_else(|| ::serde::de::Error::missing_field("total_usage"))?,
5507            shared_usage: field_shared_usage.ok_or_else(|| ::serde::de::Error::missing_field("shared_usage"))?,
5508            unshared_usage: field_unshared_usage.ok_or_else(|| ::serde::de::Error::missing_field("unshared_usage"))?,
5509            shared_folders: field_shared_folders.ok_or_else(|| ::serde::de::Error::missing_field("shared_folders"))?,
5510            member_storage_map: field_member_storage_map.ok_or_else(|| ::serde::de::Error::missing_field("member_storage_map"))?,
5511        };
5512        Ok(Some(result))
5513    }
5514
5515    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5516        &self,
5517        s: &mut S::SerializeStruct,
5518    ) -> Result<(), S::Error> {
5519        use serde::ser::SerializeStruct;
5520        s.serialize_field("start_date", &self.start_date)?;
5521        s.serialize_field("total_usage", &self.total_usage)?;
5522        s.serialize_field("shared_usage", &self.shared_usage)?;
5523        s.serialize_field("unshared_usage", &self.unshared_usage)?;
5524        s.serialize_field("shared_folders", &self.shared_folders)?;
5525        s.serialize_field("member_storage_map", &self.member_storage_map)?;
5526        Ok(())
5527    }
5528}
5529
5530impl<'de> ::serde::de::Deserialize<'de> for GetStorageReport {
5531    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5532        // struct deserializer
5533        use serde::de::{MapAccess, Visitor};
5534        struct StructVisitor;
5535        impl<'de> Visitor<'de> for StructVisitor {
5536            type Value = GetStorageReport;
5537            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5538                f.write_str("a GetStorageReport struct")
5539            }
5540            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5541                GetStorageReport::internal_deserialize(map)
5542            }
5543        }
5544        deserializer.deserialize_struct("GetStorageReport", GET_STORAGE_REPORT_FIELDS, StructVisitor)
5545    }
5546}
5547
5548impl ::serde::ser::Serialize for GetStorageReport {
5549    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5550        // struct serializer
5551        use serde::ser::SerializeStruct;
5552        let mut s = serializer.serialize_struct("GetStorageReport", 6)?;
5553        self.internal_serialize::<S>(&mut s)?;
5554        s.end()
5555    }
5556}
5557
5558// struct extends BaseDfbReport
5559impl From<GetStorageReport> for BaseDfbReport {
5560    fn from(subtype: GetStorageReport) -> Self {
5561        Self {
5562            start_date: subtype.start_date,
5563        }
5564    }
5565}
5566/// Role of a user in group.
5567#[derive(Debug, Clone, PartialEq, Eq)]
5568pub enum GroupAccessType {
5569    /// User is a member of the group, but has no special permissions.
5570    Member,
5571    /// User can rename the group, and add/remove members.
5572    Owner,
5573}
5574
5575impl<'de> ::serde::de::Deserialize<'de> for GroupAccessType {
5576    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5577        // union deserializer
5578        use serde::de::{self, MapAccess, Visitor};
5579        struct EnumVisitor;
5580        impl<'de> Visitor<'de> for EnumVisitor {
5581            type Value = GroupAccessType;
5582            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5583                f.write_str("a GroupAccessType structure")
5584            }
5585            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5586                let tag: &str = match map.next_key()? {
5587                    Some(".tag") => map.next_value()?,
5588                    _ => return Err(de::Error::missing_field(".tag"))
5589                };
5590                let value = match tag {
5591                    "member" => GroupAccessType::Member,
5592                    "owner" => GroupAccessType::Owner,
5593                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
5594                };
5595                crate::eat_json_fields(&mut map)?;
5596                Ok(value)
5597            }
5598        }
5599        const VARIANTS: &[&str] = &["member",
5600                                    "owner"];
5601        deserializer.deserialize_struct("GroupAccessType", VARIANTS, EnumVisitor)
5602    }
5603}
5604
5605impl ::serde::ser::Serialize for GroupAccessType {
5606    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5607        // union serializer
5608        use serde::ser::SerializeStruct;
5609        match self {
5610            GroupAccessType::Member => {
5611                // unit
5612                let mut s = serializer.serialize_struct("GroupAccessType", 1)?;
5613                s.serialize_field(".tag", "member")?;
5614                s.end()
5615            }
5616            GroupAccessType::Owner => {
5617                // unit
5618                let mut s = serializer.serialize_struct("GroupAccessType", 1)?;
5619                s.serialize_field(".tag", "owner")?;
5620                s.end()
5621            }
5622        }
5623    }
5624}
5625
5626#[derive(Debug, Clone, PartialEq, Eq)]
5627#[non_exhaustive] // structs may have more fields added in the future.
5628pub struct GroupCreateArg {
5629    /// Group name.
5630    pub group_name: String,
5631    /// Automatically add the creator of the group.
5632    pub add_creator_as_owner: bool,
5633    /// The creator of a team can associate an arbitrary external ID to the group.
5634    pub group_external_id: Option<crate::types::team_common::GroupExternalId>,
5635    /// Whether the team can be managed by selected users, or only by team admins.
5636    pub group_management_type: Option<crate::types::team_common::GroupManagementType>,
5637}
5638
5639impl GroupCreateArg {
5640    pub fn new(group_name: String) -> Self {
5641        GroupCreateArg {
5642            group_name,
5643            add_creator_as_owner: false,
5644            group_external_id: None,
5645            group_management_type: None,
5646        }
5647    }
5648
5649    pub fn with_add_creator_as_owner(mut self, value: bool) -> Self {
5650        self.add_creator_as_owner = value;
5651        self
5652    }
5653
5654    pub fn with_group_external_id(
5655        mut self,
5656        value: crate::types::team_common::GroupExternalId,
5657    ) -> Self {
5658        self.group_external_id = Some(value);
5659        self
5660    }
5661
5662    pub fn with_group_management_type(
5663        mut self,
5664        value: crate::types::team_common::GroupManagementType,
5665    ) -> Self {
5666        self.group_management_type = Some(value);
5667        self
5668    }
5669}
5670
5671const GROUP_CREATE_ARG_FIELDS: &[&str] = &["group_name",
5672                                           "add_creator_as_owner",
5673                                           "group_external_id",
5674                                           "group_management_type"];
5675impl GroupCreateArg {
5676    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5677        map: V,
5678    ) -> Result<GroupCreateArg, V::Error> {
5679        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5680    }
5681
5682    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5683        mut map: V,
5684        optional: bool,
5685    ) -> Result<Option<GroupCreateArg>, V::Error> {
5686        let mut field_group_name = None;
5687        let mut field_add_creator_as_owner = None;
5688        let mut field_group_external_id = None;
5689        let mut field_group_management_type = None;
5690        let mut nothing = true;
5691        while let Some(key) = map.next_key::<&str>()? {
5692            nothing = false;
5693            match key {
5694                "group_name" => {
5695                    if field_group_name.is_some() {
5696                        return Err(::serde::de::Error::duplicate_field("group_name"));
5697                    }
5698                    field_group_name = Some(map.next_value()?);
5699                }
5700                "add_creator_as_owner" => {
5701                    if field_add_creator_as_owner.is_some() {
5702                        return Err(::serde::de::Error::duplicate_field("add_creator_as_owner"));
5703                    }
5704                    field_add_creator_as_owner = Some(map.next_value()?);
5705                }
5706                "group_external_id" => {
5707                    if field_group_external_id.is_some() {
5708                        return Err(::serde::de::Error::duplicate_field("group_external_id"));
5709                    }
5710                    field_group_external_id = Some(map.next_value()?);
5711                }
5712                "group_management_type" => {
5713                    if field_group_management_type.is_some() {
5714                        return Err(::serde::de::Error::duplicate_field("group_management_type"));
5715                    }
5716                    field_group_management_type = Some(map.next_value()?);
5717                }
5718                _ => {
5719                    // unknown field allowed and ignored
5720                    map.next_value::<::serde_json::Value>()?;
5721                }
5722            }
5723        }
5724        if optional && nothing {
5725            return Ok(None);
5726        }
5727        let result = GroupCreateArg {
5728            group_name: field_group_name.ok_or_else(|| ::serde::de::Error::missing_field("group_name"))?,
5729            add_creator_as_owner: field_add_creator_as_owner.unwrap_or(false),
5730            group_external_id: field_group_external_id.and_then(Option::flatten),
5731            group_management_type: field_group_management_type.and_then(Option::flatten),
5732        };
5733        Ok(Some(result))
5734    }
5735
5736    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5737        &self,
5738        s: &mut S::SerializeStruct,
5739    ) -> Result<(), S::Error> {
5740        use serde::ser::SerializeStruct;
5741        s.serialize_field("group_name", &self.group_name)?;
5742        if self.add_creator_as_owner {
5743            s.serialize_field("add_creator_as_owner", &self.add_creator_as_owner)?;
5744        }
5745        if let Some(val) = &self.group_external_id {
5746            s.serialize_field("group_external_id", val)?;
5747        }
5748        if let Some(val) = &self.group_management_type {
5749            s.serialize_field("group_management_type", val)?;
5750        }
5751        Ok(())
5752    }
5753}
5754
5755impl<'de> ::serde::de::Deserialize<'de> for GroupCreateArg {
5756    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5757        // struct deserializer
5758        use serde::de::{MapAccess, Visitor};
5759        struct StructVisitor;
5760        impl<'de> Visitor<'de> for StructVisitor {
5761            type Value = GroupCreateArg;
5762            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5763                f.write_str("a GroupCreateArg struct")
5764            }
5765            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5766                GroupCreateArg::internal_deserialize(map)
5767            }
5768        }
5769        deserializer.deserialize_struct("GroupCreateArg", GROUP_CREATE_ARG_FIELDS, StructVisitor)
5770    }
5771}
5772
5773impl ::serde::ser::Serialize for GroupCreateArg {
5774    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5775        // struct serializer
5776        use serde::ser::SerializeStruct;
5777        let mut s = serializer.serialize_struct("GroupCreateArg", 4)?;
5778        self.internal_serialize::<S>(&mut s)?;
5779        s.end()
5780    }
5781}
5782
5783#[derive(Debug, Clone, PartialEq, Eq)]
5784#[non_exhaustive] // variants may be added in the future
5785pub enum GroupCreateError {
5786    /// The requested group name is already being used by another group.
5787    GroupNameAlreadyUsed,
5788    /// Group name is empty or has invalid characters.
5789    GroupNameInvalid,
5790    /// The requested external ID is already being used by another group.
5791    ExternalIdAlreadyInUse,
5792    /// System-managed group cannot be manually created.
5793    SystemManagedGroupDisallowed,
5794    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5795    /// typically indicates that this SDK version is out of date.
5796    Other,
5797}
5798
5799impl<'de> ::serde::de::Deserialize<'de> for GroupCreateError {
5800    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5801        // union deserializer
5802        use serde::de::{self, MapAccess, Visitor};
5803        struct EnumVisitor;
5804        impl<'de> Visitor<'de> for EnumVisitor {
5805            type Value = GroupCreateError;
5806            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5807                f.write_str("a GroupCreateError structure")
5808            }
5809            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5810                let tag: &str = match map.next_key()? {
5811                    Some(".tag") => map.next_value()?,
5812                    _ => return Err(de::Error::missing_field(".tag"))
5813                };
5814                let value = match tag {
5815                    "group_name_already_used" => GroupCreateError::GroupNameAlreadyUsed,
5816                    "group_name_invalid" => GroupCreateError::GroupNameInvalid,
5817                    "external_id_already_in_use" => GroupCreateError::ExternalIdAlreadyInUse,
5818                    "system_managed_group_disallowed" => GroupCreateError::SystemManagedGroupDisallowed,
5819                    _ => GroupCreateError::Other,
5820                };
5821                crate::eat_json_fields(&mut map)?;
5822                Ok(value)
5823            }
5824        }
5825        const VARIANTS: &[&str] = &["group_name_already_used",
5826                                    "group_name_invalid",
5827                                    "external_id_already_in_use",
5828                                    "system_managed_group_disallowed",
5829                                    "other"];
5830        deserializer.deserialize_struct("GroupCreateError", VARIANTS, EnumVisitor)
5831    }
5832}
5833
5834impl ::serde::ser::Serialize for GroupCreateError {
5835    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5836        // union serializer
5837        use serde::ser::SerializeStruct;
5838        match self {
5839            GroupCreateError::GroupNameAlreadyUsed => {
5840                // unit
5841                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
5842                s.serialize_field(".tag", "group_name_already_used")?;
5843                s.end()
5844            }
5845            GroupCreateError::GroupNameInvalid => {
5846                // unit
5847                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
5848                s.serialize_field(".tag", "group_name_invalid")?;
5849                s.end()
5850            }
5851            GroupCreateError::ExternalIdAlreadyInUse => {
5852                // unit
5853                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
5854                s.serialize_field(".tag", "external_id_already_in_use")?;
5855                s.end()
5856            }
5857            GroupCreateError::SystemManagedGroupDisallowed => {
5858                // unit
5859                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
5860                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5861                s.end()
5862            }
5863            GroupCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5864        }
5865    }
5866}
5867
5868impl ::std::error::Error for GroupCreateError {
5869}
5870
5871impl ::std::fmt::Display for GroupCreateError {
5872    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5873        match self {
5874            GroupCreateError::GroupNameAlreadyUsed => f.write_str("The requested group name is already being used by another group."),
5875            GroupCreateError::GroupNameInvalid => f.write_str("Group name is empty or has invalid characters."),
5876            GroupCreateError::ExternalIdAlreadyInUse => f.write_str("The requested external ID is already being used by another group."),
5877            GroupCreateError::SystemManagedGroupDisallowed => f.write_str("System-managed group cannot be manually created."),
5878            _ => write!(f, "{:?}", *self),
5879        }
5880    }
5881}
5882
5883#[derive(Debug, Clone, PartialEq, Eq)]
5884#[non_exhaustive] // variants may be added in the future
5885pub enum GroupDeleteError {
5886    /// No matching group found. No groups match the specified group ID.
5887    GroupNotFound,
5888    /// This operation is not supported on system-managed groups.
5889    SystemManagedGroupDisallowed,
5890    /// This group has already been deleted.
5891    GroupAlreadyDeleted,
5892    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5893    /// typically indicates that this SDK version is out of date.
5894    Other,
5895}
5896
5897impl<'de> ::serde::de::Deserialize<'de> for GroupDeleteError {
5898    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5899        // union deserializer
5900        use serde::de::{self, MapAccess, Visitor};
5901        struct EnumVisitor;
5902        impl<'de> Visitor<'de> for EnumVisitor {
5903            type Value = GroupDeleteError;
5904            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5905                f.write_str("a GroupDeleteError structure")
5906            }
5907            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5908                let tag: &str = match map.next_key()? {
5909                    Some(".tag") => map.next_value()?,
5910                    _ => return Err(de::Error::missing_field(".tag"))
5911                };
5912                let value = match tag {
5913                    "group_not_found" => GroupDeleteError::GroupNotFound,
5914                    "system_managed_group_disallowed" => GroupDeleteError::SystemManagedGroupDisallowed,
5915                    "group_already_deleted" => GroupDeleteError::GroupAlreadyDeleted,
5916                    _ => GroupDeleteError::Other,
5917                };
5918                crate::eat_json_fields(&mut map)?;
5919                Ok(value)
5920            }
5921        }
5922        const VARIANTS: &[&str] = &["group_not_found",
5923                                    "other",
5924                                    "system_managed_group_disallowed",
5925                                    "group_already_deleted"];
5926        deserializer.deserialize_struct("GroupDeleteError", VARIANTS, EnumVisitor)
5927    }
5928}
5929
5930impl ::serde::ser::Serialize for GroupDeleteError {
5931    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5932        // union serializer
5933        use serde::ser::SerializeStruct;
5934        match self {
5935            GroupDeleteError::GroupNotFound => {
5936                // unit
5937                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5938                s.serialize_field(".tag", "group_not_found")?;
5939                s.end()
5940            }
5941            GroupDeleteError::SystemManagedGroupDisallowed => {
5942                // unit
5943                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5944                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5945                s.end()
5946            }
5947            GroupDeleteError::GroupAlreadyDeleted => {
5948                // unit
5949                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5950                s.serialize_field(".tag", "group_already_deleted")?;
5951                s.end()
5952            }
5953            GroupDeleteError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5954        }
5955    }
5956}
5957
5958impl ::std::error::Error for GroupDeleteError {
5959}
5960
5961impl ::std::fmt::Display for GroupDeleteError {
5962    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5963        match self {
5964            GroupDeleteError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5965            GroupDeleteError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5966            GroupDeleteError::GroupAlreadyDeleted => f.write_str("This group has already been deleted."),
5967            _ => write!(f, "{:?}", *self),
5968        }
5969    }
5970}
5971
5972// union extends GroupSelectorWithTeamGroupError
5973impl From<GroupSelectorWithTeamGroupError> for GroupDeleteError {
5974    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
5975        match parent {
5976            GroupSelectorWithTeamGroupError::GroupNotFound => GroupDeleteError::GroupNotFound,
5977            GroupSelectorWithTeamGroupError::Other => GroupDeleteError::Other,
5978            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupDeleteError::SystemManagedGroupDisallowed,
5979        }
5980    }
5981}
5982/// Full description of a group.
5983#[derive(Debug, Clone, PartialEq, Eq)]
5984#[non_exhaustive] // structs may have more fields added in the future.
5985pub struct GroupFullInfo {
5986    pub group_name: String,
5987    pub group_id: crate::types::team_common::GroupId,
5988    /// Who is allowed to manage the group.
5989    pub group_management_type: crate::types::team_common::GroupManagementType,
5990    /// The group creation time as a UTC timestamp in milliseconds since the Unix epoch.
5991    pub created: u64,
5992    /// External ID of group. This is an arbitrary ID that an admin can attach to a group.
5993    pub group_external_id: Option<crate::types::team_common::GroupExternalId>,
5994    /// The number of members in the group.
5995    pub member_count: Option<u32>,
5996    /// List of group members.
5997    pub members: Option<Vec<GroupMemberInfo>>,
5998}
5999
6000impl GroupFullInfo {
6001    pub fn new(
6002        group_name: String,
6003        group_id: crate::types::team_common::GroupId,
6004        group_management_type: crate::types::team_common::GroupManagementType,
6005        created: u64,
6006    ) -> Self {
6007        GroupFullInfo {
6008            group_name,
6009            group_id,
6010            group_management_type,
6011            created,
6012            group_external_id: None,
6013            member_count: None,
6014            members: None,
6015        }
6016    }
6017
6018    pub fn with_group_external_id(
6019        mut self,
6020        value: crate::types::team_common::GroupExternalId,
6021    ) -> Self {
6022        self.group_external_id = Some(value);
6023        self
6024    }
6025
6026    pub fn with_member_count(mut self, value: u32) -> Self {
6027        self.member_count = Some(value);
6028        self
6029    }
6030
6031    pub fn with_members(mut self, value: Vec<GroupMemberInfo>) -> Self {
6032        self.members = Some(value);
6033        self
6034    }
6035}
6036
6037const GROUP_FULL_INFO_FIELDS: &[&str] = &["group_name",
6038                                          "group_id",
6039                                          "group_management_type",
6040                                          "created",
6041                                          "group_external_id",
6042                                          "member_count",
6043                                          "members"];
6044impl GroupFullInfo {
6045    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6046        map: V,
6047    ) -> Result<GroupFullInfo, V::Error> {
6048        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6049    }
6050
6051    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6052        mut map: V,
6053        optional: bool,
6054    ) -> Result<Option<GroupFullInfo>, V::Error> {
6055        let mut field_group_name = None;
6056        let mut field_group_id = None;
6057        let mut field_group_management_type = None;
6058        let mut field_created = None;
6059        let mut field_group_external_id = None;
6060        let mut field_member_count = None;
6061        let mut field_members = None;
6062        let mut nothing = true;
6063        while let Some(key) = map.next_key::<&str>()? {
6064            nothing = false;
6065            match key {
6066                "group_name" => {
6067                    if field_group_name.is_some() {
6068                        return Err(::serde::de::Error::duplicate_field("group_name"));
6069                    }
6070                    field_group_name = Some(map.next_value()?);
6071                }
6072                "group_id" => {
6073                    if field_group_id.is_some() {
6074                        return Err(::serde::de::Error::duplicate_field("group_id"));
6075                    }
6076                    field_group_id = Some(map.next_value()?);
6077                }
6078                "group_management_type" => {
6079                    if field_group_management_type.is_some() {
6080                        return Err(::serde::de::Error::duplicate_field("group_management_type"));
6081                    }
6082                    field_group_management_type = Some(map.next_value()?);
6083                }
6084                "created" => {
6085                    if field_created.is_some() {
6086                        return Err(::serde::de::Error::duplicate_field("created"));
6087                    }
6088                    field_created = Some(map.next_value()?);
6089                }
6090                "group_external_id" => {
6091                    if field_group_external_id.is_some() {
6092                        return Err(::serde::de::Error::duplicate_field("group_external_id"));
6093                    }
6094                    field_group_external_id = Some(map.next_value()?);
6095                }
6096                "member_count" => {
6097                    if field_member_count.is_some() {
6098                        return Err(::serde::de::Error::duplicate_field("member_count"));
6099                    }
6100                    field_member_count = Some(map.next_value()?);
6101                }
6102                "members" => {
6103                    if field_members.is_some() {
6104                        return Err(::serde::de::Error::duplicate_field("members"));
6105                    }
6106                    field_members = Some(map.next_value()?);
6107                }
6108                _ => {
6109                    // unknown field allowed and ignored
6110                    map.next_value::<::serde_json::Value>()?;
6111                }
6112            }
6113        }
6114        if optional && nothing {
6115            return Ok(None);
6116        }
6117        let result = GroupFullInfo {
6118            group_name: field_group_name.ok_or_else(|| ::serde::de::Error::missing_field("group_name"))?,
6119            group_id: field_group_id.ok_or_else(|| ::serde::de::Error::missing_field("group_id"))?,
6120            group_management_type: field_group_management_type.ok_or_else(|| ::serde::de::Error::missing_field("group_management_type"))?,
6121            created: field_created.ok_or_else(|| ::serde::de::Error::missing_field("created"))?,
6122            group_external_id: field_group_external_id.and_then(Option::flatten),
6123            member_count: field_member_count.and_then(Option::flatten),
6124            members: field_members.and_then(Option::flatten),
6125        };
6126        Ok(Some(result))
6127    }
6128
6129    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6130        &self,
6131        s: &mut S::SerializeStruct,
6132    ) -> Result<(), S::Error> {
6133        use serde::ser::SerializeStruct;
6134        s.serialize_field("group_name", &self.group_name)?;
6135        s.serialize_field("group_id", &self.group_id)?;
6136        s.serialize_field("group_management_type", &self.group_management_type)?;
6137        s.serialize_field("created", &self.created)?;
6138        if let Some(val) = &self.group_external_id {
6139            s.serialize_field("group_external_id", val)?;
6140        }
6141        if let Some(val) = &self.member_count {
6142            s.serialize_field("member_count", val)?;
6143        }
6144        if let Some(val) = &self.members {
6145            s.serialize_field("members", val)?;
6146        }
6147        Ok(())
6148    }
6149}
6150
6151impl<'de> ::serde::de::Deserialize<'de> for GroupFullInfo {
6152    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6153        // struct deserializer
6154        use serde::de::{MapAccess, Visitor};
6155        struct StructVisitor;
6156        impl<'de> Visitor<'de> for StructVisitor {
6157            type Value = GroupFullInfo;
6158            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6159                f.write_str("a GroupFullInfo struct")
6160            }
6161            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6162                GroupFullInfo::internal_deserialize(map)
6163            }
6164        }
6165        deserializer.deserialize_struct("GroupFullInfo", GROUP_FULL_INFO_FIELDS, StructVisitor)
6166    }
6167}
6168
6169impl ::serde::ser::Serialize for GroupFullInfo {
6170    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6171        // struct serializer
6172        use serde::ser::SerializeStruct;
6173        let mut s = serializer.serialize_struct("GroupFullInfo", 7)?;
6174        self.internal_serialize::<S>(&mut s)?;
6175        s.end()
6176    }
6177}
6178
6179// struct extends crate::types::team_common::GroupSummary
6180impl From<GroupFullInfo> for crate::types::team_common::GroupSummary {
6181    fn from(subtype: GroupFullInfo) -> Self {
6182        Self {
6183            group_name: subtype.group_name,
6184            group_id: subtype.group_id,
6185            group_management_type: subtype.group_management_type,
6186            group_external_id: subtype.group_external_id,
6187            member_count: subtype.member_count,
6188        }
6189    }
6190}
6191/// Profile of group member, and role in group.
6192#[derive(Debug, Clone, PartialEq, Eq)]
6193#[non_exhaustive] // structs may have more fields added in the future.
6194pub struct GroupMemberInfo {
6195    /// Profile of group member.
6196    pub profile: MemberProfile,
6197    /// The role that the user has in the group.
6198    pub access_type: GroupAccessType,
6199}
6200
6201impl GroupMemberInfo {
6202    pub fn new(profile: MemberProfile, access_type: GroupAccessType) -> Self {
6203        GroupMemberInfo {
6204            profile,
6205            access_type,
6206        }
6207    }
6208}
6209
6210const GROUP_MEMBER_INFO_FIELDS: &[&str] = &["profile",
6211                                            "access_type"];
6212impl GroupMemberInfo {
6213    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6214        map: V,
6215    ) -> Result<GroupMemberInfo, V::Error> {
6216        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6217    }
6218
6219    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6220        mut map: V,
6221        optional: bool,
6222    ) -> Result<Option<GroupMemberInfo>, V::Error> {
6223        let mut field_profile = None;
6224        let mut field_access_type = None;
6225        let mut nothing = true;
6226        while let Some(key) = map.next_key::<&str>()? {
6227            nothing = false;
6228            match key {
6229                "profile" => {
6230                    if field_profile.is_some() {
6231                        return Err(::serde::de::Error::duplicate_field("profile"));
6232                    }
6233                    field_profile = Some(map.next_value()?);
6234                }
6235                "access_type" => {
6236                    if field_access_type.is_some() {
6237                        return Err(::serde::de::Error::duplicate_field("access_type"));
6238                    }
6239                    field_access_type = Some(map.next_value()?);
6240                }
6241                _ => {
6242                    // unknown field allowed and ignored
6243                    map.next_value::<::serde_json::Value>()?;
6244                }
6245            }
6246        }
6247        if optional && nothing {
6248            return Ok(None);
6249        }
6250        let result = GroupMemberInfo {
6251            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
6252            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
6253        };
6254        Ok(Some(result))
6255    }
6256
6257    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6258        &self,
6259        s: &mut S::SerializeStruct,
6260    ) -> Result<(), S::Error> {
6261        use serde::ser::SerializeStruct;
6262        s.serialize_field("profile", &self.profile)?;
6263        s.serialize_field("access_type", &self.access_type)?;
6264        Ok(())
6265    }
6266}
6267
6268impl<'de> ::serde::de::Deserialize<'de> for GroupMemberInfo {
6269    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6270        // struct deserializer
6271        use serde::de::{MapAccess, Visitor};
6272        struct StructVisitor;
6273        impl<'de> Visitor<'de> for StructVisitor {
6274            type Value = GroupMemberInfo;
6275            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6276                f.write_str("a GroupMemberInfo struct")
6277            }
6278            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6279                GroupMemberInfo::internal_deserialize(map)
6280            }
6281        }
6282        deserializer.deserialize_struct("GroupMemberInfo", GROUP_MEMBER_INFO_FIELDS, StructVisitor)
6283    }
6284}
6285
6286impl ::serde::ser::Serialize for GroupMemberInfo {
6287    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6288        // struct serializer
6289        use serde::ser::SerializeStruct;
6290        let mut s = serializer.serialize_struct("GroupMemberInfo", 2)?;
6291        self.internal_serialize::<S>(&mut s)?;
6292        s.end()
6293    }
6294}
6295
6296/// Argument for selecting a group and a single user.
6297#[derive(Debug, Clone, PartialEq, Eq)]
6298#[non_exhaustive] // structs may have more fields added in the future.
6299pub struct GroupMemberSelector {
6300    /// Specify a group.
6301    pub group: GroupSelector,
6302    /// Identity of a user that is a member of `group`.
6303    pub user: UserSelectorArg,
6304}
6305
6306impl GroupMemberSelector {
6307    pub fn new(group: GroupSelector, user: UserSelectorArg) -> Self {
6308        GroupMemberSelector {
6309            group,
6310            user,
6311        }
6312    }
6313}
6314
6315const GROUP_MEMBER_SELECTOR_FIELDS: &[&str] = &["group",
6316                                                "user"];
6317impl GroupMemberSelector {
6318    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6319        map: V,
6320    ) -> Result<GroupMemberSelector, V::Error> {
6321        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6322    }
6323
6324    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6325        mut map: V,
6326        optional: bool,
6327    ) -> Result<Option<GroupMemberSelector>, V::Error> {
6328        let mut field_group = None;
6329        let mut field_user = None;
6330        let mut nothing = true;
6331        while let Some(key) = map.next_key::<&str>()? {
6332            nothing = false;
6333            match key {
6334                "group" => {
6335                    if field_group.is_some() {
6336                        return Err(::serde::de::Error::duplicate_field("group"));
6337                    }
6338                    field_group = Some(map.next_value()?);
6339                }
6340                "user" => {
6341                    if field_user.is_some() {
6342                        return Err(::serde::de::Error::duplicate_field("user"));
6343                    }
6344                    field_user = Some(map.next_value()?);
6345                }
6346                _ => {
6347                    // unknown field allowed and ignored
6348                    map.next_value::<::serde_json::Value>()?;
6349                }
6350            }
6351        }
6352        if optional && nothing {
6353            return Ok(None);
6354        }
6355        let result = GroupMemberSelector {
6356            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6357            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
6358        };
6359        Ok(Some(result))
6360    }
6361
6362    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6363        &self,
6364        s: &mut S::SerializeStruct,
6365    ) -> Result<(), S::Error> {
6366        use serde::ser::SerializeStruct;
6367        s.serialize_field("group", &self.group)?;
6368        s.serialize_field("user", &self.user)?;
6369        Ok(())
6370    }
6371}
6372
6373impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSelector {
6374    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6375        // struct deserializer
6376        use serde::de::{MapAccess, Visitor};
6377        struct StructVisitor;
6378        impl<'de> Visitor<'de> for StructVisitor {
6379            type Value = GroupMemberSelector;
6380            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6381                f.write_str("a GroupMemberSelector struct")
6382            }
6383            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6384                GroupMemberSelector::internal_deserialize(map)
6385            }
6386        }
6387        deserializer.deserialize_struct("GroupMemberSelector", GROUP_MEMBER_SELECTOR_FIELDS, StructVisitor)
6388    }
6389}
6390
6391impl ::serde::ser::Serialize for GroupMemberSelector {
6392    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6393        // struct serializer
6394        use serde::ser::SerializeStruct;
6395        let mut s = serializer.serialize_struct("GroupMemberSelector", 2)?;
6396        self.internal_serialize::<S>(&mut s)?;
6397        s.end()
6398    }
6399}
6400
6401/// Error that can be raised when [`GroupMemberSelector`] is used, and the user is required to be a
6402/// member of the specified group.
6403#[derive(Debug, Clone, PartialEq, Eq)]
6404#[non_exhaustive] // variants may be added in the future
6405pub enum GroupMemberSelectorError {
6406    /// No matching group found. No groups match the specified group ID.
6407    GroupNotFound,
6408    /// This operation is not supported on system-managed groups.
6409    SystemManagedGroupDisallowed,
6410    /// The specified user is not a member of this group.
6411    MemberNotInGroup,
6412    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6413    /// typically indicates that this SDK version is out of date.
6414    Other,
6415}
6416
6417impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSelectorError {
6418    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6419        // union deserializer
6420        use serde::de::{self, MapAccess, Visitor};
6421        struct EnumVisitor;
6422        impl<'de> Visitor<'de> for EnumVisitor {
6423            type Value = GroupMemberSelectorError;
6424            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6425                f.write_str("a GroupMemberSelectorError structure")
6426            }
6427            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6428                let tag: &str = match map.next_key()? {
6429                    Some(".tag") => map.next_value()?,
6430                    _ => return Err(de::Error::missing_field(".tag"))
6431                };
6432                let value = match tag {
6433                    "group_not_found" => GroupMemberSelectorError::GroupNotFound,
6434                    "system_managed_group_disallowed" => GroupMemberSelectorError::SystemManagedGroupDisallowed,
6435                    "member_not_in_group" => GroupMemberSelectorError::MemberNotInGroup,
6436                    _ => GroupMemberSelectorError::Other,
6437                };
6438                crate::eat_json_fields(&mut map)?;
6439                Ok(value)
6440            }
6441        }
6442        const VARIANTS: &[&str] = &["group_not_found",
6443                                    "other",
6444                                    "system_managed_group_disallowed",
6445                                    "member_not_in_group"];
6446        deserializer.deserialize_struct("GroupMemberSelectorError", VARIANTS, EnumVisitor)
6447    }
6448}
6449
6450impl ::serde::ser::Serialize for GroupMemberSelectorError {
6451    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6452        // union serializer
6453        use serde::ser::SerializeStruct;
6454        match self {
6455            GroupMemberSelectorError::GroupNotFound => {
6456                // unit
6457                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
6458                s.serialize_field(".tag", "group_not_found")?;
6459                s.end()
6460            }
6461            GroupMemberSelectorError::SystemManagedGroupDisallowed => {
6462                // unit
6463                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
6464                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6465                s.end()
6466            }
6467            GroupMemberSelectorError::MemberNotInGroup => {
6468                // unit
6469                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
6470                s.serialize_field(".tag", "member_not_in_group")?;
6471                s.end()
6472            }
6473            GroupMemberSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6474        }
6475    }
6476}
6477
6478impl ::std::error::Error for GroupMemberSelectorError {
6479}
6480
6481impl ::std::fmt::Display for GroupMemberSelectorError {
6482    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6483        match self {
6484            GroupMemberSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6485            GroupMemberSelectorError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6486            GroupMemberSelectorError::MemberNotInGroup => f.write_str("The specified user is not a member of this group."),
6487            _ => write!(f, "{:?}", *self),
6488        }
6489    }
6490}
6491
6492// union extends GroupSelectorWithTeamGroupError
6493impl From<GroupSelectorWithTeamGroupError> for GroupMemberSelectorError {
6494    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
6495        match parent {
6496            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMemberSelectorError::GroupNotFound,
6497            GroupSelectorWithTeamGroupError::Other => GroupMemberSelectorError::Other,
6498            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMemberSelectorError::SystemManagedGroupDisallowed,
6499        }
6500    }
6501}
6502#[derive(Debug, Clone, PartialEq, Eq)]
6503#[non_exhaustive] // variants may be added in the future
6504pub enum GroupMemberSetAccessTypeError {
6505    /// No matching group found. No groups match the specified group ID.
6506    GroupNotFound,
6507    /// This operation is not supported on system-managed groups.
6508    SystemManagedGroupDisallowed,
6509    /// The specified user is not a member of this group.
6510    MemberNotInGroup,
6511    /// A company managed group cannot be managed by a user.
6512    UserCannotBeManagerOfCompanyManagedGroup,
6513    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6514    /// typically indicates that this SDK version is out of date.
6515    Other,
6516}
6517
6518impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSetAccessTypeError {
6519    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6520        // union deserializer
6521        use serde::de::{self, MapAccess, Visitor};
6522        struct EnumVisitor;
6523        impl<'de> Visitor<'de> for EnumVisitor {
6524            type Value = GroupMemberSetAccessTypeError;
6525            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6526                f.write_str("a GroupMemberSetAccessTypeError structure")
6527            }
6528            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6529                let tag: &str = match map.next_key()? {
6530                    Some(".tag") => map.next_value()?,
6531                    _ => return Err(de::Error::missing_field(".tag"))
6532                };
6533                let value = match tag {
6534                    "group_not_found" => GroupMemberSetAccessTypeError::GroupNotFound,
6535                    "system_managed_group_disallowed" => GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed,
6536                    "member_not_in_group" => GroupMemberSetAccessTypeError::MemberNotInGroup,
6537                    "user_cannot_be_manager_of_company_managed_group" => GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup,
6538                    _ => GroupMemberSetAccessTypeError::Other,
6539                };
6540                crate::eat_json_fields(&mut map)?;
6541                Ok(value)
6542            }
6543        }
6544        const VARIANTS: &[&str] = &["group_not_found",
6545                                    "other",
6546                                    "system_managed_group_disallowed",
6547                                    "member_not_in_group",
6548                                    "user_cannot_be_manager_of_company_managed_group"];
6549        deserializer.deserialize_struct("GroupMemberSetAccessTypeError", VARIANTS, EnumVisitor)
6550    }
6551}
6552
6553impl ::serde::ser::Serialize for GroupMemberSetAccessTypeError {
6554    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6555        // union serializer
6556        use serde::ser::SerializeStruct;
6557        match self {
6558            GroupMemberSetAccessTypeError::GroupNotFound => {
6559                // unit
6560                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
6561                s.serialize_field(".tag", "group_not_found")?;
6562                s.end()
6563            }
6564            GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed => {
6565                // unit
6566                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
6567                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6568                s.end()
6569            }
6570            GroupMemberSetAccessTypeError::MemberNotInGroup => {
6571                // unit
6572                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
6573                s.serialize_field(".tag", "member_not_in_group")?;
6574                s.end()
6575            }
6576            GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup => {
6577                // unit
6578                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
6579                s.serialize_field(".tag", "user_cannot_be_manager_of_company_managed_group")?;
6580                s.end()
6581            }
6582            GroupMemberSetAccessTypeError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6583        }
6584    }
6585}
6586
6587impl ::std::error::Error for GroupMemberSetAccessTypeError {
6588}
6589
6590impl ::std::fmt::Display for GroupMemberSetAccessTypeError {
6591    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6592        match self {
6593            GroupMemberSetAccessTypeError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6594            GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6595            GroupMemberSetAccessTypeError::MemberNotInGroup => f.write_str("The specified user is not a member of this group."),
6596            GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup => f.write_str("A company managed group cannot be managed by a user."),
6597            _ => write!(f, "{:?}", *self),
6598        }
6599    }
6600}
6601
6602// union extends GroupMemberSelectorError
6603impl From<GroupMemberSelectorError> for GroupMemberSetAccessTypeError {
6604    fn from(parent: GroupMemberSelectorError) -> Self {
6605        match parent {
6606            GroupMemberSelectorError::GroupNotFound => GroupMemberSetAccessTypeError::GroupNotFound,
6607            GroupMemberSelectorError::Other => GroupMemberSetAccessTypeError::Other,
6608            GroupMemberSelectorError::SystemManagedGroupDisallowed => GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed,
6609            GroupMemberSelectorError::MemberNotInGroup => GroupMemberSetAccessTypeError::MemberNotInGroup,
6610        }
6611    }
6612}
6613#[derive(Debug, Clone, PartialEq, Eq)]
6614#[non_exhaustive] // structs may have more fields added in the future.
6615pub struct GroupMembersAddArg {
6616    /// Group to which users will be added.
6617    pub group: GroupSelector,
6618    /// List of users to be added to the group.
6619    pub members: Vec<MemberAccess>,
6620    /// Whether to return the list of members in the group. Note that the default value will cause
6621    /// all the group members to be returned in the response. This may take a long time for large
6622    /// groups.
6623    pub return_members: bool,
6624}
6625
6626impl GroupMembersAddArg {
6627    pub fn new(group: GroupSelector, members: Vec<MemberAccess>) -> Self {
6628        GroupMembersAddArg {
6629            group,
6630            members,
6631            return_members: true,
6632        }
6633    }
6634
6635    pub fn with_return_members(mut self, value: bool) -> Self {
6636        self.return_members = value;
6637        self
6638    }
6639}
6640
6641const GROUP_MEMBERS_ADD_ARG_FIELDS: &[&str] = &["group",
6642                                                "members",
6643                                                "return_members"];
6644impl GroupMembersAddArg {
6645    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6646        map: V,
6647    ) -> Result<GroupMembersAddArg, V::Error> {
6648        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6649    }
6650
6651    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6652        mut map: V,
6653        optional: bool,
6654    ) -> Result<Option<GroupMembersAddArg>, V::Error> {
6655        let mut field_group = None;
6656        let mut field_members = None;
6657        let mut field_return_members = None;
6658        let mut nothing = true;
6659        while let Some(key) = map.next_key::<&str>()? {
6660            nothing = false;
6661            match key {
6662                "group" => {
6663                    if field_group.is_some() {
6664                        return Err(::serde::de::Error::duplicate_field("group"));
6665                    }
6666                    field_group = Some(map.next_value()?);
6667                }
6668                "members" => {
6669                    if field_members.is_some() {
6670                        return Err(::serde::de::Error::duplicate_field("members"));
6671                    }
6672                    field_members = Some(map.next_value()?);
6673                }
6674                "return_members" => {
6675                    if field_return_members.is_some() {
6676                        return Err(::serde::de::Error::duplicate_field("return_members"));
6677                    }
6678                    field_return_members = Some(map.next_value()?);
6679                }
6680                _ => {
6681                    // unknown field allowed and ignored
6682                    map.next_value::<::serde_json::Value>()?;
6683                }
6684            }
6685        }
6686        if optional && nothing {
6687            return Ok(None);
6688        }
6689        let result = GroupMembersAddArg {
6690            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6691            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
6692            return_members: field_return_members.unwrap_or(true),
6693        };
6694        Ok(Some(result))
6695    }
6696
6697    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6698        &self,
6699        s: &mut S::SerializeStruct,
6700    ) -> Result<(), S::Error> {
6701        use serde::ser::SerializeStruct;
6702        s.serialize_field("group", &self.group)?;
6703        s.serialize_field("members", &self.members)?;
6704        if !self.return_members {
6705            s.serialize_field("return_members", &self.return_members)?;
6706        }
6707        Ok(())
6708    }
6709}
6710
6711impl<'de> ::serde::de::Deserialize<'de> for GroupMembersAddArg {
6712    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6713        // struct deserializer
6714        use serde::de::{MapAccess, Visitor};
6715        struct StructVisitor;
6716        impl<'de> Visitor<'de> for StructVisitor {
6717            type Value = GroupMembersAddArg;
6718            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6719                f.write_str("a GroupMembersAddArg struct")
6720            }
6721            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6722                GroupMembersAddArg::internal_deserialize(map)
6723            }
6724        }
6725        deserializer.deserialize_struct("GroupMembersAddArg", GROUP_MEMBERS_ADD_ARG_FIELDS, StructVisitor)
6726    }
6727}
6728
6729impl ::serde::ser::Serialize for GroupMembersAddArg {
6730    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6731        // struct serializer
6732        use serde::ser::SerializeStruct;
6733        let mut s = serializer.serialize_struct("GroupMembersAddArg", 3)?;
6734        self.internal_serialize::<S>(&mut s)?;
6735        s.end()
6736    }
6737}
6738
6739// struct extends IncludeMembersArg
6740impl From<GroupMembersAddArg> for IncludeMembersArg {
6741    fn from(subtype: GroupMembersAddArg) -> Self {
6742        Self {
6743            return_members: subtype.return_members,
6744        }
6745    }
6746}
6747#[derive(Debug, Clone, PartialEq, Eq)]
6748#[non_exhaustive] // variants may be added in the future
6749pub enum GroupMembersAddError {
6750    /// No matching group found. No groups match the specified group ID.
6751    GroupNotFound,
6752    /// This operation is not supported on system-managed groups.
6753    SystemManagedGroupDisallowed,
6754    /// You cannot add duplicate users. One or more of the members you are trying to add is already
6755    /// a member of the group.
6756    DuplicateUser,
6757    /// Group is not in this team. You cannot add members to a group that is outside of your team.
6758    GroupNotInTeam,
6759    /// These members are not part of your team. Currently, you cannot add members to a group if
6760    /// they are not part of your team, though this may change in a subsequent version. To add new
6761    /// members to your Dropbox Business team, use the [`members_add()`](crate::team::members_add)
6762    /// endpoint.
6763    MembersNotInTeam(Vec<String>),
6764    /// These users were not found in Dropbox.
6765    UsersNotFound(Vec<String>),
6766    /// A suspended user cannot be added to a group as [`GroupAccessType::Owner`].
6767    UserMustBeActiveToBeOwner,
6768    /// A company-managed group cannot be managed by a user.
6769    UserCannotBeManagerOfCompanyManagedGroup(Vec<String>),
6770    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6771    /// typically indicates that this SDK version is out of date.
6772    Other,
6773}
6774
6775impl<'de> ::serde::de::Deserialize<'de> for GroupMembersAddError {
6776    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6777        // union deserializer
6778        use serde::de::{self, MapAccess, Visitor};
6779        struct EnumVisitor;
6780        impl<'de> Visitor<'de> for EnumVisitor {
6781            type Value = GroupMembersAddError;
6782            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6783                f.write_str("a GroupMembersAddError structure")
6784            }
6785            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6786                let tag: &str = match map.next_key()? {
6787                    Some(".tag") => map.next_value()?,
6788                    _ => return Err(de::Error::missing_field(".tag"))
6789                };
6790                let value = match tag {
6791                    "group_not_found" => GroupMembersAddError::GroupNotFound,
6792                    "system_managed_group_disallowed" => GroupMembersAddError::SystemManagedGroupDisallowed,
6793                    "duplicate_user" => GroupMembersAddError::DuplicateUser,
6794                    "group_not_in_team" => GroupMembersAddError::GroupNotInTeam,
6795                    "members_not_in_team" => {
6796                        match map.next_key()? {
6797                            Some("members_not_in_team") => GroupMembersAddError::MembersNotInTeam(map.next_value()?),
6798                            None => return Err(de::Error::missing_field("members_not_in_team")),
6799                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6800                        }
6801                    }
6802                    "users_not_found" => {
6803                        match map.next_key()? {
6804                            Some("users_not_found") => GroupMembersAddError::UsersNotFound(map.next_value()?),
6805                            None => return Err(de::Error::missing_field("users_not_found")),
6806                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6807                        }
6808                    }
6809                    "user_must_be_active_to_be_owner" => GroupMembersAddError::UserMustBeActiveToBeOwner,
6810                    "user_cannot_be_manager_of_company_managed_group" => {
6811                        match map.next_key()? {
6812                            Some("user_cannot_be_manager_of_company_managed_group") => GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(map.next_value()?),
6813                            None => return Err(de::Error::missing_field("user_cannot_be_manager_of_company_managed_group")),
6814                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6815                        }
6816                    }
6817                    _ => GroupMembersAddError::Other,
6818                };
6819                crate::eat_json_fields(&mut map)?;
6820                Ok(value)
6821            }
6822        }
6823        const VARIANTS: &[&str] = &["group_not_found",
6824                                    "other",
6825                                    "system_managed_group_disallowed",
6826                                    "duplicate_user",
6827                                    "group_not_in_team",
6828                                    "members_not_in_team",
6829                                    "users_not_found",
6830                                    "user_must_be_active_to_be_owner",
6831                                    "user_cannot_be_manager_of_company_managed_group"];
6832        deserializer.deserialize_struct("GroupMembersAddError", VARIANTS, EnumVisitor)
6833    }
6834}
6835
6836impl ::serde::ser::Serialize for GroupMembersAddError {
6837    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6838        // union serializer
6839        use serde::ser::SerializeStruct;
6840        match self {
6841            GroupMembersAddError::GroupNotFound => {
6842                // unit
6843                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
6844                s.serialize_field(".tag", "group_not_found")?;
6845                s.end()
6846            }
6847            GroupMembersAddError::SystemManagedGroupDisallowed => {
6848                // unit
6849                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
6850                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6851                s.end()
6852            }
6853            GroupMembersAddError::DuplicateUser => {
6854                // unit
6855                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
6856                s.serialize_field(".tag", "duplicate_user")?;
6857                s.end()
6858            }
6859            GroupMembersAddError::GroupNotInTeam => {
6860                // unit
6861                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
6862                s.serialize_field(".tag", "group_not_in_team")?;
6863                s.end()
6864            }
6865            GroupMembersAddError::MembersNotInTeam(x) => {
6866                // primitive
6867                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
6868                s.serialize_field(".tag", "members_not_in_team")?;
6869                s.serialize_field("members_not_in_team", x)?;
6870                s.end()
6871            }
6872            GroupMembersAddError::UsersNotFound(x) => {
6873                // primitive
6874                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
6875                s.serialize_field(".tag", "users_not_found")?;
6876                s.serialize_field("users_not_found", x)?;
6877                s.end()
6878            }
6879            GroupMembersAddError::UserMustBeActiveToBeOwner => {
6880                // unit
6881                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
6882                s.serialize_field(".tag", "user_must_be_active_to_be_owner")?;
6883                s.end()
6884            }
6885            GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(x) => {
6886                // primitive
6887                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
6888                s.serialize_field(".tag", "user_cannot_be_manager_of_company_managed_group")?;
6889                s.serialize_field("user_cannot_be_manager_of_company_managed_group", x)?;
6890                s.end()
6891            }
6892            GroupMembersAddError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6893        }
6894    }
6895}
6896
6897impl ::std::error::Error for GroupMembersAddError {
6898}
6899
6900impl ::std::fmt::Display for GroupMembersAddError {
6901    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6902        match self {
6903            GroupMembersAddError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6904            GroupMembersAddError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6905            GroupMembersAddError::DuplicateUser => f.write_str("You cannot add duplicate users. One or more of the members you are trying to add is already a member of the group."),
6906            GroupMembersAddError::GroupNotInTeam => f.write_str("Group is not in this team. You cannot add members to a group that is outside of your team."),
6907            GroupMembersAddError::MembersNotInTeam(inner) => write!(f, "members_not_in_team: {:?}", inner),
6908            GroupMembersAddError::UsersNotFound(inner) => write!(f, "These users were not found in Dropbox: {:?}", inner),
6909            GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(inner) => write!(f, "A company-managed group cannot be managed by a user: {:?}", inner),
6910            _ => write!(f, "{:?}", *self),
6911        }
6912    }
6913}
6914
6915// union extends GroupSelectorWithTeamGroupError
6916impl From<GroupSelectorWithTeamGroupError> for GroupMembersAddError {
6917    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
6918        match parent {
6919            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMembersAddError::GroupNotFound,
6920            GroupSelectorWithTeamGroupError::Other => GroupMembersAddError::Other,
6921            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMembersAddError::SystemManagedGroupDisallowed,
6922        }
6923    }
6924}
6925/// Result returned by [`groups_members_add()`](crate::team::groups_members_add) and
6926/// [`groups_members_remove()`](crate::team::groups_members_remove).
6927#[derive(Debug, Clone, PartialEq, Eq)]
6928#[non_exhaustive] // structs may have more fields added in the future.
6929pub struct GroupMembersChangeResult {
6930    /// The group info after member change operation has been performed.
6931    pub group_info: GroupFullInfo,
6932    /// Field is deprecated. For legacy purposes async_job_id will always return one space ' '.
6933    /// Formerly, it was an ID that was used to obtain the status of granting/revoking group-owned
6934    /// resources. It's no longer necessary because the async processing now happens automatically.
6935    #[deprecated]
6936    pub async_job_id: crate::types::dbx_async::AsyncJobId,
6937}
6938
6939impl GroupMembersChangeResult {
6940    pub fn new(
6941        group_info: GroupFullInfo,
6942        async_job_id: crate::types::dbx_async::AsyncJobId,
6943    ) -> Self {
6944        GroupMembersChangeResult {
6945            group_info,
6946            #[allow(deprecated)] async_job_id,
6947        }
6948    }
6949}
6950
6951const GROUP_MEMBERS_CHANGE_RESULT_FIELDS: &[&str] = &["group_info",
6952                                                      "async_job_id"];
6953impl GroupMembersChangeResult {
6954    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6955        map: V,
6956    ) -> Result<GroupMembersChangeResult, V::Error> {
6957        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6958    }
6959
6960    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6961        mut map: V,
6962        optional: bool,
6963    ) -> Result<Option<GroupMembersChangeResult>, V::Error> {
6964        let mut field_group_info = None;
6965        let mut field_async_job_id = None;
6966        let mut nothing = true;
6967        while let Some(key) = map.next_key::<&str>()? {
6968            nothing = false;
6969            match key {
6970                "group_info" => {
6971                    if field_group_info.is_some() {
6972                        return Err(::serde::de::Error::duplicate_field("group_info"));
6973                    }
6974                    field_group_info = Some(map.next_value()?);
6975                }
6976                "async_job_id" => {
6977                    if field_async_job_id.is_some() {
6978                        return Err(::serde::de::Error::duplicate_field("async_job_id"));
6979                    }
6980                    field_async_job_id = Some(map.next_value()?);
6981                }
6982                _ => {
6983                    // unknown field allowed and ignored
6984                    map.next_value::<::serde_json::Value>()?;
6985                }
6986            }
6987        }
6988        if optional && nothing {
6989            return Ok(None);
6990        }
6991        let result = GroupMembersChangeResult {
6992            group_info: field_group_info.ok_or_else(|| ::serde::de::Error::missing_field("group_info"))?,
6993            #[allow(deprecated)] async_job_id: field_async_job_id.ok_or_else(|| ::serde::de::Error::missing_field("async_job_id"))?,
6994        };
6995        Ok(Some(result))
6996    }
6997
6998    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6999        &self,
7000        s: &mut S::SerializeStruct,
7001    ) -> Result<(), S::Error> {
7002        use serde::ser::SerializeStruct;
7003        s.serialize_field("group_info", &self.group_info)?;
7004        #[allow(deprecated)]
7005        s.serialize_field("async_job_id", &self.async_job_id)?;
7006        Ok(())
7007    }
7008}
7009
7010impl<'de> ::serde::de::Deserialize<'de> for GroupMembersChangeResult {
7011    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7012        // struct deserializer
7013        use serde::de::{MapAccess, Visitor};
7014        struct StructVisitor;
7015        impl<'de> Visitor<'de> for StructVisitor {
7016            type Value = GroupMembersChangeResult;
7017            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7018                f.write_str("a GroupMembersChangeResult struct")
7019            }
7020            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7021                GroupMembersChangeResult::internal_deserialize(map)
7022            }
7023        }
7024        deserializer.deserialize_struct("GroupMembersChangeResult", GROUP_MEMBERS_CHANGE_RESULT_FIELDS, StructVisitor)
7025    }
7026}
7027
7028impl ::serde::ser::Serialize for GroupMembersChangeResult {
7029    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7030        // struct serializer
7031        use serde::ser::SerializeStruct;
7032        let mut s = serializer.serialize_struct("GroupMembersChangeResult", 2)?;
7033        self.internal_serialize::<S>(&mut s)?;
7034        s.end()
7035    }
7036}
7037
7038#[derive(Debug, Clone, PartialEq, Eq)]
7039#[non_exhaustive] // structs may have more fields added in the future.
7040pub struct GroupMembersRemoveArg {
7041    /// Group from which users will be removed.
7042    pub group: GroupSelector,
7043    /// List of users to be removed from the group.
7044    pub users: Vec<UserSelectorArg>,
7045    /// Whether to return the list of members in the group. Note that the default value will cause
7046    /// all the group members to be returned in the response. This may take a long time for large
7047    /// groups.
7048    pub return_members: bool,
7049}
7050
7051impl GroupMembersRemoveArg {
7052    pub fn new(group: GroupSelector, users: Vec<UserSelectorArg>) -> Self {
7053        GroupMembersRemoveArg {
7054            group,
7055            users,
7056            return_members: true,
7057        }
7058    }
7059
7060    pub fn with_return_members(mut self, value: bool) -> Self {
7061        self.return_members = value;
7062        self
7063    }
7064}
7065
7066const GROUP_MEMBERS_REMOVE_ARG_FIELDS: &[&str] = &["group",
7067                                                   "users",
7068                                                   "return_members"];
7069impl GroupMembersRemoveArg {
7070    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7071        map: V,
7072    ) -> Result<GroupMembersRemoveArg, V::Error> {
7073        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7074    }
7075
7076    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7077        mut map: V,
7078        optional: bool,
7079    ) -> Result<Option<GroupMembersRemoveArg>, V::Error> {
7080        let mut field_group = None;
7081        let mut field_users = None;
7082        let mut field_return_members = None;
7083        let mut nothing = true;
7084        while let Some(key) = map.next_key::<&str>()? {
7085            nothing = false;
7086            match key {
7087                "group" => {
7088                    if field_group.is_some() {
7089                        return Err(::serde::de::Error::duplicate_field("group"));
7090                    }
7091                    field_group = Some(map.next_value()?);
7092                }
7093                "users" => {
7094                    if field_users.is_some() {
7095                        return Err(::serde::de::Error::duplicate_field("users"));
7096                    }
7097                    field_users = Some(map.next_value()?);
7098                }
7099                "return_members" => {
7100                    if field_return_members.is_some() {
7101                        return Err(::serde::de::Error::duplicate_field("return_members"));
7102                    }
7103                    field_return_members = Some(map.next_value()?);
7104                }
7105                _ => {
7106                    // unknown field allowed and ignored
7107                    map.next_value::<::serde_json::Value>()?;
7108                }
7109            }
7110        }
7111        if optional && nothing {
7112            return Ok(None);
7113        }
7114        let result = GroupMembersRemoveArg {
7115            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7116            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
7117            return_members: field_return_members.unwrap_or(true),
7118        };
7119        Ok(Some(result))
7120    }
7121
7122    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7123        &self,
7124        s: &mut S::SerializeStruct,
7125    ) -> Result<(), S::Error> {
7126        use serde::ser::SerializeStruct;
7127        s.serialize_field("group", &self.group)?;
7128        s.serialize_field("users", &self.users)?;
7129        if !self.return_members {
7130            s.serialize_field("return_members", &self.return_members)?;
7131        }
7132        Ok(())
7133    }
7134}
7135
7136impl<'de> ::serde::de::Deserialize<'de> for GroupMembersRemoveArg {
7137    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7138        // struct deserializer
7139        use serde::de::{MapAccess, Visitor};
7140        struct StructVisitor;
7141        impl<'de> Visitor<'de> for StructVisitor {
7142            type Value = GroupMembersRemoveArg;
7143            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7144                f.write_str("a GroupMembersRemoveArg struct")
7145            }
7146            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7147                GroupMembersRemoveArg::internal_deserialize(map)
7148            }
7149        }
7150        deserializer.deserialize_struct("GroupMembersRemoveArg", GROUP_MEMBERS_REMOVE_ARG_FIELDS, StructVisitor)
7151    }
7152}
7153
7154impl ::serde::ser::Serialize for GroupMembersRemoveArg {
7155    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7156        // struct serializer
7157        use serde::ser::SerializeStruct;
7158        let mut s = serializer.serialize_struct("GroupMembersRemoveArg", 3)?;
7159        self.internal_serialize::<S>(&mut s)?;
7160        s.end()
7161    }
7162}
7163
7164// struct extends IncludeMembersArg
7165impl From<GroupMembersRemoveArg> for IncludeMembersArg {
7166    fn from(subtype: GroupMembersRemoveArg) -> Self {
7167        Self {
7168            return_members: subtype.return_members,
7169        }
7170    }
7171}
7172#[derive(Debug, Clone, PartialEq, Eq)]
7173#[non_exhaustive] // variants may be added in the future
7174pub enum GroupMembersRemoveError {
7175    /// No matching group found. No groups match the specified group ID.
7176    GroupNotFound,
7177    /// This operation is not supported on system-managed groups.
7178    SystemManagedGroupDisallowed,
7179    /// At least one of the specified users is not a member of the group.
7180    MemberNotInGroup,
7181    /// Group is not in this team. You cannot remove members from a group that is outside of your
7182    /// team.
7183    GroupNotInTeam,
7184    /// These members are not part of your team.
7185    MembersNotInTeam(Vec<String>),
7186    /// These users were not found in Dropbox.
7187    UsersNotFound(Vec<String>),
7188    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7189    /// typically indicates that this SDK version is out of date.
7190    Other,
7191}
7192
7193impl<'de> ::serde::de::Deserialize<'de> for GroupMembersRemoveError {
7194    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7195        // union deserializer
7196        use serde::de::{self, MapAccess, Visitor};
7197        struct EnumVisitor;
7198        impl<'de> Visitor<'de> for EnumVisitor {
7199            type Value = GroupMembersRemoveError;
7200            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7201                f.write_str("a GroupMembersRemoveError structure")
7202            }
7203            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7204                let tag: &str = match map.next_key()? {
7205                    Some(".tag") => map.next_value()?,
7206                    _ => return Err(de::Error::missing_field(".tag"))
7207                };
7208                let value = match tag {
7209                    "group_not_found" => GroupMembersRemoveError::GroupNotFound,
7210                    "system_managed_group_disallowed" => GroupMembersRemoveError::SystemManagedGroupDisallowed,
7211                    "member_not_in_group" => GroupMembersRemoveError::MemberNotInGroup,
7212                    "group_not_in_team" => GroupMembersRemoveError::GroupNotInTeam,
7213                    "members_not_in_team" => {
7214                        match map.next_key()? {
7215                            Some("members_not_in_team") => GroupMembersRemoveError::MembersNotInTeam(map.next_value()?),
7216                            None => return Err(de::Error::missing_field("members_not_in_team")),
7217                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
7218                        }
7219                    }
7220                    "users_not_found" => {
7221                        match map.next_key()? {
7222                            Some("users_not_found") => GroupMembersRemoveError::UsersNotFound(map.next_value()?),
7223                            None => return Err(de::Error::missing_field("users_not_found")),
7224                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
7225                        }
7226                    }
7227                    _ => GroupMembersRemoveError::Other,
7228                };
7229                crate::eat_json_fields(&mut map)?;
7230                Ok(value)
7231            }
7232        }
7233        const VARIANTS: &[&str] = &["group_not_found",
7234                                    "other",
7235                                    "system_managed_group_disallowed",
7236                                    "member_not_in_group",
7237                                    "group_not_in_team",
7238                                    "members_not_in_team",
7239                                    "users_not_found"];
7240        deserializer.deserialize_struct("GroupMembersRemoveError", VARIANTS, EnumVisitor)
7241    }
7242}
7243
7244impl ::serde::ser::Serialize for GroupMembersRemoveError {
7245    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7246        // union serializer
7247        use serde::ser::SerializeStruct;
7248        match self {
7249            GroupMembersRemoveError::GroupNotFound => {
7250                // unit
7251                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
7252                s.serialize_field(".tag", "group_not_found")?;
7253                s.end()
7254            }
7255            GroupMembersRemoveError::SystemManagedGroupDisallowed => {
7256                // unit
7257                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
7258                s.serialize_field(".tag", "system_managed_group_disallowed")?;
7259                s.end()
7260            }
7261            GroupMembersRemoveError::MemberNotInGroup => {
7262                // unit
7263                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
7264                s.serialize_field(".tag", "member_not_in_group")?;
7265                s.end()
7266            }
7267            GroupMembersRemoveError::GroupNotInTeam => {
7268                // unit
7269                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
7270                s.serialize_field(".tag", "group_not_in_team")?;
7271                s.end()
7272            }
7273            GroupMembersRemoveError::MembersNotInTeam(x) => {
7274                // primitive
7275                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 2)?;
7276                s.serialize_field(".tag", "members_not_in_team")?;
7277                s.serialize_field("members_not_in_team", x)?;
7278                s.end()
7279            }
7280            GroupMembersRemoveError::UsersNotFound(x) => {
7281                // primitive
7282                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 2)?;
7283                s.serialize_field(".tag", "users_not_found")?;
7284                s.serialize_field("users_not_found", x)?;
7285                s.end()
7286            }
7287            GroupMembersRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7288        }
7289    }
7290}
7291
7292impl ::std::error::Error for GroupMembersRemoveError {
7293}
7294
7295impl ::std::fmt::Display for GroupMembersRemoveError {
7296    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7297        match self {
7298            GroupMembersRemoveError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
7299            GroupMembersRemoveError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
7300            GroupMembersRemoveError::MemberNotInGroup => f.write_str("At least one of the specified users is not a member of the group."),
7301            GroupMembersRemoveError::GroupNotInTeam => f.write_str("Group is not in this team. You cannot remove members from a group that is outside of your team."),
7302            GroupMembersRemoveError::MembersNotInTeam(inner) => write!(f, "These members are not part of your team: {:?}", inner),
7303            GroupMembersRemoveError::UsersNotFound(inner) => write!(f, "These users were not found in Dropbox: {:?}", inner),
7304            _ => write!(f, "{:?}", *self),
7305        }
7306    }
7307}
7308
7309// union extends GroupMembersSelectorError
7310impl From<GroupMembersSelectorError> for GroupMembersRemoveError {
7311    fn from(parent: GroupMembersSelectorError) -> Self {
7312        match parent {
7313            GroupMembersSelectorError::GroupNotFound => GroupMembersRemoveError::GroupNotFound,
7314            GroupMembersSelectorError::Other => GroupMembersRemoveError::Other,
7315            GroupMembersSelectorError::SystemManagedGroupDisallowed => GroupMembersRemoveError::SystemManagedGroupDisallowed,
7316            GroupMembersSelectorError::MemberNotInGroup => GroupMembersRemoveError::MemberNotInGroup,
7317        }
7318    }
7319}
7320/// Argument for selecting a group and a list of users.
7321#[derive(Debug, Clone, PartialEq, Eq)]
7322#[non_exhaustive] // structs may have more fields added in the future.
7323pub struct GroupMembersSelector {
7324    /// Specify a group.
7325    pub group: GroupSelector,
7326    /// A list of users that are members of `group`.
7327    pub users: UsersSelectorArg,
7328}
7329
7330impl GroupMembersSelector {
7331    pub fn new(group: GroupSelector, users: UsersSelectorArg) -> Self {
7332        GroupMembersSelector {
7333            group,
7334            users,
7335        }
7336    }
7337}
7338
7339const GROUP_MEMBERS_SELECTOR_FIELDS: &[&str] = &["group",
7340                                                 "users"];
7341impl GroupMembersSelector {
7342    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7343        map: V,
7344    ) -> Result<GroupMembersSelector, V::Error> {
7345        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7346    }
7347
7348    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7349        mut map: V,
7350        optional: bool,
7351    ) -> Result<Option<GroupMembersSelector>, V::Error> {
7352        let mut field_group = None;
7353        let mut field_users = None;
7354        let mut nothing = true;
7355        while let Some(key) = map.next_key::<&str>()? {
7356            nothing = false;
7357            match key {
7358                "group" => {
7359                    if field_group.is_some() {
7360                        return Err(::serde::de::Error::duplicate_field("group"));
7361                    }
7362                    field_group = Some(map.next_value()?);
7363                }
7364                "users" => {
7365                    if field_users.is_some() {
7366                        return Err(::serde::de::Error::duplicate_field("users"));
7367                    }
7368                    field_users = Some(map.next_value()?);
7369                }
7370                _ => {
7371                    // unknown field allowed and ignored
7372                    map.next_value::<::serde_json::Value>()?;
7373                }
7374            }
7375        }
7376        if optional && nothing {
7377            return Ok(None);
7378        }
7379        let result = GroupMembersSelector {
7380            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7381            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
7382        };
7383        Ok(Some(result))
7384    }
7385
7386    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7387        &self,
7388        s: &mut S::SerializeStruct,
7389    ) -> Result<(), S::Error> {
7390        use serde::ser::SerializeStruct;
7391        s.serialize_field("group", &self.group)?;
7392        s.serialize_field("users", &self.users)?;
7393        Ok(())
7394    }
7395}
7396
7397impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSelector {
7398    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7399        // struct deserializer
7400        use serde::de::{MapAccess, Visitor};
7401        struct StructVisitor;
7402        impl<'de> Visitor<'de> for StructVisitor {
7403            type Value = GroupMembersSelector;
7404            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7405                f.write_str("a GroupMembersSelector struct")
7406            }
7407            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7408                GroupMembersSelector::internal_deserialize(map)
7409            }
7410        }
7411        deserializer.deserialize_struct("GroupMembersSelector", GROUP_MEMBERS_SELECTOR_FIELDS, StructVisitor)
7412    }
7413}
7414
7415impl ::serde::ser::Serialize for GroupMembersSelector {
7416    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7417        // struct serializer
7418        use serde::ser::SerializeStruct;
7419        let mut s = serializer.serialize_struct("GroupMembersSelector", 2)?;
7420        self.internal_serialize::<S>(&mut s)?;
7421        s.end()
7422    }
7423}
7424
7425/// Error that can be raised when [`GroupMembersSelector`] is used, and the users are required to be
7426/// members of the specified group.
7427#[derive(Debug, Clone, PartialEq, Eq)]
7428#[non_exhaustive] // variants may be added in the future
7429pub enum GroupMembersSelectorError {
7430    /// No matching group found. No groups match the specified group ID.
7431    GroupNotFound,
7432    /// This operation is not supported on system-managed groups.
7433    SystemManagedGroupDisallowed,
7434    /// At least one of the specified users is not a member of the group.
7435    MemberNotInGroup,
7436    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7437    /// typically indicates that this SDK version is out of date.
7438    Other,
7439}
7440
7441impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSelectorError {
7442    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7443        // union deserializer
7444        use serde::de::{self, MapAccess, Visitor};
7445        struct EnumVisitor;
7446        impl<'de> Visitor<'de> for EnumVisitor {
7447            type Value = GroupMembersSelectorError;
7448            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7449                f.write_str("a GroupMembersSelectorError structure")
7450            }
7451            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7452                let tag: &str = match map.next_key()? {
7453                    Some(".tag") => map.next_value()?,
7454                    _ => return Err(de::Error::missing_field(".tag"))
7455                };
7456                let value = match tag {
7457                    "group_not_found" => GroupMembersSelectorError::GroupNotFound,
7458                    "system_managed_group_disallowed" => GroupMembersSelectorError::SystemManagedGroupDisallowed,
7459                    "member_not_in_group" => GroupMembersSelectorError::MemberNotInGroup,
7460                    _ => GroupMembersSelectorError::Other,
7461                };
7462                crate::eat_json_fields(&mut map)?;
7463                Ok(value)
7464            }
7465        }
7466        const VARIANTS: &[&str] = &["group_not_found",
7467                                    "other",
7468                                    "system_managed_group_disallowed",
7469                                    "member_not_in_group"];
7470        deserializer.deserialize_struct("GroupMembersSelectorError", VARIANTS, EnumVisitor)
7471    }
7472}
7473
7474impl ::serde::ser::Serialize for GroupMembersSelectorError {
7475    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7476        // union serializer
7477        use serde::ser::SerializeStruct;
7478        match self {
7479            GroupMembersSelectorError::GroupNotFound => {
7480                // unit
7481                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
7482                s.serialize_field(".tag", "group_not_found")?;
7483                s.end()
7484            }
7485            GroupMembersSelectorError::SystemManagedGroupDisallowed => {
7486                // unit
7487                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
7488                s.serialize_field(".tag", "system_managed_group_disallowed")?;
7489                s.end()
7490            }
7491            GroupMembersSelectorError::MemberNotInGroup => {
7492                // unit
7493                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
7494                s.serialize_field(".tag", "member_not_in_group")?;
7495                s.end()
7496            }
7497            GroupMembersSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7498        }
7499    }
7500}
7501
7502impl ::std::error::Error for GroupMembersSelectorError {
7503}
7504
7505impl ::std::fmt::Display for GroupMembersSelectorError {
7506    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7507        match self {
7508            GroupMembersSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
7509            GroupMembersSelectorError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
7510            GroupMembersSelectorError::MemberNotInGroup => f.write_str("At least one of the specified users is not a member of the group."),
7511            _ => write!(f, "{:?}", *self),
7512        }
7513    }
7514}
7515
7516// union extends GroupSelectorWithTeamGroupError
7517impl From<GroupSelectorWithTeamGroupError> for GroupMembersSelectorError {
7518    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
7519        match parent {
7520            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMembersSelectorError::GroupNotFound,
7521            GroupSelectorWithTeamGroupError::Other => GroupMembersSelectorError::Other,
7522            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMembersSelectorError::SystemManagedGroupDisallowed,
7523        }
7524    }
7525}
7526#[derive(Debug, Clone, PartialEq, Eq)]
7527#[non_exhaustive] // structs may have more fields added in the future.
7528pub struct GroupMembersSetAccessTypeArg {
7529    /// Specify a group.
7530    pub group: GroupSelector,
7531    /// Identity of a user that is a member of `group`.
7532    pub user: UserSelectorArg,
7533    /// New group access type the user will have.
7534    pub access_type: GroupAccessType,
7535    /// Whether to return the list of members in the group. Note that the default value will cause
7536    /// all the group members to be returned in the response. This may take a long time for large
7537    /// groups.
7538    pub return_members: bool,
7539}
7540
7541impl GroupMembersSetAccessTypeArg {
7542    pub fn new(group: GroupSelector, user: UserSelectorArg, access_type: GroupAccessType) -> Self {
7543        GroupMembersSetAccessTypeArg {
7544            group,
7545            user,
7546            access_type,
7547            return_members: true,
7548        }
7549    }
7550
7551    pub fn with_return_members(mut self, value: bool) -> Self {
7552        self.return_members = value;
7553        self
7554    }
7555}
7556
7557const GROUP_MEMBERS_SET_ACCESS_TYPE_ARG_FIELDS: &[&str] = &["group",
7558                                                            "user",
7559                                                            "access_type",
7560                                                            "return_members"];
7561impl GroupMembersSetAccessTypeArg {
7562    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7563        map: V,
7564    ) -> Result<GroupMembersSetAccessTypeArg, V::Error> {
7565        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7566    }
7567
7568    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7569        mut map: V,
7570        optional: bool,
7571    ) -> Result<Option<GroupMembersSetAccessTypeArg>, V::Error> {
7572        let mut field_group = None;
7573        let mut field_user = None;
7574        let mut field_access_type = None;
7575        let mut field_return_members = None;
7576        let mut nothing = true;
7577        while let Some(key) = map.next_key::<&str>()? {
7578            nothing = false;
7579            match key {
7580                "group" => {
7581                    if field_group.is_some() {
7582                        return Err(::serde::de::Error::duplicate_field("group"));
7583                    }
7584                    field_group = Some(map.next_value()?);
7585                }
7586                "user" => {
7587                    if field_user.is_some() {
7588                        return Err(::serde::de::Error::duplicate_field("user"));
7589                    }
7590                    field_user = Some(map.next_value()?);
7591                }
7592                "access_type" => {
7593                    if field_access_type.is_some() {
7594                        return Err(::serde::de::Error::duplicate_field("access_type"));
7595                    }
7596                    field_access_type = Some(map.next_value()?);
7597                }
7598                "return_members" => {
7599                    if field_return_members.is_some() {
7600                        return Err(::serde::de::Error::duplicate_field("return_members"));
7601                    }
7602                    field_return_members = Some(map.next_value()?);
7603                }
7604                _ => {
7605                    // unknown field allowed and ignored
7606                    map.next_value::<::serde_json::Value>()?;
7607                }
7608            }
7609        }
7610        if optional && nothing {
7611            return Ok(None);
7612        }
7613        let result = GroupMembersSetAccessTypeArg {
7614            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7615            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
7616            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
7617            return_members: field_return_members.unwrap_or(true),
7618        };
7619        Ok(Some(result))
7620    }
7621
7622    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7623        &self,
7624        s: &mut S::SerializeStruct,
7625    ) -> Result<(), S::Error> {
7626        use serde::ser::SerializeStruct;
7627        s.serialize_field("group", &self.group)?;
7628        s.serialize_field("user", &self.user)?;
7629        s.serialize_field("access_type", &self.access_type)?;
7630        if !self.return_members {
7631            s.serialize_field("return_members", &self.return_members)?;
7632        }
7633        Ok(())
7634    }
7635}
7636
7637impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSetAccessTypeArg {
7638    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7639        // struct deserializer
7640        use serde::de::{MapAccess, Visitor};
7641        struct StructVisitor;
7642        impl<'de> Visitor<'de> for StructVisitor {
7643            type Value = GroupMembersSetAccessTypeArg;
7644            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7645                f.write_str("a GroupMembersSetAccessTypeArg struct")
7646            }
7647            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7648                GroupMembersSetAccessTypeArg::internal_deserialize(map)
7649            }
7650        }
7651        deserializer.deserialize_struct("GroupMembersSetAccessTypeArg", GROUP_MEMBERS_SET_ACCESS_TYPE_ARG_FIELDS, StructVisitor)
7652    }
7653}
7654
7655impl ::serde::ser::Serialize for GroupMembersSetAccessTypeArg {
7656    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7657        // struct serializer
7658        use serde::ser::SerializeStruct;
7659        let mut s = serializer.serialize_struct("GroupMembersSetAccessTypeArg", 4)?;
7660        self.internal_serialize::<S>(&mut s)?;
7661        s.end()
7662    }
7663}
7664
7665// struct extends GroupMemberSelector
7666impl From<GroupMembersSetAccessTypeArg> for GroupMemberSelector {
7667    fn from(subtype: GroupMembersSetAccessTypeArg) -> Self {
7668        Self {
7669            group: subtype.group,
7670            user: subtype.user,
7671        }
7672    }
7673}
7674/// Argument for selecting a single group, either by group_id or by external group ID.
7675#[derive(Debug, Clone, PartialEq, Eq)]
7676pub enum GroupSelector {
7677    /// Group ID.
7678    GroupId(crate::types::team_common::GroupId),
7679    /// External ID of the group.
7680    GroupExternalId(crate::types::team_common::GroupExternalId),
7681}
7682
7683impl<'de> ::serde::de::Deserialize<'de> for GroupSelector {
7684    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7685        // union deserializer
7686        use serde::de::{self, MapAccess, Visitor};
7687        struct EnumVisitor;
7688        impl<'de> Visitor<'de> for EnumVisitor {
7689            type Value = GroupSelector;
7690            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7691                f.write_str("a GroupSelector structure")
7692            }
7693            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7694                let tag: &str = match map.next_key()? {
7695                    Some(".tag") => map.next_value()?,
7696                    _ => return Err(de::Error::missing_field(".tag"))
7697                };
7698                let value = match tag {
7699                    "group_id" => {
7700                        match map.next_key()? {
7701                            Some("group_id") => GroupSelector::GroupId(map.next_value()?),
7702                            None => return Err(de::Error::missing_field("group_id")),
7703                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
7704                        }
7705                    }
7706                    "group_external_id" => {
7707                        match map.next_key()? {
7708                            Some("group_external_id") => GroupSelector::GroupExternalId(map.next_value()?),
7709                            None => return Err(de::Error::missing_field("group_external_id")),
7710                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
7711                        }
7712                    }
7713                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
7714                };
7715                crate::eat_json_fields(&mut map)?;
7716                Ok(value)
7717            }
7718        }
7719        const VARIANTS: &[&str] = &["group_id",
7720                                    "group_external_id"];
7721        deserializer.deserialize_struct("GroupSelector", VARIANTS, EnumVisitor)
7722    }
7723}
7724
7725impl ::serde::ser::Serialize for GroupSelector {
7726    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7727        // union serializer
7728        use serde::ser::SerializeStruct;
7729        match self {
7730            GroupSelector::GroupId(x) => {
7731                // primitive
7732                let mut s = serializer.serialize_struct("GroupSelector", 2)?;
7733                s.serialize_field(".tag", "group_id")?;
7734                s.serialize_field("group_id", x)?;
7735                s.end()
7736            }
7737            GroupSelector::GroupExternalId(x) => {
7738                // primitive
7739                let mut s = serializer.serialize_struct("GroupSelector", 2)?;
7740                s.serialize_field(".tag", "group_external_id")?;
7741                s.serialize_field("group_external_id", x)?;
7742                s.end()
7743            }
7744        }
7745    }
7746}
7747
7748/// Error that can be raised when [`GroupSelector`] is used.
7749#[derive(Debug, Clone, PartialEq, Eq)]
7750#[non_exhaustive] // variants may be added in the future
7751pub enum GroupSelectorError {
7752    /// No matching group found. No groups match the specified group ID.
7753    GroupNotFound,
7754    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7755    /// typically indicates that this SDK version is out of date.
7756    Other,
7757}
7758
7759impl<'de> ::serde::de::Deserialize<'de> for GroupSelectorError {
7760    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7761        // union deserializer
7762        use serde::de::{self, MapAccess, Visitor};
7763        struct EnumVisitor;
7764        impl<'de> Visitor<'de> for EnumVisitor {
7765            type Value = GroupSelectorError;
7766            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7767                f.write_str("a GroupSelectorError structure")
7768            }
7769            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7770                let tag: &str = match map.next_key()? {
7771                    Some(".tag") => map.next_value()?,
7772                    _ => return Err(de::Error::missing_field(".tag"))
7773                };
7774                let value = match tag {
7775                    "group_not_found" => GroupSelectorError::GroupNotFound,
7776                    _ => GroupSelectorError::Other,
7777                };
7778                crate::eat_json_fields(&mut map)?;
7779                Ok(value)
7780            }
7781        }
7782        const VARIANTS: &[&str] = &["group_not_found",
7783                                    "other"];
7784        deserializer.deserialize_struct("GroupSelectorError", VARIANTS, EnumVisitor)
7785    }
7786}
7787
7788impl ::serde::ser::Serialize for GroupSelectorError {
7789    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7790        // union serializer
7791        use serde::ser::SerializeStruct;
7792        match self {
7793            GroupSelectorError::GroupNotFound => {
7794                // unit
7795                let mut s = serializer.serialize_struct("GroupSelectorError", 1)?;
7796                s.serialize_field(".tag", "group_not_found")?;
7797                s.end()
7798            }
7799            GroupSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7800        }
7801    }
7802}
7803
7804impl ::std::error::Error for GroupSelectorError {
7805}
7806
7807impl ::std::fmt::Display for GroupSelectorError {
7808    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7809        match self {
7810            GroupSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
7811            _ => write!(f, "{:?}", *self),
7812        }
7813    }
7814}
7815
7816/// Error that can be raised when [`GroupSelector`] is used and team groups are disallowed from
7817/// being used.
7818#[derive(Debug, Clone, PartialEq, Eq)]
7819#[non_exhaustive] // variants may be added in the future
7820pub enum GroupSelectorWithTeamGroupError {
7821    /// No matching group found. No groups match the specified group ID.
7822    GroupNotFound,
7823    /// This operation is not supported on system-managed groups.
7824    SystemManagedGroupDisallowed,
7825    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7826    /// typically indicates that this SDK version is out of date.
7827    Other,
7828}
7829
7830impl<'de> ::serde::de::Deserialize<'de> for GroupSelectorWithTeamGroupError {
7831    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7832        // union deserializer
7833        use serde::de::{self, MapAccess, Visitor};
7834        struct EnumVisitor;
7835        impl<'de> Visitor<'de> for EnumVisitor {
7836            type Value = GroupSelectorWithTeamGroupError;
7837            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7838                f.write_str("a GroupSelectorWithTeamGroupError structure")
7839            }
7840            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7841                let tag: &str = match map.next_key()? {
7842                    Some(".tag") => map.next_value()?,
7843                    _ => return Err(de::Error::missing_field(".tag"))
7844                };
7845                let value = match tag {
7846                    "group_not_found" => GroupSelectorWithTeamGroupError::GroupNotFound,
7847                    "system_managed_group_disallowed" => GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed,
7848                    _ => GroupSelectorWithTeamGroupError::Other,
7849                };
7850                crate::eat_json_fields(&mut map)?;
7851                Ok(value)
7852            }
7853        }
7854        const VARIANTS: &[&str] = &["group_not_found",
7855                                    "other",
7856                                    "system_managed_group_disallowed"];
7857        deserializer.deserialize_struct("GroupSelectorWithTeamGroupError", VARIANTS, EnumVisitor)
7858    }
7859}
7860
7861impl ::serde::ser::Serialize for GroupSelectorWithTeamGroupError {
7862    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7863        // union serializer
7864        use serde::ser::SerializeStruct;
7865        match self {
7866            GroupSelectorWithTeamGroupError::GroupNotFound => {
7867                // unit
7868                let mut s = serializer.serialize_struct("GroupSelectorWithTeamGroupError", 1)?;
7869                s.serialize_field(".tag", "group_not_found")?;
7870                s.end()
7871            }
7872            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => {
7873                // unit
7874                let mut s = serializer.serialize_struct("GroupSelectorWithTeamGroupError", 1)?;
7875                s.serialize_field(".tag", "system_managed_group_disallowed")?;
7876                s.end()
7877            }
7878            GroupSelectorWithTeamGroupError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7879        }
7880    }
7881}
7882
7883impl ::std::error::Error for GroupSelectorWithTeamGroupError {
7884}
7885
7886impl ::std::fmt::Display for GroupSelectorWithTeamGroupError {
7887    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7888        match self {
7889            GroupSelectorWithTeamGroupError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
7890            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
7891            _ => write!(f, "{:?}", *self),
7892        }
7893    }
7894}
7895
7896// union extends GroupSelectorError
7897impl From<GroupSelectorError> for GroupSelectorWithTeamGroupError {
7898    fn from(parent: GroupSelectorError) -> Self {
7899        match parent {
7900            GroupSelectorError::GroupNotFound => GroupSelectorWithTeamGroupError::GroupNotFound,
7901            GroupSelectorError::Other => GroupSelectorWithTeamGroupError::Other,
7902        }
7903    }
7904}
7905#[derive(Debug, Clone, PartialEq, Eq)]
7906#[non_exhaustive] // structs may have more fields added in the future.
7907pub struct GroupUpdateArgs {
7908    /// Specify a group.
7909    pub group: GroupSelector,
7910    /// Whether to return the list of members in the group. Note that the default value will cause
7911    /// all the group members to be returned in the response. This may take a long time for large
7912    /// groups.
7913    pub return_members: bool,
7914    /// Optional argument. Set group name to this if provided.
7915    pub new_group_name: Option<String>,
7916    /// Optional argument. New group external ID. If the argument is None, the group's external_id
7917    /// won't be updated. If the argument is empty string, the group's external id will be cleared.
7918    pub new_group_external_id: Option<crate::types::team_common::GroupExternalId>,
7919    /// Set new group management type, if provided.
7920    pub new_group_management_type: Option<crate::types::team_common::GroupManagementType>,
7921}
7922
7923impl GroupUpdateArgs {
7924    pub fn new(group: GroupSelector) -> Self {
7925        GroupUpdateArgs {
7926            group,
7927            return_members: true,
7928            new_group_name: None,
7929            new_group_external_id: None,
7930            new_group_management_type: None,
7931        }
7932    }
7933
7934    pub fn with_return_members(mut self, value: bool) -> Self {
7935        self.return_members = value;
7936        self
7937    }
7938
7939    pub fn with_new_group_name(mut self, value: String) -> Self {
7940        self.new_group_name = Some(value);
7941        self
7942    }
7943
7944    pub fn with_new_group_external_id(
7945        mut self,
7946        value: crate::types::team_common::GroupExternalId,
7947    ) -> Self {
7948        self.new_group_external_id = Some(value);
7949        self
7950    }
7951
7952    pub fn with_new_group_management_type(
7953        mut self,
7954        value: crate::types::team_common::GroupManagementType,
7955    ) -> Self {
7956        self.new_group_management_type = Some(value);
7957        self
7958    }
7959}
7960
7961const GROUP_UPDATE_ARGS_FIELDS: &[&str] = &["group",
7962                                            "return_members",
7963                                            "new_group_name",
7964                                            "new_group_external_id",
7965                                            "new_group_management_type"];
7966impl GroupUpdateArgs {
7967    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7968        map: V,
7969    ) -> Result<GroupUpdateArgs, V::Error> {
7970        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7971    }
7972
7973    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7974        mut map: V,
7975        optional: bool,
7976    ) -> Result<Option<GroupUpdateArgs>, V::Error> {
7977        let mut field_group = None;
7978        let mut field_return_members = None;
7979        let mut field_new_group_name = None;
7980        let mut field_new_group_external_id = None;
7981        let mut field_new_group_management_type = None;
7982        let mut nothing = true;
7983        while let Some(key) = map.next_key::<&str>()? {
7984            nothing = false;
7985            match key {
7986                "group" => {
7987                    if field_group.is_some() {
7988                        return Err(::serde::de::Error::duplicate_field("group"));
7989                    }
7990                    field_group = Some(map.next_value()?);
7991                }
7992                "return_members" => {
7993                    if field_return_members.is_some() {
7994                        return Err(::serde::de::Error::duplicate_field("return_members"));
7995                    }
7996                    field_return_members = Some(map.next_value()?);
7997                }
7998                "new_group_name" => {
7999                    if field_new_group_name.is_some() {
8000                        return Err(::serde::de::Error::duplicate_field("new_group_name"));
8001                    }
8002                    field_new_group_name = Some(map.next_value()?);
8003                }
8004                "new_group_external_id" => {
8005                    if field_new_group_external_id.is_some() {
8006                        return Err(::serde::de::Error::duplicate_field("new_group_external_id"));
8007                    }
8008                    field_new_group_external_id = Some(map.next_value()?);
8009                }
8010                "new_group_management_type" => {
8011                    if field_new_group_management_type.is_some() {
8012                        return Err(::serde::de::Error::duplicate_field("new_group_management_type"));
8013                    }
8014                    field_new_group_management_type = Some(map.next_value()?);
8015                }
8016                _ => {
8017                    // unknown field allowed and ignored
8018                    map.next_value::<::serde_json::Value>()?;
8019                }
8020            }
8021        }
8022        if optional && nothing {
8023            return Ok(None);
8024        }
8025        let result = GroupUpdateArgs {
8026            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
8027            return_members: field_return_members.unwrap_or(true),
8028            new_group_name: field_new_group_name.and_then(Option::flatten),
8029            new_group_external_id: field_new_group_external_id.and_then(Option::flatten),
8030            new_group_management_type: field_new_group_management_type.and_then(Option::flatten),
8031        };
8032        Ok(Some(result))
8033    }
8034
8035    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8036        &self,
8037        s: &mut S::SerializeStruct,
8038    ) -> Result<(), S::Error> {
8039        use serde::ser::SerializeStruct;
8040        s.serialize_field("group", &self.group)?;
8041        if !self.return_members {
8042            s.serialize_field("return_members", &self.return_members)?;
8043        }
8044        if let Some(val) = &self.new_group_name {
8045            s.serialize_field("new_group_name", val)?;
8046        }
8047        if let Some(val) = &self.new_group_external_id {
8048            s.serialize_field("new_group_external_id", val)?;
8049        }
8050        if let Some(val) = &self.new_group_management_type {
8051            s.serialize_field("new_group_management_type", val)?;
8052        }
8053        Ok(())
8054    }
8055}
8056
8057impl<'de> ::serde::de::Deserialize<'de> for GroupUpdateArgs {
8058    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8059        // struct deserializer
8060        use serde::de::{MapAccess, Visitor};
8061        struct StructVisitor;
8062        impl<'de> Visitor<'de> for StructVisitor {
8063            type Value = GroupUpdateArgs;
8064            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8065                f.write_str("a GroupUpdateArgs struct")
8066            }
8067            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8068                GroupUpdateArgs::internal_deserialize(map)
8069            }
8070        }
8071        deserializer.deserialize_struct("GroupUpdateArgs", GROUP_UPDATE_ARGS_FIELDS, StructVisitor)
8072    }
8073}
8074
8075impl ::serde::ser::Serialize for GroupUpdateArgs {
8076    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8077        // struct serializer
8078        use serde::ser::SerializeStruct;
8079        let mut s = serializer.serialize_struct("GroupUpdateArgs", 5)?;
8080        self.internal_serialize::<S>(&mut s)?;
8081        s.end()
8082    }
8083}
8084
8085// struct extends IncludeMembersArg
8086impl From<GroupUpdateArgs> for IncludeMembersArg {
8087    fn from(subtype: GroupUpdateArgs) -> Self {
8088        Self {
8089            return_members: subtype.return_members,
8090        }
8091    }
8092}
8093#[derive(Debug, Clone, PartialEq, Eq)]
8094#[non_exhaustive] // variants may be added in the future
8095pub enum GroupUpdateError {
8096    /// No matching group found. No groups match the specified group ID.
8097    GroupNotFound,
8098    /// This operation is not supported on system-managed groups.
8099    SystemManagedGroupDisallowed,
8100    /// The requested group name is already being used by another group.
8101    GroupNameAlreadyUsed,
8102    /// Group name is empty or has invalid characters.
8103    GroupNameInvalid,
8104    /// The requested external ID is already being used by another group.
8105    ExternalIdAlreadyInUse,
8106    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8107    /// typically indicates that this SDK version is out of date.
8108    Other,
8109}
8110
8111impl<'de> ::serde::de::Deserialize<'de> for GroupUpdateError {
8112    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8113        // union deserializer
8114        use serde::de::{self, MapAccess, Visitor};
8115        struct EnumVisitor;
8116        impl<'de> Visitor<'de> for EnumVisitor {
8117            type Value = GroupUpdateError;
8118            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8119                f.write_str("a GroupUpdateError structure")
8120            }
8121            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8122                let tag: &str = match map.next_key()? {
8123                    Some(".tag") => map.next_value()?,
8124                    _ => return Err(de::Error::missing_field(".tag"))
8125                };
8126                let value = match tag {
8127                    "group_not_found" => GroupUpdateError::GroupNotFound,
8128                    "system_managed_group_disallowed" => GroupUpdateError::SystemManagedGroupDisallowed,
8129                    "group_name_already_used" => GroupUpdateError::GroupNameAlreadyUsed,
8130                    "group_name_invalid" => GroupUpdateError::GroupNameInvalid,
8131                    "external_id_already_in_use" => GroupUpdateError::ExternalIdAlreadyInUse,
8132                    _ => GroupUpdateError::Other,
8133                };
8134                crate::eat_json_fields(&mut map)?;
8135                Ok(value)
8136            }
8137        }
8138        const VARIANTS: &[&str] = &["group_not_found",
8139                                    "other",
8140                                    "system_managed_group_disallowed",
8141                                    "group_name_already_used",
8142                                    "group_name_invalid",
8143                                    "external_id_already_in_use"];
8144        deserializer.deserialize_struct("GroupUpdateError", VARIANTS, EnumVisitor)
8145    }
8146}
8147
8148impl ::serde::ser::Serialize for GroupUpdateError {
8149    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8150        // union serializer
8151        use serde::ser::SerializeStruct;
8152        match self {
8153            GroupUpdateError::GroupNotFound => {
8154                // unit
8155                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
8156                s.serialize_field(".tag", "group_not_found")?;
8157                s.end()
8158            }
8159            GroupUpdateError::SystemManagedGroupDisallowed => {
8160                // unit
8161                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
8162                s.serialize_field(".tag", "system_managed_group_disallowed")?;
8163                s.end()
8164            }
8165            GroupUpdateError::GroupNameAlreadyUsed => {
8166                // unit
8167                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
8168                s.serialize_field(".tag", "group_name_already_used")?;
8169                s.end()
8170            }
8171            GroupUpdateError::GroupNameInvalid => {
8172                // unit
8173                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
8174                s.serialize_field(".tag", "group_name_invalid")?;
8175                s.end()
8176            }
8177            GroupUpdateError::ExternalIdAlreadyInUse => {
8178                // unit
8179                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
8180                s.serialize_field(".tag", "external_id_already_in_use")?;
8181                s.end()
8182            }
8183            GroupUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8184        }
8185    }
8186}
8187
8188impl ::std::error::Error for GroupUpdateError {
8189}
8190
8191impl ::std::fmt::Display for GroupUpdateError {
8192    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8193        match self {
8194            GroupUpdateError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
8195            GroupUpdateError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
8196            GroupUpdateError::GroupNameAlreadyUsed => f.write_str("The requested group name is already being used by another group."),
8197            GroupUpdateError::GroupNameInvalid => f.write_str("Group name is empty or has invalid characters."),
8198            GroupUpdateError::ExternalIdAlreadyInUse => f.write_str("The requested external ID is already being used by another group."),
8199            _ => write!(f, "{:?}", *self),
8200        }
8201    }
8202}
8203
8204// union extends GroupSelectorWithTeamGroupError
8205impl From<GroupSelectorWithTeamGroupError> for GroupUpdateError {
8206    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
8207        match parent {
8208            GroupSelectorWithTeamGroupError::GroupNotFound => GroupUpdateError::GroupNotFound,
8209            GroupSelectorWithTeamGroupError::Other => GroupUpdateError::Other,
8210            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupUpdateError::SystemManagedGroupDisallowed,
8211        }
8212    }
8213}
8214#[derive(Debug, Clone, PartialEq, Eq)]
8215#[non_exhaustive] // variants may be added in the future
8216pub enum GroupsGetInfoError {
8217    /// The group is not on your team.
8218    GroupNotOnTeam,
8219    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8220    /// typically indicates that this SDK version is out of date.
8221    Other,
8222}
8223
8224impl<'de> ::serde::de::Deserialize<'de> for GroupsGetInfoError {
8225    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8226        // union deserializer
8227        use serde::de::{self, MapAccess, Visitor};
8228        struct EnumVisitor;
8229        impl<'de> Visitor<'de> for EnumVisitor {
8230            type Value = GroupsGetInfoError;
8231            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8232                f.write_str("a GroupsGetInfoError structure")
8233            }
8234            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8235                let tag: &str = match map.next_key()? {
8236                    Some(".tag") => map.next_value()?,
8237                    _ => return Err(de::Error::missing_field(".tag"))
8238                };
8239                let value = match tag {
8240                    "group_not_on_team" => GroupsGetInfoError::GroupNotOnTeam,
8241                    _ => GroupsGetInfoError::Other,
8242                };
8243                crate::eat_json_fields(&mut map)?;
8244                Ok(value)
8245            }
8246        }
8247        const VARIANTS: &[&str] = &["group_not_on_team",
8248                                    "other"];
8249        deserializer.deserialize_struct("GroupsGetInfoError", VARIANTS, EnumVisitor)
8250    }
8251}
8252
8253impl ::serde::ser::Serialize for GroupsGetInfoError {
8254    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8255        // union serializer
8256        use serde::ser::SerializeStruct;
8257        match self {
8258            GroupsGetInfoError::GroupNotOnTeam => {
8259                // unit
8260                let mut s = serializer.serialize_struct("GroupsGetInfoError", 1)?;
8261                s.serialize_field(".tag", "group_not_on_team")?;
8262                s.end()
8263            }
8264            GroupsGetInfoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8265        }
8266    }
8267}
8268
8269impl ::std::error::Error for GroupsGetInfoError {
8270}
8271
8272impl ::std::fmt::Display for GroupsGetInfoError {
8273    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8274        match self {
8275            GroupsGetInfoError::GroupNotOnTeam => f.write_str("The group is not on your team."),
8276            _ => write!(f, "{:?}", *self),
8277        }
8278    }
8279}
8280
8281#[derive(Debug, Clone, PartialEq, Eq)]
8282pub enum GroupsGetInfoItem {
8283    /// An ID that was provided as a parameter to
8284    /// [`groups_get_info()`](crate::team::groups_get_info), and did not match a corresponding
8285    /// group. The ID can be a group ID, or an external ID, depending on how the method was called.
8286    IdNotFound(String),
8287    /// Info about a group.
8288    GroupInfo(GroupFullInfo),
8289}
8290
8291impl<'de> ::serde::de::Deserialize<'de> for GroupsGetInfoItem {
8292    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8293        // union deserializer
8294        use serde::de::{self, MapAccess, Visitor};
8295        struct EnumVisitor;
8296        impl<'de> Visitor<'de> for EnumVisitor {
8297            type Value = GroupsGetInfoItem;
8298            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8299                f.write_str("a GroupsGetInfoItem structure")
8300            }
8301            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8302                let tag: &str = match map.next_key()? {
8303                    Some(".tag") => map.next_value()?,
8304                    _ => return Err(de::Error::missing_field(".tag"))
8305                };
8306                let value = match tag {
8307                    "id_not_found" => {
8308                        match map.next_key()? {
8309                            Some("id_not_found") => GroupsGetInfoItem::IdNotFound(map.next_value()?),
8310                            None => return Err(de::Error::missing_field("id_not_found")),
8311                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8312                        }
8313                    }
8314                    "group_info" => GroupsGetInfoItem::GroupInfo(GroupFullInfo::internal_deserialize(&mut map)?),
8315                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
8316                };
8317                crate::eat_json_fields(&mut map)?;
8318                Ok(value)
8319            }
8320        }
8321        const VARIANTS: &[&str] = &["id_not_found",
8322                                    "group_info"];
8323        deserializer.deserialize_struct("GroupsGetInfoItem", VARIANTS, EnumVisitor)
8324    }
8325}
8326
8327impl ::serde::ser::Serialize for GroupsGetInfoItem {
8328    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8329        // union serializer
8330        use serde::ser::SerializeStruct;
8331        match self {
8332            GroupsGetInfoItem::IdNotFound(x) => {
8333                // primitive
8334                let mut s = serializer.serialize_struct("GroupsGetInfoItem", 2)?;
8335                s.serialize_field(".tag", "id_not_found")?;
8336                s.serialize_field("id_not_found", x)?;
8337                s.end()
8338            }
8339            GroupsGetInfoItem::GroupInfo(x) => {
8340                // struct
8341                let mut s = serializer.serialize_struct("GroupsGetInfoItem", 8)?;
8342                s.serialize_field(".tag", "group_info")?;
8343                x.internal_serialize::<S>(&mut s)?;
8344                s.end()
8345            }
8346        }
8347    }
8348}
8349
8350#[derive(Debug, Clone, PartialEq, Eq)]
8351#[non_exhaustive] // structs may have more fields added in the future.
8352pub struct GroupsListArg {
8353    /// Number of results to return per call.
8354    pub limit: u32,
8355}
8356
8357impl Default for GroupsListArg {
8358    fn default() -> Self {
8359        GroupsListArg {
8360            limit: 1000,
8361        }
8362    }
8363}
8364
8365impl GroupsListArg {
8366    pub fn with_limit(mut self, value: u32) -> Self {
8367        self.limit = value;
8368        self
8369    }
8370}
8371
8372const GROUPS_LIST_ARG_FIELDS: &[&str] = &["limit"];
8373impl GroupsListArg {
8374    // no _opt deserializer
8375    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8376        mut map: V,
8377    ) -> Result<GroupsListArg, V::Error> {
8378        let mut field_limit = None;
8379        while let Some(key) = map.next_key::<&str>()? {
8380            match key {
8381                "limit" => {
8382                    if field_limit.is_some() {
8383                        return Err(::serde::de::Error::duplicate_field("limit"));
8384                    }
8385                    field_limit = Some(map.next_value()?);
8386                }
8387                _ => {
8388                    // unknown field allowed and ignored
8389                    map.next_value::<::serde_json::Value>()?;
8390                }
8391            }
8392        }
8393        let result = GroupsListArg {
8394            limit: field_limit.unwrap_or(1000),
8395        };
8396        Ok(result)
8397    }
8398
8399    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8400        &self,
8401        s: &mut S::SerializeStruct,
8402    ) -> Result<(), S::Error> {
8403        use serde::ser::SerializeStruct;
8404        if self.limit != 1000 {
8405            s.serialize_field("limit", &self.limit)?;
8406        }
8407        Ok(())
8408    }
8409}
8410
8411impl<'de> ::serde::de::Deserialize<'de> for GroupsListArg {
8412    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8413        // struct deserializer
8414        use serde::de::{MapAccess, Visitor};
8415        struct StructVisitor;
8416        impl<'de> Visitor<'de> for StructVisitor {
8417            type Value = GroupsListArg;
8418            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8419                f.write_str("a GroupsListArg struct")
8420            }
8421            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8422                GroupsListArg::internal_deserialize(map)
8423            }
8424        }
8425        deserializer.deserialize_struct("GroupsListArg", GROUPS_LIST_ARG_FIELDS, StructVisitor)
8426    }
8427}
8428
8429impl ::serde::ser::Serialize for GroupsListArg {
8430    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8431        // struct serializer
8432        use serde::ser::SerializeStruct;
8433        let mut s = serializer.serialize_struct("GroupsListArg", 1)?;
8434        self.internal_serialize::<S>(&mut s)?;
8435        s.end()
8436    }
8437}
8438
8439#[derive(Debug, Clone, PartialEq, Eq)]
8440#[non_exhaustive] // structs may have more fields added in the future.
8441pub struct GroupsListContinueArg {
8442    /// Indicates from what point to get the next set of groups.
8443    pub cursor: String,
8444}
8445
8446impl GroupsListContinueArg {
8447    pub fn new(cursor: String) -> Self {
8448        GroupsListContinueArg {
8449            cursor,
8450        }
8451    }
8452}
8453
8454const GROUPS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
8455impl GroupsListContinueArg {
8456    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8457        map: V,
8458    ) -> Result<GroupsListContinueArg, V::Error> {
8459        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8460    }
8461
8462    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8463        mut map: V,
8464        optional: bool,
8465    ) -> Result<Option<GroupsListContinueArg>, V::Error> {
8466        let mut field_cursor = None;
8467        let mut nothing = true;
8468        while let Some(key) = map.next_key::<&str>()? {
8469            nothing = false;
8470            match key {
8471                "cursor" => {
8472                    if field_cursor.is_some() {
8473                        return Err(::serde::de::Error::duplicate_field("cursor"));
8474                    }
8475                    field_cursor = Some(map.next_value()?);
8476                }
8477                _ => {
8478                    // unknown field allowed and ignored
8479                    map.next_value::<::serde_json::Value>()?;
8480                }
8481            }
8482        }
8483        if optional && nothing {
8484            return Ok(None);
8485        }
8486        let result = GroupsListContinueArg {
8487            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
8488        };
8489        Ok(Some(result))
8490    }
8491
8492    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8493        &self,
8494        s: &mut S::SerializeStruct,
8495    ) -> Result<(), S::Error> {
8496        use serde::ser::SerializeStruct;
8497        s.serialize_field("cursor", &self.cursor)?;
8498        Ok(())
8499    }
8500}
8501
8502impl<'de> ::serde::de::Deserialize<'de> for GroupsListContinueArg {
8503    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8504        // struct deserializer
8505        use serde::de::{MapAccess, Visitor};
8506        struct StructVisitor;
8507        impl<'de> Visitor<'de> for StructVisitor {
8508            type Value = GroupsListContinueArg;
8509            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8510                f.write_str("a GroupsListContinueArg struct")
8511            }
8512            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8513                GroupsListContinueArg::internal_deserialize(map)
8514            }
8515        }
8516        deserializer.deserialize_struct("GroupsListContinueArg", GROUPS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
8517    }
8518}
8519
8520impl ::serde::ser::Serialize for GroupsListContinueArg {
8521    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8522        // struct serializer
8523        use serde::ser::SerializeStruct;
8524        let mut s = serializer.serialize_struct("GroupsListContinueArg", 1)?;
8525        self.internal_serialize::<S>(&mut s)?;
8526        s.end()
8527    }
8528}
8529
8530#[derive(Debug, Clone, PartialEq, Eq)]
8531#[non_exhaustive] // variants may be added in the future
8532pub enum GroupsListContinueError {
8533    /// The cursor is invalid.
8534    InvalidCursor,
8535    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8536    /// typically indicates that this SDK version is out of date.
8537    Other,
8538}
8539
8540impl<'de> ::serde::de::Deserialize<'de> for GroupsListContinueError {
8541    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8542        // union deserializer
8543        use serde::de::{self, MapAccess, Visitor};
8544        struct EnumVisitor;
8545        impl<'de> Visitor<'de> for EnumVisitor {
8546            type Value = GroupsListContinueError;
8547            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8548                f.write_str("a GroupsListContinueError structure")
8549            }
8550            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8551                let tag: &str = match map.next_key()? {
8552                    Some(".tag") => map.next_value()?,
8553                    _ => return Err(de::Error::missing_field(".tag"))
8554                };
8555                let value = match tag {
8556                    "invalid_cursor" => GroupsListContinueError::InvalidCursor,
8557                    _ => GroupsListContinueError::Other,
8558                };
8559                crate::eat_json_fields(&mut map)?;
8560                Ok(value)
8561            }
8562        }
8563        const VARIANTS: &[&str] = &["invalid_cursor",
8564                                    "other"];
8565        deserializer.deserialize_struct("GroupsListContinueError", VARIANTS, EnumVisitor)
8566    }
8567}
8568
8569impl ::serde::ser::Serialize for GroupsListContinueError {
8570    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8571        // union serializer
8572        use serde::ser::SerializeStruct;
8573        match self {
8574            GroupsListContinueError::InvalidCursor => {
8575                // unit
8576                let mut s = serializer.serialize_struct("GroupsListContinueError", 1)?;
8577                s.serialize_field(".tag", "invalid_cursor")?;
8578                s.end()
8579            }
8580            GroupsListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8581        }
8582    }
8583}
8584
8585impl ::std::error::Error for GroupsListContinueError {
8586}
8587
8588impl ::std::fmt::Display for GroupsListContinueError {
8589    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8590        match self {
8591            GroupsListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
8592            _ => write!(f, "{:?}", *self),
8593        }
8594    }
8595}
8596
8597#[derive(Debug, Clone, PartialEq, Eq)]
8598#[non_exhaustive] // structs may have more fields added in the future.
8599pub struct GroupsListResult {
8600    pub groups: Vec<crate::types::team_common::GroupSummary>,
8601    /// Pass the cursor into [`groups_list_continue()`](crate::team::groups_list_continue) to obtain
8602    /// the additional groups.
8603    pub cursor: String,
8604    /// Is true if there are additional groups that have not been returned yet. An additional call
8605    /// to [`groups_list_continue()`](crate::team::groups_list_continue) can retrieve them.
8606    pub has_more: bool,
8607}
8608
8609impl GroupsListResult {
8610    pub fn new(
8611        groups: Vec<crate::types::team_common::GroupSummary>,
8612        cursor: String,
8613        has_more: bool,
8614    ) -> Self {
8615        GroupsListResult {
8616            groups,
8617            cursor,
8618            has_more,
8619        }
8620    }
8621}
8622
8623const GROUPS_LIST_RESULT_FIELDS: &[&str] = &["groups",
8624                                             "cursor",
8625                                             "has_more"];
8626impl GroupsListResult {
8627    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8628        map: V,
8629    ) -> Result<GroupsListResult, V::Error> {
8630        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8631    }
8632
8633    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8634        mut map: V,
8635        optional: bool,
8636    ) -> Result<Option<GroupsListResult>, V::Error> {
8637        let mut field_groups = None;
8638        let mut field_cursor = None;
8639        let mut field_has_more = None;
8640        let mut nothing = true;
8641        while let Some(key) = map.next_key::<&str>()? {
8642            nothing = false;
8643            match key {
8644                "groups" => {
8645                    if field_groups.is_some() {
8646                        return Err(::serde::de::Error::duplicate_field("groups"));
8647                    }
8648                    field_groups = Some(map.next_value()?);
8649                }
8650                "cursor" => {
8651                    if field_cursor.is_some() {
8652                        return Err(::serde::de::Error::duplicate_field("cursor"));
8653                    }
8654                    field_cursor = Some(map.next_value()?);
8655                }
8656                "has_more" => {
8657                    if field_has_more.is_some() {
8658                        return Err(::serde::de::Error::duplicate_field("has_more"));
8659                    }
8660                    field_has_more = Some(map.next_value()?);
8661                }
8662                _ => {
8663                    // unknown field allowed and ignored
8664                    map.next_value::<::serde_json::Value>()?;
8665                }
8666            }
8667        }
8668        if optional && nothing {
8669            return Ok(None);
8670        }
8671        let result = GroupsListResult {
8672            groups: field_groups.ok_or_else(|| ::serde::de::Error::missing_field("groups"))?,
8673            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
8674            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
8675        };
8676        Ok(Some(result))
8677    }
8678
8679    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8680        &self,
8681        s: &mut S::SerializeStruct,
8682    ) -> Result<(), S::Error> {
8683        use serde::ser::SerializeStruct;
8684        s.serialize_field("groups", &self.groups)?;
8685        s.serialize_field("cursor", &self.cursor)?;
8686        s.serialize_field("has_more", &self.has_more)?;
8687        Ok(())
8688    }
8689}
8690
8691impl<'de> ::serde::de::Deserialize<'de> for GroupsListResult {
8692    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8693        // struct deserializer
8694        use serde::de::{MapAccess, Visitor};
8695        struct StructVisitor;
8696        impl<'de> Visitor<'de> for StructVisitor {
8697            type Value = GroupsListResult;
8698            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8699                f.write_str("a GroupsListResult struct")
8700            }
8701            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8702                GroupsListResult::internal_deserialize(map)
8703            }
8704        }
8705        deserializer.deserialize_struct("GroupsListResult", GROUPS_LIST_RESULT_FIELDS, StructVisitor)
8706    }
8707}
8708
8709impl ::serde::ser::Serialize for GroupsListResult {
8710    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8711        // struct serializer
8712        use serde::ser::SerializeStruct;
8713        let mut s = serializer.serialize_struct("GroupsListResult", 3)?;
8714        self.internal_serialize::<S>(&mut s)?;
8715        s.end()
8716    }
8717}
8718
8719#[derive(Debug, Clone, PartialEq, Eq)]
8720#[non_exhaustive] // structs may have more fields added in the future.
8721pub struct GroupsMembersListArg {
8722    /// The group whose members are to be listed.
8723    pub group: GroupSelector,
8724    /// Number of results to return per call.
8725    pub limit: u32,
8726}
8727
8728impl GroupsMembersListArg {
8729    pub fn new(group: GroupSelector) -> Self {
8730        GroupsMembersListArg {
8731            group,
8732            limit: 1000,
8733        }
8734    }
8735
8736    pub fn with_limit(mut self, value: u32) -> Self {
8737        self.limit = value;
8738        self
8739    }
8740}
8741
8742const GROUPS_MEMBERS_LIST_ARG_FIELDS: &[&str] = &["group",
8743                                                  "limit"];
8744impl GroupsMembersListArg {
8745    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8746        map: V,
8747    ) -> Result<GroupsMembersListArg, V::Error> {
8748        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8749    }
8750
8751    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8752        mut map: V,
8753        optional: bool,
8754    ) -> Result<Option<GroupsMembersListArg>, V::Error> {
8755        let mut field_group = None;
8756        let mut field_limit = None;
8757        let mut nothing = true;
8758        while let Some(key) = map.next_key::<&str>()? {
8759            nothing = false;
8760            match key {
8761                "group" => {
8762                    if field_group.is_some() {
8763                        return Err(::serde::de::Error::duplicate_field("group"));
8764                    }
8765                    field_group = Some(map.next_value()?);
8766                }
8767                "limit" => {
8768                    if field_limit.is_some() {
8769                        return Err(::serde::de::Error::duplicate_field("limit"));
8770                    }
8771                    field_limit = Some(map.next_value()?);
8772                }
8773                _ => {
8774                    // unknown field allowed and ignored
8775                    map.next_value::<::serde_json::Value>()?;
8776                }
8777            }
8778        }
8779        if optional && nothing {
8780            return Ok(None);
8781        }
8782        let result = GroupsMembersListArg {
8783            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
8784            limit: field_limit.unwrap_or(1000),
8785        };
8786        Ok(Some(result))
8787    }
8788
8789    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8790        &self,
8791        s: &mut S::SerializeStruct,
8792    ) -> Result<(), S::Error> {
8793        use serde::ser::SerializeStruct;
8794        s.serialize_field("group", &self.group)?;
8795        if self.limit != 1000 {
8796            s.serialize_field("limit", &self.limit)?;
8797        }
8798        Ok(())
8799    }
8800}
8801
8802impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListArg {
8803    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8804        // struct deserializer
8805        use serde::de::{MapAccess, Visitor};
8806        struct StructVisitor;
8807        impl<'de> Visitor<'de> for StructVisitor {
8808            type Value = GroupsMembersListArg;
8809            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8810                f.write_str("a GroupsMembersListArg struct")
8811            }
8812            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8813                GroupsMembersListArg::internal_deserialize(map)
8814            }
8815        }
8816        deserializer.deserialize_struct("GroupsMembersListArg", GROUPS_MEMBERS_LIST_ARG_FIELDS, StructVisitor)
8817    }
8818}
8819
8820impl ::serde::ser::Serialize for GroupsMembersListArg {
8821    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8822        // struct serializer
8823        use serde::ser::SerializeStruct;
8824        let mut s = serializer.serialize_struct("GroupsMembersListArg", 2)?;
8825        self.internal_serialize::<S>(&mut s)?;
8826        s.end()
8827    }
8828}
8829
8830#[derive(Debug, Clone, PartialEq, Eq)]
8831#[non_exhaustive] // structs may have more fields added in the future.
8832pub struct GroupsMembersListContinueArg {
8833    /// Indicates from what point to get the next set of groups.
8834    pub cursor: String,
8835}
8836
8837impl GroupsMembersListContinueArg {
8838    pub fn new(cursor: String) -> Self {
8839        GroupsMembersListContinueArg {
8840            cursor,
8841        }
8842    }
8843}
8844
8845const GROUPS_MEMBERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
8846impl GroupsMembersListContinueArg {
8847    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8848        map: V,
8849    ) -> Result<GroupsMembersListContinueArg, V::Error> {
8850        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8851    }
8852
8853    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8854        mut map: V,
8855        optional: bool,
8856    ) -> Result<Option<GroupsMembersListContinueArg>, V::Error> {
8857        let mut field_cursor = None;
8858        let mut nothing = true;
8859        while let Some(key) = map.next_key::<&str>()? {
8860            nothing = false;
8861            match key {
8862                "cursor" => {
8863                    if field_cursor.is_some() {
8864                        return Err(::serde::de::Error::duplicate_field("cursor"));
8865                    }
8866                    field_cursor = Some(map.next_value()?);
8867                }
8868                _ => {
8869                    // unknown field allowed and ignored
8870                    map.next_value::<::serde_json::Value>()?;
8871                }
8872            }
8873        }
8874        if optional && nothing {
8875            return Ok(None);
8876        }
8877        let result = GroupsMembersListContinueArg {
8878            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
8879        };
8880        Ok(Some(result))
8881    }
8882
8883    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8884        &self,
8885        s: &mut S::SerializeStruct,
8886    ) -> Result<(), S::Error> {
8887        use serde::ser::SerializeStruct;
8888        s.serialize_field("cursor", &self.cursor)?;
8889        Ok(())
8890    }
8891}
8892
8893impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListContinueArg {
8894    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8895        // struct deserializer
8896        use serde::de::{MapAccess, Visitor};
8897        struct StructVisitor;
8898        impl<'de> Visitor<'de> for StructVisitor {
8899            type Value = GroupsMembersListContinueArg;
8900            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8901                f.write_str("a GroupsMembersListContinueArg struct")
8902            }
8903            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8904                GroupsMembersListContinueArg::internal_deserialize(map)
8905            }
8906        }
8907        deserializer.deserialize_struct("GroupsMembersListContinueArg", GROUPS_MEMBERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
8908    }
8909}
8910
8911impl ::serde::ser::Serialize for GroupsMembersListContinueArg {
8912    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8913        // struct serializer
8914        use serde::ser::SerializeStruct;
8915        let mut s = serializer.serialize_struct("GroupsMembersListContinueArg", 1)?;
8916        self.internal_serialize::<S>(&mut s)?;
8917        s.end()
8918    }
8919}
8920
8921#[derive(Debug, Clone, PartialEq, Eq)]
8922#[non_exhaustive] // variants may be added in the future
8923pub enum GroupsMembersListContinueError {
8924    /// The cursor is invalid.
8925    InvalidCursor,
8926    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8927    /// typically indicates that this SDK version is out of date.
8928    Other,
8929}
8930
8931impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListContinueError {
8932    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8933        // union deserializer
8934        use serde::de::{self, MapAccess, Visitor};
8935        struct EnumVisitor;
8936        impl<'de> Visitor<'de> for EnumVisitor {
8937            type Value = GroupsMembersListContinueError;
8938            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8939                f.write_str("a GroupsMembersListContinueError structure")
8940            }
8941            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8942                let tag: &str = match map.next_key()? {
8943                    Some(".tag") => map.next_value()?,
8944                    _ => return Err(de::Error::missing_field(".tag"))
8945                };
8946                let value = match tag {
8947                    "invalid_cursor" => GroupsMembersListContinueError::InvalidCursor,
8948                    _ => GroupsMembersListContinueError::Other,
8949                };
8950                crate::eat_json_fields(&mut map)?;
8951                Ok(value)
8952            }
8953        }
8954        const VARIANTS: &[&str] = &["invalid_cursor",
8955                                    "other"];
8956        deserializer.deserialize_struct("GroupsMembersListContinueError", VARIANTS, EnumVisitor)
8957    }
8958}
8959
8960impl ::serde::ser::Serialize for GroupsMembersListContinueError {
8961    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8962        // union serializer
8963        use serde::ser::SerializeStruct;
8964        match self {
8965            GroupsMembersListContinueError::InvalidCursor => {
8966                // unit
8967                let mut s = serializer.serialize_struct("GroupsMembersListContinueError", 1)?;
8968                s.serialize_field(".tag", "invalid_cursor")?;
8969                s.end()
8970            }
8971            GroupsMembersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8972        }
8973    }
8974}
8975
8976impl ::std::error::Error for GroupsMembersListContinueError {
8977}
8978
8979impl ::std::fmt::Display for GroupsMembersListContinueError {
8980    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8981        match self {
8982            GroupsMembersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
8983            _ => write!(f, "{:?}", *self),
8984        }
8985    }
8986}
8987
8988#[derive(Debug, Clone, PartialEq, Eq)]
8989#[non_exhaustive] // structs may have more fields added in the future.
8990pub struct GroupsMembersListResult {
8991    pub members: Vec<GroupMemberInfo>,
8992    /// Pass the cursor into
8993    /// [`groups_members_list_continue()`](crate::team::groups_members_list_continue) to obtain
8994    /// additional group members.
8995    pub cursor: String,
8996    /// Is true if there are additional group members that have not been returned yet. An additional
8997    /// call to [`groups_members_list_continue()`](crate::team::groups_members_list_continue) can
8998    /// retrieve them.
8999    pub has_more: bool,
9000}
9001
9002impl GroupsMembersListResult {
9003    pub fn new(members: Vec<GroupMemberInfo>, cursor: String, has_more: bool) -> Self {
9004        GroupsMembersListResult {
9005            members,
9006            cursor,
9007            has_more,
9008        }
9009    }
9010}
9011
9012const GROUPS_MEMBERS_LIST_RESULT_FIELDS: &[&str] = &["members",
9013                                                     "cursor",
9014                                                     "has_more"];
9015impl GroupsMembersListResult {
9016    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9017        map: V,
9018    ) -> Result<GroupsMembersListResult, V::Error> {
9019        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9020    }
9021
9022    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9023        mut map: V,
9024        optional: bool,
9025    ) -> Result<Option<GroupsMembersListResult>, V::Error> {
9026        let mut field_members = None;
9027        let mut field_cursor = None;
9028        let mut field_has_more = None;
9029        let mut nothing = true;
9030        while let Some(key) = map.next_key::<&str>()? {
9031            nothing = false;
9032            match key {
9033                "members" => {
9034                    if field_members.is_some() {
9035                        return Err(::serde::de::Error::duplicate_field("members"));
9036                    }
9037                    field_members = Some(map.next_value()?);
9038                }
9039                "cursor" => {
9040                    if field_cursor.is_some() {
9041                        return Err(::serde::de::Error::duplicate_field("cursor"));
9042                    }
9043                    field_cursor = Some(map.next_value()?);
9044                }
9045                "has_more" => {
9046                    if field_has_more.is_some() {
9047                        return Err(::serde::de::Error::duplicate_field("has_more"));
9048                    }
9049                    field_has_more = Some(map.next_value()?);
9050                }
9051                _ => {
9052                    // unknown field allowed and ignored
9053                    map.next_value::<::serde_json::Value>()?;
9054                }
9055            }
9056        }
9057        if optional && nothing {
9058            return Ok(None);
9059        }
9060        let result = GroupsMembersListResult {
9061            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
9062            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
9063            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
9064        };
9065        Ok(Some(result))
9066    }
9067
9068    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9069        &self,
9070        s: &mut S::SerializeStruct,
9071    ) -> Result<(), S::Error> {
9072        use serde::ser::SerializeStruct;
9073        s.serialize_field("members", &self.members)?;
9074        s.serialize_field("cursor", &self.cursor)?;
9075        s.serialize_field("has_more", &self.has_more)?;
9076        Ok(())
9077    }
9078}
9079
9080impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListResult {
9081    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9082        // struct deserializer
9083        use serde::de::{MapAccess, Visitor};
9084        struct StructVisitor;
9085        impl<'de> Visitor<'de> for StructVisitor {
9086            type Value = GroupsMembersListResult;
9087            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9088                f.write_str("a GroupsMembersListResult struct")
9089            }
9090            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9091                GroupsMembersListResult::internal_deserialize(map)
9092            }
9093        }
9094        deserializer.deserialize_struct("GroupsMembersListResult", GROUPS_MEMBERS_LIST_RESULT_FIELDS, StructVisitor)
9095    }
9096}
9097
9098impl ::serde::ser::Serialize for GroupsMembersListResult {
9099    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9100        // struct serializer
9101        use serde::ser::SerializeStruct;
9102        let mut s = serializer.serialize_struct("GroupsMembersListResult", 3)?;
9103        self.internal_serialize::<S>(&mut s)?;
9104        s.end()
9105    }
9106}
9107
9108#[derive(Debug, Clone, PartialEq, Eq)]
9109#[non_exhaustive] // variants may be added in the future
9110pub enum GroupsPollError {
9111    /// The job ID is invalid.
9112    InvalidAsyncJobId,
9113    /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action
9114    /// you were taking succeeded, and if not, try again. This should happen very rarely.
9115    InternalError,
9116    /// You are not allowed to poll this job.
9117    AccessDenied,
9118    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9119    /// typically indicates that this SDK version is out of date.
9120    Other,
9121}
9122
9123impl<'de> ::serde::de::Deserialize<'de> for GroupsPollError {
9124    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9125        // union deserializer
9126        use serde::de::{self, MapAccess, Visitor};
9127        struct EnumVisitor;
9128        impl<'de> Visitor<'de> for EnumVisitor {
9129            type Value = GroupsPollError;
9130            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9131                f.write_str("a GroupsPollError structure")
9132            }
9133            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9134                let tag: &str = match map.next_key()? {
9135                    Some(".tag") => map.next_value()?,
9136                    _ => return Err(de::Error::missing_field(".tag"))
9137                };
9138                let value = match tag {
9139                    "invalid_async_job_id" => GroupsPollError::InvalidAsyncJobId,
9140                    "internal_error" => GroupsPollError::InternalError,
9141                    "access_denied" => GroupsPollError::AccessDenied,
9142                    _ => GroupsPollError::Other,
9143                };
9144                crate::eat_json_fields(&mut map)?;
9145                Ok(value)
9146            }
9147        }
9148        const VARIANTS: &[&str] = &["invalid_async_job_id",
9149                                    "internal_error",
9150                                    "other",
9151                                    "access_denied"];
9152        deserializer.deserialize_struct("GroupsPollError", VARIANTS, EnumVisitor)
9153    }
9154}
9155
9156impl ::serde::ser::Serialize for GroupsPollError {
9157    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9158        // union serializer
9159        use serde::ser::SerializeStruct;
9160        match self {
9161            GroupsPollError::InvalidAsyncJobId => {
9162                // unit
9163                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
9164                s.serialize_field(".tag", "invalid_async_job_id")?;
9165                s.end()
9166            }
9167            GroupsPollError::InternalError => {
9168                // unit
9169                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
9170                s.serialize_field(".tag", "internal_error")?;
9171                s.end()
9172            }
9173            GroupsPollError::AccessDenied => {
9174                // unit
9175                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
9176                s.serialize_field(".tag", "access_denied")?;
9177                s.end()
9178            }
9179            GroupsPollError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9180        }
9181    }
9182}
9183
9184impl ::std::error::Error for GroupsPollError {
9185}
9186
9187impl ::std::fmt::Display for GroupsPollError {
9188    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9189        match self {
9190            GroupsPollError::InvalidAsyncJobId => f.write_str("The job ID is invalid."),
9191            GroupsPollError::InternalError => f.write_str("Something went wrong with the job on Dropbox's end. You'll need to verify that the action you were taking succeeded, and if not, try again. This should happen very rarely."),
9192            GroupsPollError::AccessDenied => f.write_str("You are not allowed to poll this job."),
9193            _ => write!(f, "{:?}", *self),
9194        }
9195    }
9196}
9197
9198// union extends crate::types::dbx_async::PollError
9199impl From<crate::types::dbx_async::PollError> for GroupsPollError {
9200    fn from(parent: crate::types::dbx_async::PollError) -> Self {
9201        match parent {
9202            crate::types::dbx_async::PollError::InvalidAsyncJobId => GroupsPollError::InvalidAsyncJobId,
9203            crate::types::dbx_async::PollError::InternalError => GroupsPollError::InternalError,
9204            crate::types::dbx_async::PollError::Other => GroupsPollError::Other,
9205        }
9206    }
9207}
9208/// Argument for selecting a list of groups, either by group_ids, or external group IDs.
9209#[derive(Debug, Clone, PartialEq, Eq)]
9210pub enum GroupsSelector {
9211    /// List of group IDs.
9212    GroupIds(Vec<crate::types::team_common::GroupId>),
9213    /// List of external IDs of groups.
9214    GroupExternalIds(Vec<String>),
9215}
9216
9217impl<'de> ::serde::de::Deserialize<'de> for GroupsSelector {
9218    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9219        // union deserializer
9220        use serde::de::{self, MapAccess, Visitor};
9221        struct EnumVisitor;
9222        impl<'de> Visitor<'de> for EnumVisitor {
9223            type Value = GroupsSelector;
9224            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9225                f.write_str("a GroupsSelector structure")
9226            }
9227            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9228                let tag: &str = match map.next_key()? {
9229                    Some(".tag") => map.next_value()?,
9230                    _ => return Err(de::Error::missing_field(".tag"))
9231                };
9232                let value = match tag {
9233                    "group_ids" => {
9234                        match map.next_key()? {
9235                            Some("group_ids") => GroupsSelector::GroupIds(map.next_value()?),
9236                            None => return Err(de::Error::missing_field("group_ids")),
9237                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
9238                        }
9239                    }
9240                    "group_external_ids" => {
9241                        match map.next_key()? {
9242                            Some("group_external_ids") => GroupsSelector::GroupExternalIds(map.next_value()?),
9243                            None => return Err(de::Error::missing_field("group_external_ids")),
9244                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
9245                        }
9246                    }
9247                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
9248                };
9249                crate::eat_json_fields(&mut map)?;
9250                Ok(value)
9251            }
9252        }
9253        const VARIANTS: &[&str] = &["group_ids",
9254                                    "group_external_ids"];
9255        deserializer.deserialize_struct("GroupsSelector", VARIANTS, EnumVisitor)
9256    }
9257}
9258
9259impl ::serde::ser::Serialize for GroupsSelector {
9260    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9261        // union serializer
9262        use serde::ser::SerializeStruct;
9263        match self {
9264            GroupsSelector::GroupIds(x) => {
9265                // primitive
9266                let mut s = serializer.serialize_struct("GroupsSelector", 2)?;
9267                s.serialize_field(".tag", "group_ids")?;
9268                s.serialize_field("group_ids", x)?;
9269                s.end()
9270            }
9271            GroupsSelector::GroupExternalIds(x) => {
9272                // primitive
9273                let mut s = serializer.serialize_struct("GroupsSelector", 2)?;
9274                s.serialize_field(".tag", "group_external_ids")?;
9275                s.serialize_field("group_external_ids", x)?;
9276                s.end()
9277            }
9278        }
9279    }
9280}
9281
9282/// The value for [`Feature::HasDistinctMemberHomes`].
9283#[derive(Debug, Clone, PartialEq, Eq)]
9284#[non_exhaustive] // variants may be added in the future
9285pub enum HasDistinctMemberHomesValue {
9286    /// Does this team have distinct team member homes.
9287    HasDistinctMemberHomes(bool),
9288    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9289    /// typically indicates that this SDK version is out of date.
9290    Other,
9291}
9292
9293impl<'de> ::serde::de::Deserialize<'de> for HasDistinctMemberHomesValue {
9294    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9295        // union deserializer
9296        use serde::de::{self, MapAccess, Visitor};
9297        struct EnumVisitor;
9298        impl<'de> Visitor<'de> for EnumVisitor {
9299            type Value = HasDistinctMemberHomesValue;
9300            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9301                f.write_str("a HasDistinctMemberHomesValue structure")
9302            }
9303            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9304                let tag: &str = match map.next_key()? {
9305                    Some(".tag") => map.next_value()?,
9306                    _ => return Err(de::Error::missing_field(".tag"))
9307                };
9308                let value = match tag {
9309                    "has_distinct_member_homes" => {
9310                        match map.next_key()? {
9311                            Some("has_distinct_member_homes") => HasDistinctMemberHomesValue::HasDistinctMemberHomes(map.next_value()?),
9312                            None => return Err(de::Error::missing_field("has_distinct_member_homes")),
9313                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
9314                        }
9315                    }
9316                    _ => HasDistinctMemberHomesValue::Other,
9317                };
9318                crate::eat_json_fields(&mut map)?;
9319                Ok(value)
9320            }
9321        }
9322        const VARIANTS: &[&str] = &["has_distinct_member_homes",
9323                                    "other"];
9324        deserializer.deserialize_struct("HasDistinctMemberHomesValue", VARIANTS, EnumVisitor)
9325    }
9326}
9327
9328impl ::serde::ser::Serialize for HasDistinctMemberHomesValue {
9329    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9330        // union serializer
9331        use serde::ser::SerializeStruct;
9332        match self {
9333            HasDistinctMemberHomesValue::HasDistinctMemberHomes(x) => {
9334                // primitive
9335                let mut s = serializer.serialize_struct("HasDistinctMemberHomesValue", 2)?;
9336                s.serialize_field(".tag", "has_distinct_member_homes")?;
9337                s.serialize_field("has_distinct_member_homes", x)?;
9338                s.end()
9339            }
9340            HasDistinctMemberHomesValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9341        }
9342    }
9343}
9344
9345/// The value for [`Feature::HasTeamFileEvents`].
9346#[derive(Debug, Clone, PartialEq, Eq)]
9347#[non_exhaustive] // variants may be added in the future
9348pub enum HasTeamFileEventsValue {
9349    /// Does this team have file events.
9350    Enabled(bool),
9351    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9352    /// typically indicates that this SDK version is out of date.
9353    Other,
9354}
9355
9356impl<'de> ::serde::de::Deserialize<'de> for HasTeamFileEventsValue {
9357    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9358        // union deserializer
9359        use serde::de::{self, MapAccess, Visitor};
9360        struct EnumVisitor;
9361        impl<'de> Visitor<'de> for EnumVisitor {
9362            type Value = HasTeamFileEventsValue;
9363            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9364                f.write_str("a HasTeamFileEventsValue structure")
9365            }
9366            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9367                let tag: &str = match map.next_key()? {
9368                    Some(".tag") => map.next_value()?,
9369                    _ => return Err(de::Error::missing_field(".tag"))
9370                };
9371                let value = match tag {
9372                    "enabled" => {
9373                        match map.next_key()? {
9374                            Some("enabled") => HasTeamFileEventsValue::Enabled(map.next_value()?),
9375                            None => return Err(de::Error::missing_field("enabled")),
9376                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
9377                        }
9378                    }
9379                    _ => HasTeamFileEventsValue::Other,
9380                };
9381                crate::eat_json_fields(&mut map)?;
9382                Ok(value)
9383            }
9384        }
9385        const VARIANTS: &[&str] = &["enabled",
9386                                    "other"];
9387        deserializer.deserialize_struct("HasTeamFileEventsValue", VARIANTS, EnumVisitor)
9388    }
9389}
9390
9391impl ::serde::ser::Serialize for HasTeamFileEventsValue {
9392    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9393        // union serializer
9394        use serde::ser::SerializeStruct;
9395        match self {
9396            HasTeamFileEventsValue::Enabled(x) => {
9397                // primitive
9398                let mut s = serializer.serialize_struct("HasTeamFileEventsValue", 2)?;
9399                s.serialize_field(".tag", "enabled")?;
9400                s.serialize_field("enabled", x)?;
9401                s.end()
9402            }
9403            HasTeamFileEventsValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9404        }
9405    }
9406}
9407
9408/// The value for [`Feature::HasTeamSelectiveSync`].
9409#[derive(Debug, Clone, PartialEq, Eq)]
9410#[non_exhaustive] // variants may be added in the future
9411pub enum HasTeamSelectiveSyncValue {
9412    /// Does this team have team selective sync enabled.
9413    HasTeamSelectiveSync(bool),
9414    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9415    /// typically indicates that this SDK version is out of date.
9416    Other,
9417}
9418
9419impl<'de> ::serde::de::Deserialize<'de> for HasTeamSelectiveSyncValue {
9420    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9421        // union deserializer
9422        use serde::de::{self, MapAccess, Visitor};
9423        struct EnumVisitor;
9424        impl<'de> Visitor<'de> for EnumVisitor {
9425            type Value = HasTeamSelectiveSyncValue;
9426            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9427                f.write_str("a HasTeamSelectiveSyncValue structure")
9428            }
9429            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9430                let tag: &str = match map.next_key()? {
9431                    Some(".tag") => map.next_value()?,
9432                    _ => return Err(de::Error::missing_field(".tag"))
9433                };
9434                let value = match tag {
9435                    "has_team_selective_sync" => {
9436                        match map.next_key()? {
9437                            Some("has_team_selective_sync") => HasTeamSelectiveSyncValue::HasTeamSelectiveSync(map.next_value()?),
9438                            None => return Err(de::Error::missing_field("has_team_selective_sync")),
9439                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
9440                        }
9441                    }
9442                    _ => HasTeamSelectiveSyncValue::Other,
9443                };
9444                crate::eat_json_fields(&mut map)?;
9445                Ok(value)
9446            }
9447        }
9448        const VARIANTS: &[&str] = &["has_team_selective_sync",
9449                                    "other"];
9450        deserializer.deserialize_struct("HasTeamSelectiveSyncValue", VARIANTS, EnumVisitor)
9451    }
9452}
9453
9454impl ::serde::ser::Serialize for HasTeamSelectiveSyncValue {
9455    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9456        // union serializer
9457        use serde::ser::SerializeStruct;
9458        match self {
9459            HasTeamSelectiveSyncValue::HasTeamSelectiveSync(x) => {
9460                // primitive
9461                let mut s = serializer.serialize_struct("HasTeamSelectiveSyncValue", 2)?;
9462                s.serialize_field(".tag", "has_team_selective_sync")?;
9463                s.serialize_field("has_team_selective_sync", x)?;
9464                s.end()
9465            }
9466            HasTeamSelectiveSyncValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9467        }
9468    }
9469}
9470
9471/// The value for [`Feature::HasTeamSharedDropbox`].
9472#[derive(Debug, Clone, PartialEq, Eq)]
9473#[non_exhaustive] // variants may be added in the future
9474pub enum HasTeamSharedDropboxValue {
9475    /// Does this team have a shared team root.
9476    HasTeamSharedDropbox(bool),
9477    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9478    /// typically indicates that this SDK version is out of date.
9479    Other,
9480}
9481
9482impl<'de> ::serde::de::Deserialize<'de> for HasTeamSharedDropboxValue {
9483    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9484        // union deserializer
9485        use serde::de::{self, MapAccess, Visitor};
9486        struct EnumVisitor;
9487        impl<'de> Visitor<'de> for EnumVisitor {
9488            type Value = HasTeamSharedDropboxValue;
9489            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9490                f.write_str("a HasTeamSharedDropboxValue structure")
9491            }
9492            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9493                let tag: &str = match map.next_key()? {
9494                    Some(".tag") => map.next_value()?,
9495                    _ => return Err(de::Error::missing_field(".tag"))
9496                };
9497                let value = match tag {
9498                    "has_team_shared_dropbox" => {
9499                        match map.next_key()? {
9500                            Some("has_team_shared_dropbox") => HasTeamSharedDropboxValue::HasTeamSharedDropbox(map.next_value()?),
9501                            None => return Err(de::Error::missing_field("has_team_shared_dropbox")),
9502                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
9503                        }
9504                    }
9505                    _ => HasTeamSharedDropboxValue::Other,
9506                };
9507                crate::eat_json_fields(&mut map)?;
9508                Ok(value)
9509            }
9510        }
9511        const VARIANTS: &[&str] = &["has_team_shared_dropbox",
9512                                    "other"];
9513        deserializer.deserialize_struct("HasTeamSharedDropboxValue", VARIANTS, EnumVisitor)
9514    }
9515}
9516
9517impl ::serde::ser::Serialize for HasTeamSharedDropboxValue {
9518    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9519        // union serializer
9520        use serde::ser::SerializeStruct;
9521        match self {
9522            HasTeamSharedDropboxValue::HasTeamSharedDropbox(x) => {
9523                // primitive
9524                let mut s = serializer.serialize_struct("HasTeamSharedDropboxValue", 2)?;
9525                s.serialize_field(".tag", "has_team_shared_dropbox")?;
9526                s.serialize_field("has_team_shared_dropbox", x)?;
9527                s.end()
9528            }
9529            HasTeamSharedDropboxValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9530        }
9531    }
9532}
9533
9534#[derive(Debug, Clone, PartialEq, Eq)]
9535#[non_exhaustive] // structs may have more fields added in the future.
9536pub struct IncludeMembersArg {
9537    /// Whether to return the list of members in the group. Note that the default value will cause
9538    /// all the group members to be returned in the response. This may take a long time for large
9539    /// groups.
9540    pub return_members: bool,
9541}
9542
9543impl Default for IncludeMembersArg {
9544    fn default() -> Self {
9545        IncludeMembersArg {
9546            return_members: true,
9547        }
9548    }
9549}
9550
9551impl IncludeMembersArg {
9552    pub fn with_return_members(mut self, value: bool) -> Self {
9553        self.return_members = value;
9554        self
9555    }
9556}
9557
9558const INCLUDE_MEMBERS_ARG_FIELDS: &[&str] = &["return_members"];
9559impl IncludeMembersArg {
9560    // no _opt deserializer
9561    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9562        mut map: V,
9563    ) -> Result<IncludeMembersArg, V::Error> {
9564        let mut field_return_members = None;
9565        while let Some(key) = map.next_key::<&str>()? {
9566            match key {
9567                "return_members" => {
9568                    if field_return_members.is_some() {
9569                        return Err(::serde::de::Error::duplicate_field("return_members"));
9570                    }
9571                    field_return_members = Some(map.next_value()?);
9572                }
9573                _ => {
9574                    // unknown field allowed and ignored
9575                    map.next_value::<::serde_json::Value>()?;
9576                }
9577            }
9578        }
9579        let result = IncludeMembersArg {
9580            return_members: field_return_members.unwrap_or(true),
9581        };
9582        Ok(result)
9583    }
9584
9585    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9586        &self,
9587        s: &mut S::SerializeStruct,
9588    ) -> Result<(), S::Error> {
9589        use serde::ser::SerializeStruct;
9590        if !self.return_members {
9591            s.serialize_field("return_members", &self.return_members)?;
9592        }
9593        Ok(())
9594    }
9595}
9596
9597impl<'de> ::serde::de::Deserialize<'de> for IncludeMembersArg {
9598    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9599        // struct deserializer
9600        use serde::de::{MapAccess, Visitor};
9601        struct StructVisitor;
9602        impl<'de> Visitor<'de> for StructVisitor {
9603            type Value = IncludeMembersArg;
9604            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9605                f.write_str("a IncludeMembersArg struct")
9606            }
9607            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9608                IncludeMembersArg::internal_deserialize(map)
9609            }
9610        }
9611        deserializer.deserialize_struct("IncludeMembersArg", INCLUDE_MEMBERS_ARG_FIELDS, StructVisitor)
9612    }
9613}
9614
9615impl ::serde::ser::Serialize for IncludeMembersArg {
9616    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9617        // struct serializer
9618        use serde::ser::SerializeStruct;
9619        let mut s = serializer.serialize_struct("IncludeMembersArg", 1)?;
9620        self.internal_serialize::<S>(&mut s)?;
9621        s.end()
9622    }
9623}
9624
9625#[derive(Debug, Clone, PartialEq, Eq)]
9626#[non_exhaustive] // structs may have more fields added in the future.
9627pub struct LegalHoldHeldRevisionMetadata {
9628    /// The held revision filename.
9629    pub new_filename: String,
9630    /// The id of the held revision.
9631    pub original_revision_id: crate::types::files::Rev,
9632    /// The original path of the held revision.
9633    pub original_file_path: Path,
9634    /// The last time the file was modified on Dropbox.
9635    pub server_modified: crate::types::common::DropboxTimestamp,
9636    /// The member id of the revision's author.
9637    pub author_member_id: crate::types::team_common::TeamMemberId,
9638    /// The member status of the revision's author.
9639    pub author_member_status: TeamMemberStatus,
9640    /// The email address of the held revision author.
9641    pub author_email: crate::types::common::EmailAddress,
9642    /// The type of the held revision's file.
9643    pub file_type: String,
9644    /// The file size in bytes.
9645    pub size: u64,
9646    /// A hash of the file content. This field can be used to verify data integrity. For more
9647    /// information see our [Content
9648    /// hash](https://www.dropbox.com/developers/reference/content-hash) page.
9649    pub content_hash: crate::types::files::Sha256HexHash,
9650}
9651
9652impl LegalHoldHeldRevisionMetadata {
9653    pub fn new(
9654        new_filename: String,
9655        original_revision_id: crate::types::files::Rev,
9656        original_file_path: Path,
9657        server_modified: crate::types::common::DropboxTimestamp,
9658        author_member_id: crate::types::team_common::TeamMemberId,
9659        author_member_status: TeamMemberStatus,
9660        author_email: crate::types::common::EmailAddress,
9661        file_type: String,
9662        size: u64,
9663        content_hash: crate::types::files::Sha256HexHash,
9664    ) -> Self {
9665        LegalHoldHeldRevisionMetadata {
9666            new_filename,
9667            original_revision_id,
9668            original_file_path,
9669            server_modified,
9670            author_member_id,
9671            author_member_status,
9672            author_email,
9673            file_type,
9674            size,
9675            content_hash,
9676        }
9677    }
9678}
9679
9680const LEGAL_HOLD_HELD_REVISION_METADATA_FIELDS: &[&str] = &["new_filename",
9681                                                            "original_revision_id",
9682                                                            "original_file_path",
9683                                                            "server_modified",
9684                                                            "author_member_id",
9685                                                            "author_member_status",
9686                                                            "author_email",
9687                                                            "file_type",
9688                                                            "size",
9689                                                            "content_hash"];
9690impl LegalHoldHeldRevisionMetadata {
9691    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9692        map: V,
9693    ) -> Result<LegalHoldHeldRevisionMetadata, V::Error> {
9694        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9695    }
9696
9697    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9698        mut map: V,
9699        optional: bool,
9700    ) -> Result<Option<LegalHoldHeldRevisionMetadata>, V::Error> {
9701        let mut field_new_filename = None;
9702        let mut field_original_revision_id = None;
9703        let mut field_original_file_path = None;
9704        let mut field_server_modified = None;
9705        let mut field_author_member_id = None;
9706        let mut field_author_member_status = None;
9707        let mut field_author_email = None;
9708        let mut field_file_type = None;
9709        let mut field_size = None;
9710        let mut field_content_hash = None;
9711        let mut nothing = true;
9712        while let Some(key) = map.next_key::<&str>()? {
9713            nothing = false;
9714            match key {
9715                "new_filename" => {
9716                    if field_new_filename.is_some() {
9717                        return Err(::serde::de::Error::duplicate_field("new_filename"));
9718                    }
9719                    field_new_filename = Some(map.next_value()?);
9720                }
9721                "original_revision_id" => {
9722                    if field_original_revision_id.is_some() {
9723                        return Err(::serde::de::Error::duplicate_field("original_revision_id"));
9724                    }
9725                    field_original_revision_id = Some(map.next_value()?);
9726                }
9727                "original_file_path" => {
9728                    if field_original_file_path.is_some() {
9729                        return Err(::serde::de::Error::duplicate_field("original_file_path"));
9730                    }
9731                    field_original_file_path = Some(map.next_value()?);
9732                }
9733                "server_modified" => {
9734                    if field_server_modified.is_some() {
9735                        return Err(::serde::de::Error::duplicate_field("server_modified"));
9736                    }
9737                    field_server_modified = Some(map.next_value()?);
9738                }
9739                "author_member_id" => {
9740                    if field_author_member_id.is_some() {
9741                        return Err(::serde::de::Error::duplicate_field("author_member_id"));
9742                    }
9743                    field_author_member_id = Some(map.next_value()?);
9744                }
9745                "author_member_status" => {
9746                    if field_author_member_status.is_some() {
9747                        return Err(::serde::de::Error::duplicate_field("author_member_status"));
9748                    }
9749                    field_author_member_status = Some(map.next_value()?);
9750                }
9751                "author_email" => {
9752                    if field_author_email.is_some() {
9753                        return Err(::serde::de::Error::duplicate_field("author_email"));
9754                    }
9755                    field_author_email = Some(map.next_value()?);
9756                }
9757                "file_type" => {
9758                    if field_file_type.is_some() {
9759                        return Err(::serde::de::Error::duplicate_field("file_type"));
9760                    }
9761                    field_file_type = Some(map.next_value()?);
9762                }
9763                "size" => {
9764                    if field_size.is_some() {
9765                        return Err(::serde::de::Error::duplicate_field("size"));
9766                    }
9767                    field_size = Some(map.next_value()?);
9768                }
9769                "content_hash" => {
9770                    if field_content_hash.is_some() {
9771                        return Err(::serde::de::Error::duplicate_field("content_hash"));
9772                    }
9773                    field_content_hash = Some(map.next_value()?);
9774                }
9775                _ => {
9776                    // unknown field allowed and ignored
9777                    map.next_value::<::serde_json::Value>()?;
9778                }
9779            }
9780        }
9781        if optional && nothing {
9782            return Ok(None);
9783        }
9784        let result = LegalHoldHeldRevisionMetadata {
9785            new_filename: field_new_filename.ok_or_else(|| ::serde::de::Error::missing_field("new_filename"))?,
9786            original_revision_id: field_original_revision_id.ok_or_else(|| ::serde::de::Error::missing_field("original_revision_id"))?,
9787            original_file_path: field_original_file_path.ok_or_else(|| ::serde::de::Error::missing_field("original_file_path"))?,
9788            server_modified: field_server_modified.ok_or_else(|| ::serde::de::Error::missing_field("server_modified"))?,
9789            author_member_id: field_author_member_id.ok_or_else(|| ::serde::de::Error::missing_field("author_member_id"))?,
9790            author_member_status: field_author_member_status.ok_or_else(|| ::serde::de::Error::missing_field("author_member_status"))?,
9791            author_email: field_author_email.ok_or_else(|| ::serde::de::Error::missing_field("author_email"))?,
9792            file_type: field_file_type.ok_or_else(|| ::serde::de::Error::missing_field("file_type"))?,
9793            size: field_size.ok_or_else(|| ::serde::de::Error::missing_field("size"))?,
9794            content_hash: field_content_hash.ok_or_else(|| ::serde::de::Error::missing_field("content_hash"))?,
9795        };
9796        Ok(Some(result))
9797    }
9798
9799    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9800        &self,
9801        s: &mut S::SerializeStruct,
9802    ) -> Result<(), S::Error> {
9803        use serde::ser::SerializeStruct;
9804        s.serialize_field("new_filename", &self.new_filename)?;
9805        s.serialize_field("original_revision_id", &self.original_revision_id)?;
9806        s.serialize_field("original_file_path", &self.original_file_path)?;
9807        s.serialize_field("server_modified", &self.server_modified)?;
9808        s.serialize_field("author_member_id", &self.author_member_id)?;
9809        s.serialize_field("author_member_status", &self.author_member_status)?;
9810        s.serialize_field("author_email", &self.author_email)?;
9811        s.serialize_field("file_type", &self.file_type)?;
9812        s.serialize_field("size", &self.size)?;
9813        s.serialize_field("content_hash", &self.content_hash)?;
9814        Ok(())
9815    }
9816}
9817
9818impl<'de> ::serde::de::Deserialize<'de> for LegalHoldHeldRevisionMetadata {
9819    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9820        // struct deserializer
9821        use serde::de::{MapAccess, Visitor};
9822        struct StructVisitor;
9823        impl<'de> Visitor<'de> for StructVisitor {
9824            type Value = LegalHoldHeldRevisionMetadata;
9825            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9826                f.write_str("a LegalHoldHeldRevisionMetadata struct")
9827            }
9828            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9829                LegalHoldHeldRevisionMetadata::internal_deserialize(map)
9830            }
9831        }
9832        deserializer.deserialize_struct("LegalHoldHeldRevisionMetadata", LEGAL_HOLD_HELD_REVISION_METADATA_FIELDS, StructVisitor)
9833    }
9834}
9835
9836impl ::serde::ser::Serialize for LegalHoldHeldRevisionMetadata {
9837    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9838        // struct serializer
9839        use serde::ser::SerializeStruct;
9840        let mut s = serializer.serialize_struct("LegalHoldHeldRevisionMetadata", 10)?;
9841        self.internal_serialize::<S>(&mut s)?;
9842        s.end()
9843    }
9844}
9845
9846#[derive(Debug, Clone, PartialEq, Eq)]
9847#[non_exhaustive] // structs may have more fields added in the future.
9848pub struct LegalHoldPolicy {
9849    /// The legal hold id.
9850    pub id: LegalHoldId,
9851    /// Policy name.
9852    pub name: LegalHoldPolicyName,
9853    /// Team members IDs and number of permanently deleted members under hold.
9854    pub members: MembersInfo,
9855    /// The current state of the hold.
9856    pub status: LegalHoldStatus,
9857    /// Start date of the legal hold policy.
9858    pub start_date: crate::types::common::DropboxTimestamp,
9859    /// A description of the legal hold policy.
9860    pub description: Option<LegalHoldPolicyDescription>,
9861    /// The time at which the legal hold was activated.
9862    pub activation_time: Option<crate::types::common::DropboxTimestamp>,
9863    /// End date of the legal hold policy.
9864    pub end_date: Option<crate::types::common::DropboxTimestamp>,
9865}
9866
9867impl LegalHoldPolicy {
9868    pub fn new(
9869        id: LegalHoldId,
9870        name: LegalHoldPolicyName,
9871        members: MembersInfo,
9872        status: LegalHoldStatus,
9873        start_date: crate::types::common::DropboxTimestamp,
9874    ) -> Self {
9875        LegalHoldPolicy {
9876            id,
9877            name,
9878            members,
9879            status,
9880            start_date,
9881            description: None,
9882            activation_time: None,
9883            end_date: None,
9884        }
9885    }
9886
9887    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
9888        self.description = Some(value);
9889        self
9890    }
9891
9892    pub fn with_activation_time(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
9893        self.activation_time = Some(value);
9894        self
9895    }
9896
9897    pub fn with_end_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
9898        self.end_date = Some(value);
9899        self
9900    }
9901}
9902
9903const LEGAL_HOLD_POLICY_FIELDS: &[&str] = &["id",
9904                                            "name",
9905                                            "members",
9906                                            "status",
9907                                            "start_date",
9908                                            "description",
9909                                            "activation_time",
9910                                            "end_date"];
9911impl LegalHoldPolicy {
9912    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9913        map: V,
9914    ) -> Result<LegalHoldPolicy, V::Error> {
9915        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9916    }
9917
9918    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9919        mut map: V,
9920        optional: bool,
9921    ) -> Result<Option<LegalHoldPolicy>, V::Error> {
9922        let mut field_id = None;
9923        let mut field_name = None;
9924        let mut field_members = None;
9925        let mut field_status = None;
9926        let mut field_start_date = None;
9927        let mut field_description = None;
9928        let mut field_activation_time = None;
9929        let mut field_end_date = None;
9930        let mut nothing = true;
9931        while let Some(key) = map.next_key::<&str>()? {
9932            nothing = false;
9933            match key {
9934                "id" => {
9935                    if field_id.is_some() {
9936                        return Err(::serde::de::Error::duplicate_field("id"));
9937                    }
9938                    field_id = Some(map.next_value()?);
9939                }
9940                "name" => {
9941                    if field_name.is_some() {
9942                        return Err(::serde::de::Error::duplicate_field("name"));
9943                    }
9944                    field_name = Some(map.next_value()?);
9945                }
9946                "members" => {
9947                    if field_members.is_some() {
9948                        return Err(::serde::de::Error::duplicate_field("members"));
9949                    }
9950                    field_members = Some(map.next_value()?);
9951                }
9952                "status" => {
9953                    if field_status.is_some() {
9954                        return Err(::serde::de::Error::duplicate_field("status"));
9955                    }
9956                    field_status = Some(map.next_value()?);
9957                }
9958                "start_date" => {
9959                    if field_start_date.is_some() {
9960                        return Err(::serde::de::Error::duplicate_field("start_date"));
9961                    }
9962                    field_start_date = Some(map.next_value()?);
9963                }
9964                "description" => {
9965                    if field_description.is_some() {
9966                        return Err(::serde::de::Error::duplicate_field("description"));
9967                    }
9968                    field_description = Some(map.next_value()?);
9969                }
9970                "activation_time" => {
9971                    if field_activation_time.is_some() {
9972                        return Err(::serde::de::Error::duplicate_field("activation_time"));
9973                    }
9974                    field_activation_time = Some(map.next_value()?);
9975                }
9976                "end_date" => {
9977                    if field_end_date.is_some() {
9978                        return Err(::serde::de::Error::duplicate_field("end_date"));
9979                    }
9980                    field_end_date = Some(map.next_value()?);
9981                }
9982                _ => {
9983                    // unknown field allowed and ignored
9984                    map.next_value::<::serde_json::Value>()?;
9985                }
9986            }
9987        }
9988        if optional && nothing {
9989            return Ok(None);
9990        }
9991        let result = LegalHoldPolicy {
9992            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9993            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
9994            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
9995            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
9996            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
9997            description: field_description.and_then(Option::flatten),
9998            activation_time: field_activation_time.and_then(Option::flatten),
9999            end_date: field_end_date.and_then(Option::flatten),
10000        };
10001        Ok(Some(result))
10002    }
10003
10004    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10005        &self,
10006        s: &mut S::SerializeStruct,
10007    ) -> Result<(), S::Error> {
10008        use serde::ser::SerializeStruct;
10009        s.serialize_field("id", &self.id)?;
10010        s.serialize_field("name", &self.name)?;
10011        s.serialize_field("members", &self.members)?;
10012        s.serialize_field("status", &self.status)?;
10013        s.serialize_field("start_date", &self.start_date)?;
10014        if let Some(val) = &self.description {
10015            s.serialize_field("description", val)?;
10016        }
10017        if let Some(val) = &self.activation_time {
10018            s.serialize_field("activation_time", val)?;
10019        }
10020        if let Some(val) = &self.end_date {
10021            s.serialize_field("end_date", val)?;
10022        }
10023        Ok(())
10024    }
10025}
10026
10027impl<'de> ::serde::de::Deserialize<'de> for LegalHoldPolicy {
10028    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10029        // struct deserializer
10030        use serde::de::{MapAccess, Visitor};
10031        struct StructVisitor;
10032        impl<'de> Visitor<'de> for StructVisitor {
10033            type Value = LegalHoldPolicy;
10034            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10035                f.write_str("a LegalHoldPolicy struct")
10036            }
10037            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10038                LegalHoldPolicy::internal_deserialize(map)
10039            }
10040        }
10041        deserializer.deserialize_struct("LegalHoldPolicy", LEGAL_HOLD_POLICY_FIELDS, StructVisitor)
10042    }
10043}
10044
10045impl ::serde::ser::Serialize for LegalHoldPolicy {
10046    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10047        // struct serializer
10048        use serde::ser::SerializeStruct;
10049        let mut s = serializer.serialize_struct("LegalHoldPolicy", 8)?;
10050        self.internal_serialize::<S>(&mut s)?;
10051        s.end()
10052    }
10053}
10054
10055#[derive(Debug, Clone, PartialEq, Eq)]
10056#[non_exhaustive] // variants may be added in the future
10057pub enum LegalHoldStatus {
10058    /// The legal hold policy is active.
10059    Active,
10060    /// The legal hold policy was released.
10061    Released,
10062    /// The legal hold policy is activating.
10063    Activating,
10064    /// The legal hold policy is updating.
10065    Updating,
10066    /// The legal hold policy is exporting.
10067    Exporting,
10068    /// The legal hold policy is releasing.
10069    Releasing,
10070    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10071    /// typically indicates that this SDK version is out of date.
10072    Other,
10073}
10074
10075impl<'de> ::serde::de::Deserialize<'de> for LegalHoldStatus {
10076    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10077        // union deserializer
10078        use serde::de::{self, MapAccess, Visitor};
10079        struct EnumVisitor;
10080        impl<'de> Visitor<'de> for EnumVisitor {
10081            type Value = LegalHoldStatus;
10082            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10083                f.write_str("a LegalHoldStatus structure")
10084            }
10085            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10086                let tag: &str = match map.next_key()? {
10087                    Some(".tag") => map.next_value()?,
10088                    _ => return Err(de::Error::missing_field(".tag"))
10089                };
10090                let value = match tag {
10091                    "active" => LegalHoldStatus::Active,
10092                    "released" => LegalHoldStatus::Released,
10093                    "activating" => LegalHoldStatus::Activating,
10094                    "updating" => LegalHoldStatus::Updating,
10095                    "exporting" => LegalHoldStatus::Exporting,
10096                    "releasing" => LegalHoldStatus::Releasing,
10097                    _ => LegalHoldStatus::Other,
10098                };
10099                crate::eat_json_fields(&mut map)?;
10100                Ok(value)
10101            }
10102        }
10103        const VARIANTS: &[&str] = &["active",
10104                                    "released",
10105                                    "activating",
10106                                    "updating",
10107                                    "exporting",
10108                                    "releasing",
10109                                    "other"];
10110        deserializer.deserialize_struct("LegalHoldStatus", VARIANTS, EnumVisitor)
10111    }
10112}
10113
10114impl ::serde::ser::Serialize for LegalHoldStatus {
10115    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10116        // union serializer
10117        use serde::ser::SerializeStruct;
10118        match self {
10119            LegalHoldStatus::Active => {
10120                // unit
10121                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
10122                s.serialize_field(".tag", "active")?;
10123                s.end()
10124            }
10125            LegalHoldStatus::Released => {
10126                // unit
10127                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
10128                s.serialize_field(".tag", "released")?;
10129                s.end()
10130            }
10131            LegalHoldStatus::Activating => {
10132                // unit
10133                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
10134                s.serialize_field(".tag", "activating")?;
10135                s.end()
10136            }
10137            LegalHoldStatus::Updating => {
10138                // unit
10139                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
10140                s.serialize_field(".tag", "updating")?;
10141                s.end()
10142            }
10143            LegalHoldStatus::Exporting => {
10144                // unit
10145                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
10146                s.serialize_field(".tag", "exporting")?;
10147                s.end()
10148            }
10149            LegalHoldStatus::Releasing => {
10150                // unit
10151                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
10152                s.serialize_field(".tag", "releasing")?;
10153                s.end()
10154            }
10155            LegalHoldStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10156        }
10157    }
10158}
10159
10160#[derive(Debug, Clone, PartialEq, Eq)]
10161#[non_exhaustive] // variants may be added in the future
10162pub enum LegalHoldsError {
10163    /// There has been an unknown legal hold error.
10164    UnknownLegalHoldError,
10165    /// You don't have permissions to perform this action.
10166    InsufficientPermissions,
10167    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10168    /// typically indicates that this SDK version is out of date.
10169    Other,
10170}
10171
10172impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsError {
10173    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10174        // union deserializer
10175        use serde::de::{self, MapAccess, Visitor};
10176        struct EnumVisitor;
10177        impl<'de> Visitor<'de> for EnumVisitor {
10178            type Value = LegalHoldsError;
10179            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10180                f.write_str("a LegalHoldsError structure")
10181            }
10182            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10183                let tag: &str = match map.next_key()? {
10184                    Some(".tag") => map.next_value()?,
10185                    _ => return Err(de::Error::missing_field(".tag"))
10186                };
10187                let value = match tag {
10188                    "unknown_legal_hold_error" => LegalHoldsError::UnknownLegalHoldError,
10189                    "insufficient_permissions" => LegalHoldsError::InsufficientPermissions,
10190                    _ => LegalHoldsError::Other,
10191                };
10192                crate::eat_json_fields(&mut map)?;
10193                Ok(value)
10194            }
10195        }
10196        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10197                                    "insufficient_permissions",
10198                                    "other"];
10199        deserializer.deserialize_struct("LegalHoldsError", VARIANTS, EnumVisitor)
10200    }
10201}
10202
10203impl ::serde::ser::Serialize for LegalHoldsError {
10204    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10205        // union serializer
10206        use serde::ser::SerializeStruct;
10207        match self {
10208            LegalHoldsError::UnknownLegalHoldError => {
10209                // unit
10210                let mut s = serializer.serialize_struct("LegalHoldsError", 1)?;
10211                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10212                s.end()
10213            }
10214            LegalHoldsError::InsufficientPermissions => {
10215                // unit
10216                let mut s = serializer.serialize_struct("LegalHoldsError", 1)?;
10217                s.serialize_field(".tag", "insufficient_permissions")?;
10218                s.end()
10219            }
10220            LegalHoldsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10221        }
10222    }
10223}
10224
10225impl ::std::error::Error for LegalHoldsError {
10226}
10227
10228impl ::std::fmt::Display for LegalHoldsError {
10229    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10230        match self {
10231            LegalHoldsError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10232            LegalHoldsError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10233            _ => write!(f, "{:?}", *self),
10234        }
10235    }
10236}
10237
10238#[derive(Debug, Clone, PartialEq, Eq)]
10239#[non_exhaustive] // structs may have more fields added in the future.
10240pub struct LegalHoldsGetPolicyArg {
10241    /// The legal hold Id.
10242    pub id: LegalHoldId,
10243}
10244
10245impl LegalHoldsGetPolicyArg {
10246    pub fn new(id: LegalHoldId) -> Self {
10247        LegalHoldsGetPolicyArg {
10248            id,
10249        }
10250    }
10251}
10252
10253const LEGAL_HOLDS_GET_POLICY_ARG_FIELDS: &[&str] = &["id"];
10254impl LegalHoldsGetPolicyArg {
10255    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10256        map: V,
10257    ) -> Result<LegalHoldsGetPolicyArg, V::Error> {
10258        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10259    }
10260
10261    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10262        mut map: V,
10263        optional: bool,
10264    ) -> Result<Option<LegalHoldsGetPolicyArg>, V::Error> {
10265        let mut field_id = None;
10266        let mut nothing = true;
10267        while let Some(key) = map.next_key::<&str>()? {
10268            nothing = false;
10269            match key {
10270                "id" => {
10271                    if field_id.is_some() {
10272                        return Err(::serde::de::Error::duplicate_field("id"));
10273                    }
10274                    field_id = Some(map.next_value()?);
10275                }
10276                _ => {
10277                    // unknown field allowed and ignored
10278                    map.next_value::<::serde_json::Value>()?;
10279                }
10280            }
10281        }
10282        if optional && nothing {
10283            return Ok(None);
10284        }
10285        let result = LegalHoldsGetPolicyArg {
10286            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10287        };
10288        Ok(Some(result))
10289    }
10290
10291    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10292        &self,
10293        s: &mut S::SerializeStruct,
10294    ) -> Result<(), S::Error> {
10295        use serde::ser::SerializeStruct;
10296        s.serialize_field("id", &self.id)?;
10297        Ok(())
10298    }
10299}
10300
10301impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsGetPolicyArg {
10302    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10303        // struct deserializer
10304        use serde::de::{MapAccess, Visitor};
10305        struct StructVisitor;
10306        impl<'de> Visitor<'de> for StructVisitor {
10307            type Value = LegalHoldsGetPolicyArg;
10308            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10309                f.write_str("a LegalHoldsGetPolicyArg struct")
10310            }
10311            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10312                LegalHoldsGetPolicyArg::internal_deserialize(map)
10313            }
10314        }
10315        deserializer.deserialize_struct("LegalHoldsGetPolicyArg", LEGAL_HOLDS_GET_POLICY_ARG_FIELDS, StructVisitor)
10316    }
10317}
10318
10319impl ::serde::ser::Serialize for LegalHoldsGetPolicyArg {
10320    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10321        // struct serializer
10322        use serde::ser::SerializeStruct;
10323        let mut s = serializer.serialize_struct("LegalHoldsGetPolicyArg", 1)?;
10324        self.internal_serialize::<S>(&mut s)?;
10325        s.end()
10326    }
10327}
10328
10329#[derive(Debug, Clone, PartialEq, Eq)]
10330#[non_exhaustive] // variants may be added in the future
10331pub enum LegalHoldsGetPolicyError {
10332    /// There has been an unknown legal hold error.
10333    UnknownLegalHoldError,
10334    /// You don't have permissions to perform this action.
10335    InsufficientPermissions,
10336    /// Legal hold policy does not exist for [`LegalHoldsGetPolicyArg::id`](LegalHoldsGetPolicyArg).
10337    LegalHoldPolicyNotFound,
10338    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10339    /// typically indicates that this SDK version is out of date.
10340    Other,
10341}
10342
10343impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsGetPolicyError {
10344    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10345        // union deserializer
10346        use serde::de::{self, MapAccess, Visitor};
10347        struct EnumVisitor;
10348        impl<'de> Visitor<'de> for EnumVisitor {
10349            type Value = LegalHoldsGetPolicyError;
10350            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10351                f.write_str("a LegalHoldsGetPolicyError structure")
10352            }
10353            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10354                let tag: &str = match map.next_key()? {
10355                    Some(".tag") => map.next_value()?,
10356                    _ => return Err(de::Error::missing_field(".tag"))
10357                };
10358                let value = match tag {
10359                    "unknown_legal_hold_error" => LegalHoldsGetPolicyError::UnknownLegalHoldError,
10360                    "insufficient_permissions" => LegalHoldsGetPolicyError::InsufficientPermissions,
10361                    "legal_hold_policy_not_found" => LegalHoldsGetPolicyError::LegalHoldPolicyNotFound,
10362                    _ => LegalHoldsGetPolicyError::Other,
10363                };
10364                crate::eat_json_fields(&mut map)?;
10365                Ok(value)
10366            }
10367        }
10368        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10369                                    "insufficient_permissions",
10370                                    "other",
10371                                    "legal_hold_policy_not_found"];
10372        deserializer.deserialize_struct("LegalHoldsGetPolicyError", VARIANTS, EnumVisitor)
10373    }
10374}
10375
10376impl ::serde::ser::Serialize for LegalHoldsGetPolicyError {
10377    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10378        // union serializer
10379        use serde::ser::SerializeStruct;
10380        match self {
10381            LegalHoldsGetPolicyError::UnknownLegalHoldError => {
10382                // unit
10383                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
10384                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10385                s.end()
10386            }
10387            LegalHoldsGetPolicyError::InsufficientPermissions => {
10388                // unit
10389                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
10390                s.serialize_field(".tag", "insufficient_permissions")?;
10391                s.end()
10392            }
10393            LegalHoldsGetPolicyError::LegalHoldPolicyNotFound => {
10394                // unit
10395                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
10396                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
10397                s.end()
10398            }
10399            LegalHoldsGetPolicyError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10400        }
10401    }
10402}
10403
10404impl ::std::error::Error for LegalHoldsGetPolicyError {
10405}
10406
10407impl ::std::fmt::Display for LegalHoldsGetPolicyError {
10408    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10409        match self {
10410            LegalHoldsGetPolicyError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10411            LegalHoldsGetPolicyError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10412            _ => write!(f, "{:?}", *self),
10413        }
10414    }
10415}
10416
10417// union extends LegalHoldsError
10418impl From<LegalHoldsError> for LegalHoldsGetPolicyError {
10419    fn from(parent: LegalHoldsError) -> Self {
10420        match parent {
10421            LegalHoldsError::UnknownLegalHoldError => LegalHoldsGetPolicyError::UnknownLegalHoldError,
10422            LegalHoldsError::InsufficientPermissions => LegalHoldsGetPolicyError::InsufficientPermissions,
10423            LegalHoldsError::Other => LegalHoldsGetPolicyError::Other,
10424        }
10425    }
10426}
10427#[derive(Debug, Clone, PartialEq, Eq)]
10428#[non_exhaustive] // structs may have more fields added in the future.
10429pub struct LegalHoldsListHeldRevisionResult {
10430    /// List of file entries that under the hold.
10431    pub entries: Vec<LegalHoldHeldRevisionMetadata>,
10432    /// True if there are more file entries that haven't been returned. You can retrieve them with a
10433    /// call to /legal_holds/list_held_revisions_continue.
10434    pub has_more: bool,
10435    /// The cursor idicates where to continue reading file metadata entries for the next API call.
10436    /// When there are no more entries, the cursor will return none. Pass the cursor into
10437    /// /2/team/legal_holds/list_held_revisions/continue.
10438    pub cursor: Option<ListHeldRevisionCursor>,
10439}
10440
10441impl LegalHoldsListHeldRevisionResult {
10442    pub fn new(entries: Vec<LegalHoldHeldRevisionMetadata>, has_more: bool) -> Self {
10443        LegalHoldsListHeldRevisionResult {
10444            entries,
10445            has_more,
10446            cursor: None,
10447        }
10448    }
10449
10450    pub fn with_cursor(mut self, value: ListHeldRevisionCursor) -> Self {
10451        self.cursor = Some(value);
10452        self
10453    }
10454}
10455
10456const LEGAL_HOLDS_LIST_HELD_REVISION_RESULT_FIELDS: &[&str] = &["entries",
10457                                                                "has_more",
10458                                                                "cursor"];
10459impl LegalHoldsListHeldRevisionResult {
10460    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10461        map: V,
10462    ) -> Result<LegalHoldsListHeldRevisionResult, V::Error> {
10463        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10464    }
10465
10466    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10467        mut map: V,
10468        optional: bool,
10469    ) -> Result<Option<LegalHoldsListHeldRevisionResult>, V::Error> {
10470        let mut field_entries = None;
10471        let mut field_has_more = None;
10472        let mut field_cursor = None;
10473        let mut nothing = true;
10474        while let Some(key) = map.next_key::<&str>()? {
10475            nothing = false;
10476            match key {
10477                "entries" => {
10478                    if field_entries.is_some() {
10479                        return Err(::serde::de::Error::duplicate_field("entries"));
10480                    }
10481                    field_entries = Some(map.next_value()?);
10482                }
10483                "has_more" => {
10484                    if field_has_more.is_some() {
10485                        return Err(::serde::de::Error::duplicate_field("has_more"));
10486                    }
10487                    field_has_more = Some(map.next_value()?);
10488                }
10489                "cursor" => {
10490                    if field_cursor.is_some() {
10491                        return Err(::serde::de::Error::duplicate_field("cursor"));
10492                    }
10493                    field_cursor = Some(map.next_value()?);
10494                }
10495                _ => {
10496                    // unknown field allowed and ignored
10497                    map.next_value::<::serde_json::Value>()?;
10498                }
10499            }
10500        }
10501        if optional && nothing {
10502            return Ok(None);
10503        }
10504        let result = LegalHoldsListHeldRevisionResult {
10505            entries: field_entries.ok_or_else(|| ::serde::de::Error::missing_field("entries"))?,
10506            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
10507            cursor: field_cursor.and_then(Option::flatten),
10508        };
10509        Ok(Some(result))
10510    }
10511
10512    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10513        &self,
10514        s: &mut S::SerializeStruct,
10515    ) -> Result<(), S::Error> {
10516        use serde::ser::SerializeStruct;
10517        s.serialize_field("entries", &self.entries)?;
10518        s.serialize_field("has_more", &self.has_more)?;
10519        if let Some(val) = &self.cursor {
10520            s.serialize_field("cursor", val)?;
10521        }
10522        Ok(())
10523    }
10524}
10525
10526impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionResult {
10527    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10528        // struct deserializer
10529        use serde::de::{MapAccess, Visitor};
10530        struct StructVisitor;
10531        impl<'de> Visitor<'de> for StructVisitor {
10532            type Value = LegalHoldsListHeldRevisionResult;
10533            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10534                f.write_str("a LegalHoldsListHeldRevisionResult struct")
10535            }
10536            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10537                LegalHoldsListHeldRevisionResult::internal_deserialize(map)
10538            }
10539        }
10540        deserializer.deserialize_struct("LegalHoldsListHeldRevisionResult", LEGAL_HOLDS_LIST_HELD_REVISION_RESULT_FIELDS, StructVisitor)
10541    }
10542}
10543
10544impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionResult {
10545    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10546        // struct serializer
10547        use serde::ser::SerializeStruct;
10548        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionResult", 3)?;
10549        self.internal_serialize::<S>(&mut s)?;
10550        s.end()
10551    }
10552}
10553
10554#[derive(Debug, Clone, PartialEq, Eq)]
10555#[non_exhaustive] // structs may have more fields added in the future.
10556pub struct LegalHoldsListHeldRevisionsArg {
10557    /// The legal hold Id.
10558    pub id: LegalHoldId,
10559}
10560
10561impl LegalHoldsListHeldRevisionsArg {
10562    pub fn new(id: LegalHoldId) -> Self {
10563        LegalHoldsListHeldRevisionsArg {
10564            id,
10565        }
10566    }
10567}
10568
10569const LEGAL_HOLDS_LIST_HELD_REVISIONS_ARG_FIELDS: &[&str] = &["id"];
10570impl LegalHoldsListHeldRevisionsArg {
10571    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10572        map: V,
10573    ) -> Result<LegalHoldsListHeldRevisionsArg, V::Error> {
10574        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10575    }
10576
10577    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10578        mut map: V,
10579        optional: bool,
10580    ) -> Result<Option<LegalHoldsListHeldRevisionsArg>, V::Error> {
10581        let mut field_id = None;
10582        let mut nothing = true;
10583        while let Some(key) = map.next_key::<&str>()? {
10584            nothing = false;
10585            match key {
10586                "id" => {
10587                    if field_id.is_some() {
10588                        return Err(::serde::de::Error::duplicate_field("id"));
10589                    }
10590                    field_id = Some(map.next_value()?);
10591                }
10592                _ => {
10593                    // unknown field allowed and ignored
10594                    map.next_value::<::serde_json::Value>()?;
10595                }
10596            }
10597        }
10598        if optional && nothing {
10599            return Ok(None);
10600        }
10601        let result = LegalHoldsListHeldRevisionsArg {
10602            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10603        };
10604        Ok(Some(result))
10605    }
10606
10607    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10608        &self,
10609        s: &mut S::SerializeStruct,
10610    ) -> Result<(), S::Error> {
10611        use serde::ser::SerializeStruct;
10612        s.serialize_field("id", &self.id)?;
10613        Ok(())
10614    }
10615}
10616
10617impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsArg {
10618    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10619        // struct deserializer
10620        use serde::de::{MapAccess, Visitor};
10621        struct StructVisitor;
10622        impl<'de> Visitor<'de> for StructVisitor {
10623            type Value = LegalHoldsListHeldRevisionsArg;
10624            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10625                f.write_str("a LegalHoldsListHeldRevisionsArg struct")
10626            }
10627            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10628                LegalHoldsListHeldRevisionsArg::internal_deserialize(map)
10629            }
10630        }
10631        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsArg", LEGAL_HOLDS_LIST_HELD_REVISIONS_ARG_FIELDS, StructVisitor)
10632    }
10633}
10634
10635impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsArg {
10636    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10637        // struct serializer
10638        use serde::ser::SerializeStruct;
10639        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsArg", 1)?;
10640        self.internal_serialize::<S>(&mut s)?;
10641        s.end()
10642    }
10643}
10644
10645#[derive(Debug, Clone, PartialEq, Eq)]
10646#[non_exhaustive] // structs may have more fields added in the future.
10647pub struct LegalHoldsListHeldRevisionsContinueArg {
10648    /// The legal hold Id.
10649    pub id: LegalHoldId,
10650    /// The cursor idicates where to continue reading file metadata entries for the next API call.
10651    /// When there are no more entries, the cursor will return none.
10652    pub cursor: Option<ListHeldRevisionCursor>,
10653}
10654
10655impl LegalHoldsListHeldRevisionsContinueArg {
10656    pub fn new(id: LegalHoldId) -> Self {
10657        LegalHoldsListHeldRevisionsContinueArg {
10658            id,
10659            cursor: None,
10660        }
10661    }
10662
10663    pub fn with_cursor(mut self, value: ListHeldRevisionCursor) -> Self {
10664        self.cursor = Some(value);
10665        self
10666    }
10667}
10668
10669const LEGAL_HOLDS_LIST_HELD_REVISIONS_CONTINUE_ARG_FIELDS: &[&str] = &["id",
10670                                                                       "cursor"];
10671impl LegalHoldsListHeldRevisionsContinueArg {
10672    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10673        map: V,
10674    ) -> Result<LegalHoldsListHeldRevisionsContinueArg, V::Error> {
10675        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10676    }
10677
10678    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10679        mut map: V,
10680        optional: bool,
10681    ) -> Result<Option<LegalHoldsListHeldRevisionsContinueArg>, V::Error> {
10682        let mut field_id = None;
10683        let mut field_cursor = None;
10684        let mut nothing = true;
10685        while let Some(key) = map.next_key::<&str>()? {
10686            nothing = false;
10687            match key {
10688                "id" => {
10689                    if field_id.is_some() {
10690                        return Err(::serde::de::Error::duplicate_field("id"));
10691                    }
10692                    field_id = Some(map.next_value()?);
10693                }
10694                "cursor" => {
10695                    if field_cursor.is_some() {
10696                        return Err(::serde::de::Error::duplicate_field("cursor"));
10697                    }
10698                    field_cursor = Some(map.next_value()?);
10699                }
10700                _ => {
10701                    // unknown field allowed and ignored
10702                    map.next_value::<::serde_json::Value>()?;
10703                }
10704            }
10705        }
10706        if optional && nothing {
10707            return Ok(None);
10708        }
10709        let result = LegalHoldsListHeldRevisionsContinueArg {
10710            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10711            cursor: field_cursor.and_then(Option::flatten),
10712        };
10713        Ok(Some(result))
10714    }
10715
10716    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10717        &self,
10718        s: &mut S::SerializeStruct,
10719    ) -> Result<(), S::Error> {
10720        use serde::ser::SerializeStruct;
10721        s.serialize_field("id", &self.id)?;
10722        if let Some(val) = &self.cursor {
10723            s.serialize_field("cursor", val)?;
10724        }
10725        Ok(())
10726    }
10727}
10728
10729impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsContinueArg {
10730    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10731        // struct deserializer
10732        use serde::de::{MapAccess, Visitor};
10733        struct StructVisitor;
10734        impl<'de> Visitor<'de> for StructVisitor {
10735            type Value = LegalHoldsListHeldRevisionsContinueArg;
10736            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10737                f.write_str("a LegalHoldsListHeldRevisionsContinueArg struct")
10738            }
10739            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10740                LegalHoldsListHeldRevisionsContinueArg::internal_deserialize(map)
10741            }
10742        }
10743        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsContinueArg", LEGAL_HOLDS_LIST_HELD_REVISIONS_CONTINUE_ARG_FIELDS, StructVisitor)
10744    }
10745}
10746
10747impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsContinueArg {
10748    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10749        // struct serializer
10750        use serde::ser::SerializeStruct;
10751        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueArg", 2)?;
10752        self.internal_serialize::<S>(&mut s)?;
10753        s.end()
10754    }
10755}
10756
10757#[derive(Debug, Clone, PartialEq, Eq)]
10758#[non_exhaustive] // variants may be added in the future
10759pub enum LegalHoldsListHeldRevisionsContinueError {
10760    /// There has been an unknown legal hold error.
10761    UnknownLegalHoldError,
10762    /// Temporary infrastructure failure, please retry.
10763    TransientError,
10764    /// Indicates that the cursor has been invalidated. Call
10765    /// [`legal_holds_list_held_revisions_continue()`](crate::team::legal_holds_list_held_revisions_continue)
10766    /// again with an empty cursor to obtain a new cursor.
10767    Reset,
10768    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10769    /// typically indicates that this SDK version is out of date.
10770    Other,
10771}
10772
10773impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsContinueError {
10774    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10775        // union deserializer
10776        use serde::de::{self, MapAccess, Visitor};
10777        struct EnumVisitor;
10778        impl<'de> Visitor<'de> for EnumVisitor {
10779            type Value = LegalHoldsListHeldRevisionsContinueError;
10780            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10781                f.write_str("a LegalHoldsListHeldRevisionsContinueError structure")
10782            }
10783            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10784                let tag: &str = match map.next_key()? {
10785                    Some(".tag") => map.next_value()?,
10786                    _ => return Err(de::Error::missing_field(".tag"))
10787                };
10788                let value = match tag {
10789                    "unknown_legal_hold_error" => LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError,
10790                    "transient_error" => LegalHoldsListHeldRevisionsContinueError::TransientError,
10791                    "reset" => LegalHoldsListHeldRevisionsContinueError::Reset,
10792                    _ => LegalHoldsListHeldRevisionsContinueError::Other,
10793                };
10794                crate::eat_json_fields(&mut map)?;
10795                Ok(value)
10796            }
10797        }
10798        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10799                                    "transient_error",
10800                                    "reset",
10801                                    "other"];
10802        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsContinueError", VARIANTS, EnumVisitor)
10803    }
10804}
10805
10806impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsContinueError {
10807    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10808        // union serializer
10809        use serde::ser::SerializeStruct;
10810        match self {
10811            LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError => {
10812                // unit
10813                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
10814                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10815                s.end()
10816            }
10817            LegalHoldsListHeldRevisionsContinueError::TransientError => {
10818                // unit
10819                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
10820                s.serialize_field(".tag", "transient_error")?;
10821                s.end()
10822            }
10823            LegalHoldsListHeldRevisionsContinueError::Reset => {
10824                // unit
10825                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
10826                s.serialize_field(".tag", "reset")?;
10827                s.end()
10828            }
10829            LegalHoldsListHeldRevisionsContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10830        }
10831    }
10832}
10833
10834impl ::std::error::Error for LegalHoldsListHeldRevisionsContinueError {
10835}
10836
10837impl ::std::fmt::Display for LegalHoldsListHeldRevisionsContinueError {
10838    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10839        match self {
10840            LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10841            LegalHoldsListHeldRevisionsContinueError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10842            _ => write!(f, "{:?}", *self),
10843        }
10844    }
10845}
10846
10847#[derive(Debug, Clone, PartialEq, Eq)]
10848#[non_exhaustive] // variants may be added in the future
10849pub enum LegalHoldsListHeldRevisionsError {
10850    /// There has been an unknown legal hold error.
10851    UnknownLegalHoldError,
10852    /// You don't have permissions to perform this action.
10853    InsufficientPermissions,
10854    /// Temporary infrastructure failure, please retry.
10855    TransientError,
10856    /// The legal hold is not holding any revisions yet.
10857    LegalHoldStillEmpty,
10858    /// Trying to list revisions for an inactive legal hold.
10859    InactiveLegalHold,
10860    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10861    /// typically indicates that this SDK version is out of date.
10862    Other,
10863}
10864
10865impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsError {
10866    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10867        // union deserializer
10868        use serde::de::{self, MapAccess, Visitor};
10869        struct EnumVisitor;
10870        impl<'de> Visitor<'de> for EnumVisitor {
10871            type Value = LegalHoldsListHeldRevisionsError;
10872            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10873                f.write_str("a LegalHoldsListHeldRevisionsError structure")
10874            }
10875            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10876                let tag: &str = match map.next_key()? {
10877                    Some(".tag") => map.next_value()?,
10878                    _ => return Err(de::Error::missing_field(".tag"))
10879                };
10880                let value = match tag {
10881                    "unknown_legal_hold_error" => LegalHoldsListHeldRevisionsError::UnknownLegalHoldError,
10882                    "insufficient_permissions" => LegalHoldsListHeldRevisionsError::InsufficientPermissions,
10883                    "transient_error" => LegalHoldsListHeldRevisionsError::TransientError,
10884                    "legal_hold_still_empty" => LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty,
10885                    "inactive_legal_hold" => LegalHoldsListHeldRevisionsError::InactiveLegalHold,
10886                    _ => LegalHoldsListHeldRevisionsError::Other,
10887                };
10888                crate::eat_json_fields(&mut map)?;
10889                Ok(value)
10890            }
10891        }
10892        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10893                                    "insufficient_permissions",
10894                                    "other",
10895                                    "transient_error",
10896                                    "legal_hold_still_empty",
10897                                    "inactive_legal_hold"];
10898        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsError", VARIANTS, EnumVisitor)
10899    }
10900}
10901
10902impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsError {
10903    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10904        // union serializer
10905        use serde::ser::SerializeStruct;
10906        match self {
10907            LegalHoldsListHeldRevisionsError::UnknownLegalHoldError => {
10908                // unit
10909                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10910                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10911                s.end()
10912            }
10913            LegalHoldsListHeldRevisionsError::InsufficientPermissions => {
10914                // unit
10915                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10916                s.serialize_field(".tag", "insufficient_permissions")?;
10917                s.end()
10918            }
10919            LegalHoldsListHeldRevisionsError::TransientError => {
10920                // unit
10921                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10922                s.serialize_field(".tag", "transient_error")?;
10923                s.end()
10924            }
10925            LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty => {
10926                // unit
10927                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10928                s.serialize_field(".tag", "legal_hold_still_empty")?;
10929                s.end()
10930            }
10931            LegalHoldsListHeldRevisionsError::InactiveLegalHold => {
10932                // unit
10933                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10934                s.serialize_field(".tag", "inactive_legal_hold")?;
10935                s.end()
10936            }
10937            LegalHoldsListHeldRevisionsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10938        }
10939    }
10940}
10941
10942impl ::std::error::Error for LegalHoldsListHeldRevisionsError {
10943}
10944
10945impl ::std::fmt::Display for LegalHoldsListHeldRevisionsError {
10946    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10947        match self {
10948            LegalHoldsListHeldRevisionsError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10949            LegalHoldsListHeldRevisionsError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10950            LegalHoldsListHeldRevisionsError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10951            LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty => f.write_str("The legal hold is not holding any revisions yet."),
10952            LegalHoldsListHeldRevisionsError::InactiveLegalHold => f.write_str("Trying to list revisions for an inactive legal hold."),
10953            _ => write!(f, "{:?}", *self),
10954        }
10955    }
10956}
10957
10958// union extends LegalHoldsError
10959impl From<LegalHoldsError> for LegalHoldsListHeldRevisionsError {
10960    fn from(parent: LegalHoldsError) -> Self {
10961        match parent {
10962            LegalHoldsError::UnknownLegalHoldError => LegalHoldsListHeldRevisionsError::UnknownLegalHoldError,
10963            LegalHoldsError::InsufficientPermissions => LegalHoldsListHeldRevisionsError::InsufficientPermissions,
10964            LegalHoldsError::Other => LegalHoldsListHeldRevisionsError::Other,
10965        }
10966    }
10967}
10968#[derive(Debug, Clone, PartialEq, Eq, Default)]
10969#[non_exhaustive] // structs may have more fields added in the future.
10970pub struct LegalHoldsListPoliciesArg {
10971    /// Whether to return holds that were released.
10972    pub include_released: bool,
10973}
10974
10975impl LegalHoldsListPoliciesArg {
10976    pub fn with_include_released(mut self, value: bool) -> Self {
10977        self.include_released = value;
10978        self
10979    }
10980}
10981
10982const LEGAL_HOLDS_LIST_POLICIES_ARG_FIELDS: &[&str] = &["include_released"];
10983impl LegalHoldsListPoliciesArg {
10984    // no _opt deserializer
10985    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10986        mut map: V,
10987    ) -> Result<LegalHoldsListPoliciesArg, V::Error> {
10988        let mut field_include_released = None;
10989        while let Some(key) = map.next_key::<&str>()? {
10990            match key {
10991                "include_released" => {
10992                    if field_include_released.is_some() {
10993                        return Err(::serde::de::Error::duplicate_field("include_released"));
10994                    }
10995                    field_include_released = Some(map.next_value()?);
10996                }
10997                _ => {
10998                    // unknown field allowed and ignored
10999                    map.next_value::<::serde_json::Value>()?;
11000                }
11001            }
11002        }
11003        let result = LegalHoldsListPoliciesArg {
11004            include_released: field_include_released.unwrap_or(false),
11005        };
11006        Ok(result)
11007    }
11008
11009    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11010        &self,
11011        s: &mut S::SerializeStruct,
11012    ) -> Result<(), S::Error> {
11013        use serde::ser::SerializeStruct;
11014        if self.include_released {
11015            s.serialize_field("include_released", &self.include_released)?;
11016        }
11017        Ok(())
11018    }
11019}
11020
11021impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesArg {
11022    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11023        // struct deserializer
11024        use serde::de::{MapAccess, Visitor};
11025        struct StructVisitor;
11026        impl<'de> Visitor<'de> for StructVisitor {
11027            type Value = LegalHoldsListPoliciesArg;
11028            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11029                f.write_str("a LegalHoldsListPoliciesArg struct")
11030            }
11031            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11032                LegalHoldsListPoliciesArg::internal_deserialize(map)
11033            }
11034        }
11035        deserializer.deserialize_struct("LegalHoldsListPoliciesArg", LEGAL_HOLDS_LIST_POLICIES_ARG_FIELDS, StructVisitor)
11036    }
11037}
11038
11039impl ::serde::ser::Serialize for LegalHoldsListPoliciesArg {
11040    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11041        // struct serializer
11042        use serde::ser::SerializeStruct;
11043        let mut s = serializer.serialize_struct("LegalHoldsListPoliciesArg", 1)?;
11044        self.internal_serialize::<S>(&mut s)?;
11045        s.end()
11046    }
11047}
11048
11049#[derive(Debug, Clone, PartialEq, Eq)]
11050#[non_exhaustive] // variants may be added in the future
11051pub enum LegalHoldsListPoliciesError {
11052    /// There has been an unknown legal hold error.
11053    UnknownLegalHoldError,
11054    /// You don't have permissions to perform this action.
11055    InsufficientPermissions,
11056    /// Temporary infrastructure failure, please retry.
11057    TransientError,
11058    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11059    /// typically indicates that this SDK version is out of date.
11060    Other,
11061}
11062
11063impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesError {
11064    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11065        // union deserializer
11066        use serde::de::{self, MapAccess, Visitor};
11067        struct EnumVisitor;
11068        impl<'de> Visitor<'de> for EnumVisitor {
11069            type Value = LegalHoldsListPoliciesError;
11070            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11071                f.write_str("a LegalHoldsListPoliciesError structure")
11072            }
11073            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11074                let tag: &str = match map.next_key()? {
11075                    Some(".tag") => map.next_value()?,
11076                    _ => return Err(de::Error::missing_field(".tag"))
11077                };
11078                let value = match tag {
11079                    "unknown_legal_hold_error" => LegalHoldsListPoliciesError::UnknownLegalHoldError,
11080                    "insufficient_permissions" => LegalHoldsListPoliciesError::InsufficientPermissions,
11081                    "transient_error" => LegalHoldsListPoliciesError::TransientError,
11082                    _ => LegalHoldsListPoliciesError::Other,
11083                };
11084                crate::eat_json_fields(&mut map)?;
11085                Ok(value)
11086            }
11087        }
11088        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
11089                                    "insufficient_permissions",
11090                                    "other",
11091                                    "transient_error"];
11092        deserializer.deserialize_struct("LegalHoldsListPoliciesError", VARIANTS, EnumVisitor)
11093    }
11094}
11095
11096impl ::serde::ser::Serialize for LegalHoldsListPoliciesError {
11097    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11098        // union serializer
11099        use serde::ser::SerializeStruct;
11100        match self {
11101            LegalHoldsListPoliciesError::UnknownLegalHoldError => {
11102                // unit
11103                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
11104                s.serialize_field(".tag", "unknown_legal_hold_error")?;
11105                s.end()
11106            }
11107            LegalHoldsListPoliciesError::InsufficientPermissions => {
11108                // unit
11109                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
11110                s.serialize_field(".tag", "insufficient_permissions")?;
11111                s.end()
11112            }
11113            LegalHoldsListPoliciesError::TransientError => {
11114                // unit
11115                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
11116                s.serialize_field(".tag", "transient_error")?;
11117                s.end()
11118            }
11119            LegalHoldsListPoliciesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11120        }
11121    }
11122}
11123
11124impl ::std::error::Error for LegalHoldsListPoliciesError {
11125}
11126
11127impl ::std::fmt::Display for LegalHoldsListPoliciesError {
11128    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11129        match self {
11130            LegalHoldsListPoliciesError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
11131            LegalHoldsListPoliciesError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
11132            LegalHoldsListPoliciesError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
11133            _ => write!(f, "{:?}", *self),
11134        }
11135    }
11136}
11137
11138// union extends LegalHoldsError
11139impl From<LegalHoldsError> for LegalHoldsListPoliciesError {
11140    fn from(parent: LegalHoldsError) -> Self {
11141        match parent {
11142            LegalHoldsError::UnknownLegalHoldError => LegalHoldsListPoliciesError::UnknownLegalHoldError,
11143            LegalHoldsError::InsufficientPermissions => LegalHoldsListPoliciesError::InsufficientPermissions,
11144            LegalHoldsError::Other => LegalHoldsListPoliciesError::Other,
11145        }
11146    }
11147}
11148#[derive(Debug, Clone, PartialEq, Eq)]
11149#[non_exhaustive] // structs may have more fields added in the future.
11150pub struct LegalHoldsListPoliciesResult {
11151    pub policies: Vec<LegalHoldPolicy>,
11152}
11153
11154impl LegalHoldsListPoliciesResult {
11155    pub fn new(policies: Vec<LegalHoldPolicy>) -> Self {
11156        LegalHoldsListPoliciesResult {
11157            policies,
11158        }
11159    }
11160}
11161
11162const LEGAL_HOLDS_LIST_POLICIES_RESULT_FIELDS: &[&str] = &["policies"];
11163impl LegalHoldsListPoliciesResult {
11164    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11165        map: V,
11166    ) -> Result<LegalHoldsListPoliciesResult, V::Error> {
11167        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11168    }
11169
11170    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11171        mut map: V,
11172        optional: bool,
11173    ) -> Result<Option<LegalHoldsListPoliciesResult>, V::Error> {
11174        let mut field_policies = None;
11175        let mut nothing = true;
11176        while let Some(key) = map.next_key::<&str>()? {
11177            nothing = false;
11178            match key {
11179                "policies" => {
11180                    if field_policies.is_some() {
11181                        return Err(::serde::de::Error::duplicate_field("policies"));
11182                    }
11183                    field_policies = Some(map.next_value()?);
11184                }
11185                _ => {
11186                    // unknown field allowed and ignored
11187                    map.next_value::<::serde_json::Value>()?;
11188                }
11189            }
11190        }
11191        if optional && nothing {
11192            return Ok(None);
11193        }
11194        let result = LegalHoldsListPoliciesResult {
11195            policies: field_policies.ok_or_else(|| ::serde::de::Error::missing_field("policies"))?,
11196        };
11197        Ok(Some(result))
11198    }
11199
11200    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11201        &self,
11202        s: &mut S::SerializeStruct,
11203    ) -> Result<(), S::Error> {
11204        use serde::ser::SerializeStruct;
11205        s.serialize_field("policies", &self.policies)?;
11206        Ok(())
11207    }
11208}
11209
11210impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesResult {
11211    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11212        // struct deserializer
11213        use serde::de::{MapAccess, Visitor};
11214        struct StructVisitor;
11215        impl<'de> Visitor<'de> for StructVisitor {
11216            type Value = LegalHoldsListPoliciesResult;
11217            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11218                f.write_str("a LegalHoldsListPoliciesResult struct")
11219            }
11220            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11221                LegalHoldsListPoliciesResult::internal_deserialize(map)
11222            }
11223        }
11224        deserializer.deserialize_struct("LegalHoldsListPoliciesResult", LEGAL_HOLDS_LIST_POLICIES_RESULT_FIELDS, StructVisitor)
11225    }
11226}
11227
11228impl ::serde::ser::Serialize for LegalHoldsListPoliciesResult {
11229    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11230        // struct serializer
11231        use serde::ser::SerializeStruct;
11232        let mut s = serializer.serialize_struct("LegalHoldsListPoliciesResult", 1)?;
11233        self.internal_serialize::<S>(&mut s)?;
11234        s.end()
11235    }
11236}
11237
11238#[derive(Debug, Clone, PartialEq, Eq)]
11239#[non_exhaustive] // structs may have more fields added in the future.
11240pub struct LegalHoldsPolicyCreateArg {
11241    /// Policy name.
11242    pub name: LegalHoldPolicyName,
11243    /// List of team member IDs added to the hold.
11244    pub members: Vec<crate::types::team_common::TeamMemberId>,
11245    /// A description of the legal hold policy.
11246    pub description: Option<LegalHoldPolicyDescription>,
11247    /// start date of the legal hold policy.
11248    pub start_date: Option<crate::types::common::DropboxTimestamp>,
11249    /// end date of the legal hold policy.
11250    pub end_date: Option<crate::types::common::DropboxTimestamp>,
11251}
11252
11253impl LegalHoldsPolicyCreateArg {
11254    pub fn new(
11255        name: LegalHoldPolicyName,
11256        members: Vec<crate::types::team_common::TeamMemberId>,
11257    ) -> Self {
11258        LegalHoldsPolicyCreateArg {
11259            name,
11260            members,
11261            description: None,
11262            start_date: None,
11263            end_date: None,
11264        }
11265    }
11266
11267    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
11268        self.description = Some(value);
11269        self
11270    }
11271
11272    pub fn with_start_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
11273        self.start_date = Some(value);
11274        self
11275    }
11276
11277    pub fn with_end_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
11278        self.end_date = Some(value);
11279        self
11280    }
11281}
11282
11283const LEGAL_HOLDS_POLICY_CREATE_ARG_FIELDS: &[&str] = &["name",
11284                                                        "members",
11285                                                        "description",
11286                                                        "start_date",
11287                                                        "end_date"];
11288impl LegalHoldsPolicyCreateArg {
11289    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11290        map: V,
11291    ) -> Result<LegalHoldsPolicyCreateArg, V::Error> {
11292        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11293    }
11294
11295    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11296        mut map: V,
11297        optional: bool,
11298    ) -> Result<Option<LegalHoldsPolicyCreateArg>, V::Error> {
11299        let mut field_name = None;
11300        let mut field_members = None;
11301        let mut field_description = None;
11302        let mut field_start_date = None;
11303        let mut field_end_date = None;
11304        let mut nothing = true;
11305        while let Some(key) = map.next_key::<&str>()? {
11306            nothing = false;
11307            match key {
11308                "name" => {
11309                    if field_name.is_some() {
11310                        return Err(::serde::de::Error::duplicate_field("name"));
11311                    }
11312                    field_name = Some(map.next_value()?);
11313                }
11314                "members" => {
11315                    if field_members.is_some() {
11316                        return Err(::serde::de::Error::duplicate_field("members"));
11317                    }
11318                    field_members = Some(map.next_value()?);
11319                }
11320                "description" => {
11321                    if field_description.is_some() {
11322                        return Err(::serde::de::Error::duplicate_field("description"));
11323                    }
11324                    field_description = Some(map.next_value()?);
11325                }
11326                "start_date" => {
11327                    if field_start_date.is_some() {
11328                        return Err(::serde::de::Error::duplicate_field("start_date"));
11329                    }
11330                    field_start_date = Some(map.next_value()?);
11331                }
11332                "end_date" => {
11333                    if field_end_date.is_some() {
11334                        return Err(::serde::de::Error::duplicate_field("end_date"));
11335                    }
11336                    field_end_date = Some(map.next_value()?);
11337                }
11338                _ => {
11339                    // unknown field allowed and ignored
11340                    map.next_value::<::serde_json::Value>()?;
11341                }
11342            }
11343        }
11344        if optional && nothing {
11345            return Ok(None);
11346        }
11347        let result = LegalHoldsPolicyCreateArg {
11348            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
11349            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
11350            description: field_description.and_then(Option::flatten),
11351            start_date: field_start_date.and_then(Option::flatten),
11352            end_date: field_end_date.and_then(Option::flatten),
11353        };
11354        Ok(Some(result))
11355    }
11356
11357    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11358        &self,
11359        s: &mut S::SerializeStruct,
11360    ) -> Result<(), S::Error> {
11361        use serde::ser::SerializeStruct;
11362        s.serialize_field("name", &self.name)?;
11363        s.serialize_field("members", &self.members)?;
11364        if let Some(val) = &self.description {
11365            s.serialize_field("description", val)?;
11366        }
11367        if let Some(val) = &self.start_date {
11368            s.serialize_field("start_date", val)?;
11369        }
11370        if let Some(val) = &self.end_date {
11371            s.serialize_field("end_date", val)?;
11372        }
11373        Ok(())
11374    }
11375}
11376
11377impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyCreateArg {
11378    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11379        // struct deserializer
11380        use serde::de::{MapAccess, Visitor};
11381        struct StructVisitor;
11382        impl<'de> Visitor<'de> for StructVisitor {
11383            type Value = LegalHoldsPolicyCreateArg;
11384            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11385                f.write_str("a LegalHoldsPolicyCreateArg struct")
11386            }
11387            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11388                LegalHoldsPolicyCreateArg::internal_deserialize(map)
11389            }
11390        }
11391        deserializer.deserialize_struct("LegalHoldsPolicyCreateArg", LEGAL_HOLDS_POLICY_CREATE_ARG_FIELDS, StructVisitor)
11392    }
11393}
11394
11395impl ::serde::ser::Serialize for LegalHoldsPolicyCreateArg {
11396    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11397        // struct serializer
11398        use serde::ser::SerializeStruct;
11399        let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateArg", 5)?;
11400        self.internal_serialize::<S>(&mut s)?;
11401        s.end()
11402    }
11403}
11404
11405#[derive(Debug, Clone, PartialEq, Eq)]
11406#[non_exhaustive] // variants may be added in the future
11407pub enum LegalHoldsPolicyCreateError {
11408    /// There has been an unknown legal hold error.
11409    UnknownLegalHoldError,
11410    /// You don't have permissions to perform this action.
11411    InsufficientPermissions,
11412    /// Start date must be earlier than end date.
11413    StartDateIsLaterThanEndDate,
11414    /// The users list must have at least one user.
11415    EmptyMembersList,
11416    /// Some members in the members list are not valid to be placed under legal hold.
11417    InvalidMembers,
11418    /// You cannot add more than 5 users in a legal hold.
11419    NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11420    /// Temporary infrastructure failure, please retry.
11421    TransientError,
11422    /// The name provided is already in use by another legal hold.
11423    NameMustBeUnique,
11424    /// Team exceeded legal hold quota.
11425    TeamExceededLegalHoldQuota,
11426    /// The provided date is invalid.
11427    InvalidDate,
11428    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11429    /// typically indicates that this SDK version is out of date.
11430    Other,
11431}
11432
11433impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyCreateError {
11434    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11435        // union deserializer
11436        use serde::de::{self, MapAccess, Visitor};
11437        struct EnumVisitor;
11438        impl<'de> Visitor<'de> for EnumVisitor {
11439            type Value = LegalHoldsPolicyCreateError;
11440            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11441                f.write_str("a LegalHoldsPolicyCreateError structure")
11442            }
11443            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11444                let tag: &str = match map.next_key()? {
11445                    Some(".tag") => map.next_value()?,
11446                    _ => return Err(de::Error::missing_field(".tag"))
11447                };
11448                let value = match tag {
11449                    "unknown_legal_hold_error" => LegalHoldsPolicyCreateError::UnknownLegalHoldError,
11450                    "insufficient_permissions" => LegalHoldsPolicyCreateError::InsufficientPermissions,
11451                    "start_date_is_later_than_end_date" => LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate,
11452                    "empty_members_list" => LegalHoldsPolicyCreateError::EmptyMembersList,
11453                    "invalid_members" => LegalHoldsPolicyCreateError::InvalidMembers,
11454                    "number_of_users_on_hold_is_greater_than_hold_limitation" => LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11455                    "transient_error" => LegalHoldsPolicyCreateError::TransientError,
11456                    "name_must_be_unique" => LegalHoldsPolicyCreateError::NameMustBeUnique,
11457                    "team_exceeded_legal_hold_quota" => LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota,
11458                    "invalid_date" => LegalHoldsPolicyCreateError::InvalidDate,
11459                    _ => LegalHoldsPolicyCreateError::Other,
11460                };
11461                crate::eat_json_fields(&mut map)?;
11462                Ok(value)
11463            }
11464        }
11465        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
11466                                    "insufficient_permissions",
11467                                    "other",
11468                                    "start_date_is_later_than_end_date",
11469                                    "empty_members_list",
11470                                    "invalid_members",
11471                                    "number_of_users_on_hold_is_greater_than_hold_limitation",
11472                                    "transient_error",
11473                                    "name_must_be_unique",
11474                                    "team_exceeded_legal_hold_quota",
11475                                    "invalid_date"];
11476        deserializer.deserialize_struct("LegalHoldsPolicyCreateError", VARIANTS, EnumVisitor)
11477    }
11478}
11479
11480impl ::serde::ser::Serialize for LegalHoldsPolicyCreateError {
11481    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11482        // union serializer
11483        use serde::ser::SerializeStruct;
11484        match self {
11485            LegalHoldsPolicyCreateError::UnknownLegalHoldError => {
11486                // unit
11487                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11488                s.serialize_field(".tag", "unknown_legal_hold_error")?;
11489                s.end()
11490            }
11491            LegalHoldsPolicyCreateError::InsufficientPermissions => {
11492                // unit
11493                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11494                s.serialize_field(".tag", "insufficient_permissions")?;
11495                s.end()
11496            }
11497            LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate => {
11498                // unit
11499                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11500                s.serialize_field(".tag", "start_date_is_later_than_end_date")?;
11501                s.end()
11502            }
11503            LegalHoldsPolicyCreateError::EmptyMembersList => {
11504                // unit
11505                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11506                s.serialize_field(".tag", "empty_members_list")?;
11507                s.end()
11508            }
11509            LegalHoldsPolicyCreateError::InvalidMembers => {
11510                // unit
11511                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11512                s.serialize_field(".tag", "invalid_members")?;
11513                s.end()
11514            }
11515            LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => {
11516                // unit
11517                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11518                s.serialize_field(".tag", "number_of_users_on_hold_is_greater_than_hold_limitation")?;
11519                s.end()
11520            }
11521            LegalHoldsPolicyCreateError::TransientError => {
11522                // unit
11523                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11524                s.serialize_field(".tag", "transient_error")?;
11525                s.end()
11526            }
11527            LegalHoldsPolicyCreateError::NameMustBeUnique => {
11528                // unit
11529                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11530                s.serialize_field(".tag", "name_must_be_unique")?;
11531                s.end()
11532            }
11533            LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota => {
11534                // unit
11535                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11536                s.serialize_field(".tag", "team_exceeded_legal_hold_quota")?;
11537                s.end()
11538            }
11539            LegalHoldsPolicyCreateError::InvalidDate => {
11540                // unit
11541                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
11542                s.serialize_field(".tag", "invalid_date")?;
11543                s.end()
11544            }
11545            LegalHoldsPolicyCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11546        }
11547    }
11548}
11549
11550impl ::std::error::Error for LegalHoldsPolicyCreateError {
11551}
11552
11553impl ::std::fmt::Display for LegalHoldsPolicyCreateError {
11554    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11555        match self {
11556            LegalHoldsPolicyCreateError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
11557            LegalHoldsPolicyCreateError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
11558            LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate => f.write_str("Start date must be earlier than end date."),
11559            LegalHoldsPolicyCreateError::EmptyMembersList => f.write_str("The users list must have at least one user."),
11560            LegalHoldsPolicyCreateError::InvalidMembers => f.write_str("Some members in the members list are not valid to be placed under legal hold."),
11561            LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => f.write_str("You cannot add more than 5 users in a legal hold."),
11562            LegalHoldsPolicyCreateError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
11563            LegalHoldsPolicyCreateError::NameMustBeUnique => f.write_str("The name provided is already in use by another legal hold."),
11564            LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota => f.write_str("Team exceeded legal hold quota."),
11565            LegalHoldsPolicyCreateError::InvalidDate => f.write_str("The provided date is invalid."),
11566            _ => write!(f, "{:?}", *self),
11567        }
11568    }
11569}
11570
11571// union extends LegalHoldsError
11572impl From<LegalHoldsError> for LegalHoldsPolicyCreateError {
11573    fn from(parent: LegalHoldsError) -> Self {
11574        match parent {
11575            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyCreateError::UnknownLegalHoldError,
11576            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyCreateError::InsufficientPermissions,
11577            LegalHoldsError::Other => LegalHoldsPolicyCreateError::Other,
11578        }
11579    }
11580}
11581#[derive(Debug, Clone, PartialEq, Eq)]
11582#[non_exhaustive] // structs may have more fields added in the future.
11583pub struct LegalHoldsPolicyReleaseArg {
11584    /// The legal hold Id.
11585    pub id: LegalHoldId,
11586}
11587
11588impl LegalHoldsPolicyReleaseArg {
11589    pub fn new(id: LegalHoldId) -> Self {
11590        LegalHoldsPolicyReleaseArg {
11591            id,
11592        }
11593    }
11594}
11595
11596const LEGAL_HOLDS_POLICY_RELEASE_ARG_FIELDS: &[&str] = &["id"];
11597impl LegalHoldsPolicyReleaseArg {
11598    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11599        map: V,
11600    ) -> Result<LegalHoldsPolicyReleaseArg, V::Error> {
11601        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11602    }
11603
11604    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11605        mut map: V,
11606        optional: bool,
11607    ) -> Result<Option<LegalHoldsPolicyReleaseArg>, V::Error> {
11608        let mut field_id = None;
11609        let mut nothing = true;
11610        while let Some(key) = map.next_key::<&str>()? {
11611            nothing = false;
11612            match key {
11613                "id" => {
11614                    if field_id.is_some() {
11615                        return Err(::serde::de::Error::duplicate_field("id"));
11616                    }
11617                    field_id = Some(map.next_value()?);
11618                }
11619                _ => {
11620                    // unknown field allowed and ignored
11621                    map.next_value::<::serde_json::Value>()?;
11622                }
11623            }
11624        }
11625        if optional && nothing {
11626            return Ok(None);
11627        }
11628        let result = LegalHoldsPolicyReleaseArg {
11629            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
11630        };
11631        Ok(Some(result))
11632    }
11633
11634    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11635        &self,
11636        s: &mut S::SerializeStruct,
11637    ) -> Result<(), S::Error> {
11638        use serde::ser::SerializeStruct;
11639        s.serialize_field("id", &self.id)?;
11640        Ok(())
11641    }
11642}
11643
11644impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyReleaseArg {
11645    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11646        // struct deserializer
11647        use serde::de::{MapAccess, Visitor};
11648        struct StructVisitor;
11649        impl<'de> Visitor<'de> for StructVisitor {
11650            type Value = LegalHoldsPolicyReleaseArg;
11651            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11652                f.write_str("a LegalHoldsPolicyReleaseArg struct")
11653            }
11654            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11655                LegalHoldsPolicyReleaseArg::internal_deserialize(map)
11656            }
11657        }
11658        deserializer.deserialize_struct("LegalHoldsPolicyReleaseArg", LEGAL_HOLDS_POLICY_RELEASE_ARG_FIELDS, StructVisitor)
11659    }
11660}
11661
11662impl ::serde::ser::Serialize for LegalHoldsPolicyReleaseArg {
11663    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11664        // struct serializer
11665        use serde::ser::SerializeStruct;
11666        let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseArg", 1)?;
11667        self.internal_serialize::<S>(&mut s)?;
11668        s.end()
11669    }
11670}
11671
11672#[derive(Debug, Clone, PartialEq, Eq)]
11673#[non_exhaustive] // variants may be added in the future
11674pub enum LegalHoldsPolicyReleaseError {
11675    /// There has been an unknown legal hold error.
11676    UnknownLegalHoldError,
11677    /// You don't have permissions to perform this action.
11678    InsufficientPermissions,
11679    /// Legal hold is currently performing another operation.
11680    LegalHoldPerformingAnotherOperation,
11681    /// Legal hold is currently performing a release or is already released.
11682    LegalHoldAlreadyReleasing,
11683    /// Legal hold policy does not exist for
11684    /// [`LegalHoldsPolicyReleaseArg::id`](LegalHoldsPolicyReleaseArg).
11685    LegalHoldPolicyNotFound,
11686    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11687    /// typically indicates that this SDK version is out of date.
11688    Other,
11689}
11690
11691impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyReleaseError {
11692    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11693        // union deserializer
11694        use serde::de::{self, MapAccess, Visitor};
11695        struct EnumVisitor;
11696        impl<'de> Visitor<'de> for EnumVisitor {
11697            type Value = LegalHoldsPolicyReleaseError;
11698            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11699                f.write_str("a LegalHoldsPolicyReleaseError structure")
11700            }
11701            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11702                let tag: &str = match map.next_key()? {
11703                    Some(".tag") => map.next_value()?,
11704                    _ => return Err(de::Error::missing_field(".tag"))
11705                };
11706                let value = match tag {
11707                    "unknown_legal_hold_error" => LegalHoldsPolicyReleaseError::UnknownLegalHoldError,
11708                    "insufficient_permissions" => LegalHoldsPolicyReleaseError::InsufficientPermissions,
11709                    "legal_hold_performing_another_operation" => LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation,
11710                    "legal_hold_already_releasing" => LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing,
11711                    "legal_hold_policy_not_found" => LegalHoldsPolicyReleaseError::LegalHoldPolicyNotFound,
11712                    _ => LegalHoldsPolicyReleaseError::Other,
11713                };
11714                crate::eat_json_fields(&mut map)?;
11715                Ok(value)
11716            }
11717        }
11718        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
11719                                    "insufficient_permissions",
11720                                    "other",
11721                                    "legal_hold_performing_another_operation",
11722                                    "legal_hold_already_releasing",
11723                                    "legal_hold_policy_not_found"];
11724        deserializer.deserialize_struct("LegalHoldsPolicyReleaseError", VARIANTS, EnumVisitor)
11725    }
11726}
11727
11728impl ::serde::ser::Serialize for LegalHoldsPolicyReleaseError {
11729    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11730        // union serializer
11731        use serde::ser::SerializeStruct;
11732        match self {
11733            LegalHoldsPolicyReleaseError::UnknownLegalHoldError => {
11734                // unit
11735                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
11736                s.serialize_field(".tag", "unknown_legal_hold_error")?;
11737                s.end()
11738            }
11739            LegalHoldsPolicyReleaseError::InsufficientPermissions => {
11740                // unit
11741                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
11742                s.serialize_field(".tag", "insufficient_permissions")?;
11743                s.end()
11744            }
11745            LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation => {
11746                // unit
11747                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
11748                s.serialize_field(".tag", "legal_hold_performing_another_operation")?;
11749                s.end()
11750            }
11751            LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing => {
11752                // unit
11753                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
11754                s.serialize_field(".tag", "legal_hold_already_releasing")?;
11755                s.end()
11756            }
11757            LegalHoldsPolicyReleaseError::LegalHoldPolicyNotFound => {
11758                // unit
11759                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
11760                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
11761                s.end()
11762            }
11763            LegalHoldsPolicyReleaseError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11764        }
11765    }
11766}
11767
11768impl ::std::error::Error for LegalHoldsPolicyReleaseError {
11769}
11770
11771impl ::std::fmt::Display for LegalHoldsPolicyReleaseError {
11772    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11773        match self {
11774            LegalHoldsPolicyReleaseError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
11775            LegalHoldsPolicyReleaseError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
11776            LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation => f.write_str("Legal hold is currently performing another operation."),
11777            LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing => f.write_str("Legal hold is currently performing a release or is already released."),
11778            _ => write!(f, "{:?}", *self),
11779        }
11780    }
11781}
11782
11783// union extends LegalHoldsError
11784impl From<LegalHoldsError> for LegalHoldsPolicyReleaseError {
11785    fn from(parent: LegalHoldsError) -> Self {
11786        match parent {
11787            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyReleaseError::UnknownLegalHoldError,
11788            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyReleaseError::InsufficientPermissions,
11789            LegalHoldsError::Other => LegalHoldsPolicyReleaseError::Other,
11790        }
11791    }
11792}
11793#[derive(Debug, Clone, PartialEq, Eq)]
11794#[non_exhaustive] // structs may have more fields added in the future.
11795pub struct LegalHoldsPolicyUpdateArg {
11796    /// The legal hold Id.
11797    pub id: LegalHoldId,
11798    /// Policy new name.
11799    pub name: Option<LegalHoldPolicyName>,
11800    /// Policy new description.
11801    pub description: Option<LegalHoldPolicyDescription>,
11802    /// List of team member IDs to apply the policy on.
11803    pub members: Option<Vec<crate::types::team_common::TeamMemberId>>,
11804}
11805
11806impl LegalHoldsPolicyUpdateArg {
11807    pub fn new(id: LegalHoldId) -> Self {
11808        LegalHoldsPolicyUpdateArg {
11809            id,
11810            name: None,
11811            description: None,
11812            members: None,
11813        }
11814    }
11815
11816    pub fn with_name(mut self, value: LegalHoldPolicyName) -> Self {
11817        self.name = Some(value);
11818        self
11819    }
11820
11821    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
11822        self.description = Some(value);
11823        self
11824    }
11825
11826    pub fn with_members(mut self, value: Vec<crate::types::team_common::TeamMemberId>) -> Self {
11827        self.members = Some(value);
11828        self
11829    }
11830}
11831
11832const LEGAL_HOLDS_POLICY_UPDATE_ARG_FIELDS: &[&str] = &["id",
11833                                                        "name",
11834                                                        "description",
11835                                                        "members"];
11836impl LegalHoldsPolicyUpdateArg {
11837    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11838        map: V,
11839    ) -> Result<LegalHoldsPolicyUpdateArg, V::Error> {
11840        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11841    }
11842
11843    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11844        mut map: V,
11845        optional: bool,
11846    ) -> Result<Option<LegalHoldsPolicyUpdateArg>, V::Error> {
11847        let mut field_id = None;
11848        let mut field_name = None;
11849        let mut field_description = None;
11850        let mut field_members = None;
11851        let mut nothing = true;
11852        while let Some(key) = map.next_key::<&str>()? {
11853            nothing = false;
11854            match key {
11855                "id" => {
11856                    if field_id.is_some() {
11857                        return Err(::serde::de::Error::duplicate_field("id"));
11858                    }
11859                    field_id = Some(map.next_value()?);
11860                }
11861                "name" => {
11862                    if field_name.is_some() {
11863                        return Err(::serde::de::Error::duplicate_field("name"));
11864                    }
11865                    field_name = Some(map.next_value()?);
11866                }
11867                "description" => {
11868                    if field_description.is_some() {
11869                        return Err(::serde::de::Error::duplicate_field("description"));
11870                    }
11871                    field_description = Some(map.next_value()?);
11872                }
11873                "members" => {
11874                    if field_members.is_some() {
11875                        return Err(::serde::de::Error::duplicate_field("members"));
11876                    }
11877                    field_members = Some(map.next_value()?);
11878                }
11879                _ => {
11880                    // unknown field allowed and ignored
11881                    map.next_value::<::serde_json::Value>()?;
11882                }
11883            }
11884        }
11885        if optional && nothing {
11886            return Ok(None);
11887        }
11888        let result = LegalHoldsPolicyUpdateArg {
11889            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
11890            name: field_name.and_then(Option::flatten),
11891            description: field_description.and_then(Option::flatten),
11892            members: field_members.and_then(Option::flatten),
11893        };
11894        Ok(Some(result))
11895    }
11896
11897    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11898        &self,
11899        s: &mut S::SerializeStruct,
11900    ) -> Result<(), S::Error> {
11901        use serde::ser::SerializeStruct;
11902        s.serialize_field("id", &self.id)?;
11903        if let Some(val) = &self.name {
11904            s.serialize_field("name", val)?;
11905        }
11906        if let Some(val) = &self.description {
11907            s.serialize_field("description", val)?;
11908        }
11909        if let Some(val) = &self.members {
11910            s.serialize_field("members", val)?;
11911        }
11912        Ok(())
11913    }
11914}
11915
11916impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyUpdateArg {
11917    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11918        // struct deserializer
11919        use serde::de::{MapAccess, Visitor};
11920        struct StructVisitor;
11921        impl<'de> Visitor<'de> for StructVisitor {
11922            type Value = LegalHoldsPolicyUpdateArg;
11923            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11924                f.write_str("a LegalHoldsPolicyUpdateArg struct")
11925            }
11926            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11927                LegalHoldsPolicyUpdateArg::internal_deserialize(map)
11928            }
11929        }
11930        deserializer.deserialize_struct("LegalHoldsPolicyUpdateArg", LEGAL_HOLDS_POLICY_UPDATE_ARG_FIELDS, StructVisitor)
11931    }
11932}
11933
11934impl ::serde::ser::Serialize for LegalHoldsPolicyUpdateArg {
11935    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11936        // struct serializer
11937        use serde::ser::SerializeStruct;
11938        let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateArg", 4)?;
11939        self.internal_serialize::<S>(&mut s)?;
11940        s.end()
11941    }
11942}
11943
11944#[derive(Debug, Clone, PartialEq, Eq)]
11945#[non_exhaustive] // variants may be added in the future
11946pub enum LegalHoldsPolicyUpdateError {
11947    /// There has been an unknown legal hold error.
11948    UnknownLegalHoldError,
11949    /// You don't have permissions to perform this action.
11950    InsufficientPermissions,
11951    /// Temporary infrastructure failure, please retry.
11952    TransientError,
11953    /// Trying to release an inactive legal hold.
11954    InactiveLegalHold,
11955    /// Legal hold is currently performing another operation.
11956    LegalHoldPerformingAnotherOperation,
11957    /// Some members in the members list are not valid to be placed under legal hold.
11958    InvalidMembers,
11959    /// You cannot add more than 5 users in a legal hold.
11960    NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11961    /// The users list must have at least one user.
11962    EmptyMembersList,
11963    /// The name provided is already in use by another legal hold.
11964    NameMustBeUnique,
11965    /// Legal hold policy does not exist for
11966    /// [`LegalHoldsPolicyUpdateArg::id`](LegalHoldsPolicyUpdateArg).
11967    LegalHoldPolicyNotFound,
11968    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11969    /// typically indicates that this SDK version is out of date.
11970    Other,
11971}
11972
11973impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyUpdateError {
11974    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11975        // union deserializer
11976        use serde::de::{self, MapAccess, Visitor};
11977        struct EnumVisitor;
11978        impl<'de> Visitor<'de> for EnumVisitor {
11979            type Value = LegalHoldsPolicyUpdateError;
11980            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11981                f.write_str("a LegalHoldsPolicyUpdateError structure")
11982            }
11983            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11984                let tag: &str = match map.next_key()? {
11985                    Some(".tag") => map.next_value()?,
11986                    _ => return Err(de::Error::missing_field(".tag"))
11987                };
11988                let value = match tag {
11989                    "unknown_legal_hold_error" => LegalHoldsPolicyUpdateError::UnknownLegalHoldError,
11990                    "insufficient_permissions" => LegalHoldsPolicyUpdateError::InsufficientPermissions,
11991                    "transient_error" => LegalHoldsPolicyUpdateError::TransientError,
11992                    "inactive_legal_hold" => LegalHoldsPolicyUpdateError::InactiveLegalHold,
11993                    "legal_hold_performing_another_operation" => LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation,
11994                    "invalid_members" => LegalHoldsPolicyUpdateError::InvalidMembers,
11995                    "number_of_users_on_hold_is_greater_than_hold_limitation" => LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11996                    "empty_members_list" => LegalHoldsPolicyUpdateError::EmptyMembersList,
11997                    "name_must_be_unique" => LegalHoldsPolicyUpdateError::NameMustBeUnique,
11998                    "legal_hold_policy_not_found" => LegalHoldsPolicyUpdateError::LegalHoldPolicyNotFound,
11999                    _ => LegalHoldsPolicyUpdateError::Other,
12000                };
12001                crate::eat_json_fields(&mut map)?;
12002                Ok(value)
12003            }
12004        }
12005        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
12006                                    "insufficient_permissions",
12007                                    "other",
12008                                    "transient_error",
12009                                    "inactive_legal_hold",
12010                                    "legal_hold_performing_another_operation",
12011                                    "invalid_members",
12012                                    "number_of_users_on_hold_is_greater_than_hold_limitation",
12013                                    "empty_members_list",
12014                                    "name_must_be_unique",
12015                                    "legal_hold_policy_not_found"];
12016        deserializer.deserialize_struct("LegalHoldsPolicyUpdateError", VARIANTS, EnumVisitor)
12017    }
12018}
12019
12020impl ::serde::ser::Serialize for LegalHoldsPolicyUpdateError {
12021    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12022        // union serializer
12023        use serde::ser::SerializeStruct;
12024        match self {
12025            LegalHoldsPolicyUpdateError::UnknownLegalHoldError => {
12026                // unit
12027                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12028                s.serialize_field(".tag", "unknown_legal_hold_error")?;
12029                s.end()
12030            }
12031            LegalHoldsPolicyUpdateError::InsufficientPermissions => {
12032                // unit
12033                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12034                s.serialize_field(".tag", "insufficient_permissions")?;
12035                s.end()
12036            }
12037            LegalHoldsPolicyUpdateError::TransientError => {
12038                // unit
12039                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12040                s.serialize_field(".tag", "transient_error")?;
12041                s.end()
12042            }
12043            LegalHoldsPolicyUpdateError::InactiveLegalHold => {
12044                // unit
12045                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12046                s.serialize_field(".tag", "inactive_legal_hold")?;
12047                s.end()
12048            }
12049            LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation => {
12050                // unit
12051                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12052                s.serialize_field(".tag", "legal_hold_performing_another_operation")?;
12053                s.end()
12054            }
12055            LegalHoldsPolicyUpdateError::InvalidMembers => {
12056                // unit
12057                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12058                s.serialize_field(".tag", "invalid_members")?;
12059                s.end()
12060            }
12061            LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => {
12062                // unit
12063                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12064                s.serialize_field(".tag", "number_of_users_on_hold_is_greater_than_hold_limitation")?;
12065                s.end()
12066            }
12067            LegalHoldsPolicyUpdateError::EmptyMembersList => {
12068                // unit
12069                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12070                s.serialize_field(".tag", "empty_members_list")?;
12071                s.end()
12072            }
12073            LegalHoldsPolicyUpdateError::NameMustBeUnique => {
12074                // unit
12075                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12076                s.serialize_field(".tag", "name_must_be_unique")?;
12077                s.end()
12078            }
12079            LegalHoldsPolicyUpdateError::LegalHoldPolicyNotFound => {
12080                // unit
12081                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
12082                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
12083                s.end()
12084            }
12085            LegalHoldsPolicyUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12086        }
12087    }
12088}
12089
12090impl ::std::error::Error for LegalHoldsPolicyUpdateError {
12091}
12092
12093impl ::std::fmt::Display for LegalHoldsPolicyUpdateError {
12094    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12095        match self {
12096            LegalHoldsPolicyUpdateError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
12097            LegalHoldsPolicyUpdateError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
12098            LegalHoldsPolicyUpdateError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
12099            LegalHoldsPolicyUpdateError::InactiveLegalHold => f.write_str("Trying to release an inactive legal hold."),
12100            LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation => f.write_str("Legal hold is currently performing another operation."),
12101            LegalHoldsPolicyUpdateError::InvalidMembers => f.write_str("Some members in the members list are not valid to be placed under legal hold."),
12102            LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => f.write_str("You cannot add more than 5 users in a legal hold."),
12103            LegalHoldsPolicyUpdateError::EmptyMembersList => f.write_str("The users list must have at least one user."),
12104            LegalHoldsPolicyUpdateError::NameMustBeUnique => f.write_str("The name provided is already in use by another legal hold."),
12105            _ => write!(f, "{:?}", *self),
12106        }
12107    }
12108}
12109
12110// union extends LegalHoldsError
12111impl From<LegalHoldsError> for LegalHoldsPolicyUpdateError {
12112    fn from(parent: LegalHoldsError) -> Self {
12113        match parent {
12114            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyUpdateError::UnknownLegalHoldError,
12115            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyUpdateError::InsufficientPermissions,
12116            LegalHoldsError::Other => LegalHoldsPolicyUpdateError::Other,
12117        }
12118    }
12119}
12120#[derive(Debug, Clone, PartialEq, Eq)]
12121#[non_exhaustive] // structs may have more fields added in the future.
12122pub struct ListMemberAppsArg {
12123    /// The team member id.
12124    pub team_member_id: String,
12125}
12126
12127impl ListMemberAppsArg {
12128    pub fn new(team_member_id: String) -> Self {
12129        ListMemberAppsArg {
12130            team_member_id,
12131        }
12132    }
12133}
12134
12135const LIST_MEMBER_APPS_ARG_FIELDS: &[&str] = &["team_member_id"];
12136impl ListMemberAppsArg {
12137    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12138        map: V,
12139    ) -> Result<ListMemberAppsArg, V::Error> {
12140        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12141    }
12142
12143    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12144        mut map: V,
12145        optional: bool,
12146    ) -> Result<Option<ListMemberAppsArg>, V::Error> {
12147        let mut field_team_member_id = None;
12148        let mut nothing = true;
12149        while let Some(key) = map.next_key::<&str>()? {
12150            nothing = false;
12151            match key {
12152                "team_member_id" => {
12153                    if field_team_member_id.is_some() {
12154                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
12155                    }
12156                    field_team_member_id = Some(map.next_value()?);
12157                }
12158                _ => {
12159                    // unknown field allowed and ignored
12160                    map.next_value::<::serde_json::Value>()?;
12161                }
12162            }
12163        }
12164        if optional && nothing {
12165            return Ok(None);
12166        }
12167        let result = ListMemberAppsArg {
12168            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
12169        };
12170        Ok(Some(result))
12171    }
12172
12173    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12174        &self,
12175        s: &mut S::SerializeStruct,
12176    ) -> Result<(), S::Error> {
12177        use serde::ser::SerializeStruct;
12178        s.serialize_field("team_member_id", &self.team_member_id)?;
12179        Ok(())
12180    }
12181}
12182
12183impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsArg {
12184    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12185        // struct deserializer
12186        use serde::de::{MapAccess, Visitor};
12187        struct StructVisitor;
12188        impl<'de> Visitor<'de> for StructVisitor {
12189            type Value = ListMemberAppsArg;
12190            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12191                f.write_str("a ListMemberAppsArg struct")
12192            }
12193            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12194                ListMemberAppsArg::internal_deserialize(map)
12195            }
12196        }
12197        deserializer.deserialize_struct("ListMemberAppsArg", LIST_MEMBER_APPS_ARG_FIELDS, StructVisitor)
12198    }
12199}
12200
12201impl ::serde::ser::Serialize for ListMemberAppsArg {
12202    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12203        // struct serializer
12204        use serde::ser::SerializeStruct;
12205        let mut s = serializer.serialize_struct("ListMemberAppsArg", 1)?;
12206        self.internal_serialize::<S>(&mut s)?;
12207        s.end()
12208    }
12209}
12210
12211/// Error returned by
12212/// [`linked_apps_list_member_linked_apps()`](crate::team::linked_apps_list_member_linked_apps).
12213#[derive(Debug, Clone, PartialEq, Eq)]
12214#[non_exhaustive] // variants may be added in the future
12215pub enum ListMemberAppsError {
12216    /// Member not found.
12217    MemberNotFound,
12218    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12219    /// typically indicates that this SDK version is out of date.
12220    Other,
12221}
12222
12223impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsError {
12224    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12225        // union deserializer
12226        use serde::de::{self, MapAccess, Visitor};
12227        struct EnumVisitor;
12228        impl<'de> Visitor<'de> for EnumVisitor {
12229            type Value = ListMemberAppsError;
12230            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12231                f.write_str("a ListMemberAppsError structure")
12232            }
12233            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12234                let tag: &str = match map.next_key()? {
12235                    Some(".tag") => map.next_value()?,
12236                    _ => return Err(de::Error::missing_field(".tag"))
12237                };
12238                let value = match tag {
12239                    "member_not_found" => ListMemberAppsError::MemberNotFound,
12240                    _ => ListMemberAppsError::Other,
12241                };
12242                crate::eat_json_fields(&mut map)?;
12243                Ok(value)
12244            }
12245        }
12246        const VARIANTS: &[&str] = &["member_not_found",
12247                                    "other"];
12248        deserializer.deserialize_struct("ListMemberAppsError", VARIANTS, EnumVisitor)
12249    }
12250}
12251
12252impl ::serde::ser::Serialize for ListMemberAppsError {
12253    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12254        // union serializer
12255        use serde::ser::SerializeStruct;
12256        match self {
12257            ListMemberAppsError::MemberNotFound => {
12258                // unit
12259                let mut s = serializer.serialize_struct("ListMemberAppsError", 1)?;
12260                s.serialize_field(".tag", "member_not_found")?;
12261                s.end()
12262            }
12263            ListMemberAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12264        }
12265    }
12266}
12267
12268impl ::std::error::Error for ListMemberAppsError {
12269}
12270
12271impl ::std::fmt::Display for ListMemberAppsError {
12272    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12273        match self {
12274            ListMemberAppsError::MemberNotFound => f.write_str("Member not found."),
12275            _ => write!(f, "{:?}", *self),
12276        }
12277    }
12278}
12279
12280#[derive(Debug, Clone, PartialEq, Eq)]
12281#[non_exhaustive] // structs may have more fields added in the future.
12282pub struct ListMemberAppsResult {
12283    /// List of third party applications linked by this team member.
12284    pub linked_api_apps: Vec<ApiApp>,
12285}
12286
12287impl ListMemberAppsResult {
12288    pub fn new(linked_api_apps: Vec<ApiApp>) -> Self {
12289        ListMemberAppsResult {
12290            linked_api_apps,
12291        }
12292    }
12293}
12294
12295const LIST_MEMBER_APPS_RESULT_FIELDS: &[&str] = &["linked_api_apps"];
12296impl ListMemberAppsResult {
12297    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12298        map: V,
12299    ) -> Result<ListMemberAppsResult, V::Error> {
12300        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12301    }
12302
12303    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12304        mut map: V,
12305        optional: bool,
12306    ) -> Result<Option<ListMemberAppsResult>, V::Error> {
12307        let mut field_linked_api_apps = None;
12308        let mut nothing = true;
12309        while let Some(key) = map.next_key::<&str>()? {
12310            nothing = false;
12311            match key {
12312                "linked_api_apps" => {
12313                    if field_linked_api_apps.is_some() {
12314                        return Err(::serde::de::Error::duplicate_field("linked_api_apps"));
12315                    }
12316                    field_linked_api_apps = Some(map.next_value()?);
12317                }
12318                _ => {
12319                    // unknown field allowed and ignored
12320                    map.next_value::<::serde_json::Value>()?;
12321                }
12322            }
12323        }
12324        if optional && nothing {
12325            return Ok(None);
12326        }
12327        let result = ListMemberAppsResult {
12328            linked_api_apps: field_linked_api_apps.ok_or_else(|| ::serde::de::Error::missing_field("linked_api_apps"))?,
12329        };
12330        Ok(Some(result))
12331    }
12332
12333    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12334        &self,
12335        s: &mut S::SerializeStruct,
12336    ) -> Result<(), S::Error> {
12337        use serde::ser::SerializeStruct;
12338        s.serialize_field("linked_api_apps", &self.linked_api_apps)?;
12339        Ok(())
12340    }
12341}
12342
12343impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsResult {
12344    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12345        // struct deserializer
12346        use serde::de::{MapAccess, Visitor};
12347        struct StructVisitor;
12348        impl<'de> Visitor<'de> for StructVisitor {
12349            type Value = ListMemberAppsResult;
12350            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12351                f.write_str("a ListMemberAppsResult struct")
12352            }
12353            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12354                ListMemberAppsResult::internal_deserialize(map)
12355            }
12356        }
12357        deserializer.deserialize_struct("ListMemberAppsResult", LIST_MEMBER_APPS_RESULT_FIELDS, StructVisitor)
12358    }
12359}
12360
12361impl ::serde::ser::Serialize for ListMemberAppsResult {
12362    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12363        // struct serializer
12364        use serde::ser::SerializeStruct;
12365        let mut s = serializer.serialize_struct("ListMemberAppsResult", 1)?;
12366        self.internal_serialize::<S>(&mut s)?;
12367        s.end()
12368    }
12369}
12370
12371#[derive(Debug, Clone, PartialEq, Eq)]
12372#[non_exhaustive] // structs may have more fields added in the future.
12373pub struct ListMemberDevicesArg {
12374    /// The team's member id.
12375    pub team_member_id: String,
12376    /// Whether to list web sessions of the team's member.
12377    pub include_web_sessions: bool,
12378    /// Whether to list linked desktop devices of the team's member.
12379    pub include_desktop_clients: bool,
12380    /// Whether to list linked mobile devices of the team's member.
12381    pub include_mobile_clients: bool,
12382}
12383
12384impl ListMemberDevicesArg {
12385    pub fn new(team_member_id: String) -> Self {
12386        ListMemberDevicesArg {
12387            team_member_id,
12388            include_web_sessions: true,
12389            include_desktop_clients: true,
12390            include_mobile_clients: true,
12391        }
12392    }
12393
12394    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
12395        self.include_web_sessions = value;
12396        self
12397    }
12398
12399    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
12400        self.include_desktop_clients = value;
12401        self
12402    }
12403
12404    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
12405        self.include_mobile_clients = value;
12406        self
12407    }
12408}
12409
12410const LIST_MEMBER_DEVICES_ARG_FIELDS: &[&str] = &["team_member_id",
12411                                                  "include_web_sessions",
12412                                                  "include_desktop_clients",
12413                                                  "include_mobile_clients"];
12414impl ListMemberDevicesArg {
12415    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12416        map: V,
12417    ) -> Result<ListMemberDevicesArg, V::Error> {
12418        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12419    }
12420
12421    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12422        mut map: V,
12423        optional: bool,
12424    ) -> Result<Option<ListMemberDevicesArg>, V::Error> {
12425        let mut field_team_member_id = None;
12426        let mut field_include_web_sessions = None;
12427        let mut field_include_desktop_clients = None;
12428        let mut field_include_mobile_clients = None;
12429        let mut nothing = true;
12430        while let Some(key) = map.next_key::<&str>()? {
12431            nothing = false;
12432            match key {
12433                "team_member_id" => {
12434                    if field_team_member_id.is_some() {
12435                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
12436                    }
12437                    field_team_member_id = Some(map.next_value()?);
12438                }
12439                "include_web_sessions" => {
12440                    if field_include_web_sessions.is_some() {
12441                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
12442                    }
12443                    field_include_web_sessions = Some(map.next_value()?);
12444                }
12445                "include_desktop_clients" => {
12446                    if field_include_desktop_clients.is_some() {
12447                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
12448                    }
12449                    field_include_desktop_clients = Some(map.next_value()?);
12450                }
12451                "include_mobile_clients" => {
12452                    if field_include_mobile_clients.is_some() {
12453                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
12454                    }
12455                    field_include_mobile_clients = Some(map.next_value()?);
12456                }
12457                _ => {
12458                    // unknown field allowed and ignored
12459                    map.next_value::<::serde_json::Value>()?;
12460                }
12461            }
12462        }
12463        if optional && nothing {
12464            return Ok(None);
12465        }
12466        let result = ListMemberDevicesArg {
12467            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
12468            include_web_sessions: field_include_web_sessions.unwrap_or(true),
12469            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
12470            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
12471        };
12472        Ok(Some(result))
12473    }
12474
12475    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12476        &self,
12477        s: &mut S::SerializeStruct,
12478    ) -> Result<(), S::Error> {
12479        use serde::ser::SerializeStruct;
12480        s.serialize_field("team_member_id", &self.team_member_id)?;
12481        if !self.include_web_sessions {
12482            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
12483        }
12484        if !self.include_desktop_clients {
12485            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
12486        }
12487        if !self.include_mobile_clients {
12488            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
12489        }
12490        Ok(())
12491    }
12492}
12493
12494impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesArg {
12495    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12496        // struct deserializer
12497        use serde::de::{MapAccess, Visitor};
12498        struct StructVisitor;
12499        impl<'de> Visitor<'de> for StructVisitor {
12500            type Value = ListMemberDevicesArg;
12501            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12502                f.write_str("a ListMemberDevicesArg struct")
12503            }
12504            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12505                ListMemberDevicesArg::internal_deserialize(map)
12506            }
12507        }
12508        deserializer.deserialize_struct("ListMemberDevicesArg", LIST_MEMBER_DEVICES_ARG_FIELDS, StructVisitor)
12509    }
12510}
12511
12512impl ::serde::ser::Serialize for ListMemberDevicesArg {
12513    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12514        // struct serializer
12515        use serde::ser::SerializeStruct;
12516        let mut s = serializer.serialize_struct("ListMemberDevicesArg", 4)?;
12517        self.internal_serialize::<S>(&mut s)?;
12518        s.end()
12519    }
12520}
12521
12522#[derive(Debug, Clone, PartialEq, Eq)]
12523#[non_exhaustive] // variants may be added in the future
12524pub enum ListMemberDevicesError {
12525    /// Member not found.
12526    MemberNotFound,
12527    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12528    /// typically indicates that this SDK version is out of date.
12529    Other,
12530}
12531
12532impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesError {
12533    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12534        // union deserializer
12535        use serde::de::{self, MapAccess, Visitor};
12536        struct EnumVisitor;
12537        impl<'de> Visitor<'de> for EnumVisitor {
12538            type Value = ListMemberDevicesError;
12539            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12540                f.write_str("a ListMemberDevicesError structure")
12541            }
12542            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12543                let tag: &str = match map.next_key()? {
12544                    Some(".tag") => map.next_value()?,
12545                    _ => return Err(de::Error::missing_field(".tag"))
12546                };
12547                let value = match tag {
12548                    "member_not_found" => ListMemberDevicesError::MemberNotFound,
12549                    _ => ListMemberDevicesError::Other,
12550                };
12551                crate::eat_json_fields(&mut map)?;
12552                Ok(value)
12553            }
12554        }
12555        const VARIANTS: &[&str] = &["member_not_found",
12556                                    "other"];
12557        deserializer.deserialize_struct("ListMemberDevicesError", VARIANTS, EnumVisitor)
12558    }
12559}
12560
12561impl ::serde::ser::Serialize for ListMemberDevicesError {
12562    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12563        // union serializer
12564        use serde::ser::SerializeStruct;
12565        match self {
12566            ListMemberDevicesError::MemberNotFound => {
12567                // unit
12568                let mut s = serializer.serialize_struct("ListMemberDevicesError", 1)?;
12569                s.serialize_field(".tag", "member_not_found")?;
12570                s.end()
12571            }
12572            ListMemberDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12573        }
12574    }
12575}
12576
12577impl ::std::error::Error for ListMemberDevicesError {
12578}
12579
12580impl ::std::fmt::Display for ListMemberDevicesError {
12581    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12582        match self {
12583            ListMemberDevicesError::MemberNotFound => f.write_str("Member not found."),
12584            _ => write!(f, "{:?}", *self),
12585        }
12586    }
12587}
12588
12589#[derive(Debug, Clone, PartialEq, Eq, Default)]
12590#[non_exhaustive] // structs may have more fields added in the future.
12591pub struct ListMemberDevicesResult {
12592    /// List of web sessions made by this team member.
12593    pub active_web_sessions: Option<Vec<ActiveWebSession>>,
12594    /// List of desktop clients used by this team member.
12595    pub desktop_client_sessions: Option<Vec<DesktopClientSession>>,
12596    /// List of mobile client used by this team member.
12597    pub mobile_client_sessions: Option<Vec<MobileClientSession>>,
12598}
12599
12600impl ListMemberDevicesResult {
12601    pub fn with_active_web_sessions(mut self, value: Vec<ActiveWebSession>) -> Self {
12602        self.active_web_sessions = Some(value);
12603        self
12604    }
12605
12606    pub fn with_desktop_client_sessions(mut self, value: Vec<DesktopClientSession>) -> Self {
12607        self.desktop_client_sessions = Some(value);
12608        self
12609    }
12610
12611    pub fn with_mobile_client_sessions(mut self, value: Vec<MobileClientSession>) -> Self {
12612        self.mobile_client_sessions = Some(value);
12613        self
12614    }
12615}
12616
12617const LIST_MEMBER_DEVICES_RESULT_FIELDS: &[&str] = &["active_web_sessions",
12618                                                     "desktop_client_sessions",
12619                                                     "mobile_client_sessions"];
12620impl ListMemberDevicesResult {
12621    // no _opt deserializer
12622    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12623        mut map: V,
12624    ) -> Result<ListMemberDevicesResult, V::Error> {
12625        let mut field_active_web_sessions = None;
12626        let mut field_desktop_client_sessions = None;
12627        let mut field_mobile_client_sessions = None;
12628        while let Some(key) = map.next_key::<&str>()? {
12629            match key {
12630                "active_web_sessions" => {
12631                    if field_active_web_sessions.is_some() {
12632                        return Err(::serde::de::Error::duplicate_field("active_web_sessions"));
12633                    }
12634                    field_active_web_sessions = Some(map.next_value()?);
12635                }
12636                "desktop_client_sessions" => {
12637                    if field_desktop_client_sessions.is_some() {
12638                        return Err(::serde::de::Error::duplicate_field("desktop_client_sessions"));
12639                    }
12640                    field_desktop_client_sessions = Some(map.next_value()?);
12641                }
12642                "mobile_client_sessions" => {
12643                    if field_mobile_client_sessions.is_some() {
12644                        return Err(::serde::de::Error::duplicate_field("mobile_client_sessions"));
12645                    }
12646                    field_mobile_client_sessions = Some(map.next_value()?);
12647                }
12648                _ => {
12649                    // unknown field allowed and ignored
12650                    map.next_value::<::serde_json::Value>()?;
12651                }
12652            }
12653        }
12654        let result = ListMemberDevicesResult {
12655            active_web_sessions: field_active_web_sessions.and_then(Option::flatten),
12656            desktop_client_sessions: field_desktop_client_sessions.and_then(Option::flatten),
12657            mobile_client_sessions: field_mobile_client_sessions.and_then(Option::flatten),
12658        };
12659        Ok(result)
12660    }
12661
12662    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12663        &self,
12664        s: &mut S::SerializeStruct,
12665    ) -> Result<(), S::Error> {
12666        use serde::ser::SerializeStruct;
12667        if let Some(val) = &self.active_web_sessions {
12668            s.serialize_field("active_web_sessions", val)?;
12669        }
12670        if let Some(val) = &self.desktop_client_sessions {
12671            s.serialize_field("desktop_client_sessions", val)?;
12672        }
12673        if let Some(val) = &self.mobile_client_sessions {
12674            s.serialize_field("mobile_client_sessions", val)?;
12675        }
12676        Ok(())
12677    }
12678}
12679
12680impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesResult {
12681    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12682        // struct deserializer
12683        use serde::de::{MapAccess, Visitor};
12684        struct StructVisitor;
12685        impl<'de> Visitor<'de> for StructVisitor {
12686            type Value = ListMemberDevicesResult;
12687            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12688                f.write_str("a ListMemberDevicesResult struct")
12689            }
12690            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12691                ListMemberDevicesResult::internal_deserialize(map)
12692            }
12693        }
12694        deserializer.deserialize_struct("ListMemberDevicesResult", LIST_MEMBER_DEVICES_RESULT_FIELDS, StructVisitor)
12695    }
12696}
12697
12698impl ::serde::ser::Serialize for ListMemberDevicesResult {
12699    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12700        // struct serializer
12701        use serde::ser::SerializeStruct;
12702        let mut s = serializer.serialize_struct("ListMemberDevicesResult", 3)?;
12703        self.internal_serialize::<S>(&mut s)?;
12704        s.end()
12705    }
12706}
12707
12708/// Arguments for
12709/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
12710#[derive(Debug, Clone, PartialEq, Eq, Default)]
12711#[non_exhaustive] // structs may have more fields added in the future.
12712pub struct ListMembersAppsArg {
12713    /// At the first call to the
12714    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
12715    /// the cursor shouldn't be passed. Then, if the result of the call includes a cursor, the
12716    /// following requests should include the received cursors in order to receive the next sub list
12717    /// of the team applications.
12718    pub cursor: Option<String>,
12719}
12720
12721impl ListMembersAppsArg {
12722    pub fn with_cursor(mut self, value: String) -> Self {
12723        self.cursor = Some(value);
12724        self
12725    }
12726}
12727
12728const LIST_MEMBERS_APPS_ARG_FIELDS: &[&str] = &["cursor"];
12729impl ListMembersAppsArg {
12730    // no _opt deserializer
12731    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12732        mut map: V,
12733    ) -> Result<ListMembersAppsArg, V::Error> {
12734        let mut field_cursor = None;
12735        while let Some(key) = map.next_key::<&str>()? {
12736            match key {
12737                "cursor" => {
12738                    if field_cursor.is_some() {
12739                        return Err(::serde::de::Error::duplicate_field("cursor"));
12740                    }
12741                    field_cursor = Some(map.next_value()?);
12742                }
12743                _ => {
12744                    // unknown field allowed and ignored
12745                    map.next_value::<::serde_json::Value>()?;
12746                }
12747            }
12748        }
12749        let result = ListMembersAppsArg {
12750            cursor: field_cursor.and_then(Option::flatten),
12751        };
12752        Ok(result)
12753    }
12754
12755    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12756        &self,
12757        s: &mut S::SerializeStruct,
12758    ) -> Result<(), S::Error> {
12759        use serde::ser::SerializeStruct;
12760        if let Some(val) = &self.cursor {
12761            s.serialize_field("cursor", val)?;
12762        }
12763        Ok(())
12764    }
12765}
12766
12767impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsArg {
12768    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12769        // struct deserializer
12770        use serde::de::{MapAccess, Visitor};
12771        struct StructVisitor;
12772        impl<'de> Visitor<'de> for StructVisitor {
12773            type Value = ListMembersAppsArg;
12774            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12775                f.write_str("a ListMembersAppsArg struct")
12776            }
12777            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12778                ListMembersAppsArg::internal_deserialize(map)
12779            }
12780        }
12781        deserializer.deserialize_struct("ListMembersAppsArg", LIST_MEMBERS_APPS_ARG_FIELDS, StructVisitor)
12782    }
12783}
12784
12785impl ::serde::ser::Serialize for ListMembersAppsArg {
12786    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12787        // struct serializer
12788        use serde::ser::SerializeStruct;
12789        let mut s = serializer.serialize_struct("ListMembersAppsArg", 1)?;
12790        self.internal_serialize::<S>(&mut s)?;
12791        s.end()
12792    }
12793}
12794
12795/// Error returned by
12796/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
12797#[derive(Debug, Clone, PartialEq, Eq)]
12798#[non_exhaustive] // variants may be added in the future
12799pub enum ListMembersAppsError {
12800    /// Indicates that the cursor has been invalidated. Call
12801    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
12802    /// again with an empty cursor to obtain a new cursor.
12803    Reset,
12804    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12805    /// typically indicates that this SDK version is out of date.
12806    Other,
12807}
12808
12809impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsError {
12810    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12811        // union deserializer
12812        use serde::de::{self, MapAccess, Visitor};
12813        struct EnumVisitor;
12814        impl<'de> Visitor<'de> for EnumVisitor {
12815            type Value = ListMembersAppsError;
12816            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12817                f.write_str("a ListMembersAppsError structure")
12818            }
12819            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12820                let tag: &str = match map.next_key()? {
12821                    Some(".tag") => map.next_value()?,
12822                    _ => return Err(de::Error::missing_field(".tag"))
12823                };
12824                let value = match tag {
12825                    "reset" => ListMembersAppsError::Reset,
12826                    _ => ListMembersAppsError::Other,
12827                };
12828                crate::eat_json_fields(&mut map)?;
12829                Ok(value)
12830            }
12831        }
12832        const VARIANTS: &[&str] = &["reset",
12833                                    "other"];
12834        deserializer.deserialize_struct("ListMembersAppsError", VARIANTS, EnumVisitor)
12835    }
12836}
12837
12838impl ::serde::ser::Serialize for ListMembersAppsError {
12839    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12840        // union serializer
12841        use serde::ser::SerializeStruct;
12842        match self {
12843            ListMembersAppsError::Reset => {
12844                // unit
12845                let mut s = serializer.serialize_struct("ListMembersAppsError", 1)?;
12846                s.serialize_field(".tag", "reset")?;
12847                s.end()
12848            }
12849            ListMembersAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12850        }
12851    }
12852}
12853
12854impl ::std::error::Error for ListMembersAppsError {
12855}
12856
12857impl ::std::fmt::Display for ListMembersAppsError {
12858    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12859        write!(f, "{:?}", *self)
12860    }
12861}
12862
12863/// Information returned by
12864/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
12865#[derive(Debug, Clone, PartialEq, Eq)]
12866#[non_exhaustive] // structs may have more fields added in the future.
12867pub struct ListMembersAppsResult {
12868    /// The linked applications of each member of the team.
12869    pub apps: Vec<MemberLinkedApps>,
12870    /// If true, then there are more apps available. Pass the cursor to
12871    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
12872    /// to retrieve the rest.
12873    pub has_more: bool,
12874    /// Pass the cursor into
12875    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
12876    /// to receive the next sub list of team's applications.
12877    pub cursor: Option<String>,
12878}
12879
12880impl ListMembersAppsResult {
12881    pub fn new(apps: Vec<MemberLinkedApps>, has_more: bool) -> Self {
12882        ListMembersAppsResult {
12883            apps,
12884            has_more,
12885            cursor: None,
12886        }
12887    }
12888
12889    pub fn with_cursor(mut self, value: String) -> Self {
12890        self.cursor = Some(value);
12891        self
12892    }
12893}
12894
12895const LIST_MEMBERS_APPS_RESULT_FIELDS: &[&str] = &["apps",
12896                                                   "has_more",
12897                                                   "cursor"];
12898impl ListMembersAppsResult {
12899    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12900        map: V,
12901    ) -> Result<ListMembersAppsResult, V::Error> {
12902        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12903    }
12904
12905    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12906        mut map: V,
12907        optional: bool,
12908    ) -> Result<Option<ListMembersAppsResult>, V::Error> {
12909        let mut field_apps = None;
12910        let mut field_has_more = None;
12911        let mut field_cursor = None;
12912        let mut nothing = true;
12913        while let Some(key) = map.next_key::<&str>()? {
12914            nothing = false;
12915            match key {
12916                "apps" => {
12917                    if field_apps.is_some() {
12918                        return Err(::serde::de::Error::duplicate_field("apps"));
12919                    }
12920                    field_apps = Some(map.next_value()?);
12921                }
12922                "has_more" => {
12923                    if field_has_more.is_some() {
12924                        return Err(::serde::de::Error::duplicate_field("has_more"));
12925                    }
12926                    field_has_more = Some(map.next_value()?);
12927                }
12928                "cursor" => {
12929                    if field_cursor.is_some() {
12930                        return Err(::serde::de::Error::duplicate_field("cursor"));
12931                    }
12932                    field_cursor = Some(map.next_value()?);
12933                }
12934                _ => {
12935                    // unknown field allowed and ignored
12936                    map.next_value::<::serde_json::Value>()?;
12937                }
12938            }
12939        }
12940        if optional && nothing {
12941            return Ok(None);
12942        }
12943        let result = ListMembersAppsResult {
12944            apps: field_apps.ok_or_else(|| ::serde::de::Error::missing_field("apps"))?,
12945            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12946            cursor: field_cursor.and_then(Option::flatten),
12947        };
12948        Ok(Some(result))
12949    }
12950
12951    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12952        &self,
12953        s: &mut S::SerializeStruct,
12954    ) -> Result<(), S::Error> {
12955        use serde::ser::SerializeStruct;
12956        s.serialize_field("apps", &self.apps)?;
12957        s.serialize_field("has_more", &self.has_more)?;
12958        if let Some(val) = &self.cursor {
12959            s.serialize_field("cursor", val)?;
12960        }
12961        Ok(())
12962    }
12963}
12964
12965impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsResult {
12966    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12967        // struct deserializer
12968        use serde::de::{MapAccess, Visitor};
12969        struct StructVisitor;
12970        impl<'de> Visitor<'de> for StructVisitor {
12971            type Value = ListMembersAppsResult;
12972            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12973                f.write_str("a ListMembersAppsResult struct")
12974            }
12975            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12976                ListMembersAppsResult::internal_deserialize(map)
12977            }
12978        }
12979        deserializer.deserialize_struct("ListMembersAppsResult", LIST_MEMBERS_APPS_RESULT_FIELDS, StructVisitor)
12980    }
12981}
12982
12983impl ::serde::ser::Serialize for ListMembersAppsResult {
12984    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12985        // struct serializer
12986        use serde::ser::SerializeStruct;
12987        let mut s = serializer.serialize_struct("ListMembersAppsResult", 3)?;
12988        self.internal_serialize::<S>(&mut s)?;
12989        s.end()
12990    }
12991}
12992
12993#[derive(Debug, Clone, PartialEq, Eq)]
12994#[non_exhaustive] // structs may have more fields added in the future.
12995pub struct ListMembersDevicesArg {
12996    /// At the first call to the
12997    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) the cursor
12998    /// shouldn't be passed. Then, if the result of the call includes a cursor, the following
12999    /// requests should include the received cursors in order to receive the next sub list of team
13000    /// devices.
13001    pub cursor: Option<String>,
13002    /// Whether to list web sessions of the team members.
13003    pub include_web_sessions: bool,
13004    /// Whether to list desktop clients of the team members.
13005    pub include_desktop_clients: bool,
13006    /// Whether to list mobile clients of the team members.
13007    pub include_mobile_clients: bool,
13008}
13009
13010impl Default for ListMembersDevicesArg {
13011    fn default() -> Self {
13012        ListMembersDevicesArg {
13013            cursor: None,
13014            include_web_sessions: true,
13015            include_desktop_clients: true,
13016            include_mobile_clients: true,
13017        }
13018    }
13019}
13020
13021impl ListMembersDevicesArg {
13022    pub fn with_cursor(mut self, value: String) -> Self {
13023        self.cursor = Some(value);
13024        self
13025    }
13026
13027    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
13028        self.include_web_sessions = value;
13029        self
13030    }
13031
13032    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
13033        self.include_desktop_clients = value;
13034        self
13035    }
13036
13037    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
13038        self.include_mobile_clients = value;
13039        self
13040    }
13041}
13042
13043const LIST_MEMBERS_DEVICES_ARG_FIELDS: &[&str] = &["cursor",
13044                                                   "include_web_sessions",
13045                                                   "include_desktop_clients",
13046                                                   "include_mobile_clients"];
13047impl ListMembersDevicesArg {
13048    // no _opt deserializer
13049    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13050        mut map: V,
13051    ) -> Result<ListMembersDevicesArg, V::Error> {
13052        let mut field_cursor = None;
13053        let mut field_include_web_sessions = None;
13054        let mut field_include_desktop_clients = None;
13055        let mut field_include_mobile_clients = None;
13056        while let Some(key) = map.next_key::<&str>()? {
13057            match key {
13058                "cursor" => {
13059                    if field_cursor.is_some() {
13060                        return Err(::serde::de::Error::duplicate_field("cursor"));
13061                    }
13062                    field_cursor = Some(map.next_value()?);
13063                }
13064                "include_web_sessions" => {
13065                    if field_include_web_sessions.is_some() {
13066                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
13067                    }
13068                    field_include_web_sessions = Some(map.next_value()?);
13069                }
13070                "include_desktop_clients" => {
13071                    if field_include_desktop_clients.is_some() {
13072                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
13073                    }
13074                    field_include_desktop_clients = Some(map.next_value()?);
13075                }
13076                "include_mobile_clients" => {
13077                    if field_include_mobile_clients.is_some() {
13078                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
13079                    }
13080                    field_include_mobile_clients = Some(map.next_value()?);
13081                }
13082                _ => {
13083                    // unknown field allowed and ignored
13084                    map.next_value::<::serde_json::Value>()?;
13085                }
13086            }
13087        }
13088        let result = ListMembersDevicesArg {
13089            cursor: field_cursor.and_then(Option::flatten),
13090            include_web_sessions: field_include_web_sessions.unwrap_or(true),
13091            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
13092            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
13093        };
13094        Ok(result)
13095    }
13096
13097    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13098        &self,
13099        s: &mut S::SerializeStruct,
13100    ) -> Result<(), S::Error> {
13101        use serde::ser::SerializeStruct;
13102        if let Some(val) = &self.cursor {
13103            s.serialize_field("cursor", val)?;
13104        }
13105        if !self.include_web_sessions {
13106            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
13107        }
13108        if !self.include_desktop_clients {
13109            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
13110        }
13111        if !self.include_mobile_clients {
13112            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
13113        }
13114        Ok(())
13115    }
13116}
13117
13118impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesArg {
13119    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13120        // struct deserializer
13121        use serde::de::{MapAccess, Visitor};
13122        struct StructVisitor;
13123        impl<'de> Visitor<'de> for StructVisitor {
13124            type Value = ListMembersDevicesArg;
13125            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13126                f.write_str("a ListMembersDevicesArg struct")
13127            }
13128            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13129                ListMembersDevicesArg::internal_deserialize(map)
13130            }
13131        }
13132        deserializer.deserialize_struct("ListMembersDevicesArg", LIST_MEMBERS_DEVICES_ARG_FIELDS, StructVisitor)
13133    }
13134}
13135
13136impl ::serde::ser::Serialize for ListMembersDevicesArg {
13137    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13138        // struct serializer
13139        use serde::ser::SerializeStruct;
13140        let mut s = serializer.serialize_struct("ListMembersDevicesArg", 4)?;
13141        self.internal_serialize::<S>(&mut s)?;
13142        s.end()
13143    }
13144}
13145
13146#[derive(Debug, Clone, PartialEq, Eq)]
13147#[non_exhaustive] // variants may be added in the future
13148pub enum ListMembersDevicesError {
13149    /// Indicates that the cursor has been invalidated. Call
13150    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) again with an
13151    /// empty cursor to obtain a new cursor.
13152    Reset,
13153    /// Catch-all used for unrecognized values returned from the server. Encountering this value
13154    /// typically indicates that this SDK version is out of date.
13155    Other,
13156}
13157
13158impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesError {
13159    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13160        // union deserializer
13161        use serde::de::{self, MapAccess, Visitor};
13162        struct EnumVisitor;
13163        impl<'de> Visitor<'de> for EnumVisitor {
13164            type Value = ListMembersDevicesError;
13165            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13166                f.write_str("a ListMembersDevicesError structure")
13167            }
13168            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13169                let tag: &str = match map.next_key()? {
13170                    Some(".tag") => map.next_value()?,
13171                    _ => return Err(de::Error::missing_field(".tag"))
13172                };
13173                let value = match tag {
13174                    "reset" => ListMembersDevicesError::Reset,
13175                    _ => ListMembersDevicesError::Other,
13176                };
13177                crate::eat_json_fields(&mut map)?;
13178                Ok(value)
13179            }
13180        }
13181        const VARIANTS: &[&str] = &["reset",
13182                                    "other"];
13183        deserializer.deserialize_struct("ListMembersDevicesError", VARIANTS, EnumVisitor)
13184    }
13185}
13186
13187impl ::serde::ser::Serialize for ListMembersDevicesError {
13188    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13189        // union serializer
13190        use serde::ser::SerializeStruct;
13191        match self {
13192            ListMembersDevicesError::Reset => {
13193                // unit
13194                let mut s = serializer.serialize_struct("ListMembersDevicesError", 1)?;
13195                s.serialize_field(".tag", "reset")?;
13196                s.end()
13197            }
13198            ListMembersDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
13199        }
13200    }
13201}
13202
13203impl ::std::error::Error for ListMembersDevicesError {
13204}
13205
13206impl ::std::fmt::Display for ListMembersDevicesError {
13207    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13208        write!(f, "{:?}", *self)
13209    }
13210}
13211
13212#[derive(Debug, Clone, PartialEq, Eq)]
13213#[non_exhaustive] // structs may have more fields added in the future.
13214pub struct ListMembersDevicesResult {
13215    /// The devices of each member of the team.
13216    pub devices: Vec<MemberDevices>,
13217    /// If true, then there are more devices available. Pass the cursor to
13218    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) to retrieve
13219    /// the rest.
13220    pub has_more: bool,
13221    /// Pass the cursor into
13222    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) to receive the
13223    /// next sub list of team's devices.
13224    pub cursor: Option<String>,
13225}
13226
13227impl ListMembersDevicesResult {
13228    pub fn new(devices: Vec<MemberDevices>, has_more: bool) -> Self {
13229        ListMembersDevicesResult {
13230            devices,
13231            has_more,
13232            cursor: None,
13233        }
13234    }
13235
13236    pub fn with_cursor(mut self, value: String) -> Self {
13237        self.cursor = Some(value);
13238        self
13239    }
13240}
13241
13242const LIST_MEMBERS_DEVICES_RESULT_FIELDS: &[&str] = &["devices",
13243                                                      "has_more",
13244                                                      "cursor"];
13245impl ListMembersDevicesResult {
13246    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13247        map: V,
13248    ) -> Result<ListMembersDevicesResult, V::Error> {
13249        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13250    }
13251
13252    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13253        mut map: V,
13254        optional: bool,
13255    ) -> Result<Option<ListMembersDevicesResult>, V::Error> {
13256        let mut field_devices = None;
13257        let mut field_has_more = None;
13258        let mut field_cursor = None;
13259        let mut nothing = true;
13260        while let Some(key) = map.next_key::<&str>()? {
13261            nothing = false;
13262            match key {
13263                "devices" => {
13264                    if field_devices.is_some() {
13265                        return Err(::serde::de::Error::duplicate_field("devices"));
13266                    }
13267                    field_devices = Some(map.next_value()?);
13268                }
13269                "has_more" => {
13270                    if field_has_more.is_some() {
13271                        return Err(::serde::de::Error::duplicate_field("has_more"));
13272                    }
13273                    field_has_more = Some(map.next_value()?);
13274                }
13275                "cursor" => {
13276                    if field_cursor.is_some() {
13277                        return Err(::serde::de::Error::duplicate_field("cursor"));
13278                    }
13279                    field_cursor = Some(map.next_value()?);
13280                }
13281                _ => {
13282                    // unknown field allowed and ignored
13283                    map.next_value::<::serde_json::Value>()?;
13284                }
13285            }
13286        }
13287        if optional && nothing {
13288            return Ok(None);
13289        }
13290        let result = ListMembersDevicesResult {
13291            devices: field_devices.ok_or_else(|| ::serde::de::Error::missing_field("devices"))?,
13292            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
13293            cursor: field_cursor.and_then(Option::flatten),
13294        };
13295        Ok(Some(result))
13296    }
13297
13298    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13299        &self,
13300        s: &mut S::SerializeStruct,
13301    ) -> Result<(), S::Error> {
13302        use serde::ser::SerializeStruct;
13303        s.serialize_field("devices", &self.devices)?;
13304        s.serialize_field("has_more", &self.has_more)?;
13305        if let Some(val) = &self.cursor {
13306            s.serialize_field("cursor", val)?;
13307        }
13308        Ok(())
13309    }
13310}
13311
13312impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesResult {
13313    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13314        // struct deserializer
13315        use serde::de::{MapAccess, Visitor};
13316        struct StructVisitor;
13317        impl<'de> Visitor<'de> for StructVisitor {
13318            type Value = ListMembersDevicesResult;
13319            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13320                f.write_str("a ListMembersDevicesResult struct")
13321            }
13322            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13323                ListMembersDevicesResult::internal_deserialize(map)
13324            }
13325        }
13326        deserializer.deserialize_struct("ListMembersDevicesResult", LIST_MEMBERS_DEVICES_RESULT_FIELDS, StructVisitor)
13327    }
13328}
13329
13330impl ::serde::ser::Serialize for ListMembersDevicesResult {
13331    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13332        // struct serializer
13333        use serde::ser::SerializeStruct;
13334        let mut s = serializer.serialize_struct("ListMembersDevicesResult", 3)?;
13335        self.internal_serialize::<S>(&mut s)?;
13336        s.end()
13337    }
13338}
13339
13340/// Arguments for
13341/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
13342#[derive(Debug, Clone, PartialEq, Eq, Default)]
13343#[non_exhaustive] // structs may have more fields added in the future.
13344pub struct ListTeamAppsArg {
13345    /// At the first call to the
13346    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) the
13347    /// cursor shouldn't be passed. Then, if the result of the call includes a cursor, the following
13348    /// requests should include the received cursors in order to receive the next sub list of the
13349    /// team applications.
13350    pub cursor: Option<String>,
13351}
13352
13353impl ListTeamAppsArg {
13354    pub fn with_cursor(mut self, value: String) -> Self {
13355        self.cursor = Some(value);
13356        self
13357    }
13358}
13359
13360const LIST_TEAM_APPS_ARG_FIELDS: &[&str] = &["cursor"];
13361impl ListTeamAppsArg {
13362    // no _opt deserializer
13363    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13364        mut map: V,
13365    ) -> Result<ListTeamAppsArg, V::Error> {
13366        let mut field_cursor = None;
13367        while let Some(key) = map.next_key::<&str>()? {
13368            match key {
13369                "cursor" => {
13370                    if field_cursor.is_some() {
13371                        return Err(::serde::de::Error::duplicate_field("cursor"));
13372                    }
13373                    field_cursor = Some(map.next_value()?);
13374                }
13375                _ => {
13376                    // unknown field allowed and ignored
13377                    map.next_value::<::serde_json::Value>()?;
13378                }
13379            }
13380        }
13381        let result = ListTeamAppsArg {
13382            cursor: field_cursor.and_then(Option::flatten),
13383        };
13384        Ok(result)
13385    }
13386
13387    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13388        &self,
13389        s: &mut S::SerializeStruct,
13390    ) -> Result<(), S::Error> {
13391        use serde::ser::SerializeStruct;
13392        if let Some(val) = &self.cursor {
13393            s.serialize_field("cursor", val)?;
13394        }
13395        Ok(())
13396    }
13397}
13398
13399impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsArg {
13400    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13401        // struct deserializer
13402        use serde::de::{MapAccess, Visitor};
13403        struct StructVisitor;
13404        impl<'de> Visitor<'de> for StructVisitor {
13405            type Value = ListTeamAppsArg;
13406            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13407                f.write_str("a ListTeamAppsArg struct")
13408            }
13409            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13410                ListTeamAppsArg::internal_deserialize(map)
13411            }
13412        }
13413        deserializer.deserialize_struct("ListTeamAppsArg", LIST_TEAM_APPS_ARG_FIELDS, StructVisitor)
13414    }
13415}
13416
13417impl ::serde::ser::Serialize for ListTeamAppsArg {
13418    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13419        // struct serializer
13420        use serde::ser::SerializeStruct;
13421        let mut s = serializer.serialize_struct("ListTeamAppsArg", 1)?;
13422        self.internal_serialize::<S>(&mut s)?;
13423        s.end()
13424    }
13425}
13426
13427/// Error returned by
13428/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
13429#[derive(Debug, Clone, PartialEq, Eq)]
13430#[non_exhaustive] // variants may be added in the future
13431pub enum ListTeamAppsError {
13432    /// Indicates that the cursor has been invalidated. Call
13433    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps)
13434    /// again with an empty cursor to obtain a new cursor.
13435    Reset,
13436    /// Catch-all used for unrecognized values returned from the server. Encountering this value
13437    /// typically indicates that this SDK version is out of date.
13438    Other,
13439}
13440
13441impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsError {
13442    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13443        // union deserializer
13444        use serde::de::{self, MapAccess, Visitor};
13445        struct EnumVisitor;
13446        impl<'de> Visitor<'de> for EnumVisitor {
13447            type Value = ListTeamAppsError;
13448            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13449                f.write_str("a ListTeamAppsError structure")
13450            }
13451            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13452                let tag: &str = match map.next_key()? {
13453                    Some(".tag") => map.next_value()?,
13454                    _ => return Err(de::Error::missing_field(".tag"))
13455                };
13456                let value = match tag {
13457                    "reset" => ListTeamAppsError::Reset,
13458                    _ => ListTeamAppsError::Other,
13459                };
13460                crate::eat_json_fields(&mut map)?;
13461                Ok(value)
13462            }
13463        }
13464        const VARIANTS: &[&str] = &["reset",
13465                                    "other"];
13466        deserializer.deserialize_struct("ListTeamAppsError", VARIANTS, EnumVisitor)
13467    }
13468}
13469
13470impl ::serde::ser::Serialize for ListTeamAppsError {
13471    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13472        // union serializer
13473        use serde::ser::SerializeStruct;
13474        match self {
13475            ListTeamAppsError::Reset => {
13476                // unit
13477                let mut s = serializer.serialize_struct("ListTeamAppsError", 1)?;
13478                s.serialize_field(".tag", "reset")?;
13479                s.end()
13480            }
13481            ListTeamAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
13482        }
13483    }
13484}
13485
13486impl ::std::error::Error for ListTeamAppsError {
13487}
13488
13489impl ::std::fmt::Display for ListTeamAppsError {
13490    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13491        write!(f, "{:?}", *self)
13492    }
13493}
13494
13495/// Information returned by
13496/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
13497#[derive(Debug, Clone, PartialEq, Eq)]
13498#[non_exhaustive] // structs may have more fields added in the future.
13499pub struct ListTeamAppsResult {
13500    /// The linked applications of each member of the team.
13501    pub apps: Vec<MemberLinkedApps>,
13502    /// If true, then there are more apps available. Pass the cursor to
13503    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) to
13504    /// retrieve the rest.
13505    pub has_more: bool,
13506    /// Pass the cursor into
13507    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) to
13508    /// receive the next sub list of team's applications.
13509    pub cursor: Option<String>,
13510}
13511
13512impl ListTeamAppsResult {
13513    pub fn new(apps: Vec<MemberLinkedApps>, has_more: bool) -> Self {
13514        ListTeamAppsResult {
13515            apps,
13516            has_more,
13517            cursor: None,
13518        }
13519    }
13520
13521    pub fn with_cursor(mut self, value: String) -> Self {
13522        self.cursor = Some(value);
13523        self
13524    }
13525}
13526
13527const LIST_TEAM_APPS_RESULT_FIELDS: &[&str] = &["apps",
13528                                                "has_more",
13529                                                "cursor"];
13530impl ListTeamAppsResult {
13531    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13532        map: V,
13533    ) -> Result<ListTeamAppsResult, V::Error> {
13534        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13535    }
13536
13537    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13538        mut map: V,
13539        optional: bool,
13540    ) -> Result<Option<ListTeamAppsResult>, V::Error> {
13541        let mut field_apps = None;
13542        let mut field_has_more = None;
13543        let mut field_cursor = None;
13544        let mut nothing = true;
13545        while let Some(key) = map.next_key::<&str>()? {
13546            nothing = false;
13547            match key {
13548                "apps" => {
13549                    if field_apps.is_some() {
13550                        return Err(::serde::de::Error::duplicate_field("apps"));
13551                    }
13552                    field_apps = Some(map.next_value()?);
13553                }
13554                "has_more" => {
13555                    if field_has_more.is_some() {
13556                        return Err(::serde::de::Error::duplicate_field("has_more"));
13557                    }
13558                    field_has_more = Some(map.next_value()?);
13559                }
13560                "cursor" => {
13561                    if field_cursor.is_some() {
13562                        return Err(::serde::de::Error::duplicate_field("cursor"));
13563                    }
13564                    field_cursor = Some(map.next_value()?);
13565                }
13566                _ => {
13567                    // unknown field allowed and ignored
13568                    map.next_value::<::serde_json::Value>()?;
13569                }
13570            }
13571        }
13572        if optional && nothing {
13573            return Ok(None);
13574        }
13575        let result = ListTeamAppsResult {
13576            apps: field_apps.ok_or_else(|| ::serde::de::Error::missing_field("apps"))?,
13577            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
13578            cursor: field_cursor.and_then(Option::flatten),
13579        };
13580        Ok(Some(result))
13581    }
13582
13583    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13584        &self,
13585        s: &mut S::SerializeStruct,
13586    ) -> Result<(), S::Error> {
13587        use serde::ser::SerializeStruct;
13588        s.serialize_field("apps", &self.apps)?;
13589        s.serialize_field("has_more", &self.has_more)?;
13590        if let Some(val) = &self.cursor {
13591            s.serialize_field("cursor", val)?;
13592        }
13593        Ok(())
13594    }
13595}
13596
13597impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsResult {
13598    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13599        // struct deserializer
13600        use serde::de::{MapAccess, Visitor};
13601        struct StructVisitor;
13602        impl<'de> Visitor<'de> for StructVisitor {
13603            type Value = ListTeamAppsResult;
13604            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13605                f.write_str("a ListTeamAppsResult struct")
13606            }
13607            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13608                ListTeamAppsResult::internal_deserialize(map)
13609            }
13610        }
13611        deserializer.deserialize_struct("ListTeamAppsResult", LIST_TEAM_APPS_RESULT_FIELDS, StructVisitor)
13612    }
13613}
13614
13615impl ::serde::ser::Serialize for ListTeamAppsResult {
13616    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13617        // struct serializer
13618        use serde::ser::SerializeStruct;
13619        let mut s = serializer.serialize_struct("ListTeamAppsResult", 3)?;
13620        self.internal_serialize::<S>(&mut s)?;
13621        s.end()
13622    }
13623}
13624
13625#[derive(Debug, Clone, PartialEq, Eq)]
13626#[non_exhaustive] // structs may have more fields added in the future.
13627pub struct ListTeamDevicesArg {
13628    /// At the first call to the
13629    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) the cursor shouldn't
13630    /// be passed. Then, if the result of the call includes a cursor, the following requests should
13631    /// include the received cursors in order to receive the next sub list of team devices.
13632    pub cursor: Option<String>,
13633    /// Whether to list web sessions of the team members.
13634    pub include_web_sessions: bool,
13635    /// Whether to list desktop clients of the team members.
13636    pub include_desktop_clients: bool,
13637    /// Whether to list mobile clients of the team members.
13638    pub include_mobile_clients: bool,
13639}
13640
13641impl Default for ListTeamDevicesArg {
13642    fn default() -> Self {
13643        ListTeamDevicesArg {
13644            cursor: None,
13645            include_web_sessions: true,
13646            include_desktop_clients: true,
13647            include_mobile_clients: true,
13648        }
13649    }
13650}
13651
13652impl ListTeamDevicesArg {
13653    pub fn with_cursor(mut self, value: String) -> Self {
13654        self.cursor = Some(value);
13655        self
13656    }
13657
13658    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
13659        self.include_web_sessions = value;
13660        self
13661    }
13662
13663    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
13664        self.include_desktop_clients = value;
13665        self
13666    }
13667
13668    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
13669        self.include_mobile_clients = value;
13670        self
13671    }
13672}
13673
13674const LIST_TEAM_DEVICES_ARG_FIELDS: &[&str] = &["cursor",
13675                                                "include_web_sessions",
13676                                                "include_desktop_clients",
13677                                                "include_mobile_clients"];
13678impl ListTeamDevicesArg {
13679    // no _opt deserializer
13680    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13681        mut map: V,
13682    ) -> Result<ListTeamDevicesArg, V::Error> {
13683        let mut field_cursor = None;
13684        let mut field_include_web_sessions = None;
13685        let mut field_include_desktop_clients = None;
13686        let mut field_include_mobile_clients = None;
13687        while let Some(key) = map.next_key::<&str>()? {
13688            match key {
13689                "cursor" => {
13690                    if field_cursor.is_some() {
13691                        return Err(::serde::de::Error::duplicate_field("cursor"));
13692                    }
13693                    field_cursor = Some(map.next_value()?);
13694                }
13695                "include_web_sessions" => {
13696                    if field_include_web_sessions.is_some() {
13697                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
13698                    }
13699                    field_include_web_sessions = Some(map.next_value()?);
13700                }
13701                "include_desktop_clients" => {
13702                    if field_include_desktop_clients.is_some() {
13703                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
13704                    }
13705                    field_include_desktop_clients = Some(map.next_value()?);
13706                }
13707                "include_mobile_clients" => {
13708                    if field_include_mobile_clients.is_some() {
13709                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
13710                    }
13711                    field_include_mobile_clients = Some(map.next_value()?);
13712                }
13713                _ => {
13714                    // unknown field allowed and ignored
13715                    map.next_value::<::serde_json::Value>()?;
13716                }
13717            }
13718        }
13719        let result = ListTeamDevicesArg {
13720            cursor: field_cursor.and_then(Option::flatten),
13721            include_web_sessions: field_include_web_sessions.unwrap_or(true),
13722            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
13723            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
13724        };
13725        Ok(result)
13726    }
13727
13728    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13729        &self,
13730        s: &mut S::SerializeStruct,
13731    ) -> Result<(), S::Error> {
13732        use serde::ser::SerializeStruct;
13733        if let Some(val) = &self.cursor {
13734            s.serialize_field("cursor", val)?;
13735        }
13736        if !self.include_web_sessions {
13737            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
13738        }
13739        if !self.include_desktop_clients {
13740            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
13741        }
13742        if !self.include_mobile_clients {
13743            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
13744        }
13745        Ok(())
13746    }
13747}
13748
13749impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesArg {
13750    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13751        // struct deserializer
13752        use serde::de::{MapAccess, Visitor};
13753        struct StructVisitor;
13754        impl<'de> Visitor<'de> for StructVisitor {
13755            type Value = ListTeamDevicesArg;
13756            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13757                f.write_str("a ListTeamDevicesArg struct")
13758            }
13759            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13760                ListTeamDevicesArg::internal_deserialize(map)
13761            }
13762        }
13763        deserializer.deserialize_struct("ListTeamDevicesArg", LIST_TEAM_DEVICES_ARG_FIELDS, StructVisitor)
13764    }
13765}
13766
13767impl ::serde::ser::Serialize for ListTeamDevicesArg {
13768    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13769        // struct serializer
13770        use serde::ser::SerializeStruct;
13771        let mut s = serializer.serialize_struct("ListTeamDevicesArg", 4)?;
13772        self.internal_serialize::<S>(&mut s)?;
13773        s.end()
13774    }
13775}
13776
13777#[derive(Debug, Clone, PartialEq, Eq)]
13778#[non_exhaustive] // variants may be added in the future
13779pub enum ListTeamDevicesError {
13780    /// Indicates that the cursor has been invalidated. Call
13781    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) again with an empty
13782    /// cursor to obtain a new cursor.
13783    Reset,
13784    /// Catch-all used for unrecognized values returned from the server. Encountering this value
13785    /// typically indicates that this SDK version is out of date.
13786    Other,
13787}
13788
13789impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesError {
13790    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13791        // union deserializer
13792        use serde::de::{self, MapAccess, Visitor};
13793        struct EnumVisitor;
13794        impl<'de> Visitor<'de> for EnumVisitor {
13795            type Value = ListTeamDevicesError;
13796            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13797                f.write_str("a ListTeamDevicesError structure")
13798            }
13799            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13800                let tag: &str = match map.next_key()? {
13801                    Some(".tag") => map.next_value()?,
13802                    _ => return Err(de::Error::missing_field(".tag"))
13803                };
13804                let value = match tag {
13805                    "reset" => ListTeamDevicesError::Reset,
13806                    _ => ListTeamDevicesError::Other,
13807                };
13808                crate::eat_json_fields(&mut map)?;
13809                Ok(value)
13810            }
13811        }
13812        const VARIANTS: &[&str] = &["reset",
13813                                    "other"];
13814        deserializer.deserialize_struct("ListTeamDevicesError", VARIANTS, EnumVisitor)
13815    }
13816}
13817
13818impl ::serde::ser::Serialize for ListTeamDevicesError {
13819    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13820        // union serializer
13821        use serde::ser::SerializeStruct;
13822        match self {
13823            ListTeamDevicesError::Reset => {
13824                // unit
13825                let mut s = serializer.serialize_struct("ListTeamDevicesError", 1)?;
13826                s.serialize_field(".tag", "reset")?;
13827                s.end()
13828            }
13829            ListTeamDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
13830        }
13831    }
13832}
13833
13834impl ::std::error::Error for ListTeamDevicesError {
13835}
13836
13837impl ::std::fmt::Display for ListTeamDevicesError {
13838    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13839        write!(f, "{:?}", *self)
13840    }
13841}
13842
13843#[derive(Debug, Clone, PartialEq, Eq)]
13844#[non_exhaustive] // structs may have more fields added in the future.
13845pub struct ListTeamDevicesResult {
13846    /// The devices of each member of the team.
13847    pub devices: Vec<MemberDevices>,
13848    /// If true, then there are more devices available. Pass the cursor to
13849    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) to retrieve the
13850    /// rest.
13851    pub has_more: bool,
13852    /// Pass the cursor into [`devices_list_team_devices()`](crate::team::devices_list_team_devices)
13853    /// to receive the next sub list of team's devices.
13854    pub cursor: Option<String>,
13855}
13856
13857impl ListTeamDevicesResult {
13858    pub fn new(devices: Vec<MemberDevices>, has_more: bool) -> Self {
13859        ListTeamDevicesResult {
13860            devices,
13861            has_more,
13862            cursor: None,
13863        }
13864    }
13865
13866    pub fn with_cursor(mut self, value: String) -> Self {
13867        self.cursor = Some(value);
13868        self
13869    }
13870}
13871
13872const LIST_TEAM_DEVICES_RESULT_FIELDS: &[&str] = &["devices",
13873                                                   "has_more",
13874                                                   "cursor"];
13875impl ListTeamDevicesResult {
13876    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13877        map: V,
13878    ) -> Result<ListTeamDevicesResult, V::Error> {
13879        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13880    }
13881
13882    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13883        mut map: V,
13884        optional: bool,
13885    ) -> Result<Option<ListTeamDevicesResult>, V::Error> {
13886        let mut field_devices = None;
13887        let mut field_has_more = None;
13888        let mut field_cursor = None;
13889        let mut nothing = true;
13890        while let Some(key) = map.next_key::<&str>()? {
13891            nothing = false;
13892            match key {
13893                "devices" => {
13894                    if field_devices.is_some() {
13895                        return Err(::serde::de::Error::duplicate_field("devices"));
13896                    }
13897                    field_devices = Some(map.next_value()?);
13898                }
13899                "has_more" => {
13900                    if field_has_more.is_some() {
13901                        return Err(::serde::de::Error::duplicate_field("has_more"));
13902                    }
13903                    field_has_more = Some(map.next_value()?);
13904                }
13905                "cursor" => {
13906                    if field_cursor.is_some() {
13907                        return Err(::serde::de::Error::duplicate_field("cursor"));
13908                    }
13909                    field_cursor = Some(map.next_value()?);
13910                }
13911                _ => {
13912                    // unknown field allowed and ignored
13913                    map.next_value::<::serde_json::Value>()?;
13914                }
13915            }
13916        }
13917        if optional && nothing {
13918            return Ok(None);
13919        }
13920        let result = ListTeamDevicesResult {
13921            devices: field_devices.ok_or_else(|| ::serde::de::Error::missing_field("devices"))?,
13922            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
13923            cursor: field_cursor.and_then(Option::flatten),
13924        };
13925        Ok(Some(result))
13926    }
13927
13928    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13929        &self,
13930        s: &mut S::SerializeStruct,
13931    ) -> Result<(), S::Error> {
13932        use serde::ser::SerializeStruct;
13933        s.serialize_field("devices", &self.devices)?;
13934        s.serialize_field("has_more", &self.has_more)?;
13935        if let Some(val) = &self.cursor {
13936            s.serialize_field("cursor", val)?;
13937        }
13938        Ok(())
13939    }
13940}
13941
13942impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesResult {
13943    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13944        // struct deserializer
13945        use serde::de::{MapAccess, Visitor};
13946        struct StructVisitor;
13947        impl<'de> Visitor<'de> for StructVisitor {
13948            type Value = ListTeamDevicesResult;
13949            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13950                f.write_str("a ListTeamDevicesResult struct")
13951            }
13952            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13953                ListTeamDevicesResult::internal_deserialize(map)
13954            }
13955        }
13956        deserializer.deserialize_struct("ListTeamDevicesResult", LIST_TEAM_DEVICES_RESULT_FIELDS, StructVisitor)
13957    }
13958}
13959
13960impl ::serde::ser::Serialize for ListTeamDevicesResult {
13961    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13962        // struct serializer
13963        use serde::ser::SerializeStruct;
13964        let mut s = serializer.serialize_struct("ListTeamDevicesResult", 3)?;
13965        self.internal_serialize::<S>(&mut s)?;
13966        s.end()
13967    }
13968}
13969
13970/// Specify access type a member should have when joined to a group.
13971#[derive(Debug, Clone, PartialEq, Eq)]
13972#[non_exhaustive] // structs may have more fields added in the future.
13973pub struct MemberAccess {
13974    /// Identity of a user.
13975    pub user: UserSelectorArg,
13976    /// Access type.
13977    pub access_type: GroupAccessType,
13978}
13979
13980impl MemberAccess {
13981    pub fn new(user: UserSelectorArg, access_type: GroupAccessType) -> Self {
13982        MemberAccess {
13983            user,
13984            access_type,
13985        }
13986    }
13987}
13988
13989const MEMBER_ACCESS_FIELDS: &[&str] = &["user",
13990                                        "access_type"];
13991impl MemberAccess {
13992    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13993        map: V,
13994    ) -> Result<MemberAccess, V::Error> {
13995        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13996    }
13997
13998    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13999        mut map: V,
14000        optional: bool,
14001    ) -> Result<Option<MemberAccess>, V::Error> {
14002        let mut field_user = None;
14003        let mut field_access_type = None;
14004        let mut nothing = true;
14005        while let Some(key) = map.next_key::<&str>()? {
14006            nothing = false;
14007            match key {
14008                "user" => {
14009                    if field_user.is_some() {
14010                        return Err(::serde::de::Error::duplicate_field("user"));
14011                    }
14012                    field_user = Some(map.next_value()?);
14013                }
14014                "access_type" => {
14015                    if field_access_type.is_some() {
14016                        return Err(::serde::de::Error::duplicate_field("access_type"));
14017                    }
14018                    field_access_type = Some(map.next_value()?);
14019                }
14020                _ => {
14021                    // unknown field allowed and ignored
14022                    map.next_value::<::serde_json::Value>()?;
14023                }
14024            }
14025        }
14026        if optional && nothing {
14027            return Ok(None);
14028        }
14029        let result = MemberAccess {
14030            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
14031            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
14032        };
14033        Ok(Some(result))
14034    }
14035
14036    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14037        &self,
14038        s: &mut S::SerializeStruct,
14039    ) -> Result<(), S::Error> {
14040        use serde::ser::SerializeStruct;
14041        s.serialize_field("user", &self.user)?;
14042        s.serialize_field("access_type", &self.access_type)?;
14043        Ok(())
14044    }
14045}
14046
14047impl<'de> ::serde::de::Deserialize<'de> for MemberAccess {
14048    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14049        // struct deserializer
14050        use serde::de::{MapAccess, Visitor};
14051        struct StructVisitor;
14052        impl<'de> Visitor<'de> for StructVisitor {
14053            type Value = MemberAccess;
14054            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14055                f.write_str("a MemberAccess struct")
14056            }
14057            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14058                MemberAccess::internal_deserialize(map)
14059            }
14060        }
14061        deserializer.deserialize_struct("MemberAccess", MEMBER_ACCESS_FIELDS, StructVisitor)
14062    }
14063}
14064
14065impl ::serde::ser::Serialize for MemberAccess {
14066    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14067        // struct serializer
14068        use serde::ser::SerializeStruct;
14069        let mut s = serializer.serialize_struct("MemberAccess", 2)?;
14070        self.internal_serialize::<S>(&mut s)?;
14071        s.end()
14072    }
14073}
14074
14075#[derive(Debug, Clone, PartialEq, Eq)]
14076#[non_exhaustive] // structs may have more fields added in the future.
14077pub struct MemberAddArg {
14078    pub member_email: crate::types::common::EmailAddress,
14079    /// Member's first name.
14080    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
14081    /// Member's last name.
14082    pub member_surname: Option<crate::types::common::OptionalNamePart>,
14083    /// External ID for member.
14084    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
14085    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
14086    /// configuration.
14087    pub member_persistent_id: Option<String>,
14088    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
14089    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
14090    /// flows for onboarding that want to handle announcements themselves.
14091    pub send_welcome_email: bool,
14092    /// Whether a user is directory restricted.
14093    pub is_directory_restricted: Option<bool>,
14094    pub role: AdminTier,
14095}
14096
14097impl MemberAddArg {
14098    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
14099        MemberAddArg {
14100            member_email,
14101            member_given_name: None,
14102            member_surname: None,
14103            member_external_id: None,
14104            member_persistent_id: None,
14105            send_welcome_email: true,
14106            is_directory_restricted: None,
14107            role: AdminTier::MemberOnly,
14108        }
14109    }
14110
14111    pub fn with_member_given_name(
14112        mut self,
14113        value: crate::types::common::OptionalNamePart,
14114    ) -> Self {
14115        self.member_given_name = Some(value);
14116        self
14117    }
14118
14119    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
14120        self.member_surname = Some(value);
14121        self
14122    }
14123
14124    pub fn with_member_external_id(
14125        mut self,
14126        value: crate::types::team_common::MemberExternalId,
14127    ) -> Self {
14128        self.member_external_id = Some(value);
14129        self
14130    }
14131
14132    pub fn with_member_persistent_id(mut self, value: String) -> Self {
14133        self.member_persistent_id = Some(value);
14134        self
14135    }
14136
14137    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
14138        self.send_welcome_email = value;
14139        self
14140    }
14141
14142    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
14143        self.is_directory_restricted = Some(value);
14144        self
14145    }
14146
14147    pub fn with_role(mut self, value: AdminTier) -> Self {
14148        self.role = value;
14149        self
14150    }
14151}
14152
14153const MEMBER_ADD_ARG_FIELDS: &[&str] = &["member_email",
14154                                         "member_given_name",
14155                                         "member_surname",
14156                                         "member_external_id",
14157                                         "member_persistent_id",
14158                                         "send_welcome_email",
14159                                         "is_directory_restricted",
14160                                         "role"];
14161impl MemberAddArg {
14162    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14163        map: V,
14164    ) -> Result<MemberAddArg, V::Error> {
14165        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14166    }
14167
14168    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14169        mut map: V,
14170        optional: bool,
14171    ) -> Result<Option<MemberAddArg>, V::Error> {
14172        let mut field_member_email = None;
14173        let mut field_member_given_name = None;
14174        let mut field_member_surname = None;
14175        let mut field_member_external_id = None;
14176        let mut field_member_persistent_id = None;
14177        let mut field_send_welcome_email = None;
14178        let mut field_is_directory_restricted = None;
14179        let mut field_role = None;
14180        let mut nothing = true;
14181        while let Some(key) = map.next_key::<&str>()? {
14182            nothing = false;
14183            match key {
14184                "member_email" => {
14185                    if field_member_email.is_some() {
14186                        return Err(::serde::de::Error::duplicate_field("member_email"));
14187                    }
14188                    field_member_email = Some(map.next_value()?);
14189                }
14190                "member_given_name" => {
14191                    if field_member_given_name.is_some() {
14192                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
14193                    }
14194                    field_member_given_name = Some(map.next_value()?);
14195                }
14196                "member_surname" => {
14197                    if field_member_surname.is_some() {
14198                        return Err(::serde::de::Error::duplicate_field("member_surname"));
14199                    }
14200                    field_member_surname = Some(map.next_value()?);
14201                }
14202                "member_external_id" => {
14203                    if field_member_external_id.is_some() {
14204                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
14205                    }
14206                    field_member_external_id = Some(map.next_value()?);
14207                }
14208                "member_persistent_id" => {
14209                    if field_member_persistent_id.is_some() {
14210                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
14211                    }
14212                    field_member_persistent_id = Some(map.next_value()?);
14213                }
14214                "send_welcome_email" => {
14215                    if field_send_welcome_email.is_some() {
14216                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
14217                    }
14218                    field_send_welcome_email = Some(map.next_value()?);
14219                }
14220                "is_directory_restricted" => {
14221                    if field_is_directory_restricted.is_some() {
14222                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
14223                    }
14224                    field_is_directory_restricted = Some(map.next_value()?);
14225                }
14226                "role" => {
14227                    if field_role.is_some() {
14228                        return Err(::serde::de::Error::duplicate_field("role"));
14229                    }
14230                    field_role = Some(map.next_value()?);
14231                }
14232                _ => {
14233                    // unknown field allowed and ignored
14234                    map.next_value::<::serde_json::Value>()?;
14235                }
14236            }
14237        }
14238        if optional && nothing {
14239            return Ok(None);
14240        }
14241        let result = MemberAddArg {
14242            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
14243            member_given_name: field_member_given_name.and_then(Option::flatten),
14244            member_surname: field_member_surname.and_then(Option::flatten),
14245            member_external_id: field_member_external_id.and_then(Option::flatten),
14246            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
14247            send_welcome_email: field_send_welcome_email.unwrap_or(true),
14248            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
14249            role: field_role.unwrap_or(AdminTier::MemberOnly),
14250        };
14251        Ok(Some(result))
14252    }
14253
14254    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14255        &self,
14256        s: &mut S::SerializeStruct,
14257    ) -> Result<(), S::Error> {
14258        use serde::ser::SerializeStruct;
14259        s.serialize_field("member_email", &self.member_email)?;
14260        if let Some(val) = &self.member_given_name {
14261            s.serialize_field("member_given_name", val)?;
14262        }
14263        if let Some(val) = &self.member_surname {
14264            s.serialize_field("member_surname", val)?;
14265        }
14266        if let Some(val) = &self.member_external_id {
14267            s.serialize_field("member_external_id", val)?;
14268        }
14269        if let Some(val) = &self.member_persistent_id {
14270            s.serialize_field("member_persistent_id", val)?;
14271        }
14272        if !self.send_welcome_email {
14273            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
14274        }
14275        if let Some(val) = &self.is_directory_restricted {
14276            s.serialize_field("is_directory_restricted", val)?;
14277        }
14278        if self.role != AdminTier::MemberOnly {
14279            s.serialize_field("role", &self.role)?;
14280        }
14281        Ok(())
14282    }
14283}
14284
14285impl<'de> ::serde::de::Deserialize<'de> for MemberAddArg {
14286    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14287        // struct deserializer
14288        use serde::de::{MapAccess, Visitor};
14289        struct StructVisitor;
14290        impl<'de> Visitor<'de> for StructVisitor {
14291            type Value = MemberAddArg;
14292            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14293                f.write_str("a MemberAddArg struct")
14294            }
14295            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14296                MemberAddArg::internal_deserialize(map)
14297            }
14298        }
14299        deserializer.deserialize_struct("MemberAddArg", MEMBER_ADD_ARG_FIELDS, StructVisitor)
14300    }
14301}
14302
14303impl ::serde::ser::Serialize for MemberAddArg {
14304    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14305        // struct serializer
14306        use serde::ser::SerializeStruct;
14307        let mut s = serializer.serialize_struct("MemberAddArg", 8)?;
14308        self.internal_serialize::<S>(&mut s)?;
14309        s.end()
14310    }
14311}
14312
14313// struct extends MemberAddArgBase
14314impl From<MemberAddArg> for MemberAddArgBase {
14315    fn from(subtype: MemberAddArg) -> Self {
14316        Self {
14317            member_email: subtype.member_email,
14318            member_given_name: subtype.member_given_name,
14319            member_surname: subtype.member_surname,
14320            member_external_id: subtype.member_external_id,
14321            member_persistent_id: subtype.member_persistent_id,
14322            send_welcome_email: subtype.send_welcome_email,
14323            is_directory_restricted: subtype.is_directory_restricted,
14324        }
14325    }
14326}
14327#[derive(Debug, Clone, PartialEq, Eq)]
14328#[non_exhaustive] // structs may have more fields added in the future.
14329pub struct MemberAddArgBase {
14330    pub member_email: crate::types::common::EmailAddress,
14331    /// Member's first name.
14332    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
14333    /// Member's last name.
14334    pub member_surname: Option<crate::types::common::OptionalNamePart>,
14335    /// External ID for member.
14336    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
14337    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
14338    /// configuration.
14339    pub member_persistent_id: Option<String>,
14340    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
14341    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
14342    /// flows for onboarding that want to handle announcements themselves.
14343    pub send_welcome_email: bool,
14344    /// Whether a user is directory restricted.
14345    pub is_directory_restricted: Option<bool>,
14346}
14347
14348impl MemberAddArgBase {
14349    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
14350        MemberAddArgBase {
14351            member_email,
14352            member_given_name: None,
14353            member_surname: None,
14354            member_external_id: None,
14355            member_persistent_id: None,
14356            send_welcome_email: true,
14357            is_directory_restricted: None,
14358        }
14359    }
14360
14361    pub fn with_member_given_name(
14362        mut self,
14363        value: crate::types::common::OptionalNamePart,
14364    ) -> Self {
14365        self.member_given_name = Some(value);
14366        self
14367    }
14368
14369    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
14370        self.member_surname = Some(value);
14371        self
14372    }
14373
14374    pub fn with_member_external_id(
14375        mut self,
14376        value: crate::types::team_common::MemberExternalId,
14377    ) -> Self {
14378        self.member_external_id = Some(value);
14379        self
14380    }
14381
14382    pub fn with_member_persistent_id(mut self, value: String) -> Self {
14383        self.member_persistent_id = Some(value);
14384        self
14385    }
14386
14387    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
14388        self.send_welcome_email = value;
14389        self
14390    }
14391
14392    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
14393        self.is_directory_restricted = Some(value);
14394        self
14395    }
14396}
14397
14398const MEMBER_ADD_ARG_BASE_FIELDS: &[&str] = &["member_email",
14399                                              "member_given_name",
14400                                              "member_surname",
14401                                              "member_external_id",
14402                                              "member_persistent_id",
14403                                              "send_welcome_email",
14404                                              "is_directory_restricted"];
14405impl MemberAddArgBase {
14406    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14407        map: V,
14408    ) -> Result<MemberAddArgBase, V::Error> {
14409        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14410    }
14411
14412    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14413        mut map: V,
14414        optional: bool,
14415    ) -> Result<Option<MemberAddArgBase>, V::Error> {
14416        let mut field_member_email = None;
14417        let mut field_member_given_name = None;
14418        let mut field_member_surname = None;
14419        let mut field_member_external_id = None;
14420        let mut field_member_persistent_id = None;
14421        let mut field_send_welcome_email = None;
14422        let mut field_is_directory_restricted = None;
14423        let mut nothing = true;
14424        while let Some(key) = map.next_key::<&str>()? {
14425            nothing = false;
14426            match key {
14427                "member_email" => {
14428                    if field_member_email.is_some() {
14429                        return Err(::serde::de::Error::duplicate_field("member_email"));
14430                    }
14431                    field_member_email = Some(map.next_value()?);
14432                }
14433                "member_given_name" => {
14434                    if field_member_given_name.is_some() {
14435                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
14436                    }
14437                    field_member_given_name = Some(map.next_value()?);
14438                }
14439                "member_surname" => {
14440                    if field_member_surname.is_some() {
14441                        return Err(::serde::de::Error::duplicate_field("member_surname"));
14442                    }
14443                    field_member_surname = Some(map.next_value()?);
14444                }
14445                "member_external_id" => {
14446                    if field_member_external_id.is_some() {
14447                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
14448                    }
14449                    field_member_external_id = Some(map.next_value()?);
14450                }
14451                "member_persistent_id" => {
14452                    if field_member_persistent_id.is_some() {
14453                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
14454                    }
14455                    field_member_persistent_id = Some(map.next_value()?);
14456                }
14457                "send_welcome_email" => {
14458                    if field_send_welcome_email.is_some() {
14459                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
14460                    }
14461                    field_send_welcome_email = Some(map.next_value()?);
14462                }
14463                "is_directory_restricted" => {
14464                    if field_is_directory_restricted.is_some() {
14465                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
14466                    }
14467                    field_is_directory_restricted = Some(map.next_value()?);
14468                }
14469                _ => {
14470                    // unknown field allowed and ignored
14471                    map.next_value::<::serde_json::Value>()?;
14472                }
14473            }
14474        }
14475        if optional && nothing {
14476            return Ok(None);
14477        }
14478        let result = MemberAddArgBase {
14479            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
14480            member_given_name: field_member_given_name.and_then(Option::flatten),
14481            member_surname: field_member_surname.and_then(Option::flatten),
14482            member_external_id: field_member_external_id.and_then(Option::flatten),
14483            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
14484            send_welcome_email: field_send_welcome_email.unwrap_or(true),
14485            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
14486        };
14487        Ok(Some(result))
14488    }
14489
14490    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14491        &self,
14492        s: &mut S::SerializeStruct,
14493    ) -> Result<(), S::Error> {
14494        use serde::ser::SerializeStruct;
14495        s.serialize_field("member_email", &self.member_email)?;
14496        if let Some(val) = &self.member_given_name {
14497            s.serialize_field("member_given_name", val)?;
14498        }
14499        if let Some(val) = &self.member_surname {
14500            s.serialize_field("member_surname", val)?;
14501        }
14502        if let Some(val) = &self.member_external_id {
14503            s.serialize_field("member_external_id", val)?;
14504        }
14505        if let Some(val) = &self.member_persistent_id {
14506            s.serialize_field("member_persistent_id", val)?;
14507        }
14508        if !self.send_welcome_email {
14509            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
14510        }
14511        if let Some(val) = &self.is_directory_restricted {
14512            s.serialize_field("is_directory_restricted", val)?;
14513        }
14514        Ok(())
14515    }
14516}
14517
14518impl<'de> ::serde::de::Deserialize<'de> for MemberAddArgBase {
14519    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14520        // struct deserializer
14521        use serde::de::{MapAccess, Visitor};
14522        struct StructVisitor;
14523        impl<'de> Visitor<'de> for StructVisitor {
14524            type Value = MemberAddArgBase;
14525            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14526                f.write_str("a MemberAddArgBase struct")
14527            }
14528            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14529                MemberAddArgBase::internal_deserialize(map)
14530            }
14531        }
14532        deserializer.deserialize_struct("MemberAddArgBase", MEMBER_ADD_ARG_BASE_FIELDS, StructVisitor)
14533    }
14534}
14535
14536impl ::serde::ser::Serialize for MemberAddArgBase {
14537    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14538        // struct serializer
14539        use serde::ser::SerializeStruct;
14540        let mut s = serializer.serialize_struct("MemberAddArgBase", 7)?;
14541        self.internal_serialize::<S>(&mut s)?;
14542        s.end()
14543    }
14544}
14545
14546/// Describes the result of attempting to add a single user to the team. 'success' is the only value
14547/// indicating that a user was indeed added to the team - the other values explain the type of
14548/// failure that occurred, and include the email of the user for which the operation has failed.
14549#[derive(Debug, Clone, PartialEq, Eq)]
14550pub enum MemberAddResult {
14551    /// Team is already full. The organization has no available licenses.
14552    TeamLicenseLimit(crate::types::common::EmailAddress),
14553    /// Team is already full. The free team member limit has been reached.
14554    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
14555    /// User is already on this team. The provided email address is associated with a user who is
14556    /// already a member of (including in recoverable state) or invited to the team.
14557    UserAlreadyOnTeam(crate::types::common::EmailAddress),
14558    /// User is already on another team. The provided email address is associated with a user that
14559    /// is already a member or invited to another team.
14560    UserOnAnotherTeam(crate::types::common::EmailAddress),
14561    /// User is already paired.
14562    UserAlreadyPaired(crate::types::common::EmailAddress),
14563    /// User migration has failed.
14564    UserMigrationFailed(crate::types::common::EmailAddress),
14565    /// A user with the given external member ID already exists on the team (including in
14566    /// recoverable state).
14567    DuplicateExternalMemberId(crate::types::common::EmailAddress),
14568    /// A user with the given persistent ID already exists on the team (including in recoverable
14569    /// state).
14570    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
14571    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
14572    /// contact Dropbox for more information.
14573    PersistentIdDisabled(crate::types::common::EmailAddress),
14574    /// User creation has failed.
14575    UserCreationFailed(crate::types::common::EmailAddress),
14576    /// Describes a user that was successfully added to the team.
14577    Success(TeamMemberInfo),
14578}
14579
14580impl<'de> ::serde::de::Deserialize<'de> for MemberAddResult {
14581    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14582        // union deserializer
14583        use serde::de::{self, MapAccess, Visitor};
14584        struct EnumVisitor;
14585        impl<'de> Visitor<'de> for EnumVisitor {
14586            type Value = MemberAddResult;
14587            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14588                f.write_str("a MemberAddResult structure")
14589            }
14590            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
14591                let tag: &str = match map.next_key()? {
14592                    Some(".tag") => map.next_value()?,
14593                    _ => return Err(de::Error::missing_field(".tag"))
14594                };
14595                let value = match tag {
14596                    "team_license_limit" => {
14597                        match map.next_key()? {
14598                            Some("team_license_limit") => MemberAddResult::TeamLicenseLimit(map.next_value()?),
14599                            None => return Err(de::Error::missing_field("team_license_limit")),
14600                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14601                        }
14602                    }
14603                    "free_team_member_limit_reached" => {
14604                        match map.next_key()? {
14605                            Some("free_team_member_limit_reached") => MemberAddResult::FreeTeamMemberLimitReached(map.next_value()?),
14606                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
14607                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14608                        }
14609                    }
14610                    "user_already_on_team" => {
14611                        match map.next_key()? {
14612                            Some("user_already_on_team") => MemberAddResult::UserAlreadyOnTeam(map.next_value()?),
14613                            None => return Err(de::Error::missing_field("user_already_on_team")),
14614                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14615                        }
14616                    }
14617                    "user_on_another_team" => {
14618                        match map.next_key()? {
14619                            Some("user_on_another_team") => MemberAddResult::UserOnAnotherTeam(map.next_value()?),
14620                            None => return Err(de::Error::missing_field("user_on_another_team")),
14621                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14622                        }
14623                    }
14624                    "user_already_paired" => {
14625                        match map.next_key()? {
14626                            Some("user_already_paired") => MemberAddResult::UserAlreadyPaired(map.next_value()?),
14627                            None => return Err(de::Error::missing_field("user_already_paired")),
14628                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14629                        }
14630                    }
14631                    "user_migration_failed" => {
14632                        match map.next_key()? {
14633                            Some("user_migration_failed") => MemberAddResult::UserMigrationFailed(map.next_value()?),
14634                            None => return Err(de::Error::missing_field("user_migration_failed")),
14635                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14636                        }
14637                    }
14638                    "duplicate_external_member_id" => {
14639                        match map.next_key()? {
14640                            Some("duplicate_external_member_id") => MemberAddResult::DuplicateExternalMemberId(map.next_value()?),
14641                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
14642                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14643                        }
14644                    }
14645                    "duplicate_member_persistent_id" => {
14646                        match map.next_key()? {
14647                            Some("duplicate_member_persistent_id") => MemberAddResult::DuplicateMemberPersistentId(map.next_value()?),
14648                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
14649                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14650                        }
14651                    }
14652                    "persistent_id_disabled" => {
14653                        match map.next_key()? {
14654                            Some("persistent_id_disabled") => MemberAddResult::PersistentIdDisabled(map.next_value()?),
14655                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
14656                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14657                        }
14658                    }
14659                    "user_creation_failed" => {
14660                        match map.next_key()? {
14661                            Some("user_creation_failed") => MemberAddResult::UserCreationFailed(map.next_value()?),
14662                            None => return Err(de::Error::missing_field("user_creation_failed")),
14663                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14664                        }
14665                    }
14666                    "success" => MemberAddResult::Success(TeamMemberInfo::internal_deserialize(&mut map)?),
14667                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
14668                };
14669                crate::eat_json_fields(&mut map)?;
14670                Ok(value)
14671            }
14672        }
14673        const VARIANTS: &[&str] = &["team_license_limit",
14674                                    "free_team_member_limit_reached",
14675                                    "user_already_on_team",
14676                                    "user_on_another_team",
14677                                    "user_already_paired",
14678                                    "user_migration_failed",
14679                                    "duplicate_external_member_id",
14680                                    "duplicate_member_persistent_id",
14681                                    "persistent_id_disabled",
14682                                    "user_creation_failed",
14683                                    "success"];
14684        deserializer.deserialize_struct("MemberAddResult", VARIANTS, EnumVisitor)
14685    }
14686}
14687
14688impl ::serde::ser::Serialize for MemberAddResult {
14689    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14690        // union serializer
14691        use serde::ser::SerializeStruct;
14692        match self {
14693            MemberAddResult::TeamLicenseLimit(x) => {
14694                // primitive
14695                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14696                s.serialize_field(".tag", "team_license_limit")?;
14697                s.serialize_field("team_license_limit", x)?;
14698                s.end()
14699            }
14700            MemberAddResult::FreeTeamMemberLimitReached(x) => {
14701                // primitive
14702                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14703                s.serialize_field(".tag", "free_team_member_limit_reached")?;
14704                s.serialize_field("free_team_member_limit_reached", x)?;
14705                s.end()
14706            }
14707            MemberAddResult::UserAlreadyOnTeam(x) => {
14708                // primitive
14709                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14710                s.serialize_field(".tag", "user_already_on_team")?;
14711                s.serialize_field("user_already_on_team", x)?;
14712                s.end()
14713            }
14714            MemberAddResult::UserOnAnotherTeam(x) => {
14715                // primitive
14716                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14717                s.serialize_field(".tag", "user_on_another_team")?;
14718                s.serialize_field("user_on_another_team", x)?;
14719                s.end()
14720            }
14721            MemberAddResult::UserAlreadyPaired(x) => {
14722                // primitive
14723                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14724                s.serialize_field(".tag", "user_already_paired")?;
14725                s.serialize_field("user_already_paired", x)?;
14726                s.end()
14727            }
14728            MemberAddResult::UserMigrationFailed(x) => {
14729                // primitive
14730                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14731                s.serialize_field(".tag", "user_migration_failed")?;
14732                s.serialize_field("user_migration_failed", x)?;
14733                s.end()
14734            }
14735            MemberAddResult::DuplicateExternalMemberId(x) => {
14736                // primitive
14737                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14738                s.serialize_field(".tag", "duplicate_external_member_id")?;
14739                s.serialize_field("duplicate_external_member_id", x)?;
14740                s.end()
14741            }
14742            MemberAddResult::DuplicateMemberPersistentId(x) => {
14743                // primitive
14744                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14745                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
14746                s.serialize_field("duplicate_member_persistent_id", x)?;
14747                s.end()
14748            }
14749            MemberAddResult::PersistentIdDisabled(x) => {
14750                // primitive
14751                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14752                s.serialize_field(".tag", "persistent_id_disabled")?;
14753                s.serialize_field("persistent_id_disabled", x)?;
14754                s.end()
14755            }
14756            MemberAddResult::UserCreationFailed(x) => {
14757                // primitive
14758                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
14759                s.serialize_field(".tag", "user_creation_failed")?;
14760                s.serialize_field("user_creation_failed", x)?;
14761                s.end()
14762            }
14763            MemberAddResult::Success(x) => {
14764                // struct
14765                let mut s = serializer.serialize_struct("MemberAddResult", 3)?;
14766                s.serialize_field(".tag", "success")?;
14767                x.internal_serialize::<S>(&mut s)?;
14768                s.end()
14769            }
14770        }
14771    }
14772}
14773
14774// union extends MemberAddResultBase
14775impl From<MemberAddResultBase> for MemberAddResult {
14776    fn from(parent: MemberAddResultBase) -> Self {
14777        match parent {
14778            MemberAddResultBase::TeamLicenseLimit(x) => MemberAddResult::TeamLicenseLimit(x),
14779            MemberAddResultBase::FreeTeamMemberLimitReached(x) => MemberAddResult::FreeTeamMemberLimitReached(x),
14780            MemberAddResultBase::UserAlreadyOnTeam(x) => MemberAddResult::UserAlreadyOnTeam(x),
14781            MemberAddResultBase::UserOnAnotherTeam(x) => MemberAddResult::UserOnAnotherTeam(x),
14782            MemberAddResultBase::UserAlreadyPaired(x) => MemberAddResult::UserAlreadyPaired(x),
14783            MemberAddResultBase::UserMigrationFailed(x) => MemberAddResult::UserMigrationFailed(x),
14784            MemberAddResultBase::DuplicateExternalMemberId(x) => MemberAddResult::DuplicateExternalMemberId(x),
14785            MemberAddResultBase::DuplicateMemberPersistentId(x) => MemberAddResult::DuplicateMemberPersistentId(x),
14786            MemberAddResultBase::PersistentIdDisabled(x) => MemberAddResult::PersistentIdDisabled(x),
14787            MemberAddResultBase::UserCreationFailed(x) => MemberAddResult::UserCreationFailed(x),
14788        }
14789    }
14790}
14791#[derive(Debug, Clone, PartialEq, Eq)]
14792pub enum MemberAddResultBase {
14793    /// Team is already full. The organization has no available licenses.
14794    TeamLicenseLimit(crate::types::common::EmailAddress),
14795    /// Team is already full. The free team member limit has been reached.
14796    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
14797    /// User is already on this team. The provided email address is associated with a user who is
14798    /// already a member of (including in recoverable state) or invited to the team.
14799    UserAlreadyOnTeam(crate::types::common::EmailAddress),
14800    /// User is already on another team. The provided email address is associated with a user that
14801    /// is already a member or invited to another team.
14802    UserOnAnotherTeam(crate::types::common::EmailAddress),
14803    /// User is already paired.
14804    UserAlreadyPaired(crate::types::common::EmailAddress),
14805    /// User migration has failed.
14806    UserMigrationFailed(crate::types::common::EmailAddress),
14807    /// A user with the given external member ID already exists on the team (including in
14808    /// recoverable state).
14809    DuplicateExternalMemberId(crate::types::common::EmailAddress),
14810    /// A user with the given persistent ID already exists on the team (including in recoverable
14811    /// state).
14812    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
14813    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
14814    /// contact Dropbox for more information.
14815    PersistentIdDisabled(crate::types::common::EmailAddress),
14816    /// User creation has failed.
14817    UserCreationFailed(crate::types::common::EmailAddress),
14818}
14819
14820impl<'de> ::serde::de::Deserialize<'de> for MemberAddResultBase {
14821    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14822        // union deserializer
14823        use serde::de::{self, MapAccess, Visitor};
14824        struct EnumVisitor;
14825        impl<'de> Visitor<'de> for EnumVisitor {
14826            type Value = MemberAddResultBase;
14827            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14828                f.write_str("a MemberAddResultBase structure")
14829            }
14830            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
14831                let tag: &str = match map.next_key()? {
14832                    Some(".tag") => map.next_value()?,
14833                    _ => return Err(de::Error::missing_field(".tag"))
14834                };
14835                let value = match tag {
14836                    "team_license_limit" => {
14837                        match map.next_key()? {
14838                            Some("team_license_limit") => MemberAddResultBase::TeamLicenseLimit(map.next_value()?),
14839                            None => return Err(de::Error::missing_field("team_license_limit")),
14840                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14841                        }
14842                    }
14843                    "free_team_member_limit_reached" => {
14844                        match map.next_key()? {
14845                            Some("free_team_member_limit_reached") => MemberAddResultBase::FreeTeamMemberLimitReached(map.next_value()?),
14846                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
14847                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14848                        }
14849                    }
14850                    "user_already_on_team" => {
14851                        match map.next_key()? {
14852                            Some("user_already_on_team") => MemberAddResultBase::UserAlreadyOnTeam(map.next_value()?),
14853                            None => return Err(de::Error::missing_field("user_already_on_team")),
14854                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14855                        }
14856                    }
14857                    "user_on_another_team" => {
14858                        match map.next_key()? {
14859                            Some("user_on_another_team") => MemberAddResultBase::UserOnAnotherTeam(map.next_value()?),
14860                            None => return Err(de::Error::missing_field("user_on_another_team")),
14861                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14862                        }
14863                    }
14864                    "user_already_paired" => {
14865                        match map.next_key()? {
14866                            Some("user_already_paired") => MemberAddResultBase::UserAlreadyPaired(map.next_value()?),
14867                            None => return Err(de::Error::missing_field("user_already_paired")),
14868                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14869                        }
14870                    }
14871                    "user_migration_failed" => {
14872                        match map.next_key()? {
14873                            Some("user_migration_failed") => MemberAddResultBase::UserMigrationFailed(map.next_value()?),
14874                            None => return Err(de::Error::missing_field("user_migration_failed")),
14875                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14876                        }
14877                    }
14878                    "duplicate_external_member_id" => {
14879                        match map.next_key()? {
14880                            Some("duplicate_external_member_id") => MemberAddResultBase::DuplicateExternalMemberId(map.next_value()?),
14881                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
14882                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14883                        }
14884                    }
14885                    "duplicate_member_persistent_id" => {
14886                        match map.next_key()? {
14887                            Some("duplicate_member_persistent_id") => MemberAddResultBase::DuplicateMemberPersistentId(map.next_value()?),
14888                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
14889                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14890                        }
14891                    }
14892                    "persistent_id_disabled" => {
14893                        match map.next_key()? {
14894                            Some("persistent_id_disabled") => MemberAddResultBase::PersistentIdDisabled(map.next_value()?),
14895                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
14896                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14897                        }
14898                    }
14899                    "user_creation_failed" => {
14900                        match map.next_key()? {
14901                            Some("user_creation_failed") => MemberAddResultBase::UserCreationFailed(map.next_value()?),
14902                            None => return Err(de::Error::missing_field("user_creation_failed")),
14903                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14904                        }
14905                    }
14906                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
14907                };
14908                crate::eat_json_fields(&mut map)?;
14909                Ok(value)
14910            }
14911        }
14912        const VARIANTS: &[&str] = &["team_license_limit",
14913                                    "free_team_member_limit_reached",
14914                                    "user_already_on_team",
14915                                    "user_on_another_team",
14916                                    "user_already_paired",
14917                                    "user_migration_failed",
14918                                    "duplicate_external_member_id",
14919                                    "duplicate_member_persistent_id",
14920                                    "persistent_id_disabled",
14921                                    "user_creation_failed"];
14922        deserializer.deserialize_struct("MemberAddResultBase", VARIANTS, EnumVisitor)
14923    }
14924}
14925
14926impl ::serde::ser::Serialize for MemberAddResultBase {
14927    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14928        // union serializer
14929        use serde::ser::SerializeStruct;
14930        match self {
14931            MemberAddResultBase::TeamLicenseLimit(x) => {
14932                // primitive
14933                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14934                s.serialize_field(".tag", "team_license_limit")?;
14935                s.serialize_field("team_license_limit", x)?;
14936                s.end()
14937            }
14938            MemberAddResultBase::FreeTeamMemberLimitReached(x) => {
14939                // primitive
14940                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14941                s.serialize_field(".tag", "free_team_member_limit_reached")?;
14942                s.serialize_field("free_team_member_limit_reached", x)?;
14943                s.end()
14944            }
14945            MemberAddResultBase::UserAlreadyOnTeam(x) => {
14946                // primitive
14947                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14948                s.serialize_field(".tag", "user_already_on_team")?;
14949                s.serialize_field("user_already_on_team", x)?;
14950                s.end()
14951            }
14952            MemberAddResultBase::UserOnAnotherTeam(x) => {
14953                // primitive
14954                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14955                s.serialize_field(".tag", "user_on_another_team")?;
14956                s.serialize_field("user_on_another_team", x)?;
14957                s.end()
14958            }
14959            MemberAddResultBase::UserAlreadyPaired(x) => {
14960                // primitive
14961                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14962                s.serialize_field(".tag", "user_already_paired")?;
14963                s.serialize_field("user_already_paired", x)?;
14964                s.end()
14965            }
14966            MemberAddResultBase::UserMigrationFailed(x) => {
14967                // primitive
14968                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14969                s.serialize_field(".tag", "user_migration_failed")?;
14970                s.serialize_field("user_migration_failed", x)?;
14971                s.end()
14972            }
14973            MemberAddResultBase::DuplicateExternalMemberId(x) => {
14974                // primitive
14975                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14976                s.serialize_field(".tag", "duplicate_external_member_id")?;
14977                s.serialize_field("duplicate_external_member_id", x)?;
14978                s.end()
14979            }
14980            MemberAddResultBase::DuplicateMemberPersistentId(x) => {
14981                // primitive
14982                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14983                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
14984                s.serialize_field("duplicate_member_persistent_id", x)?;
14985                s.end()
14986            }
14987            MemberAddResultBase::PersistentIdDisabled(x) => {
14988                // primitive
14989                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14990                s.serialize_field(".tag", "persistent_id_disabled")?;
14991                s.serialize_field("persistent_id_disabled", x)?;
14992                s.end()
14993            }
14994            MemberAddResultBase::UserCreationFailed(x) => {
14995                // primitive
14996                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14997                s.serialize_field(".tag", "user_creation_failed")?;
14998                s.serialize_field("user_creation_failed", x)?;
14999                s.end()
15000            }
15001        }
15002    }
15003}
15004
15005#[derive(Debug, Clone, PartialEq, Eq)]
15006#[non_exhaustive] // structs may have more fields added in the future.
15007pub struct MemberAddV2Arg {
15008    pub member_email: crate::types::common::EmailAddress,
15009    /// Member's first name.
15010    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
15011    /// Member's last name.
15012    pub member_surname: Option<crate::types::common::OptionalNamePart>,
15013    /// External ID for member.
15014    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
15015    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
15016    /// configuration.
15017    pub member_persistent_id: Option<String>,
15018    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
15019    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
15020    /// flows for onboarding that want to handle announcements themselves.
15021    pub send_welcome_email: bool,
15022    /// Whether a user is directory restricted.
15023    pub is_directory_restricted: Option<bool>,
15024    pub role_ids: Option<Vec<TeamMemberRoleId>>,
15025}
15026
15027impl MemberAddV2Arg {
15028    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
15029        MemberAddV2Arg {
15030            member_email,
15031            member_given_name: None,
15032            member_surname: None,
15033            member_external_id: None,
15034            member_persistent_id: None,
15035            send_welcome_email: true,
15036            is_directory_restricted: None,
15037            role_ids: None,
15038        }
15039    }
15040
15041    pub fn with_member_given_name(
15042        mut self,
15043        value: crate::types::common::OptionalNamePart,
15044    ) -> Self {
15045        self.member_given_name = Some(value);
15046        self
15047    }
15048
15049    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
15050        self.member_surname = Some(value);
15051        self
15052    }
15053
15054    pub fn with_member_external_id(
15055        mut self,
15056        value: crate::types::team_common::MemberExternalId,
15057    ) -> Self {
15058        self.member_external_id = Some(value);
15059        self
15060    }
15061
15062    pub fn with_member_persistent_id(mut self, value: String) -> Self {
15063        self.member_persistent_id = Some(value);
15064        self
15065    }
15066
15067    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
15068        self.send_welcome_email = value;
15069        self
15070    }
15071
15072    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
15073        self.is_directory_restricted = Some(value);
15074        self
15075    }
15076
15077    pub fn with_role_ids(mut self, value: Vec<TeamMemberRoleId>) -> Self {
15078        self.role_ids = Some(value);
15079        self
15080    }
15081}
15082
15083const MEMBER_ADD_V2_ARG_FIELDS: &[&str] = &["member_email",
15084                                            "member_given_name",
15085                                            "member_surname",
15086                                            "member_external_id",
15087                                            "member_persistent_id",
15088                                            "send_welcome_email",
15089                                            "is_directory_restricted",
15090                                            "role_ids"];
15091impl MemberAddV2Arg {
15092    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15093        map: V,
15094    ) -> Result<MemberAddV2Arg, V::Error> {
15095        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15096    }
15097
15098    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15099        mut map: V,
15100        optional: bool,
15101    ) -> Result<Option<MemberAddV2Arg>, V::Error> {
15102        let mut field_member_email = None;
15103        let mut field_member_given_name = None;
15104        let mut field_member_surname = None;
15105        let mut field_member_external_id = None;
15106        let mut field_member_persistent_id = None;
15107        let mut field_send_welcome_email = None;
15108        let mut field_is_directory_restricted = None;
15109        let mut field_role_ids = None;
15110        let mut nothing = true;
15111        while let Some(key) = map.next_key::<&str>()? {
15112            nothing = false;
15113            match key {
15114                "member_email" => {
15115                    if field_member_email.is_some() {
15116                        return Err(::serde::de::Error::duplicate_field("member_email"));
15117                    }
15118                    field_member_email = Some(map.next_value()?);
15119                }
15120                "member_given_name" => {
15121                    if field_member_given_name.is_some() {
15122                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
15123                    }
15124                    field_member_given_name = Some(map.next_value()?);
15125                }
15126                "member_surname" => {
15127                    if field_member_surname.is_some() {
15128                        return Err(::serde::de::Error::duplicate_field("member_surname"));
15129                    }
15130                    field_member_surname = Some(map.next_value()?);
15131                }
15132                "member_external_id" => {
15133                    if field_member_external_id.is_some() {
15134                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
15135                    }
15136                    field_member_external_id = Some(map.next_value()?);
15137                }
15138                "member_persistent_id" => {
15139                    if field_member_persistent_id.is_some() {
15140                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
15141                    }
15142                    field_member_persistent_id = Some(map.next_value()?);
15143                }
15144                "send_welcome_email" => {
15145                    if field_send_welcome_email.is_some() {
15146                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
15147                    }
15148                    field_send_welcome_email = Some(map.next_value()?);
15149                }
15150                "is_directory_restricted" => {
15151                    if field_is_directory_restricted.is_some() {
15152                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
15153                    }
15154                    field_is_directory_restricted = Some(map.next_value()?);
15155                }
15156                "role_ids" => {
15157                    if field_role_ids.is_some() {
15158                        return Err(::serde::de::Error::duplicate_field("role_ids"));
15159                    }
15160                    field_role_ids = Some(map.next_value()?);
15161                }
15162                _ => {
15163                    // unknown field allowed and ignored
15164                    map.next_value::<::serde_json::Value>()?;
15165                }
15166            }
15167        }
15168        if optional && nothing {
15169            return Ok(None);
15170        }
15171        let result = MemberAddV2Arg {
15172            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
15173            member_given_name: field_member_given_name.and_then(Option::flatten),
15174            member_surname: field_member_surname.and_then(Option::flatten),
15175            member_external_id: field_member_external_id.and_then(Option::flatten),
15176            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
15177            send_welcome_email: field_send_welcome_email.unwrap_or(true),
15178            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
15179            role_ids: field_role_ids.and_then(Option::flatten),
15180        };
15181        Ok(Some(result))
15182    }
15183
15184    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15185        &self,
15186        s: &mut S::SerializeStruct,
15187    ) -> Result<(), S::Error> {
15188        use serde::ser::SerializeStruct;
15189        s.serialize_field("member_email", &self.member_email)?;
15190        if let Some(val) = &self.member_given_name {
15191            s.serialize_field("member_given_name", val)?;
15192        }
15193        if let Some(val) = &self.member_surname {
15194            s.serialize_field("member_surname", val)?;
15195        }
15196        if let Some(val) = &self.member_external_id {
15197            s.serialize_field("member_external_id", val)?;
15198        }
15199        if let Some(val) = &self.member_persistent_id {
15200            s.serialize_field("member_persistent_id", val)?;
15201        }
15202        if !self.send_welcome_email {
15203            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
15204        }
15205        if let Some(val) = &self.is_directory_restricted {
15206            s.serialize_field("is_directory_restricted", val)?;
15207        }
15208        if let Some(val) = &self.role_ids {
15209            s.serialize_field("role_ids", val)?;
15210        }
15211        Ok(())
15212    }
15213}
15214
15215impl<'de> ::serde::de::Deserialize<'de> for MemberAddV2Arg {
15216    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15217        // struct deserializer
15218        use serde::de::{MapAccess, Visitor};
15219        struct StructVisitor;
15220        impl<'de> Visitor<'de> for StructVisitor {
15221            type Value = MemberAddV2Arg;
15222            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15223                f.write_str("a MemberAddV2Arg struct")
15224            }
15225            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15226                MemberAddV2Arg::internal_deserialize(map)
15227            }
15228        }
15229        deserializer.deserialize_struct("MemberAddV2Arg", MEMBER_ADD_V2_ARG_FIELDS, StructVisitor)
15230    }
15231}
15232
15233impl ::serde::ser::Serialize for MemberAddV2Arg {
15234    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15235        // struct serializer
15236        use serde::ser::SerializeStruct;
15237        let mut s = serializer.serialize_struct("MemberAddV2Arg", 8)?;
15238        self.internal_serialize::<S>(&mut s)?;
15239        s.end()
15240    }
15241}
15242
15243// struct extends MemberAddArgBase
15244impl From<MemberAddV2Arg> for MemberAddArgBase {
15245    fn from(subtype: MemberAddV2Arg) -> Self {
15246        Self {
15247            member_email: subtype.member_email,
15248            member_given_name: subtype.member_given_name,
15249            member_surname: subtype.member_surname,
15250            member_external_id: subtype.member_external_id,
15251            member_persistent_id: subtype.member_persistent_id,
15252            send_welcome_email: subtype.send_welcome_email,
15253            is_directory_restricted: subtype.is_directory_restricted,
15254        }
15255    }
15256}
15257/// Describes the result of attempting to add a single user to the team. 'success' is the only value
15258/// indicating that a user was indeed added to the team - the other values explain the type of
15259/// failure that occurred, and include the email of the user for which the operation has failed.
15260#[derive(Debug, Clone, PartialEq, Eq)]
15261#[non_exhaustive] // variants may be added in the future
15262pub enum MemberAddV2Result {
15263    /// Team is already full. The organization has no available licenses.
15264    TeamLicenseLimit(crate::types::common::EmailAddress),
15265    /// Team is already full. The free team member limit has been reached.
15266    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
15267    /// User is already on this team. The provided email address is associated with a user who is
15268    /// already a member of (including in recoverable state) or invited to the team.
15269    UserAlreadyOnTeam(crate::types::common::EmailAddress),
15270    /// User is already on another team. The provided email address is associated with a user that
15271    /// is already a member or invited to another team.
15272    UserOnAnotherTeam(crate::types::common::EmailAddress),
15273    /// User is already paired.
15274    UserAlreadyPaired(crate::types::common::EmailAddress),
15275    /// User migration has failed.
15276    UserMigrationFailed(crate::types::common::EmailAddress),
15277    /// A user with the given external member ID already exists on the team (including in
15278    /// recoverable state).
15279    DuplicateExternalMemberId(crate::types::common::EmailAddress),
15280    /// A user with the given persistent ID already exists on the team (including in recoverable
15281    /// state).
15282    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
15283    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
15284    /// contact Dropbox for more information.
15285    PersistentIdDisabled(crate::types::common::EmailAddress),
15286    /// User creation has failed.
15287    UserCreationFailed(crate::types::common::EmailAddress),
15288    /// Describes a user that was successfully added to the team.
15289    Success(TeamMemberInfoV2),
15290    /// Catch-all used for unrecognized values returned from the server. Encountering this value
15291    /// typically indicates that this SDK version is out of date.
15292    Other,
15293}
15294
15295impl<'de> ::serde::de::Deserialize<'de> for MemberAddV2Result {
15296    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15297        // union deserializer
15298        use serde::de::{self, MapAccess, Visitor};
15299        struct EnumVisitor;
15300        impl<'de> Visitor<'de> for EnumVisitor {
15301            type Value = MemberAddV2Result;
15302            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15303                f.write_str("a MemberAddV2Result structure")
15304            }
15305            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15306                let tag: &str = match map.next_key()? {
15307                    Some(".tag") => map.next_value()?,
15308                    _ => return Err(de::Error::missing_field(".tag"))
15309                };
15310                let value = match tag {
15311                    "team_license_limit" => {
15312                        match map.next_key()? {
15313                            Some("team_license_limit") => MemberAddV2Result::TeamLicenseLimit(map.next_value()?),
15314                            None => return Err(de::Error::missing_field("team_license_limit")),
15315                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15316                        }
15317                    }
15318                    "free_team_member_limit_reached" => {
15319                        match map.next_key()? {
15320                            Some("free_team_member_limit_reached") => MemberAddV2Result::FreeTeamMemberLimitReached(map.next_value()?),
15321                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
15322                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15323                        }
15324                    }
15325                    "user_already_on_team" => {
15326                        match map.next_key()? {
15327                            Some("user_already_on_team") => MemberAddV2Result::UserAlreadyOnTeam(map.next_value()?),
15328                            None => return Err(de::Error::missing_field("user_already_on_team")),
15329                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15330                        }
15331                    }
15332                    "user_on_another_team" => {
15333                        match map.next_key()? {
15334                            Some("user_on_another_team") => MemberAddV2Result::UserOnAnotherTeam(map.next_value()?),
15335                            None => return Err(de::Error::missing_field("user_on_another_team")),
15336                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15337                        }
15338                    }
15339                    "user_already_paired" => {
15340                        match map.next_key()? {
15341                            Some("user_already_paired") => MemberAddV2Result::UserAlreadyPaired(map.next_value()?),
15342                            None => return Err(de::Error::missing_field("user_already_paired")),
15343                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15344                        }
15345                    }
15346                    "user_migration_failed" => {
15347                        match map.next_key()? {
15348                            Some("user_migration_failed") => MemberAddV2Result::UserMigrationFailed(map.next_value()?),
15349                            None => return Err(de::Error::missing_field("user_migration_failed")),
15350                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15351                        }
15352                    }
15353                    "duplicate_external_member_id" => {
15354                        match map.next_key()? {
15355                            Some("duplicate_external_member_id") => MemberAddV2Result::DuplicateExternalMemberId(map.next_value()?),
15356                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
15357                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15358                        }
15359                    }
15360                    "duplicate_member_persistent_id" => {
15361                        match map.next_key()? {
15362                            Some("duplicate_member_persistent_id") => MemberAddV2Result::DuplicateMemberPersistentId(map.next_value()?),
15363                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
15364                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15365                        }
15366                    }
15367                    "persistent_id_disabled" => {
15368                        match map.next_key()? {
15369                            Some("persistent_id_disabled") => MemberAddV2Result::PersistentIdDisabled(map.next_value()?),
15370                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
15371                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15372                        }
15373                    }
15374                    "user_creation_failed" => {
15375                        match map.next_key()? {
15376                            Some("user_creation_failed") => MemberAddV2Result::UserCreationFailed(map.next_value()?),
15377                            None => return Err(de::Error::missing_field("user_creation_failed")),
15378                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15379                        }
15380                    }
15381                    "success" => MemberAddV2Result::Success(TeamMemberInfoV2::internal_deserialize(&mut map)?),
15382                    _ => MemberAddV2Result::Other,
15383                };
15384                crate::eat_json_fields(&mut map)?;
15385                Ok(value)
15386            }
15387        }
15388        const VARIANTS: &[&str] = &["team_license_limit",
15389                                    "free_team_member_limit_reached",
15390                                    "user_already_on_team",
15391                                    "user_on_another_team",
15392                                    "user_already_paired",
15393                                    "user_migration_failed",
15394                                    "duplicate_external_member_id",
15395                                    "duplicate_member_persistent_id",
15396                                    "persistent_id_disabled",
15397                                    "user_creation_failed",
15398                                    "success",
15399                                    "other"];
15400        deserializer.deserialize_struct("MemberAddV2Result", VARIANTS, EnumVisitor)
15401    }
15402}
15403
15404impl ::serde::ser::Serialize for MemberAddV2Result {
15405    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15406        // union serializer
15407        use serde::ser::SerializeStruct;
15408        match self {
15409            MemberAddV2Result::TeamLicenseLimit(x) => {
15410                // primitive
15411                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15412                s.serialize_field(".tag", "team_license_limit")?;
15413                s.serialize_field("team_license_limit", x)?;
15414                s.end()
15415            }
15416            MemberAddV2Result::FreeTeamMemberLimitReached(x) => {
15417                // primitive
15418                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15419                s.serialize_field(".tag", "free_team_member_limit_reached")?;
15420                s.serialize_field("free_team_member_limit_reached", x)?;
15421                s.end()
15422            }
15423            MemberAddV2Result::UserAlreadyOnTeam(x) => {
15424                // primitive
15425                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15426                s.serialize_field(".tag", "user_already_on_team")?;
15427                s.serialize_field("user_already_on_team", x)?;
15428                s.end()
15429            }
15430            MemberAddV2Result::UserOnAnotherTeam(x) => {
15431                // primitive
15432                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15433                s.serialize_field(".tag", "user_on_another_team")?;
15434                s.serialize_field("user_on_another_team", x)?;
15435                s.end()
15436            }
15437            MemberAddV2Result::UserAlreadyPaired(x) => {
15438                // primitive
15439                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15440                s.serialize_field(".tag", "user_already_paired")?;
15441                s.serialize_field("user_already_paired", x)?;
15442                s.end()
15443            }
15444            MemberAddV2Result::UserMigrationFailed(x) => {
15445                // primitive
15446                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15447                s.serialize_field(".tag", "user_migration_failed")?;
15448                s.serialize_field("user_migration_failed", x)?;
15449                s.end()
15450            }
15451            MemberAddV2Result::DuplicateExternalMemberId(x) => {
15452                // primitive
15453                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15454                s.serialize_field(".tag", "duplicate_external_member_id")?;
15455                s.serialize_field("duplicate_external_member_id", x)?;
15456                s.end()
15457            }
15458            MemberAddV2Result::DuplicateMemberPersistentId(x) => {
15459                // primitive
15460                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15461                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
15462                s.serialize_field("duplicate_member_persistent_id", x)?;
15463                s.end()
15464            }
15465            MemberAddV2Result::PersistentIdDisabled(x) => {
15466                // primitive
15467                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15468                s.serialize_field(".tag", "persistent_id_disabled")?;
15469                s.serialize_field("persistent_id_disabled", x)?;
15470                s.end()
15471            }
15472            MemberAddV2Result::UserCreationFailed(x) => {
15473                // primitive
15474                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
15475                s.serialize_field(".tag", "user_creation_failed")?;
15476                s.serialize_field("user_creation_failed", x)?;
15477                s.end()
15478            }
15479            MemberAddV2Result::Success(x) => {
15480                // struct
15481                let mut s = serializer.serialize_struct("MemberAddV2Result", 3)?;
15482                s.serialize_field(".tag", "success")?;
15483                x.internal_serialize::<S>(&mut s)?;
15484                s.end()
15485            }
15486            MemberAddV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
15487        }
15488    }
15489}
15490
15491// union extends MemberAddResultBase
15492impl From<MemberAddResultBase> for MemberAddV2Result {
15493    fn from(parent: MemberAddResultBase) -> Self {
15494        match parent {
15495            MemberAddResultBase::TeamLicenseLimit(x) => MemberAddV2Result::TeamLicenseLimit(x),
15496            MemberAddResultBase::FreeTeamMemberLimitReached(x) => MemberAddV2Result::FreeTeamMemberLimitReached(x),
15497            MemberAddResultBase::UserAlreadyOnTeam(x) => MemberAddV2Result::UserAlreadyOnTeam(x),
15498            MemberAddResultBase::UserOnAnotherTeam(x) => MemberAddV2Result::UserOnAnotherTeam(x),
15499            MemberAddResultBase::UserAlreadyPaired(x) => MemberAddV2Result::UserAlreadyPaired(x),
15500            MemberAddResultBase::UserMigrationFailed(x) => MemberAddV2Result::UserMigrationFailed(x),
15501            MemberAddResultBase::DuplicateExternalMemberId(x) => MemberAddV2Result::DuplicateExternalMemberId(x),
15502            MemberAddResultBase::DuplicateMemberPersistentId(x) => MemberAddV2Result::DuplicateMemberPersistentId(x),
15503            MemberAddResultBase::PersistentIdDisabled(x) => MemberAddV2Result::PersistentIdDisabled(x),
15504            MemberAddResultBase::UserCreationFailed(x) => MemberAddV2Result::UserCreationFailed(x),
15505        }
15506    }
15507}
15508/// Information on devices of a team's member.
15509#[derive(Debug, Clone, PartialEq, Eq)]
15510#[non_exhaustive] // structs may have more fields added in the future.
15511pub struct MemberDevices {
15512    /// The member unique Id.
15513    pub team_member_id: String,
15514    /// List of web sessions made by this team member.
15515    pub web_sessions: Option<Vec<ActiveWebSession>>,
15516    /// List of desktop clients by this team member.
15517    pub desktop_clients: Option<Vec<DesktopClientSession>>,
15518    /// List of mobile clients by this team member.
15519    pub mobile_clients: Option<Vec<MobileClientSession>>,
15520}
15521
15522impl MemberDevices {
15523    pub fn new(team_member_id: String) -> Self {
15524        MemberDevices {
15525            team_member_id,
15526            web_sessions: None,
15527            desktop_clients: None,
15528            mobile_clients: None,
15529        }
15530    }
15531
15532    pub fn with_web_sessions(mut self, value: Vec<ActiveWebSession>) -> Self {
15533        self.web_sessions = Some(value);
15534        self
15535    }
15536
15537    pub fn with_desktop_clients(mut self, value: Vec<DesktopClientSession>) -> Self {
15538        self.desktop_clients = Some(value);
15539        self
15540    }
15541
15542    pub fn with_mobile_clients(mut self, value: Vec<MobileClientSession>) -> Self {
15543        self.mobile_clients = Some(value);
15544        self
15545    }
15546}
15547
15548const MEMBER_DEVICES_FIELDS: &[&str] = &["team_member_id",
15549                                         "web_sessions",
15550                                         "desktop_clients",
15551                                         "mobile_clients"];
15552impl MemberDevices {
15553    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15554        map: V,
15555    ) -> Result<MemberDevices, V::Error> {
15556        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15557    }
15558
15559    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15560        mut map: V,
15561        optional: bool,
15562    ) -> Result<Option<MemberDevices>, V::Error> {
15563        let mut field_team_member_id = None;
15564        let mut field_web_sessions = None;
15565        let mut field_desktop_clients = None;
15566        let mut field_mobile_clients = None;
15567        let mut nothing = true;
15568        while let Some(key) = map.next_key::<&str>()? {
15569            nothing = false;
15570            match key {
15571                "team_member_id" => {
15572                    if field_team_member_id.is_some() {
15573                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
15574                    }
15575                    field_team_member_id = Some(map.next_value()?);
15576                }
15577                "web_sessions" => {
15578                    if field_web_sessions.is_some() {
15579                        return Err(::serde::de::Error::duplicate_field("web_sessions"));
15580                    }
15581                    field_web_sessions = Some(map.next_value()?);
15582                }
15583                "desktop_clients" => {
15584                    if field_desktop_clients.is_some() {
15585                        return Err(::serde::de::Error::duplicate_field("desktop_clients"));
15586                    }
15587                    field_desktop_clients = Some(map.next_value()?);
15588                }
15589                "mobile_clients" => {
15590                    if field_mobile_clients.is_some() {
15591                        return Err(::serde::de::Error::duplicate_field("mobile_clients"));
15592                    }
15593                    field_mobile_clients = Some(map.next_value()?);
15594                }
15595                _ => {
15596                    // unknown field allowed and ignored
15597                    map.next_value::<::serde_json::Value>()?;
15598                }
15599            }
15600        }
15601        if optional && nothing {
15602            return Ok(None);
15603        }
15604        let result = MemberDevices {
15605            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
15606            web_sessions: field_web_sessions.and_then(Option::flatten),
15607            desktop_clients: field_desktop_clients.and_then(Option::flatten),
15608            mobile_clients: field_mobile_clients.and_then(Option::flatten),
15609        };
15610        Ok(Some(result))
15611    }
15612
15613    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15614        &self,
15615        s: &mut S::SerializeStruct,
15616    ) -> Result<(), S::Error> {
15617        use serde::ser::SerializeStruct;
15618        s.serialize_field("team_member_id", &self.team_member_id)?;
15619        if let Some(val) = &self.web_sessions {
15620            s.serialize_field("web_sessions", val)?;
15621        }
15622        if let Some(val) = &self.desktop_clients {
15623            s.serialize_field("desktop_clients", val)?;
15624        }
15625        if let Some(val) = &self.mobile_clients {
15626            s.serialize_field("mobile_clients", val)?;
15627        }
15628        Ok(())
15629    }
15630}
15631
15632impl<'de> ::serde::de::Deserialize<'de> for MemberDevices {
15633    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15634        // struct deserializer
15635        use serde::de::{MapAccess, Visitor};
15636        struct StructVisitor;
15637        impl<'de> Visitor<'de> for StructVisitor {
15638            type Value = MemberDevices;
15639            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15640                f.write_str("a MemberDevices struct")
15641            }
15642            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15643                MemberDevices::internal_deserialize(map)
15644            }
15645        }
15646        deserializer.deserialize_struct("MemberDevices", MEMBER_DEVICES_FIELDS, StructVisitor)
15647    }
15648}
15649
15650impl ::serde::ser::Serialize for MemberDevices {
15651    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15652        // struct serializer
15653        use serde::ser::SerializeStruct;
15654        let mut s = serializer.serialize_struct("MemberDevices", 4)?;
15655        self.internal_serialize::<S>(&mut s)?;
15656        s.end()
15657    }
15658}
15659
15660/// Information on linked applications of a team member.
15661#[derive(Debug, Clone, PartialEq, Eq)]
15662#[non_exhaustive] // structs may have more fields added in the future.
15663pub struct MemberLinkedApps {
15664    /// The member unique Id.
15665    pub team_member_id: String,
15666    /// List of third party applications linked by this team member.
15667    pub linked_api_apps: Vec<ApiApp>,
15668}
15669
15670impl MemberLinkedApps {
15671    pub fn new(team_member_id: String, linked_api_apps: Vec<ApiApp>) -> Self {
15672        MemberLinkedApps {
15673            team_member_id,
15674            linked_api_apps,
15675        }
15676    }
15677}
15678
15679const MEMBER_LINKED_APPS_FIELDS: &[&str] = &["team_member_id",
15680                                             "linked_api_apps"];
15681impl MemberLinkedApps {
15682    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15683        map: V,
15684    ) -> Result<MemberLinkedApps, V::Error> {
15685        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15686    }
15687
15688    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15689        mut map: V,
15690        optional: bool,
15691    ) -> Result<Option<MemberLinkedApps>, V::Error> {
15692        let mut field_team_member_id = None;
15693        let mut field_linked_api_apps = None;
15694        let mut nothing = true;
15695        while let Some(key) = map.next_key::<&str>()? {
15696            nothing = false;
15697            match key {
15698                "team_member_id" => {
15699                    if field_team_member_id.is_some() {
15700                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
15701                    }
15702                    field_team_member_id = Some(map.next_value()?);
15703                }
15704                "linked_api_apps" => {
15705                    if field_linked_api_apps.is_some() {
15706                        return Err(::serde::de::Error::duplicate_field("linked_api_apps"));
15707                    }
15708                    field_linked_api_apps = Some(map.next_value()?);
15709                }
15710                _ => {
15711                    // unknown field allowed and ignored
15712                    map.next_value::<::serde_json::Value>()?;
15713                }
15714            }
15715        }
15716        if optional && nothing {
15717            return Ok(None);
15718        }
15719        let result = MemberLinkedApps {
15720            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
15721            linked_api_apps: field_linked_api_apps.ok_or_else(|| ::serde::de::Error::missing_field("linked_api_apps"))?,
15722        };
15723        Ok(Some(result))
15724    }
15725
15726    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15727        &self,
15728        s: &mut S::SerializeStruct,
15729    ) -> Result<(), S::Error> {
15730        use serde::ser::SerializeStruct;
15731        s.serialize_field("team_member_id", &self.team_member_id)?;
15732        s.serialize_field("linked_api_apps", &self.linked_api_apps)?;
15733        Ok(())
15734    }
15735}
15736
15737impl<'de> ::serde::de::Deserialize<'de> for MemberLinkedApps {
15738    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15739        // struct deserializer
15740        use serde::de::{MapAccess, Visitor};
15741        struct StructVisitor;
15742        impl<'de> Visitor<'de> for StructVisitor {
15743            type Value = MemberLinkedApps;
15744            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15745                f.write_str("a MemberLinkedApps struct")
15746            }
15747            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15748                MemberLinkedApps::internal_deserialize(map)
15749            }
15750        }
15751        deserializer.deserialize_struct("MemberLinkedApps", MEMBER_LINKED_APPS_FIELDS, StructVisitor)
15752    }
15753}
15754
15755impl ::serde::ser::Serialize for MemberLinkedApps {
15756    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15757        // struct serializer
15758        use serde::ser::SerializeStruct;
15759        let mut s = serializer.serialize_struct("MemberLinkedApps", 2)?;
15760        self.internal_serialize::<S>(&mut s)?;
15761        s.end()
15762    }
15763}
15764
15765/// Basic member profile.
15766#[derive(Debug, Clone, PartialEq, Eq)]
15767#[non_exhaustive] // structs may have more fields added in the future.
15768pub struct MemberProfile {
15769    /// ID of user as a member of a team.
15770    pub team_member_id: crate::types::team_common::TeamMemberId,
15771    /// Email address of user.
15772    pub email: String,
15773    /// Is true if the user's email is verified to be owned by the user.
15774    pub email_verified: bool,
15775    /// The user's status as a member of a specific team.
15776    pub status: TeamMemberStatus,
15777    /// Representations for a person's name.
15778    pub name: crate::types::users::Name,
15779    /// The user's membership type: full (normal team member) vs limited (does not use a license; no
15780    /// access to the team's shared quota).
15781    pub membership_type: TeamMembershipType,
15782    /// External ID that a team can attach to the user. An application using the API may find it
15783    /// easier to use their own IDs instead of Dropbox IDs like account_id or team_member_id.
15784    pub external_id: Option<String>,
15785    /// A user's account identifier.
15786    pub account_id: Option<crate::types::users_common::AccountId>,
15787    /// Secondary emails of a user.
15788    pub secondary_emails: Option<Vec<crate::types::secondary_emails::SecondaryEmail>>,
15789    /// The date and time the user was invited to the team (contains value only when the member's
15790    /// status matches [`TeamMemberStatus::Invited`]).
15791    pub invited_on: Option<crate::types::common::DropboxTimestamp>,
15792    /// The date and time the user joined as a member of a specific team.
15793    pub joined_on: Option<crate::types::common::DropboxTimestamp>,
15794    /// The date and time the user was suspended from the team (contains value only when the
15795    /// member's status matches [`TeamMemberStatus::Suspended`]).
15796    pub suspended_on: Option<crate::types::common::DropboxTimestamp>,
15797    /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used
15798    /// for SAML authentication.
15799    pub persistent_id: Option<String>,
15800    /// Whether the user is a directory restricted user.
15801    pub is_directory_restricted: Option<bool>,
15802    /// URL for the photo representing the user, if one is set.
15803    pub profile_photo_url: Option<String>,
15804}
15805
15806impl MemberProfile {
15807    pub fn new(
15808        team_member_id: crate::types::team_common::TeamMemberId,
15809        email: String,
15810        email_verified: bool,
15811        status: TeamMemberStatus,
15812        name: crate::types::users::Name,
15813        membership_type: TeamMembershipType,
15814    ) -> Self {
15815        MemberProfile {
15816            team_member_id,
15817            email,
15818            email_verified,
15819            status,
15820            name,
15821            membership_type,
15822            external_id: None,
15823            account_id: None,
15824            secondary_emails: None,
15825            invited_on: None,
15826            joined_on: None,
15827            suspended_on: None,
15828            persistent_id: None,
15829            is_directory_restricted: None,
15830            profile_photo_url: None,
15831        }
15832    }
15833
15834    pub fn with_external_id(mut self, value: String) -> Self {
15835        self.external_id = Some(value);
15836        self
15837    }
15838
15839    pub fn with_account_id(mut self, value: crate::types::users_common::AccountId) -> Self {
15840        self.account_id = Some(value);
15841        self
15842    }
15843
15844    pub fn with_secondary_emails(
15845        mut self,
15846        value: Vec<crate::types::secondary_emails::SecondaryEmail>,
15847    ) -> Self {
15848        self.secondary_emails = Some(value);
15849        self
15850    }
15851
15852    pub fn with_invited_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
15853        self.invited_on = Some(value);
15854        self
15855    }
15856
15857    pub fn with_joined_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
15858        self.joined_on = Some(value);
15859        self
15860    }
15861
15862    pub fn with_suspended_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
15863        self.suspended_on = Some(value);
15864        self
15865    }
15866
15867    pub fn with_persistent_id(mut self, value: String) -> Self {
15868        self.persistent_id = Some(value);
15869        self
15870    }
15871
15872    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
15873        self.is_directory_restricted = Some(value);
15874        self
15875    }
15876
15877    pub fn with_profile_photo_url(mut self, value: String) -> Self {
15878        self.profile_photo_url = Some(value);
15879        self
15880    }
15881}
15882
15883const MEMBER_PROFILE_FIELDS: &[&str] = &["team_member_id",
15884                                         "email",
15885                                         "email_verified",
15886                                         "status",
15887                                         "name",
15888                                         "membership_type",
15889                                         "external_id",
15890                                         "account_id",
15891                                         "secondary_emails",
15892                                         "invited_on",
15893                                         "joined_on",
15894                                         "suspended_on",
15895                                         "persistent_id",
15896                                         "is_directory_restricted",
15897                                         "profile_photo_url"];
15898impl MemberProfile {
15899    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15900        map: V,
15901    ) -> Result<MemberProfile, V::Error> {
15902        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15903    }
15904
15905    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15906        mut map: V,
15907        optional: bool,
15908    ) -> Result<Option<MemberProfile>, V::Error> {
15909        let mut field_team_member_id = None;
15910        let mut field_email = None;
15911        let mut field_email_verified = None;
15912        let mut field_status = None;
15913        let mut field_name = None;
15914        let mut field_membership_type = None;
15915        let mut field_external_id = None;
15916        let mut field_account_id = None;
15917        let mut field_secondary_emails = None;
15918        let mut field_invited_on = None;
15919        let mut field_joined_on = None;
15920        let mut field_suspended_on = None;
15921        let mut field_persistent_id = None;
15922        let mut field_is_directory_restricted = None;
15923        let mut field_profile_photo_url = None;
15924        let mut nothing = true;
15925        while let Some(key) = map.next_key::<&str>()? {
15926            nothing = false;
15927            match key {
15928                "team_member_id" => {
15929                    if field_team_member_id.is_some() {
15930                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
15931                    }
15932                    field_team_member_id = Some(map.next_value()?);
15933                }
15934                "email" => {
15935                    if field_email.is_some() {
15936                        return Err(::serde::de::Error::duplicate_field("email"));
15937                    }
15938                    field_email = Some(map.next_value()?);
15939                }
15940                "email_verified" => {
15941                    if field_email_verified.is_some() {
15942                        return Err(::serde::de::Error::duplicate_field("email_verified"));
15943                    }
15944                    field_email_verified = Some(map.next_value()?);
15945                }
15946                "status" => {
15947                    if field_status.is_some() {
15948                        return Err(::serde::de::Error::duplicate_field("status"));
15949                    }
15950                    field_status = Some(map.next_value()?);
15951                }
15952                "name" => {
15953                    if field_name.is_some() {
15954                        return Err(::serde::de::Error::duplicate_field("name"));
15955                    }
15956                    field_name = Some(map.next_value()?);
15957                }
15958                "membership_type" => {
15959                    if field_membership_type.is_some() {
15960                        return Err(::serde::de::Error::duplicate_field("membership_type"));
15961                    }
15962                    field_membership_type = Some(map.next_value()?);
15963                }
15964                "external_id" => {
15965                    if field_external_id.is_some() {
15966                        return Err(::serde::de::Error::duplicate_field("external_id"));
15967                    }
15968                    field_external_id = Some(map.next_value()?);
15969                }
15970                "account_id" => {
15971                    if field_account_id.is_some() {
15972                        return Err(::serde::de::Error::duplicate_field("account_id"));
15973                    }
15974                    field_account_id = Some(map.next_value()?);
15975                }
15976                "secondary_emails" => {
15977                    if field_secondary_emails.is_some() {
15978                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
15979                    }
15980                    field_secondary_emails = Some(map.next_value()?);
15981                }
15982                "invited_on" => {
15983                    if field_invited_on.is_some() {
15984                        return Err(::serde::de::Error::duplicate_field("invited_on"));
15985                    }
15986                    field_invited_on = Some(map.next_value()?);
15987                }
15988                "joined_on" => {
15989                    if field_joined_on.is_some() {
15990                        return Err(::serde::de::Error::duplicate_field("joined_on"));
15991                    }
15992                    field_joined_on = Some(map.next_value()?);
15993                }
15994                "suspended_on" => {
15995                    if field_suspended_on.is_some() {
15996                        return Err(::serde::de::Error::duplicate_field("suspended_on"));
15997                    }
15998                    field_suspended_on = Some(map.next_value()?);
15999                }
16000                "persistent_id" => {
16001                    if field_persistent_id.is_some() {
16002                        return Err(::serde::de::Error::duplicate_field("persistent_id"));
16003                    }
16004                    field_persistent_id = Some(map.next_value()?);
16005                }
16006                "is_directory_restricted" => {
16007                    if field_is_directory_restricted.is_some() {
16008                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
16009                    }
16010                    field_is_directory_restricted = Some(map.next_value()?);
16011                }
16012                "profile_photo_url" => {
16013                    if field_profile_photo_url.is_some() {
16014                        return Err(::serde::de::Error::duplicate_field("profile_photo_url"));
16015                    }
16016                    field_profile_photo_url = Some(map.next_value()?);
16017                }
16018                _ => {
16019                    // unknown field allowed and ignored
16020                    map.next_value::<::serde_json::Value>()?;
16021                }
16022            }
16023        }
16024        if optional && nothing {
16025            return Ok(None);
16026        }
16027        let result = MemberProfile {
16028            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
16029            email: field_email.ok_or_else(|| ::serde::de::Error::missing_field("email"))?,
16030            email_verified: field_email_verified.ok_or_else(|| ::serde::de::Error::missing_field("email_verified"))?,
16031            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
16032            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
16033            membership_type: field_membership_type.ok_or_else(|| ::serde::de::Error::missing_field("membership_type"))?,
16034            external_id: field_external_id.and_then(Option::flatten),
16035            account_id: field_account_id.and_then(Option::flatten),
16036            secondary_emails: field_secondary_emails.and_then(Option::flatten),
16037            invited_on: field_invited_on.and_then(Option::flatten),
16038            joined_on: field_joined_on.and_then(Option::flatten),
16039            suspended_on: field_suspended_on.and_then(Option::flatten),
16040            persistent_id: field_persistent_id.and_then(Option::flatten),
16041            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
16042            profile_photo_url: field_profile_photo_url.and_then(Option::flatten),
16043        };
16044        Ok(Some(result))
16045    }
16046
16047    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16048        &self,
16049        s: &mut S::SerializeStruct,
16050    ) -> Result<(), S::Error> {
16051        use serde::ser::SerializeStruct;
16052        s.serialize_field("team_member_id", &self.team_member_id)?;
16053        s.serialize_field("email", &self.email)?;
16054        s.serialize_field("email_verified", &self.email_verified)?;
16055        s.serialize_field("status", &self.status)?;
16056        s.serialize_field("name", &self.name)?;
16057        s.serialize_field("membership_type", &self.membership_type)?;
16058        if let Some(val) = &self.external_id {
16059            s.serialize_field("external_id", val)?;
16060        }
16061        if let Some(val) = &self.account_id {
16062            s.serialize_field("account_id", val)?;
16063        }
16064        if let Some(val) = &self.secondary_emails {
16065            s.serialize_field("secondary_emails", val)?;
16066        }
16067        if let Some(val) = &self.invited_on {
16068            s.serialize_field("invited_on", val)?;
16069        }
16070        if let Some(val) = &self.joined_on {
16071            s.serialize_field("joined_on", val)?;
16072        }
16073        if let Some(val) = &self.suspended_on {
16074            s.serialize_field("suspended_on", val)?;
16075        }
16076        if let Some(val) = &self.persistent_id {
16077            s.serialize_field("persistent_id", val)?;
16078        }
16079        if let Some(val) = &self.is_directory_restricted {
16080            s.serialize_field("is_directory_restricted", val)?;
16081        }
16082        if let Some(val) = &self.profile_photo_url {
16083            s.serialize_field("profile_photo_url", val)?;
16084        }
16085        Ok(())
16086    }
16087}
16088
16089impl<'de> ::serde::de::Deserialize<'de> for MemberProfile {
16090    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16091        // struct deserializer
16092        use serde::de::{MapAccess, Visitor};
16093        struct StructVisitor;
16094        impl<'de> Visitor<'de> for StructVisitor {
16095            type Value = MemberProfile;
16096            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16097                f.write_str("a MemberProfile struct")
16098            }
16099            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16100                MemberProfile::internal_deserialize(map)
16101            }
16102        }
16103        deserializer.deserialize_struct("MemberProfile", MEMBER_PROFILE_FIELDS, StructVisitor)
16104    }
16105}
16106
16107impl ::serde::ser::Serialize for MemberProfile {
16108    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16109        // struct serializer
16110        use serde::ser::SerializeStruct;
16111        let mut s = serializer.serialize_struct("MemberProfile", 15)?;
16112        self.internal_serialize::<S>(&mut s)?;
16113        s.end()
16114    }
16115}
16116
16117#[derive(Debug, Clone, PartialEq, Eq)]
16118pub enum MemberSelectorError {
16119    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16120    /// this team.
16121    UserNotFound,
16122    /// The user is not a member of the team.
16123    UserNotInTeam,
16124}
16125
16126impl<'de> ::serde::de::Deserialize<'de> for MemberSelectorError {
16127    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16128        // union deserializer
16129        use serde::de::{self, MapAccess, Visitor};
16130        struct EnumVisitor;
16131        impl<'de> Visitor<'de> for EnumVisitor {
16132            type Value = MemberSelectorError;
16133            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16134                f.write_str("a MemberSelectorError structure")
16135            }
16136            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16137                let tag: &str = match map.next_key()? {
16138                    Some(".tag") => map.next_value()?,
16139                    _ => return Err(de::Error::missing_field(".tag"))
16140                };
16141                let value = match tag {
16142                    "user_not_found" => MemberSelectorError::UserNotFound,
16143                    "user_not_in_team" => MemberSelectorError::UserNotInTeam,
16144                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
16145                };
16146                crate::eat_json_fields(&mut map)?;
16147                Ok(value)
16148            }
16149        }
16150        const VARIANTS: &[&str] = &["user_not_found",
16151                                    "user_not_in_team"];
16152        deserializer.deserialize_struct("MemberSelectorError", VARIANTS, EnumVisitor)
16153    }
16154}
16155
16156impl ::serde::ser::Serialize for MemberSelectorError {
16157    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16158        // union serializer
16159        use serde::ser::SerializeStruct;
16160        match self {
16161            MemberSelectorError::UserNotFound => {
16162                // unit
16163                let mut s = serializer.serialize_struct("MemberSelectorError", 1)?;
16164                s.serialize_field(".tag", "user_not_found")?;
16165                s.end()
16166            }
16167            MemberSelectorError::UserNotInTeam => {
16168                // unit
16169                let mut s = serializer.serialize_struct("MemberSelectorError", 1)?;
16170                s.serialize_field(".tag", "user_not_in_team")?;
16171                s.end()
16172            }
16173        }
16174    }
16175}
16176
16177impl ::std::error::Error for MemberSelectorError {
16178}
16179
16180impl ::std::fmt::Display for MemberSelectorError {
16181    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16182        match self {
16183            MemberSelectorError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16184            MemberSelectorError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16185        }
16186    }
16187}
16188
16189// union extends UserSelectorError
16190impl From<UserSelectorError> for MemberSelectorError {
16191    fn from(parent: UserSelectorError) -> Self {
16192        match parent {
16193            UserSelectorError::UserNotFound => MemberSelectorError::UserNotFound,
16194        }
16195    }
16196}
16197#[derive(Debug, Clone, PartialEq, Eq)]
16198#[non_exhaustive] // structs may have more fields added in the future.
16199pub struct MembersAddArg {
16200    /// Details of new members to be added to the team.
16201    pub new_members: Vec<MemberAddArg>,
16202    /// Whether to force the add to happen asynchronously.
16203    pub force_async: bool,
16204}
16205
16206impl MembersAddArg {
16207    pub fn new(new_members: Vec<MemberAddArg>) -> Self {
16208        MembersAddArg {
16209            new_members,
16210            force_async: false,
16211        }
16212    }
16213
16214    pub fn with_force_async(mut self, value: bool) -> Self {
16215        self.force_async = value;
16216        self
16217    }
16218}
16219
16220const MEMBERS_ADD_ARG_FIELDS: &[&str] = &["new_members",
16221                                          "force_async"];
16222impl MembersAddArg {
16223    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16224        map: V,
16225    ) -> Result<MembersAddArg, V::Error> {
16226        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16227    }
16228
16229    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16230        mut map: V,
16231        optional: bool,
16232    ) -> Result<Option<MembersAddArg>, V::Error> {
16233        let mut field_new_members = None;
16234        let mut field_force_async = None;
16235        let mut nothing = true;
16236        while let Some(key) = map.next_key::<&str>()? {
16237            nothing = false;
16238            match key {
16239                "new_members" => {
16240                    if field_new_members.is_some() {
16241                        return Err(::serde::de::Error::duplicate_field("new_members"));
16242                    }
16243                    field_new_members = Some(map.next_value()?);
16244                }
16245                "force_async" => {
16246                    if field_force_async.is_some() {
16247                        return Err(::serde::de::Error::duplicate_field("force_async"));
16248                    }
16249                    field_force_async = Some(map.next_value()?);
16250                }
16251                _ => {
16252                    // unknown field allowed and ignored
16253                    map.next_value::<::serde_json::Value>()?;
16254                }
16255            }
16256        }
16257        if optional && nothing {
16258            return Ok(None);
16259        }
16260        let result = MembersAddArg {
16261            new_members: field_new_members.ok_or_else(|| ::serde::de::Error::missing_field("new_members"))?,
16262            force_async: field_force_async.unwrap_or(false),
16263        };
16264        Ok(Some(result))
16265    }
16266
16267    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16268        &self,
16269        s: &mut S::SerializeStruct,
16270    ) -> Result<(), S::Error> {
16271        use serde::ser::SerializeStruct;
16272        s.serialize_field("new_members", &self.new_members)?;
16273        if self.force_async {
16274            s.serialize_field("force_async", &self.force_async)?;
16275        }
16276        Ok(())
16277    }
16278}
16279
16280impl<'de> ::serde::de::Deserialize<'de> for MembersAddArg {
16281    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16282        // struct deserializer
16283        use serde::de::{MapAccess, Visitor};
16284        struct StructVisitor;
16285        impl<'de> Visitor<'de> for StructVisitor {
16286            type Value = MembersAddArg;
16287            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16288                f.write_str("a MembersAddArg struct")
16289            }
16290            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16291                MembersAddArg::internal_deserialize(map)
16292            }
16293        }
16294        deserializer.deserialize_struct("MembersAddArg", MEMBERS_ADD_ARG_FIELDS, StructVisitor)
16295    }
16296}
16297
16298impl ::serde::ser::Serialize for MembersAddArg {
16299    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16300        // struct serializer
16301        use serde::ser::SerializeStruct;
16302        let mut s = serializer.serialize_struct("MembersAddArg", 2)?;
16303        self.internal_serialize::<S>(&mut s)?;
16304        s.end()
16305    }
16306}
16307
16308// struct extends MembersAddArgBase
16309impl From<MembersAddArg> for MembersAddArgBase {
16310    fn from(subtype: MembersAddArg) -> Self {
16311        Self {
16312            force_async: subtype.force_async,
16313        }
16314    }
16315}
16316#[derive(Debug, Clone, PartialEq, Eq, Default)]
16317#[non_exhaustive] // structs may have more fields added in the future.
16318pub struct MembersAddArgBase {
16319    /// Whether to force the add to happen asynchronously.
16320    pub force_async: bool,
16321}
16322
16323impl MembersAddArgBase {
16324    pub fn with_force_async(mut self, value: bool) -> Self {
16325        self.force_async = value;
16326        self
16327    }
16328}
16329
16330const MEMBERS_ADD_ARG_BASE_FIELDS: &[&str] = &["force_async"];
16331impl MembersAddArgBase {
16332    // no _opt deserializer
16333    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16334        mut map: V,
16335    ) -> Result<MembersAddArgBase, V::Error> {
16336        let mut field_force_async = None;
16337        while let Some(key) = map.next_key::<&str>()? {
16338            match key {
16339                "force_async" => {
16340                    if field_force_async.is_some() {
16341                        return Err(::serde::de::Error::duplicate_field("force_async"));
16342                    }
16343                    field_force_async = Some(map.next_value()?);
16344                }
16345                _ => {
16346                    // unknown field allowed and ignored
16347                    map.next_value::<::serde_json::Value>()?;
16348                }
16349            }
16350        }
16351        let result = MembersAddArgBase {
16352            force_async: field_force_async.unwrap_or(false),
16353        };
16354        Ok(result)
16355    }
16356
16357    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16358        &self,
16359        s: &mut S::SerializeStruct,
16360    ) -> Result<(), S::Error> {
16361        use serde::ser::SerializeStruct;
16362        if self.force_async {
16363            s.serialize_field("force_async", &self.force_async)?;
16364        }
16365        Ok(())
16366    }
16367}
16368
16369impl<'de> ::serde::de::Deserialize<'de> for MembersAddArgBase {
16370    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16371        // struct deserializer
16372        use serde::de::{MapAccess, Visitor};
16373        struct StructVisitor;
16374        impl<'de> Visitor<'de> for StructVisitor {
16375            type Value = MembersAddArgBase;
16376            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16377                f.write_str("a MembersAddArgBase struct")
16378            }
16379            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16380                MembersAddArgBase::internal_deserialize(map)
16381            }
16382        }
16383        deserializer.deserialize_struct("MembersAddArgBase", MEMBERS_ADD_ARG_BASE_FIELDS, StructVisitor)
16384    }
16385}
16386
16387impl ::serde::ser::Serialize for MembersAddArgBase {
16388    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16389        // struct serializer
16390        use serde::ser::SerializeStruct;
16391        let mut s = serializer.serialize_struct("MembersAddArgBase", 1)?;
16392        self.internal_serialize::<S>(&mut s)?;
16393        s.end()
16394    }
16395}
16396
16397#[derive(Debug, Clone, PartialEq, Eq)]
16398pub enum MembersAddJobStatus {
16399    /// The asynchronous job is still in progress.
16400    InProgress,
16401    /// The asynchronous job has finished. For each member that was specified in the parameter
16402    /// [`MembersAddArg`] that was provided to [`members_add()`](crate::team::members_add), a
16403    /// corresponding item is returned in this list.
16404    Complete(Vec<MemberAddResult>),
16405    /// The asynchronous job returned an error. The string contains an error message.
16406    Failed(String),
16407}
16408
16409impl<'de> ::serde::de::Deserialize<'de> for MembersAddJobStatus {
16410    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16411        // union deserializer
16412        use serde::de::{self, MapAccess, Visitor};
16413        struct EnumVisitor;
16414        impl<'de> Visitor<'de> for EnumVisitor {
16415            type Value = MembersAddJobStatus;
16416            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16417                f.write_str("a MembersAddJobStatus structure")
16418            }
16419            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16420                let tag: &str = match map.next_key()? {
16421                    Some(".tag") => map.next_value()?,
16422                    _ => return Err(de::Error::missing_field(".tag"))
16423                };
16424                let value = match tag {
16425                    "in_progress" => MembersAddJobStatus::InProgress,
16426                    "complete" => {
16427                        match map.next_key()? {
16428                            Some("complete") => MembersAddJobStatus::Complete(map.next_value()?),
16429                            None => return Err(de::Error::missing_field("complete")),
16430                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16431                        }
16432                    }
16433                    "failed" => {
16434                        match map.next_key()? {
16435                            Some("failed") => MembersAddJobStatus::Failed(map.next_value()?),
16436                            None => return Err(de::Error::missing_field("failed")),
16437                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16438                        }
16439                    }
16440                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
16441                };
16442                crate::eat_json_fields(&mut map)?;
16443                Ok(value)
16444            }
16445        }
16446        const VARIANTS: &[&str] = &["in_progress",
16447                                    "complete",
16448                                    "failed"];
16449        deserializer.deserialize_struct("MembersAddJobStatus", VARIANTS, EnumVisitor)
16450    }
16451}
16452
16453impl ::serde::ser::Serialize for MembersAddJobStatus {
16454    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16455        // union serializer
16456        use serde::ser::SerializeStruct;
16457        match self {
16458            MembersAddJobStatus::InProgress => {
16459                // unit
16460                let mut s = serializer.serialize_struct("MembersAddJobStatus", 1)?;
16461                s.serialize_field(".tag", "in_progress")?;
16462                s.end()
16463            }
16464            MembersAddJobStatus::Complete(x) => {
16465                // primitive
16466                let mut s = serializer.serialize_struct("MembersAddJobStatus", 2)?;
16467                s.serialize_field(".tag", "complete")?;
16468                s.serialize_field("complete", x)?;
16469                s.end()
16470            }
16471            MembersAddJobStatus::Failed(x) => {
16472                // primitive
16473                let mut s = serializer.serialize_struct("MembersAddJobStatus", 2)?;
16474                s.serialize_field(".tag", "failed")?;
16475                s.serialize_field("failed", x)?;
16476                s.end()
16477            }
16478        }
16479    }
16480}
16481
16482// union extends crate::types::dbx_async::PollResultBase
16483impl From<crate::types::dbx_async::PollResultBase> for MembersAddJobStatus {
16484    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
16485        match parent {
16486            crate::types::dbx_async::PollResultBase::InProgress => MembersAddJobStatus::InProgress,
16487        }
16488    }
16489}
16490#[derive(Debug, Clone, PartialEq, Eq)]
16491#[non_exhaustive] // variants may be added in the future
16492pub enum MembersAddJobStatusV2Result {
16493    /// The asynchronous job is still in progress.
16494    InProgress,
16495    /// The asynchronous job has finished. For each member that was specified in the parameter
16496    /// [`MembersAddArg`] that was provided to [`members_add_v2()`](crate::team::members_add_v2), a
16497    /// corresponding item is returned in this list.
16498    Complete(Vec<MemberAddV2Result>),
16499    /// The asynchronous job returned an error. The string contains an error message.
16500    Failed(String),
16501    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16502    /// typically indicates that this SDK version is out of date.
16503    Other,
16504}
16505
16506impl<'de> ::serde::de::Deserialize<'de> for MembersAddJobStatusV2Result {
16507    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16508        // union deserializer
16509        use serde::de::{self, MapAccess, Visitor};
16510        struct EnumVisitor;
16511        impl<'de> Visitor<'de> for EnumVisitor {
16512            type Value = MembersAddJobStatusV2Result;
16513            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16514                f.write_str("a MembersAddJobStatusV2Result structure")
16515            }
16516            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16517                let tag: &str = match map.next_key()? {
16518                    Some(".tag") => map.next_value()?,
16519                    _ => return Err(de::Error::missing_field(".tag"))
16520                };
16521                let value = match tag {
16522                    "in_progress" => MembersAddJobStatusV2Result::InProgress,
16523                    "complete" => {
16524                        match map.next_key()? {
16525                            Some("complete") => MembersAddJobStatusV2Result::Complete(map.next_value()?),
16526                            None => return Err(de::Error::missing_field("complete")),
16527                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16528                        }
16529                    }
16530                    "failed" => {
16531                        match map.next_key()? {
16532                            Some("failed") => MembersAddJobStatusV2Result::Failed(map.next_value()?),
16533                            None => return Err(de::Error::missing_field("failed")),
16534                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16535                        }
16536                    }
16537                    _ => MembersAddJobStatusV2Result::Other,
16538                };
16539                crate::eat_json_fields(&mut map)?;
16540                Ok(value)
16541            }
16542        }
16543        const VARIANTS: &[&str] = &["in_progress",
16544                                    "complete",
16545                                    "failed",
16546                                    "other"];
16547        deserializer.deserialize_struct("MembersAddJobStatusV2Result", VARIANTS, EnumVisitor)
16548    }
16549}
16550
16551impl ::serde::ser::Serialize for MembersAddJobStatusV2Result {
16552    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16553        // union serializer
16554        use serde::ser::SerializeStruct;
16555        match self {
16556            MembersAddJobStatusV2Result::InProgress => {
16557                // unit
16558                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 1)?;
16559                s.serialize_field(".tag", "in_progress")?;
16560                s.end()
16561            }
16562            MembersAddJobStatusV2Result::Complete(x) => {
16563                // primitive
16564                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 2)?;
16565                s.serialize_field(".tag", "complete")?;
16566                s.serialize_field("complete", x)?;
16567                s.end()
16568            }
16569            MembersAddJobStatusV2Result::Failed(x) => {
16570                // primitive
16571                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 2)?;
16572                s.serialize_field(".tag", "failed")?;
16573                s.serialize_field("failed", x)?;
16574                s.end()
16575            }
16576            MembersAddJobStatusV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16577        }
16578    }
16579}
16580
16581// union extends crate::types::dbx_async::PollResultBase
16582impl From<crate::types::dbx_async::PollResultBase> for MembersAddJobStatusV2Result {
16583    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
16584        match parent {
16585            crate::types::dbx_async::PollResultBase::InProgress => MembersAddJobStatusV2Result::InProgress,
16586        }
16587    }
16588}
16589#[derive(Debug, Clone, PartialEq, Eq)]
16590pub enum MembersAddLaunch {
16591    /// This response indicates that the processing is asynchronous. The string is an id that can be
16592    /// used to obtain the status of the asynchronous job.
16593    AsyncJobId(crate::types::dbx_async::AsyncJobId),
16594    Complete(Vec<MemberAddResult>),
16595}
16596
16597impl<'de> ::serde::de::Deserialize<'de> for MembersAddLaunch {
16598    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16599        // union deserializer
16600        use serde::de::{self, MapAccess, Visitor};
16601        struct EnumVisitor;
16602        impl<'de> Visitor<'de> for EnumVisitor {
16603            type Value = MembersAddLaunch;
16604            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16605                f.write_str("a MembersAddLaunch structure")
16606            }
16607            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16608                let tag: &str = match map.next_key()? {
16609                    Some(".tag") => map.next_value()?,
16610                    _ => return Err(de::Error::missing_field(".tag"))
16611                };
16612                let value = match tag {
16613                    "async_job_id" => {
16614                        match map.next_key()? {
16615                            Some("async_job_id") => MembersAddLaunch::AsyncJobId(map.next_value()?),
16616                            None => return Err(de::Error::missing_field("async_job_id")),
16617                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16618                        }
16619                    }
16620                    "complete" => {
16621                        match map.next_key()? {
16622                            Some("complete") => MembersAddLaunch::Complete(map.next_value()?),
16623                            None => return Err(de::Error::missing_field("complete")),
16624                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16625                        }
16626                    }
16627                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
16628                };
16629                crate::eat_json_fields(&mut map)?;
16630                Ok(value)
16631            }
16632        }
16633        const VARIANTS: &[&str] = &["async_job_id",
16634                                    "complete"];
16635        deserializer.deserialize_struct("MembersAddLaunch", VARIANTS, EnumVisitor)
16636    }
16637}
16638
16639impl ::serde::ser::Serialize for MembersAddLaunch {
16640    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16641        // union serializer
16642        use serde::ser::SerializeStruct;
16643        match self {
16644            MembersAddLaunch::AsyncJobId(x) => {
16645                // primitive
16646                let mut s = serializer.serialize_struct("MembersAddLaunch", 2)?;
16647                s.serialize_field(".tag", "async_job_id")?;
16648                s.serialize_field("async_job_id", x)?;
16649                s.end()
16650            }
16651            MembersAddLaunch::Complete(x) => {
16652                // primitive
16653                let mut s = serializer.serialize_struct("MembersAddLaunch", 2)?;
16654                s.serialize_field(".tag", "complete")?;
16655                s.serialize_field("complete", x)?;
16656                s.end()
16657            }
16658        }
16659    }
16660}
16661
16662// union extends crate::types::dbx_async::LaunchResultBase
16663impl From<crate::types::dbx_async::LaunchResultBase> for MembersAddLaunch {
16664    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
16665        match parent {
16666            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => MembersAddLaunch::AsyncJobId(x),
16667        }
16668    }
16669}
16670#[derive(Debug, Clone, PartialEq, Eq)]
16671#[non_exhaustive] // variants may be added in the future
16672pub enum MembersAddLaunchV2Result {
16673    /// This response indicates that the processing is asynchronous. The string is an id that can be
16674    /// used to obtain the status of the asynchronous job.
16675    AsyncJobId(crate::types::dbx_async::AsyncJobId),
16676    Complete(Vec<MemberAddV2Result>),
16677    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16678    /// typically indicates that this SDK version is out of date.
16679    Other,
16680}
16681
16682impl<'de> ::serde::de::Deserialize<'de> for MembersAddLaunchV2Result {
16683    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16684        // union deserializer
16685        use serde::de::{self, MapAccess, Visitor};
16686        struct EnumVisitor;
16687        impl<'de> Visitor<'de> for EnumVisitor {
16688            type Value = MembersAddLaunchV2Result;
16689            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16690                f.write_str("a MembersAddLaunchV2Result structure")
16691            }
16692            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16693                let tag: &str = match map.next_key()? {
16694                    Some(".tag") => map.next_value()?,
16695                    _ => return Err(de::Error::missing_field(".tag"))
16696                };
16697                let value = match tag {
16698                    "async_job_id" => {
16699                        match map.next_key()? {
16700                            Some("async_job_id") => MembersAddLaunchV2Result::AsyncJobId(map.next_value()?),
16701                            None => return Err(de::Error::missing_field("async_job_id")),
16702                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16703                        }
16704                    }
16705                    "complete" => {
16706                        match map.next_key()? {
16707                            Some("complete") => MembersAddLaunchV2Result::Complete(map.next_value()?),
16708                            None => return Err(de::Error::missing_field("complete")),
16709                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
16710                        }
16711                    }
16712                    _ => MembersAddLaunchV2Result::Other,
16713                };
16714                crate::eat_json_fields(&mut map)?;
16715                Ok(value)
16716            }
16717        }
16718        const VARIANTS: &[&str] = &["async_job_id",
16719                                    "complete",
16720                                    "other"];
16721        deserializer.deserialize_struct("MembersAddLaunchV2Result", VARIANTS, EnumVisitor)
16722    }
16723}
16724
16725impl ::serde::ser::Serialize for MembersAddLaunchV2Result {
16726    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16727        // union serializer
16728        use serde::ser::SerializeStruct;
16729        match self {
16730            MembersAddLaunchV2Result::AsyncJobId(x) => {
16731                // primitive
16732                let mut s = serializer.serialize_struct("MembersAddLaunchV2Result", 2)?;
16733                s.serialize_field(".tag", "async_job_id")?;
16734                s.serialize_field("async_job_id", x)?;
16735                s.end()
16736            }
16737            MembersAddLaunchV2Result::Complete(x) => {
16738                // primitive
16739                let mut s = serializer.serialize_struct("MembersAddLaunchV2Result", 2)?;
16740                s.serialize_field(".tag", "complete")?;
16741                s.serialize_field("complete", x)?;
16742                s.end()
16743            }
16744            MembersAddLaunchV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16745        }
16746    }
16747}
16748
16749// union extends crate::types::dbx_async::LaunchResultBase
16750impl From<crate::types::dbx_async::LaunchResultBase> for MembersAddLaunchV2Result {
16751    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
16752        match parent {
16753            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => MembersAddLaunchV2Result::AsyncJobId(x),
16754        }
16755    }
16756}
16757#[derive(Debug, Clone, PartialEq, Eq)]
16758#[non_exhaustive] // structs may have more fields added in the future.
16759pub struct MembersAddV2Arg {
16760    /// Details of new members to be added to the team.
16761    pub new_members: Vec<MemberAddV2Arg>,
16762    /// Whether to force the add to happen asynchronously.
16763    pub force_async: bool,
16764}
16765
16766impl MembersAddV2Arg {
16767    pub fn new(new_members: Vec<MemberAddV2Arg>) -> Self {
16768        MembersAddV2Arg {
16769            new_members,
16770            force_async: false,
16771        }
16772    }
16773
16774    pub fn with_force_async(mut self, value: bool) -> Self {
16775        self.force_async = value;
16776        self
16777    }
16778}
16779
16780const MEMBERS_ADD_V2_ARG_FIELDS: &[&str] = &["new_members",
16781                                             "force_async"];
16782impl MembersAddV2Arg {
16783    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16784        map: V,
16785    ) -> Result<MembersAddV2Arg, V::Error> {
16786        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16787    }
16788
16789    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16790        mut map: V,
16791        optional: bool,
16792    ) -> Result<Option<MembersAddV2Arg>, V::Error> {
16793        let mut field_new_members = None;
16794        let mut field_force_async = None;
16795        let mut nothing = true;
16796        while let Some(key) = map.next_key::<&str>()? {
16797            nothing = false;
16798            match key {
16799                "new_members" => {
16800                    if field_new_members.is_some() {
16801                        return Err(::serde::de::Error::duplicate_field("new_members"));
16802                    }
16803                    field_new_members = Some(map.next_value()?);
16804                }
16805                "force_async" => {
16806                    if field_force_async.is_some() {
16807                        return Err(::serde::de::Error::duplicate_field("force_async"));
16808                    }
16809                    field_force_async = Some(map.next_value()?);
16810                }
16811                _ => {
16812                    // unknown field allowed and ignored
16813                    map.next_value::<::serde_json::Value>()?;
16814                }
16815            }
16816        }
16817        if optional && nothing {
16818            return Ok(None);
16819        }
16820        let result = MembersAddV2Arg {
16821            new_members: field_new_members.ok_or_else(|| ::serde::de::Error::missing_field("new_members"))?,
16822            force_async: field_force_async.unwrap_or(false),
16823        };
16824        Ok(Some(result))
16825    }
16826
16827    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16828        &self,
16829        s: &mut S::SerializeStruct,
16830    ) -> Result<(), S::Error> {
16831        use serde::ser::SerializeStruct;
16832        s.serialize_field("new_members", &self.new_members)?;
16833        if self.force_async {
16834            s.serialize_field("force_async", &self.force_async)?;
16835        }
16836        Ok(())
16837    }
16838}
16839
16840impl<'de> ::serde::de::Deserialize<'de> for MembersAddV2Arg {
16841    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16842        // struct deserializer
16843        use serde::de::{MapAccess, Visitor};
16844        struct StructVisitor;
16845        impl<'de> Visitor<'de> for StructVisitor {
16846            type Value = MembersAddV2Arg;
16847            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16848                f.write_str("a MembersAddV2Arg struct")
16849            }
16850            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16851                MembersAddV2Arg::internal_deserialize(map)
16852            }
16853        }
16854        deserializer.deserialize_struct("MembersAddV2Arg", MEMBERS_ADD_V2_ARG_FIELDS, StructVisitor)
16855    }
16856}
16857
16858impl ::serde::ser::Serialize for MembersAddV2Arg {
16859    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16860        // struct serializer
16861        use serde::ser::SerializeStruct;
16862        let mut s = serializer.serialize_struct("MembersAddV2Arg", 2)?;
16863        self.internal_serialize::<S>(&mut s)?;
16864        s.end()
16865    }
16866}
16867
16868// struct extends MembersAddArgBase
16869impl From<MembersAddV2Arg> for MembersAddArgBase {
16870    fn from(subtype: MembersAddV2Arg) -> Self {
16871        Self {
16872            force_async: subtype.force_async,
16873        }
16874    }
16875}
16876#[derive(Debug, Clone, PartialEq, Eq)]
16877#[non_exhaustive] // structs may have more fields added in the future.
16878pub struct MembersDataTransferArg {
16879    /// Identity of user to remove/suspend/have their files moved.
16880    pub user: UserSelectorArg,
16881    /// Files from the deleted member account will be transferred to this user.
16882    pub transfer_dest_id: UserSelectorArg,
16883    /// Errors during the transfer process will be sent via email to this user.
16884    pub transfer_admin_id: UserSelectorArg,
16885}
16886
16887impl MembersDataTransferArg {
16888    pub fn new(
16889        user: UserSelectorArg,
16890        transfer_dest_id: UserSelectorArg,
16891        transfer_admin_id: UserSelectorArg,
16892    ) -> Self {
16893        MembersDataTransferArg {
16894            user,
16895            transfer_dest_id,
16896            transfer_admin_id,
16897        }
16898    }
16899}
16900
16901const MEMBERS_DATA_TRANSFER_ARG_FIELDS: &[&str] = &["user",
16902                                                    "transfer_dest_id",
16903                                                    "transfer_admin_id"];
16904impl MembersDataTransferArg {
16905    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16906        map: V,
16907    ) -> Result<MembersDataTransferArg, V::Error> {
16908        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16909    }
16910
16911    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16912        mut map: V,
16913        optional: bool,
16914    ) -> Result<Option<MembersDataTransferArg>, V::Error> {
16915        let mut field_user = None;
16916        let mut field_transfer_dest_id = None;
16917        let mut field_transfer_admin_id = None;
16918        let mut nothing = true;
16919        while let Some(key) = map.next_key::<&str>()? {
16920            nothing = false;
16921            match key {
16922                "user" => {
16923                    if field_user.is_some() {
16924                        return Err(::serde::de::Error::duplicate_field("user"));
16925                    }
16926                    field_user = Some(map.next_value()?);
16927                }
16928                "transfer_dest_id" => {
16929                    if field_transfer_dest_id.is_some() {
16930                        return Err(::serde::de::Error::duplicate_field("transfer_dest_id"));
16931                    }
16932                    field_transfer_dest_id = Some(map.next_value()?);
16933                }
16934                "transfer_admin_id" => {
16935                    if field_transfer_admin_id.is_some() {
16936                        return Err(::serde::de::Error::duplicate_field("transfer_admin_id"));
16937                    }
16938                    field_transfer_admin_id = Some(map.next_value()?);
16939                }
16940                _ => {
16941                    // unknown field allowed and ignored
16942                    map.next_value::<::serde_json::Value>()?;
16943                }
16944            }
16945        }
16946        if optional && nothing {
16947            return Ok(None);
16948        }
16949        let result = MembersDataTransferArg {
16950            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16951            transfer_dest_id: field_transfer_dest_id.ok_or_else(|| ::serde::de::Error::missing_field("transfer_dest_id"))?,
16952            transfer_admin_id: field_transfer_admin_id.ok_or_else(|| ::serde::de::Error::missing_field("transfer_admin_id"))?,
16953        };
16954        Ok(Some(result))
16955    }
16956
16957    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16958        &self,
16959        s: &mut S::SerializeStruct,
16960    ) -> Result<(), S::Error> {
16961        use serde::ser::SerializeStruct;
16962        s.serialize_field("user", &self.user)?;
16963        s.serialize_field("transfer_dest_id", &self.transfer_dest_id)?;
16964        s.serialize_field("transfer_admin_id", &self.transfer_admin_id)?;
16965        Ok(())
16966    }
16967}
16968
16969impl<'de> ::serde::de::Deserialize<'de> for MembersDataTransferArg {
16970    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16971        // struct deserializer
16972        use serde::de::{MapAccess, Visitor};
16973        struct StructVisitor;
16974        impl<'de> Visitor<'de> for StructVisitor {
16975            type Value = MembersDataTransferArg;
16976            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16977                f.write_str("a MembersDataTransferArg struct")
16978            }
16979            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16980                MembersDataTransferArg::internal_deserialize(map)
16981            }
16982        }
16983        deserializer.deserialize_struct("MembersDataTransferArg", MEMBERS_DATA_TRANSFER_ARG_FIELDS, StructVisitor)
16984    }
16985}
16986
16987impl ::serde::ser::Serialize for MembersDataTransferArg {
16988    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16989        // struct serializer
16990        use serde::ser::SerializeStruct;
16991        let mut s = serializer.serialize_struct("MembersDataTransferArg", 3)?;
16992        self.internal_serialize::<S>(&mut s)?;
16993        s.end()
16994    }
16995}
16996
16997// struct extends MembersDeactivateBaseArg
16998impl From<MembersDataTransferArg> for MembersDeactivateBaseArg {
16999    fn from(subtype: MembersDataTransferArg) -> Self {
17000        Self {
17001            user: subtype.user,
17002        }
17003    }
17004}
17005#[derive(Debug, Clone, PartialEq, Eq)]
17006#[non_exhaustive] // structs may have more fields added in the future.
17007pub struct MembersDeactivateArg {
17008    /// Identity of user to remove/suspend/have their files moved.
17009    pub user: UserSelectorArg,
17010    /// If provided, controls if the user's data will be deleted on their linked devices.
17011    pub wipe_data: bool,
17012}
17013
17014impl MembersDeactivateArg {
17015    pub fn new(user: UserSelectorArg) -> Self {
17016        MembersDeactivateArg {
17017            user,
17018            wipe_data: true,
17019        }
17020    }
17021
17022    pub fn with_wipe_data(mut self, value: bool) -> Self {
17023        self.wipe_data = value;
17024        self
17025    }
17026}
17027
17028const MEMBERS_DEACTIVATE_ARG_FIELDS: &[&str] = &["user",
17029                                                 "wipe_data"];
17030impl MembersDeactivateArg {
17031    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17032        map: V,
17033    ) -> Result<MembersDeactivateArg, V::Error> {
17034        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17035    }
17036
17037    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17038        mut map: V,
17039        optional: bool,
17040    ) -> Result<Option<MembersDeactivateArg>, V::Error> {
17041        let mut field_user = None;
17042        let mut field_wipe_data = None;
17043        let mut nothing = true;
17044        while let Some(key) = map.next_key::<&str>()? {
17045            nothing = false;
17046            match key {
17047                "user" => {
17048                    if field_user.is_some() {
17049                        return Err(::serde::de::Error::duplicate_field("user"));
17050                    }
17051                    field_user = Some(map.next_value()?);
17052                }
17053                "wipe_data" => {
17054                    if field_wipe_data.is_some() {
17055                        return Err(::serde::de::Error::duplicate_field("wipe_data"));
17056                    }
17057                    field_wipe_data = Some(map.next_value()?);
17058                }
17059                _ => {
17060                    // unknown field allowed and ignored
17061                    map.next_value::<::serde_json::Value>()?;
17062                }
17063            }
17064        }
17065        if optional && nothing {
17066            return Ok(None);
17067        }
17068        let result = MembersDeactivateArg {
17069            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
17070            wipe_data: field_wipe_data.unwrap_or(true),
17071        };
17072        Ok(Some(result))
17073    }
17074
17075    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17076        &self,
17077        s: &mut S::SerializeStruct,
17078    ) -> Result<(), S::Error> {
17079        use serde::ser::SerializeStruct;
17080        s.serialize_field("user", &self.user)?;
17081        if !self.wipe_data {
17082            s.serialize_field("wipe_data", &self.wipe_data)?;
17083        }
17084        Ok(())
17085    }
17086}
17087
17088impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateArg {
17089    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17090        // struct deserializer
17091        use serde::de::{MapAccess, Visitor};
17092        struct StructVisitor;
17093        impl<'de> Visitor<'de> for StructVisitor {
17094            type Value = MembersDeactivateArg;
17095            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17096                f.write_str("a MembersDeactivateArg struct")
17097            }
17098            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17099                MembersDeactivateArg::internal_deserialize(map)
17100            }
17101        }
17102        deserializer.deserialize_struct("MembersDeactivateArg", MEMBERS_DEACTIVATE_ARG_FIELDS, StructVisitor)
17103    }
17104}
17105
17106impl ::serde::ser::Serialize for MembersDeactivateArg {
17107    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17108        // struct serializer
17109        use serde::ser::SerializeStruct;
17110        let mut s = serializer.serialize_struct("MembersDeactivateArg", 2)?;
17111        self.internal_serialize::<S>(&mut s)?;
17112        s.end()
17113    }
17114}
17115
17116// struct extends MembersDeactivateBaseArg
17117impl From<MembersDeactivateArg> for MembersDeactivateBaseArg {
17118    fn from(subtype: MembersDeactivateArg) -> Self {
17119        Self {
17120            user: subtype.user,
17121        }
17122    }
17123}
17124/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
17125/// account.
17126#[derive(Debug, Clone, PartialEq, Eq)]
17127#[non_exhaustive] // structs may have more fields added in the future.
17128pub struct MembersDeactivateBaseArg {
17129    /// Identity of user to remove/suspend/have their files moved.
17130    pub user: UserSelectorArg,
17131}
17132
17133impl MembersDeactivateBaseArg {
17134    pub fn new(user: UserSelectorArg) -> Self {
17135        MembersDeactivateBaseArg {
17136            user,
17137        }
17138    }
17139}
17140
17141const MEMBERS_DEACTIVATE_BASE_ARG_FIELDS: &[&str] = &["user"];
17142impl MembersDeactivateBaseArg {
17143    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17144        map: V,
17145    ) -> Result<MembersDeactivateBaseArg, V::Error> {
17146        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17147    }
17148
17149    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17150        mut map: V,
17151        optional: bool,
17152    ) -> Result<Option<MembersDeactivateBaseArg>, V::Error> {
17153        let mut field_user = None;
17154        let mut nothing = true;
17155        while let Some(key) = map.next_key::<&str>()? {
17156            nothing = false;
17157            match key {
17158                "user" => {
17159                    if field_user.is_some() {
17160                        return Err(::serde::de::Error::duplicate_field("user"));
17161                    }
17162                    field_user = Some(map.next_value()?);
17163                }
17164                _ => {
17165                    // unknown field allowed and ignored
17166                    map.next_value::<::serde_json::Value>()?;
17167                }
17168            }
17169        }
17170        if optional && nothing {
17171            return Ok(None);
17172        }
17173        let result = MembersDeactivateBaseArg {
17174            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
17175        };
17176        Ok(Some(result))
17177    }
17178
17179    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17180        &self,
17181        s: &mut S::SerializeStruct,
17182    ) -> Result<(), S::Error> {
17183        use serde::ser::SerializeStruct;
17184        s.serialize_field("user", &self.user)?;
17185        Ok(())
17186    }
17187}
17188
17189impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateBaseArg {
17190    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17191        // struct deserializer
17192        use serde::de::{MapAccess, Visitor};
17193        struct StructVisitor;
17194        impl<'de> Visitor<'de> for StructVisitor {
17195            type Value = MembersDeactivateBaseArg;
17196            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17197                f.write_str("a MembersDeactivateBaseArg struct")
17198            }
17199            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17200                MembersDeactivateBaseArg::internal_deserialize(map)
17201            }
17202        }
17203        deserializer.deserialize_struct("MembersDeactivateBaseArg", MEMBERS_DEACTIVATE_BASE_ARG_FIELDS, StructVisitor)
17204    }
17205}
17206
17207impl ::serde::ser::Serialize for MembersDeactivateBaseArg {
17208    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17209        // struct serializer
17210        use serde::ser::SerializeStruct;
17211        let mut s = serializer.serialize_struct("MembersDeactivateBaseArg", 1)?;
17212        self.internal_serialize::<S>(&mut s)?;
17213        s.end()
17214    }
17215}
17216
17217#[derive(Debug, Clone, PartialEq, Eq)]
17218#[non_exhaustive] // variants may be added in the future
17219pub enum MembersDeactivateError {
17220    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
17221    /// this team.
17222    UserNotFound,
17223    /// The user is not a member of the team.
17224    UserNotInTeam,
17225    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17226    /// typically indicates that this SDK version is out of date.
17227    Other,
17228}
17229
17230impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateError {
17231    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17232        // union deserializer
17233        use serde::de::{self, MapAccess, Visitor};
17234        struct EnumVisitor;
17235        impl<'de> Visitor<'de> for EnumVisitor {
17236            type Value = MembersDeactivateError;
17237            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17238                f.write_str("a MembersDeactivateError structure")
17239            }
17240            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17241                let tag: &str = match map.next_key()? {
17242                    Some(".tag") => map.next_value()?,
17243                    _ => return Err(de::Error::missing_field(".tag"))
17244                };
17245                let value = match tag {
17246                    "user_not_found" => MembersDeactivateError::UserNotFound,
17247                    "user_not_in_team" => MembersDeactivateError::UserNotInTeam,
17248                    _ => MembersDeactivateError::Other,
17249                };
17250                crate::eat_json_fields(&mut map)?;
17251                Ok(value)
17252            }
17253        }
17254        const VARIANTS: &[&str] = &["user_not_found",
17255                                    "user_not_in_team",
17256                                    "other"];
17257        deserializer.deserialize_struct("MembersDeactivateError", VARIANTS, EnumVisitor)
17258    }
17259}
17260
17261impl ::serde::ser::Serialize for MembersDeactivateError {
17262    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17263        // union serializer
17264        use serde::ser::SerializeStruct;
17265        match self {
17266            MembersDeactivateError::UserNotFound => {
17267                // unit
17268                let mut s = serializer.serialize_struct("MembersDeactivateError", 1)?;
17269                s.serialize_field(".tag", "user_not_found")?;
17270                s.end()
17271            }
17272            MembersDeactivateError::UserNotInTeam => {
17273                // unit
17274                let mut s = serializer.serialize_struct("MembersDeactivateError", 1)?;
17275                s.serialize_field(".tag", "user_not_in_team")?;
17276                s.end()
17277            }
17278            MembersDeactivateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17279        }
17280    }
17281}
17282
17283impl ::std::error::Error for MembersDeactivateError {
17284}
17285
17286impl ::std::fmt::Display for MembersDeactivateError {
17287    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17288        match self {
17289            MembersDeactivateError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
17290            MembersDeactivateError::UserNotInTeam => f.write_str("The user is not a member of the team."),
17291            _ => write!(f, "{:?}", *self),
17292        }
17293    }
17294}
17295
17296// union extends UserSelectorError
17297impl From<UserSelectorError> for MembersDeactivateError {
17298    fn from(parent: UserSelectorError) -> Self {
17299        match parent {
17300            UserSelectorError::UserNotFound => MembersDeactivateError::UserNotFound,
17301        }
17302    }
17303}
17304#[derive(Debug, Clone, PartialEq, Eq)]
17305#[non_exhaustive] // variants may be added in the future
17306pub enum MembersDeleteFormerMemberFilesError {
17307    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
17308    /// this team.
17309    UserNotFound,
17310    /// The user is not a member of the team.
17311    UserNotInTeam,
17312    /// Cannot permanently delete files while it's being transferred.
17313    TransferInProgress,
17314    /// Cannot permanently delete files that have already been transferred.
17315    AlreadyTransferred,
17316    /// Cannot permanently delete files that have already been transferred or deleted.
17317    AlreadyTransferredOrDeleted,
17318    /// User has not been removed from the team.
17319    UserNotRemoved,
17320    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17321    /// typically indicates that this SDK version is out of date.
17322    Other,
17323}
17324
17325impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteFormerMemberFilesError {
17326    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17327        // union deserializer
17328        use serde::de::{self, MapAccess, Visitor};
17329        struct EnumVisitor;
17330        impl<'de> Visitor<'de> for EnumVisitor {
17331            type Value = MembersDeleteFormerMemberFilesError;
17332            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17333                f.write_str("a MembersDeleteFormerMemberFilesError structure")
17334            }
17335            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17336                let tag: &str = match map.next_key()? {
17337                    Some(".tag") => map.next_value()?,
17338                    _ => return Err(de::Error::missing_field(".tag"))
17339                };
17340                let value = match tag {
17341                    "user_not_found" => MembersDeleteFormerMemberFilesError::UserNotFound,
17342                    "user_not_in_team" => MembersDeleteFormerMemberFilesError::UserNotInTeam,
17343                    "transfer_in_progress" => MembersDeleteFormerMemberFilesError::TransferInProgress,
17344                    "already_transferred" => MembersDeleteFormerMemberFilesError::AlreadyTransferred,
17345                    "already_transferred_or_deleted" => MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted,
17346                    "user_not_removed" => MembersDeleteFormerMemberFilesError::UserNotRemoved,
17347                    _ => MembersDeleteFormerMemberFilesError::Other,
17348                };
17349                crate::eat_json_fields(&mut map)?;
17350                Ok(value)
17351            }
17352        }
17353        const VARIANTS: &[&str] = &["user_not_found",
17354                                    "user_not_in_team",
17355                                    "other",
17356                                    "transfer_in_progress",
17357                                    "already_transferred",
17358                                    "already_transferred_or_deleted",
17359                                    "user_not_removed"];
17360        deserializer.deserialize_struct("MembersDeleteFormerMemberFilesError", VARIANTS, EnumVisitor)
17361    }
17362}
17363
17364impl ::serde::ser::Serialize for MembersDeleteFormerMemberFilesError {
17365    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17366        // union serializer
17367        use serde::ser::SerializeStruct;
17368        match self {
17369            MembersDeleteFormerMemberFilesError::UserNotFound => {
17370                // unit
17371                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
17372                s.serialize_field(".tag", "user_not_found")?;
17373                s.end()
17374            }
17375            MembersDeleteFormerMemberFilesError::UserNotInTeam => {
17376                // unit
17377                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
17378                s.serialize_field(".tag", "user_not_in_team")?;
17379                s.end()
17380            }
17381            MembersDeleteFormerMemberFilesError::TransferInProgress => {
17382                // unit
17383                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
17384                s.serialize_field(".tag", "transfer_in_progress")?;
17385                s.end()
17386            }
17387            MembersDeleteFormerMemberFilesError::AlreadyTransferred => {
17388                // unit
17389                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
17390                s.serialize_field(".tag", "already_transferred")?;
17391                s.end()
17392            }
17393            MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted => {
17394                // unit
17395                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
17396                s.serialize_field(".tag", "already_transferred_or_deleted")?;
17397                s.end()
17398            }
17399            MembersDeleteFormerMemberFilesError::UserNotRemoved => {
17400                // unit
17401                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
17402                s.serialize_field(".tag", "user_not_removed")?;
17403                s.end()
17404            }
17405            MembersDeleteFormerMemberFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17406        }
17407    }
17408}
17409
17410impl ::std::error::Error for MembersDeleteFormerMemberFilesError {
17411}
17412
17413impl ::std::fmt::Display for MembersDeleteFormerMemberFilesError {
17414    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17415        match self {
17416            MembersDeleteFormerMemberFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
17417            MembersDeleteFormerMemberFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
17418            MembersDeleteFormerMemberFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
17419            MembersDeleteFormerMemberFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
17420            MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
17421            MembersDeleteFormerMemberFilesError::UserNotRemoved => f.write_str("User has not been removed from the team."),
17422            _ => write!(f, "{:?}", *self),
17423        }
17424    }
17425}
17426
17427// union extends MembersPermanentlyDeleteFilesError
17428impl From<MembersPermanentlyDeleteFilesError> for MembersDeleteFormerMemberFilesError {
17429    fn from(parent: MembersPermanentlyDeleteFilesError) -> Self {
17430        match parent {
17431            MembersPermanentlyDeleteFilesError::UserNotFound => MembersDeleteFormerMemberFilesError::UserNotFound,
17432            MembersPermanentlyDeleteFilesError::UserNotInTeam => MembersDeleteFormerMemberFilesError::UserNotInTeam,
17433            MembersPermanentlyDeleteFilesError::Other => MembersDeleteFormerMemberFilesError::Other,
17434            MembersPermanentlyDeleteFilesError::TransferInProgress => MembersDeleteFormerMemberFilesError::TransferInProgress,
17435            MembersPermanentlyDeleteFilesError::AlreadyTransferred => MembersDeleteFormerMemberFilesError::AlreadyTransferred,
17436            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted,
17437        }
17438    }
17439}
17440#[derive(Debug, Clone, PartialEq, Eq)]
17441#[non_exhaustive] // structs may have more fields added in the future.
17442pub struct MembersDeleteProfilePhotoArg {
17443    /// Identity of the user whose profile photo will be deleted.
17444    pub user: UserSelectorArg,
17445}
17446
17447impl MembersDeleteProfilePhotoArg {
17448    pub fn new(user: UserSelectorArg) -> Self {
17449        MembersDeleteProfilePhotoArg {
17450            user,
17451        }
17452    }
17453}
17454
17455const MEMBERS_DELETE_PROFILE_PHOTO_ARG_FIELDS: &[&str] = &["user"];
17456impl MembersDeleteProfilePhotoArg {
17457    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17458        map: V,
17459    ) -> Result<MembersDeleteProfilePhotoArg, V::Error> {
17460        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17461    }
17462
17463    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17464        mut map: V,
17465        optional: bool,
17466    ) -> Result<Option<MembersDeleteProfilePhotoArg>, V::Error> {
17467        let mut field_user = None;
17468        let mut nothing = true;
17469        while let Some(key) = map.next_key::<&str>()? {
17470            nothing = false;
17471            match key {
17472                "user" => {
17473                    if field_user.is_some() {
17474                        return Err(::serde::de::Error::duplicate_field("user"));
17475                    }
17476                    field_user = Some(map.next_value()?);
17477                }
17478                _ => {
17479                    // unknown field allowed and ignored
17480                    map.next_value::<::serde_json::Value>()?;
17481                }
17482            }
17483        }
17484        if optional && nothing {
17485            return Ok(None);
17486        }
17487        let result = MembersDeleteProfilePhotoArg {
17488            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
17489        };
17490        Ok(Some(result))
17491    }
17492
17493    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17494        &self,
17495        s: &mut S::SerializeStruct,
17496    ) -> Result<(), S::Error> {
17497        use serde::ser::SerializeStruct;
17498        s.serialize_field("user", &self.user)?;
17499        Ok(())
17500    }
17501}
17502
17503impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteProfilePhotoArg {
17504    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17505        // struct deserializer
17506        use serde::de::{MapAccess, Visitor};
17507        struct StructVisitor;
17508        impl<'de> Visitor<'de> for StructVisitor {
17509            type Value = MembersDeleteProfilePhotoArg;
17510            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17511                f.write_str("a MembersDeleteProfilePhotoArg struct")
17512            }
17513            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17514                MembersDeleteProfilePhotoArg::internal_deserialize(map)
17515            }
17516        }
17517        deserializer.deserialize_struct("MembersDeleteProfilePhotoArg", MEMBERS_DELETE_PROFILE_PHOTO_ARG_FIELDS, StructVisitor)
17518    }
17519}
17520
17521impl ::serde::ser::Serialize for MembersDeleteProfilePhotoArg {
17522    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17523        // struct serializer
17524        use serde::ser::SerializeStruct;
17525        let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoArg", 1)?;
17526        self.internal_serialize::<S>(&mut s)?;
17527        s.end()
17528    }
17529}
17530
17531#[derive(Debug, Clone, PartialEq, Eq)]
17532#[non_exhaustive] // variants may be added in the future
17533pub enum MembersDeleteProfilePhotoError {
17534    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
17535    /// this team.
17536    UserNotFound,
17537    /// The user is not a member of the team.
17538    UserNotInTeam,
17539    /// Modifying deleted users is not allowed.
17540    SetProfileDisallowed,
17541    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17542    /// typically indicates that this SDK version is out of date.
17543    Other,
17544}
17545
17546impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteProfilePhotoError {
17547    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17548        // union deserializer
17549        use serde::de::{self, MapAccess, Visitor};
17550        struct EnumVisitor;
17551        impl<'de> Visitor<'de> for EnumVisitor {
17552            type Value = MembersDeleteProfilePhotoError;
17553            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17554                f.write_str("a MembersDeleteProfilePhotoError structure")
17555            }
17556            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17557                let tag: &str = match map.next_key()? {
17558                    Some(".tag") => map.next_value()?,
17559                    _ => return Err(de::Error::missing_field(".tag"))
17560                };
17561                let value = match tag {
17562                    "user_not_found" => MembersDeleteProfilePhotoError::UserNotFound,
17563                    "user_not_in_team" => MembersDeleteProfilePhotoError::UserNotInTeam,
17564                    "set_profile_disallowed" => MembersDeleteProfilePhotoError::SetProfileDisallowed,
17565                    _ => MembersDeleteProfilePhotoError::Other,
17566                };
17567                crate::eat_json_fields(&mut map)?;
17568                Ok(value)
17569            }
17570        }
17571        const VARIANTS: &[&str] = &["user_not_found",
17572                                    "user_not_in_team",
17573                                    "set_profile_disallowed",
17574                                    "other"];
17575        deserializer.deserialize_struct("MembersDeleteProfilePhotoError", VARIANTS, EnumVisitor)
17576    }
17577}
17578
17579impl ::serde::ser::Serialize for MembersDeleteProfilePhotoError {
17580    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17581        // union serializer
17582        use serde::ser::SerializeStruct;
17583        match self {
17584            MembersDeleteProfilePhotoError::UserNotFound => {
17585                // unit
17586                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
17587                s.serialize_field(".tag", "user_not_found")?;
17588                s.end()
17589            }
17590            MembersDeleteProfilePhotoError::UserNotInTeam => {
17591                // unit
17592                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
17593                s.serialize_field(".tag", "user_not_in_team")?;
17594                s.end()
17595            }
17596            MembersDeleteProfilePhotoError::SetProfileDisallowed => {
17597                // unit
17598                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
17599                s.serialize_field(".tag", "set_profile_disallowed")?;
17600                s.end()
17601            }
17602            MembersDeleteProfilePhotoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17603        }
17604    }
17605}
17606
17607impl ::std::error::Error for MembersDeleteProfilePhotoError {
17608}
17609
17610impl ::std::fmt::Display for MembersDeleteProfilePhotoError {
17611    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17612        match self {
17613            MembersDeleteProfilePhotoError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
17614            MembersDeleteProfilePhotoError::UserNotInTeam => f.write_str("The user is not a member of the team."),
17615            MembersDeleteProfilePhotoError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
17616            _ => write!(f, "{:?}", *self),
17617        }
17618    }
17619}
17620
17621// union extends MemberSelectorError
17622impl From<MemberSelectorError> for MembersDeleteProfilePhotoError {
17623    fn from(parent: MemberSelectorError) -> Self {
17624        match parent {
17625            MemberSelectorError::UserNotFound => MembersDeleteProfilePhotoError::UserNotFound,
17626            MemberSelectorError::UserNotInTeam => MembersDeleteProfilePhotoError::UserNotInTeam,
17627        }
17628    }
17629}
17630/// Exactly one of team_member_id, email, or external_id must be provided to identify a former team
17631/// member.
17632#[derive(Debug, Clone, PartialEq, Eq)]
17633#[non_exhaustive] // structs may have more fields added in the future.
17634pub struct MembersFormerMemberArg {
17635    /// Identity of user whose files will be permanently deleted.
17636    pub user: UserSelectorArg,
17637}
17638
17639impl MembersFormerMemberArg {
17640    pub fn new(user: UserSelectorArg) -> Self {
17641        MembersFormerMemberArg {
17642            user,
17643        }
17644    }
17645}
17646
17647const MEMBERS_FORMER_MEMBER_ARG_FIELDS: &[&str] = &["user"];
17648impl MembersFormerMemberArg {
17649    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17650        map: V,
17651    ) -> Result<MembersFormerMemberArg, V::Error> {
17652        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17653    }
17654
17655    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17656        mut map: V,
17657        optional: bool,
17658    ) -> Result<Option<MembersFormerMemberArg>, V::Error> {
17659        let mut field_user = None;
17660        let mut nothing = true;
17661        while let Some(key) = map.next_key::<&str>()? {
17662            nothing = false;
17663            match key {
17664                "user" => {
17665                    if field_user.is_some() {
17666                        return Err(::serde::de::Error::duplicate_field("user"));
17667                    }
17668                    field_user = Some(map.next_value()?);
17669                }
17670                _ => {
17671                    // unknown field allowed and ignored
17672                    map.next_value::<::serde_json::Value>()?;
17673                }
17674            }
17675        }
17676        if optional && nothing {
17677            return Ok(None);
17678        }
17679        let result = MembersFormerMemberArg {
17680            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
17681        };
17682        Ok(Some(result))
17683    }
17684
17685    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17686        &self,
17687        s: &mut S::SerializeStruct,
17688    ) -> Result<(), S::Error> {
17689        use serde::ser::SerializeStruct;
17690        s.serialize_field("user", &self.user)?;
17691        Ok(())
17692    }
17693}
17694
17695impl<'de> ::serde::de::Deserialize<'de> for MembersFormerMemberArg {
17696    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17697        // struct deserializer
17698        use serde::de::{MapAccess, Visitor};
17699        struct StructVisitor;
17700        impl<'de> Visitor<'de> for StructVisitor {
17701            type Value = MembersFormerMemberArg;
17702            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17703                f.write_str("a MembersFormerMemberArg struct")
17704            }
17705            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17706                MembersFormerMemberArg::internal_deserialize(map)
17707            }
17708        }
17709        deserializer.deserialize_struct("MembersFormerMemberArg", MEMBERS_FORMER_MEMBER_ARG_FIELDS, StructVisitor)
17710    }
17711}
17712
17713impl ::serde::ser::Serialize for MembersFormerMemberArg {
17714    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17715        // struct serializer
17716        use serde::ser::SerializeStruct;
17717        let mut s = serializer.serialize_struct("MembersFormerMemberArg", 1)?;
17718        self.internal_serialize::<S>(&mut s)?;
17719        s.end()
17720    }
17721}
17722
17723/// Available TeamMemberRole for the connected team. To be used with
17724/// [`members_set_admin_permissions_v2()`](crate::team::members_set_admin_permissions_v2).
17725#[derive(Debug, Clone, PartialEq, Eq)]
17726#[non_exhaustive] // structs may have more fields added in the future.
17727pub struct MembersGetAvailableTeamMemberRolesResult {
17728    /// Available roles.
17729    pub roles: Vec<TeamMemberRole>,
17730}
17731
17732impl MembersGetAvailableTeamMemberRolesResult {
17733    pub fn new(roles: Vec<TeamMemberRole>) -> Self {
17734        MembersGetAvailableTeamMemberRolesResult {
17735            roles,
17736        }
17737    }
17738}
17739
17740const MEMBERS_GET_AVAILABLE_TEAM_MEMBER_ROLES_RESULT_FIELDS: &[&str] = &["roles"];
17741impl MembersGetAvailableTeamMemberRolesResult {
17742    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17743        map: V,
17744    ) -> Result<MembersGetAvailableTeamMemberRolesResult, V::Error> {
17745        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17746    }
17747
17748    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17749        mut map: V,
17750        optional: bool,
17751    ) -> Result<Option<MembersGetAvailableTeamMemberRolesResult>, V::Error> {
17752        let mut field_roles = None;
17753        let mut nothing = true;
17754        while let Some(key) = map.next_key::<&str>()? {
17755            nothing = false;
17756            match key {
17757                "roles" => {
17758                    if field_roles.is_some() {
17759                        return Err(::serde::de::Error::duplicate_field("roles"));
17760                    }
17761                    field_roles = Some(map.next_value()?);
17762                }
17763                _ => {
17764                    // unknown field allowed and ignored
17765                    map.next_value::<::serde_json::Value>()?;
17766                }
17767            }
17768        }
17769        if optional && nothing {
17770            return Ok(None);
17771        }
17772        let result = MembersGetAvailableTeamMemberRolesResult {
17773            roles: field_roles.ok_or_else(|| ::serde::de::Error::missing_field("roles"))?,
17774        };
17775        Ok(Some(result))
17776    }
17777
17778    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17779        &self,
17780        s: &mut S::SerializeStruct,
17781    ) -> Result<(), S::Error> {
17782        use serde::ser::SerializeStruct;
17783        s.serialize_field("roles", &self.roles)?;
17784        Ok(())
17785    }
17786}
17787
17788impl<'de> ::serde::de::Deserialize<'de> for MembersGetAvailableTeamMemberRolesResult {
17789    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17790        // struct deserializer
17791        use serde::de::{MapAccess, Visitor};
17792        struct StructVisitor;
17793        impl<'de> Visitor<'de> for StructVisitor {
17794            type Value = MembersGetAvailableTeamMemberRolesResult;
17795            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17796                f.write_str("a MembersGetAvailableTeamMemberRolesResult struct")
17797            }
17798            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17799                MembersGetAvailableTeamMemberRolesResult::internal_deserialize(map)
17800            }
17801        }
17802        deserializer.deserialize_struct("MembersGetAvailableTeamMemberRolesResult", MEMBERS_GET_AVAILABLE_TEAM_MEMBER_ROLES_RESULT_FIELDS, StructVisitor)
17803    }
17804}
17805
17806impl ::serde::ser::Serialize for MembersGetAvailableTeamMemberRolesResult {
17807    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17808        // struct serializer
17809        use serde::ser::SerializeStruct;
17810        let mut s = serializer.serialize_struct("MembersGetAvailableTeamMemberRolesResult", 1)?;
17811        self.internal_serialize::<S>(&mut s)?;
17812        s.end()
17813    }
17814}
17815
17816#[derive(Debug, Clone, PartialEq, Eq)]
17817#[non_exhaustive] // structs may have more fields added in the future.
17818pub struct MembersGetInfoArgs {
17819    /// List of team members.
17820    pub members: Vec<UserSelectorArg>,
17821}
17822
17823impl MembersGetInfoArgs {
17824    pub fn new(members: Vec<UserSelectorArg>) -> Self {
17825        MembersGetInfoArgs {
17826            members,
17827        }
17828    }
17829}
17830
17831const MEMBERS_GET_INFO_ARGS_FIELDS: &[&str] = &["members"];
17832impl MembersGetInfoArgs {
17833    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17834        map: V,
17835    ) -> Result<MembersGetInfoArgs, V::Error> {
17836        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17837    }
17838
17839    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17840        mut map: V,
17841        optional: bool,
17842    ) -> Result<Option<MembersGetInfoArgs>, V::Error> {
17843        let mut field_members = None;
17844        let mut nothing = true;
17845        while let Some(key) = map.next_key::<&str>()? {
17846            nothing = false;
17847            match key {
17848                "members" => {
17849                    if field_members.is_some() {
17850                        return Err(::serde::de::Error::duplicate_field("members"));
17851                    }
17852                    field_members = Some(map.next_value()?);
17853                }
17854                _ => {
17855                    // unknown field allowed and ignored
17856                    map.next_value::<::serde_json::Value>()?;
17857                }
17858            }
17859        }
17860        if optional && nothing {
17861            return Ok(None);
17862        }
17863        let result = MembersGetInfoArgs {
17864            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
17865        };
17866        Ok(Some(result))
17867    }
17868
17869    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17870        &self,
17871        s: &mut S::SerializeStruct,
17872    ) -> Result<(), S::Error> {
17873        use serde::ser::SerializeStruct;
17874        s.serialize_field("members", &self.members)?;
17875        Ok(())
17876    }
17877}
17878
17879impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoArgs {
17880    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17881        // struct deserializer
17882        use serde::de::{MapAccess, Visitor};
17883        struct StructVisitor;
17884        impl<'de> Visitor<'de> for StructVisitor {
17885            type Value = MembersGetInfoArgs;
17886            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17887                f.write_str("a MembersGetInfoArgs struct")
17888            }
17889            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17890                MembersGetInfoArgs::internal_deserialize(map)
17891            }
17892        }
17893        deserializer.deserialize_struct("MembersGetInfoArgs", MEMBERS_GET_INFO_ARGS_FIELDS, StructVisitor)
17894    }
17895}
17896
17897impl ::serde::ser::Serialize for MembersGetInfoArgs {
17898    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17899        // struct serializer
17900        use serde::ser::SerializeStruct;
17901        let mut s = serializer.serialize_struct("MembersGetInfoArgs", 1)?;
17902        self.internal_serialize::<S>(&mut s)?;
17903        s.end()
17904    }
17905}
17906
17907
17908#[derive(Debug, Clone, PartialEq, Eq)]
17909#[non_exhaustive] // variants may be added in the future
17910pub enum MembersGetInfoError {
17911    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17912    /// typically indicates that this SDK version is out of date.
17913    Other,
17914}
17915
17916impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoError {
17917    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17918        // union deserializer
17919        use serde::de::{self, MapAccess, Visitor};
17920        struct EnumVisitor;
17921        impl<'de> Visitor<'de> for EnumVisitor {
17922            type Value = MembersGetInfoError;
17923            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17924                f.write_str("a MembersGetInfoError structure")
17925            }
17926            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17927                let tag: &str = match map.next_key()? {
17928                    Some(".tag") => map.next_value()?,
17929                    _ => return Err(de::Error::missing_field(".tag"))
17930                };
17931                // open enum with no defined variants
17932                let _ = tag;
17933                crate::eat_json_fields(&mut map)?;
17934                Ok(MembersGetInfoError::Other)
17935            }
17936        }
17937        const VARIANTS: &[&str] = &["other"];
17938        deserializer.deserialize_struct("MembersGetInfoError", VARIANTS, EnumVisitor)
17939    }
17940}
17941
17942impl ::serde::ser::Serialize for MembersGetInfoError {
17943    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17944        // union serializer
17945        #![allow(unused_variables)]
17946        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
17947    }
17948}
17949
17950impl ::std::error::Error for MembersGetInfoError {
17951}
17952
17953impl ::std::fmt::Display for MembersGetInfoError {
17954    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17955        write!(f, "{:?}", *self)
17956    }
17957}
17958
17959/// Describes a result obtained for a single user whose id was specified in the parameter of
17960/// [`members_get_info()`](crate::team::members_get_info).
17961#[derive(Debug, Clone, PartialEq, Eq)]
17962pub enum MembersGetInfoItem {
17963    /// An ID that was provided as a parameter to
17964    /// [`members_get_info()`](crate::team::members_get_info) or
17965    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
17966    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
17967    /// on how the method was called.
17968    IdNotFound(String),
17969    /// Info about a team member.
17970    MemberInfo(TeamMemberInfo),
17971}
17972
17973impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItem {
17974    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17975        // union deserializer
17976        use serde::de::{self, MapAccess, Visitor};
17977        struct EnumVisitor;
17978        impl<'de> Visitor<'de> for EnumVisitor {
17979            type Value = MembersGetInfoItem;
17980            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17981                f.write_str("a MembersGetInfoItem structure")
17982            }
17983            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17984                let tag: &str = match map.next_key()? {
17985                    Some(".tag") => map.next_value()?,
17986                    _ => return Err(de::Error::missing_field(".tag"))
17987                };
17988                let value = match tag {
17989                    "id_not_found" => {
17990                        match map.next_key()? {
17991                            Some("id_not_found") => MembersGetInfoItem::IdNotFound(map.next_value()?),
17992                            None => return Err(de::Error::missing_field("id_not_found")),
17993                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
17994                        }
17995                    }
17996                    "member_info" => MembersGetInfoItem::MemberInfo(TeamMemberInfo::internal_deserialize(&mut map)?),
17997                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
17998                };
17999                crate::eat_json_fields(&mut map)?;
18000                Ok(value)
18001            }
18002        }
18003        const VARIANTS: &[&str] = &["id_not_found",
18004                                    "member_info"];
18005        deserializer.deserialize_struct("MembersGetInfoItem", VARIANTS, EnumVisitor)
18006    }
18007}
18008
18009impl ::serde::ser::Serialize for MembersGetInfoItem {
18010    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18011        // union serializer
18012        use serde::ser::SerializeStruct;
18013        match self {
18014            MembersGetInfoItem::IdNotFound(x) => {
18015                // primitive
18016                let mut s = serializer.serialize_struct("MembersGetInfoItem", 2)?;
18017                s.serialize_field(".tag", "id_not_found")?;
18018                s.serialize_field("id_not_found", x)?;
18019                s.end()
18020            }
18021            MembersGetInfoItem::MemberInfo(x) => {
18022                // struct
18023                let mut s = serializer.serialize_struct("MembersGetInfoItem", 3)?;
18024                s.serialize_field(".tag", "member_info")?;
18025                x.internal_serialize::<S>(&mut s)?;
18026                s.end()
18027            }
18028        }
18029    }
18030}
18031
18032// union extends MembersGetInfoItemBase
18033impl From<MembersGetInfoItemBase> for MembersGetInfoItem {
18034    fn from(parent: MembersGetInfoItemBase) -> Self {
18035        match parent {
18036            MembersGetInfoItemBase::IdNotFound(x) => MembersGetInfoItem::IdNotFound(x),
18037        }
18038    }
18039}
18040#[derive(Debug, Clone, PartialEq, Eq)]
18041pub enum MembersGetInfoItemBase {
18042    /// An ID that was provided as a parameter to
18043    /// [`members_get_info()`](crate::team::members_get_info) or
18044    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
18045    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
18046    /// on how the method was called.
18047    IdNotFound(String),
18048}
18049
18050impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItemBase {
18051    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18052        // union deserializer
18053        use serde::de::{self, MapAccess, Visitor};
18054        struct EnumVisitor;
18055        impl<'de> Visitor<'de> for EnumVisitor {
18056            type Value = MembersGetInfoItemBase;
18057            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18058                f.write_str("a MembersGetInfoItemBase structure")
18059            }
18060            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18061                let tag: &str = match map.next_key()? {
18062                    Some(".tag") => map.next_value()?,
18063                    _ => return Err(de::Error::missing_field(".tag"))
18064                };
18065                let value = match tag {
18066                    "id_not_found" => {
18067                        match map.next_key()? {
18068                            Some("id_not_found") => MembersGetInfoItemBase::IdNotFound(map.next_value()?),
18069                            None => return Err(de::Error::missing_field("id_not_found")),
18070                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
18071                        }
18072                    }
18073                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
18074                };
18075                crate::eat_json_fields(&mut map)?;
18076                Ok(value)
18077            }
18078        }
18079        const VARIANTS: &[&str] = &["id_not_found"];
18080        deserializer.deserialize_struct("MembersGetInfoItemBase", VARIANTS, EnumVisitor)
18081    }
18082}
18083
18084impl ::serde::ser::Serialize for MembersGetInfoItemBase {
18085    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18086        // union serializer
18087        use serde::ser::SerializeStruct;
18088        match self {
18089            MembersGetInfoItemBase::IdNotFound(x) => {
18090                // primitive
18091                let mut s = serializer.serialize_struct("MembersGetInfoItemBase", 2)?;
18092                s.serialize_field(".tag", "id_not_found")?;
18093                s.serialize_field("id_not_found", x)?;
18094                s.end()
18095            }
18096        }
18097    }
18098}
18099
18100/// Describes a result obtained for a single user whose id was specified in the parameter of
18101/// [`members_get_info_v2()`](crate::team::members_get_info_v2).
18102#[derive(Debug, Clone, PartialEq, Eq)]
18103#[non_exhaustive] // variants may be added in the future
18104pub enum MembersGetInfoItemV2 {
18105    /// An ID that was provided as a parameter to
18106    /// [`members_get_info()`](crate::team::members_get_info) or
18107    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
18108    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
18109    /// on how the method was called.
18110    IdNotFound(String),
18111    /// Info about a team member.
18112    MemberInfo(TeamMemberInfoV2),
18113    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18114    /// typically indicates that this SDK version is out of date.
18115    Other,
18116}
18117
18118impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItemV2 {
18119    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18120        // union deserializer
18121        use serde::de::{self, MapAccess, Visitor};
18122        struct EnumVisitor;
18123        impl<'de> Visitor<'de> for EnumVisitor {
18124            type Value = MembersGetInfoItemV2;
18125            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18126                f.write_str("a MembersGetInfoItemV2 structure")
18127            }
18128            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18129                let tag: &str = match map.next_key()? {
18130                    Some(".tag") => map.next_value()?,
18131                    _ => return Err(de::Error::missing_field(".tag"))
18132                };
18133                let value = match tag {
18134                    "id_not_found" => {
18135                        match map.next_key()? {
18136                            Some("id_not_found") => MembersGetInfoItemV2::IdNotFound(map.next_value()?),
18137                            None => return Err(de::Error::missing_field("id_not_found")),
18138                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
18139                        }
18140                    }
18141                    "member_info" => MembersGetInfoItemV2::MemberInfo(TeamMemberInfoV2::internal_deserialize(&mut map)?),
18142                    _ => MembersGetInfoItemV2::Other,
18143                };
18144                crate::eat_json_fields(&mut map)?;
18145                Ok(value)
18146            }
18147        }
18148        const VARIANTS: &[&str] = &["id_not_found",
18149                                    "member_info",
18150                                    "other"];
18151        deserializer.deserialize_struct("MembersGetInfoItemV2", VARIANTS, EnumVisitor)
18152    }
18153}
18154
18155impl ::serde::ser::Serialize for MembersGetInfoItemV2 {
18156    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18157        // union serializer
18158        use serde::ser::SerializeStruct;
18159        match self {
18160            MembersGetInfoItemV2::IdNotFound(x) => {
18161                // primitive
18162                let mut s = serializer.serialize_struct("MembersGetInfoItemV2", 2)?;
18163                s.serialize_field(".tag", "id_not_found")?;
18164                s.serialize_field("id_not_found", x)?;
18165                s.end()
18166            }
18167            MembersGetInfoItemV2::MemberInfo(x) => {
18168                // struct
18169                let mut s = serializer.serialize_struct("MembersGetInfoItemV2", 3)?;
18170                s.serialize_field(".tag", "member_info")?;
18171                x.internal_serialize::<S>(&mut s)?;
18172                s.end()
18173            }
18174            MembersGetInfoItemV2::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18175        }
18176    }
18177}
18178
18179// union extends MembersGetInfoItemBase
18180impl From<MembersGetInfoItemBase> for MembersGetInfoItemV2 {
18181    fn from(parent: MembersGetInfoItemBase) -> Self {
18182        match parent {
18183            MembersGetInfoItemBase::IdNotFound(x) => MembersGetInfoItemV2::IdNotFound(x),
18184        }
18185    }
18186}
18187#[derive(Debug, Clone, PartialEq, Eq)]
18188#[non_exhaustive] // structs may have more fields added in the future.
18189pub struct MembersGetInfoV2Arg {
18190    /// List of team members.
18191    pub members: Vec<UserSelectorArg>,
18192}
18193
18194impl MembersGetInfoV2Arg {
18195    pub fn new(members: Vec<UserSelectorArg>) -> Self {
18196        MembersGetInfoV2Arg {
18197            members,
18198        }
18199    }
18200}
18201
18202const MEMBERS_GET_INFO_V2_ARG_FIELDS: &[&str] = &["members"];
18203impl MembersGetInfoV2Arg {
18204    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18205        map: V,
18206    ) -> Result<MembersGetInfoV2Arg, V::Error> {
18207        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18208    }
18209
18210    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18211        mut map: V,
18212        optional: bool,
18213    ) -> Result<Option<MembersGetInfoV2Arg>, V::Error> {
18214        let mut field_members = None;
18215        let mut nothing = true;
18216        while let Some(key) = map.next_key::<&str>()? {
18217            nothing = false;
18218            match key {
18219                "members" => {
18220                    if field_members.is_some() {
18221                        return Err(::serde::de::Error::duplicate_field("members"));
18222                    }
18223                    field_members = Some(map.next_value()?);
18224                }
18225                _ => {
18226                    // unknown field allowed and ignored
18227                    map.next_value::<::serde_json::Value>()?;
18228                }
18229            }
18230        }
18231        if optional && nothing {
18232            return Ok(None);
18233        }
18234        let result = MembersGetInfoV2Arg {
18235            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
18236        };
18237        Ok(Some(result))
18238    }
18239
18240    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18241        &self,
18242        s: &mut S::SerializeStruct,
18243    ) -> Result<(), S::Error> {
18244        use serde::ser::SerializeStruct;
18245        s.serialize_field("members", &self.members)?;
18246        Ok(())
18247    }
18248}
18249
18250impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoV2Arg {
18251    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18252        // struct deserializer
18253        use serde::de::{MapAccess, Visitor};
18254        struct StructVisitor;
18255        impl<'de> Visitor<'de> for StructVisitor {
18256            type Value = MembersGetInfoV2Arg;
18257            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18258                f.write_str("a MembersGetInfoV2Arg struct")
18259            }
18260            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18261                MembersGetInfoV2Arg::internal_deserialize(map)
18262            }
18263        }
18264        deserializer.deserialize_struct("MembersGetInfoV2Arg", MEMBERS_GET_INFO_V2_ARG_FIELDS, StructVisitor)
18265    }
18266}
18267
18268impl ::serde::ser::Serialize for MembersGetInfoV2Arg {
18269    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18270        // struct serializer
18271        use serde::ser::SerializeStruct;
18272        let mut s = serializer.serialize_struct("MembersGetInfoV2Arg", 1)?;
18273        self.internal_serialize::<S>(&mut s)?;
18274        s.end()
18275    }
18276}
18277
18278#[derive(Debug, Clone, PartialEq, Eq)]
18279#[non_exhaustive] // structs may have more fields added in the future.
18280pub struct MembersGetInfoV2Result {
18281    /// List of team members info.
18282    pub members_info: Vec<MembersGetInfoItemV2>,
18283}
18284
18285impl MembersGetInfoV2Result {
18286    pub fn new(members_info: Vec<MembersGetInfoItemV2>) -> Self {
18287        MembersGetInfoV2Result {
18288            members_info,
18289        }
18290    }
18291}
18292
18293const MEMBERS_GET_INFO_V2_RESULT_FIELDS: &[&str] = &["members_info"];
18294impl MembersGetInfoV2Result {
18295    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18296        map: V,
18297    ) -> Result<MembersGetInfoV2Result, V::Error> {
18298        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18299    }
18300
18301    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18302        mut map: V,
18303        optional: bool,
18304    ) -> Result<Option<MembersGetInfoV2Result>, V::Error> {
18305        let mut field_members_info = None;
18306        let mut nothing = true;
18307        while let Some(key) = map.next_key::<&str>()? {
18308            nothing = false;
18309            match key {
18310                "members_info" => {
18311                    if field_members_info.is_some() {
18312                        return Err(::serde::de::Error::duplicate_field("members_info"));
18313                    }
18314                    field_members_info = Some(map.next_value()?);
18315                }
18316                _ => {
18317                    // unknown field allowed and ignored
18318                    map.next_value::<::serde_json::Value>()?;
18319                }
18320            }
18321        }
18322        if optional && nothing {
18323            return Ok(None);
18324        }
18325        let result = MembersGetInfoV2Result {
18326            members_info: field_members_info.ok_or_else(|| ::serde::de::Error::missing_field("members_info"))?,
18327        };
18328        Ok(Some(result))
18329    }
18330
18331    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18332        &self,
18333        s: &mut S::SerializeStruct,
18334    ) -> Result<(), S::Error> {
18335        use serde::ser::SerializeStruct;
18336        s.serialize_field("members_info", &self.members_info)?;
18337        Ok(())
18338    }
18339}
18340
18341impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoV2Result {
18342    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18343        // struct deserializer
18344        use serde::de::{MapAccess, Visitor};
18345        struct StructVisitor;
18346        impl<'de> Visitor<'de> for StructVisitor {
18347            type Value = MembersGetInfoV2Result;
18348            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18349                f.write_str("a MembersGetInfoV2Result struct")
18350            }
18351            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18352                MembersGetInfoV2Result::internal_deserialize(map)
18353            }
18354        }
18355        deserializer.deserialize_struct("MembersGetInfoV2Result", MEMBERS_GET_INFO_V2_RESULT_FIELDS, StructVisitor)
18356    }
18357}
18358
18359impl ::serde::ser::Serialize for MembersGetInfoV2Result {
18360    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18361        // struct serializer
18362        use serde::ser::SerializeStruct;
18363        let mut s = serializer.serialize_struct("MembersGetInfoV2Result", 1)?;
18364        self.internal_serialize::<S>(&mut s)?;
18365        s.end()
18366    }
18367}
18368
18369#[derive(Debug, Clone, PartialEq, Eq)]
18370#[non_exhaustive] // structs may have more fields added in the future.
18371pub struct MembersInfo {
18372    /// Team member IDs of the users under this hold.
18373    pub team_member_ids: Vec<crate::types::team_common::TeamMemberId>,
18374    /// The number of permanently deleted users that were under this hold.
18375    pub permanently_deleted_users: u64,
18376}
18377
18378impl MembersInfo {
18379    pub fn new(
18380        team_member_ids: Vec<crate::types::team_common::TeamMemberId>,
18381        permanently_deleted_users: u64,
18382    ) -> Self {
18383        MembersInfo {
18384            team_member_ids,
18385            permanently_deleted_users,
18386        }
18387    }
18388}
18389
18390const MEMBERS_INFO_FIELDS: &[&str] = &["team_member_ids",
18391                                       "permanently_deleted_users"];
18392impl MembersInfo {
18393    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18394        map: V,
18395    ) -> Result<MembersInfo, V::Error> {
18396        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18397    }
18398
18399    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18400        mut map: V,
18401        optional: bool,
18402    ) -> Result<Option<MembersInfo>, V::Error> {
18403        let mut field_team_member_ids = None;
18404        let mut field_permanently_deleted_users = None;
18405        let mut nothing = true;
18406        while let Some(key) = map.next_key::<&str>()? {
18407            nothing = false;
18408            match key {
18409                "team_member_ids" => {
18410                    if field_team_member_ids.is_some() {
18411                        return Err(::serde::de::Error::duplicate_field("team_member_ids"));
18412                    }
18413                    field_team_member_ids = Some(map.next_value()?);
18414                }
18415                "permanently_deleted_users" => {
18416                    if field_permanently_deleted_users.is_some() {
18417                        return Err(::serde::de::Error::duplicate_field("permanently_deleted_users"));
18418                    }
18419                    field_permanently_deleted_users = Some(map.next_value()?);
18420                }
18421                _ => {
18422                    // unknown field allowed and ignored
18423                    map.next_value::<::serde_json::Value>()?;
18424                }
18425            }
18426        }
18427        if optional && nothing {
18428            return Ok(None);
18429        }
18430        let result = MembersInfo {
18431            team_member_ids: field_team_member_ids.ok_or_else(|| ::serde::de::Error::missing_field("team_member_ids"))?,
18432            permanently_deleted_users: field_permanently_deleted_users.ok_or_else(|| ::serde::de::Error::missing_field("permanently_deleted_users"))?,
18433        };
18434        Ok(Some(result))
18435    }
18436
18437    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18438        &self,
18439        s: &mut S::SerializeStruct,
18440    ) -> Result<(), S::Error> {
18441        use serde::ser::SerializeStruct;
18442        s.serialize_field("team_member_ids", &self.team_member_ids)?;
18443        s.serialize_field("permanently_deleted_users", &self.permanently_deleted_users)?;
18444        Ok(())
18445    }
18446}
18447
18448impl<'de> ::serde::de::Deserialize<'de> for MembersInfo {
18449    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18450        // struct deserializer
18451        use serde::de::{MapAccess, Visitor};
18452        struct StructVisitor;
18453        impl<'de> Visitor<'de> for StructVisitor {
18454            type Value = MembersInfo;
18455            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18456                f.write_str("a MembersInfo struct")
18457            }
18458            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18459                MembersInfo::internal_deserialize(map)
18460            }
18461        }
18462        deserializer.deserialize_struct("MembersInfo", MEMBERS_INFO_FIELDS, StructVisitor)
18463    }
18464}
18465
18466impl ::serde::ser::Serialize for MembersInfo {
18467    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18468        // struct serializer
18469        use serde::ser::SerializeStruct;
18470        let mut s = serializer.serialize_struct("MembersInfo", 2)?;
18471        self.internal_serialize::<S>(&mut s)?;
18472        s.end()
18473    }
18474}
18475
18476#[derive(Debug, Clone, PartialEq, Eq)]
18477#[non_exhaustive] // structs may have more fields added in the future.
18478pub struct MembersListArg {
18479    /// Number of results to return per call.
18480    pub limit: u32,
18481    /// Whether to return removed members.
18482    pub include_removed: bool,
18483}
18484
18485impl Default for MembersListArg {
18486    fn default() -> Self {
18487        MembersListArg {
18488            limit: 1000,
18489            include_removed: false,
18490        }
18491    }
18492}
18493
18494impl MembersListArg {
18495    pub fn with_limit(mut self, value: u32) -> Self {
18496        self.limit = value;
18497        self
18498    }
18499
18500    pub fn with_include_removed(mut self, value: bool) -> Self {
18501        self.include_removed = value;
18502        self
18503    }
18504}
18505
18506const MEMBERS_LIST_ARG_FIELDS: &[&str] = &["limit",
18507                                           "include_removed"];
18508impl MembersListArg {
18509    // no _opt deserializer
18510    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18511        mut map: V,
18512    ) -> Result<MembersListArg, V::Error> {
18513        let mut field_limit = None;
18514        let mut field_include_removed = None;
18515        while let Some(key) = map.next_key::<&str>()? {
18516            match key {
18517                "limit" => {
18518                    if field_limit.is_some() {
18519                        return Err(::serde::de::Error::duplicate_field("limit"));
18520                    }
18521                    field_limit = Some(map.next_value()?);
18522                }
18523                "include_removed" => {
18524                    if field_include_removed.is_some() {
18525                        return Err(::serde::de::Error::duplicate_field("include_removed"));
18526                    }
18527                    field_include_removed = Some(map.next_value()?);
18528                }
18529                _ => {
18530                    // unknown field allowed and ignored
18531                    map.next_value::<::serde_json::Value>()?;
18532                }
18533            }
18534        }
18535        let result = MembersListArg {
18536            limit: field_limit.unwrap_or(1000),
18537            include_removed: field_include_removed.unwrap_or(false),
18538        };
18539        Ok(result)
18540    }
18541
18542    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18543        &self,
18544        s: &mut S::SerializeStruct,
18545    ) -> Result<(), S::Error> {
18546        use serde::ser::SerializeStruct;
18547        if self.limit != 1000 {
18548            s.serialize_field("limit", &self.limit)?;
18549        }
18550        if self.include_removed {
18551            s.serialize_field("include_removed", &self.include_removed)?;
18552        }
18553        Ok(())
18554    }
18555}
18556
18557impl<'de> ::serde::de::Deserialize<'de> for MembersListArg {
18558    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18559        // struct deserializer
18560        use serde::de::{MapAccess, Visitor};
18561        struct StructVisitor;
18562        impl<'de> Visitor<'de> for StructVisitor {
18563            type Value = MembersListArg;
18564            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18565                f.write_str("a MembersListArg struct")
18566            }
18567            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18568                MembersListArg::internal_deserialize(map)
18569            }
18570        }
18571        deserializer.deserialize_struct("MembersListArg", MEMBERS_LIST_ARG_FIELDS, StructVisitor)
18572    }
18573}
18574
18575impl ::serde::ser::Serialize for MembersListArg {
18576    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18577        // struct serializer
18578        use serde::ser::SerializeStruct;
18579        let mut s = serializer.serialize_struct("MembersListArg", 2)?;
18580        self.internal_serialize::<S>(&mut s)?;
18581        s.end()
18582    }
18583}
18584
18585#[derive(Debug, Clone, PartialEq, Eq)]
18586#[non_exhaustive] // structs may have more fields added in the future.
18587pub struct MembersListContinueArg {
18588    /// Indicates from what point to get the next set of members.
18589    pub cursor: String,
18590}
18591
18592impl MembersListContinueArg {
18593    pub fn new(cursor: String) -> Self {
18594        MembersListContinueArg {
18595            cursor,
18596        }
18597    }
18598}
18599
18600const MEMBERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
18601impl MembersListContinueArg {
18602    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18603        map: V,
18604    ) -> Result<MembersListContinueArg, V::Error> {
18605        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18606    }
18607
18608    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18609        mut map: V,
18610        optional: bool,
18611    ) -> Result<Option<MembersListContinueArg>, V::Error> {
18612        let mut field_cursor = None;
18613        let mut nothing = true;
18614        while let Some(key) = map.next_key::<&str>()? {
18615            nothing = false;
18616            match key {
18617                "cursor" => {
18618                    if field_cursor.is_some() {
18619                        return Err(::serde::de::Error::duplicate_field("cursor"));
18620                    }
18621                    field_cursor = Some(map.next_value()?);
18622                }
18623                _ => {
18624                    // unknown field allowed and ignored
18625                    map.next_value::<::serde_json::Value>()?;
18626                }
18627            }
18628        }
18629        if optional && nothing {
18630            return Ok(None);
18631        }
18632        let result = MembersListContinueArg {
18633            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
18634        };
18635        Ok(Some(result))
18636    }
18637
18638    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18639        &self,
18640        s: &mut S::SerializeStruct,
18641    ) -> Result<(), S::Error> {
18642        use serde::ser::SerializeStruct;
18643        s.serialize_field("cursor", &self.cursor)?;
18644        Ok(())
18645    }
18646}
18647
18648impl<'de> ::serde::de::Deserialize<'de> for MembersListContinueArg {
18649    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18650        // struct deserializer
18651        use serde::de::{MapAccess, Visitor};
18652        struct StructVisitor;
18653        impl<'de> Visitor<'de> for StructVisitor {
18654            type Value = MembersListContinueArg;
18655            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18656                f.write_str("a MembersListContinueArg struct")
18657            }
18658            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18659                MembersListContinueArg::internal_deserialize(map)
18660            }
18661        }
18662        deserializer.deserialize_struct("MembersListContinueArg", MEMBERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
18663    }
18664}
18665
18666impl ::serde::ser::Serialize for MembersListContinueArg {
18667    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18668        // struct serializer
18669        use serde::ser::SerializeStruct;
18670        let mut s = serializer.serialize_struct("MembersListContinueArg", 1)?;
18671        self.internal_serialize::<S>(&mut s)?;
18672        s.end()
18673    }
18674}
18675
18676#[derive(Debug, Clone, PartialEq, Eq)]
18677#[non_exhaustive] // variants may be added in the future
18678pub enum MembersListContinueError {
18679    /// The cursor is invalid.
18680    InvalidCursor,
18681    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18682    /// typically indicates that this SDK version is out of date.
18683    Other,
18684}
18685
18686impl<'de> ::serde::de::Deserialize<'de> for MembersListContinueError {
18687    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18688        // union deserializer
18689        use serde::de::{self, MapAccess, Visitor};
18690        struct EnumVisitor;
18691        impl<'de> Visitor<'de> for EnumVisitor {
18692            type Value = MembersListContinueError;
18693            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18694                f.write_str("a MembersListContinueError structure")
18695            }
18696            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18697                let tag: &str = match map.next_key()? {
18698                    Some(".tag") => map.next_value()?,
18699                    _ => return Err(de::Error::missing_field(".tag"))
18700                };
18701                let value = match tag {
18702                    "invalid_cursor" => MembersListContinueError::InvalidCursor,
18703                    _ => MembersListContinueError::Other,
18704                };
18705                crate::eat_json_fields(&mut map)?;
18706                Ok(value)
18707            }
18708        }
18709        const VARIANTS: &[&str] = &["invalid_cursor",
18710                                    "other"];
18711        deserializer.deserialize_struct("MembersListContinueError", VARIANTS, EnumVisitor)
18712    }
18713}
18714
18715impl ::serde::ser::Serialize for MembersListContinueError {
18716    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18717        // union serializer
18718        use serde::ser::SerializeStruct;
18719        match self {
18720            MembersListContinueError::InvalidCursor => {
18721                // unit
18722                let mut s = serializer.serialize_struct("MembersListContinueError", 1)?;
18723                s.serialize_field(".tag", "invalid_cursor")?;
18724                s.end()
18725            }
18726            MembersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18727        }
18728    }
18729}
18730
18731impl ::std::error::Error for MembersListContinueError {
18732}
18733
18734impl ::std::fmt::Display for MembersListContinueError {
18735    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18736        match self {
18737            MembersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
18738            _ => write!(f, "{:?}", *self),
18739        }
18740    }
18741}
18742
18743
18744#[derive(Debug, Clone, PartialEq, Eq)]
18745#[non_exhaustive] // variants may be added in the future
18746pub enum MembersListError {
18747    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18748    /// typically indicates that this SDK version is out of date.
18749    Other,
18750}
18751
18752impl<'de> ::serde::de::Deserialize<'de> for MembersListError {
18753    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18754        // union deserializer
18755        use serde::de::{self, MapAccess, Visitor};
18756        struct EnumVisitor;
18757        impl<'de> Visitor<'de> for EnumVisitor {
18758            type Value = MembersListError;
18759            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18760                f.write_str("a MembersListError structure")
18761            }
18762            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18763                let tag: &str = match map.next_key()? {
18764                    Some(".tag") => map.next_value()?,
18765                    _ => return Err(de::Error::missing_field(".tag"))
18766                };
18767                // open enum with no defined variants
18768                let _ = tag;
18769                crate::eat_json_fields(&mut map)?;
18770                Ok(MembersListError::Other)
18771            }
18772        }
18773        const VARIANTS: &[&str] = &["other"];
18774        deserializer.deserialize_struct("MembersListError", VARIANTS, EnumVisitor)
18775    }
18776}
18777
18778impl ::serde::ser::Serialize for MembersListError {
18779    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18780        // union serializer
18781        #![allow(unused_variables)]
18782        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
18783    }
18784}
18785
18786impl ::std::error::Error for MembersListError {
18787}
18788
18789impl ::std::fmt::Display for MembersListError {
18790    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18791        write!(f, "{:?}", *self)
18792    }
18793}
18794
18795#[derive(Debug, Clone, PartialEq, Eq)]
18796#[non_exhaustive] // structs may have more fields added in the future.
18797pub struct MembersListResult {
18798    /// List of team members.
18799    pub members: Vec<TeamMemberInfo>,
18800    /// Pass the cursor into [`members_list_continue()`](crate::team::members_list_continue) to
18801    /// obtain the additional members.
18802    pub cursor: String,
18803    /// Is true if there are additional team members that have not been returned yet. An additional
18804    /// call to [`members_list_continue()`](crate::team::members_list_continue) can retrieve them.
18805    pub has_more: bool,
18806}
18807
18808impl MembersListResult {
18809    pub fn new(members: Vec<TeamMemberInfo>, cursor: String, has_more: bool) -> Self {
18810        MembersListResult {
18811            members,
18812            cursor,
18813            has_more,
18814        }
18815    }
18816}
18817
18818const MEMBERS_LIST_RESULT_FIELDS: &[&str] = &["members",
18819                                              "cursor",
18820                                              "has_more"];
18821impl MembersListResult {
18822    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18823        map: V,
18824    ) -> Result<MembersListResult, V::Error> {
18825        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18826    }
18827
18828    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18829        mut map: V,
18830        optional: bool,
18831    ) -> Result<Option<MembersListResult>, V::Error> {
18832        let mut field_members = None;
18833        let mut field_cursor = None;
18834        let mut field_has_more = None;
18835        let mut nothing = true;
18836        while let Some(key) = map.next_key::<&str>()? {
18837            nothing = false;
18838            match key {
18839                "members" => {
18840                    if field_members.is_some() {
18841                        return Err(::serde::de::Error::duplicate_field("members"));
18842                    }
18843                    field_members = Some(map.next_value()?);
18844                }
18845                "cursor" => {
18846                    if field_cursor.is_some() {
18847                        return Err(::serde::de::Error::duplicate_field("cursor"));
18848                    }
18849                    field_cursor = Some(map.next_value()?);
18850                }
18851                "has_more" => {
18852                    if field_has_more.is_some() {
18853                        return Err(::serde::de::Error::duplicate_field("has_more"));
18854                    }
18855                    field_has_more = Some(map.next_value()?);
18856                }
18857                _ => {
18858                    // unknown field allowed and ignored
18859                    map.next_value::<::serde_json::Value>()?;
18860                }
18861            }
18862        }
18863        if optional && nothing {
18864            return Ok(None);
18865        }
18866        let result = MembersListResult {
18867            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
18868            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
18869            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
18870        };
18871        Ok(Some(result))
18872    }
18873
18874    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18875        &self,
18876        s: &mut S::SerializeStruct,
18877    ) -> Result<(), S::Error> {
18878        use serde::ser::SerializeStruct;
18879        s.serialize_field("members", &self.members)?;
18880        s.serialize_field("cursor", &self.cursor)?;
18881        s.serialize_field("has_more", &self.has_more)?;
18882        Ok(())
18883    }
18884}
18885
18886impl<'de> ::serde::de::Deserialize<'de> for MembersListResult {
18887    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18888        // struct deserializer
18889        use serde::de::{MapAccess, Visitor};
18890        struct StructVisitor;
18891        impl<'de> Visitor<'de> for StructVisitor {
18892            type Value = MembersListResult;
18893            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18894                f.write_str("a MembersListResult struct")
18895            }
18896            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18897                MembersListResult::internal_deserialize(map)
18898            }
18899        }
18900        deserializer.deserialize_struct("MembersListResult", MEMBERS_LIST_RESULT_FIELDS, StructVisitor)
18901    }
18902}
18903
18904impl ::serde::ser::Serialize for MembersListResult {
18905    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18906        // struct serializer
18907        use serde::ser::SerializeStruct;
18908        let mut s = serializer.serialize_struct("MembersListResult", 3)?;
18909        self.internal_serialize::<S>(&mut s)?;
18910        s.end()
18911    }
18912}
18913
18914#[derive(Debug, Clone, PartialEq, Eq)]
18915#[non_exhaustive] // structs may have more fields added in the future.
18916pub struct MembersListV2Result {
18917    /// List of team members.
18918    pub members: Vec<TeamMemberInfoV2>,
18919    /// Pass the cursor into [`members_list_continue_v2()`](crate::team::members_list_continue_v2)
18920    /// to obtain the additional members.
18921    pub cursor: String,
18922    /// Is true if there are additional team members that have not been returned yet. An additional
18923    /// call to [`members_list_continue_v2()`](crate::team::members_list_continue_v2) can retrieve
18924    /// them.
18925    pub has_more: bool,
18926}
18927
18928impl MembersListV2Result {
18929    pub fn new(members: Vec<TeamMemberInfoV2>, cursor: String, has_more: bool) -> Self {
18930        MembersListV2Result {
18931            members,
18932            cursor,
18933            has_more,
18934        }
18935    }
18936}
18937
18938const MEMBERS_LIST_V2_RESULT_FIELDS: &[&str] = &["members",
18939                                                 "cursor",
18940                                                 "has_more"];
18941impl MembersListV2Result {
18942    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18943        map: V,
18944    ) -> Result<MembersListV2Result, V::Error> {
18945        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18946    }
18947
18948    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18949        mut map: V,
18950        optional: bool,
18951    ) -> Result<Option<MembersListV2Result>, V::Error> {
18952        let mut field_members = None;
18953        let mut field_cursor = None;
18954        let mut field_has_more = None;
18955        let mut nothing = true;
18956        while let Some(key) = map.next_key::<&str>()? {
18957            nothing = false;
18958            match key {
18959                "members" => {
18960                    if field_members.is_some() {
18961                        return Err(::serde::de::Error::duplicate_field("members"));
18962                    }
18963                    field_members = Some(map.next_value()?);
18964                }
18965                "cursor" => {
18966                    if field_cursor.is_some() {
18967                        return Err(::serde::de::Error::duplicate_field("cursor"));
18968                    }
18969                    field_cursor = Some(map.next_value()?);
18970                }
18971                "has_more" => {
18972                    if field_has_more.is_some() {
18973                        return Err(::serde::de::Error::duplicate_field("has_more"));
18974                    }
18975                    field_has_more = Some(map.next_value()?);
18976                }
18977                _ => {
18978                    // unknown field allowed and ignored
18979                    map.next_value::<::serde_json::Value>()?;
18980                }
18981            }
18982        }
18983        if optional && nothing {
18984            return Ok(None);
18985        }
18986        let result = MembersListV2Result {
18987            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
18988            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
18989            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
18990        };
18991        Ok(Some(result))
18992    }
18993
18994    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18995        &self,
18996        s: &mut S::SerializeStruct,
18997    ) -> Result<(), S::Error> {
18998        use serde::ser::SerializeStruct;
18999        s.serialize_field("members", &self.members)?;
19000        s.serialize_field("cursor", &self.cursor)?;
19001        s.serialize_field("has_more", &self.has_more)?;
19002        Ok(())
19003    }
19004}
19005
19006impl<'de> ::serde::de::Deserialize<'de> for MembersListV2Result {
19007    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19008        // struct deserializer
19009        use serde::de::{MapAccess, Visitor};
19010        struct StructVisitor;
19011        impl<'de> Visitor<'de> for StructVisitor {
19012            type Value = MembersListV2Result;
19013            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19014                f.write_str("a MembersListV2Result struct")
19015            }
19016            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19017                MembersListV2Result::internal_deserialize(map)
19018            }
19019        }
19020        deserializer.deserialize_struct("MembersListV2Result", MEMBERS_LIST_V2_RESULT_FIELDS, StructVisitor)
19021    }
19022}
19023
19024impl ::serde::ser::Serialize for MembersListV2Result {
19025    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19026        // struct serializer
19027        use serde::ser::SerializeStruct;
19028        let mut s = serializer.serialize_struct("MembersListV2Result", 3)?;
19029        self.internal_serialize::<S>(&mut s)?;
19030        s.end()
19031    }
19032}
19033
19034#[derive(Debug, Clone, PartialEq, Eq)]
19035#[non_exhaustive] // variants may be added in the future
19036pub enum MembersPermanentlyDeleteFilesError {
19037    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19038    /// this team.
19039    UserNotFound,
19040    /// The user is not a member of the team.
19041    UserNotInTeam,
19042    /// Cannot permanently delete files while it's being transferred.
19043    TransferInProgress,
19044    /// Cannot permanently delete files that have already been transferred.
19045    AlreadyTransferred,
19046    /// Cannot permanently delete files that have already been transferred or deleted.
19047    AlreadyTransferredOrDeleted,
19048    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19049    /// typically indicates that this SDK version is out of date.
19050    Other,
19051}
19052
19053impl<'de> ::serde::de::Deserialize<'de> for MembersPermanentlyDeleteFilesError {
19054    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19055        // union deserializer
19056        use serde::de::{self, MapAccess, Visitor};
19057        struct EnumVisitor;
19058        impl<'de> Visitor<'de> for EnumVisitor {
19059            type Value = MembersPermanentlyDeleteFilesError;
19060            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19061                f.write_str("a MembersPermanentlyDeleteFilesError structure")
19062            }
19063            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19064                let tag: &str = match map.next_key()? {
19065                    Some(".tag") => map.next_value()?,
19066                    _ => return Err(de::Error::missing_field(".tag"))
19067                };
19068                let value = match tag {
19069                    "user_not_found" => MembersPermanentlyDeleteFilesError::UserNotFound,
19070                    "user_not_in_team" => MembersPermanentlyDeleteFilesError::UserNotInTeam,
19071                    "transfer_in_progress" => MembersPermanentlyDeleteFilesError::TransferInProgress,
19072                    "already_transferred" => MembersPermanentlyDeleteFilesError::AlreadyTransferred,
19073                    "already_transferred_or_deleted" => MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted,
19074                    _ => MembersPermanentlyDeleteFilesError::Other,
19075                };
19076                crate::eat_json_fields(&mut map)?;
19077                Ok(value)
19078            }
19079        }
19080        const VARIANTS: &[&str] = &["user_not_found",
19081                                    "user_not_in_team",
19082                                    "other",
19083                                    "transfer_in_progress",
19084                                    "already_transferred",
19085                                    "already_transferred_or_deleted"];
19086        deserializer.deserialize_struct("MembersPermanentlyDeleteFilesError", VARIANTS, EnumVisitor)
19087    }
19088}
19089
19090impl ::serde::ser::Serialize for MembersPermanentlyDeleteFilesError {
19091    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19092        // union serializer
19093        use serde::ser::SerializeStruct;
19094        match self {
19095            MembersPermanentlyDeleteFilesError::UserNotFound => {
19096                // unit
19097                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
19098                s.serialize_field(".tag", "user_not_found")?;
19099                s.end()
19100            }
19101            MembersPermanentlyDeleteFilesError::UserNotInTeam => {
19102                // unit
19103                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
19104                s.serialize_field(".tag", "user_not_in_team")?;
19105                s.end()
19106            }
19107            MembersPermanentlyDeleteFilesError::TransferInProgress => {
19108                // unit
19109                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
19110                s.serialize_field(".tag", "transfer_in_progress")?;
19111                s.end()
19112            }
19113            MembersPermanentlyDeleteFilesError::AlreadyTransferred => {
19114                // unit
19115                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
19116                s.serialize_field(".tag", "already_transferred")?;
19117                s.end()
19118            }
19119            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => {
19120                // unit
19121                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
19122                s.serialize_field(".tag", "already_transferred_or_deleted")?;
19123                s.end()
19124            }
19125            MembersPermanentlyDeleteFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19126        }
19127    }
19128}
19129
19130impl ::std::error::Error for MembersPermanentlyDeleteFilesError {
19131}
19132
19133impl ::std::fmt::Display for MembersPermanentlyDeleteFilesError {
19134    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19135        match self {
19136            MembersPermanentlyDeleteFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19137            MembersPermanentlyDeleteFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19138            MembersPermanentlyDeleteFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
19139            MembersPermanentlyDeleteFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
19140            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
19141            _ => write!(f, "{:?}", *self),
19142        }
19143    }
19144}
19145
19146// union extends MembersDeactivateError
19147impl From<MembersDeactivateError> for MembersPermanentlyDeleteFilesError {
19148    fn from(parent: MembersDeactivateError) -> Self {
19149        match parent {
19150            MembersDeactivateError::UserNotFound => MembersPermanentlyDeleteFilesError::UserNotFound,
19151            MembersDeactivateError::UserNotInTeam => MembersPermanentlyDeleteFilesError::UserNotInTeam,
19152            MembersDeactivateError::Other => MembersPermanentlyDeleteFilesError::Other,
19153        }
19154    }
19155}
19156/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
19157/// account.
19158#[derive(Debug, Clone, PartialEq, Eq)]
19159#[non_exhaustive] // structs may have more fields added in the future.
19160pub struct MembersRecoverArg {
19161    /// Identity of user to recover.
19162    pub user: UserSelectorArg,
19163}
19164
19165impl MembersRecoverArg {
19166    pub fn new(user: UserSelectorArg) -> Self {
19167        MembersRecoverArg {
19168            user,
19169        }
19170    }
19171}
19172
19173const MEMBERS_RECOVER_ARG_FIELDS: &[&str] = &["user"];
19174impl MembersRecoverArg {
19175    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19176        map: V,
19177    ) -> Result<MembersRecoverArg, V::Error> {
19178        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19179    }
19180
19181    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19182        mut map: V,
19183        optional: bool,
19184    ) -> Result<Option<MembersRecoverArg>, V::Error> {
19185        let mut field_user = None;
19186        let mut nothing = true;
19187        while let Some(key) = map.next_key::<&str>()? {
19188            nothing = false;
19189            match key {
19190                "user" => {
19191                    if field_user.is_some() {
19192                        return Err(::serde::de::Error::duplicate_field("user"));
19193                    }
19194                    field_user = Some(map.next_value()?);
19195                }
19196                _ => {
19197                    // unknown field allowed and ignored
19198                    map.next_value::<::serde_json::Value>()?;
19199                }
19200            }
19201        }
19202        if optional && nothing {
19203            return Ok(None);
19204        }
19205        let result = MembersRecoverArg {
19206            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19207        };
19208        Ok(Some(result))
19209    }
19210
19211    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19212        &self,
19213        s: &mut S::SerializeStruct,
19214    ) -> Result<(), S::Error> {
19215        use serde::ser::SerializeStruct;
19216        s.serialize_field("user", &self.user)?;
19217        Ok(())
19218    }
19219}
19220
19221impl<'de> ::serde::de::Deserialize<'de> for MembersRecoverArg {
19222    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19223        // struct deserializer
19224        use serde::de::{MapAccess, Visitor};
19225        struct StructVisitor;
19226        impl<'de> Visitor<'de> for StructVisitor {
19227            type Value = MembersRecoverArg;
19228            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19229                f.write_str("a MembersRecoverArg struct")
19230            }
19231            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19232                MembersRecoverArg::internal_deserialize(map)
19233            }
19234        }
19235        deserializer.deserialize_struct("MembersRecoverArg", MEMBERS_RECOVER_ARG_FIELDS, StructVisitor)
19236    }
19237}
19238
19239impl ::serde::ser::Serialize for MembersRecoverArg {
19240    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19241        // struct serializer
19242        use serde::ser::SerializeStruct;
19243        let mut s = serializer.serialize_struct("MembersRecoverArg", 1)?;
19244        self.internal_serialize::<S>(&mut s)?;
19245        s.end()
19246    }
19247}
19248
19249#[derive(Debug, Clone, PartialEq, Eq)]
19250#[non_exhaustive] // variants may be added in the future
19251pub enum MembersRecoverError {
19252    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19253    /// this team.
19254    UserNotFound,
19255    /// The user is not recoverable.
19256    UserUnrecoverable,
19257    /// The user is not a member of the team.
19258    UserNotInTeam,
19259    /// Team is full. The organization has no available licenses.
19260    TeamLicenseLimit,
19261    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19262    /// typically indicates that this SDK version is out of date.
19263    Other,
19264}
19265
19266impl<'de> ::serde::de::Deserialize<'de> for MembersRecoverError {
19267    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19268        // union deserializer
19269        use serde::de::{self, MapAccess, Visitor};
19270        struct EnumVisitor;
19271        impl<'de> Visitor<'de> for EnumVisitor {
19272            type Value = MembersRecoverError;
19273            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19274                f.write_str("a MembersRecoverError structure")
19275            }
19276            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19277                let tag: &str = match map.next_key()? {
19278                    Some(".tag") => map.next_value()?,
19279                    _ => return Err(de::Error::missing_field(".tag"))
19280                };
19281                let value = match tag {
19282                    "user_not_found" => MembersRecoverError::UserNotFound,
19283                    "user_unrecoverable" => MembersRecoverError::UserUnrecoverable,
19284                    "user_not_in_team" => MembersRecoverError::UserNotInTeam,
19285                    "team_license_limit" => MembersRecoverError::TeamLicenseLimit,
19286                    _ => MembersRecoverError::Other,
19287                };
19288                crate::eat_json_fields(&mut map)?;
19289                Ok(value)
19290            }
19291        }
19292        const VARIANTS: &[&str] = &["user_not_found",
19293                                    "user_unrecoverable",
19294                                    "user_not_in_team",
19295                                    "team_license_limit",
19296                                    "other"];
19297        deserializer.deserialize_struct("MembersRecoverError", VARIANTS, EnumVisitor)
19298    }
19299}
19300
19301impl ::serde::ser::Serialize for MembersRecoverError {
19302    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19303        // union serializer
19304        use serde::ser::SerializeStruct;
19305        match self {
19306            MembersRecoverError::UserNotFound => {
19307                // unit
19308                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
19309                s.serialize_field(".tag", "user_not_found")?;
19310                s.end()
19311            }
19312            MembersRecoverError::UserUnrecoverable => {
19313                // unit
19314                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
19315                s.serialize_field(".tag", "user_unrecoverable")?;
19316                s.end()
19317            }
19318            MembersRecoverError::UserNotInTeam => {
19319                // unit
19320                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
19321                s.serialize_field(".tag", "user_not_in_team")?;
19322                s.end()
19323            }
19324            MembersRecoverError::TeamLicenseLimit => {
19325                // unit
19326                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
19327                s.serialize_field(".tag", "team_license_limit")?;
19328                s.end()
19329            }
19330            MembersRecoverError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19331        }
19332    }
19333}
19334
19335impl ::std::error::Error for MembersRecoverError {
19336}
19337
19338impl ::std::fmt::Display for MembersRecoverError {
19339    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19340        match self {
19341            MembersRecoverError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19342            MembersRecoverError::UserUnrecoverable => f.write_str("The user is not recoverable."),
19343            MembersRecoverError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19344            MembersRecoverError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
19345            _ => write!(f, "{:?}", *self),
19346        }
19347    }
19348}
19349
19350// union extends UserSelectorError
19351impl From<UserSelectorError> for MembersRecoverError {
19352    fn from(parent: UserSelectorError) -> Self {
19353        match parent {
19354            UserSelectorError::UserNotFound => MembersRecoverError::UserNotFound,
19355        }
19356    }
19357}
19358#[derive(Debug, Clone, PartialEq, Eq)]
19359#[non_exhaustive] // structs may have more fields added in the future.
19360pub struct MembersRemoveArg {
19361    /// Identity of user to remove/suspend/have their files moved.
19362    pub user: UserSelectorArg,
19363    /// If provided, controls if the user's data will be deleted on their linked devices.
19364    pub wipe_data: bool,
19365    /// If provided, files from the deleted member account will be transferred to this user.
19366    pub transfer_dest_id: Option<UserSelectorArg>,
19367    /// If provided, errors during the transfer process will be sent via email to this user. If the
19368    /// transfer_dest_id argument was provided, then this argument must be provided as well.
19369    pub transfer_admin_id: Option<UserSelectorArg>,
19370    /// Downgrade the member to a Basic account. The user will retain the email address associated
19371    /// with their Dropbox account and data in their account that is not restricted to team members.
19372    /// In order to keep the account the argument `wipe_data` should be set to `false`.
19373    pub keep_account: bool,
19374    /// If provided, allows removed users to keep access to Dropbox folders (not Dropbox Paper
19375    /// folders) already explicitly shared with them (not via a group) when they are downgraded to a
19376    /// Basic account. Users will not retain access to folders that do not allow external sharing.
19377    /// In order to keep the sharing relationships, the arguments `wipe_data` should be set to
19378    /// `false` and `keep_account` should be set to `true`.
19379    pub retain_team_shares: bool,
19380    /// Permanently delete the data in the deleted member's account. After permanent deletion, the
19381    /// data is no longer available to be transferred to a different user.
19382    pub permanently_delete_files: bool,
19383}
19384
19385impl MembersRemoveArg {
19386    pub fn new(user: UserSelectorArg) -> Self {
19387        MembersRemoveArg {
19388            user,
19389            wipe_data: true,
19390            transfer_dest_id: None,
19391            transfer_admin_id: None,
19392            keep_account: false,
19393            retain_team_shares: false,
19394            permanently_delete_files: false,
19395        }
19396    }
19397
19398    pub fn with_wipe_data(mut self, value: bool) -> Self {
19399        self.wipe_data = value;
19400        self
19401    }
19402
19403    pub fn with_transfer_dest_id(mut self, value: UserSelectorArg) -> Self {
19404        self.transfer_dest_id = Some(value);
19405        self
19406    }
19407
19408    pub fn with_transfer_admin_id(mut self, value: UserSelectorArg) -> Self {
19409        self.transfer_admin_id = Some(value);
19410        self
19411    }
19412
19413    pub fn with_keep_account(mut self, value: bool) -> Self {
19414        self.keep_account = value;
19415        self
19416    }
19417
19418    pub fn with_retain_team_shares(mut self, value: bool) -> Self {
19419        self.retain_team_shares = value;
19420        self
19421    }
19422
19423    pub fn with_permanently_delete_files(mut self, value: bool) -> Self {
19424        self.permanently_delete_files = value;
19425        self
19426    }
19427}
19428
19429const MEMBERS_REMOVE_ARG_FIELDS: &[&str] = &["user",
19430                                             "wipe_data",
19431                                             "transfer_dest_id",
19432                                             "transfer_admin_id",
19433                                             "keep_account",
19434                                             "retain_team_shares",
19435                                             "permanently_delete_files"];
19436impl MembersRemoveArg {
19437    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19438        map: V,
19439    ) -> Result<MembersRemoveArg, V::Error> {
19440        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19441    }
19442
19443    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19444        mut map: V,
19445        optional: bool,
19446    ) -> Result<Option<MembersRemoveArg>, V::Error> {
19447        let mut field_user = None;
19448        let mut field_wipe_data = None;
19449        let mut field_transfer_dest_id = None;
19450        let mut field_transfer_admin_id = None;
19451        let mut field_keep_account = None;
19452        let mut field_retain_team_shares = None;
19453        let mut field_permanently_delete_files = None;
19454        let mut nothing = true;
19455        while let Some(key) = map.next_key::<&str>()? {
19456            nothing = false;
19457            match key {
19458                "user" => {
19459                    if field_user.is_some() {
19460                        return Err(::serde::de::Error::duplicate_field("user"));
19461                    }
19462                    field_user = Some(map.next_value()?);
19463                }
19464                "wipe_data" => {
19465                    if field_wipe_data.is_some() {
19466                        return Err(::serde::de::Error::duplicate_field("wipe_data"));
19467                    }
19468                    field_wipe_data = Some(map.next_value()?);
19469                }
19470                "transfer_dest_id" => {
19471                    if field_transfer_dest_id.is_some() {
19472                        return Err(::serde::de::Error::duplicate_field("transfer_dest_id"));
19473                    }
19474                    field_transfer_dest_id = Some(map.next_value()?);
19475                }
19476                "transfer_admin_id" => {
19477                    if field_transfer_admin_id.is_some() {
19478                        return Err(::serde::de::Error::duplicate_field("transfer_admin_id"));
19479                    }
19480                    field_transfer_admin_id = Some(map.next_value()?);
19481                }
19482                "keep_account" => {
19483                    if field_keep_account.is_some() {
19484                        return Err(::serde::de::Error::duplicate_field("keep_account"));
19485                    }
19486                    field_keep_account = Some(map.next_value()?);
19487                }
19488                "retain_team_shares" => {
19489                    if field_retain_team_shares.is_some() {
19490                        return Err(::serde::de::Error::duplicate_field("retain_team_shares"));
19491                    }
19492                    field_retain_team_shares = Some(map.next_value()?);
19493                }
19494                "permanently_delete_files" => {
19495                    if field_permanently_delete_files.is_some() {
19496                        return Err(::serde::de::Error::duplicate_field("permanently_delete_files"));
19497                    }
19498                    field_permanently_delete_files = Some(map.next_value()?);
19499                }
19500                _ => {
19501                    // unknown field allowed and ignored
19502                    map.next_value::<::serde_json::Value>()?;
19503                }
19504            }
19505        }
19506        if optional && nothing {
19507            return Ok(None);
19508        }
19509        let result = MembersRemoveArg {
19510            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19511            wipe_data: field_wipe_data.unwrap_or(true),
19512            transfer_dest_id: field_transfer_dest_id.and_then(Option::flatten),
19513            transfer_admin_id: field_transfer_admin_id.and_then(Option::flatten),
19514            keep_account: field_keep_account.unwrap_or(false),
19515            retain_team_shares: field_retain_team_shares.unwrap_or(false),
19516            permanently_delete_files: field_permanently_delete_files.unwrap_or(false),
19517        };
19518        Ok(Some(result))
19519    }
19520
19521    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19522        &self,
19523        s: &mut S::SerializeStruct,
19524    ) -> Result<(), S::Error> {
19525        use serde::ser::SerializeStruct;
19526        s.serialize_field("user", &self.user)?;
19527        if !self.wipe_data {
19528            s.serialize_field("wipe_data", &self.wipe_data)?;
19529        }
19530        if let Some(val) = &self.transfer_dest_id {
19531            s.serialize_field("transfer_dest_id", val)?;
19532        }
19533        if let Some(val) = &self.transfer_admin_id {
19534            s.serialize_field("transfer_admin_id", val)?;
19535        }
19536        if self.keep_account {
19537            s.serialize_field("keep_account", &self.keep_account)?;
19538        }
19539        if self.retain_team_shares {
19540            s.serialize_field("retain_team_shares", &self.retain_team_shares)?;
19541        }
19542        if self.permanently_delete_files {
19543            s.serialize_field("permanently_delete_files", &self.permanently_delete_files)?;
19544        }
19545        Ok(())
19546    }
19547}
19548
19549impl<'de> ::serde::de::Deserialize<'de> for MembersRemoveArg {
19550    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19551        // struct deserializer
19552        use serde::de::{MapAccess, Visitor};
19553        struct StructVisitor;
19554        impl<'de> Visitor<'de> for StructVisitor {
19555            type Value = MembersRemoveArg;
19556            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19557                f.write_str("a MembersRemoveArg struct")
19558            }
19559            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19560                MembersRemoveArg::internal_deserialize(map)
19561            }
19562        }
19563        deserializer.deserialize_struct("MembersRemoveArg", MEMBERS_REMOVE_ARG_FIELDS, StructVisitor)
19564    }
19565}
19566
19567impl ::serde::ser::Serialize for MembersRemoveArg {
19568    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19569        // struct serializer
19570        use serde::ser::SerializeStruct;
19571        let mut s = serializer.serialize_struct("MembersRemoveArg", 7)?;
19572        self.internal_serialize::<S>(&mut s)?;
19573        s.end()
19574    }
19575}
19576
19577// struct extends MembersDeactivateArg
19578impl From<MembersRemoveArg> for MembersDeactivateArg {
19579    fn from(subtype: MembersRemoveArg) -> Self {
19580        Self {
19581            user: subtype.user,
19582            wipe_data: subtype.wipe_data,
19583        }
19584    }
19585}
19586#[derive(Debug, Clone, PartialEq, Eq)]
19587#[non_exhaustive] // variants may be added in the future
19588pub enum MembersRemoveError {
19589    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19590    /// this team.
19591    UserNotFound,
19592    /// The user is not a member of the team.
19593    UserNotInTeam,
19594    /// Cannot permanently delete files while it's being transferred.
19595    TransferInProgress,
19596    /// Cannot permanently delete files that have already been transferred.
19597    AlreadyTransferred,
19598    /// Cannot permanently delete files that have already been transferred or deleted.
19599    AlreadyTransferredOrDeleted,
19600    /// Expected removed user and transfer_dest user to be different.
19601    RemovedAndTransferDestShouldDiffer,
19602    /// Expected removed user and transfer_admin user to be different.
19603    RemovedAndTransferAdminShouldDiffer,
19604    /// No matching user found for the argument transfer_dest_id.
19605    TransferDestUserNotFound,
19606    /// The provided transfer_dest_id does not exist on this team.
19607    TransferDestUserNotInTeam,
19608    /// The provided transfer_admin_id does not exist on this team.
19609    TransferAdminUserNotInTeam,
19610    /// No matching user found for the argument transfer_admin_id.
19611    TransferAdminUserNotFound,
19612    /// The transfer_admin_id argument must be provided when file transfer is requested.
19613    UnspecifiedTransferAdminId,
19614    /// Specified transfer_admin user is not a team admin.
19615    TransferAdminIsNotAdmin,
19616    /// The recipient user's email is not verified.
19617    RecipientNotVerified,
19618    /// The user is the last admin of the team, so it cannot be removed from it.
19619    RemoveLastAdmin,
19620    /// Cannot keep account and transfer the data to another user at the same time.
19621    CannotKeepAccountAndTransfer,
19622    /// Cannot keep account and delete the data at the same time. To keep the account the argument
19623    /// wipe_data should be set to `false`.
19624    CannotKeepAccountAndDeleteData,
19625    /// Cannot keep account and permanently delete the data at the same time. To keep the account
19626    /// the argument permanently_delete_files should be set to `false`.
19627    CannotKeepAccountAndPermanentlyDelete,
19628    /// The email address of the user is too long to be disabled.
19629    EmailAddressTooLongToBeDisabled,
19630    /// Cannot keep account of an invited user.
19631    CannotKeepInvitedUserAccount,
19632    /// Cannot retain team shares when the user's data is marked for deletion on their linked
19633    /// devices. The argument wipe_data should be set to `false`.
19634    CannotRetainSharesWhenDataWiped,
19635    /// The user's account must be kept in order to retain team shares. The argument keep_account
19636    /// should be set to `true`.
19637    CannotRetainSharesWhenNoAccountKept,
19638    /// Externally sharing files, folders, and links must be enabled in team settings in order to
19639    /// retain team shares for the user.
19640    CannotRetainSharesWhenTeamExternalSharingOff,
19641    /// Only a team admin, can convert this account to a Basic account.
19642    CannotKeepAccount,
19643    /// This user content is currently being held. To convert this member's account to a Basic
19644    /// account, you'll first need to remove them from the hold.
19645    CannotKeepAccountUnderLegalHold,
19646    /// To convert this member to a Basic account, they'll first need to sign in to Dropbox and
19647    /// agree to the terms of service.
19648    CannotKeepAccountRequiredToSignTos,
19649    /// Cannot permanently delete files and transfer the data to another user at the same time.
19650    CannotPermanentlyDeleteAndTransfer,
19651    /// This user is the active destination of an in-progress file transfer. Wait for the transfer
19652    /// to complete before removing this member.
19653    MemberIsTransferDestination,
19654    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19655    /// typically indicates that this SDK version is out of date.
19656    Other,
19657}
19658
19659impl<'de> ::serde::de::Deserialize<'de> for MembersRemoveError {
19660    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19661        // union deserializer
19662        use serde::de::{self, MapAccess, Visitor};
19663        struct EnumVisitor;
19664        impl<'de> Visitor<'de> for EnumVisitor {
19665            type Value = MembersRemoveError;
19666            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19667                f.write_str("a MembersRemoveError structure")
19668            }
19669            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19670                let tag: &str = match map.next_key()? {
19671                    Some(".tag") => map.next_value()?,
19672                    _ => return Err(de::Error::missing_field(".tag"))
19673                };
19674                let value = match tag {
19675                    "user_not_found" => MembersRemoveError::UserNotFound,
19676                    "user_not_in_team" => MembersRemoveError::UserNotInTeam,
19677                    "transfer_in_progress" => MembersRemoveError::TransferInProgress,
19678                    "already_transferred" => MembersRemoveError::AlreadyTransferred,
19679                    "already_transferred_or_deleted" => MembersRemoveError::AlreadyTransferredOrDeleted,
19680                    "removed_and_transfer_dest_should_differ" => MembersRemoveError::RemovedAndTransferDestShouldDiffer,
19681                    "removed_and_transfer_admin_should_differ" => MembersRemoveError::RemovedAndTransferAdminShouldDiffer,
19682                    "transfer_dest_user_not_found" => MembersRemoveError::TransferDestUserNotFound,
19683                    "transfer_dest_user_not_in_team" => MembersRemoveError::TransferDestUserNotInTeam,
19684                    "transfer_admin_user_not_in_team" => MembersRemoveError::TransferAdminUserNotInTeam,
19685                    "transfer_admin_user_not_found" => MembersRemoveError::TransferAdminUserNotFound,
19686                    "unspecified_transfer_admin_id" => MembersRemoveError::UnspecifiedTransferAdminId,
19687                    "transfer_admin_is_not_admin" => MembersRemoveError::TransferAdminIsNotAdmin,
19688                    "recipient_not_verified" => MembersRemoveError::RecipientNotVerified,
19689                    "remove_last_admin" => MembersRemoveError::RemoveLastAdmin,
19690                    "cannot_keep_account_and_transfer" => MembersRemoveError::CannotKeepAccountAndTransfer,
19691                    "cannot_keep_account_and_delete_data" => MembersRemoveError::CannotKeepAccountAndDeleteData,
19692                    "cannot_keep_account_and_permanently_delete" => MembersRemoveError::CannotKeepAccountAndPermanentlyDelete,
19693                    "email_address_too_long_to_be_disabled" => MembersRemoveError::EmailAddressTooLongToBeDisabled,
19694                    "cannot_keep_invited_user_account" => MembersRemoveError::CannotKeepInvitedUserAccount,
19695                    "cannot_retain_shares_when_data_wiped" => MembersRemoveError::CannotRetainSharesWhenDataWiped,
19696                    "cannot_retain_shares_when_no_account_kept" => MembersRemoveError::CannotRetainSharesWhenNoAccountKept,
19697                    "cannot_retain_shares_when_team_external_sharing_off" => MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff,
19698                    "cannot_keep_account" => MembersRemoveError::CannotKeepAccount,
19699                    "cannot_keep_account_under_legal_hold" => MembersRemoveError::CannotKeepAccountUnderLegalHold,
19700                    "cannot_keep_account_required_to_sign_tos" => MembersRemoveError::CannotKeepAccountRequiredToSignTos,
19701                    "cannot_permanently_delete_and_transfer" => MembersRemoveError::CannotPermanentlyDeleteAndTransfer,
19702                    "member_is_transfer_destination" => MembersRemoveError::MemberIsTransferDestination,
19703                    _ => MembersRemoveError::Other,
19704                };
19705                crate::eat_json_fields(&mut map)?;
19706                Ok(value)
19707            }
19708        }
19709        const VARIANTS: &[&str] = &["user_not_found",
19710                                    "user_not_in_team",
19711                                    "other",
19712                                    "transfer_in_progress",
19713                                    "already_transferred",
19714                                    "already_transferred_or_deleted",
19715                                    "removed_and_transfer_dest_should_differ",
19716                                    "removed_and_transfer_admin_should_differ",
19717                                    "transfer_dest_user_not_found",
19718                                    "transfer_dest_user_not_in_team",
19719                                    "transfer_admin_user_not_in_team",
19720                                    "transfer_admin_user_not_found",
19721                                    "unspecified_transfer_admin_id",
19722                                    "transfer_admin_is_not_admin",
19723                                    "recipient_not_verified",
19724                                    "remove_last_admin",
19725                                    "cannot_keep_account_and_transfer",
19726                                    "cannot_keep_account_and_delete_data",
19727                                    "cannot_keep_account_and_permanently_delete",
19728                                    "email_address_too_long_to_be_disabled",
19729                                    "cannot_keep_invited_user_account",
19730                                    "cannot_retain_shares_when_data_wiped",
19731                                    "cannot_retain_shares_when_no_account_kept",
19732                                    "cannot_retain_shares_when_team_external_sharing_off",
19733                                    "cannot_keep_account",
19734                                    "cannot_keep_account_under_legal_hold",
19735                                    "cannot_keep_account_required_to_sign_tos",
19736                                    "cannot_permanently_delete_and_transfer",
19737                                    "member_is_transfer_destination"];
19738        deserializer.deserialize_struct("MembersRemoveError", VARIANTS, EnumVisitor)
19739    }
19740}
19741
19742impl ::serde::ser::Serialize for MembersRemoveError {
19743    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19744        // union serializer
19745        use serde::ser::SerializeStruct;
19746        match self {
19747            MembersRemoveError::UserNotFound => {
19748                // unit
19749                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19750                s.serialize_field(".tag", "user_not_found")?;
19751                s.end()
19752            }
19753            MembersRemoveError::UserNotInTeam => {
19754                // unit
19755                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19756                s.serialize_field(".tag", "user_not_in_team")?;
19757                s.end()
19758            }
19759            MembersRemoveError::TransferInProgress => {
19760                // unit
19761                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19762                s.serialize_field(".tag", "transfer_in_progress")?;
19763                s.end()
19764            }
19765            MembersRemoveError::AlreadyTransferred => {
19766                // unit
19767                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19768                s.serialize_field(".tag", "already_transferred")?;
19769                s.end()
19770            }
19771            MembersRemoveError::AlreadyTransferredOrDeleted => {
19772                // unit
19773                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19774                s.serialize_field(".tag", "already_transferred_or_deleted")?;
19775                s.end()
19776            }
19777            MembersRemoveError::RemovedAndTransferDestShouldDiffer => {
19778                // unit
19779                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19780                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
19781                s.end()
19782            }
19783            MembersRemoveError::RemovedAndTransferAdminShouldDiffer => {
19784                // unit
19785                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19786                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
19787                s.end()
19788            }
19789            MembersRemoveError::TransferDestUserNotFound => {
19790                // unit
19791                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19792                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
19793                s.end()
19794            }
19795            MembersRemoveError::TransferDestUserNotInTeam => {
19796                // unit
19797                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19798                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
19799                s.end()
19800            }
19801            MembersRemoveError::TransferAdminUserNotInTeam => {
19802                // unit
19803                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19804                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
19805                s.end()
19806            }
19807            MembersRemoveError::TransferAdminUserNotFound => {
19808                // unit
19809                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19810                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
19811                s.end()
19812            }
19813            MembersRemoveError::UnspecifiedTransferAdminId => {
19814                // unit
19815                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19816                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
19817                s.end()
19818            }
19819            MembersRemoveError::TransferAdminIsNotAdmin => {
19820                // unit
19821                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19822                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
19823                s.end()
19824            }
19825            MembersRemoveError::RecipientNotVerified => {
19826                // unit
19827                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19828                s.serialize_field(".tag", "recipient_not_verified")?;
19829                s.end()
19830            }
19831            MembersRemoveError::RemoveLastAdmin => {
19832                // unit
19833                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19834                s.serialize_field(".tag", "remove_last_admin")?;
19835                s.end()
19836            }
19837            MembersRemoveError::CannotKeepAccountAndTransfer => {
19838                // unit
19839                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19840                s.serialize_field(".tag", "cannot_keep_account_and_transfer")?;
19841                s.end()
19842            }
19843            MembersRemoveError::CannotKeepAccountAndDeleteData => {
19844                // unit
19845                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19846                s.serialize_field(".tag", "cannot_keep_account_and_delete_data")?;
19847                s.end()
19848            }
19849            MembersRemoveError::CannotKeepAccountAndPermanentlyDelete => {
19850                // unit
19851                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19852                s.serialize_field(".tag", "cannot_keep_account_and_permanently_delete")?;
19853                s.end()
19854            }
19855            MembersRemoveError::EmailAddressTooLongToBeDisabled => {
19856                // unit
19857                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19858                s.serialize_field(".tag", "email_address_too_long_to_be_disabled")?;
19859                s.end()
19860            }
19861            MembersRemoveError::CannotKeepInvitedUserAccount => {
19862                // unit
19863                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19864                s.serialize_field(".tag", "cannot_keep_invited_user_account")?;
19865                s.end()
19866            }
19867            MembersRemoveError::CannotRetainSharesWhenDataWiped => {
19868                // unit
19869                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19870                s.serialize_field(".tag", "cannot_retain_shares_when_data_wiped")?;
19871                s.end()
19872            }
19873            MembersRemoveError::CannotRetainSharesWhenNoAccountKept => {
19874                // unit
19875                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19876                s.serialize_field(".tag", "cannot_retain_shares_when_no_account_kept")?;
19877                s.end()
19878            }
19879            MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff => {
19880                // unit
19881                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19882                s.serialize_field(".tag", "cannot_retain_shares_when_team_external_sharing_off")?;
19883                s.end()
19884            }
19885            MembersRemoveError::CannotKeepAccount => {
19886                // unit
19887                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19888                s.serialize_field(".tag", "cannot_keep_account")?;
19889                s.end()
19890            }
19891            MembersRemoveError::CannotKeepAccountUnderLegalHold => {
19892                // unit
19893                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19894                s.serialize_field(".tag", "cannot_keep_account_under_legal_hold")?;
19895                s.end()
19896            }
19897            MembersRemoveError::CannotKeepAccountRequiredToSignTos => {
19898                // unit
19899                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19900                s.serialize_field(".tag", "cannot_keep_account_required_to_sign_tos")?;
19901                s.end()
19902            }
19903            MembersRemoveError::CannotPermanentlyDeleteAndTransfer => {
19904                // unit
19905                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19906                s.serialize_field(".tag", "cannot_permanently_delete_and_transfer")?;
19907                s.end()
19908            }
19909            MembersRemoveError::MemberIsTransferDestination => {
19910                // unit
19911                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19912                s.serialize_field(".tag", "member_is_transfer_destination")?;
19913                s.end()
19914            }
19915            MembersRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19916        }
19917    }
19918}
19919
19920impl ::std::error::Error for MembersRemoveError {
19921}
19922
19923impl ::std::fmt::Display for MembersRemoveError {
19924    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19925        match self {
19926            MembersRemoveError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19927            MembersRemoveError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19928            MembersRemoveError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
19929            MembersRemoveError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
19930            MembersRemoveError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
19931            MembersRemoveError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
19932            MembersRemoveError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
19933            MembersRemoveError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
19934            MembersRemoveError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
19935            MembersRemoveError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
19936            MembersRemoveError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
19937            MembersRemoveError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
19938            MembersRemoveError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
19939            MembersRemoveError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
19940            MembersRemoveError::RemoveLastAdmin => f.write_str("The user is the last admin of the team, so it cannot be removed from it."),
19941            MembersRemoveError::CannotKeepAccountAndTransfer => f.write_str("Cannot keep account and transfer the data to another user at the same time."),
19942            MembersRemoveError::EmailAddressTooLongToBeDisabled => f.write_str("The email address of the user is too long to be disabled."),
19943            MembersRemoveError::CannotKeepInvitedUserAccount => f.write_str("Cannot keep account of an invited user."),
19944            MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff => f.write_str("Externally sharing files, folders, and links must be enabled in team settings in order to retain team shares for the user."),
19945            MembersRemoveError::CannotKeepAccount => f.write_str("Only a team admin, can convert this account to a Basic account."),
19946            MembersRemoveError::CannotKeepAccountUnderLegalHold => f.write_str("This user content is currently being held. To convert this member's account to a Basic account, you'll first need to remove them from the hold."),
19947            MembersRemoveError::CannotKeepAccountRequiredToSignTos => f.write_str("To convert this member to a Basic account, they'll first need to sign in to Dropbox and agree to the terms of service."),
19948            MembersRemoveError::CannotPermanentlyDeleteAndTransfer => f.write_str("Cannot permanently delete files and transfer the data to another user at the same time."),
19949            MembersRemoveError::MemberIsTransferDestination => f.write_str("This user is the active destination of an in-progress file transfer. Wait for the transfer to complete before removing this member."),
19950            _ => write!(f, "{:?}", *self),
19951        }
19952    }
19953}
19954
19955// union extends MembersTransferFilesError
19956impl From<MembersTransferFilesError> for MembersRemoveError {
19957    fn from(parent: MembersTransferFilesError) -> Self {
19958        match parent {
19959            MembersTransferFilesError::UserNotFound => MembersRemoveError::UserNotFound,
19960            MembersTransferFilesError::UserNotInTeam => MembersRemoveError::UserNotInTeam,
19961            MembersTransferFilesError::Other => MembersRemoveError::Other,
19962            MembersTransferFilesError::TransferInProgress => MembersRemoveError::TransferInProgress,
19963            MembersTransferFilesError::AlreadyTransferred => MembersRemoveError::AlreadyTransferred,
19964            MembersTransferFilesError::AlreadyTransferredOrDeleted => MembersRemoveError::AlreadyTransferredOrDeleted,
19965            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => MembersRemoveError::RemovedAndTransferDestShouldDiffer,
19966            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => MembersRemoveError::RemovedAndTransferAdminShouldDiffer,
19967            MembersTransferFilesError::TransferDestUserNotFound => MembersRemoveError::TransferDestUserNotFound,
19968            MembersTransferFilesError::TransferDestUserNotInTeam => MembersRemoveError::TransferDestUserNotInTeam,
19969            MembersTransferFilesError::TransferAdminUserNotInTeam => MembersRemoveError::TransferAdminUserNotInTeam,
19970            MembersTransferFilesError::TransferAdminUserNotFound => MembersRemoveError::TransferAdminUserNotFound,
19971            MembersTransferFilesError::UnspecifiedTransferAdminId => MembersRemoveError::UnspecifiedTransferAdminId,
19972            MembersTransferFilesError::TransferAdminIsNotAdmin => MembersRemoveError::TransferAdminIsNotAdmin,
19973            MembersTransferFilesError::RecipientNotVerified => MembersRemoveError::RecipientNotVerified,
19974        }
19975    }
19976}
19977
19978#[derive(Debug, Clone, PartialEq, Eq)]
19979#[non_exhaustive] // variants may be added in the future
19980pub enum MembersSendWelcomeError {
19981    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19982    /// this team.
19983    UserNotFound,
19984    /// The user is not a member of the team.
19985    UserNotInTeam,
19986    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19987    /// typically indicates that this SDK version is out of date.
19988    Other,
19989}
19990
19991impl<'de> ::serde::de::Deserialize<'de> for MembersSendWelcomeError {
19992    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19993        // union deserializer
19994        use serde::de::{self, MapAccess, Visitor};
19995        struct EnumVisitor;
19996        impl<'de> Visitor<'de> for EnumVisitor {
19997            type Value = MembersSendWelcomeError;
19998            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19999                f.write_str("a MembersSendWelcomeError structure")
20000            }
20001            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20002                let tag: &str = match map.next_key()? {
20003                    Some(".tag") => map.next_value()?,
20004                    _ => return Err(de::Error::missing_field(".tag"))
20005                };
20006                let value = match tag {
20007                    "user_not_found" => MembersSendWelcomeError::UserNotFound,
20008                    "user_not_in_team" => MembersSendWelcomeError::UserNotInTeam,
20009                    _ => MembersSendWelcomeError::Other,
20010                };
20011                crate::eat_json_fields(&mut map)?;
20012                Ok(value)
20013            }
20014        }
20015        const VARIANTS: &[&str] = &["user_not_found",
20016                                    "user_not_in_team",
20017                                    "other"];
20018        deserializer.deserialize_struct("MembersSendWelcomeError", VARIANTS, EnumVisitor)
20019    }
20020}
20021
20022impl ::serde::ser::Serialize for MembersSendWelcomeError {
20023    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20024        // union serializer
20025        use serde::ser::SerializeStruct;
20026        match self {
20027            MembersSendWelcomeError::UserNotFound => {
20028                // unit
20029                let mut s = serializer.serialize_struct("MembersSendWelcomeError", 1)?;
20030                s.serialize_field(".tag", "user_not_found")?;
20031                s.end()
20032            }
20033            MembersSendWelcomeError::UserNotInTeam => {
20034                // unit
20035                let mut s = serializer.serialize_struct("MembersSendWelcomeError", 1)?;
20036                s.serialize_field(".tag", "user_not_in_team")?;
20037                s.end()
20038            }
20039            MembersSendWelcomeError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20040        }
20041    }
20042}
20043
20044impl ::std::error::Error for MembersSendWelcomeError {
20045}
20046
20047impl ::std::fmt::Display for MembersSendWelcomeError {
20048    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20049        match self {
20050            MembersSendWelcomeError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20051            MembersSendWelcomeError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20052            _ => write!(f, "{:?}", *self),
20053        }
20054    }
20055}
20056
20057// union extends MemberSelectorError
20058impl From<MemberSelectorError> for MembersSendWelcomeError {
20059    fn from(parent: MemberSelectorError) -> Self {
20060        match parent {
20061            MemberSelectorError::UserNotFound => MembersSendWelcomeError::UserNotFound,
20062            MemberSelectorError::UserNotInTeam => MembersSendWelcomeError::UserNotInTeam,
20063        }
20064    }
20065}
20066/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
20067/// account.
20068#[derive(Debug, Clone, PartialEq, Eq)]
20069#[non_exhaustive] // structs may have more fields added in the future.
20070pub struct MembersSetPermissions2Arg {
20071    /// Identity of user whose role will be set.
20072    pub user: UserSelectorArg,
20073    /// The new roles for the member. Send empty list to make user member only. For now, only up to
20074    /// one role is allowed.
20075    pub new_roles: Option<Vec<TeamMemberRoleId>>,
20076}
20077
20078impl MembersSetPermissions2Arg {
20079    pub fn new(user: UserSelectorArg) -> Self {
20080        MembersSetPermissions2Arg {
20081            user,
20082            new_roles: None,
20083        }
20084    }
20085
20086    pub fn with_new_roles(mut self, value: Vec<TeamMemberRoleId>) -> Self {
20087        self.new_roles = Some(value);
20088        self
20089    }
20090}
20091
20092const MEMBERS_SET_PERMISSIONS2_ARG_FIELDS: &[&str] = &["user",
20093                                                       "new_roles"];
20094impl MembersSetPermissions2Arg {
20095    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20096        map: V,
20097    ) -> Result<MembersSetPermissions2Arg, V::Error> {
20098        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20099    }
20100
20101    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20102        mut map: V,
20103        optional: bool,
20104    ) -> Result<Option<MembersSetPermissions2Arg>, V::Error> {
20105        let mut field_user = None;
20106        let mut field_new_roles = None;
20107        let mut nothing = true;
20108        while let Some(key) = map.next_key::<&str>()? {
20109            nothing = false;
20110            match key {
20111                "user" => {
20112                    if field_user.is_some() {
20113                        return Err(::serde::de::Error::duplicate_field("user"));
20114                    }
20115                    field_user = Some(map.next_value()?);
20116                }
20117                "new_roles" => {
20118                    if field_new_roles.is_some() {
20119                        return Err(::serde::de::Error::duplicate_field("new_roles"));
20120                    }
20121                    field_new_roles = Some(map.next_value()?);
20122                }
20123                _ => {
20124                    // unknown field allowed and ignored
20125                    map.next_value::<::serde_json::Value>()?;
20126                }
20127            }
20128        }
20129        if optional && nothing {
20130            return Ok(None);
20131        }
20132        let result = MembersSetPermissions2Arg {
20133            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
20134            new_roles: field_new_roles.and_then(Option::flatten),
20135        };
20136        Ok(Some(result))
20137    }
20138
20139    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20140        &self,
20141        s: &mut S::SerializeStruct,
20142    ) -> Result<(), S::Error> {
20143        use serde::ser::SerializeStruct;
20144        s.serialize_field("user", &self.user)?;
20145        if let Some(val) = &self.new_roles {
20146            s.serialize_field("new_roles", val)?;
20147        }
20148        Ok(())
20149    }
20150}
20151
20152impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Arg {
20153    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20154        // struct deserializer
20155        use serde::de::{MapAccess, Visitor};
20156        struct StructVisitor;
20157        impl<'de> Visitor<'de> for StructVisitor {
20158            type Value = MembersSetPermissions2Arg;
20159            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20160                f.write_str("a MembersSetPermissions2Arg struct")
20161            }
20162            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20163                MembersSetPermissions2Arg::internal_deserialize(map)
20164            }
20165        }
20166        deserializer.deserialize_struct("MembersSetPermissions2Arg", MEMBERS_SET_PERMISSIONS2_ARG_FIELDS, StructVisitor)
20167    }
20168}
20169
20170impl ::serde::ser::Serialize for MembersSetPermissions2Arg {
20171    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20172        // struct serializer
20173        use serde::ser::SerializeStruct;
20174        let mut s = serializer.serialize_struct("MembersSetPermissions2Arg", 2)?;
20175        self.internal_serialize::<S>(&mut s)?;
20176        s.end()
20177    }
20178}
20179
20180#[derive(Debug, Clone, PartialEq, Eq)]
20181#[non_exhaustive] // variants may be added in the future
20182pub enum MembersSetPermissions2Error {
20183    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20184    /// this team.
20185    UserNotFound,
20186    /// Cannot remove the admin setting of the last admin.
20187    LastAdmin,
20188    /// The user is not a member of the team.
20189    UserNotInTeam,
20190    /// Cannot remove/grant permissions. This can happen if the team member is suspended.
20191    CannotSetPermissions,
20192    /// No matching role found. At least one of the provided new_roles does not exist on this team.
20193    RoleNotFound,
20194    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20195    /// typically indicates that this SDK version is out of date.
20196    Other,
20197}
20198
20199impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Error {
20200    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20201        // union deserializer
20202        use serde::de::{self, MapAccess, Visitor};
20203        struct EnumVisitor;
20204        impl<'de> Visitor<'de> for EnumVisitor {
20205            type Value = MembersSetPermissions2Error;
20206            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20207                f.write_str("a MembersSetPermissions2Error structure")
20208            }
20209            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20210                let tag: &str = match map.next_key()? {
20211                    Some(".tag") => map.next_value()?,
20212                    _ => return Err(de::Error::missing_field(".tag"))
20213                };
20214                let value = match tag {
20215                    "user_not_found" => MembersSetPermissions2Error::UserNotFound,
20216                    "last_admin" => MembersSetPermissions2Error::LastAdmin,
20217                    "user_not_in_team" => MembersSetPermissions2Error::UserNotInTeam,
20218                    "cannot_set_permissions" => MembersSetPermissions2Error::CannotSetPermissions,
20219                    "role_not_found" => MembersSetPermissions2Error::RoleNotFound,
20220                    _ => MembersSetPermissions2Error::Other,
20221                };
20222                crate::eat_json_fields(&mut map)?;
20223                Ok(value)
20224            }
20225        }
20226        const VARIANTS: &[&str] = &["user_not_found",
20227                                    "last_admin",
20228                                    "user_not_in_team",
20229                                    "cannot_set_permissions",
20230                                    "role_not_found",
20231                                    "other"];
20232        deserializer.deserialize_struct("MembersSetPermissions2Error", VARIANTS, EnumVisitor)
20233    }
20234}
20235
20236impl ::serde::ser::Serialize for MembersSetPermissions2Error {
20237    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20238        // union serializer
20239        use serde::ser::SerializeStruct;
20240        match self {
20241            MembersSetPermissions2Error::UserNotFound => {
20242                // unit
20243                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
20244                s.serialize_field(".tag", "user_not_found")?;
20245                s.end()
20246            }
20247            MembersSetPermissions2Error::LastAdmin => {
20248                // unit
20249                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
20250                s.serialize_field(".tag", "last_admin")?;
20251                s.end()
20252            }
20253            MembersSetPermissions2Error::UserNotInTeam => {
20254                // unit
20255                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
20256                s.serialize_field(".tag", "user_not_in_team")?;
20257                s.end()
20258            }
20259            MembersSetPermissions2Error::CannotSetPermissions => {
20260                // unit
20261                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
20262                s.serialize_field(".tag", "cannot_set_permissions")?;
20263                s.end()
20264            }
20265            MembersSetPermissions2Error::RoleNotFound => {
20266                // unit
20267                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
20268                s.serialize_field(".tag", "role_not_found")?;
20269                s.end()
20270            }
20271            MembersSetPermissions2Error::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20272        }
20273    }
20274}
20275
20276impl ::std::error::Error for MembersSetPermissions2Error {
20277}
20278
20279impl ::std::fmt::Display for MembersSetPermissions2Error {
20280    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20281        match self {
20282            MembersSetPermissions2Error::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20283            MembersSetPermissions2Error::LastAdmin => f.write_str("Cannot remove the admin setting of the last admin."),
20284            MembersSetPermissions2Error::UserNotInTeam => f.write_str("The user is not a member of the team."),
20285            MembersSetPermissions2Error::CannotSetPermissions => f.write_str("Cannot remove/grant permissions. This can happen if the team member is suspended."),
20286            MembersSetPermissions2Error::RoleNotFound => f.write_str("No matching role found. At least one of the provided new_roles does not exist on this team."),
20287            _ => write!(f, "{:?}", *self),
20288        }
20289    }
20290}
20291
20292// union extends UserSelectorError
20293impl From<UserSelectorError> for MembersSetPermissions2Error {
20294    fn from(parent: UserSelectorError) -> Self {
20295        match parent {
20296            UserSelectorError::UserNotFound => MembersSetPermissions2Error::UserNotFound,
20297        }
20298    }
20299}
20300#[derive(Debug, Clone, PartialEq, Eq)]
20301#[non_exhaustive] // structs may have more fields added in the future.
20302pub struct MembersSetPermissions2Result {
20303    /// The member ID of the user to which the change was applied.
20304    pub team_member_id: crate::types::team_common::TeamMemberId,
20305    /// The roles after the change. Empty in case the user become a non-admin.
20306    pub roles: Option<Vec<TeamMemberRole>>,
20307}
20308
20309impl MembersSetPermissions2Result {
20310    pub fn new(team_member_id: crate::types::team_common::TeamMemberId) -> Self {
20311        MembersSetPermissions2Result {
20312            team_member_id,
20313            roles: None,
20314        }
20315    }
20316
20317    pub fn with_roles(mut self, value: Vec<TeamMemberRole>) -> Self {
20318        self.roles = Some(value);
20319        self
20320    }
20321}
20322
20323const MEMBERS_SET_PERMISSIONS2_RESULT_FIELDS: &[&str] = &["team_member_id",
20324                                                          "roles"];
20325impl MembersSetPermissions2Result {
20326    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20327        map: V,
20328    ) -> Result<MembersSetPermissions2Result, V::Error> {
20329        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20330    }
20331
20332    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20333        mut map: V,
20334        optional: bool,
20335    ) -> Result<Option<MembersSetPermissions2Result>, V::Error> {
20336        let mut field_team_member_id = None;
20337        let mut field_roles = None;
20338        let mut nothing = true;
20339        while let Some(key) = map.next_key::<&str>()? {
20340            nothing = false;
20341            match key {
20342                "team_member_id" => {
20343                    if field_team_member_id.is_some() {
20344                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
20345                    }
20346                    field_team_member_id = Some(map.next_value()?);
20347                }
20348                "roles" => {
20349                    if field_roles.is_some() {
20350                        return Err(::serde::de::Error::duplicate_field("roles"));
20351                    }
20352                    field_roles = Some(map.next_value()?);
20353                }
20354                _ => {
20355                    // unknown field allowed and ignored
20356                    map.next_value::<::serde_json::Value>()?;
20357                }
20358            }
20359        }
20360        if optional && nothing {
20361            return Ok(None);
20362        }
20363        let result = MembersSetPermissions2Result {
20364            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
20365            roles: field_roles.and_then(Option::flatten),
20366        };
20367        Ok(Some(result))
20368    }
20369
20370    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20371        &self,
20372        s: &mut S::SerializeStruct,
20373    ) -> Result<(), S::Error> {
20374        use serde::ser::SerializeStruct;
20375        s.serialize_field("team_member_id", &self.team_member_id)?;
20376        if let Some(val) = &self.roles {
20377            s.serialize_field("roles", val)?;
20378        }
20379        Ok(())
20380    }
20381}
20382
20383impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Result {
20384    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20385        // struct deserializer
20386        use serde::de::{MapAccess, Visitor};
20387        struct StructVisitor;
20388        impl<'de> Visitor<'de> for StructVisitor {
20389            type Value = MembersSetPermissions2Result;
20390            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20391                f.write_str("a MembersSetPermissions2Result struct")
20392            }
20393            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20394                MembersSetPermissions2Result::internal_deserialize(map)
20395            }
20396        }
20397        deserializer.deserialize_struct("MembersSetPermissions2Result", MEMBERS_SET_PERMISSIONS2_RESULT_FIELDS, StructVisitor)
20398    }
20399}
20400
20401impl ::serde::ser::Serialize for MembersSetPermissions2Result {
20402    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20403        // struct serializer
20404        use serde::ser::SerializeStruct;
20405        let mut s = serializer.serialize_struct("MembersSetPermissions2Result", 2)?;
20406        self.internal_serialize::<S>(&mut s)?;
20407        s.end()
20408    }
20409}
20410
20411/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
20412/// account.
20413#[derive(Debug, Clone, PartialEq, Eq)]
20414#[non_exhaustive] // structs may have more fields added in the future.
20415pub struct MembersSetPermissionsArg {
20416    /// Identity of user whose role will be set.
20417    pub user: UserSelectorArg,
20418    /// The new role of the member.
20419    pub new_role: AdminTier,
20420}
20421
20422impl MembersSetPermissionsArg {
20423    pub fn new(user: UserSelectorArg, new_role: AdminTier) -> Self {
20424        MembersSetPermissionsArg {
20425            user,
20426            new_role,
20427        }
20428    }
20429}
20430
20431const MEMBERS_SET_PERMISSIONS_ARG_FIELDS: &[&str] = &["user",
20432                                                      "new_role"];
20433impl MembersSetPermissionsArg {
20434    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20435        map: V,
20436    ) -> Result<MembersSetPermissionsArg, V::Error> {
20437        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20438    }
20439
20440    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20441        mut map: V,
20442        optional: bool,
20443    ) -> Result<Option<MembersSetPermissionsArg>, V::Error> {
20444        let mut field_user = None;
20445        let mut field_new_role = None;
20446        let mut nothing = true;
20447        while let Some(key) = map.next_key::<&str>()? {
20448            nothing = false;
20449            match key {
20450                "user" => {
20451                    if field_user.is_some() {
20452                        return Err(::serde::de::Error::duplicate_field("user"));
20453                    }
20454                    field_user = Some(map.next_value()?);
20455                }
20456                "new_role" => {
20457                    if field_new_role.is_some() {
20458                        return Err(::serde::de::Error::duplicate_field("new_role"));
20459                    }
20460                    field_new_role = Some(map.next_value()?);
20461                }
20462                _ => {
20463                    // unknown field allowed and ignored
20464                    map.next_value::<::serde_json::Value>()?;
20465                }
20466            }
20467        }
20468        if optional && nothing {
20469            return Ok(None);
20470        }
20471        let result = MembersSetPermissionsArg {
20472            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
20473            new_role: field_new_role.ok_or_else(|| ::serde::de::Error::missing_field("new_role"))?,
20474        };
20475        Ok(Some(result))
20476    }
20477
20478    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20479        &self,
20480        s: &mut S::SerializeStruct,
20481    ) -> Result<(), S::Error> {
20482        use serde::ser::SerializeStruct;
20483        s.serialize_field("user", &self.user)?;
20484        s.serialize_field("new_role", &self.new_role)?;
20485        Ok(())
20486    }
20487}
20488
20489impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsArg {
20490    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20491        // struct deserializer
20492        use serde::de::{MapAccess, Visitor};
20493        struct StructVisitor;
20494        impl<'de> Visitor<'de> for StructVisitor {
20495            type Value = MembersSetPermissionsArg;
20496            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20497                f.write_str("a MembersSetPermissionsArg struct")
20498            }
20499            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20500                MembersSetPermissionsArg::internal_deserialize(map)
20501            }
20502        }
20503        deserializer.deserialize_struct("MembersSetPermissionsArg", MEMBERS_SET_PERMISSIONS_ARG_FIELDS, StructVisitor)
20504    }
20505}
20506
20507impl ::serde::ser::Serialize for MembersSetPermissionsArg {
20508    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20509        // struct serializer
20510        use serde::ser::SerializeStruct;
20511        let mut s = serializer.serialize_struct("MembersSetPermissionsArg", 2)?;
20512        self.internal_serialize::<S>(&mut s)?;
20513        s.end()
20514    }
20515}
20516
20517#[derive(Debug, Clone, PartialEq, Eq)]
20518#[non_exhaustive] // variants may be added in the future
20519pub enum MembersSetPermissionsError {
20520    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20521    /// this team.
20522    UserNotFound,
20523    /// Cannot remove the admin setting of the last admin.
20524    LastAdmin,
20525    /// The user is not a member of the team.
20526    UserNotInTeam,
20527    /// Cannot remove/grant permissions.
20528    CannotSetPermissions,
20529    /// Team is full. The organization has no available licenses.
20530    TeamLicenseLimit,
20531    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20532    /// typically indicates that this SDK version is out of date.
20533    Other,
20534}
20535
20536impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsError {
20537    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20538        // union deserializer
20539        use serde::de::{self, MapAccess, Visitor};
20540        struct EnumVisitor;
20541        impl<'de> Visitor<'de> for EnumVisitor {
20542            type Value = MembersSetPermissionsError;
20543            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20544                f.write_str("a MembersSetPermissionsError structure")
20545            }
20546            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20547                let tag: &str = match map.next_key()? {
20548                    Some(".tag") => map.next_value()?,
20549                    _ => return Err(de::Error::missing_field(".tag"))
20550                };
20551                let value = match tag {
20552                    "user_not_found" => MembersSetPermissionsError::UserNotFound,
20553                    "last_admin" => MembersSetPermissionsError::LastAdmin,
20554                    "user_not_in_team" => MembersSetPermissionsError::UserNotInTeam,
20555                    "cannot_set_permissions" => MembersSetPermissionsError::CannotSetPermissions,
20556                    "team_license_limit" => MembersSetPermissionsError::TeamLicenseLimit,
20557                    _ => MembersSetPermissionsError::Other,
20558                };
20559                crate::eat_json_fields(&mut map)?;
20560                Ok(value)
20561            }
20562        }
20563        const VARIANTS: &[&str] = &["user_not_found",
20564                                    "last_admin",
20565                                    "user_not_in_team",
20566                                    "cannot_set_permissions",
20567                                    "team_license_limit",
20568                                    "other"];
20569        deserializer.deserialize_struct("MembersSetPermissionsError", VARIANTS, EnumVisitor)
20570    }
20571}
20572
20573impl ::serde::ser::Serialize for MembersSetPermissionsError {
20574    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20575        // union serializer
20576        use serde::ser::SerializeStruct;
20577        match self {
20578            MembersSetPermissionsError::UserNotFound => {
20579                // unit
20580                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
20581                s.serialize_field(".tag", "user_not_found")?;
20582                s.end()
20583            }
20584            MembersSetPermissionsError::LastAdmin => {
20585                // unit
20586                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
20587                s.serialize_field(".tag", "last_admin")?;
20588                s.end()
20589            }
20590            MembersSetPermissionsError::UserNotInTeam => {
20591                // unit
20592                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
20593                s.serialize_field(".tag", "user_not_in_team")?;
20594                s.end()
20595            }
20596            MembersSetPermissionsError::CannotSetPermissions => {
20597                // unit
20598                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
20599                s.serialize_field(".tag", "cannot_set_permissions")?;
20600                s.end()
20601            }
20602            MembersSetPermissionsError::TeamLicenseLimit => {
20603                // unit
20604                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
20605                s.serialize_field(".tag", "team_license_limit")?;
20606                s.end()
20607            }
20608            MembersSetPermissionsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20609        }
20610    }
20611}
20612
20613impl ::std::error::Error for MembersSetPermissionsError {
20614}
20615
20616impl ::std::fmt::Display for MembersSetPermissionsError {
20617    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20618        match self {
20619            MembersSetPermissionsError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20620            MembersSetPermissionsError::LastAdmin => f.write_str("Cannot remove the admin setting of the last admin."),
20621            MembersSetPermissionsError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20622            MembersSetPermissionsError::CannotSetPermissions => f.write_str("Cannot remove/grant permissions."),
20623            MembersSetPermissionsError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
20624            _ => write!(f, "{:?}", *self),
20625        }
20626    }
20627}
20628
20629// union extends UserSelectorError
20630impl From<UserSelectorError> for MembersSetPermissionsError {
20631    fn from(parent: UserSelectorError) -> Self {
20632        match parent {
20633            UserSelectorError::UserNotFound => MembersSetPermissionsError::UserNotFound,
20634        }
20635    }
20636}
20637#[derive(Debug, Clone, PartialEq, Eq)]
20638#[non_exhaustive] // structs may have more fields added in the future.
20639pub struct MembersSetPermissionsResult {
20640    /// The member ID of the user to which the change was applied.
20641    pub team_member_id: crate::types::team_common::TeamMemberId,
20642    /// The role after the change.
20643    pub role: AdminTier,
20644}
20645
20646impl MembersSetPermissionsResult {
20647    pub fn new(team_member_id: crate::types::team_common::TeamMemberId, role: AdminTier) -> Self {
20648        MembersSetPermissionsResult {
20649            team_member_id,
20650            role,
20651        }
20652    }
20653}
20654
20655const MEMBERS_SET_PERMISSIONS_RESULT_FIELDS: &[&str] = &["team_member_id",
20656                                                         "role"];
20657impl MembersSetPermissionsResult {
20658    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20659        map: V,
20660    ) -> Result<MembersSetPermissionsResult, V::Error> {
20661        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20662    }
20663
20664    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20665        mut map: V,
20666        optional: bool,
20667    ) -> Result<Option<MembersSetPermissionsResult>, V::Error> {
20668        let mut field_team_member_id = None;
20669        let mut field_role = None;
20670        let mut nothing = true;
20671        while let Some(key) = map.next_key::<&str>()? {
20672            nothing = false;
20673            match key {
20674                "team_member_id" => {
20675                    if field_team_member_id.is_some() {
20676                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
20677                    }
20678                    field_team_member_id = Some(map.next_value()?);
20679                }
20680                "role" => {
20681                    if field_role.is_some() {
20682                        return Err(::serde::de::Error::duplicate_field("role"));
20683                    }
20684                    field_role = Some(map.next_value()?);
20685                }
20686                _ => {
20687                    // unknown field allowed and ignored
20688                    map.next_value::<::serde_json::Value>()?;
20689                }
20690            }
20691        }
20692        if optional && nothing {
20693            return Ok(None);
20694        }
20695        let result = MembersSetPermissionsResult {
20696            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
20697            role: field_role.ok_or_else(|| ::serde::de::Error::missing_field("role"))?,
20698        };
20699        Ok(Some(result))
20700    }
20701
20702    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20703        &self,
20704        s: &mut S::SerializeStruct,
20705    ) -> Result<(), S::Error> {
20706        use serde::ser::SerializeStruct;
20707        s.serialize_field("team_member_id", &self.team_member_id)?;
20708        s.serialize_field("role", &self.role)?;
20709        Ok(())
20710    }
20711}
20712
20713impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsResult {
20714    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20715        // struct deserializer
20716        use serde::de::{MapAccess, Visitor};
20717        struct StructVisitor;
20718        impl<'de> Visitor<'de> for StructVisitor {
20719            type Value = MembersSetPermissionsResult;
20720            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20721                f.write_str("a MembersSetPermissionsResult struct")
20722            }
20723            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20724                MembersSetPermissionsResult::internal_deserialize(map)
20725            }
20726        }
20727        deserializer.deserialize_struct("MembersSetPermissionsResult", MEMBERS_SET_PERMISSIONS_RESULT_FIELDS, StructVisitor)
20728    }
20729}
20730
20731impl ::serde::ser::Serialize for MembersSetPermissionsResult {
20732    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20733        // struct serializer
20734        use serde::ser::SerializeStruct;
20735        let mut s = serializer.serialize_struct("MembersSetPermissionsResult", 2)?;
20736        self.internal_serialize::<S>(&mut s)?;
20737        s.end()
20738    }
20739}
20740
20741/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
20742/// account. At least one of new_email, new_external_id, new_given_name, and/or new_surname must be
20743/// provided.
20744#[derive(Debug, Clone, PartialEq, Eq)]
20745#[non_exhaustive] // structs may have more fields added in the future.
20746pub struct MembersSetProfileArg {
20747    /// Identity of user whose profile will be set.
20748    pub user: UserSelectorArg,
20749    /// New email for member.
20750    pub new_email: Option<crate::types::common::EmailAddress>,
20751    /// New external ID for member.
20752    pub new_external_id: Option<crate::types::team_common::MemberExternalId>,
20753    /// New given name for member.
20754    pub new_given_name: Option<crate::types::common::OptionalNamePart>,
20755    /// New surname for member.
20756    pub new_surname: Option<crate::types::common::OptionalNamePart>,
20757    /// New persistent ID. This field only available to teams using persistent ID SAML
20758    /// configuration.
20759    pub new_persistent_id: Option<String>,
20760    /// New value for whether the user is a directory restricted user.
20761    pub new_is_directory_restricted: Option<bool>,
20762}
20763
20764impl MembersSetProfileArg {
20765    pub fn new(user: UserSelectorArg) -> Self {
20766        MembersSetProfileArg {
20767            user,
20768            new_email: None,
20769            new_external_id: None,
20770            new_given_name: None,
20771            new_surname: None,
20772            new_persistent_id: None,
20773            new_is_directory_restricted: None,
20774        }
20775    }
20776
20777    pub fn with_new_email(mut self, value: crate::types::common::EmailAddress) -> Self {
20778        self.new_email = Some(value);
20779        self
20780    }
20781
20782    pub fn with_new_external_id(
20783        mut self,
20784        value: crate::types::team_common::MemberExternalId,
20785    ) -> Self {
20786        self.new_external_id = Some(value);
20787        self
20788    }
20789
20790    pub fn with_new_given_name(mut self, value: crate::types::common::OptionalNamePart) -> Self {
20791        self.new_given_name = Some(value);
20792        self
20793    }
20794
20795    pub fn with_new_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
20796        self.new_surname = Some(value);
20797        self
20798    }
20799
20800    pub fn with_new_persistent_id(mut self, value: String) -> Self {
20801        self.new_persistent_id = Some(value);
20802        self
20803    }
20804
20805    pub fn with_new_is_directory_restricted(mut self, value: bool) -> Self {
20806        self.new_is_directory_restricted = Some(value);
20807        self
20808    }
20809}
20810
20811const MEMBERS_SET_PROFILE_ARG_FIELDS: &[&str] = &["user",
20812                                                  "new_email",
20813                                                  "new_external_id",
20814                                                  "new_given_name",
20815                                                  "new_surname",
20816                                                  "new_persistent_id",
20817                                                  "new_is_directory_restricted"];
20818impl MembersSetProfileArg {
20819    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20820        map: V,
20821    ) -> Result<MembersSetProfileArg, V::Error> {
20822        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20823    }
20824
20825    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20826        mut map: V,
20827        optional: bool,
20828    ) -> Result<Option<MembersSetProfileArg>, V::Error> {
20829        let mut field_user = None;
20830        let mut field_new_email = None;
20831        let mut field_new_external_id = None;
20832        let mut field_new_given_name = None;
20833        let mut field_new_surname = None;
20834        let mut field_new_persistent_id = None;
20835        let mut field_new_is_directory_restricted = None;
20836        let mut nothing = true;
20837        while let Some(key) = map.next_key::<&str>()? {
20838            nothing = false;
20839            match key {
20840                "user" => {
20841                    if field_user.is_some() {
20842                        return Err(::serde::de::Error::duplicate_field("user"));
20843                    }
20844                    field_user = Some(map.next_value()?);
20845                }
20846                "new_email" => {
20847                    if field_new_email.is_some() {
20848                        return Err(::serde::de::Error::duplicate_field("new_email"));
20849                    }
20850                    field_new_email = Some(map.next_value()?);
20851                }
20852                "new_external_id" => {
20853                    if field_new_external_id.is_some() {
20854                        return Err(::serde::de::Error::duplicate_field("new_external_id"));
20855                    }
20856                    field_new_external_id = Some(map.next_value()?);
20857                }
20858                "new_given_name" => {
20859                    if field_new_given_name.is_some() {
20860                        return Err(::serde::de::Error::duplicate_field("new_given_name"));
20861                    }
20862                    field_new_given_name = Some(map.next_value()?);
20863                }
20864                "new_surname" => {
20865                    if field_new_surname.is_some() {
20866                        return Err(::serde::de::Error::duplicate_field("new_surname"));
20867                    }
20868                    field_new_surname = Some(map.next_value()?);
20869                }
20870                "new_persistent_id" => {
20871                    if field_new_persistent_id.is_some() {
20872                        return Err(::serde::de::Error::duplicate_field("new_persistent_id"));
20873                    }
20874                    field_new_persistent_id = Some(map.next_value()?);
20875                }
20876                "new_is_directory_restricted" => {
20877                    if field_new_is_directory_restricted.is_some() {
20878                        return Err(::serde::de::Error::duplicate_field("new_is_directory_restricted"));
20879                    }
20880                    field_new_is_directory_restricted = Some(map.next_value()?);
20881                }
20882                _ => {
20883                    // unknown field allowed and ignored
20884                    map.next_value::<::serde_json::Value>()?;
20885                }
20886            }
20887        }
20888        if optional && nothing {
20889            return Ok(None);
20890        }
20891        let result = MembersSetProfileArg {
20892            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
20893            new_email: field_new_email.and_then(Option::flatten),
20894            new_external_id: field_new_external_id.and_then(Option::flatten),
20895            new_given_name: field_new_given_name.and_then(Option::flatten),
20896            new_surname: field_new_surname.and_then(Option::flatten),
20897            new_persistent_id: field_new_persistent_id.and_then(Option::flatten),
20898            new_is_directory_restricted: field_new_is_directory_restricted.and_then(Option::flatten),
20899        };
20900        Ok(Some(result))
20901    }
20902
20903    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20904        &self,
20905        s: &mut S::SerializeStruct,
20906    ) -> Result<(), S::Error> {
20907        use serde::ser::SerializeStruct;
20908        s.serialize_field("user", &self.user)?;
20909        if let Some(val) = &self.new_email {
20910            s.serialize_field("new_email", val)?;
20911        }
20912        if let Some(val) = &self.new_external_id {
20913            s.serialize_field("new_external_id", val)?;
20914        }
20915        if let Some(val) = &self.new_given_name {
20916            s.serialize_field("new_given_name", val)?;
20917        }
20918        if let Some(val) = &self.new_surname {
20919            s.serialize_field("new_surname", val)?;
20920        }
20921        if let Some(val) = &self.new_persistent_id {
20922            s.serialize_field("new_persistent_id", val)?;
20923        }
20924        if let Some(val) = &self.new_is_directory_restricted {
20925            s.serialize_field("new_is_directory_restricted", val)?;
20926        }
20927        Ok(())
20928    }
20929}
20930
20931impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfileArg {
20932    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20933        // struct deserializer
20934        use serde::de::{MapAccess, Visitor};
20935        struct StructVisitor;
20936        impl<'de> Visitor<'de> for StructVisitor {
20937            type Value = MembersSetProfileArg;
20938            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20939                f.write_str("a MembersSetProfileArg struct")
20940            }
20941            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20942                MembersSetProfileArg::internal_deserialize(map)
20943            }
20944        }
20945        deserializer.deserialize_struct("MembersSetProfileArg", MEMBERS_SET_PROFILE_ARG_FIELDS, StructVisitor)
20946    }
20947}
20948
20949impl ::serde::ser::Serialize for MembersSetProfileArg {
20950    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20951        // struct serializer
20952        use serde::ser::SerializeStruct;
20953        let mut s = serializer.serialize_struct("MembersSetProfileArg", 7)?;
20954        self.internal_serialize::<S>(&mut s)?;
20955        s.end()
20956    }
20957}
20958
20959#[derive(Debug, Clone, PartialEq, Eq)]
20960#[non_exhaustive] // variants may be added in the future
20961pub enum MembersSetProfileError {
20962    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20963    /// this team.
20964    UserNotFound,
20965    /// The user is not a member of the team.
20966    UserNotInTeam,
20967    /// It is unsafe to use both external_id and new_external_id.
20968    ExternalIdAndNewExternalIdUnsafe,
20969    /// None of new_email, new_given_name, new_surname, or new_external_id are specified.
20970    NoNewDataSpecified,
20971    /// Email is already reserved for another user.
20972    EmailReservedForOtherUser,
20973    /// The external ID is already in use by another team member.
20974    ExternalIdUsedByOtherUser,
20975    /// Modifying deleted users is not allowed.
20976    SetProfileDisallowed,
20977    /// Parameter new_email cannot be empty.
20978    ParamCannotBeEmpty,
20979    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
20980    /// contact Dropbox for more information.
20981    PersistentIdDisabled,
20982    /// The persistent ID is already in use by another team member.
20983    PersistentIdUsedByOtherUser,
20984    /// Directory Restrictions option is not available.
20985    DirectoryRestrictedOff,
20986    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20987    /// typically indicates that this SDK version is out of date.
20988    Other,
20989}
20990
20991impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfileError {
20992    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20993        // union deserializer
20994        use serde::de::{self, MapAccess, Visitor};
20995        struct EnumVisitor;
20996        impl<'de> Visitor<'de> for EnumVisitor {
20997            type Value = MembersSetProfileError;
20998            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20999                f.write_str("a MembersSetProfileError structure")
21000            }
21001            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21002                let tag: &str = match map.next_key()? {
21003                    Some(".tag") => map.next_value()?,
21004                    _ => return Err(de::Error::missing_field(".tag"))
21005                };
21006                let value = match tag {
21007                    "user_not_found" => MembersSetProfileError::UserNotFound,
21008                    "user_not_in_team" => MembersSetProfileError::UserNotInTeam,
21009                    "external_id_and_new_external_id_unsafe" => MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe,
21010                    "no_new_data_specified" => MembersSetProfileError::NoNewDataSpecified,
21011                    "email_reserved_for_other_user" => MembersSetProfileError::EmailReservedForOtherUser,
21012                    "external_id_used_by_other_user" => MembersSetProfileError::ExternalIdUsedByOtherUser,
21013                    "set_profile_disallowed" => MembersSetProfileError::SetProfileDisallowed,
21014                    "param_cannot_be_empty" => MembersSetProfileError::ParamCannotBeEmpty,
21015                    "persistent_id_disabled" => MembersSetProfileError::PersistentIdDisabled,
21016                    "persistent_id_used_by_other_user" => MembersSetProfileError::PersistentIdUsedByOtherUser,
21017                    "directory_restricted_off" => MembersSetProfileError::DirectoryRestrictedOff,
21018                    _ => MembersSetProfileError::Other,
21019                };
21020                crate::eat_json_fields(&mut map)?;
21021                Ok(value)
21022            }
21023        }
21024        const VARIANTS: &[&str] = &["user_not_found",
21025                                    "user_not_in_team",
21026                                    "external_id_and_new_external_id_unsafe",
21027                                    "no_new_data_specified",
21028                                    "email_reserved_for_other_user",
21029                                    "external_id_used_by_other_user",
21030                                    "set_profile_disallowed",
21031                                    "param_cannot_be_empty",
21032                                    "persistent_id_disabled",
21033                                    "persistent_id_used_by_other_user",
21034                                    "directory_restricted_off",
21035                                    "other"];
21036        deserializer.deserialize_struct("MembersSetProfileError", VARIANTS, EnumVisitor)
21037    }
21038}
21039
21040impl ::serde::ser::Serialize for MembersSetProfileError {
21041    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21042        // union serializer
21043        use serde::ser::SerializeStruct;
21044        match self {
21045            MembersSetProfileError::UserNotFound => {
21046                // unit
21047                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21048                s.serialize_field(".tag", "user_not_found")?;
21049                s.end()
21050            }
21051            MembersSetProfileError::UserNotInTeam => {
21052                // unit
21053                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21054                s.serialize_field(".tag", "user_not_in_team")?;
21055                s.end()
21056            }
21057            MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe => {
21058                // unit
21059                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21060                s.serialize_field(".tag", "external_id_and_new_external_id_unsafe")?;
21061                s.end()
21062            }
21063            MembersSetProfileError::NoNewDataSpecified => {
21064                // unit
21065                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21066                s.serialize_field(".tag", "no_new_data_specified")?;
21067                s.end()
21068            }
21069            MembersSetProfileError::EmailReservedForOtherUser => {
21070                // unit
21071                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21072                s.serialize_field(".tag", "email_reserved_for_other_user")?;
21073                s.end()
21074            }
21075            MembersSetProfileError::ExternalIdUsedByOtherUser => {
21076                // unit
21077                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21078                s.serialize_field(".tag", "external_id_used_by_other_user")?;
21079                s.end()
21080            }
21081            MembersSetProfileError::SetProfileDisallowed => {
21082                // unit
21083                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21084                s.serialize_field(".tag", "set_profile_disallowed")?;
21085                s.end()
21086            }
21087            MembersSetProfileError::ParamCannotBeEmpty => {
21088                // unit
21089                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21090                s.serialize_field(".tag", "param_cannot_be_empty")?;
21091                s.end()
21092            }
21093            MembersSetProfileError::PersistentIdDisabled => {
21094                // unit
21095                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21096                s.serialize_field(".tag", "persistent_id_disabled")?;
21097                s.end()
21098            }
21099            MembersSetProfileError::PersistentIdUsedByOtherUser => {
21100                // unit
21101                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21102                s.serialize_field(".tag", "persistent_id_used_by_other_user")?;
21103                s.end()
21104            }
21105            MembersSetProfileError::DirectoryRestrictedOff => {
21106                // unit
21107                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
21108                s.serialize_field(".tag", "directory_restricted_off")?;
21109                s.end()
21110            }
21111            MembersSetProfileError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21112        }
21113    }
21114}
21115
21116impl ::std::error::Error for MembersSetProfileError {
21117}
21118
21119impl ::std::fmt::Display for MembersSetProfileError {
21120    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21121        match self {
21122            MembersSetProfileError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21123            MembersSetProfileError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21124            MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe => f.write_str("It is unsafe to use both external_id and new_external_id."),
21125            MembersSetProfileError::NoNewDataSpecified => f.write_str("None of new_email, new_given_name, new_surname, or new_external_id are specified."),
21126            MembersSetProfileError::EmailReservedForOtherUser => f.write_str("Email is already reserved for another user."),
21127            MembersSetProfileError::ExternalIdUsedByOtherUser => f.write_str("The external ID is already in use by another team member."),
21128            MembersSetProfileError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
21129            MembersSetProfileError::ParamCannotBeEmpty => f.write_str("Parameter new_email cannot be empty."),
21130            MembersSetProfileError::PersistentIdDisabled => f.write_str("Persistent ID is only available to teams with persistent ID SAML configuration. Please contact Dropbox for more information."),
21131            MembersSetProfileError::PersistentIdUsedByOtherUser => f.write_str("The persistent ID is already in use by another team member."),
21132            MembersSetProfileError::DirectoryRestrictedOff => f.write_str("Directory Restrictions option is not available."),
21133            _ => write!(f, "{:?}", *self),
21134        }
21135    }
21136}
21137
21138// union extends MemberSelectorError
21139impl From<MemberSelectorError> for MembersSetProfileError {
21140    fn from(parent: MemberSelectorError) -> Self {
21141        match parent {
21142            MemberSelectorError::UserNotFound => MembersSetProfileError::UserNotFound,
21143            MemberSelectorError::UserNotInTeam => MembersSetProfileError::UserNotInTeam,
21144        }
21145    }
21146}
21147#[derive(Debug, Clone, PartialEq, Eq)]
21148#[non_exhaustive] // structs may have more fields added in the future.
21149pub struct MembersSetProfilePhotoArg {
21150    /// Identity of the user whose profile photo will be set.
21151    pub user: UserSelectorArg,
21152    /// Image to set as the member's new profile photo.
21153    pub photo: crate::types::account::PhotoSourceArg,
21154}
21155
21156impl MembersSetProfilePhotoArg {
21157    pub fn new(user: UserSelectorArg, photo: crate::types::account::PhotoSourceArg) -> Self {
21158        MembersSetProfilePhotoArg {
21159            user,
21160            photo,
21161        }
21162    }
21163}
21164
21165const MEMBERS_SET_PROFILE_PHOTO_ARG_FIELDS: &[&str] = &["user",
21166                                                        "photo"];
21167impl MembersSetProfilePhotoArg {
21168    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21169        map: V,
21170    ) -> Result<MembersSetProfilePhotoArg, V::Error> {
21171        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21172    }
21173
21174    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21175        mut map: V,
21176        optional: bool,
21177    ) -> Result<Option<MembersSetProfilePhotoArg>, V::Error> {
21178        let mut field_user = None;
21179        let mut field_photo = None;
21180        let mut nothing = true;
21181        while let Some(key) = map.next_key::<&str>()? {
21182            nothing = false;
21183            match key {
21184                "user" => {
21185                    if field_user.is_some() {
21186                        return Err(::serde::de::Error::duplicate_field("user"));
21187                    }
21188                    field_user = Some(map.next_value()?);
21189                }
21190                "photo" => {
21191                    if field_photo.is_some() {
21192                        return Err(::serde::de::Error::duplicate_field("photo"));
21193                    }
21194                    field_photo = Some(map.next_value()?);
21195                }
21196                _ => {
21197                    // unknown field allowed and ignored
21198                    map.next_value::<::serde_json::Value>()?;
21199                }
21200            }
21201        }
21202        if optional && nothing {
21203            return Ok(None);
21204        }
21205        let result = MembersSetProfilePhotoArg {
21206            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
21207            photo: field_photo.ok_or_else(|| ::serde::de::Error::missing_field("photo"))?,
21208        };
21209        Ok(Some(result))
21210    }
21211
21212    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21213        &self,
21214        s: &mut S::SerializeStruct,
21215    ) -> Result<(), S::Error> {
21216        use serde::ser::SerializeStruct;
21217        s.serialize_field("user", &self.user)?;
21218        s.serialize_field("photo", &self.photo)?;
21219        Ok(())
21220    }
21221}
21222
21223impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfilePhotoArg {
21224    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21225        // struct deserializer
21226        use serde::de::{MapAccess, Visitor};
21227        struct StructVisitor;
21228        impl<'de> Visitor<'de> for StructVisitor {
21229            type Value = MembersSetProfilePhotoArg;
21230            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21231                f.write_str("a MembersSetProfilePhotoArg struct")
21232            }
21233            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21234                MembersSetProfilePhotoArg::internal_deserialize(map)
21235            }
21236        }
21237        deserializer.deserialize_struct("MembersSetProfilePhotoArg", MEMBERS_SET_PROFILE_PHOTO_ARG_FIELDS, StructVisitor)
21238    }
21239}
21240
21241impl ::serde::ser::Serialize for MembersSetProfilePhotoArg {
21242    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21243        // struct serializer
21244        use serde::ser::SerializeStruct;
21245        let mut s = serializer.serialize_struct("MembersSetProfilePhotoArg", 2)?;
21246        self.internal_serialize::<S>(&mut s)?;
21247        s.end()
21248    }
21249}
21250
21251#[derive(Debug, Clone, PartialEq, Eq)]
21252#[non_exhaustive] // variants may be added in the future
21253pub enum MembersSetProfilePhotoError {
21254    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
21255    /// this team.
21256    UserNotFound,
21257    /// The user is not a member of the team.
21258    UserNotInTeam,
21259    /// Modifying deleted users is not allowed.
21260    SetProfileDisallowed,
21261    PhotoError(crate::types::account::SetProfilePhotoError),
21262    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21263    /// typically indicates that this SDK version is out of date.
21264    Other,
21265}
21266
21267impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfilePhotoError {
21268    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21269        // union deserializer
21270        use serde::de::{self, MapAccess, Visitor};
21271        struct EnumVisitor;
21272        impl<'de> Visitor<'de> for EnumVisitor {
21273            type Value = MembersSetProfilePhotoError;
21274            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21275                f.write_str("a MembersSetProfilePhotoError structure")
21276            }
21277            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21278                let tag: &str = match map.next_key()? {
21279                    Some(".tag") => map.next_value()?,
21280                    _ => return Err(de::Error::missing_field(".tag"))
21281                };
21282                let value = match tag {
21283                    "user_not_found" => MembersSetProfilePhotoError::UserNotFound,
21284                    "user_not_in_team" => MembersSetProfilePhotoError::UserNotInTeam,
21285                    "set_profile_disallowed" => MembersSetProfilePhotoError::SetProfileDisallowed,
21286                    "photo_error" => {
21287                        match map.next_key()? {
21288                            Some("photo_error") => MembersSetProfilePhotoError::PhotoError(map.next_value()?),
21289                            None => return Err(de::Error::missing_field("photo_error")),
21290                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21291                        }
21292                    }
21293                    _ => MembersSetProfilePhotoError::Other,
21294                };
21295                crate::eat_json_fields(&mut map)?;
21296                Ok(value)
21297            }
21298        }
21299        const VARIANTS: &[&str] = &["user_not_found",
21300                                    "user_not_in_team",
21301                                    "set_profile_disallowed",
21302                                    "photo_error",
21303                                    "other"];
21304        deserializer.deserialize_struct("MembersSetProfilePhotoError", VARIANTS, EnumVisitor)
21305    }
21306}
21307
21308impl ::serde::ser::Serialize for MembersSetProfilePhotoError {
21309    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21310        // union serializer
21311        use serde::ser::SerializeStruct;
21312        match self {
21313            MembersSetProfilePhotoError::UserNotFound => {
21314                // unit
21315                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
21316                s.serialize_field(".tag", "user_not_found")?;
21317                s.end()
21318            }
21319            MembersSetProfilePhotoError::UserNotInTeam => {
21320                // unit
21321                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
21322                s.serialize_field(".tag", "user_not_in_team")?;
21323                s.end()
21324            }
21325            MembersSetProfilePhotoError::SetProfileDisallowed => {
21326                // unit
21327                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
21328                s.serialize_field(".tag", "set_profile_disallowed")?;
21329                s.end()
21330            }
21331            MembersSetProfilePhotoError::PhotoError(x) => {
21332                // union or polymporphic struct
21333                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 2)?;
21334                s.serialize_field(".tag", "photo_error")?;
21335                s.serialize_field("photo_error", x)?;
21336                s.end()
21337            }
21338            MembersSetProfilePhotoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21339        }
21340    }
21341}
21342
21343impl ::std::error::Error for MembersSetProfilePhotoError {
21344    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
21345        match self {
21346            MembersSetProfilePhotoError::PhotoError(inner) => Some(inner),
21347            _ => None,
21348        }
21349    }
21350}
21351
21352impl ::std::fmt::Display for MembersSetProfilePhotoError {
21353    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21354        match self {
21355            MembersSetProfilePhotoError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21356            MembersSetProfilePhotoError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21357            MembersSetProfilePhotoError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
21358            MembersSetProfilePhotoError::PhotoError(inner) => write!(f, "MembersSetProfilePhotoError: {}", inner),
21359            _ => write!(f, "{:?}", *self),
21360        }
21361    }
21362}
21363
21364// union extends MemberSelectorError
21365impl From<MemberSelectorError> for MembersSetProfilePhotoError {
21366    fn from(parent: MemberSelectorError) -> Self {
21367        match parent {
21368            MemberSelectorError::UserNotFound => MembersSetProfilePhotoError::UserNotFound,
21369            MemberSelectorError::UserNotInTeam => MembersSetProfilePhotoError::UserNotInTeam,
21370        }
21371    }
21372}
21373#[derive(Debug, Clone, PartialEq, Eq)]
21374#[non_exhaustive] // variants may be added in the future
21375pub enum MembersSuspendError {
21376    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
21377    /// this team.
21378    UserNotFound,
21379    /// The user is not a member of the team.
21380    UserNotInTeam,
21381    /// The user is not active, so it cannot be suspended.
21382    SuspendInactiveUser,
21383    /// The user is the last admin of the team, so it cannot be suspended.
21384    SuspendLastAdmin,
21385    /// Team is full. The organization has no available licenses.
21386    TeamLicenseLimit,
21387    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21388    /// typically indicates that this SDK version is out of date.
21389    Other,
21390}
21391
21392impl<'de> ::serde::de::Deserialize<'de> for MembersSuspendError {
21393    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21394        // union deserializer
21395        use serde::de::{self, MapAccess, Visitor};
21396        struct EnumVisitor;
21397        impl<'de> Visitor<'de> for EnumVisitor {
21398            type Value = MembersSuspendError;
21399            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21400                f.write_str("a MembersSuspendError structure")
21401            }
21402            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21403                let tag: &str = match map.next_key()? {
21404                    Some(".tag") => map.next_value()?,
21405                    _ => return Err(de::Error::missing_field(".tag"))
21406                };
21407                let value = match tag {
21408                    "user_not_found" => MembersSuspendError::UserNotFound,
21409                    "user_not_in_team" => MembersSuspendError::UserNotInTeam,
21410                    "suspend_inactive_user" => MembersSuspendError::SuspendInactiveUser,
21411                    "suspend_last_admin" => MembersSuspendError::SuspendLastAdmin,
21412                    "team_license_limit" => MembersSuspendError::TeamLicenseLimit,
21413                    _ => MembersSuspendError::Other,
21414                };
21415                crate::eat_json_fields(&mut map)?;
21416                Ok(value)
21417            }
21418        }
21419        const VARIANTS: &[&str] = &["user_not_found",
21420                                    "user_not_in_team",
21421                                    "other",
21422                                    "suspend_inactive_user",
21423                                    "suspend_last_admin",
21424                                    "team_license_limit"];
21425        deserializer.deserialize_struct("MembersSuspendError", VARIANTS, EnumVisitor)
21426    }
21427}
21428
21429impl ::serde::ser::Serialize for MembersSuspendError {
21430    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21431        // union serializer
21432        use serde::ser::SerializeStruct;
21433        match self {
21434            MembersSuspendError::UserNotFound => {
21435                // unit
21436                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
21437                s.serialize_field(".tag", "user_not_found")?;
21438                s.end()
21439            }
21440            MembersSuspendError::UserNotInTeam => {
21441                // unit
21442                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
21443                s.serialize_field(".tag", "user_not_in_team")?;
21444                s.end()
21445            }
21446            MembersSuspendError::SuspendInactiveUser => {
21447                // unit
21448                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
21449                s.serialize_field(".tag", "suspend_inactive_user")?;
21450                s.end()
21451            }
21452            MembersSuspendError::SuspendLastAdmin => {
21453                // unit
21454                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
21455                s.serialize_field(".tag", "suspend_last_admin")?;
21456                s.end()
21457            }
21458            MembersSuspendError::TeamLicenseLimit => {
21459                // unit
21460                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
21461                s.serialize_field(".tag", "team_license_limit")?;
21462                s.end()
21463            }
21464            MembersSuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21465        }
21466    }
21467}
21468
21469impl ::std::error::Error for MembersSuspendError {
21470}
21471
21472impl ::std::fmt::Display for MembersSuspendError {
21473    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21474        match self {
21475            MembersSuspendError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21476            MembersSuspendError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21477            MembersSuspendError::SuspendInactiveUser => f.write_str("The user is not active, so it cannot be suspended."),
21478            MembersSuspendError::SuspendLastAdmin => f.write_str("The user is the last admin of the team, so it cannot be suspended."),
21479            MembersSuspendError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
21480            _ => write!(f, "{:?}", *self),
21481        }
21482    }
21483}
21484
21485// union extends MembersDeactivateError
21486impl From<MembersDeactivateError> for MembersSuspendError {
21487    fn from(parent: MembersDeactivateError) -> Self {
21488        match parent {
21489            MembersDeactivateError::UserNotFound => MembersSuspendError::UserNotFound,
21490            MembersDeactivateError::UserNotInTeam => MembersSuspendError::UserNotInTeam,
21491            MembersDeactivateError::Other => MembersSuspendError::Other,
21492        }
21493    }
21494}
21495#[derive(Debug, Clone, PartialEq, Eq)]
21496#[non_exhaustive] // variants may be added in the future
21497pub enum MembersTransferFilesError {
21498    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
21499    /// this team.
21500    UserNotFound,
21501    /// The user is not a member of the team.
21502    UserNotInTeam,
21503    /// Cannot permanently delete files while it's being transferred.
21504    TransferInProgress,
21505    /// Cannot permanently delete files that have already been transferred.
21506    AlreadyTransferred,
21507    /// Cannot permanently delete files that have already been transferred or deleted.
21508    AlreadyTransferredOrDeleted,
21509    /// Expected removed user and transfer_dest user to be different.
21510    RemovedAndTransferDestShouldDiffer,
21511    /// Expected removed user and transfer_admin user to be different.
21512    RemovedAndTransferAdminShouldDiffer,
21513    /// No matching user found for the argument transfer_dest_id.
21514    TransferDestUserNotFound,
21515    /// The provided transfer_dest_id does not exist on this team.
21516    TransferDestUserNotInTeam,
21517    /// The provided transfer_admin_id does not exist on this team.
21518    TransferAdminUserNotInTeam,
21519    /// No matching user found for the argument transfer_admin_id.
21520    TransferAdminUserNotFound,
21521    /// The transfer_admin_id argument must be provided when file transfer is requested.
21522    UnspecifiedTransferAdminId,
21523    /// Specified transfer_admin user is not a team admin.
21524    TransferAdminIsNotAdmin,
21525    /// The recipient user's email is not verified.
21526    RecipientNotVerified,
21527    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21528    /// typically indicates that this SDK version is out of date.
21529    Other,
21530}
21531
21532impl<'de> ::serde::de::Deserialize<'de> for MembersTransferFilesError {
21533    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21534        // union deserializer
21535        use serde::de::{self, MapAccess, Visitor};
21536        struct EnumVisitor;
21537        impl<'de> Visitor<'de> for EnumVisitor {
21538            type Value = MembersTransferFilesError;
21539            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21540                f.write_str("a MembersTransferFilesError structure")
21541            }
21542            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21543                let tag: &str = match map.next_key()? {
21544                    Some(".tag") => map.next_value()?,
21545                    _ => return Err(de::Error::missing_field(".tag"))
21546                };
21547                let value = match tag {
21548                    "user_not_found" => MembersTransferFilesError::UserNotFound,
21549                    "user_not_in_team" => MembersTransferFilesError::UserNotInTeam,
21550                    "transfer_in_progress" => MembersTransferFilesError::TransferInProgress,
21551                    "already_transferred" => MembersTransferFilesError::AlreadyTransferred,
21552                    "already_transferred_or_deleted" => MembersTransferFilesError::AlreadyTransferredOrDeleted,
21553                    "removed_and_transfer_dest_should_differ" => MembersTransferFilesError::RemovedAndTransferDestShouldDiffer,
21554                    "removed_and_transfer_admin_should_differ" => MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer,
21555                    "transfer_dest_user_not_found" => MembersTransferFilesError::TransferDestUserNotFound,
21556                    "transfer_dest_user_not_in_team" => MembersTransferFilesError::TransferDestUserNotInTeam,
21557                    "transfer_admin_user_not_in_team" => MembersTransferFilesError::TransferAdminUserNotInTeam,
21558                    "transfer_admin_user_not_found" => MembersTransferFilesError::TransferAdminUserNotFound,
21559                    "unspecified_transfer_admin_id" => MembersTransferFilesError::UnspecifiedTransferAdminId,
21560                    "transfer_admin_is_not_admin" => MembersTransferFilesError::TransferAdminIsNotAdmin,
21561                    "recipient_not_verified" => MembersTransferFilesError::RecipientNotVerified,
21562                    _ => MembersTransferFilesError::Other,
21563                };
21564                crate::eat_json_fields(&mut map)?;
21565                Ok(value)
21566            }
21567        }
21568        const VARIANTS: &[&str] = &["user_not_found",
21569                                    "user_not_in_team",
21570                                    "other",
21571                                    "transfer_in_progress",
21572                                    "already_transferred",
21573                                    "already_transferred_or_deleted",
21574                                    "removed_and_transfer_dest_should_differ",
21575                                    "removed_and_transfer_admin_should_differ",
21576                                    "transfer_dest_user_not_found",
21577                                    "transfer_dest_user_not_in_team",
21578                                    "transfer_admin_user_not_in_team",
21579                                    "transfer_admin_user_not_found",
21580                                    "unspecified_transfer_admin_id",
21581                                    "transfer_admin_is_not_admin",
21582                                    "recipient_not_verified"];
21583        deserializer.deserialize_struct("MembersTransferFilesError", VARIANTS, EnumVisitor)
21584    }
21585}
21586
21587impl ::serde::ser::Serialize for MembersTransferFilesError {
21588    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21589        // union serializer
21590        use serde::ser::SerializeStruct;
21591        match self {
21592            MembersTransferFilesError::UserNotFound => {
21593                // unit
21594                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21595                s.serialize_field(".tag", "user_not_found")?;
21596                s.end()
21597            }
21598            MembersTransferFilesError::UserNotInTeam => {
21599                // unit
21600                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21601                s.serialize_field(".tag", "user_not_in_team")?;
21602                s.end()
21603            }
21604            MembersTransferFilesError::TransferInProgress => {
21605                // unit
21606                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21607                s.serialize_field(".tag", "transfer_in_progress")?;
21608                s.end()
21609            }
21610            MembersTransferFilesError::AlreadyTransferred => {
21611                // unit
21612                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21613                s.serialize_field(".tag", "already_transferred")?;
21614                s.end()
21615            }
21616            MembersTransferFilesError::AlreadyTransferredOrDeleted => {
21617                // unit
21618                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21619                s.serialize_field(".tag", "already_transferred_or_deleted")?;
21620                s.end()
21621            }
21622            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => {
21623                // unit
21624                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21625                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
21626                s.end()
21627            }
21628            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => {
21629                // unit
21630                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21631                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
21632                s.end()
21633            }
21634            MembersTransferFilesError::TransferDestUserNotFound => {
21635                // unit
21636                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21637                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
21638                s.end()
21639            }
21640            MembersTransferFilesError::TransferDestUserNotInTeam => {
21641                // unit
21642                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21643                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
21644                s.end()
21645            }
21646            MembersTransferFilesError::TransferAdminUserNotInTeam => {
21647                // unit
21648                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21649                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
21650                s.end()
21651            }
21652            MembersTransferFilesError::TransferAdminUserNotFound => {
21653                // unit
21654                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21655                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
21656                s.end()
21657            }
21658            MembersTransferFilesError::UnspecifiedTransferAdminId => {
21659                // unit
21660                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21661                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
21662                s.end()
21663            }
21664            MembersTransferFilesError::TransferAdminIsNotAdmin => {
21665                // unit
21666                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21667                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
21668                s.end()
21669            }
21670            MembersTransferFilesError::RecipientNotVerified => {
21671                // unit
21672                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
21673                s.serialize_field(".tag", "recipient_not_verified")?;
21674                s.end()
21675            }
21676            MembersTransferFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21677        }
21678    }
21679}
21680
21681impl ::std::error::Error for MembersTransferFilesError {
21682}
21683
21684impl ::std::fmt::Display for MembersTransferFilesError {
21685    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21686        match self {
21687            MembersTransferFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21688            MembersTransferFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21689            MembersTransferFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
21690            MembersTransferFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
21691            MembersTransferFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
21692            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
21693            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
21694            MembersTransferFilesError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
21695            MembersTransferFilesError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
21696            MembersTransferFilesError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
21697            MembersTransferFilesError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
21698            MembersTransferFilesError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
21699            MembersTransferFilesError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
21700            MembersTransferFilesError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
21701            _ => write!(f, "{:?}", *self),
21702        }
21703    }
21704}
21705
21706// union extends MembersPermanentlyDeleteFilesError
21707impl From<MembersPermanentlyDeleteFilesError> for MembersTransferFilesError {
21708    fn from(parent: MembersPermanentlyDeleteFilesError) -> Self {
21709        match parent {
21710            MembersPermanentlyDeleteFilesError::UserNotFound => MembersTransferFilesError::UserNotFound,
21711            MembersPermanentlyDeleteFilesError::UserNotInTeam => MembersTransferFilesError::UserNotInTeam,
21712            MembersPermanentlyDeleteFilesError::Other => MembersTransferFilesError::Other,
21713            MembersPermanentlyDeleteFilesError::TransferInProgress => MembersTransferFilesError::TransferInProgress,
21714            MembersPermanentlyDeleteFilesError::AlreadyTransferred => MembersTransferFilesError::AlreadyTransferred,
21715            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => MembersTransferFilesError::AlreadyTransferredOrDeleted,
21716        }
21717    }
21718}
21719#[derive(Debug, Clone, PartialEq, Eq)]
21720#[non_exhaustive] // variants may be added in the future
21721pub enum MembersTransferFormerMembersFilesError {
21722    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
21723    /// this team.
21724    UserNotFound,
21725    /// The user is not a member of the team.
21726    UserNotInTeam,
21727    /// Cannot permanently delete files while it's being transferred.
21728    TransferInProgress,
21729    /// Cannot permanently delete files that have already been transferred.
21730    AlreadyTransferred,
21731    /// Cannot permanently delete files that have already been transferred or deleted.
21732    AlreadyTransferredOrDeleted,
21733    /// Expected removed user and transfer_dest user to be different.
21734    RemovedAndTransferDestShouldDiffer,
21735    /// Expected removed user and transfer_admin user to be different.
21736    RemovedAndTransferAdminShouldDiffer,
21737    /// No matching user found for the argument transfer_dest_id.
21738    TransferDestUserNotFound,
21739    /// The provided transfer_dest_id does not exist on this team.
21740    TransferDestUserNotInTeam,
21741    /// The provided transfer_admin_id does not exist on this team.
21742    TransferAdminUserNotInTeam,
21743    /// No matching user found for the argument transfer_admin_id.
21744    TransferAdminUserNotFound,
21745    /// The transfer_admin_id argument must be provided when file transfer is requested.
21746    UnspecifiedTransferAdminId,
21747    /// Specified transfer_admin user is not a team admin.
21748    TransferAdminIsNotAdmin,
21749    /// The recipient user's email is not verified.
21750    RecipientNotVerified,
21751    /// The user's data is being transferred. Please wait some time before retrying.
21752    UserDataIsBeingTransferred,
21753    /// No matching removed user found for the argument user.
21754    UserNotRemoved,
21755    /// User files aren't transferable anymore.
21756    UserDataCannotBeTransferred,
21757    /// User's data has already been transferred to another user.
21758    UserDataAlreadyTransferred,
21759    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21760    /// typically indicates that this SDK version is out of date.
21761    Other,
21762}
21763
21764impl<'de> ::serde::de::Deserialize<'de> for MembersTransferFormerMembersFilesError {
21765    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21766        // union deserializer
21767        use serde::de::{self, MapAccess, Visitor};
21768        struct EnumVisitor;
21769        impl<'de> Visitor<'de> for EnumVisitor {
21770            type Value = MembersTransferFormerMembersFilesError;
21771            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21772                f.write_str("a MembersTransferFormerMembersFilesError structure")
21773            }
21774            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21775                let tag: &str = match map.next_key()? {
21776                    Some(".tag") => map.next_value()?,
21777                    _ => return Err(de::Error::missing_field(".tag"))
21778                };
21779                let value = match tag {
21780                    "user_not_found" => MembersTransferFormerMembersFilesError::UserNotFound,
21781                    "user_not_in_team" => MembersTransferFormerMembersFilesError::UserNotInTeam,
21782                    "transfer_in_progress" => MembersTransferFormerMembersFilesError::TransferInProgress,
21783                    "already_transferred" => MembersTransferFormerMembersFilesError::AlreadyTransferred,
21784                    "already_transferred_or_deleted" => MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted,
21785                    "removed_and_transfer_dest_should_differ" => MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer,
21786                    "removed_and_transfer_admin_should_differ" => MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer,
21787                    "transfer_dest_user_not_found" => MembersTransferFormerMembersFilesError::TransferDestUserNotFound,
21788                    "transfer_dest_user_not_in_team" => MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam,
21789                    "transfer_admin_user_not_in_team" => MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam,
21790                    "transfer_admin_user_not_found" => MembersTransferFormerMembersFilesError::TransferAdminUserNotFound,
21791                    "unspecified_transfer_admin_id" => MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId,
21792                    "transfer_admin_is_not_admin" => MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin,
21793                    "recipient_not_verified" => MembersTransferFormerMembersFilesError::RecipientNotVerified,
21794                    "user_data_is_being_transferred" => MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred,
21795                    "user_not_removed" => MembersTransferFormerMembersFilesError::UserNotRemoved,
21796                    "user_data_cannot_be_transferred" => MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred,
21797                    "user_data_already_transferred" => MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred,
21798                    _ => MembersTransferFormerMembersFilesError::Other,
21799                };
21800                crate::eat_json_fields(&mut map)?;
21801                Ok(value)
21802            }
21803        }
21804        const VARIANTS: &[&str] = &["user_not_found",
21805                                    "user_not_in_team",
21806                                    "other",
21807                                    "transfer_in_progress",
21808                                    "already_transferred",
21809                                    "already_transferred_or_deleted",
21810                                    "removed_and_transfer_dest_should_differ",
21811                                    "removed_and_transfer_admin_should_differ",
21812                                    "transfer_dest_user_not_found",
21813                                    "transfer_dest_user_not_in_team",
21814                                    "transfer_admin_user_not_in_team",
21815                                    "transfer_admin_user_not_found",
21816                                    "unspecified_transfer_admin_id",
21817                                    "transfer_admin_is_not_admin",
21818                                    "recipient_not_verified",
21819                                    "user_data_is_being_transferred",
21820                                    "user_not_removed",
21821                                    "user_data_cannot_be_transferred",
21822                                    "user_data_already_transferred"];
21823        deserializer.deserialize_struct("MembersTransferFormerMembersFilesError", VARIANTS, EnumVisitor)
21824    }
21825}
21826
21827impl ::serde::ser::Serialize for MembersTransferFormerMembersFilesError {
21828    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21829        // union serializer
21830        use serde::ser::SerializeStruct;
21831        match self {
21832            MembersTransferFormerMembersFilesError::UserNotFound => {
21833                // unit
21834                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21835                s.serialize_field(".tag", "user_not_found")?;
21836                s.end()
21837            }
21838            MembersTransferFormerMembersFilesError::UserNotInTeam => {
21839                // unit
21840                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21841                s.serialize_field(".tag", "user_not_in_team")?;
21842                s.end()
21843            }
21844            MembersTransferFormerMembersFilesError::TransferInProgress => {
21845                // unit
21846                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21847                s.serialize_field(".tag", "transfer_in_progress")?;
21848                s.end()
21849            }
21850            MembersTransferFormerMembersFilesError::AlreadyTransferred => {
21851                // unit
21852                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21853                s.serialize_field(".tag", "already_transferred")?;
21854                s.end()
21855            }
21856            MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted => {
21857                // unit
21858                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21859                s.serialize_field(".tag", "already_transferred_or_deleted")?;
21860                s.end()
21861            }
21862            MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer => {
21863                // unit
21864                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21865                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
21866                s.end()
21867            }
21868            MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer => {
21869                // unit
21870                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21871                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
21872                s.end()
21873            }
21874            MembersTransferFormerMembersFilesError::TransferDestUserNotFound => {
21875                // unit
21876                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21877                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
21878                s.end()
21879            }
21880            MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam => {
21881                // unit
21882                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21883                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
21884                s.end()
21885            }
21886            MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam => {
21887                // unit
21888                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21889                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
21890                s.end()
21891            }
21892            MembersTransferFormerMembersFilesError::TransferAdminUserNotFound => {
21893                // unit
21894                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21895                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
21896                s.end()
21897            }
21898            MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId => {
21899                // unit
21900                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21901                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
21902                s.end()
21903            }
21904            MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin => {
21905                // unit
21906                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21907                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
21908                s.end()
21909            }
21910            MembersTransferFormerMembersFilesError::RecipientNotVerified => {
21911                // unit
21912                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21913                s.serialize_field(".tag", "recipient_not_verified")?;
21914                s.end()
21915            }
21916            MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred => {
21917                // unit
21918                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21919                s.serialize_field(".tag", "user_data_is_being_transferred")?;
21920                s.end()
21921            }
21922            MembersTransferFormerMembersFilesError::UserNotRemoved => {
21923                // unit
21924                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21925                s.serialize_field(".tag", "user_not_removed")?;
21926                s.end()
21927            }
21928            MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred => {
21929                // unit
21930                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21931                s.serialize_field(".tag", "user_data_cannot_be_transferred")?;
21932                s.end()
21933            }
21934            MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred => {
21935                // unit
21936                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21937                s.serialize_field(".tag", "user_data_already_transferred")?;
21938                s.end()
21939            }
21940            MembersTransferFormerMembersFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21941        }
21942    }
21943}
21944
21945impl ::std::error::Error for MembersTransferFormerMembersFilesError {
21946}
21947
21948impl ::std::fmt::Display for MembersTransferFormerMembersFilesError {
21949    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21950        match self {
21951            MembersTransferFormerMembersFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21952            MembersTransferFormerMembersFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21953            MembersTransferFormerMembersFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
21954            MembersTransferFormerMembersFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
21955            MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
21956            MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
21957            MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
21958            MembersTransferFormerMembersFilesError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
21959            MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
21960            MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
21961            MembersTransferFormerMembersFilesError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
21962            MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
21963            MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
21964            MembersTransferFormerMembersFilesError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
21965            MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred => f.write_str("The user's data is being transferred. Please wait some time before retrying."),
21966            MembersTransferFormerMembersFilesError::UserNotRemoved => f.write_str("No matching removed user found for the argument user."),
21967            MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred => f.write_str("User files aren't transferable anymore."),
21968            MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred => f.write_str("User's data has already been transferred to another user."),
21969            _ => write!(f, "{:?}", *self),
21970        }
21971    }
21972}
21973
21974// union extends MembersTransferFilesError
21975impl From<MembersTransferFilesError> for MembersTransferFormerMembersFilesError {
21976    fn from(parent: MembersTransferFilesError) -> Self {
21977        match parent {
21978            MembersTransferFilesError::UserNotFound => MembersTransferFormerMembersFilesError::UserNotFound,
21979            MembersTransferFilesError::UserNotInTeam => MembersTransferFormerMembersFilesError::UserNotInTeam,
21980            MembersTransferFilesError::Other => MembersTransferFormerMembersFilesError::Other,
21981            MembersTransferFilesError::TransferInProgress => MembersTransferFormerMembersFilesError::TransferInProgress,
21982            MembersTransferFilesError::AlreadyTransferred => MembersTransferFormerMembersFilesError::AlreadyTransferred,
21983            MembersTransferFilesError::AlreadyTransferredOrDeleted => MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted,
21984            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer,
21985            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer,
21986            MembersTransferFilesError::TransferDestUserNotFound => MembersTransferFormerMembersFilesError::TransferDestUserNotFound,
21987            MembersTransferFilesError::TransferDestUserNotInTeam => MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam,
21988            MembersTransferFilesError::TransferAdminUserNotInTeam => MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam,
21989            MembersTransferFilesError::TransferAdminUserNotFound => MembersTransferFormerMembersFilesError::TransferAdminUserNotFound,
21990            MembersTransferFilesError::UnspecifiedTransferAdminId => MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId,
21991            MembersTransferFilesError::TransferAdminIsNotAdmin => MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin,
21992            MembersTransferFilesError::RecipientNotVerified => MembersTransferFormerMembersFilesError::RecipientNotVerified,
21993        }
21994    }
21995}
21996/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
21997/// account.
21998#[derive(Debug, Clone, PartialEq, Eq)]
21999#[non_exhaustive] // structs may have more fields added in the future.
22000pub struct MembersUnsuspendArg {
22001    /// Identity of user to unsuspend.
22002    pub user: UserSelectorArg,
22003}
22004
22005impl MembersUnsuspendArg {
22006    pub fn new(user: UserSelectorArg) -> Self {
22007        MembersUnsuspendArg {
22008            user,
22009        }
22010    }
22011}
22012
22013const MEMBERS_UNSUSPEND_ARG_FIELDS: &[&str] = &["user"];
22014impl MembersUnsuspendArg {
22015    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22016        map: V,
22017    ) -> Result<MembersUnsuspendArg, V::Error> {
22018        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22019    }
22020
22021    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22022        mut map: V,
22023        optional: bool,
22024    ) -> Result<Option<MembersUnsuspendArg>, V::Error> {
22025        let mut field_user = None;
22026        let mut nothing = true;
22027        while let Some(key) = map.next_key::<&str>()? {
22028            nothing = false;
22029            match key {
22030                "user" => {
22031                    if field_user.is_some() {
22032                        return Err(::serde::de::Error::duplicate_field("user"));
22033                    }
22034                    field_user = Some(map.next_value()?);
22035                }
22036                _ => {
22037                    // unknown field allowed and ignored
22038                    map.next_value::<::serde_json::Value>()?;
22039                }
22040            }
22041        }
22042        if optional && nothing {
22043            return Ok(None);
22044        }
22045        let result = MembersUnsuspendArg {
22046            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
22047        };
22048        Ok(Some(result))
22049    }
22050
22051    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22052        &self,
22053        s: &mut S::SerializeStruct,
22054    ) -> Result<(), S::Error> {
22055        use serde::ser::SerializeStruct;
22056        s.serialize_field("user", &self.user)?;
22057        Ok(())
22058    }
22059}
22060
22061impl<'de> ::serde::de::Deserialize<'de> for MembersUnsuspendArg {
22062    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22063        // struct deserializer
22064        use serde::de::{MapAccess, Visitor};
22065        struct StructVisitor;
22066        impl<'de> Visitor<'de> for StructVisitor {
22067            type Value = MembersUnsuspendArg;
22068            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22069                f.write_str("a MembersUnsuspendArg struct")
22070            }
22071            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22072                MembersUnsuspendArg::internal_deserialize(map)
22073            }
22074        }
22075        deserializer.deserialize_struct("MembersUnsuspendArg", MEMBERS_UNSUSPEND_ARG_FIELDS, StructVisitor)
22076    }
22077}
22078
22079impl ::serde::ser::Serialize for MembersUnsuspendArg {
22080    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22081        // struct serializer
22082        use serde::ser::SerializeStruct;
22083        let mut s = serializer.serialize_struct("MembersUnsuspendArg", 1)?;
22084        self.internal_serialize::<S>(&mut s)?;
22085        s.end()
22086    }
22087}
22088
22089#[derive(Debug, Clone, PartialEq, Eq)]
22090#[non_exhaustive] // variants may be added in the future
22091pub enum MembersUnsuspendError {
22092    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
22093    /// this team.
22094    UserNotFound,
22095    /// The user is not a member of the team.
22096    UserNotInTeam,
22097    /// The user is unsuspended, so it cannot be unsuspended again.
22098    UnsuspendNonSuspendedMember,
22099    /// Team is full. The organization has no available licenses.
22100    TeamLicenseLimit,
22101    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22102    /// typically indicates that this SDK version is out of date.
22103    Other,
22104}
22105
22106impl<'de> ::serde::de::Deserialize<'de> for MembersUnsuspendError {
22107    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22108        // union deserializer
22109        use serde::de::{self, MapAccess, Visitor};
22110        struct EnumVisitor;
22111        impl<'de> Visitor<'de> for EnumVisitor {
22112            type Value = MembersUnsuspendError;
22113            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22114                f.write_str("a MembersUnsuspendError structure")
22115            }
22116            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22117                let tag: &str = match map.next_key()? {
22118                    Some(".tag") => map.next_value()?,
22119                    _ => return Err(de::Error::missing_field(".tag"))
22120                };
22121                let value = match tag {
22122                    "user_not_found" => MembersUnsuspendError::UserNotFound,
22123                    "user_not_in_team" => MembersUnsuspendError::UserNotInTeam,
22124                    "unsuspend_non_suspended_member" => MembersUnsuspendError::UnsuspendNonSuspendedMember,
22125                    "team_license_limit" => MembersUnsuspendError::TeamLicenseLimit,
22126                    _ => MembersUnsuspendError::Other,
22127                };
22128                crate::eat_json_fields(&mut map)?;
22129                Ok(value)
22130            }
22131        }
22132        const VARIANTS: &[&str] = &["user_not_found",
22133                                    "user_not_in_team",
22134                                    "other",
22135                                    "unsuspend_non_suspended_member",
22136                                    "team_license_limit"];
22137        deserializer.deserialize_struct("MembersUnsuspendError", VARIANTS, EnumVisitor)
22138    }
22139}
22140
22141impl ::serde::ser::Serialize for MembersUnsuspendError {
22142    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22143        // union serializer
22144        use serde::ser::SerializeStruct;
22145        match self {
22146            MembersUnsuspendError::UserNotFound => {
22147                // unit
22148                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
22149                s.serialize_field(".tag", "user_not_found")?;
22150                s.end()
22151            }
22152            MembersUnsuspendError::UserNotInTeam => {
22153                // unit
22154                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
22155                s.serialize_field(".tag", "user_not_in_team")?;
22156                s.end()
22157            }
22158            MembersUnsuspendError::UnsuspendNonSuspendedMember => {
22159                // unit
22160                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
22161                s.serialize_field(".tag", "unsuspend_non_suspended_member")?;
22162                s.end()
22163            }
22164            MembersUnsuspendError::TeamLicenseLimit => {
22165                // unit
22166                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
22167                s.serialize_field(".tag", "team_license_limit")?;
22168                s.end()
22169            }
22170            MembersUnsuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22171        }
22172    }
22173}
22174
22175impl ::std::error::Error for MembersUnsuspendError {
22176}
22177
22178impl ::std::fmt::Display for MembersUnsuspendError {
22179    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22180        match self {
22181            MembersUnsuspendError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
22182            MembersUnsuspendError::UserNotInTeam => f.write_str("The user is not a member of the team."),
22183            MembersUnsuspendError::UnsuspendNonSuspendedMember => f.write_str("The user is unsuspended, so it cannot be unsuspended again."),
22184            MembersUnsuspendError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
22185            _ => write!(f, "{:?}", *self),
22186        }
22187    }
22188}
22189
22190// union extends MembersDeactivateError
22191impl From<MembersDeactivateError> for MembersUnsuspendError {
22192    fn from(parent: MembersDeactivateError) -> Self {
22193        match parent {
22194            MembersDeactivateError::UserNotFound => MembersUnsuspendError::UserNotFound,
22195            MembersDeactivateError::UserNotInTeam => MembersUnsuspendError::UserNotInTeam,
22196            MembersDeactivateError::Other => MembersUnsuspendError::Other,
22197        }
22198    }
22199}
22200#[derive(Debug, Clone, PartialEq, Eq)]
22201#[non_exhaustive] // variants may be added in the future
22202pub enum MobileClientPlatform {
22203    /// Official Dropbox iPhone client.
22204    Iphone,
22205    /// Official Dropbox iPad client.
22206    Ipad,
22207    /// Official Dropbox Android client.
22208    Android,
22209    /// Official Dropbox Windows phone client.
22210    WindowsPhone,
22211    /// Official Dropbox Blackberry client.
22212    Blackberry,
22213    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22214    /// typically indicates that this SDK version is out of date.
22215    Other,
22216}
22217
22218impl<'de> ::serde::de::Deserialize<'de> for MobileClientPlatform {
22219    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22220        // union deserializer
22221        use serde::de::{self, MapAccess, Visitor};
22222        struct EnumVisitor;
22223        impl<'de> Visitor<'de> for EnumVisitor {
22224            type Value = MobileClientPlatform;
22225            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22226                f.write_str("a MobileClientPlatform structure")
22227            }
22228            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22229                let tag: &str = match map.next_key()? {
22230                    Some(".tag") => map.next_value()?,
22231                    _ => return Err(de::Error::missing_field(".tag"))
22232                };
22233                let value = match tag {
22234                    "iphone" => MobileClientPlatform::Iphone,
22235                    "ipad" => MobileClientPlatform::Ipad,
22236                    "android" => MobileClientPlatform::Android,
22237                    "windows_phone" => MobileClientPlatform::WindowsPhone,
22238                    "blackberry" => MobileClientPlatform::Blackberry,
22239                    _ => MobileClientPlatform::Other,
22240                };
22241                crate::eat_json_fields(&mut map)?;
22242                Ok(value)
22243            }
22244        }
22245        const VARIANTS: &[&str] = &["iphone",
22246                                    "ipad",
22247                                    "android",
22248                                    "windows_phone",
22249                                    "blackberry",
22250                                    "other"];
22251        deserializer.deserialize_struct("MobileClientPlatform", VARIANTS, EnumVisitor)
22252    }
22253}
22254
22255impl ::serde::ser::Serialize for MobileClientPlatform {
22256    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22257        // union serializer
22258        use serde::ser::SerializeStruct;
22259        match self {
22260            MobileClientPlatform::Iphone => {
22261                // unit
22262                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
22263                s.serialize_field(".tag", "iphone")?;
22264                s.end()
22265            }
22266            MobileClientPlatform::Ipad => {
22267                // unit
22268                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
22269                s.serialize_field(".tag", "ipad")?;
22270                s.end()
22271            }
22272            MobileClientPlatform::Android => {
22273                // unit
22274                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
22275                s.serialize_field(".tag", "android")?;
22276                s.end()
22277            }
22278            MobileClientPlatform::WindowsPhone => {
22279                // unit
22280                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
22281                s.serialize_field(".tag", "windows_phone")?;
22282                s.end()
22283            }
22284            MobileClientPlatform::Blackberry => {
22285                // unit
22286                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
22287                s.serialize_field(".tag", "blackberry")?;
22288                s.end()
22289            }
22290            MobileClientPlatform::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22291        }
22292    }
22293}
22294
22295/// Information about linked Dropbox mobile client sessions.
22296#[derive(Debug, Clone, PartialEq, Eq)]
22297#[non_exhaustive] // structs may have more fields added in the future.
22298pub struct MobileClientSession {
22299    /// The session id.
22300    pub session_id: String,
22301    /// The device name.
22302    pub device_name: String,
22303    /// The mobile application type.
22304    pub client_type: MobileClientPlatform,
22305    /// The IP address of the last activity from this session.
22306    pub ip_address: Option<String>,
22307    /// The country from which the last activity from this session was made.
22308    pub country: Option<String>,
22309    /// The time this session was created.
22310    pub created: Option<crate::types::common::DropboxTimestamp>,
22311    /// The time of the last activity from this session.
22312    pub updated: Option<crate::types::common::DropboxTimestamp>,
22313    /// The dropbox client version.
22314    pub client_version: Option<String>,
22315    /// The hosting OS version.
22316    pub os_version: Option<String>,
22317    /// last carrier used by the device.
22318    pub last_carrier: Option<String>,
22319}
22320
22321impl MobileClientSession {
22322    pub fn new(
22323        session_id: String,
22324        device_name: String,
22325        client_type: MobileClientPlatform,
22326    ) -> Self {
22327        MobileClientSession {
22328            session_id,
22329            device_name,
22330            client_type,
22331            ip_address: None,
22332            country: None,
22333            created: None,
22334            updated: None,
22335            client_version: None,
22336            os_version: None,
22337            last_carrier: None,
22338        }
22339    }
22340
22341    pub fn with_ip_address(mut self, value: String) -> Self {
22342        self.ip_address = Some(value);
22343        self
22344    }
22345
22346    pub fn with_country(mut self, value: String) -> Self {
22347        self.country = Some(value);
22348        self
22349    }
22350
22351    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
22352        self.created = Some(value);
22353        self
22354    }
22355
22356    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
22357        self.updated = Some(value);
22358        self
22359    }
22360
22361    pub fn with_client_version(mut self, value: String) -> Self {
22362        self.client_version = Some(value);
22363        self
22364    }
22365
22366    pub fn with_os_version(mut self, value: String) -> Self {
22367        self.os_version = Some(value);
22368        self
22369    }
22370
22371    pub fn with_last_carrier(mut self, value: String) -> Self {
22372        self.last_carrier = Some(value);
22373        self
22374    }
22375}
22376
22377const MOBILE_CLIENT_SESSION_FIELDS: &[&str] = &["session_id",
22378                                                "device_name",
22379                                                "client_type",
22380                                                "ip_address",
22381                                                "country",
22382                                                "created",
22383                                                "updated",
22384                                                "client_version",
22385                                                "os_version",
22386                                                "last_carrier"];
22387impl MobileClientSession {
22388    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22389        map: V,
22390    ) -> Result<MobileClientSession, V::Error> {
22391        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22392    }
22393
22394    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22395        mut map: V,
22396        optional: bool,
22397    ) -> Result<Option<MobileClientSession>, V::Error> {
22398        let mut field_session_id = None;
22399        let mut field_device_name = None;
22400        let mut field_client_type = None;
22401        let mut field_ip_address = None;
22402        let mut field_country = None;
22403        let mut field_created = None;
22404        let mut field_updated = None;
22405        let mut field_client_version = None;
22406        let mut field_os_version = None;
22407        let mut field_last_carrier = None;
22408        let mut nothing = true;
22409        while let Some(key) = map.next_key::<&str>()? {
22410            nothing = false;
22411            match key {
22412                "session_id" => {
22413                    if field_session_id.is_some() {
22414                        return Err(::serde::de::Error::duplicate_field("session_id"));
22415                    }
22416                    field_session_id = Some(map.next_value()?);
22417                }
22418                "device_name" => {
22419                    if field_device_name.is_some() {
22420                        return Err(::serde::de::Error::duplicate_field("device_name"));
22421                    }
22422                    field_device_name = Some(map.next_value()?);
22423                }
22424                "client_type" => {
22425                    if field_client_type.is_some() {
22426                        return Err(::serde::de::Error::duplicate_field("client_type"));
22427                    }
22428                    field_client_type = Some(map.next_value()?);
22429                }
22430                "ip_address" => {
22431                    if field_ip_address.is_some() {
22432                        return Err(::serde::de::Error::duplicate_field("ip_address"));
22433                    }
22434                    field_ip_address = Some(map.next_value()?);
22435                }
22436                "country" => {
22437                    if field_country.is_some() {
22438                        return Err(::serde::de::Error::duplicate_field("country"));
22439                    }
22440                    field_country = Some(map.next_value()?);
22441                }
22442                "created" => {
22443                    if field_created.is_some() {
22444                        return Err(::serde::de::Error::duplicate_field("created"));
22445                    }
22446                    field_created = Some(map.next_value()?);
22447                }
22448                "updated" => {
22449                    if field_updated.is_some() {
22450                        return Err(::serde::de::Error::duplicate_field("updated"));
22451                    }
22452                    field_updated = Some(map.next_value()?);
22453                }
22454                "client_version" => {
22455                    if field_client_version.is_some() {
22456                        return Err(::serde::de::Error::duplicate_field("client_version"));
22457                    }
22458                    field_client_version = Some(map.next_value()?);
22459                }
22460                "os_version" => {
22461                    if field_os_version.is_some() {
22462                        return Err(::serde::de::Error::duplicate_field("os_version"));
22463                    }
22464                    field_os_version = Some(map.next_value()?);
22465                }
22466                "last_carrier" => {
22467                    if field_last_carrier.is_some() {
22468                        return Err(::serde::de::Error::duplicate_field("last_carrier"));
22469                    }
22470                    field_last_carrier = Some(map.next_value()?);
22471                }
22472                _ => {
22473                    // unknown field allowed and ignored
22474                    map.next_value::<::serde_json::Value>()?;
22475                }
22476            }
22477        }
22478        if optional && nothing {
22479            return Ok(None);
22480        }
22481        let result = MobileClientSession {
22482            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
22483            device_name: field_device_name.ok_or_else(|| ::serde::de::Error::missing_field("device_name"))?,
22484            client_type: field_client_type.ok_or_else(|| ::serde::de::Error::missing_field("client_type"))?,
22485            ip_address: field_ip_address.and_then(Option::flatten),
22486            country: field_country.and_then(Option::flatten),
22487            created: field_created.and_then(Option::flatten),
22488            updated: field_updated.and_then(Option::flatten),
22489            client_version: field_client_version.and_then(Option::flatten),
22490            os_version: field_os_version.and_then(Option::flatten),
22491            last_carrier: field_last_carrier.and_then(Option::flatten),
22492        };
22493        Ok(Some(result))
22494    }
22495
22496    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22497        &self,
22498        s: &mut S::SerializeStruct,
22499    ) -> Result<(), S::Error> {
22500        use serde::ser::SerializeStruct;
22501        s.serialize_field("session_id", &self.session_id)?;
22502        s.serialize_field("device_name", &self.device_name)?;
22503        s.serialize_field("client_type", &self.client_type)?;
22504        if let Some(val) = &self.ip_address {
22505            s.serialize_field("ip_address", val)?;
22506        }
22507        if let Some(val) = &self.country {
22508            s.serialize_field("country", val)?;
22509        }
22510        if let Some(val) = &self.created {
22511            s.serialize_field("created", val)?;
22512        }
22513        if let Some(val) = &self.updated {
22514            s.serialize_field("updated", val)?;
22515        }
22516        if let Some(val) = &self.client_version {
22517            s.serialize_field("client_version", val)?;
22518        }
22519        if let Some(val) = &self.os_version {
22520            s.serialize_field("os_version", val)?;
22521        }
22522        if let Some(val) = &self.last_carrier {
22523            s.serialize_field("last_carrier", val)?;
22524        }
22525        Ok(())
22526    }
22527}
22528
22529impl<'de> ::serde::de::Deserialize<'de> for MobileClientSession {
22530    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22531        // struct deserializer
22532        use serde::de::{MapAccess, Visitor};
22533        struct StructVisitor;
22534        impl<'de> Visitor<'de> for StructVisitor {
22535            type Value = MobileClientSession;
22536            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22537                f.write_str("a MobileClientSession struct")
22538            }
22539            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22540                MobileClientSession::internal_deserialize(map)
22541            }
22542        }
22543        deserializer.deserialize_struct("MobileClientSession", MOBILE_CLIENT_SESSION_FIELDS, StructVisitor)
22544    }
22545}
22546
22547impl ::serde::ser::Serialize for MobileClientSession {
22548    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22549        // struct serializer
22550        use serde::ser::SerializeStruct;
22551        let mut s = serializer.serialize_struct("MobileClientSession", 10)?;
22552        self.internal_serialize::<S>(&mut s)?;
22553        s.end()
22554    }
22555}
22556
22557// struct extends DeviceSession
22558impl From<MobileClientSession> for DeviceSession {
22559    fn from(subtype: MobileClientSession) -> Self {
22560        Self {
22561            session_id: subtype.session_id,
22562            ip_address: subtype.ip_address,
22563            country: subtype.country,
22564            created: subtype.created,
22565            updated: subtype.updated,
22566        }
22567    }
22568}
22569/// Properties of a namespace.
22570#[derive(Debug, Clone, PartialEq, Eq)]
22571#[non_exhaustive] // structs may have more fields added in the future.
22572pub struct NamespaceMetadata {
22573    /// The name of this namespace.
22574    pub name: String,
22575    /// The ID of this namespace.
22576    pub namespace_id: crate::types::common::SharedFolderId,
22577    /// The type of this namespace.
22578    pub namespace_type: NamespaceType,
22579    /// If this is a team member or app folder, the ID of the owning team member. Otherwise, this
22580    /// field is not present.
22581    pub team_member_id: Option<crate::types::team_common::TeamMemberId>,
22582    /// The quota limit in bytes for this namespace tree. Only applicable to team folders.
22583    pub quota_limit: i64,
22584}
22585
22586impl NamespaceMetadata {
22587    pub fn new(
22588        name: String,
22589        namespace_id: crate::types::common::SharedFolderId,
22590        namespace_type: NamespaceType,
22591    ) -> Self {
22592        NamespaceMetadata {
22593            name,
22594            namespace_id,
22595            namespace_type,
22596            team_member_id: None,
22597            quota_limit: 0,
22598        }
22599    }
22600
22601    pub fn with_team_member_id(mut self, value: crate::types::team_common::TeamMemberId) -> Self {
22602        self.team_member_id = Some(value);
22603        self
22604    }
22605
22606    pub fn with_quota_limit(mut self, value: i64) -> Self {
22607        self.quota_limit = value;
22608        self
22609    }
22610}
22611
22612const NAMESPACE_METADATA_FIELDS: &[&str] = &["name",
22613                                             "namespace_id",
22614                                             "namespace_type",
22615                                             "team_member_id",
22616                                             "quota_limit"];
22617impl NamespaceMetadata {
22618    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22619        map: V,
22620    ) -> Result<NamespaceMetadata, V::Error> {
22621        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22622    }
22623
22624    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22625        mut map: V,
22626        optional: bool,
22627    ) -> Result<Option<NamespaceMetadata>, V::Error> {
22628        let mut field_name = None;
22629        let mut field_namespace_id = None;
22630        let mut field_namespace_type = None;
22631        let mut field_team_member_id = None;
22632        let mut field_quota_limit = None;
22633        let mut nothing = true;
22634        while let Some(key) = map.next_key::<&str>()? {
22635            nothing = false;
22636            match key {
22637                "name" => {
22638                    if field_name.is_some() {
22639                        return Err(::serde::de::Error::duplicate_field("name"));
22640                    }
22641                    field_name = Some(map.next_value()?);
22642                }
22643                "namespace_id" => {
22644                    if field_namespace_id.is_some() {
22645                        return Err(::serde::de::Error::duplicate_field("namespace_id"));
22646                    }
22647                    field_namespace_id = Some(map.next_value()?);
22648                }
22649                "namespace_type" => {
22650                    if field_namespace_type.is_some() {
22651                        return Err(::serde::de::Error::duplicate_field("namespace_type"));
22652                    }
22653                    field_namespace_type = Some(map.next_value()?);
22654                }
22655                "team_member_id" => {
22656                    if field_team_member_id.is_some() {
22657                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
22658                    }
22659                    field_team_member_id = Some(map.next_value()?);
22660                }
22661                "quota_limit" => {
22662                    if field_quota_limit.is_some() {
22663                        return Err(::serde::de::Error::duplicate_field("quota_limit"));
22664                    }
22665                    field_quota_limit = Some(map.next_value()?);
22666                }
22667                _ => {
22668                    // unknown field allowed and ignored
22669                    map.next_value::<::serde_json::Value>()?;
22670                }
22671            }
22672        }
22673        if optional && nothing {
22674            return Ok(None);
22675        }
22676        let result = NamespaceMetadata {
22677            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
22678            namespace_id: field_namespace_id.ok_or_else(|| ::serde::de::Error::missing_field("namespace_id"))?,
22679            namespace_type: field_namespace_type.ok_or_else(|| ::serde::de::Error::missing_field("namespace_type"))?,
22680            team_member_id: field_team_member_id.and_then(Option::flatten),
22681            quota_limit: field_quota_limit.unwrap_or(0),
22682        };
22683        Ok(Some(result))
22684    }
22685
22686    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22687        &self,
22688        s: &mut S::SerializeStruct,
22689    ) -> Result<(), S::Error> {
22690        use serde::ser::SerializeStruct;
22691        s.serialize_field("name", &self.name)?;
22692        s.serialize_field("namespace_id", &self.namespace_id)?;
22693        s.serialize_field("namespace_type", &self.namespace_type)?;
22694        if let Some(val) = &self.team_member_id {
22695            s.serialize_field("team_member_id", val)?;
22696        }
22697        if self.quota_limit != 0 {
22698            s.serialize_field("quota_limit", &self.quota_limit)?;
22699        }
22700        Ok(())
22701    }
22702}
22703
22704impl<'de> ::serde::de::Deserialize<'de> for NamespaceMetadata {
22705    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22706        // struct deserializer
22707        use serde::de::{MapAccess, Visitor};
22708        struct StructVisitor;
22709        impl<'de> Visitor<'de> for StructVisitor {
22710            type Value = NamespaceMetadata;
22711            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22712                f.write_str("a NamespaceMetadata struct")
22713            }
22714            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22715                NamespaceMetadata::internal_deserialize(map)
22716            }
22717        }
22718        deserializer.deserialize_struct("NamespaceMetadata", NAMESPACE_METADATA_FIELDS, StructVisitor)
22719    }
22720}
22721
22722impl ::serde::ser::Serialize for NamespaceMetadata {
22723    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22724        // struct serializer
22725        use serde::ser::SerializeStruct;
22726        let mut s = serializer.serialize_struct("NamespaceMetadata", 5)?;
22727        self.internal_serialize::<S>(&mut s)?;
22728        s.end()
22729    }
22730}
22731
22732#[derive(Debug, Clone, PartialEq, Eq)]
22733#[non_exhaustive] // variants may be added in the future
22734pub enum NamespaceType {
22735    /// App sandbox folder.
22736    AppFolder,
22737    /// Shared folder.
22738    SharedFolder,
22739    /// Top-level team-owned folder.
22740    TeamFolder,
22741    /// Team member's home folder.
22742    TeamMemberFolder,
22743    /// Team member's root folder.
22744    TeamMemberRoot,
22745    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22746    /// typically indicates that this SDK version is out of date.
22747    Other,
22748}
22749
22750impl<'de> ::serde::de::Deserialize<'de> for NamespaceType {
22751    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22752        // union deserializer
22753        use serde::de::{self, MapAccess, Visitor};
22754        struct EnumVisitor;
22755        impl<'de> Visitor<'de> for EnumVisitor {
22756            type Value = NamespaceType;
22757            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22758                f.write_str("a NamespaceType structure")
22759            }
22760            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22761                let tag: &str = match map.next_key()? {
22762                    Some(".tag") => map.next_value()?,
22763                    _ => return Err(de::Error::missing_field(".tag"))
22764                };
22765                let value = match tag {
22766                    "app_folder" => NamespaceType::AppFolder,
22767                    "shared_folder" => NamespaceType::SharedFolder,
22768                    "team_folder" => NamespaceType::TeamFolder,
22769                    "team_member_folder" => NamespaceType::TeamMemberFolder,
22770                    "team_member_root" => NamespaceType::TeamMemberRoot,
22771                    _ => NamespaceType::Other,
22772                };
22773                crate::eat_json_fields(&mut map)?;
22774                Ok(value)
22775            }
22776        }
22777        const VARIANTS: &[&str] = &["app_folder",
22778                                    "shared_folder",
22779                                    "team_folder",
22780                                    "team_member_folder",
22781                                    "team_member_root",
22782                                    "other"];
22783        deserializer.deserialize_struct("NamespaceType", VARIANTS, EnumVisitor)
22784    }
22785}
22786
22787impl ::serde::ser::Serialize for NamespaceType {
22788    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22789        // union serializer
22790        use serde::ser::SerializeStruct;
22791        match self {
22792            NamespaceType::AppFolder => {
22793                // unit
22794                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
22795                s.serialize_field(".tag", "app_folder")?;
22796                s.end()
22797            }
22798            NamespaceType::SharedFolder => {
22799                // unit
22800                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
22801                s.serialize_field(".tag", "shared_folder")?;
22802                s.end()
22803            }
22804            NamespaceType::TeamFolder => {
22805                // unit
22806                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
22807                s.serialize_field(".tag", "team_folder")?;
22808                s.end()
22809            }
22810            NamespaceType::TeamMemberFolder => {
22811                // unit
22812                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
22813                s.serialize_field(".tag", "team_member_folder")?;
22814                s.end()
22815            }
22816            NamespaceType::TeamMemberRoot => {
22817                // unit
22818                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
22819                s.serialize_field(".tag", "team_member_root")?;
22820                s.end()
22821            }
22822            NamespaceType::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22823        }
22824    }
22825}
22826
22827/// User result for setting member custom quota.
22828#[derive(Debug, Clone, PartialEq, Eq)]
22829#[non_exhaustive] // variants may be added in the future
22830pub enum RemoveCustomQuotaResult {
22831    /// Successfully removed user.
22832    Success(UserSelectorArg),
22833    /// Invalid user (not in team).
22834    InvalidUser(UserSelectorArg),
22835    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22836    /// typically indicates that this SDK version is out of date.
22837    Other,
22838}
22839
22840impl<'de> ::serde::de::Deserialize<'de> for RemoveCustomQuotaResult {
22841    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22842        // union deserializer
22843        use serde::de::{self, MapAccess, Visitor};
22844        struct EnumVisitor;
22845        impl<'de> Visitor<'de> for EnumVisitor {
22846            type Value = RemoveCustomQuotaResult;
22847            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22848                f.write_str("a RemoveCustomQuotaResult structure")
22849            }
22850            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22851                let tag: &str = match map.next_key()? {
22852                    Some(".tag") => map.next_value()?,
22853                    _ => return Err(de::Error::missing_field(".tag"))
22854                };
22855                let value = match tag {
22856                    "success" => {
22857                        match map.next_key()? {
22858                            Some("success") => RemoveCustomQuotaResult::Success(map.next_value()?),
22859                            None => return Err(de::Error::missing_field("success")),
22860                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
22861                        }
22862                    }
22863                    "invalid_user" => {
22864                        match map.next_key()? {
22865                            Some("invalid_user") => RemoveCustomQuotaResult::InvalidUser(map.next_value()?),
22866                            None => return Err(de::Error::missing_field("invalid_user")),
22867                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
22868                        }
22869                    }
22870                    _ => RemoveCustomQuotaResult::Other,
22871                };
22872                crate::eat_json_fields(&mut map)?;
22873                Ok(value)
22874            }
22875        }
22876        const VARIANTS: &[&str] = &["success",
22877                                    "invalid_user",
22878                                    "other"];
22879        deserializer.deserialize_struct("RemoveCustomQuotaResult", VARIANTS, EnumVisitor)
22880    }
22881}
22882
22883impl ::serde::ser::Serialize for RemoveCustomQuotaResult {
22884    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22885        // union serializer
22886        use serde::ser::SerializeStruct;
22887        match self {
22888            RemoveCustomQuotaResult::Success(x) => {
22889                // union or polymporphic struct
22890                let mut s = serializer.serialize_struct("RemoveCustomQuotaResult", 2)?;
22891                s.serialize_field(".tag", "success")?;
22892                s.serialize_field("success", x)?;
22893                s.end()
22894            }
22895            RemoveCustomQuotaResult::InvalidUser(x) => {
22896                // union or polymporphic struct
22897                let mut s = serializer.serialize_struct("RemoveCustomQuotaResult", 2)?;
22898                s.serialize_field(".tag", "invalid_user")?;
22899                s.serialize_field("invalid_user", x)?;
22900                s.end()
22901            }
22902            RemoveCustomQuotaResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22903        }
22904    }
22905}
22906
22907#[derive(Debug, Clone, PartialEq, Eq)]
22908#[non_exhaustive] // structs may have more fields added in the future.
22909pub struct RemovedStatus {
22910    /// True if the removed team member is recoverable.
22911    pub is_recoverable: bool,
22912    /// True if the team member's account was converted to individual account.
22913    pub is_disconnected: bool,
22914}
22915
22916impl RemovedStatus {
22917    pub fn new(is_recoverable: bool, is_disconnected: bool) -> Self {
22918        RemovedStatus {
22919            is_recoverable,
22920            is_disconnected,
22921        }
22922    }
22923}
22924
22925const REMOVED_STATUS_FIELDS: &[&str] = &["is_recoverable",
22926                                         "is_disconnected"];
22927impl RemovedStatus {
22928    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22929        map: V,
22930    ) -> Result<RemovedStatus, V::Error> {
22931        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22932    }
22933
22934    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22935        mut map: V,
22936        optional: bool,
22937    ) -> Result<Option<RemovedStatus>, V::Error> {
22938        let mut field_is_recoverable = None;
22939        let mut field_is_disconnected = None;
22940        let mut nothing = true;
22941        while let Some(key) = map.next_key::<&str>()? {
22942            nothing = false;
22943            match key {
22944                "is_recoverable" => {
22945                    if field_is_recoverable.is_some() {
22946                        return Err(::serde::de::Error::duplicate_field("is_recoverable"));
22947                    }
22948                    field_is_recoverable = Some(map.next_value()?);
22949                }
22950                "is_disconnected" => {
22951                    if field_is_disconnected.is_some() {
22952                        return Err(::serde::de::Error::duplicate_field("is_disconnected"));
22953                    }
22954                    field_is_disconnected = Some(map.next_value()?);
22955                }
22956                _ => {
22957                    // unknown field allowed and ignored
22958                    map.next_value::<::serde_json::Value>()?;
22959                }
22960            }
22961        }
22962        if optional && nothing {
22963            return Ok(None);
22964        }
22965        let result = RemovedStatus {
22966            is_recoverable: field_is_recoverable.ok_or_else(|| ::serde::de::Error::missing_field("is_recoverable"))?,
22967            is_disconnected: field_is_disconnected.ok_or_else(|| ::serde::de::Error::missing_field("is_disconnected"))?,
22968        };
22969        Ok(Some(result))
22970    }
22971
22972    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22973        &self,
22974        s: &mut S::SerializeStruct,
22975    ) -> Result<(), S::Error> {
22976        use serde::ser::SerializeStruct;
22977        s.serialize_field("is_recoverable", &self.is_recoverable)?;
22978        s.serialize_field("is_disconnected", &self.is_disconnected)?;
22979        Ok(())
22980    }
22981}
22982
22983impl<'de> ::serde::de::Deserialize<'de> for RemovedStatus {
22984    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22985        // struct deserializer
22986        use serde::de::{MapAccess, Visitor};
22987        struct StructVisitor;
22988        impl<'de> Visitor<'de> for StructVisitor {
22989            type Value = RemovedStatus;
22990            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22991                f.write_str("a RemovedStatus struct")
22992            }
22993            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22994                RemovedStatus::internal_deserialize(map)
22995            }
22996        }
22997        deserializer.deserialize_struct("RemovedStatus", REMOVED_STATUS_FIELDS, StructVisitor)
22998    }
22999}
23000
23001impl ::serde::ser::Serialize for RemovedStatus {
23002    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23003        // struct serializer
23004        use serde::ser::SerializeStruct;
23005        let mut s = serializer.serialize_struct("RemovedStatus", 2)?;
23006        self.internal_serialize::<S>(&mut s)?;
23007        s.end()
23008    }
23009}
23010
23011/// Result of trying to resend verification email to a secondary email address. 'success' is the
23012/// only value indicating that a verification email was successfully sent. The other values explain
23013/// the type of error that occurred, and include the email for which the error occurred.
23014#[derive(Debug, Clone, PartialEq, Eq)]
23015#[non_exhaustive] // variants may be added in the future
23016pub enum ResendSecondaryEmailResult {
23017    /// A verification email was successfully sent to the secondary email address.
23018    Success(crate::types::common::EmailAddress),
23019    /// This secondary email address is not pending for the user.
23020    NotPending(crate::types::common::EmailAddress),
23021    /// Too many emails are being sent to this email address. Please try again later.
23022    RateLimited(crate::types::common::EmailAddress),
23023    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23024    /// typically indicates that this SDK version is out of date.
23025    Other,
23026}
23027
23028impl<'de> ::serde::de::Deserialize<'de> for ResendSecondaryEmailResult {
23029    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23030        // union deserializer
23031        use serde::de::{self, MapAccess, Visitor};
23032        struct EnumVisitor;
23033        impl<'de> Visitor<'de> for EnumVisitor {
23034            type Value = ResendSecondaryEmailResult;
23035            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23036                f.write_str("a ResendSecondaryEmailResult structure")
23037            }
23038            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23039                let tag: &str = match map.next_key()? {
23040                    Some(".tag") => map.next_value()?,
23041                    _ => return Err(de::Error::missing_field(".tag"))
23042                };
23043                let value = match tag {
23044                    "success" => {
23045                        match map.next_key()? {
23046                            Some("success") => ResendSecondaryEmailResult::Success(map.next_value()?),
23047                            None => return Err(de::Error::missing_field("success")),
23048                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23049                        }
23050                    }
23051                    "not_pending" => {
23052                        match map.next_key()? {
23053                            Some("not_pending") => ResendSecondaryEmailResult::NotPending(map.next_value()?),
23054                            None => return Err(de::Error::missing_field("not_pending")),
23055                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23056                        }
23057                    }
23058                    "rate_limited" => {
23059                        match map.next_key()? {
23060                            Some("rate_limited") => ResendSecondaryEmailResult::RateLimited(map.next_value()?),
23061                            None => return Err(de::Error::missing_field("rate_limited")),
23062                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23063                        }
23064                    }
23065                    _ => ResendSecondaryEmailResult::Other,
23066                };
23067                crate::eat_json_fields(&mut map)?;
23068                Ok(value)
23069            }
23070        }
23071        const VARIANTS: &[&str] = &["success",
23072                                    "not_pending",
23073                                    "rate_limited",
23074                                    "other"];
23075        deserializer.deserialize_struct("ResendSecondaryEmailResult", VARIANTS, EnumVisitor)
23076    }
23077}
23078
23079impl ::serde::ser::Serialize for ResendSecondaryEmailResult {
23080    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23081        // union serializer
23082        use serde::ser::SerializeStruct;
23083        match self {
23084            ResendSecondaryEmailResult::Success(x) => {
23085                // primitive
23086                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
23087                s.serialize_field(".tag", "success")?;
23088                s.serialize_field("success", x)?;
23089                s.end()
23090            }
23091            ResendSecondaryEmailResult::NotPending(x) => {
23092                // primitive
23093                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
23094                s.serialize_field(".tag", "not_pending")?;
23095                s.serialize_field("not_pending", x)?;
23096                s.end()
23097            }
23098            ResendSecondaryEmailResult::RateLimited(x) => {
23099                // primitive
23100                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
23101                s.serialize_field(".tag", "rate_limited")?;
23102                s.serialize_field("rate_limited", x)?;
23103                s.end()
23104            }
23105            ResendSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23106        }
23107    }
23108}
23109
23110#[derive(Debug, Clone, PartialEq, Eq)]
23111#[non_exhaustive] // structs may have more fields added in the future.
23112pub struct ResendVerificationEmailArg {
23113    /// List of users and secondary emails to resend verification emails to.
23114    pub emails_to_resend: Vec<UserSecondaryEmailsArg>,
23115}
23116
23117impl ResendVerificationEmailArg {
23118    pub fn new(emails_to_resend: Vec<UserSecondaryEmailsArg>) -> Self {
23119        ResendVerificationEmailArg {
23120            emails_to_resend,
23121        }
23122    }
23123}
23124
23125const RESEND_VERIFICATION_EMAIL_ARG_FIELDS: &[&str] = &["emails_to_resend"];
23126impl ResendVerificationEmailArg {
23127    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23128        map: V,
23129    ) -> Result<ResendVerificationEmailArg, V::Error> {
23130        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23131    }
23132
23133    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23134        mut map: V,
23135        optional: bool,
23136    ) -> Result<Option<ResendVerificationEmailArg>, V::Error> {
23137        let mut field_emails_to_resend = None;
23138        let mut nothing = true;
23139        while let Some(key) = map.next_key::<&str>()? {
23140            nothing = false;
23141            match key {
23142                "emails_to_resend" => {
23143                    if field_emails_to_resend.is_some() {
23144                        return Err(::serde::de::Error::duplicate_field("emails_to_resend"));
23145                    }
23146                    field_emails_to_resend = Some(map.next_value()?);
23147                }
23148                _ => {
23149                    // unknown field allowed and ignored
23150                    map.next_value::<::serde_json::Value>()?;
23151                }
23152            }
23153        }
23154        if optional && nothing {
23155            return Ok(None);
23156        }
23157        let result = ResendVerificationEmailArg {
23158            emails_to_resend: field_emails_to_resend.ok_or_else(|| ::serde::de::Error::missing_field("emails_to_resend"))?,
23159        };
23160        Ok(Some(result))
23161    }
23162
23163    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23164        &self,
23165        s: &mut S::SerializeStruct,
23166    ) -> Result<(), S::Error> {
23167        use serde::ser::SerializeStruct;
23168        s.serialize_field("emails_to_resend", &self.emails_to_resend)?;
23169        Ok(())
23170    }
23171}
23172
23173impl<'de> ::serde::de::Deserialize<'de> for ResendVerificationEmailArg {
23174    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23175        // struct deserializer
23176        use serde::de::{MapAccess, Visitor};
23177        struct StructVisitor;
23178        impl<'de> Visitor<'de> for StructVisitor {
23179            type Value = ResendVerificationEmailArg;
23180            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23181                f.write_str("a ResendVerificationEmailArg struct")
23182            }
23183            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23184                ResendVerificationEmailArg::internal_deserialize(map)
23185            }
23186        }
23187        deserializer.deserialize_struct("ResendVerificationEmailArg", RESEND_VERIFICATION_EMAIL_ARG_FIELDS, StructVisitor)
23188    }
23189}
23190
23191impl ::serde::ser::Serialize for ResendVerificationEmailArg {
23192    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23193        // struct serializer
23194        use serde::ser::SerializeStruct;
23195        let mut s = serializer.serialize_struct("ResendVerificationEmailArg", 1)?;
23196        self.internal_serialize::<S>(&mut s)?;
23197        s.end()
23198    }
23199}
23200
23201/// List of users and resend results.
23202#[derive(Debug, Clone, PartialEq, Eq)]
23203#[non_exhaustive] // structs may have more fields added in the future.
23204pub struct ResendVerificationEmailResult {
23205    pub results: Vec<UserResendResult>,
23206}
23207
23208impl ResendVerificationEmailResult {
23209    pub fn new(results: Vec<UserResendResult>) -> Self {
23210        ResendVerificationEmailResult {
23211            results,
23212        }
23213    }
23214}
23215
23216const RESEND_VERIFICATION_EMAIL_RESULT_FIELDS: &[&str] = &["results"];
23217impl ResendVerificationEmailResult {
23218    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23219        map: V,
23220    ) -> Result<ResendVerificationEmailResult, V::Error> {
23221        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23222    }
23223
23224    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23225        mut map: V,
23226        optional: bool,
23227    ) -> Result<Option<ResendVerificationEmailResult>, V::Error> {
23228        let mut field_results = None;
23229        let mut nothing = true;
23230        while let Some(key) = map.next_key::<&str>()? {
23231            nothing = false;
23232            match key {
23233                "results" => {
23234                    if field_results.is_some() {
23235                        return Err(::serde::de::Error::duplicate_field("results"));
23236                    }
23237                    field_results = Some(map.next_value()?);
23238                }
23239                _ => {
23240                    // unknown field allowed and ignored
23241                    map.next_value::<::serde_json::Value>()?;
23242                }
23243            }
23244        }
23245        if optional && nothing {
23246            return Ok(None);
23247        }
23248        let result = ResendVerificationEmailResult {
23249            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
23250        };
23251        Ok(Some(result))
23252    }
23253
23254    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23255        &self,
23256        s: &mut S::SerializeStruct,
23257    ) -> Result<(), S::Error> {
23258        use serde::ser::SerializeStruct;
23259        s.serialize_field("results", &self.results)?;
23260        Ok(())
23261    }
23262}
23263
23264impl<'de> ::serde::de::Deserialize<'de> for ResendVerificationEmailResult {
23265    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23266        // struct deserializer
23267        use serde::de::{MapAccess, Visitor};
23268        struct StructVisitor;
23269        impl<'de> Visitor<'de> for StructVisitor {
23270            type Value = ResendVerificationEmailResult;
23271            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23272                f.write_str("a ResendVerificationEmailResult struct")
23273            }
23274            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23275                ResendVerificationEmailResult::internal_deserialize(map)
23276            }
23277        }
23278        deserializer.deserialize_struct("ResendVerificationEmailResult", RESEND_VERIFICATION_EMAIL_RESULT_FIELDS, StructVisitor)
23279    }
23280}
23281
23282impl ::serde::ser::Serialize for ResendVerificationEmailResult {
23283    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23284        // struct serializer
23285        use serde::ser::SerializeStruct;
23286        let mut s = serializer.serialize_struct("ResendVerificationEmailResult", 1)?;
23287        self.internal_serialize::<S>(&mut s)?;
23288        s.end()
23289    }
23290}
23291
23292#[derive(Debug, Clone, PartialEq, Eq)]
23293#[non_exhaustive] // structs may have more fields added in the future.
23294pub struct RevokeDesktopClientArg {
23295    /// The session id.
23296    pub session_id: String,
23297    /// The unique id of the member owning the device.
23298    pub team_member_id: String,
23299    /// Whether to delete all files of the account (this is possible only if supported by the
23300    /// desktop client and  will be made the next time the client access the account).
23301    pub delete_on_unlink: bool,
23302}
23303
23304impl RevokeDesktopClientArg {
23305    pub fn new(session_id: String, team_member_id: String) -> Self {
23306        RevokeDesktopClientArg {
23307            session_id,
23308            team_member_id,
23309            delete_on_unlink: false,
23310        }
23311    }
23312
23313    pub fn with_delete_on_unlink(mut self, value: bool) -> Self {
23314        self.delete_on_unlink = value;
23315        self
23316    }
23317}
23318
23319const REVOKE_DESKTOP_CLIENT_ARG_FIELDS: &[&str] = &["session_id",
23320                                                    "team_member_id",
23321                                                    "delete_on_unlink"];
23322impl RevokeDesktopClientArg {
23323    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23324        map: V,
23325    ) -> Result<RevokeDesktopClientArg, V::Error> {
23326        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23327    }
23328
23329    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23330        mut map: V,
23331        optional: bool,
23332    ) -> Result<Option<RevokeDesktopClientArg>, V::Error> {
23333        let mut field_session_id = None;
23334        let mut field_team_member_id = None;
23335        let mut field_delete_on_unlink = None;
23336        let mut nothing = true;
23337        while let Some(key) = map.next_key::<&str>()? {
23338            nothing = false;
23339            match key {
23340                "session_id" => {
23341                    if field_session_id.is_some() {
23342                        return Err(::serde::de::Error::duplicate_field("session_id"));
23343                    }
23344                    field_session_id = Some(map.next_value()?);
23345                }
23346                "team_member_id" => {
23347                    if field_team_member_id.is_some() {
23348                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
23349                    }
23350                    field_team_member_id = Some(map.next_value()?);
23351                }
23352                "delete_on_unlink" => {
23353                    if field_delete_on_unlink.is_some() {
23354                        return Err(::serde::de::Error::duplicate_field("delete_on_unlink"));
23355                    }
23356                    field_delete_on_unlink = Some(map.next_value()?);
23357                }
23358                _ => {
23359                    // unknown field allowed and ignored
23360                    map.next_value::<::serde_json::Value>()?;
23361                }
23362            }
23363        }
23364        if optional && nothing {
23365            return Ok(None);
23366        }
23367        let result = RevokeDesktopClientArg {
23368            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
23369            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
23370            delete_on_unlink: field_delete_on_unlink.unwrap_or(false),
23371        };
23372        Ok(Some(result))
23373    }
23374
23375    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23376        &self,
23377        s: &mut S::SerializeStruct,
23378    ) -> Result<(), S::Error> {
23379        use serde::ser::SerializeStruct;
23380        s.serialize_field("session_id", &self.session_id)?;
23381        s.serialize_field("team_member_id", &self.team_member_id)?;
23382        if self.delete_on_unlink {
23383            s.serialize_field("delete_on_unlink", &self.delete_on_unlink)?;
23384        }
23385        Ok(())
23386    }
23387}
23388
23389impl<'de> ::serde::de::Deserialize<'de> for RevokeDesktopClientArg {
23390    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23391        // struct deserializer
23392        use serde::de::{MapAccess, Visitor};
23393        struct StructVisitor;
23394        impl<'de> Visitor<'de> for StructVisitor {
23395            type Value = RevokeDesktopClientArg;
23396            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23397                f.write_str("a RevokeDesktopClientArg struct")
23398            }
23399            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23400                RevokeDesktopClientArg::internal_deserialize(map)
23401            }
23402        }
23403        deserializer.deserialize_struct("RevokeDesktopClientArg", REVOKE_DESKTOP_CLIENT_ARG_FIELDS, StructVisitor)
23404    }
23405}
23406
23407impl ::serde::ser::Serialize for RevokeDesktopClientArg {
23408    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23409        // struct serializer
23410        use serde::ser::SerializeStruct;
23411        let mut s = serializer.serialize_struct("RevokeDesktopClientArg", 3)?;
23412        self.internal_serialize::<S>(&mut s)?;
23413        s.end()
23414    }
23415}
23416
23417// struct extends DeviceSessionArg
23418impl From<RevokeDesktopClientArg> for DeviceSessionArg {
23419    fn from(subtype: RevokeDesktopClientArg) -> Self {
23420        Self {
23421            session_id: subtype.session_id,
23422            team_member_id: subtype.team_member_id,
23423        }
23424    }
23425}
23426#[derive(Debug, Clone, PartialEq, Eq)]
23427pub enum RevokeDeviceSessionArg {
23428    /// End an active session.
23429    WebSession(DeviceSessionArg),
23430    /// Unlink a linked desktop device.
23431    DesktopClient(RevokeDesktopClientArg),
23432    /// Unlink a linked mobile device.
23433    MobileClient(DeviceSessionArg),
23434}
23435
23436impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionArg {
23437    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23438        // union deserializer
23439        use serde::de::{self, MapAccess, Visitor};
23440        struct EnumVisitor;
23441        impl<'de> Visitor<'de> for EnumVisitor {
23442            type Value = RevokeDeviceSessionArg;
23443            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23444                f.write_str("a RevokeDeviceSessionArg structure")
23445            }
23446            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23447                let tag: &str = match map.next_key()? {
23448                    Some(".tag") => map.next_value()?,
23449                    _ => return Err(de::Error::missing_field(".tag"))
23450                };
23451                let value = match tag {
23452                    "web_session" => RevokeDeviceSessionArg::WebSession(DeviceSessionArg::internal_deserialize(&mut map)?),
23453                    "desktop_client" => RevokeDeviceSessionArg::DesktopClient(RevokeDesktopClientArg::internal_deserialize(&mut map)?),
23454                    "mobile_client" => RevokeDeviceSessionArg::MobileClient(DeviceSessionArg::internal_deserialize(&mut map)?),
23455                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
23456                };
23457                crate::eat_json_fields(&mut map)?;
23458                Ok(value)
23459            }
23460        }
23461        const VARIANTS: &[&str] = &["web_session",
23462                                    "desktop_client",
23463                                    "mobile_client"];
23464        deserializer.deserialize_struct("RevokeDeviceSessionArg", VARIANTS, EnumVisitor)
23465    }
23466}
23467
23468impl ::serde::ser::Serialize for RevokeDeviceSessionArg {
23469    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23470        // union serializer
23471        use serde::ser::SerializeStruct;
23472        match self {
23473            RevokeDeviceSessionArg::WebSession(x) => {
23474                // struct
23475                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 3)?;
23476                s.serialize_field(".tag", "web_session")?;
23477                x.internal_serialize::<S>(&mut s)?;
23478                s.end()
23479            }
23480            RevokeDeviceSessionArg::DesktopClient(x) => {
23481                // struct
23482                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 4)?;
23483                s.serialize_field(".tag", "desktop_client")?;
23484                x.internal_serialize::<S>(&mut s)?;
23485                s.end()
23486            }
23487            RevokeDeviceSessionArg::MobileClient(x) => {
23488                // struct
23489                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 3)?;
23490                s.serialize_field(".tag", "mobile_client")?;
23491                x.internal_serialize::<S>(&mut s)?;
23492                s.end()
23493            }
23494        }
23495    }
23496}
23497
23498#[derive(Debug, Clone, PartialEq, Eq)]
23499#[non_exhaustive] // structs may have more fields added in the future.
23500pub struct RevokeDeviceSessionBatchArg {
23501    pub revoke_devices: Vec<RevokeDeviceSessionArg>,
23502}
23503
23504impl RevokeDeviceSessionBatchArg {
23505    pub fn new(revoke_devices: Vec<RevokeDeviceSessionArg>) -> Self {
23506        RevokeDeviceSessionBatchArg {
23507            revoke_devices,
23508        }
23509    }
23510}
23511
23512const REVOKE_DEVICE_SESSION_BATCH_ARG_FIELDS: &[&str] = &["revoke_devices"];
23513impl RevokeDeviceSessionBatchArg {
23514    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23515        map: V,
23516    ) -> Result<RevokeDeviceSessionBatchArg, V::Error> {
23517        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23518    }
23519
23520    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23521        mut map: V,
23522        optional: bool,
23523    ) -> Result<Option<RevokeDeviceSessionBatchArg>, V::Error> {
23524        let mut field_revoke_devices = None;
23525        let mut nothing = true;
23526        while let Some(key) = map.next_key::<&str>()? {
23527            nothing = false;
23528            match key {
23529                "revoke_devices" => {
23530                    if field_revoke_devices.is_some() {
23531                        return Err(::serde::de::Error::duplicate_field("revoke_devices"));
23532                    }
23533                    field_revoke_devices = Some(map.next_value()?);
23534                }
23535                _ => {
23536                    // unknown field allowed and ignored
23537                    map.next_value::<::serde_json::Value>()?;
23538                }
23539            }
23540        }
23541        if optional && nothing {
23542            return Ok(None);
23543        }
23544        let result = RevokeDeviceSessionBatchArg {
23545            revoke_devices: field_revoke_devices.ok_or_else(|| ::serde::de::Error::missing_field("revoke_devices"))?,
23546        };
23547        Ok(Some(result))
23548    }
23549
23550    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23551        &self,
23552        s: &mut S::SerializeStruct,
23553    ) -> Result<(), S::Error> {
23554        use serde::ser::SerializeStruct;
23555        s.serialize_field("revoke_devices", &self.revoke_devices)?;
23556        Ok(())
23557    }
23558}
23559
23560impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchArg {
23561    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23562        // struct deserializer
23563        use serde::de::{MapAccess, Visitor};
23564        struct StructVisitor;
23565        impl<'de> Visitor<'de> for StructVisitor {
23566            type Value = RevokeDeviceSessionBatchArg;
23567            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23568                f.write_str("a RevokeDeviceSessionBatchArg struct")
23569            }
23570            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23571                RevokeDeviceSessionBatchArg::internal_deserialize(map)
23572            }
23573        }
23574        deserializer.deserialize_struct("RevokeDeviceSessionBatchArg", REVOKE_DEVICE_SESSION_BATCH_ARG_FIELDS, StructVisitor)
23575    }
23576}
23577
23578impl ::serde::ser::Serialize for RevokeDeviceSessionBatchArg {
23579    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23580        // struct serializer
23581        use serde::ser::SerializeStruct;
23582        let mut s = serializer.serialize_struct("RevokeDeviceSessionBatchArg", 1)?;
23583        self.internal_serialize::<S>(&mut s)?;
23584        s.end()
23585    }
23586}
23587
23588
23589#[derive(Debug, Clone, PartialEq, Eq)]
23590#[non_exhaustive] // variants may be added in the future
23591pub enum RevokeDeviceSessionBatchError {
23592    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23593    /// typically indicates that this SDK version is out of date.
23594    Other,
23595}
23596
23597impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchError {
23598    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23599        // union deserializer
23600        use serde::de::{self, MapAccess, Visitor};
23601        struct EnumVisitor;
23602        impl<'de> Visitor<'de> for EnumVisitor {
23603            type Value = RevokeDeviceSessionBatchError;
23604            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23605                f.write_str("a RevokeDeviceSessionBatchError structure")
23606            }
23607            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23608                let tag: &str = match map.next_key()? {
23609                    Some(".tag") => map.next_value()?,
23610                    _ => return Err(de::Error::missing_field(".tag"))
23611                };
23612                // open enum with no defined variants
23613                let _ = tag;
23614                crate::eat_json_fields(&mut map)?;
23615                Ok(RevokeDeviceSessionBatchError::Other)
23616            }
23617        }
23618        const VARIANTS: &[&str] = &["other"];
23619        deserializer.deserialize_struct("RevokeDeviceSessionBatchError", VARIANTS, EnumVisitor)
23620    }
23621}
23622
23623impl ::serde::ser::Serialize for RevokeDeviceSessionBatchError {
23624    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23625        // union serializer
23626        #![allow(unused_variables)]
23627        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
23628    }
23629}
23630
23631impl ::std::error::Error for RevokeDeviceSessionBatchError {
23632}
23633
23634impl ::std::fmt::Display for RevokeDeviceSessionBatchError {
23635    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23636        write!(f, "{:?}", *self)
23637    }
23638}
23639
23640#[derive(Debug, Clone, PartialEq, Eq)]
23641#[non_exhaustive] // structs may have more fields added in the future.
23642pub struct RevokeDeviceSessionBatchResult {
23643    pub revoke_devices_status: Vec<RevokeDeviceSessionStatus>,
23644}
23645
23646impl RevokeDeviceSessionBatchResult {
23647    pub fn new(revoke_devices_status: Vec<RevokeDeviceSessionStatus>) -> Self {
23648        RevokeDeviceSessionBatchResult {
23649            revoke_devices_status,
23650        }
23651    }
23652}
23653
23654const REVOKE_DEVICE_SESSION_BATCH_RESULT_FIELDS: &[&str] = &["revoke_devices_status"];
23655impl RevokeDeviceSessionBatchResult {
23656    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23657        map: V,
23658    ) -> Result<RevokeDeviceSessionBatchResult, V::Error> {
23659        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23660    }
23661
23662    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23663        mut map: V,
23664        optional: bool,
23665    ) -> Result<Option<RevokeDeviceSessionBatchResult>, V::Error> {
23666        let mut field_revoke_devices_status = None;
23667        let mut nothing = true;
23668        while let Some(key) = map.next_key::<&str>()? {
23669            nothing = false;
23670            match key {
23671                "revoke_devices_status" => {
23672                    if field_revoke_devices_status.is_some() {
23673                        return Err(::serde::de::Error::duplicate_field("revoke_devices_status"));
23674                    }
23675                    field_revoke_devices_status = Some(map.next_value()?);
23676                }
23677                _ => {
23678                    // unknown field allowed and ignored
23679                    map.next_value::<::serde_json::Value>()?;
23680                }
23681            }
23682        }
23683        if optional && nothing {
23684            return Ok(None);
23685        }
23686        let result = RevokeDeviceSessionBatchResult {
23687            revoke_devices_status: field_revoke_devices_status.ok_or_else(|| ::serde::de::Error::missing_field("revoke_devices_status"))?,
23688        };
23689        Ok(Some(result))
23690    }
23691
23692    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23693        &self,
23694        s: &mut S::SerializeStruct,
23695    ) -> Result<(), S::Error> {
23696        use serde::ser::SerializeStruct;
23697        s.serialize_field("revoke_devices_status", &self.revoke_devices_status)?;
23698        Ok(())
23699    }
23700}
23701
23702impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchResult {
23703    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23704        // struct deserializer
23705        use serde::de::{MapAccess, Visitor};
23706        struct StructVisitor;
23707        impl<'de> Visitor<'de> for StructVisitor {
23708            type Value = RevokeDeviceSessionBatchResult;
23709            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23710                f.write_str("a RevokeDeviceSessionBatchResult struct")
23711            }
23712            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23713                RevokeDeviceSessionBatchResult::internal_deserialize(map)
23714            }
23715        }
23716        deserializer.deserialize_struct("RevokeDeviceSessionBatchResult", REVOKE_DEVICE_SESSION_BATCH_RESULT_FIELDS, StructVisitor)
23717    }
23718}
23719
23720impl ::serde::ser::Serialize for RevokeDeviceSessionBatchResult {
23721    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23722        // struct serializer
23723        use serde::ser::SerializeStruct;
23724        let mut s = serializer.serialize_struct("RevokeDeviceSessionBatchResult", 1)?;
23725        self.internal_serialize::<S>(&mut s)?;
23726        s.end()
23727    }
23728}
23729
23730#[derive(Debug, Clone, PartialEq, Eq)]
23731#[non_exhaustive] // variants may be added in the future
23732pub enum RevokeDeviceSessionError {
23733    /// Device session not found.
23734    DeviceSessionNotFound,
23735    /// Member not found.
23736    MemberNotFound,
23737    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23738    /// typically indicates that this SDK version is out of date.
23739    Other,
23740}
23741
23742impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionError {
23743    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23744        // union deserializer
23745        use serde::de::{self, MapAccess, Visitor};
23746        struct EnumVisitor;
23747        impl<'de> Visitor<'de> for EnumVisitor {
23748            type Value = RevokeDeviceSessionError;
23749            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23750                f.write_str("a RevokeDeviceSessionError structure")
23751            }
23752            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23753                let tag: &str = match map.next_key()? {
23754                    Some(".tag") => map.next_value()?,
23755                    _ => return Err(de::Error::missing_field(".tag"))
23756                };
23757                let value = match tag {
23758                    "device_session_not_found" => RevokeDeviceSessionError::DeviceSessionNotFound,
23759                    "member_not_found" => RevokeDeviceSessionError::MemberNotFound,
23760                    _ => RevokeDeviceSessionError::Other,
23761                };
23762                crate::eat_json_fields(&mut map)?;
23763                Ok(value)
23764            }
23765        }
23766        const VARIANTS: &[&str] = &["device_session_not_found",
23767                                    "member_not_found",
23768                                    "other"];
23769        deserializer.deserialize_struct("RevokeDeviceSessionError", VARIANTS, EnumVisitor)
23770    }
23771}
23772
23773impl ::serde::ser::Serialize for RevokeDeviceSessionError {
23774    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23775        // union serializer
23776        use serde::ser::SerializeStruct;
23777        match self {
23778            RevokeDeviceSessionError::DeviceSessionNotFound => {
23779                // unit
23780                let mut s = serializer.serialize_struct("RevokeDeviceSessionError", 1)?;
23781                s.serialize_field(".tag", "device_session_not_found")?;
23782                s.end()
23783            }
23784            RevokeDeviceSessionError::MemberNotFound => {
23785                // unit
23786                let mut s = serializer.serialize_struct("RevokeDeviceSessionError", 1)?;
23787                s.serialize_field(".tag", "member_not_found")?;
23788                s.end()
23789            }
23790            RevokeDeviceSessionError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23791        }
23792    }
23793}
23794
23795impl ::std::error::Error for RevokeDeviceSessionError {
23796}
23797
23798impl ::std::fmt::Display for RevokeDeviceSessionError {
23799    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23800        match self {
23801            RevokeDeviceSessionError::DeviceSessionNotFound => f.write_str("Device session not found."),
23802            RevokeDeviceSessionError::MemberNotFound => f.write_str("Member not found."),
23803            _ => write!(f, "{:?}", *self),
23804        }
23805    }
23806}
23807
23808#[derive(Debug, Clone, PartialEq, Eq)]
23809#[non_exhaustive] // structs may have more fields added in the future.
23810pub struct RevokeDeviceSessionStatus {
23811    /// Result of the revoking request.
23812    pub success: bool,
23813    /// The error cause in case of a failure.
23814    pub error_type: Option<RevokeDeviceSessionError>,
23815}
23816
23817impl RevokeDeviceSessionStatus {
23818    pub fn new(success: bool) -> Self {
23819        RevokeDeviceSessionStatus {
23820            success,
23821            error_type: None,
23822        }
23823    }
23824
23825    pub fn with_error_type(mut self, value: RevokeDeviceSessionError) -> Self {
23826        self.error_type = Some(value);
23827        self
23828    }
23829}
23830
23831const REVOKE_DEVICE_SESSION_STATUS_FIELDS: &[&str] = &["success",
23832                                                       "error_type"];
23833impl RevokeDeviceSessionStatus {
23834    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23835        map: V,
23836    ) -> Result<RevokeDeviceSessionStatus, V::Error> {
23837        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23838    }
23839
23840    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23841        mut map: V,
23842        optional: bool,
23843    ) -> Result<Option<RevokeDeviceSessionStatus>, V::Error> {
23844        let mut field_success = None;
23845        let mut field_error_type = None;
23846        let mut nothing = true;
23847        while let Some(key) = map.next_key::<&str>()? {
23848            nothing = false;
23849            match key {
23850                "success" => {
23851                    if field_success.is_some() {
23852                        return Err(::serde::de::Error::duplicate_field("success"));
23853                    }
23854                    field_success = Some(map.next_value()?);
23855                }
23856                "error_type" => {
23857                    if field_error_type.is_some() {
23858                        return Err(::serde::de::Error::duplicate_field("error_type"));
23859                    }
23860                    field_error_type = Some(map.next_value()?);
23861                }
23862                _ => {
23863                    // unknown field allowed and ignored
23864                    map.next_value::<::serde_json::Value>()?;
23865                }
23866            }
23867        }
23868        if optional && nothing {
23869            return Ok(None);
23870        }
23871        let result = RevokeDeviceSessionStatus {
23872            success: field_success.ok_or_else(|| ::serde::de::Error::missing_field("success"))?,
23873            error_type: field_error_type.and_then(Option::flatten),
23874        };
23875        Ok(Some(result))
23876    }
23877
23878    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23879        &self,
23880        s: &mut S::SerializeStruct,
23881    ) -> Result<(), S::Error> {
23882        use serde::ser::SerializeStruct;
23883        s.serialize_field("success", &self.success)?;
23884        if let Some(val) = &self.error_type {
23885            s.serialize_field("error_type", val)?;
23886        }
23887        Ok(())
23888    }
23889}
23890
23891impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionStatus {
23892    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23893        // struct deserializer
23894        use serde::de::{MapAccess, Visitor};
23895        struct StructVisitor;
23896        impl<'de> Visitor<'de> for StructVisitor {
23897            type Value = RevokeDeviceSessionStatus;
23898            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23899                f.write_str("a RevokeDeviceSessionStatus struct")
23900            }
23901            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23902                RevokeDeviceSessionStatus::internal_deserialize(map)
23903            }
23904        }
23905        deserializer.deserialize_struct("RevokeDeviceSessionStatus", REVOKE_DEVICE_SESSION_STATUS_FIELDS, StructVisitor)
23906    }
23907}
23908
23909impl ::serde::ser::Serialize for RevokeDeviceSessionStatus {
23910    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23911        // struct serializer
23912        use serde::ser::SerializeStruct;
23913        let mut s = serializer.serialize_struct("RevokeDeviceSessionStatus", 2)?;
23914        self.internal_serialize::<S>(&mut s)?;
23915        s.end()
23916    }
23917}
23918
23919#[derive(Debug, Clone, PartialEq, Eq)]
23920#[non_exhaustive] // structs may have more fields added in the future.
23921pub struct RevokeLinkedApiAppArg {
23922    /// The application's unique id.
23923    pub app_id: String,
23924    /// The unique id of the member owning the device.
23925    pub team_member_id: String,
23926    /// Field is deprecated. This flag is not longer supported, the application dedicated folder (in
23927    /// case the application uses one) will be kept.
23928    #[deprecated]
23929    pub keep_app_folder: bool,
23930}
23931
23932impl RevokeLinkedApiAppArg {
23933    pub fn new(app_id: String, team_member_id: String) -> Self {
23934        RevokeLinkedApiAppArg {
23935            app_id,
23936            team_member_id,
23937            #[allow(deprecated)] keep_app_folder: true,
23938        }
23939    }
23940
23941    #[deprecated]
23942    #[allow(deprecated)]
23943    pub fn with_keep_app_folder(mut self, value: bool) -> Self {
23944        self.keep_app_folder = value;
23945        self
23946    }
23947}
23948
23949const REVOKE_LINKED_API_APP_ARG_FIELDS: &[&str] = &["app_id",
23950                                                    "team_member_id",
23951                                                    "keep_app_folder"];
23952impl RevokeLinkedApiAppArg {
23953    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23954        map: V,
23955    ) -> Result<RevokeLinkedApiAppArg, V::Error> {
23956        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23957    }
23958
23959    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23960        mut map: V,
23961        optional: bool,
23962    ) -> Result<Option<RevokeLinkedApiAppArg>, V::Error> {
23963        let mut field_app_id = None;
23964        let mut field_team_member_id = None;
23965        let mut field_keep_app_folder = None;
23966        let mut nothing = true;
23967        while let Some(key) = map.next_key::<&str>()? {
23968            nothing = false;
23969            match key {
23970                "app_id" => {
23971                    if field_app_id.is_some() {
23972                        return Err(::serde::de::Error::duplicate_field("app_id"));
23973                    }
23974                    field_app_id = Some(map.next_value()?);
23975                }
23976                "team_member_id" => {
23977                    if field_team_member_id.is_some() {
23978                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
23979                    }
23980                    field_team_member_id = Some(map.next_value()?);
23981                }
23982                "keep_app_folder" => {
23983                    if field_keep_app_folder.is_some() {
23984                        return Err(::serde::de::Error::duplicate_field("keep_app_folder"));
23985                    }
23986                    field_keep_app_folder = Some(map.next_value()?);
23987                }
23988                _ => {
23989                    // unknown field allowed and ignored
23990                    map.next_value::<::serde_json::Value>()?;
23991                }
23992            }
23993        }
23994        if optional && nothing {
23995            return Ok(None);
23996        }
23997        let result = RevokeLinkedApiAppArg {
23998            app_id: field_app_id.ok_or_else(|| ::serde::de::Error::missing_field("app_id"))?,
23999            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
24000            #[allow(deprecated)] keep_app_folder: field_keep_app_folder.unwrap_or(true),
24001        };
24002        Ok(Some(result))
24003    }
24004
24005    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24006        &self,
24007        s: &mut S::SerializeStruct,
24008    ) -> Result<(), S::Error> {
24009        use serde::ser::SerializeStruct;
24010        s.serialize_field("app_id", &self.app_id)?;
24011        s.serialize_field("team_member_id", &self.team_member_id)?;
24012        #[allow(deprecated)]
24013        if !self.keep_app_folder {
24014            s.serialize_field("keep_app_folder", &self.keep_app_folder)?;
24015        }
24016        Ok(())
24017    }
24018}
24019
24020impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedApiAppArg {
24021    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24022        // struct deserializer
24023        use serde::de::{MapAccess, Visitor};
24024        struct StructVisitor;
24025        impl<'de> Visitor<'de> for StructVisitor {
24026            type Value = RevokeLinkedApiAppArg;
24027            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24028                f.write_str("a RevokeLinkedApiAppArg struct")
24029            }
24030            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24031                RevokeLinkedApiAppArg::internal_deserialize(map)
24032            }
24033        }
24034        deserializer.deserialize_struct("RevokeLinkedApiAppArg", REVOKE_LINKED_API_APP_ARG_FIELDS, StructVisitor)
24035    }
24036}
24037
24038impl ::serde::ser::Serialize for RevokeLinkedApiAppArg {
24039    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24040        // struct serializer
24041        use serde::ser::SerializeStruct;
24042        let mut s = serializer.serialize_struct("RevokeLinkedApiAppArg", 3)?;
24043        self.internal_serialize::<S>(&mut s)?;
24044        s.end()
24045    }
24046}
24047
24048#[derive(Debug, Clone, PartialEq, Eq)]
24049#[non_exhaustive] // structs may have more fields added in the future.
24050pub struct RevokeLinkedApiAppBatchArg {
24051    pub revoke_linked_app: Vec<RevokeLinkedApiAppArg>,
24052}
24053
24054impl RevokeLinkedApiAppBatchArg {
24055    pub fn new(revoke_linked_app: Vec<RevokeLinkedApiAppArg>) -> Self {
24056        RevokeLinkedApiAppBatchArg {
24057            revoke_linked_app,
24058        }
24059    }
24060}
24061
24062const REVOKE_LINKED_API_APP_BATCH_ARG_FIELDS: &[&str] = &["revoke_linked_app"];
24063impl RevokeLinkedApiAppBatchArg {
24064    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24065        map: V,
24066    ) -> Result<RevokeLinkedApiAppBatchArg, V::Error> {
24067        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24068    }
24069
24070    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24071        mut map: V,
24072        optional: bool,
24073    ) -> Result<Option<RevokeLinkedApiAppBatchArg>, V::Error> {
24074        let mut field_revoke_linked_app = None;
24075        let mut nothing = true;
24076        while let Some(key) = map.next_key::<&str>()? {
24077            nothing = false;
24078            match key {
24079                "revoke_linked_app" => {
24080                    if field_revoke_linked_app.is_some() {
24081                        return Err(::serde::de::Error::duplicate_field("revoke_linked_app"));
24082                    }
24083                    field_revoke_linked_app = Some(map.next_value()?);
24084                }
24085                _ => {
24086                    // unknown field allowed and ignored
24087                    map.next_value::<::serde_json::Value>()?;
24088                }
24089            }
24090        }
24091        if optional && nothing {
24092            return Ok(None);
24093        }
24094        let result = RevokeLinkedApiAppBatchArg {
24095            revoke_linked_app: field_revoke_linked_app.ok_or_else(|| ::serde::de::Error::missing_field("revoke_linked_app"))?,
24096        };
24097        Ok(Some(result))
24098    }
24099
24100    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24101        &self,
24102        s: &mut S::SerializeStruct,
24103    ) -> Result<(), S::Error> {
24104        use serde::ser::SerializeStruct;
24105        s.serialize_field("revoke_linked_app", &self.revoke_linked_app)?;
24106        Ok(())
24107    }
24108}
24109
24110impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedApiAppBatchArg {
24111    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24112        // struct deserializer
24113        use serde::de::{MapAccess, Visitor};
24114        struct StructVisitor;
24115        impl<'de> Visitor<'de> for StructVisitor {
24116            type Value = RevokeLinkedApiAppBatchArg;
24117            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24118                f.write_str("a RevokeLinkedApiAppBatchArg struct")
24119            }
24120            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24121                RevokeLinkedApiAppBatchArg::internal_deserialize(map)
24122            }
24123        }
24124        deserializer.deserialize_struct("RevokeLinkedApiAppBatchArg", REVOKE_LINKED_API_APP_BATCH_ARG_FIELDS, StructVisitor)
24125    }
24126}
24127
24128impl ::serde::ser::Serialize for RevokeLinkedApiAppBatchArg {
24129    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24130        // struct serializer
24131        use serde::ser::SerializeStruct;
24132        let mut s = serializer.serialize_struct("RevokeLinkedApiAppBatchArg", 1)?;
24133        self.internal_serialize::<S>(&mut s)?;
24134        s.end()
24135    }
24136}
24137
24138/// Error returned by
24139/// [`linked_apps_revoke_linked_app_batch()`](crate::team::linked_apps_revoke_linked_app_batch).
24140#[derive(Debug, Clone, PartialEq, Eq)]
24141#[non_exhaustive] // variants may be added in the future
24142pub enum RevokeLinkedAppBatchError {
24143    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24144    /// typically indicates that this SDK version is out of date.
24145    Other,
24146}
24147
24148impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppBatchError {
24149    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24150        // union deserializer
24151        use serde::de::{self, MapAccess, Visitor};
24152        struct EnumVisitor;
24153        impl<'de> Visitor<'de> for EnumVisitor {
24154            type Value = RevokeLinkedAppBatchError;
24155            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24156                f.write_str("a RevokeLinkedAppBatchError structure")
24157            }
24158            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24159                let tag: &str = match map.next_key()? {
24160                    Some(".tag") => map.next_value()?,
24161                    _ => return Err(de::Error::missing_field(".tag"))
24162                };
24163                // open enum with no defined variants
24164                let _ = tag;
24165                crate::eat_json_fields(&mut map)?;
24166                Ok(RevokeLinkedAppBatchError::Other)
24167            }
24168        }
24169        const VARIANTS: &[&str] = &["other"];
24170        deserializer.deserialize_struct("RevokeLinkedAppBatchError", VARIANTS, EnumVisitor)
24171    }
24172}
24173
24174impl ::serde::ser::Serialize for RevokeLinkedAppBatchError {
24175    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24176        // union serializer
24177        #![allow(unused_variables)]
24178        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
24179    }
24180}
24181
24182impl ::std::error::Error for RevokeLinkedAppBatchError {
24183}
24184
24185impl ::std::fmt::Display for RevokeLinkedAppBatchError {
24186    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24187        write!(f, "{:?}", *self)
24188    }
24189}
24190
24191#[derive(Debug, Clone, PartialEq, Eq)]
24192#[non_exhaustive] // structs may have more fields added in the future.
24193pub struct RevokeLinkedAppBatchResult {
24194    pub revoke_linked_app_status: Vec<RevokeLinkedAppStatus>,
24195}
24196
24197impl RevokeLinkedAppBatchResult {
24198    pub fn new(revoke_linked_app_status: Vec<RevokeLinkedAppStatus>) -> Self {
24199        RevokeLinkedAppBatchResult {
24200            revoke_linked_app_status,
24201        }
24202    }
24203}
24204
24205const REVOKE_LINKED_APP_BATCH_RESULT_FIELDS: &[&str] = &["revoke_linked_app_status"];
24206impl RevokeLinkedAppBatchResult {
24207    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24208        map: V,
24209    ) -> Result<RevokeLinkedAppBatchResult, V::Error> {
24210        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24211    }
24212
24213    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24214        mut map: V,
24215        optional: bool,
24216    ) -> Result<Option<RevokeLinkedAppBatchResult>, V::Error> {
24217        let mut field_revoke_linked_app_status = None;
24218        let mut nothing = true;
24219        while let Some(key) = map.next_key::<&str>()? {
24220            nothing = false;
24221            match key {
24222                "revoke_linked_app_status" => {
24223                    if field_revoke_linked_app_status.is_some() {
24224                        return Err(::serde::de::Error::duplicate_field("revoke_linked_app_status"));
24225                    }
24226                    field_revoke_linked_app_status = Some(map.next_value()?);
24227                }
24228                _ => {
24229                    // unknown field allowed and ignored
24230                    map.next_value::<::serde_json::Value>()?;
24231                }
24232            }
24233        }
24234        if optional && nothing {
24235            return Ok(None);
24236        }
24237        let result = RevokeLinkedAppBatchResult {
24238            revoke_linked_app_status: field_revoke_linked_app_status.ok_or_else(|| ::serde::de::Error::missing_field("revoke_linked_app_status"))?,
24239        };
24240        Ok(Some(result))
24241    }
24242
24243    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24244        &self,
24245        s: &mut S::SerializeStruct,
24246    ) -> Result<(), S::Error> {
24247        use serde::ser::SerializeStruct;
24248        s.serialize_field("revoke_linked_app_status", &self.revoke_linked_app_status)?;
24249        Ok(())
24250    }
24251}
24252
24253impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppBatchResult {
24254    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24255        // struct deserializer
24256        use serde::de::{MapAccess, Visitor};
24257        struct StructVisitor;
24258        impl<'de> Visitor<'de> for StructVisitor {
24259            type Value = RevokeLinkedAppBatchResult;
24260            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24261                f.write_str("a RevokeLinkedAppBatchResult struct")
24262            }
24263            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24264                RevokeLinkedAppBatchResult::internal_deserialize(map)
24265            }
24266        }
24267        deserializer.deserialize_struct("RevokeLinkedAppBatchResult", REVOKE_LINKED_APP_BATCH_RESULT_FIELDS, StructVisitor)
24268    }
24269}
24270
24271impl ::serde::ser::Serialize for RevokeLinkedAppBatchResult {
24272    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24273        // struct serializer
24274        use serde::ser::SerializeStruct;
24275        let mut s = serializer.serialize_struct("RevokeLinkedAppBatchResult", 1)?;
24276        self.internal_serialize::<S>(&mut s)?;
24277        s.end()
24278    }
24279}
24280
24281/// Error returned by
24282/// [`linked_apps_revoke_linked_app()`](crate::team::linked_apps_revoke_linked_app).
24283#[derive(Debug, Clone, PartialEq, Eq)]
24284#[non_exhaustive] // variants may be added in the future
24285pub enum RevokeLinkedAppError {
24286    /// Application not found.
24287    AppNotFound,
24288    /// Member not found.
24289    MemberNotFound,
24290    /// App folder removal is not supported.
24291    AppFolderRemovalNotSupported,
24292    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24293    /// typically indicates that this SDK version is out of date.
24294    Other,
24295}
24296
24297impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppError {
24298    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24299        // union deserializer
24300        use serde::de::{self, MapAccess, Visitor};
24301        struct EnumVisitor;
24302        impl<'de> Visitor<'de> for EnumVisitor {
24303            type Value = RevokeLinkedAppError;
24304            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24305                f.write_str("a RevokeLinkedAppError structure")
24306            }
24307            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24308                let tag: &str = match map.next_key()? {
24309                    Some(".tag") => map.next_value()?,
24310                    _ => return Err(de::Error::missing_field(".tag"))
24311                };
24312                let value = match tag {
24313                    "app_not_found" => RevokeLinkedAppError::AppNotFound,
24314                    "member_not_found" => RevokeLinkedAppError::MemberNotFound,
24315                    "app_folder_removal_not_supported" => RevokeLinkedAppError::AppFolderRemovalNotSupported,
24316                    _ => RevokeLinkedAppError::Other,
24317                };
24318                crate::eat_json_fields(&mut map)?;
24319                Ok(value)
24320            }
24321        }
24322        const VARIANTS: &[&str] = &["app_not_found",
24323                                    "member_not_found",
24324                                    "app_folder_removal_not_supported",
24325                                    "other"];
24326        deserializer.deserialize_struct("RevokeLinkedAppError", VARIANTS, EnumVisitor)
24327    }
24328}
24329
24330impl ::serde::ser::Serialize for RevokeLinkedAppError {
24331    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24332        // union serializer
24333        use serde::ser::SerializeStruct;
24334        match self {
24335            RevokeLinkedAppError::AppNotFound => {
24336                // unit
24337                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
24338                s.serialize_field(".tag", "app_not_found")?;
24339                s.end()
24340            }
24341            RevokeLinkedAppError::MemberNotFound => {
24342                // unit
24343                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
24344                s.serialize_field(".tag", "member_not_found")?;
24345                s.end()
24346            }
24347            RevokeLinkedAppError::AppFolderRemovalNotSupported => {
24348                // unit
24349                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
24350                s.serialize_field(".tag", "app_folder_removal_not_supported")?;
24351                s.end()
24352            }
24353            RevokeLinkedAppError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24354        }
24355    }
24356}
24357
24358impl ::std::error::Error for RevokeLinkedAppError {
24359}
24360
24361impl ::std::fmt::Display for RevokeLinkedAppError {
24362    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24363        match self {
24364            RevokeLinkedAppError::AppNotFound => f.write_str("Application not found."),
24365            RevokeLinkedAppError::MemberNotFound => f.write_str("Member not found."),
24366            RevokeLinkedAppError::AppFolderRemovalNotSupported => f.write_str("App folder removal is not supported."),
24367            _ => write!(f, "{:?}", *self),
24368        }
24369    }
24370}
24371
24372#[derive(Debug, Clone, PartialEq, Eq)]
24373#[non_exhaustive] // structs may have more fields added in the future.
24374pub struct RevokeLinkedAppStatus {
24375    /// Result of the revoking request.
24376    pub success: bool,
24377    /// The error cause in case of a failure.
24378    pub error_type: Option<RevokeLinkedAppError>,
24379}
24380
24381impl RevokeLinkedAppStatus {
24382    pub fn new(success: bool) -> Self {
24383        RevokeLinkedAppStatus {
24384            success,
24385            error_type: None,
24386        }
24387    }
24388
24389    pub fn with_error_type(mut self, value: RevokeLinkedAppError) -> Self {
24390        self.error_type = Some(value);
24391        self
24392    }
24393}
24394
24395const REVOKE_LINKED_APP_STATUS_FIELDS: &[&str] = &["success",
24396                                                   "error_type"];
24397impl RevokeLinkedAppStatus {
24398    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24399        map: V,
24400    ) -> Result<RevokeLinkedAppStatus, V::Error> {
24401        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24402    }
24403
24404    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24405        mut map: V,
24406        optional: bool,
24407    ) -> Result<Option<RevokeLinkedAppStatus>, V::Error> {
24408        let mut field_success = None;
24409        let mut field_error_type = None;
24410        let mut nothing = true;
24411        while let Some(key) = map.next_key::<&str>()? {
24412            nothing = false;
24413            match key {
24414                "success" => {
24415                    if field_success.is_some() {
24416                        return Err(::serde::de::Error::duplicate_field("success"));
24417                    }
24418                    field_success = Some(map.next_value()?);
24419                }
24420                "error_type" => {
24421                    if field_error_type.is_some() {
24422                        return Err(::serde::de::Error::duplicate_field("error_type"));
24423                    }
24424                    field_error_type = Some(map.next_value()?);
24425                }
24426                _ => {
24427                    // unknown field allowed and ignored
24428                    map.next_value::<::serde_json::Value>()?;
24429                }
24430            }
24431        }
24432        if optional && nothing {
24433            return Ok(None);
24434        }
24435        let result = RevokeLinkedAppStatus {
24436            success: field_success.ok_or_else(|| ::serde::de::Error::missing_field("success"))?,
24437            error_type: field_error_type.and_then(Option::flatten),
24438        };
24439        Ok(Some(result))
24440    }
24441
24442    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24443        &self,
24444        s: &mut S::SerializeStruct,
24445    ) -> Result<(), S::Error> {
24446        use serde::ser::SerializeStruct;
24447        s.serialize_field("success", &self.success)?;
24448        if let Some(val) = &self.error_type {
24449            s.serialize_field("error_type", val)?;
24450        }
24451        Ok(())
24452    }
24453}
24454
24455impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppStatus {
24456    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24457        // struct deserializer
24458        use serde::de::{MapAccess, Visitor};
24459        struct StructVisitor;
24460        impl<'de> Visitor<'de> for StructVisitor {
24461            type Value = RevokeLinkedAppStatus;
24462            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24463                f.write_str("a RevokeLinkedAppStatus struct")
24464            }
24465            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24466                RevokeLinkedAppStatus::internal_deserialize(map)
24467            }
24468        }
24469        deserializer.deserialize_struct("RevokeLinkedAppStatus", REVOKE_LINKED_APP_STATUS_FIELDS, StructVisitor)
24470    }
24471}
24472
24473impl ::serde::ser::Serialize for RevokeLinkedAppStatus {
24474    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24475        // struct serializer
24476        use serde::ser::SerializeStruct;
24477        let mut s = serializer.serialize_struct("RevokeLinkedAppStatus", 2)?;
24478        self.internal_serialize::<S>(&mut s)?;
24479        s.end()
24480    }
24481}
24482
24483#[derive(Debug, Clone, PartialEq, Eq)]
24484#[non_exhaustive] // structs may have more fields added in the future.
24485pub struct SetCustomQuotaArg {
24486    /// List of users and their custom quotas.
24487    pub users_and_quotas: Vec<UserCustomQuotaArg>,
24488}
24489
24490impl SetCustomQuotaArg {
24491    pub fn new(users_and_quotas: Vec<UserCustomQuotaArg>) -> Self {
24492        SetCustomQuotaArg {
24493            users_and_quotas,
24494        }
24495    }
24496}
24497
24498const SET_CUSTOM_QUOTA_ARG_FIELDS: &[&str] = &["users_and_quotas"];
24499impl SetCustomQuotaArg {
24500    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24501        map: V,
24502    ) -> Result<SetCustomQuotaArg, V::Error> {
24503        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24504    }
24505
24506    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24507        mut map: V,
24508        optional: bool,
24509    ) -> Result<Option<SetCustomQuotaArg>, V::Error> {
24510        let mut field_users_and_quotas = None;
24511        let mut nothing = true;
24512        while let Some(key) = map.next_key::<&str>()? {
24513            nothing = false;
24514            match key {
24515                "users_and_quotas" => {
24516                    if field_users_and_quotas.is_some() {
24517                        return Err(::serde::de::Error::duplicate_field("users_and_quotas"));
24518                    }
24519                    field_users_and_quotas = Some(map.next_value()?);
24520                }
24521                _ => {
24522                    // unknown field allowed and ignored
24523                    map.next_value::<::serde_json::Value>()?;
24524                }
24525            }
24526        }
24527        if optional && nothing {
24528            return Ok(None);
24529        }
24530        let result = SetCustomQuotaArg {
24531            users_and_quotas: field_users_and_quotas.ok_or_else(|| ::serde::de::Error::missing_field("users_and_quotas"))?,
24532        };
24533        Ok(Some(result))
24534    }
24535
24536    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24537        &self,
24538        s: &mut S::SerializeStruct,
24539    ) -> Result<(), S::Error> {
24540        use serde::ser::SerializeStruct;
24541        s.serialize_field("users_and_quotas", &self.users_and_quotas)?;
24542        Ok(())
24543    }
24544}
24545
24546impl<'de> ::serde::de::Deserialize<'de> for SetCustomQuotaArg {
24547    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24548        // struct deserializer
24549        use serde::de::{MapAccess, Visitor};
24550        struct StructVisitor;
24551        impl<'de> Visitor<'de> for StructVisitor {
24552            type Value = SetCustomQuotaArg;
24553            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24554                f.write_str("a SetCustomQuotaArg struct")
24555            }
24556            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24557                SetCustomQuotaArg::internal_deserialize(map)
24558            }
24559        }
24560        deserializer.deserialize_struct("SetCustomQuotaArg", SET_CUSTOM_QUOTA_ARG_FIELDS, StructVisitor)
24561    }
24562}
24563
24564impl ::serde::ser::Serialize for SetCustomQuotaArg {
24565    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24566        // struct serializer
24567        use serde::ser::SerializeStruct;
24568        let mut s = serializer.serialize_struct("SetCustomQuotaArg", 1)?;
24569        self.internal_serialize::<S>(&mut s)?;
24570        s.end()
24571    }
24572}
24573
24574/// Error returned when setting member custom quota.
24575#[derive(Debug, Clone, PartialEq, Eq)]
24576#[non_exhaustive] // variants may be added in the future
24577pub enum SetCustomQuotaError {
24578    /// A maximum of 1000 users can be set for a single call.
24579    TooManyUsers,
24580    /// Some of the users are on the excluded users list and can't have custom quota set.
24581    SomeUsersAreExcluded,
24582    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24583    /// typically indicates that this SDK version is out of date.
24584    Other,
24585}
24586
24587impl<'de> ::serde::de::Deserialize<'de> for SetCustomQuotaError {
24588    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24589        // union deserializer
24590        use serde::de::{self, MapAccess, Visitor};
24591        struct EnumVisitor;
24592        impl<'de> Visitor<'de> for EnumVisitor {
24593            type Value = SetCustomQuotaError;
24594            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24595                f.write_str("a SetCustomQuotaError structure")
24596            }
24597            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24598                let tag: &str = match map.next_key()? {
24599                    Some(".tag") => map.next_value()?,
24600                    _ => return Err(de::Error::missing_field(".tag"))
24601                };
24602                let value = match tag {
24603                    "too_many_users" => SetCustomQuotaError::TooManyUsers,
24604                    "some_users_are_excluded" => SetCustomQuotaError::SomeUsersAreExcluded,
24605                    _ => SetCustomQuotaError::Other,
24606                };
24607                crate::eat_json_fields(&mut map)?;
24608                Ok(value)
24609            }
24610        }
24611        const VARIANTS: &[&str] = &["too_many_users",
24612                                    "other",
24613                                    "some_users_are_excluded"];
24614        deserializer.deserialize_struct("SetCustomQuotaError", VARIANTS, EnumVisitor)
24615    }
24616}
24617
24618impl ::serde::ser::Serialize for SetCustomQuotaError {
24619    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24620        // union serializer
24621        use serde::ser::SerializeStruct;
24622        match self {
24623            SetCustomQuotaError::TooManyUsers => {
24624                // unit
24625                let mut s = serializer.serialize_struct("SetCustomQuotaError", 1)?;
24626                s.serialize_field(".tag", "too_many_users")?;
24627                s.end()
24628            }
24629            SetCustomQuotaError::SomeUsersAreExcluded => {
24630                // unit
24631                let mut s = serializer.serialize_struct("SetCustomQuotaError", 1)?;
24632                s.serialize_field(".tag", "some_users_are_excluded")?;
24633                s.end()
24634            }
24635            SetCustomQuotaError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24636        }
24637    }
24638}
24639
24640impl ::std::error::Error for SetCustomQuotaError {
24641}
24642
24643impl ::std::fmt::Display for SetCustomQuotaError {
24644    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24645        match self {
24646            SetCustomQuotaError::TooManyUsers => f.write_str("A maximum of 1000 users can be set for a single call."),
24647            SetCustomQuotaError::SomeUsersAreExcluded => f.write_str("Some of the users are on the excluded users list and can't have custom quota set."),
24648            _ => write!(f, "{:?}", *self),
24649        }
24650    }
24651}
24652
24653// union extends CustomQuotaError
24654impl From<CustomQuotaError> for SetCustomQuotaError {
24655    fn from(parent: CustomQuotaError) -> Self {
24656        match parent {
24657            CustomQuotaError::TooManyUsers => SetCustomQuotaError::TooManyUsers,
24658            CustomQuotaError::Other => SetCustomQuotaError::Other,
24659        }
24660    }
24661}
24662/// Structure representing Approve List entries. Domain and emails are supported. At least one entry
24663/// of any supported type is required.
24664#[derive(Debug, Clone, PartialEq, Eq, Default)]
24665#[non_exhaustive] // structs may have more fields added in the future.
24666pub struct SharingAllowlistAddArgs {
24667    /// List of domains represented by valid string representation (RFC-1034/5).
24668    pub domains: Option<Vec<String>>,
24669    /// List of emails represented by valid string representation (RFC-5322/822).
24670    pub emails: Option<Vec<String>>,
24671}
24672
24673impl SharingAllowlistAddArgs {
24674    pub fn with_domains(mut self, value: Vec<String>) -> Self {
24675        self.domains = Some(value);
24676        self
24677    }
24678
24679    pub fn with_emails(mut self, value: Vec<String>) -> Self {
24680        self.emails = Some(value);
24681        self
24682    }
24683}
24684
24685const SHARING_ALLOWLIST_ADD_ARGS_FIELDS: &[&str] = &["domains",
24686                                                     "emails"];
24687impl SharingAllowlistAddArgs {
24688    // no _opt deserializer
24689    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24690        mut map: V,
24691    ) -> Result<SharingAllowlistAddArgs, V::Error> {
24692        let mut field_domains = None;
24693        let mut field_emails = None;
24694        while let Some(key) = map.next_key::<&str>()? {
24695            match key {
24696                "domains" => {
24697                    if field_domains.is_some() {
24698                        return Err(::serde::de::Error::duplicate_field("domains"));
24699                    }
24700                    field_domains = Some(map.next_value()?);
24701                }
24702                "emails" => {
24703                    if field_emails.is_some() {
24704                        return Err(::serde::de::Error::duplicate_field("emails"));
24705                    }
24706                    field_emails = Some(map.next_value()?);
24707                }
24708                _ => {
24709                    // unknown field allowed and ignored
24710                    map.next_value::<::serde_json::Value>()?;
24711                }
24712            }
24713        }
24714        let result = SharingAllowlistAddArgs {
24715            domains: field_domains.and_then(Option::flatten),
24716            emails: field_emails.and_then(Option::flatten),
24717        };
24718        Ok(result)
24719    }
24720
24721    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24722        &self,
24723        s: &mut S::SerializeStruct,
24724    ) -> Result<(), S::Error> {
24725        use serde::ser::SerializeStruct;
24726        if let Some(val) = &self.domains {
24727            s.serialize_field("domains", val)?;
24728        }
24729        if let Some(val) = &self.emails {
24730            s.serialize_field("emails", val)?;
24731        }
24732        Ok(())
24733    }
24734}
24735
24736impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddArgs {
24737    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24738        // struct deserializer
24739        use serde::de::{MapAccess, Visitor};
24740        struct StructVisitor;
24741        impl<'de> Visitor<'de> for StructVisitor {
24742            type Value = SharingAllowlistAddArgs;
24743            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24744                f.write_str("a SharingAllowlistAddArgs struct")
24745            }
24746            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24747                SharingAllowlistAddArgs::internal_deserialize(map)
24748            }
24749        }
24750        deserializer.deserialize_struct("SharingAllowlistAddArgs", SHARING_ALLOWLIST_ADD_ARGS_FIELDS, StructVisitor)
24751    }
24752}
24753
24754impl ::serde::ser::Serialize for SharingAllowlistAddArgs {
24755    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24756        // struct serializer
24757        use serde::ser::SerializeStruct;
24758        let mut s = serializer.serialize_struct("SharingAllowlistAddArgs", 2)?;
24759        self.internal_serialize::<S>(&mut s)?;
24760        s.end()
24761    }
24762}
24763
24764#[derive(Debug, Clone, PartialEq, Eq)]
24765#[non_exhaustive] // variants may be added in the future
24766pub enum SharingAllowlistAddError {
24767    /// One of provided values is not valid.
24768    MalformedEntry(String),
24769    /// Neither single domain nor email provided.
24770    NoEntriesProvided,
24771    /// Too many entries provided within one call.
24772    TooManyEntriesProvided,
24773    /// Team entries limit reached.
24774    TeamLimitReached,
24775    /// Unknown error.
24776    UnknownError,
24777    /// Entries already exists.
24778    EntriesAlreadyExist(String),
24779    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24780    /// typically indicates that this SDK version is out of date.
24781    Other,
24782}
24783
24784impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddError {
24785    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24786        // union deserializer
24787        use serde::de::{self, MapAccess, Visitor};
24788        struct EnumVisitor;
24789        impl<'de> Visitor<'de> for EnumVisitor {
24790            type Value = SharingAllowlistAddError;
24791            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24792                f.write_str("a SharingAllowlistAddError structure")
24793            }
24794            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24795                let tag: &str = match map.next_key()? {
24796                    Some(".tag") => map.next_value()?,
24797                    _ => return Err(de::Error::missing_field(".tag"))
24798                };
24799                let value = match tag {
24800                    "malformed_entry" => {
24801                        match map.next_key()? {
24802                            Some("malformed_entry") => SharingAllowlistAddError::MalformedEntry(map.next_value()?),
24803                            None => return Err(de::Error::missing_field("malformed_entry")),
24804                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24805                        }
24806                    }
24807                    "no_entries_provided" => SharingAllowlistAddError::NoEntriesProvided,
24808                    "too_many_entries_provided" => SharingAllowlistAddError::TooManyEntriesProvided,
24809                    "team_limit_reached" => SharingAllowlistAddError::TeamLimitReached,
24810                    "unknown_error" => SharingAllowlistAddError::UnknownError,
24811                    "entries_already_exist" => {
24812                        match map.next_key()? {
24813                            Some("entries_already_exist") => SharingAllowlistAddError::EntriesAlreadyExist(map.next_value()?),
24814                            None => return Err(de::Error::missing_field("entries_already_exist")),
24815                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24816                        }
24817                    }
24818                    _ => SharingAllowlistAddError::Other,
24819                };
24820                crate::eat_json_fields(&mut map)?;
24821                Ok(value)
24822            }
24823        }
24824        const VARIANTS: &[&str] = &["malformed_entry",
24825                                    "no_entries_provided",
24826                                    "too_many_entries_provided",
24827                                    "team_limit_reached",
24828                                    "unknown_error",
24829                                    "entries_already_exist",
24830                                    "other"];
24831        deserializer.deserialize_struct("SharingAllowlistAddError", VARIANTS, EnumVisitor)
24832    }
24833}
24834
24835impl ::serde::ser::Serialize for SharingAllowlistAddError {
24836    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24837        // union serializer
24838        use serde::ser::SerializeStruct;
24839        match self {
24840            SharingAllowlistAddError::MalformedEntry(x) => {
24841                // primitive
24842                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 2)?;
24843                s.serialize_field(".tag", "malformed_entry")?;
24844                s.serialize_field("malformed_entry", x)?;
24845                s.end()
24846            }
24847            SharingAllowlistAddError::NoEntriesProvided => {
24848                // unit
24849                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
24850                s.serialize_field(".tag", "no_entries_provided")?;
24851                s.end()
24852            }
24853            SharingAllowlistAddError::TooManyEntriesProvided => {
24854                // unit
24855                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
24856                s.serialize_field(".tag", "too_many_entries_provided")?;
24857                s.end()
24858            }
24859            SharingAllowlistAddError::TeamLimitReached => {
24860                // unit
24861                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
24862                s.serialize_field(".tag", "team_limit_reached")?;
24863                s.end()
24864            }
24865            SharingAllowlistAddError::UnknownError => {
24866                // unit
24867                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
24868                s.serialize_field(".tag", "unknown_error")?;
24869                s.end()
24870            }
24871            SharingAllowlistAddError::EntriesAlreadyExist(x) => {
24872                // primitive
24873                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 2)?;
24874                s.serialize_field(".tag", "entries_already_exist")?;
24875                s.serialize_field("entries_already_exist", x)?;
24876                s.end()
24877            }
24878            SharingAllowlistAddError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24879        }
24880    }
24881}
24882
24883impl ::std::error::Error for SharingAllowlistAddError {
24884}
24885
24886impl ::std::fmt::Display for SharingAllowlistAddError {
24887    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24888        match self {
24889            SharingAllowlistAddError::MalformedEntry(inner) => write!(f, "One of provided values is not valid: {:?}", inner),
24890            SharingAllowlistAddError::NoEntriesProvided => f.write_str("Neither single domain nor email provided."),
24891            SharingAllowlistAddError::TooManyEntriesProvided => f.write_str("Too many entries provided within one call."),
24892            SharingAllowlistAddError::TeamLimitReached => f.write_str("Team entries limit reached."),
24893            SharingAllowlistAddError::UnknownError => f.write_str("Unknown error."),
24894            SharingAllowlistAddError::EntriesAlreadyExist(inner) => write!(f, "Entries already exists: {:?}", inner),
24895            _ => write!(f, "{:?}", *self),
24896        }
24897    }
24898}
24899
24900/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
24901/// Stone.
24902#[derive(Debug, Clone, PartialEq, Eq, Default)]
24903#[non_exhaustive] // structs may have more fields added in the future.
24904pub struct SharingAllowlistAddResponse {
24905}
24906
24907const SHARING_ALLOWLIST_ADD_RESPONSE_FIELDS: &[&str] = &[];
24908impl SharingAllowlistAddResponse {
24909    // no _opt deserializer
24910    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24911        mut map: V,
24912    ) -> Result<SharingAllowlistAddResponse, V::Error> {
24913        // ignore any fields found; none are presently recognized
24914        crate::eat_json_fields(&mut map)?;
24915        Ok(SharingAllowlistAddResponse {})
24916    }
24917}
24918
24919impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddResponse {
24920    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24921        // struct deserializer
24922        use serde::de::{MapAccess, Visitor};
24923        struct StructVisitor;
24924        impl<'de> Visitor<'de> for StructVisitor {
24925            type Value = SharingAllowlistAddResponse;
24926            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24927                f.write_str("a SharingAllowlistAddResponse struct")
24928            }
24929            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24930                SharingAllowlistAddResponse::internal_deserialize(map)
24931            }
24932        }
24933        deserializer.deserialize_struct("SharingAllowlistAddResponse", SHARING_ALLOWLIST_ADD_RESPONSE_FIELDS, StructVisitor)
24934    }
24935}
24936
24937impl ::serde::ser::Serialize for SharingAllowlistAddResponse {
24938    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24939        // struct serializer
24940        use serde::ser::SerializeStruct;
24941        serializer.serialize_struct("SharingAllowlistAddResponse", 0)?.end()
24942    }
24943}
24944
24945#[derive(Debug, Clone, PartialEq, Eq)]
24946#[non_exhaustive] // structs may have more fields added in the future.
24947pub struct SharingAllowlistListArg {
24948    /// The number of entries to fetch at one time.
24949    pub limit: u32,
24950}
24951
24952impl Default for SharingAllowlistListArg {
24953    fn default() -> Self {
24954        SharingAllowlistListArg {
24955            limit: 1000,
24956        }
24957    }
24958}
24959
24960impl SharingAllowlistListArg {
24961    pub fn with_limit(mut self, value: u32) -> Self {
24962        self.limit = value;
24963        self
24964    }
24965}
24966
24967const SHARING_ALLOWLIST_LIST_ARG_FIELDS: &[&str] = &["limit"];
24968impl SharingAllowlistListArg {
24969    // no _opt deserializer
24970    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24971        mut map: V,
24972    ) -> Result<SharingAllowlistListArg, V::Error> {
24973        let mut field_limit = None;
24974        while let Some(key) = map.next_key::<&str>()? {
24975            match key {
24976                "limit" => {
24977                    if field_limit.is_some() {
24978                        return Err(::serde::de::Error::duplicate_field("limit"));
24979                    }
24980                    field_limit = Some(map.next_value()?);
24981                }
24982                _ => {
24983                    // unknown field allowed and ignored
24984                    map.next_value::<::serde_json::Value>()?;
24985                }
24986            }
24987        }
24988        let result = SharingAllowlistListArg {
24989            limit: field_limit.unwrap_or(1000),
24990        };
24991        Ok(result)
24992    }
24993
24994    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24995        &self,
24996        s: &mut S::SerializeStruct,
24997    ) -> Result<(), S::Error> {
24998        use serde::ser::SerializeStruct;
24999        if self.limit != 1000 {
25000            s.serialize_field("limit", &self.limit)?;
25001        }
25002        Ok(())
25003    }
25004}
25005
25006impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListArg {
25007    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25008        // struct deserializer
25009        use serde::de::{MapAccess, Visitor};
25010        struct StructVisitor;
25011        impl<'de> Visitor<'de> for StructVisitor {
25012            type Value = SharingAllowlistListArg;
25013            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25014                f.write_str("a SharingAllowlistListArg struct")
25015            }
25016            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25017                SharingAllowlistListArg::internal_deserialize(map)
25018            }
25019        }
25020        deserializer.deserialize_struct("SharingAllowlistListArg", SHARING_ALLOWLIST_LIST_ARG_FIELDS, StructVisitor)
25021    }
25022}
25023
25024impl ::serde::ser::Serialize for SharingAllowlistListArg {
25025    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25026        // struct serializer
25027        use serde::ser::SerializeStruct;
25028        let mut s = serializer.serialize_struct("SharingAllowlistListArg", 1)?;
25029        self.internal_serialize::<S>(&mut s)?;
25030        s.end()
25031    }
25032}
25033
25034#[derive(Debug, Clone, PartialEq, Eq)]
25035#[non_exhaustive] // structs may have more fields added in the future.
25036pub struct SharingAllowlistListContinueArg {
25037    /// The cursor returned from a previous call to
25038    /// [`sharing_allowlist_list()`](crate::team::sharing_allowlist_list) or
25039    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
25040    pub cursor: String,
25041}
25042
25043impl SharingAllowlistListContinueArg {
25044    pub fn new(cursor: String) -> Self {
25045        SharingAllowlistListContinueArg {
25046            cursor,
25047        }
25048    }
25049}
25050
25051const SHARING_ALLOWLIST_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
25052impl SharingAllowlistListContinueArg {
25053    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25054        map: V,
25055    ) -> Result<SharingAllowlistListContinueArg, V::Error> {
25056        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25057    }
25058
25059    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25060        mut map: V,
25061        optional: bool,
25062    ) -> Result<Option<SharingAllowlistListContinueArg>, V::Error> {
25063        let mut field_cursor = None;
25064        let mut nothing = true;
25065        while let Some(key) = map.next_key::<&str>()? {
25066            nothing = false;
25067            match key {
25068                "cursor" => {
25069                    if field_cursor.is_some() {
25070                        return Err(::serde::de::Error::duplicate_field("cursor"));
25071                    }
25072                    field_cursor = Some(map.next_value()?);
25073                }
25074                _ => {
25075                    // unknown field allowed and ignored
25076                    map.next_value::<::serde_json::Value>()?;
25077                }
25078            }
25079        }
25080        if optional && nothing {
25081            return Ok(None);
25082        }
25083        let result = SharingAllowlistListContinueArg {
25084            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
25085        };
25086        Ok(Some(result))
25087    }
25088
25089    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25090        &self,
25091        s: &mut S::SerializeStruct,
25092    ) -> Result<(), S::Error> {
25093        use serde::ser::SerializeStruct;
25094        s.serialize_field("cursor", &self.cursor)?;
25095        Ok(())
25096    }
25097}
25098
25099impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListContinueArg {
25100    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25101        // struct deserializer
25102        use serde::de::{MapAccess, Visitor};
25103        struct StructVisitor;
25104        impl<'de> Visitor<'de> for StructVisitor {
25105            type Value = SharingAllowlistListContinueArg;
25106            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25107                f.write_str("a SharingAllowlistListContinueArg struct")
25108            }
25109            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25110                SharingAllowlistListContinueArg::internal_deserialize(map)
25111            }
25112        }
25113        deserializer.deserialize_struct("SharingAllowlistListContinueArg", SHARING_ALLOWLIST_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
25114    }
25115}
25116
25117impl ::serde::ser::Serialize for SharingAllowlistListContinueArg {
25118    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25119        // struct serializer
25120        use serde::ser::SerializeStruct;
25121        let mut s = serializer.serialize_struct("SharingAllowlistListContinueArg", 1)?;
25122        self.internal_serialize::<S>(&mut s)?;
25123        s.end()
25124    }
25125}
25126
25127#[derive(Debug, Clone, PartialEq, Eq)]
25128#[non_exhaustive] // variants may be added in the future
25129pub enum SharingAllowlistListContinueError {
25130    /// Provided cursor is not valid.
25131    InvalidCursor,
25132    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25133    /// typically indicates that this SDK version is out of date.
25134    Other,
25135}
25136
25137impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListContinueError {
25138    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25139        // union deserializer
25140        use serde::de::{self, MapAccess, Visitor};
25141        struct EnumVisitor;
25142        impl<'de> Visitor<'de> for EnumVisitor {
25143            type Value = SharingAllowlistListContinueError;
25144            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25145                f.write_str("a SharingAllowlistListContinueError structure")
25146            }
25147            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25148                let tag: &str = match map.next_key()? {
25149                    Some(".tag") => map.next_value()?,
25150                    _ => return Err(de::Error::missing_field(".tag"))
25151                };
25152                let value = match tag {
25153                    "invalid_cursor" => SharingAllowlistListContinueError::InvalidCursor,
25154                    _ => SharingAllowlistListContinueError::Other,
25155                };
25156                crate::eat_json_fields(&mut map)?;
25157                Ok(value)
25158            }
25159        }
25160        const VARIANTS: &[&str] = &["invalid_cursor",
25161                                    "other"];
25162        deserializer.deserialize_struct("SharingAllowlistListContinueError", VARIANTS, EnumVisitor)
25163    }
25164}
25165
25166impl ::serde::ser::Serialize for SharingAllowlistListContinueError {
25167    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25168        // union serializer
25169        use serde::ser::SerializeStruct;
25170        match self {
25171            SharingAllowlistListContinueError::InvalidCursor => {
25172                // unit
25173                let mut s = serializer.serialize_struct("SharingAllowlistListContinueError", 1)?;
25174                s.serialize_field(".tag", "invalid_cursor")?;
25175                s.end()
25176            }
25177            SharingAllowlistListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25178        }
25179    }
25180}
25181
25182impl ::std::error::Error for SharingAllowlistListContinueError {
25183}
25184
25185impl ::std::fmt::Display for SharingAllowlistListContinueError {
25186    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25187        match self {
25188            SharingAllowlistListContinueError::InvalidCursor => f.write_str("Provided cursor is not valid."),
25189            _ => write!(f, "{:?}", *self),
25190        }
25191    }
25192}
25193
25194/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
25195/// Stone.
25196#[derive(Debug, Clone, PartialEq, Eq, Default)]
25197#[non_exhaustive] // structs may have more fields added in the future.
25198pub struct SharingAllowlistListError {
25199}
25200
25201const SHARING_ALLOWLIST_LIST_ERROR_FIELDS: &[&str] = &[];
25202impl SharingAllowlistListError {
25203    // no _opt deserializer
25204    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25205        mut map: V,
25206    ) -> Result<SharingAllowlistListError, V::Error> {
25207        // ignore any fields found; none are presently recognized
25208        crate::eat_json_fields(&mut map)?;
25209        Ok(SharingAllowlistListError {})
25210    }
25211}
25212
25213impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListError {
25214    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25215        // struct deserializer
25216        use serde::de::{MapAccess, Visitor};
25217        struct StructVisitor;
25218        impl<'de> Visitor<'de> for StructVisitor {
25219            type Value = SharingAllowlistListError;
25220            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25221                f.write_str("a SharingAllowlistListError struct")
25222            }
25223            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25224                SharingAllowlistListError::internal_deserialize(map)
25225            }
25226        }
25227        deserializer.deserialize_struct("SharingAllowlistListError", SHARING_ALLOWLIST_LIST_ERROR_FIELDS, StructVisitor)
25228    }
25229}
25230
25231impl ::serde::ser::Serialize for SharingAllowlistListError {
25232    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25233        // struct serializer
25234        use serde::ser::SerializeStruct;
25235        serializer.serialize_struct("SharingAllowlistListError", 0)?.end()
25236    }
25237}
25238
25239impl ::std::error::Error for SharingAllowlistListError {
25240}
25241
25242impl ::std::fmt::Display for SharingAllowlistListError {
25243    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25244        write!(f, "{:?}", *self)
25245    }
25246}
25247
25248#[derive(Debug, Clone, PartialEq, Eq)]
25249#[non_exhaustive] // structs may have more fields added in the future.
25250pub struct SharingAllowlistListResponse {
25251    /// List of domains represented by valid string representation (RFC-1034/5).
25252    pub domains: Vec<String>,
25253    /// List of emails represented by valid string representation (RFC-5322/822).
25254    pub emails: Vec<String>,
25255    /// If this is nonempty, there are more entries that can be fetched with
25256    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
25257    pub cursor: String,
25258    /// if true indicates that more entries can be fetched with
25259    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
25260    pub has_more: bool,
25261}
25262
25263impl SharingAllowlistListResponse {
25264    pub fn new(domains: Vec<String>, emails: Vec<String>) -> Self {
25265        SharingAllowlistListResponse {
25266            domains,
25267            emails,
25268            cursor: String::new(),
25269            has_more: false,
25270        }
25271    }
25272
25273    pub fn with_cursor(mut self, value: String) -> Self {
25274        self.cursor = value;
25275        self
25276    }
25277
25278    pub fn with_has_more(mut self, value: bool) -> Self {
25279        self.has_more = value;
25280        self
25281    }
25282}
25283
25284const SHARING_ALLOWLIST_LIST_RESPONSE_FIELDS: &[&str] = &["domains",
25285                                                          "emails",
25286                                                          "cursor",
25287                                                          "has_more"];
25288impl SharingAllowlistListResponse {
25289    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25290        map: V,
25291    ) -> Result<SharingAllowlistListResponse, V::Error> {
25292        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25293    }
25294
25295    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25296        mut map: V,
25297        optional: bool,
25298    ) -> Result<Option<SharingAllowlistListResponse>, V::Error> {
25299        let mut field_domains = None;
25300        let mut field_emails = None;
25301        let mut field_cursor = None;
25302        let mut field_has_more = None;
25303        let mut nothing = true;
25304        while let Some(key) = map.next_key::<&str>()? {
25305            nothing = false;
25306            match key {
25307                "domains" => {
25308                    if field_domains.is_some() {
25309                        return Err(::serde::de::Error::duplicate_field("domains"));
25310                    }
25311                    field_domains = Some(map.next_value()?);
25312                }
25313                "emails" => {
25314                    if field_emails.is_some() {
25315                        return Err(::serde::de::Error::duplicate_field("emails"));
25316                    }
25317                    field_emails = Some(map.next_value()?);
25318                }
25319                "cursor" => {
25320                    if field_cursor.is_some() {
25321                        return Err(::serde::de::Error::duplicate_field("cursor"));
25322                    }
25323                    field_cursor = Some(map.next_value()?);
25324                }
25325                "has_more" => {
25326                    if field_has_more.is_some() {
25327                        return Err(::serde::de::Error::duplicate_field("has_more"));
25328                    }
25329                    field_has_more = Some(map.next_value()?);
25330                }
25331                _ => {
25332                    // unknown field allowed and ignored
25333                    map.next_value::<::serde_json::Value>()?;
25334                }
25335            }
25336        }
25337        if optional && nothing {
25338            return Ok(None);
25339        }
25340        let result = SharingAllowlistListResponse {
25341            domains: field_domains.ok_or_else(|| ::serde::de::Error::missing_field("domains"))?,
25342            emails: field_emails.ok_or_else(|| ::serde::de::Error::missing_field("emails"))?,
25343            cursor: field_cursor.unwrap_or_default(),
25344            has_more: field_has_more.unwrap_or(false),
25345        };
25346        Ok(Some(result))
25347    }
25348
25349    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25350        &self,
25351        s: &mut S::SerializeStruct,
25352    ) -> Result<(), S::Error> {
25353        use serde::ser::SerializeStruct;
25354        s.serialize_field("domains", &self.domains)?;
25355        s.serialize_field("emails", &self.emails)?;
25356        if !self.cursor.is_empty() {
25357            s.serialize_field("cursor", &self.cursor)?;
25358        }
25359        if self.has_more {
25360            s.serialize_field("has_more", &self.has_more)?;
25361        }
25362        Ok(())
25363    }
25364}
25365
25366impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListResponse {
25367    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25368        // struct deserializer
25369        use serde::de::{MapAccess, Visitor};
25370        struct StructVisitor;
25371        impl<'de> Visitor<'de> for StructVisitor {
25372            type Value = SharingAllowlistListResponse;
25373            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25374                f.write_str("a SharingAllowlistListResponse struct")
25375            }
25376            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25377                SharingAllowlistListResponse::internal_deserialize(map)
25378            }
25379        }
25380        deserializer.deserialize_struct("SharingAllowlistListResponse", SHARING_ALLOWLIST_LIST_RESPONSE_FIELDS, StructVisitor)
25381    }
25382}
25383
25384impl ::serde::ser::Serialize for SharingAllowlistListResponse {
25385    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25386        // struct serializer
25387        use serde::ser::SerializeStruct;
25388        let mut s = serializer.serialize_struct("SharingAllowlistListResponse", 4)?;
25389        self.internal_serialize::<S>(&mut s)?;
25390        s.end()
25391    }
25392}
25393
25394#[derive(Debug, Clone, PartialEq, Eq, Default)]
25395#[non_exhaustive] // structs may have more fields added in the future.
25396pub struct SharingAllowlistRemoveArgs {
25397    /// List of domains represented by valid string representation (RFC-1034/5).
25398    pub domains: Option<Vec<String>>,
25399    /// List of emails represented by valid string representation (RFC-5322/822).
25400    pub emails: Option<Vec<String>>,
25401}
25402
25403impl SharingAllowlistRemoveArgs {
25404    pub fn with_domains(mut self, value: Vec<String>) -> Self {
25405        self.domains = Some(value);
25406        self
25407    }
25408
25409    pub fn with_emails(mut self, value: Vec<String>) -> Self {
25410        self.emails = Some(value);
25411        self
25412    }
25413}
25414
25415const SHARING_ALLOWLIST_REMOVE_ARGS_FIELDS: &[&str] = &["domains",
25416                                                        "emails"];
25417impl SharingAllowlistRemoveArgs {
25418    // no _opt deserializer
25419    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25420        mut map: V,
25421    ) -> Result<SharingAllowlistRemoveArgs, V::Error> {
25422        let mut field_domains = None;
25423        let mut field_emails = None;
25424        while let Some(key) = map.next_key::<&str>()? {
25425            match key {
25426                "domains" => {
25427                    if field_domains.is_some() {
25428                        return Err(::serde::de::Error::duplicate_field("domains"));
25429                    }
25430                    field_domains = Some(map.next_value()?);
25431                }
25432                "emails" => {
25433                    if field_emails.is_some() {
25434                        return Err(::serde::de::Error::duplicate_field("emails"));
25435                    }
25436                    field_emails = Some(map.next_value()?);
25437                }
25438                _ => {
25439                    // unknown field allowed and ignored
25440                    map.next_value::<::serde_json::Value>()?;
25441                }
25442            }
25443        }
25444        let result = SharingAllowlistRemoveArgs {
25445            domains: field_domains.and_then(Option::flatten),
25446            emails: field_emails.and_then(Option::flatten),
25447        };
25448        Ok(result)
25449    }
25450
25451    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25452        &self,
25453        s: &mut S::SerializeStruct,
25454    ) -> Result<(), S::Error> {
25455        use serde::ser::SerializeStruct;
25456        if let Some(val) = &self.domains {
25457            s.serialize_field("domains", val)?;
25458        }
25459        if let Some(val) = &self.emails {
25460            s.serialize_field("emails", val)?;
25461        }
25462        Ok(())
25463    }
25464}
25465
25466impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveArgs {
25467    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25468        // struct deserializer
25469        use serde::de::{MapAccess, Visitor};
25470        struct StructVisitor;
25471        impl<'de> Visitor<'de> for StructVisitor {
25472            type Value = SharingAllowlistRemoveArgs;
25473            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25474                f.write_str("a SharingAllowlistRemoveArgs struct")
25475            }
25476            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25477                SharingAllowlistRemoveArgs::internal_deserialize(map)
25478            }
25479        }
25480        deserializer.deserialize_struct("SharingAllowlistRemoveArgs", SHARING_ALLOWLIST_REMOVE_ARGS_FIELDS, StructVisitor)
25481    }
25482}
25483
25484impl ::serde::ser::Serialize for SharingAllowlistRemoveArgs {
25485    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25486        // struct serializer
25487        use serde::ser::SerializeStruct;
25488        let mut s = serializer.serialize_struct("SharingAllowlistRemoveArgs", 2)?;
25489        self.internal_serialize::<S>(&mut s)?;
25490        s.end()
25491    }
25492}
25493
25494#[derive(Debug, Clone, PartialEq, Eq)]
25495#[non_exhaustive] // variants may be added in the future
25496pub enum SharingAllowlistRemoveError {
25497    /// One of provided values is not valid.
25498    MalformedEntry(String),
25499    /// One or more provided values do not exist.
25500    EntriesDoNotExist(String),
25501    /// Neither single domain nor email provided.
25502    NoEntriesProvided,
25503    /// Too many entries provided within one call.
25504    TooManyEntriesProvided,
25505    /// Unknown error.
25506    UnknownError,
25507    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25508    /// typically indicates that this SDK version is out of date.
25509    Other,
25510}
25511
25512impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveError {
25513    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25514        // union deserializer
25515        use serde::de::{self, MapAccess, Visitor};
25516        struct EnumVisitor;
25517        impl<'de> Visitor<'de> for EnumVisitor {
25518            type Value = SharingAllowlistRemoveError;
25519            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25520                f.write_str("a SharingAllowlistRemoveError structure")
25521            }
25522            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25523                let tag: &str = match map.next_key()? {
25524                    Some(".tag") => map.next_value()?,
25525                    _ => return Err(de::Error::missing_field(".tag"))
25526                };
25527                let value = match tag {
25528                    "malformed_entry" => {
25529                        match map.next_key()? {
25530                            Some("malformed_entry") => SharingAllowlistRemoveError::MalformedEntry(map.next_value()?),
25531                            None => return Err(de::Error::missing_field("malformed_entry")),
25532                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25533                        }
25534                    }
25535                    "entries_do_not_exist" => {
25536                        match map.next_key()? {
25537                            Some("entries_do_not_exist") => SharingAllowlistRemoveError::EntriesDoNotExist(map.next_value()?),
25538                            None => return Err(de::Error::missing_field("entries_do_not_exist")),
25539                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25540                        }
25541                    }
25542                    "no_entries_provided" => SharingAllowlistRemoveError::NoEntriesProvided,
25543                    "too_many_entries_provided" => SharingAllowlistRemoveError::TooManyEntriesProvided,
25544                    "unknown_error" => SharingAllowlistRemoveError::UnknownError,
25545                    _ => SharingAllowlistRemoveError::Other,
25546                };
25547                crate::eat_json_fields(&mut map)?;
25548                Ok(value)
25549            }
25550        }
25551        const VARIANTS: &[&str] = &["malformed_entry",
25552                                    "entries_do_not_exist",
25553                                    "no_entries_provided",
25554                                    "too_many_entries_provided",
25555                                    "unknown_error",
25556                                    "other"];
25557        deserializer.deserialize_struct("SharingAllowlistRemoveError", VARIANTS, EnumVisitor)
25558    }
25559}
25560
25561impl ::serde::ser::Serialize for SharingAllowlistRemoveError {
25562    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25563        // union serializer
25564        use serde::ser::SerializeStruct;
25565        match self {
25566            SharingAllowlistRemoveError::MalformedEntry(x) => {
25567                // primitive
25568                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 2)?;
25569                s.serialize_field(".tag", "malformed_entry")?;
25570                s.serialize_field("malformed_entry", x)?;
25571                s.end()
25572            }
25573            SharingAllowlistRemoveError::EntriesDoNotExist(x) => {
25574                // primitive
25575                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 2)?;
25576                s.serialize_field(".tag", "entries_do_not_exist")?;
25577                s.serialize_field("entries_do_not_exist", x)?;
25578                s.end()
25579            }
25580            SharingAllowlistRemoveError::NoEntriesProvided => {
25581                // unit
25582                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
25583                s.serialize_field(".tag", "no_entries_provided")?;
25584                s.end()
25585            }
25586            SharingAllowlistRemoveError::TooManyEntriesProvided => {
25587                // unit
25588                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
25589                s.serialize_field(".tag", "too_many_entries_provided")?;
25590                s.end()
25591            }
25592            SharingAllowlistRemoveError::UnknownError => {
25593                // unit
25594                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
25595                s.serialize_field(".tag", "unknown_error")?;
25596                s.end()
25597            }
25598            SharingAllowlistRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25599        }
25600    }
25601}
25602
25603impl ::std::error::Error for SharingAllowlistRemoveError {
25604}
25605
25606impl ::std::fmt::Display for SharingAllowlistRemoveError {
25607    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25608        match self {
25609            SharingAllowlistRemoveError::MalformedEntry(inner) => write!(f, "One of provided values is not valid: {:?}", inner),
25610            SharingAllowlistRemoveError::EntriesDoNotExist(inner) => write!(f, "One or more provided values do not exist: {:?}", inner),
25611            SharingAllowlistRemoveError::NoEntriesProvided => f.write_str("Neither single domain nor email provided."),
25612            SharingAllowlistRemoveError::TooManyEntriesProvided => f.write_str("Too many entries provided within one call."),
25613            SharingAllowlistRemoveError::UnknownError => f.write_str("Unknown error."),
25614            _ => write!(f, "{:?}", *self),
25615        }
25616    }
25617}
25618
25619/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
25620/// Stone.
25621#[derive(Debug, Clone, PartialEq, Eq, Default)]
25622#[non_exhaustive] // structs may have more fields added in the future.
25623pub struct SharingAllowlistRemoveResponse {
25624}
25625
25626const SHARING_ALLOWLIST_REMOVE_RESPONSE_FIELDS: &[&str] = &[];
25627impl SharingAllowlistRemoveResponse {
25628    // no _opt deserializer
25629    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25630        mut map: V,
25631    ) -> Result<SharingAllowlistRemoveResponse, V::Error> {
25632        // ignore any fields found; none are presently recognized
25633        crate::eat_json_fields(&mut map)?;
25634        Ok(SharingAllowlistRemoveResponse {})
25635    }
25636}
25637
25638impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveResponse {
25639    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25640        // struct deserializer
25641        use serde::de::{MapAccess, Visitor};
25642        struct StructVisitor;
25643        impl<'de> Visitor<'de> for StructVisitor {
25644            type Value = SharingAllowlistRemoveResponse;
25645            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25646                f.write_str("a SharingAllowlistRemoveResponse struct")
25647            }
25648            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25649                SharingAllowlistRemoveResponse::internal_deserialize(map)
25650            }
25651        }
25652        deserializer.deserialize_struct("SharingAllowlistRemoveResponse", SHARING_ALLOWLIST_REMOVE_RESPONSE_FIELDS, StructVisitor)
25653    }
25654}
25655
25656impl ::serde::ser::Serialize for SharingAllowlistRemoveResponse {
25657    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25658        // struct serializer
25659        use serde::ser::SerializeStruct;
25660        serializer.serialize_struct("SharingAllowlistRemoveResponse", 0)?.end()
25661    }
25662}
25663
25664/// Describes the number of users in a specific storage bucket.
25665#[derive(Debug, Clone, PartialEq, Eq)]
25666#[non_exhaustive] // structs may have more fields added in the future.
25667pub struct StorageBucket {
25668    /// The name of the storage bucket. For example, '1G' is a bucket of users with storage size up
25669    /// to 1 Giga.
25670    pub bucket: String,
25671    /// The number of people whose storage is in the range of this storage bucket.
25672    pub users: u64,
25673}
25674
25675impl StorageBucket {
25676    pub fn new(bucket: String, users: u64) -> Self {
25677        StorageBucket {
25678            bucket,
25679            users,
25680        }
25681    }
25682}
25683
25684const STORAGE_BUCKET_FIELDS: &[&str] = &["bucket",
25685                                         "users"];
25686impl StorageBucket {
25687    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25688        map: V,
25689    ) -> Result<StorageBucket, V::Error> {
25690        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25691    }
25692
25693    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25694        mut map: V,
25695        optional: bool,
25696    ) -> Result<Option<StorageBucket>, V::Error> {
25697        let mut field_bucket = None;
25698        let mut field_users = None;
25699        let mut nothing = true;
25700        while let Some(key) = map.next_key::<&str>()? {
25701            nothing = false;
25702            match key {
25703                "bucket" => {
25704                    if field_bucket.is_some() {
25705                        return Err(::serde::de::Error::duplicate_field("bucket"));
25706                    }
25707                    field_bucket = Some(map.next_value()?);
25708                }
25709                "users" => {
25710                    if field_users.is_some() {
25711                        return Err(::serde::de::Error::duplicate_field("users"));
25712                    }
25713                    field_users = Some(map.next_value()?);
25714                }
25715                _ => {
25716                    // unknown field allowed and ignored
25717                    map.next_value::<::serde_json::Value>()?;
25718                }
25719            }
25720        }
25721        if optional && nothing {
25722            return Ok(None);
25723        }
25724        let result = StorageBucket {
25725            bucket: field_bucket.ok_or_else(|| ::serde::de::Error::missing_field("bucket"))?,
25726            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
25727        };
25728        Ok(Some(result))
25729    }
25730
25731    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25732        &self,
25733        s: &mut S::SerializeStruct,
25734    ) -> Result<(), S::Error> {
25735        use serde::ser::SerializeStruct;
25736        s.serialize_field("bucket", &self.bucket)?;
25737        s.serialize_field("users", &self.users)?;
25738        Ok(())
25739    }
25740}
25741
25742impl<'de> ::serde::de::Deserialize<'de> for StorageBucket {
25743    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25744        // struct deserializer
25745        use serde::de::{MapAccess, Visitor};
25746        struct StructVisitor;
25747        impl<'de> Visitor<'de> for StructVisitor {
25748            type Value = StorageBucket;
25749            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25750                f.write_str("a StorageBucket struct")
25751            }
25752            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25753                StorageBucket::internal_deserialize(map)
25754            }
25755        }
25756        deserializer.deserialize_struct("StorageBucket", STORAGE_BUCKET_FIELDS, StructVisitor)
25757    }
25758}
25759
25760impl ::serde::ser::Serialize for StorageBucket {
25761    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25762        // struct serializer
25763        use serde::ser::SerializeStruct;
25764        let mut s = serializer.serialize_struct("StorageBucket", 2)?;
25765        self.internal_serialize::<S>(&mut s)?;
25766        s.end()
25767    }
25768}
25769
25770#[derive(Debug, Clone, PartialEq, Eq)]
25771#[non_exhaustive] // variants may be added in the future
25772pub enum TeamFolderAccessError {
25773    /// The team folder ID is invalid.
25774    InvalidTeamFolderId,
25775    /// The authenticated app does not have permission to manage that team folder.
25776    NoAccess,
25777    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25778    /// typically indicates that this SDK version is out of date.
25779    Other,
25780}
25781
25782impl<'de> ::serde::de::Deserialize<'de> for TeamFolderAccessError {
25783    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25784        // union deserializer
25785        use serde::de::{self, MapAccess, Visitor};
25786        struct EnumVisitor;
25787        impl<'de> Visitor<'de> for EnumVisitor {
25788            type Value = TeamFolderAccessError;
25789            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25790                f.write_str("a TeamFolderAccessError structure")
25791            }
25792            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25793                let tag: &str = match map.next_key()? {
25794                    Some(".tag") => map.next_value()?,
25795                    _ => return Err(de::Error::missing_field(".tag"))
25796                };
25797                let value = match tag {
25798                    "invalid_team_folder_id" => TeamFolderAccessError::InvalidTeamFolderId,
25799                    "no_access" => TeamFolderAccessError::NoAccess,
25800                    _ => TeamFolderAccessError::Other,
25801                };
25802                crate::eat_json_fields(&mut map)?;
25803                Ok(value)
25804            }
25805        }
25806        const VARIANTS: &[&str] = &["invalid_team_folder_id",
25807                                    "no_access",
25808                                    "other"];
25809        deserializer.deserialize_struct("TeamFolderAccessError", VARIANTS, EnumVisitor)
25810    }
25811}
25812
25813impl ::serde::ser::Serialize for TeamFolderAccessError {
25814    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25815        // union serializer
25816        use serde::ser::SerializeStruct;
25817        match self {
25818            TeamFolderAccessError::InvalidTeamFolderId => {
25819                // unit
25820                let mut s = serializer.serialize_struct("TeamFolderAccessError", 1)?;
25821                s.serialize_field(".tag", "invalid_team_folder_id")?;
25822                s.end()
25823            }
25824            TeamFolderAccessError::NoAccess => {
25825                // unit
25826                let mut s = serializer.serialize_struct("TeamFolderAccessError", 1)?;
25827                s.serialize_field(".tag", "no_access")?;
25828                s.end()
25829            }
25830            TeamFolderAccessError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25831        }
25832    }
25833}
25834
25835impl ::std::error::Error for TeamFolderAccessError {
25836}
25837
25838impl ::std::fmt::Display for TeamFolderAccessError {
25839    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25840        match self {
25841            TeamFolderAccessError::InvalidTeamFolderId => f.write_str("The team folder ID is invalid."),
25842            TeamFolderAccessError::NoAccess => f.write_str("The authenticated app does not have permission to manage that team folder."),
25843            _ => write!(f, "{:?}", *self),
25844        }
25845    }
25846}
25847
25848#[derive(Debug, Clone, PartialEq, Eq)]
25849#[non_exhaustive] // variants may be added in the future
25850pub enum TeamFolderActivateError {
25851    AccessError(TeamFolderAccessError),
25852    StatusError(TeamFolderInvalidStatusError),
25853    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
25854    /// The team has reached the maximum number of team folders allowed by its plan.
25855    FolderCountLimitExceeded,
25856    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25857    /// typically indicates that this SDK version is out of date.
25858    Other,
25859}
25860
25861impl<'de> ::serde::de::Deserialize<'de> for TeamFolderActivateError {
25862    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25863        // union deserializer
25864        use serde::de::{self, MapAccess, Visitor};
25865        struct EnumVisitor;
25866        impl<'de> Visitor<'de> for EnumVisitor {
25867            type Value = TeamFolderActivateError;
25868            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25869                f.write_str("a TeamFolderActivateError structure")
25870            }
25871            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25872                let tag: &str = match map.next_key()? {
25873                    Some(".tag") => map.next_value()?,
25874                    _ => return Err(de::Error::missing_field(".tag"))
25875                };
25876                let value = match tag {
25877                    "access_error" => {
25878                        match map.next_key()? {
25879                            Some("access_error") => TeamFolderActivateError::AccessError(map.next_value()?),
25880                            None => return Err(de::Error::missing_field("access_error")),
25881                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25882                        }
25883                    }
25884                    "status_error" => {
25885                        match map.next_key()? {
25886                            Some("status_error") => TeamFolderActivateError::StatusError(map.next_value()?),
25887                            None => return Err(de::Error::missing_field("status_error")),
25888                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25889                        }
25890                    }
25891                    "team_shared_dropbox_error" => {
25892                        match map.next_key()? {
25893                            Some("team_shared_dropbox_error") => TeamFolderActivateError::TeamSharedDropboxError(map.next_value()?),
25894                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
25895                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25896                        }
25897                    }
25898                    "folder_count_limit_exceeded" => TeamFolderActivateError::FolderCountLimitExceeded,
25899                    _ => TeamFolderActivateError::Other,
25900                };
25901                crate::eat_json_fields(&mut map)?;
25902                Ok(value)
25903            }
25904        }
25905        const VARIANTS: &[&str] = &["access_error",
25906                                    "status_error",
25907                                    "team_shared_dropbox_error",
25908                                    "other",
25909                                    "folder_count_limit_exceeded"];
25910        deserializer.deserialize_struct("TeamFolderActivateError", VARIANTS, EnumVisitor)
25911    }
25912}
25913
25914impl ::serde::ser::Serialize for TeamFolderActivateError {
25915    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25916        // union serializer
25917        use serde::ser::SerializeStruct;
25918        match self {
25919            TeamFolderActivateError::AccessError(x) => {
25920                // union or polymporphic struct
25921                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
25922                s.serialize_field(".tag", "access_error")?;
25923                s.serialize_field("access_error", x)?;
25924                s.end()
25925            }
25926            TeamFolderActivateError::StatusError(x) => {
25927                // union or polymporphic struct
25928                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
25929                s.serialize_field(".tag", "status_error")?;
25930                s.serialize_field("status_error", x)?;
25931                s.end()
25932            }
25933            TeamFolderActivateError::TeamSharedDropboxError(x) => {
25934                // union or polymporphic struct
25935                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
25936                s.serialize_field(".tag", "team_shared_dropbox_error")?;
25937                s.serialize_field("team_shared_dropbox_error", x)?;
25938                s.end()
25939            }
25940            TeamFolderActivateError::FolderCountLimitExceeded => {
25941                // unit
25942                let mut s = serializer.serialize_struct("TeamFolderActivateError", 1)?;
25943                s.serialize_field(".tag", "folder_count_limit_exceeded")?;
25944                s.end()
25945            }
25946            TeamFolderActivateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25947        }
25948    }
25949}
25950
25951impl ::std::error::Error for TeamFolderActivateError {
25952    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
25953        match self {
25954            TeamFolderActivateError::AccessError(inner) => Some(inner),
25955            TeamFolderActivateError::StatusError(inner) => Some(inner),
25956            TeamFolderActivateError::TeamSharedDropboxError(inner) => Some(inner),
25957            _ => None,
25958        }
25959    }
25960}
25961
25962impl ::std::fmt::Display for TeamFolderActivateError {
25963    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25964        match self {
25965            TeamFolderActivateError::AccessError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25966            TeamFolderActivateError::StatusError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25967            TeamFolderActivateError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25968            TeamFolderActivateError::FolderCountLimitExceeded => f.write_str("The team has reached the maximum number of team folders allowed by its plan."),
25969            _ => write!(f, "{:?}", *self),
25970        }
25971    }
25972}
25973
25974// union extends BaseTeamFolderError
25975impl From<BaseTeamFolderError> for TeamFolderActivateError {
25976    fn from(parent: BaseTeamFolderError) -> Self {
25977        match parent {
25978            BaseTeamFolderError::AccessError(x) => TeamFolderActivateError::AccessError(x),
25979            BaseTeamFolderError::StatusError(x) => TeamFolderActivateError::StatusError(x),
25980            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderActivateError::TeamSharedDropboxError(x),
25981            BaseTeamFolderError::Other => TeamFolderActivateError::Other,
25982        }
25983    }
25984}
25985#[derive(Debug, Clone, PartialEq, Eq)]
25986#[non_exhaustive] // structs may have more fields added in the future.
25987pub struct TeamFolderArchiveArg {
25988    /// The ID of the team folder.
25989    pub team_folder_id: crate::types::common::SharedFolderId,
25990    /// Whether to force the archive to happen synchronously.
25991    pub force_async_off: bool,
25992}
25993
25994impl TeamFolderArchiveArg {
25995    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
25996        TeamFolderArchiveArg {
25997            team_folder_id,
25998            force_async_off: false,
25999        }
26000    }
26001
26002    pub fn with_force_async_off(mut self, value: bool) -> Self {
26003        self.force_async_off = value;
26004        self
26005    }
26006}
26007
26008const TEAM_FOLDER_ARCHIVE_ARG_FIELDS: &[&str] = &["team_folder_id",
26009                                                  "force_async_off"];
26010impl TeamFolderArchiveArg {
26011    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26012        map: V,
26013    ) -> Result<TeamFolderArchiveArg, V::Error> {
26014        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26015    }
26016
26017    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26018        mut map: V,
26019        optional: bool,
26020    ) -> Result<Option<TeamFolderArchiveArg>, V::Error> {
26021        let mut field_team_folder_id = None;
26022        let mut field_force_async_off = None;
26023        let mut nothing = true;
26024        while let Some(key) = map.next_key::<&str>()? {
26025            nothing = false;
26026            match key {
26027                "team_folder_id" => {
26028                    if field_team_folder_id.is_some() {
26029                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
26030                    }
26031                    field_team_folder_id = Some(map.next_value()?);
26032                }
26033                "force_async_off" => {
26034                    if field_force_async_off.is_some() {
26035                        return Err(::serde::de::Error::duplicate_field("force_async_off"));
26036                    }
26037                    field_force_async_off = Some(map.next_value()?);
26038                }
26039                _ => {
26040                    // unknown field allowed and ignored
26041                    map.next_value::<::serde_json::Value>()?;
26042                }
26043            }
26044        }
26045        if optional && nothing {
26046            return Ok(None);
26047        }
26048        let result = TeamFolderArchiveArg {
26049            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
26050            force_async_off: field_force_async_off.unwrap_or(false),
26051        };
26052        Ok(Some(result))
26053    }
26054
26055    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26056        &self,
26057        s: &mut S::SerializeStruct,
26058    ) -> Result<(), S::Error> {
26059        use serde::ser::SerializeStruct;
26060        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26061        if self.force_async_off {
26062            s.serialize_field("force_async_off", &self.force_async_off)?;
26063        }
26064        Ok(())
26065    }
26066}
26067
26068impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveArg {
26069    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26070        // struct deserializer
26071        use serde::de::{MapAccess, Visitor};
26072        struct StructVisitor;
26073        impl<'de> Visitor<'de> for StructVisitor {
26074            type Value = TeamFolderArchiveArg;
26075            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26076                f.write_str("a TeamFolderArchiveArg struct")
26077            }
26078            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26079                TeamFolderArchiveArg::internal_deserialize(map)
26080            }
26081        }
26082        deserializer.deserialize_struct("TeamFolderArchiveArg", TEAM_FOLDER_ARCHIVE_ARG_FIELDS, StructVisitor)
26083    }
26084}
26085
26086impl ::serde::ser::Serialize for TeamFolderArchiveArg {
26087    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26088        // struct serializer
26089        use serde::ser::SerializeStruct;
26090        let mut s = serializer.serialize_struct("TeamFolderArchiveArg", 2)?;
26091        self.internal_serialize::<S>(&mut s)?;
26092        s.end()
26093    }
26094}
26095
26096// struct extends TeamFolderIdArg
26097impl From<TeamFolderArchiveArg> for TeamFolderIdArg {
26098    fn from(subtype: TeamFolderArchiveArg) -> Self {
26099        Self {
26100            team_folder_id: subtype.team_folder_id,
26101        }
26102    }
26103}
26104
26105#[derive(Debug, Clone, PartialEq, Eq)]
26106#[non_exhaustive] // variants may be added in the future
26107pub enum TeamFolderArchiveError {
26108    AccessError(TeamFolderAccessError),
26109    StatusError(TeamFolderInvalidStatusError),
26110    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
26111    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26112    /// typically indicates that this SDK version is out of date.
26113    Other,
26114}
26115
26116impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveError {
26117    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26118        // union deserializer
26119        use serde::de::{self, MapAccess, Visitor};
26120        struct EnumVisitor;
26121        impl<'de> Visitor<'de> for EnumVisitor {
26122            type Value = TeamFolderArchiveError;
26123            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26124                f.write_str("a TeamFolderArchiveError structure")
26125            }
26126            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26127                let tag: &str = match map.next_key()? {
26128                    Some(".tag") => map.next_value()?,
26129                    _ => return Err(de::Error::missing_field(".tag"))
26130                };
26131                let value = match tag {
26132                    "access_error" => {
26133                        match map.next_key()? {
26134                            Some("access_error") => TeamFolderArchiveError::AccessError(map.next_value()?),
26135                            None => return Err(de::Error::missing_field("access_error")),
26136                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26137                        }
26138                    }
26139                    "status_error" => {
26140                        match map.next_key()? {
26141                            Some("status_error") => TeamFolderArchiveError::StatusError(map.next_value()?),
26142                            None => return Err(de::Error::missing_field("status_error")),
26143                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26144                        }
26145                    }
26146                    "team_shared_dropbox_error" => {
26147                        match map.next_key()? {
26148                            Some("team_shared_dropbox_error") => TeamFolderArchiveError::TeamSharedDropboxError(map.next_value()?),
26149                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
26150                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26151                        }
26152                    }
26153                    _ => TeamFolderArchiveError::Other,
26154                };
26155                crate::eat_json_fields(&mut map)?;
26156                Ok(value)
26157            }
26158        }
26159        const VARIANTS: &[&str] = &["access_error",
26160                                    "status_error",
26161                                    "team_shared_dropbox_error",
26162                                    "other"];
26163        deserializer.deserialize_struct("TeamFolderArchiveError", VARIANTS, EnumVisitor)
26164    }
26165}
26166
26167impl ::serde::ser::Serialize for TeamFolderArchiveError {
26168    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26169        // union serializer
26170        use serde::ser::SerializeStruct;
26171        match self {
26172            TeamFolderArchiveError::AccessError(x) => {
26173                // union or polymporphic struct
26174                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
26175                s.serialize_field(".tag", "access_error")?;
26176                s.serialize_field("access_error", x)?;
26177                s.end()
26178            }
26179            TeamFolderArchiveError::StatusError(x) => {
26180                // union or polymporphic struct
26181                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
26182                s.serialize_field(".tag", "status_error")?;
26183                s.serialize_field("status_error", x)?;
26184                s.end()
26185            }
26186            TeamFolderArchiveError::TeamSharedDropboxError(x) => {
26187                // union or polymporphic struct
26188                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
26189                s.serialize_field(".tag", "team_shared_dropbox_error")?;
26190                s.serialize_field("team_shared_dropbox_error", x)?;
26191                s.end()
26192            }
26193            TeamFolderArchiveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26194        }
26195    }
26196}
26197
26198impl ::std::error::Error for TeamFolderArchiveError {
26199    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
26200        match self {
26201            TeamFolderArchiveError::AccessError(inner) => Some(inner),
26202            TeamFolderArchiveError::StatusError(inner) => Some(inner),
26203            TeamFolderArchiveError::TeamSharedDropboxError(inner) => Some(inner),
26204            _ => None,
26205        }
26206    }
26207}
26208
26209impl ::std::fmt::Display for TeamFolderArchiveError {
26210    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26211        match self {
26212            TeamFolderArchiveError::AccessError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
26213            TeamFolderArchiveError::StatusError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
26214            TeamFolderArchiveError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
26215            _ => write!(f, "{:?}", *self),
26216        }
26217    }
26218}
26219
26220// union extends BaseTeamFolderError
26221impl From<BaseTeamFolderError> for TeamFolderArchiveError {
26222    fn from(parent: BaseTeamFolderError) -> Self {
26223        match parent {
26224            BaseTeamFolderError::AccessError(x) => TeamFolderArchiveError::AccessError(x),
26225            BaseTeamFolderError::StatusError(x) => TeamFolderArchiveError::StatusError(x),
26226            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderArchiveError::TeamSharedDropboxError(x),
26227            BaseTeamFolderError::Other => TeamFolderArchiveError::Other,
26228        }
26229    }
26230}
26231#[derive(Debug, Clone, PartialEq, Eq)]
26232pub enum TeamFolderArchiveJobStatus {
26233    /// The asynchronous job is still in progress.
26234    InProgress,
26235    /// The archive job has finished. The value is the metadata for the resulting team folder.
26236    Complete(TeamFolderMetadata),
26237    /// Error occurred while performing an asynchronous job from
26238    /// [`team_folder_archive()`](crate::team::team_folder_archive).
26239    Failed(TeamFolderArchiveError),
26240}
26241
26242impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveJobStatus {
26243    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26244        // union deserializer
26245        use serde::de::{self, MapAccess, Visitor};
26246        struct EnumVisitor;
26247        impl<'de> Visitor<'de> for EnumVisitor {
26248            type Value = TeamFolderArchiveJobStatus;
26249            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26250                f.write_str("a TeamFolderArchiveJobStatus structure")
26251            }
26252            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26253                let tag: &str = match map.next_key()? {
26254                    Some(".tag") => map.next_value()?,
26255                    _ => return Err(de::Error::missing_field(".tag"))
26256                };
26257                let value = match tag {
26258                    "in_progress" => TeamFolderArchiveJobStatus::InProgress,
26259                    "complete" => TeamFolderArchiveJobStatus::Complete(TeamFolderMetadata::internal_deserialize(&mut map)?),
26260                    "failed" => {
26261                        match map.next_key()? {
26262                            Some("failed") => TeamFolderArchiveJobStatus::Failed(map.next_value()?),
26263                            None => return Err(de::Error::missing_field("failed")),
26264                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26265                        }
26266                    }
26267                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
26268                };
26269                crate::eat_json_fields(&mut map)?;
26270                Ok(value)
26271            }
26272        }
26273        const VARIANTS: &[&str] = &["in_progress",
26274                                    "complete",
26275                                    "failed"];
26276        deserializer.deserialize_struct("TeamFolderArchiveJobStatus", VARIANTS, EnumVisitor)
26277    }
26278}
26279
26280impl ::serde::ser::Serialize for TeamFolderArchiveJobStatus {
26281    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26282        // union serializer
26283        use serde::ser::SerializeStruct;
26284        match self {
26285            TeamFolderArchiveJobStatus::InProgress => {
26286                // unit
26287                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 1)?;
26288                s.serialize_field(".tag", "in_progress")?;
26289                s.end()
26290            }
26291            TeamFolderArchiveJobStatus::Complete(x) => {
26292                // struct
26293                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 8)?;
26294                s.serialize_field(".tag", "complete")?;
26295                x.internal_serialize::<S>(&mut s)?;
26296                s.end()
26297            }
26298            TeamFolderArchiveJobStatus::Failed(x) => {
26299                // union or polymporphic struct
26300                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 2)?;
26301                s.serialize_field(".tag", "failed")?;
26302                s.serialize_field("failed", x)?;
26303                s.end()
26304            }
26305        }
26306    }
26307}
26308
26309// union extends crate::types::dbx_async::PollResultBase
26310impl From<crate::types::dbx_async::PollResultBase> for TeamFolderArchiveJobStatus {
26311    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
26312        match parent {
26313            crate::types::dbx_async::PollResultBase::InProgress => TeamFolderArchiveJobStatus::InProgress,
26314        }
26315    }
26316}
26317#[derive(Debug, Clone, PartialEq, Eq)]
26318pub enum TeamFolderArchiveLaunch {
26319    /// This response indicates that the processing is asynchronous. The string is an id that can be
26320    /// used to obtain the status of the asynchronous job.
26321    AsyncJobId(crate::types::dbx_async::AsyncJobId),
26322    Complete(TeamFolderMetadata),
26323}
26324
26325impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveLaunch {
26326    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26327        // union deserializer
26328        use serde::de::{self, MapAccess, Visitor};
26329        struct EnumVisitor;
26330        impl<'de> Visitor<'de> for EnumVisitor {
26331            type Value = TeamFolderArchiveLaunch;
26332            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26333                f.write_str("a TeamFolderArchiveLaunch structure")
26334            }
26335            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26336                let tag: &str = match map.next_key()? {
26337                    Some(".tag") => map.next_value()?,
26338                    _ => return Err(de::Error::missing_field(".tag"))
26339                };
26340                let value = match tag {
26341                    "async_job_id" => {
26342                        match map.next_key()? {
26343                            Some("async_job_id") => TeamFolderArchiveLaunch::AsyncJobId(map.next_value()?),
26344                            None => return Err(de::Error::missing_field("async_job_id")),
26345                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26346                        }
26347                    }
26348                    "complete" => TeamFolderArchiveLaunch::Complete(TeamFolderMetadata::internal_deserialize(&mut map)?),
26349                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
26350                };
26351                crate::eat_json_fields(&mut map)?;
26352                Ok(value)
26353            }
26354        }
26355        const VARIANTS: &[&str] = &["async_job_id",
26356                                    "complete"];
26357        deserializer.deserialize_struct("TeamFolderArchiveLaunch", VARIANTS, EnumVisitor)
26358    }
26359}
26360
26361impl ::serde::ser::Serialize for TeamFolderArchiveLaunch {
26362    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26363        // union serializer
26364        use serde::ser::SerializeStruct;
26365        match self {
26366            TeamFolderArchiveLaunch::AsyncJobId(x) => {
26367                // primitive
26368                let mut s = serializer.serialize_struct("TeamFolderArchiveLaunch", 2)?;
26369                s.serialize_field(".tag", "async_job_id")?;
26370                s.serialize_field("async_job_id", x)?;
26371                s.end()
26372            }
26373            TeamFolderArchiveLaunch::Complete(x) => {
26374                // struct
26375                let mut s = serializer.serialize_struct("TeamFolderArchiveLaunch", 8)?;
26376                s.serialize_field(".tag", "complete")?;
26377                x.internal_serialize::<S>(&mut s)?;
26378                s.end()
26379            }
26380        }
26381    }
26382}
26383
26384// union extends crate::types::dbx_async::LaunchResultBase
26385impl From<crate::types::dbx_async::LaunchResultBase> for TeamFolderArchiveLaunch {
26386    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
26387        match parent {
26388            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => TeamFolderArchiveLaunch::AsyncJobId(x),
26389        }
26390    }
26391}
26392#[derive(Debug, Clone, PartialEq, Eq)]
26393#[non_exhaustive] // structs may have more fields added in the future.
26394pub struct TeamFolderCreateArg {
26395    /// Name for the new team folder.
26396    pub name: String,
26397    /// The sync setting to apply to this team folder. Only permitted if the team has team selective
26398    /// sync enabled.
26399    pub sync_setting: Option<crate::types::files::SyncSettingArg>,
26400}
26401
26402impl TeamFolderCreateArg {
26403    pub fn new(name: String) -> Self {
26404        TeamFolderCreateArg {
26405            name,
26406            sync_setting: None,
26407        }
26408    }
26409
26410    pub fn with_sync_setting(mut self, value: crate::types::files::SyncSettingArg) -> Self {
26411        self.sync_setting = Some(value);
26412        self
26413    }
26414}
26415
26416const TEAM_FOLDER_CREATE_ARG_FIELDS: &[&str] = &["name",
26417                                                 "sync_setting"];
26418impl TeamFolderCreateArg {
26419    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26420        map: V,
26421    ) -> Result<TeamFolderCreateArg, V::Error> {
26422        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26423    }
26424
26425    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26426        mut map: V,
26427        optional: bool,
26428    ) -> Result<Option<TeamFolderCreateArg>, V::Error> {
26429        let mut field_name = None;
26430        let mut field_sync_setting = None;
26431        let mut nothing = true;
26432        while let Some(key) = map.next_key::<&str>()? {
26433            nothing = false;
26434            match key {
26435                "name" => {
26436                    if field_name.is_some() {
26437                        return Err(::serde::de::Error::duplicate_field("name"));
26438                    }
26439                    field_name = Some(map.next_value()?);
26440                }
26441                "sync_setting" => {
26442                    if field_sync_setting.is_some() {
26443                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
26444                    }
26445                    field_sync_setting = Some(map.next_value()?);
26446                }
26447                _ => {
26448                    // unknown field allowed and ignored
26449                    map.next_value::<::serde_json::Value>()?;
26450                }
26451            }
26452        }
26453        if optional && nothing {
26454            return Ok(None);
26455        }
26456        let result = TeamFolderCreateArg {
26457            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
26458            sync_setting: field_sync_setting.and_then(Option::flatten),
26459        };
26460        Ok(Some(result))
26461    }
26462
26463    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26464        &self,
26465        s: &mut S::SerializeStruct,
26466    ) -> Result<(), S::Error> {
26467        use serde::ser::SerializeStruct;
26468        s.serialize_field("name", &self.name)?;
26469        if let Some(val) = &self.sync_setting {
26470            s.serialize_field("sync_setting", val)?;
26471        }
26472        Ok(())
26473    }
26474}
26475
26476impl<'de> ::serde::de::Deserialize<'de> for TeamFolderCreateArg {
26477    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26478        // struct deserializer
26479        use serde::de::{MapAccess, Visitor};
26480        struct StructVisitor;
26481        impl<'de> Visitor<'de> for StructVisitor {
26482            type Value = TeamFolderCreateArg;
26483            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26484                f.write_str("a TeamFolderCreateArg struct")
26485            }
26486            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26487                TeamFolderCreateArg::internal_deserialize(map)
26488            }
26489        }
26490        deserializer.deserialize_struct("TeamFolderCreateArg", TEAM_FOLDER_CREATE_ARG_FIELDS, StructVisitor)
26491    }
26492}
26493
26494impl ::serde::ser::Serialize for TeamFolderCreateArg {
26495    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26496        // struct serializer
26497        use serde::ser::SerializeStruct;
26498        let mut s = serializer.serialize_struct("TeamFolderCreateArg", 2)?;
26499        self.internal_serialize::<S>(&mut s)?;
26500        s.end()
26501    }
26502}
26503
26504#[derive(Debug, Clone, PartialEq, Eq)]
26505#[non_exhaustive] // variants may be added in the future
26506pub enum TeamFolderCreateError {
26507    /// The provided name cannot be used.
26508    InvalidFolderName,
26509    /// There is already a team folder with the provided name.
26510    FolderNameAlreadyUsed,
26511    /// The provided name cannot be used because it is reserved.
26512    FolderNameReserved,
26513    /// An error occurred setting the sync settings.
26514    SyncSettingsError(crate::types::files::SyncSettingsError),
26515    /// The team has reached the maximum number of team folders allowed by its plan.
26516    FolderCountLimitExceeded,
26517    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26518    /// typically indicates that this SDK version is out of date.
26519    Other,
26520}
26521
26522impl<'de> ::serde::de::Deserialize<'de> for TeamFolderCreateError {
26523    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26524        // union deserializer
26525        use serde::de::{self, MapAccess, Visitor};
26526        struct EnumVisitor;
26527        impl<'de> Visitor<'de> for EnumVisitor {
26528            type Value = TeamFolderCreateError;
26529            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26530                f.write_str("a TeamFolderCreateError structure")
26531            }
26532            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26533                let tag: &str = match map.next_key()? {
26534                    Some(".tag") => map.next_value()?,
26535                    _ => return Err(de::Error::missing_field(".tag"))
26536                };
26537                let value = match tag {
26538                    "invalid_folder_name" => TeamFolderCreateError::InvalidFolderName,
26539                    "folder_name_already_used" => TeamFolderCreateError::FolderNameAlreadyUsed,
26540                    "folder_name_reserved" => TeamFolderCreateError::FolderNameReserved,
26541                    "sync_settings_error" => {
26542                        match map.next_key()? {
26543                            Some("sync_settings_error") => TeamFolderCreateError::SyncSettingsError(map.next_value()?),
26544                            None => return Err(de::Error::missing_field("sync_settings_error")),
26545                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26546                        }
26547                    }
26548                    "folder_count_limit_exceeded" => TeamFolderCreateError::FolderCountLimitExceeded,
26549                    _ => TeamFolderCreateError::Other,
26550                };
26551                crate::eat_json_fields(&mut map)?;
26552                Ok(value)
26553            }
26554        }
26555        const VARIANTS: &[&str] = &["invalid_folder_name",
26556                                    "folder_name_already_used",
26557                                    "folder_name_reserved",
26558                                    "sync_settings_error",
26559                                    "folder_count_limit_exceeded",
26560                                    "other"];
26561        deserializer.deserialize_struct("TeamFolderCreateError", VARIANTS, EnumVisitor)
26562    }
26563}
26564
26565impl ::serde::ser::Serialize for TeamFolderCreateError {
26566    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26567        // union serializer
26568        use serde::ser::SerializeStruct;
26569        match self {
26570            TeamFolderCreateError::InvalidFolderName => {
26571                // unit
26572                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
26573                s.serialize_field(".tag", "invalid_folder_name")?;
26574                s.end()
26575            }
26576            TeamFolderCreateError::FolderNameAlreadyUsed => {
26577                // unit
26578                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
26579                s.serialize_field(".tag", "folder_name_already_used")?;
26580                s.end()
26581            }
26582            TeamFolderCreateError::FolderNameReserved => {
26583                // unit
26584                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
26585                s.serialize_field(".tag", "folder_name_reserved")?;
26586                s.end()
26587            }
26588            TeamFolderCreateError::SyncSettingsError(x) => {
26589                // union or polymporphic struct
26590                let mut s = serializer.serialize_struct("TeamFolderCreateError", 2)?;
26591                s.serialize_field(".tag", "sync_settings_error")?;
26592                s.serialize_field("sync_settings_error", x)?;
26593                s.end()
26594            }
26595            TeamFolderCreateError::FolderCountLimitExceeded => {
26596                // unit
26597                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
26598                s.serialize_field(".tag", "folder_count_limit_exceeded")?;
26599                s.end()
26600            }
26601            TeamFolderCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26602        }
26603    }
26604}
26605
26606impl ::std::error::Error for TeamFolderCreateError {
26607    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
26608        match self {
26609            TeamFolderCreateError::SyncSettingsError(inner) => Some(inner),
26610            _ => None,
26611        }
26612    }
26613}
26614
26615impl ::std::fmt::Display for TeamFolderCreateError {
26616    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26617        match self {
26618            TeamFolderCreateError::InvalidFolderName => f.write_str("The provided name cannot be used."),
26619            TeamFolderCreateError::FolderNameAlreadyUsed => f.write_str("There is already a team folder with the provided name."),
26620            TeamFolderCreateError::FolderNameReserved => f.write_str("The provided name cannot be used because it is reserved."),
26621            TeamFolderCreateError::SyncSettingsError(inner) => write!(f, "An error occurred setting the sync settings: {}", inner),
26622            TeamFolderCreateError::FolderCountLimitExceeded => f.write_str("The team has reached the maximum number of team folders allowed by its plan."),
26623            _ => write!(f, "{:?}", *self),
26624        }
26625    }
26626}
26627
26628#[derive(Debug, Clone, PartialEq, Eq)]
26629pub enum TeamFolderGetInfoItem {
26630    /// An ID that was provided as a parameter to
26631    /// [`team_folder_get_info()`](crate::team::team_folder_get_info) did not match any of the
26632    /// team's team folders.
26633    IdNotFound(String),
26634    /// Properties of a team folder.
26635    TeamFolderMetadata(TeamFolderMetadata),
26636}
26637
26638impl<'de> ::serde::de::Deserialize<'de> for TeamFolderGetInfoItem {
26639    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26640        // union deserializer
26641        use serde::de::{self, MapAccess, Visitor};
26642        struct EnumVisitor;
26643        impl<'de> Visitor<'de> for EnumVisitor {
26644            type Value = TeamFolderGetInfoItem;
26645            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26646                f.write_str("a TeamFolderGetInfoItem structure")
26647            }
26648            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26649                let tag: &str = match map.next_key()? {
26650                    Some(".tag") => map.next_value()?,
26651                    _ => return Err(de::Error::missing_field(".tag"))
26652                };
26653                let value = match tag {
26654                    "id_not_found" => {
26655                        match map.next_key()? {
26656                            Some("id_not_found") => TeamFolderGetInfoItem::IdNotFound(map.next_value()?),
26657                            None => return Err(de::Error::missing_field("id_not_found")),
26658                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26659                        }
26660                    }
26661                    "team_folder_metadata" => TeamFolderGetInfoItem::TeamFolderMetadata(TeamFolderMetadata::internal_deserialize(&mut map)?),
26662                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
26663                };
26664                crate::eat_json_fields(&mut map)?;
26665                Ok(value)
26666            }
26667        }
26668        const VARIANTS: &[&str] = &["id_not_found",
26669                                    "team_folder_metadata"];
26670        deserializer.deserialize_struct("TeamFolderGetInfoItem", VARIANTS, EnumVisitor)
26671    }
26672}
26673
26674impl ::serde::ser::Serialize for TeamFolderGetInfoItem {
26675    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26676        // union serializer
26677        use serde::ser::SerializeStruct;
26678        match self {
26679            TeamFolderGetInfoItem::IdNotFound(x) => {
26680                // primitive
26681                let mut s = serializer.serialize_struct("TeamFolderGetInfoItem", 2)?;
26682                s.serialize_field(".tag", "id_not_found")?;
26683                s.serialize_field("id_not_found", x)?;
26684                s.end()
26685            }
26686            TeamFolderGetInfoItem::TeamFolderMetadata(x) => {
26687                // struct
26688                let mut s = serializer.serialize_struct("TeamFolderGetInfoItem", 8)?;
26689                s.serialize_field(".tag", "team_folder_metadata")?;
26690                x.internal_serialize::<S>(&mut s)?;
26691                s.end()
26692            }
26693        }
26694    }
26695}
26696
26697#[derive(Debug, Clone, PartialEq, Eq)]
26698#[non_exhaustive] // structs may have more fields added in the future.
26699pub struct TeamFolderIdArg {
26700    /// The ID of the team folder.
26701    pub team_folder_id: crate::types::common::SharedFolderId,
26702}
26703
26704impl TeamFolderIdArg {
26705    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
26706        TeamFolderIdArg {
26707            team_folder_id,
26708        }
26709    }
26710}
26711
26712const TEAM_FOLDER_ID_ARG_FIELDS: &[&str] = &["team_folder_id"];
26713impl TeamFolderIdArg {
26714    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26715        map: V,
26716    ) -> Result<TeamFolderIdArg, V::Error> {
26717        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26718    }
26719
26720    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26721        mut map: V,
26722        optional: bool,
26723    ) -> Result<Option<TeamFolderIdArg>, V::Error> {
26724        let mut field_team_folder_id = None;
26725        let mut nothing = true;
26726        while let Some(key) = map.next_key::<&str>()? {
26727            nothing = false;
26728            match key {
26729                "team_folder_id" => {
26730                    if field_team_folder_id.is_some() {
26731                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
26732                    }
26733                    field_team_folder_id = Some(map.next_value()?);
26734                }
26735                _ => {
26736                    // unknown field allowed and ignored
26737                    map.next_value::<::serde_json::Value>()?;
26738                }
26739            }
26740        }
26741        if optional && nothing {
26742            return Ok(None);
26743        }
26744        let result = TeamFolderIdArg {
26745            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
26746        };
26747        Ok(Some(result))
26748    }
26749
26750    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26751        &self,
26752        s: &mut S::SerializeStruct,
26753    ) -> Result<(), S::Error> {
26754        use serde::ser::SerializeStruct;
26755        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26756        Ok(())
26757    }
26758}
26759
26760impl<'de> ::serde::de::Deserialize<'de> for TeamFolderIdArg {
26761    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26762        // struct deserializer
26763        use serde::de::{MapAccess, Visitor};
26764        struct StructVisitor;
26765        impl<'de> Visitor<'de> for StructVisitor {
26766            type Value = TeamFolderIdArg;
26767            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26768                f.write_str("a TeamFolderIdArg struct")
26769            }
26770            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26771                TeamFolderIdArg::internal_deserialize(map)
26772            }
26773        }
26774        deserializer.deserialize_struct("TeamFolderIdArg", TEAM_FOLDER_ID_ARG_FIELDS, StructVisitor)
26775    }
26776}
26777
26778impl ::serde::ser::Serialize for TeamFolderIdArg {
26779    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26780        // struct serializer
26781        use serde::ser::SerializeStruct;
26782        let mut s = serializer.serialize_struct("TeamFolderIdArg", 1)?;
26783        self.internal_serialize::<S>(&mut s)?;
26784        s.end()
26785    }
26786}
26787
26788#[derive(Debug, Clone, PartialEq, Eq)]
26789#[non_exhaustive] // structs may have more fields added in the future.
26790pub struct TeamFolderIdListArg {
26791    /// The list of team folder IDs.
26792    pub team_folder_ids: Vec<crate::types::common::SharedFolderId>,
26793}
26794
26795impl TeamFolderIdListArg {
26796    pub fn new(team_folder_ids: Vec<crate::types::common::SharedFolderId>) -> Self {
26797        TeamFolderIdListArg {
26798            team_folder_ids,
26799        }
26800    }
26801}
26802
26803const TEAM_FOLDER_ID_LIST_ARG_FIELDS: &[&str] = &["team_folder_ids"];
26804impl TeamFolderIdListArg {
26805    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26806        map: V,
26807    ) -> Result<TeamFolderIdListArg, V::Error> {
26808        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26809    }
26810
26811    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26812        mut map: V,
26813        optional: bool,
26814    ) -> Result<Option<TeamFolderIdListArg>, V::Error> {
26815        let mut field_team_folder_ids = None;
26816        let mut nothing = true;
26817        while let Some(key) = map.next_key::<&str>()? {
26818            nothing = false;
26819            match key {
26820                "team_folder_ids" => {
26821                    if field_team_folder_ids.is_some() {
26822                        return Err(::serde::de::Error::duplicate_field("team_folder_ids"));
26823                    }
26824                    field_team_folder_ids = Some(map.next_value()?);
26825                }
26826                _ => {
26827                    // unknown field allowed and ignored
26828                    map.next_value::<::serde_json::Value>()?;
26829                }
26830            }
26831        }
26832        if optional && nothing {
26833            return Ok(None);
26834        }
26835        let result = TeamFolderIdListArg {
26836            team_folder_ids: field_team_folder_ids.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_ids"))?,
26837        };
26838        Ok(Some(result))
26839    }
26840
26841    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26842        &self,
26843        s: &mut S::SerializeStruct,
26844    ) -> Result<(), S::Error> {
26845        use serde::ser::SerializeStruct;
26846        s.serialize_field("team_folder_ids", &self.team_folder_ids)?;
26847        Ok(())
26848    }
26849}
26850
26851impl<'de> ::serde::de::Deserialize<'de> for TeamFolderIdListArg {
26852    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26853        // struct deserializer
26854        use serde::de::{MapAccess, Visitor};
26855        struct StructVisitor;
26856        impl<'de> Visitor<'de> for StructVisitor {
26857            type Value = TeamFolderIdListArg;
26858            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26859                f.write_str("a TeamFolderIdListArg struct")
26860            }
26861            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26862                TeamFolderIdListArg::internal_deserialize(map)
26863            }
26864        }
26865        deserializer.deserialize_struct("TeamFolderIdListArg", TEAM_FOLDER_ID_LIST_ARG_FIELDS, StructVisitor)
26866    }
26867}
26868
26869impl ::serde::ser::Serialize for TeamFolderIdListArg {
26870    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26871        // struct serializer
26872        use serde::ser::SerializeStruct;
26873        let mut s = serializer.serialize_struct("TeamFolderIdListArg", 1)?;
26874        self.internal_serialize::<S>(&mut s)?;
26875        s.end()
26876    }
26877}
26878
26879#[derive(Debug, Clone, PartialEq, Eq)]
26880#[non_exhaustive] // variants may be added in the future
26881pub enum TeamFolderInvalidStatusError {
26882    /// The folder is active and the operation did not succeed.
26883    Active,
26884    /// The folder is archived and the operation did not succeed.
26885    Archived,
26886    /// The folder is being archived and the operation did not succeed.
26887    ArchiveInProgress,
26888    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26889    /// typically indicates that this SDK version is out of date.
26890    Other,
26891}
26892
26893impl<'de> ::serde::de::Deserialize<'de> for TeamFolderInvalidStatusError {
26894    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26895        // union deserializer
26896        use serde::de::{self, MapAccess, Visitor};
26897        struct EnumVisitor;
26898        impl<'de> Visitor<'de> for EnumVisitor {
26899            type Value = TeamFolderInvalidStatusError;
26900            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26901                f.write_str("a TeamFolderInvalidStatusError structure")
26902            }
26903            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26904                let tag: &str = match map.next_key()? {
26905                    Some(".tag") => map.next_value()?,
26906                    _ => return Err(de::Error::missing_field(".tag"))
26907                };
26908                let value = match tag {
26909                    "active" => TeamFolderInvalidStatusError::Active,
26910                    "archived" => TeamFolderInvalidStatusError::Archived,
26911                    "archive_in_progress" => TeamFolderInvalidStatusError::ArchiveInProgress,
26912                    _ => TeamFolderInvalidStatusError::Other,
26913                };
26914                crate::eat_json_fields(&mut map)?;
26915                Ok(value)
26916            }
26917        }
26918        const VARIANTS: &[&str] = &["active",
26919                                    "archived",
26920                                    "archive_in_progress",
26921                                    "other"];
26922        deserializer.deserialize_struct("TeamFolderInvalidStatusError", VARIANTS, EnumVisitor)
26923    }
26924}
26925
26926impl ::serde::ser::Serialize for TeamFolderInvalidStatusError {
26927    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26928        // union serializer
26929        use serde::ser::SerializeStruct;
26930        match self {
26931            TeamFolderInvalidStatusError::Active => {
26932                // unit
26933                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
26934                s.serialize_field(".tag", "active")?;
26935                s.end()
26936            }
26937            TeamFolderInvalidStatusError::Archived => {
26938                // unit
26939                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
26940                s.serialize_field(".tag", "archived")?;
26941                s.end()
26942            }
26943            TeamFolderInvalidStatusError::ArchiveInProgress => {
26944                // unit
26945                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
26946                s.serialize_field(".tag", "archive_in_progress")?;
26947                s.end()
26948            }
26949            TeamFolderInvalidStatusError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26950        }
26951    }
26952}
26953
26954impl ::std::error::Error for TeamFolderInvalidStatusError {
26955}
26956
26957impl ::std::fmt::Display for TeamFolderInvalidStatusError {
26958    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26959        match self {
26960            TeamFolderInvalidStatusError::Active => f.write_str("The folder is active and the operation did not succeed."),
26961            TeamFolderInvalidStatusError::Archived => f.write_str("The folder is archived and the operation did not succeed."),
26962            TeamFolderInvalidStatusError::ArchiveInProgress => f.write_str("The folder is being archived and the operation did not succeed."),
26963            _ => write!(f, "{:?}", *self),
26964        }
26965    }
26966}
26967
26968#[derive(Debug, Clone, PartialEq, Eq)]
26969#[non_exhaustive] // structs may have more fields added in the future.
26970pub struct TeamFolderListArg {
26971    /// The maximum number of results to return per request.
26972    pub limit: u32,
26973}
26974
26975impl Default for TeamFolderListArg {
26976    fn default() -> Self {
26977        TeamFolderListArg {
26978            limit: 1000,
26979        }
26980    }
26981}
26982
26983impl TeamFolderListArg {
26984    pub fn with_limit(mut self, value: u32) -> Self {
26985        self.limit = value;
26986        self
26987    }
26988}
26989
26990const TEAM_FOLDER_LIST_ARG_FIELDS: &[&str] = &["limit"];
26991impl TeamFolderListArg {
26992    // no _opt deserializer
26993    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26994        mut map: V,
26995    ) -> Result<TeamFolderListArg, V::Error> {
26996        let mut field_limit = None;
26997        while let Some(key) = map.next_key::<&str>()? {
26998            match key {
26999                "limit" => {
27000                    if field_limit.is_some() {
27001                        return Err(::serde::de::Error::duplicate_field("limit"));
27002                    }
27003                    field_limit = Some(map.next_value()?);
27004                }
27005                _ => {
27006                    // unknown field allowed and ignored
27007                    map.next_value::<::serde_json::Value>()?;
27008                }
27009            }
27010        }
27011        let result = TeamFolderListArg {
27012            limit: field_limit.unwrap_or(1000),
27013        };
27014        Ok(result)
27015    }
27016
27017    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27018        &self,
27019        s: &mut S::SerializeStruct,
27020    ) -> Result<(), S::Error> {
27021        use serde::ser::SerializeStruct;
27022        if self.limit != 1000 {
27023            s.serialize_field("limit", &self.limit)?;
27024        }
27025        Ok(())
27026    }
27027}
27028
27029impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListArg {
27030    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27031        // struct deserializer
27032        use serde::de::{MapAccess, Visitor};
27033        struct StructVisitor;
27034        impl<'de> Visitor<'de> for StructVisitor {
27035            type Value = TeamFolderListArg;
27036            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27037                f.write_str("a TeamFolderListArg struct")
27038            }
27039            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27040                TeamFolderListArg::internal_deserialize(map)
27041            }
27042        }
27043        deserializer.deserialize_struct("TeamFolderListArg", TEAM_FOLDER_LIST_ARG_FIELDS, StructVisitor)
27044    }
27045}
27046
27047impl ::serde::ser::Serialize for TeamFolderListArg {
27048    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27049        // struct serializer
27050        use serde::ser::SerializeStruct;
27051        let mut s = serializer.serialize_struct("TeamFolderListArg", 1)?;
27052        self.internal_serialize::<S>(&mut s)?;
27053        s.end()
27054    }
27055}
27056
27057#[derive(Debug, Clone, PartialEq, Eq)]
27058#[non_exhaustive] // structs may have more fields added in the future.
27059pub struct TeamFolderListContinueArg {
27060    /// Indicates from what point to get the next set of team folders.
27061    pub cursor: String,
27062}
27063
27064impl TeamFolderListContinueArg {
27065    pub fn new(cursor: String) -> Self {
27066        TeamFolderListContinueArg {
27067            cursor,
27068        }
27069    }
27070}
27071
27072const TEAM_FOLDER_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
27073impl TeamFolderListContinueArg {
27074    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27075        map: V,
27076    ) -> Result<TeamFolderListContinueArg, V::Error> {
27077        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27078    }
27079
27080    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27081        mut map: V,
27082        optional: bool,
27083    ) -> Result<Option<TeamFolderListContinueArg>, V::Error> {
27084        let mut field_cursor = None;
27085        let mut nothing = true;
27086        while let Some(key) = map.next_key::<&str>()? {
27087            nothing = false;
27088            match key {
27089                "cursor" => {
27090                    if field_cursor.is_some() {
27091                        return Err(::serde::de::Error::duplicate_field("cursor"));
27092                    }
27093                    field_cursor = Some(map.next_value()?);
27094                }
27095                _ => {
27096                    // unknown field allowed and ignored
27097                    map.next_value::<::serde_json::Value>()?;
27098                }
27099            }
27100        }
27101        if optional && nothing {
27102            return Ok(None);
27103        }
27104        let result = TeamFolderListContinueArg {
27105            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
27106        };
27107        Ok(Some(result))
27108    }
27109
27110    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27111        &self,
27112        s: &mut S::SerializeStruct,
27113    ) -> Result<(), S::Error> {
27114        use serde::ser::SerializeStruct;
27115        s.serialize_field("cursor", &self.cursor)?;
27116        Ok(())
27117    }
27118}
27119
27120impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListContinueArg {
27121    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27122        // struct deserializer
27123        use serde::de::{MapAccess, Visitor};
27124        struct StructVisitor;
27125        impl<'de> Visitor<'de> for StructVisitor {
27126            type Value = TeamFolderListContinueArg;
27127            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27128                f.write_str("a TeamFolderListContinueArg struct")
27129            }
27130            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27131                TeamFolderListContinueArg::internal_deserialize(map)
27132            }
27133        }
27134        deserializer.deserialize_struct("TeamFolderListContinueArg", TEAM_FOLDER_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
27135    }
27136}
27137
27138impl ::serde::ser::Serialize for TeamFolderListContinueArg {
27139    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27140        // struct serializer
27141        use serde::ser::SerializeStruct;
27142        let mut s = serializer.serialize_struct("TeamFolderListContinueArg", 1)?;
27143        self.internal_serialize::<S>(&mut s)?;
27144        s.end()
27145    }
27146}
27147
27148#[derive(Debug, Clone, PartialEq, Eq)]
27149#[non_exhaustive] // variants may be added in the future
27150pub enum TeamFolderListContinueError {
27151    /// The cursor is invalid.
27152    InvalidCursor,
27153    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27154    /// typically indicates that this SDK version is out of date.
27155    Other,
27156}
27157
27158impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListContinueError {
27159    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27160        // union deserializer
27161        use serde::de::{self, MapAccess, Visitor};
27162        struct EnumVisitor;
27163        impl<'de> Visitor<'de> for EnumVisitor {
27164            type Value = TeamFolderListContinueError;
27165            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27166                f.write_str("a TeamFolderListContinueError structure")
27167            }
27168            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27169                let tag: &str = match map.next_key()? {
27170                    Some(".tag") => map.next_value()?,
27171                    _ => return Err(de::Error::missing_field(".tag"))
27172                };
27173                let value = match tag {
27174                    "invalid_cursor" => TeamFolderListContinueError::InvalidCursor,
27175                    _ => TeamFolderListContinueError::Other,
27176                };
27177                crate::eat_json_fields(&mut map)?;
27178                Ok(value)
27179            }
27180        }
27181        const VARIANTS: &[&str] = &["invalid_cursor",
27182                                    "other"];
27183        deserializer.deserialize_struct("TeamFolderListContinueError", VARIANTS, EnumVisitor)
27184    }
27185}
27186
27187impl ::serde::ser::Serialize for TeamFolderListContinueError {
27188    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27189        // union serializer
27190        use serde::ser::SerializeStruct;
27191        match self {
27192            TeamFolderListContinueError::InvalidCursor => {
27193                // unit
27194                let mut s = serializer.serialize_struct("TeamFolderListContinueError", 1)?;
27195                s.serialize_field(".tag", "invalid_cursor")?;
27196                s.end()
27197            }
27198            TeamFolderListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27199        }
27200    }
27201}
27202
27203impl ::std::error::Error for TeamFolderListContinueError {
27204}
27205
27206impl ::std::fmt::Display for TeamFolderListContinueError {
27207    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27208        match self {
27209            TeamFolderListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
27210            _ => write!(f, "{:?}", *self),
27211        }
27212    }
27213}
27214
27215#[derive(Debug, Clone, PartialEq, Eq)]
27216#[non_exhaustive] // structs may have more fields added in the future.
27217pub struct TeamFolderListError {
27218    pub access_error: TeamFolderAccessError,
27219}
27220
27221impl TeamFolderListError {
27222    pub fn new(access_error: TeamFolderAccessError) -> Self {
27223        TeamFolderListError {
27224            access_error,
27225        }
27226    }
27227}
27228
27229const TEAM_FOLDER_LIST_ERROR_FIELDS: &[&str] = &["access_error"];
27230impl TeamFolderListError {
27231    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27232        map: V,
27233    ) -> Result<TeamFolderListError, V::Error> {
27234        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27235    }
27236
27237    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27238        mut map: V,
27239        optional: bool,
27240    ) -> Result<Option<TeamFolderListError>, V::Error> {
27241        let mut field_access_error = None;
27242        let mut nothing = true;
27243        while let Some(key) = map.next_key::<&str>()? {
27244            nothing = false;
27245            match key {
27246                "access_error" => {
27247                    if field_access_error.is_some() {
27248                        return Err(::serde::de::Error::duplicate_field("access_error"));
27249                    }
27250                    field_access_error = Some(map.next_value()?);
27251                }
27252                _ => {
27253                    // unknown field allowed and ignored
27254                    map.next_value::<::serde_json::Value>()?;
27255                }
27256            }
27257        }
27258        if optional && nothing {
27259            return Ok(None);
27260        }
27261        let result = TeamFolderListError {
27262            access_error: field_access_error.ok_or_else(|| ::serde::de::Error::missing_field("access_error"))?,
27263        };
27264        Ok(Some(result))
27265    }
27266
27267    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27268        &self,
27269        s: &mut S::SerializeStruct,
27270    ) -> Result<(), S::Error> {
27271        use serde::ser::SerializeStruct;
27272        s.serialize_field("access_error", &self.access_error)?;
27273        Ok(())
27274    }
27275}
27276
27277impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListError {
27278    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27279        // struct deserializer
27280        use serde::de::{MapAccess, Visitor};
27281        struct StructVisitor;
27282        impl<'de> Visitor<'de> for StructVisitor {
27283            type Value = TeamFolderListError;
27284            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27285                f.write_str("a TeamFolderListError struct")
27286            }
27287            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27288                TeamFolderListError::internal_deserialize(map)
27289            }
27290        }
27291        deserializer.deserialize_struct("TeamFolderListError", TEAM_FOLDER_LIST_ERROR_FIELDS, StructVisitor)
27292    }
27293}
27294
27295impl ::serde::ser::Serialize for TeamFolderListError {
27296    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27297        // struct serializer
27298        use serde::ser::SerializeStruct;
27299        let mut s = serializer.serialize_struct("TeamFolderListError", 1)?;
27300        self.internal_serialize::<S>(&mut s)?;
27301        s.end()
27302    }
27303}
27304
27305impl ::std::error::Error for TeamFolderListError {
27306}
27307
27308impl ::std::fmt::Display for TeamFolderListError {
27309    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27310        write!(f, "{:?}", *self)
27311    }
27312}
27313
27314/// Result for [`team_folder_list()`](crate::team::team_folder_list) and
27315/// [`team_folder_list_continue()`](crate::team::team_folder_list_continue).
27316#[derive(Debug, Clone, PartialEq, Eq)]
27317#[non_exhaustive] // structs may have more fields added in the future.
27318pub struct TeamFolderListResult {
27319    /// List of all team folders in the authenticated team.
27320    pub team_folders: Vec<TeamFolderMetadata>,
27321    /// Pass the cursor into [`team_folder_list_continue()`](crate::team::team_folder_list_continue)
27322    /// to obtain additional team folders.
27323    pub cursor: String,
27324    /// Is true if there are additional team folders that have not been returned yet. An additional
27325    /// call to [`team_folder_list_continue()`](crate::team::team_folder_list_continue) can retrieve
27326    /// them.
27327    pub has_more: bool,
27328}
27329
27330impl TeamFolderListResult {
27331    pub fn new(team_folders: Vec<TeamFolderMetadata>, cursor: String, has_more: bool) -> Self {
27332        TeamFolderListResult {
27333            team_folders,
27334            cursor,
27335            has_more,
27336        }
27337    }
27338}
27339
27340const TEAM_FOLDER_LIST_RESULT_FIELDS: &[&str] = &["team_folders",
27341                                                  "cursor",
27342                                                  "has_more"];
27343impl TeamFolderListResult {
27344    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27345        map: V,
27346    ) -> Result<TeamFolderListResult, V::Error> {
27347        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27348    }
27349
27350    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27351        mut map: V,
27352        optional: bool,
27353    ) -> Result<Option<TeamFolderListResult>, V::Error> {
27354        let mut field_team_folders = None;
27355        let mut field_cursor = None;
27356        let mut field_has_more = None;
27357        let mut nothing = true;
27358        while let Some(key) = map.next_key::<&str>()? {
27359            nothing = false;
27360            match key {
27361                "team_folders" => {
27362                    if field_team_folders.is_some() {
27363                        return Err(::serde::de::Error::duplicate_field("team_folders"));
27364                    }
27365                    field_team_folders = Some(map.next_value()?);
27366                }
27367                "cursor" => {
27368                    if field_cursor.is_some() {
27369                        return Err(::serde::de::Error::duplicate_field("cursor"));
27370                    }
27371                    field_cursor = Some(map.next_value()?);
27372                }
27373                "has_more" => {
27374                    if field_has_more.is_some() {
27375                        return Err(::serde::de::Error::duplicate_field("has_more"));
27376                    }
27377                    field_has_more = Some(map.next_value()?);
27378                }
27379                _ => {
27380                    // unknown field allowed and ignored
27381                    map.next_value::<::serde_json::Value>()?;
27382                }
27383            }
27384        }
27385        if optional && nothing {
27386            return Ok(None);
27387        }
27388        let result = TeamFolderListResult {
27389            team_folders: field_team_folders.ok_or_else(|| ::serde::de::Error::missing_field("team_folders"))?,
27390            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
27391            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
27392        };
27393        Ok(Some(result))
27394    }
27395
27396    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27397        &self,
27398        s: &mut S::SerializeStruct,
27399    ) -> Result<(), S::Error> {
27400        use serde::ser::SerializeStruct;
27401        s.serialize_field("team_folders", &self.team_folders)?;
27402        s.serialize_field("cursor", &self.cursor)?;
27403        s.serialize_field("has_more", &self.has_more)?;
27404        Ok(())
27405    }
27406}
27407
27408impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListResult {
27409    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27410        // struct deserializer
27411        use serde::de::{MapAccess, Visitor};
27412        struct StructVisitor;
27413        impl<'de> Visitor<'de> for StructVisitor {
27414            type Value = TeamFolderListResult;
27415            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27416                f.write_str("a TeamFolderListResult struct")
27417            }
27418            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27419                TeamFolderListResult::internal_deserialize(map)
27420            }
27421        }
27422        deserializer.deserialize_struct("TeamFolderListResult", TEAM_FOLDER_LIST_RESULT_FIELDS, StructVisitor)
27423    }
27424}
27425
27426impl ::serde::ser::Serialize for TeamFolderListResult {
27427    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27428        // struct serializer
27429        use serde::ser::SerializeStruct;
27430        let mut s = serializer.serialize_struct("TeamFolderListResult", 3)?;
27431        self.internal_serialize::<S>(&mut s)?;
27432        s.end()
27433    }
27434}
27435
27436/// Properties of a team folder.
27437#[derive(Debug, Clone, PartialEq, Eq)]
27438#[non_exhaustive] // structs may have more fields added in the future.
27439pub struct TeamFolderMetadata {
27440    /// The ID of the team folder.
27441    pub team_folder_id: crate::types::common::SharedFolderId,
27442    /// The name of the team folder.
27443    pub name: String,
27444    /// The status of the team folder.
27445    pub status: TeamFolderStatus,
27446    /// True if this team folder is a shared team root.
27447    pub is_team_shared_dropbox: bool,
27448    /// The sync setting applied to this team folder.
27449    pub sync_setting: crate::types::files::SyncSetting,
27450    /// Sync settings applied to contents of this team folder.
27451    pub content_sync_settings: Vec<crate::types::files::ContentSyncSetting>,
27452    /// The quota limit in bytes for this team folder namespace tree.
27453    pub quota_limit: i64,
27454}
27455
27456impl TeamFolderMetadata {
27457    pub fn new(
27458        team_folder_id: crate::types::common::SharedFolderId,
27459        name: String,
27460        status: TeamFolderStatus,
27461        is_team_shared_dropbox: bool,
27462        sync_setting: crate::types::files::SyncSetting,
27463        content_sync_settings: Vec<crate::types::files::ContentSyncSetting>,
27464    ) -> Self {
27465        TeamFolderMetadata {
27466            team_folder_id,
27467            name,
27468            status,
27469            is_team_shared_dropbox,
27470            sync_setting,
27471            content_sync_settings,
27472            quota_limit: 0,
27473        }
27474    }
27475
27476    pub fn with_quota_limit(mut self, value: i64) -> Self {
27477        self.quota_limit = value;
27478        self
27479    }
27480}
27481
27482const TEAM_FOLDER_METADATA_FIELDS: &[&str] = &["team_folder_id",
27483                                               "name",
27484                                               "status",
27485                                               "is_team_shared_dropbox",
27486                                               "sync_setting",
27487                                               "content_sync_settings",
27488                                               "quota_limit"];
27489impl TeamFolderMetadata {
27490    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27491        map: V,
27492    ) -> Result<TeamFolderMetadata, V::Error> {
27493        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27494    }
27495
27496    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27497        mut map: V,
27498        optional: bool,
27499    ) -> Result<Option<TeamFolderMetadata>, V::Error> {
27500        let mut field_team_folder_id = None;
27501        let mut field_name = None;
27502        let mut field_status = None;
27503        let mut field_is_team_shared_dropbox = None;
27504        let mut field_sync_setting = None;
27505        let mut field_content_sync_settings = None;
27506        let mut field_quota_limit = None;
27507        let mut nothing = true;
27508        while let Some(key) = map.next_key::<&str>()? {
27509            nothing = false;
27510            match key {
27511                "team_folder_id" => {
27512                    if field_team_folder_id.is_some() {
27513                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
27514                    }
27515                    field_team_folder_id = Some(map.next_value()?);
27516                }
27517                "name" => {
27518                    if field_name.is_some() {
27519                        return Err(::serde::de::Error::duplicate_field("name"));
27520                    }
27521                    field_name = Some(map.next_value()?);
27522                }
27523                "status" => {
27524                    if field_status.is_some() {
27525                        return Err(::serde::de::Error::duplicate_field("status"));
27526                    }
27527                    field_status = Some(map.next_value()?);
27528                }
27529                "is_team_shared_dropbox" => {
27530                    if field_is_team_shared_dropbox.is_some() {
27531                        return Err(::serde::de::Error::duplicate_field("is_team_shared_dropbox"));
27532                    }
27533                    field_is_team_shared_dropbox = Some(map.next_value()?);
27534                }
27535                "sync_setting" => {
27536                    if field_sync_setting.is_some() {
27537                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
27538                    }
27539                    field_sync_setting = Some(map.next_value()?);
27540                }
27541                "content_sync_settings" => {
27542                    if field_content_sync_settings.is_some() {
27543                        return Err(::serde::de::Error::duplicate_field("content_sync_settings"));
27544                    }
27545                    field_content_sync_settings = Some(map.next_value()?);
27546                }
27547                "quota_limit" => {
27548                    if field_quota_limit.is_some() {
27549                        return Err(::serde::de::Error::duplicate_field("quota_limit"));
27550                    }
27551                    field_quota_limit = Some(map.next_value()?);
27552                }
27553                _ => {
27554                    // unknown field allowed and ignored
27555                    map.next_value::<::serde_json::Value>()?;
27556                }
27557            }
27558        }
27559        if optional && nothing {
27560            return Ok(None);
27561        }
27562        let result = TeamFolderMetadata {
27563            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
27564            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
27565            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
27566            is_team_shared_dropbox: field_is_team_shared_dropbox.ok_or_else(|| ::serde::de::Error::missing_field("is_team_shared_dropbox"))?,
27567            sync_setting: field_sync_setting.ok_or_else(|| ::serde::de::Error::missing_field("sync_setting"))?,
27568            content_sync_settings: field_content_sync_settings.ok_or_else(|| ::serde::de::Error::missing_field("content_sync_settings"))?,
27569            quota_limit: field_quota_limit.unwrap_or(0),
27570        };
27571        Ok(Some(result))
27572    }
27573
27574    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27575        &self,
27576        s: &mut S::SerializeStruct,
27577    ) -> Result<(), S::Error> {
27578        use serde::ser::SerializeStruct;
27579        s.serialize_field("team_folder_id", &self.team_folder_id)?;
27580        s.serialize_field("name", &self.name)?;
27581        s.serialize_field("status", &self.status)?;
27582        s.serialize_field("is_team_shared_dropbox", &self.is_team_shared_dropbox)?;
27583        s.serialize_field("sync_setting", &self.sync_setting)?;
27584        s.serialize_field("content_sync_settings", &self.content_sync_settings)?;
27585        if self.quota_limit != 0 {
27586            s.serialize_field("quota_limit", &self.quota_limit)?;
27587        }
27588        Ok(())
27589    }
27590}
27591
27592impl<'de> ::serde::de::Deserialize<'de> for TeamFolderMetadata {
27593    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27594        // struct deserializer
27595        use serde::de::{MapAccess, Visitor};
27596        struct StructVisitor;
27597        impl<'de> Visitor<'de> for StructVisitor {
27598            type Value = TeamFolderMetadata;
27599            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27600                f.write_str("a TeamFolderMetadata struct")
27601            }
27602            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27603                TeamFolderMetadata::internal_deserialize(map)
27604            }
27605        }
27606        deserializer.deserialize_struct("TeamFolderMetadata", TEAM_FOLDER_METADATA_FIELDS, StructVisitor)
27607    }
27608}
27609
27610impl ::serde::ser::Serialize for TeamFolderMetadata {
27611    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27612        // struct serializer
27613        use serde::ser::SerializeStruct;
27614        let mut s = serializer.serialize_struct("TeamFolderMetadata", 7)?;
27615        self.internal_serialize::<S>(&mut s)?;
27616        s.end()
27617    }
27618}
27619
27620
27621#[derive(Debug, Clone, PartialEq, Eq)]
27622#[non_exhaustive] // variants may be added in the future
27623pub enum TeamFolderPermanentlyDeleteError {
27624    AccessError(TeamFolderAccessError),
27625    StatusError(TeamFolderInvalidStatusError),
27626    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
27627    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27628    /// typically indicates that this SDK version is out of date.
27629    Other,
27630}
27631
27632impl<'de> ::serde::de::Deserialize<'de> for TeamFolderPermanentlyDeleteError {
27633    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27634        // union deserializer
27635        use serde::de::{self, MapAccess, Visitor};
27636        struct EnumVisitor;
27637        impl<'de> Visitor<'de> for EnumVisitor {
27638            type Value = TeamFolderPermanentlyDeleteError;
27639            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27640                f.write_str("a TeamFolderPermanentlyDeleteError structure")
27641            }
27642            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27643                let tag: &str = match map.next_key()? {
27644                    Some(".tag") => map.next_value()?,
27645                    _ => return Err(de::Error::missing_field(".tag"))
27646                };
27647                let value = match tag {
27648                    "access_error" => {
27649                        match map.next_key()? {
27650                            Some("access_error") => TeamFolderPermanentlyDeleteError::AccessError(map.next_value()?),
27651                            None => return Err(de::Error::missing_field("access_error")),
27652                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27653                        }
27654                    }
27655                    "status_error" => {
27656                        match map.next_key()? {
27657                            Some("status_error") => TeamFolderPermanentlyDeleteError::StatusError(map.next_value()?),
27658                            None => return Err(de::Error::missing_field("status_error")),
27659                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27660                        }
27661                    }
27662                    "team_shared_dropbox_error" => {
27663                        match map.next_key()? {
27664                            Some("team_shared_dropbox_error") => TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(map.next_value()?),
27665                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
27666                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27667                        }
27668                    }
27669                    _ => TeamFolderPermanentlyDeleteError::Other,
27670                };
27671                crate::eat_json_fields(&mut map)?;
27672                Ok(value)
27673            }
27674        }
27675        const VARIANTS: &[&str] = &["access_error",
27676                                    "status_error",
27677                                    "team_shared_dropbox_error",
27678                                    "other"];
27679        deserializer.deserialize_struct("TeamFolderPermanentlyDeleteError", VARIANTS, EnumVisitor)
27680    }
27681}
27682
27683impl ::serde::ser::Serialize for TeamFolderPermanentlyDeleteError {
27684    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27685        // union serializer
27686        use serde::ser::SerializeStruct;
27687        match self {
27688            TeamFolderPermanentlyDeleteError::AccessError(x) => {
27689                // union or polymporphic struct
27690                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
27691                s.serialize_field(".tag", "access_error")?;
27692                s.serialize_field("access_error", x)?;
27693                s.end()
27694            }
27695            TeamFolderPermanentlyDeleteError::StatusError(x) => {
27696                // union or polymporphic struct
27697                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
27698                s.serialize_field(".tag", "status_error")?;
27699                s.serialize_field("status_error", x)?;
27700                s.end()
27701            }
27702            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(x) => {
27703                // union or polymporphic struct
27704                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
27705                s.serialize_field(".tag", "team_shared_dropbox_error")?;
27706                s.serialize_field("team_shared_dropbox_error", x)?;
27707                s.end()
27708            }
27709            TeamFolderPermanentlyDeleteError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27710        }
27711    }
27712}
27713
27714impl ::std::error::Error for TeamFolderPermanentlyDeleteError {
27715    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
27716        match self {
27717            TeamFolderPermanentlyDeleteError::AccessError(inner) => Some(inner),
27718            TeamFolderPermanentlyDeleteError::StatusError(inner) => Some(inner),
27719            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(inner) => Some(inner),
27720            _ => None,
27721        }
27722    }
27723}
27724
27725impl ::std::fmt::Display for TeamFolderPermanentlyDeleteError {
27726    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27727        match self {
27728            TeamFolderPermanentlyDeleteError::AccessError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
27729            TeamFolderPermanentlyDeleteError::StatusError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
27730            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
27731            _ => write!(f, "{:?}", *self),
27732        }
27733    }
27734}
27735
27736// union extends BaseTeamFolderError
27737impl From<BaseTeamFolderError> for TeamFolderPermanentlyDeleteError {
27738    fn from(parent: BaseTeamFolderError) -> Self {
27739        match parent {
27740            BaseTeamFolderError::AccessError(x) => TeamFolderPermanentlyDeleteError::AccessError(x),
27741            BaseTeamFolderError::StatusError(x) => TeamFolderPermanentlyDeleteError::StatusError(x),
27742            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(x),
27743            BaseTeamFolderError::Other => TeamFolderPermanentlyDeleteError::Other,
27744        }
27745    }
27746}
27747#[derive(Debug, Clone, PartialEq, Eq)]
27748#[non_exhaustive] // structs may have more fields added in the future.
27749pub struct TeamFolderRenameArg {
27750    /// The ID of the team folder.
27751    pub team_folder_id: crate::types::common::SharedFolderId,
27752    /// New team folder name.
27753    pub name: String,
27754}
27755
27756impl TeamFolderRenameArg {
27757    pub fn new(team_folder_id: crate::types::common::SharedFolderId, name: String) -> Self {
27758        TeamFolderRenameArg {
27759            team_folder_id,
27760            name,
27761        }
27762    }
27763}
27764
27765const TEAM_FOLDER_RENAME_ARG_FIELDS: &[&str] = &["team_folder_id",
27766                                                 "name"];
27767impl TeamFolderRenameArg {
27768    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27769        map: V,
27770    ) -> Result<TeamFolderRenameArg, V::Error> {
27771        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27772    }
27773
27774    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27775        mut map: V,
27776        optional: bool,
27777    ) -> Result<Option<TeamFolderRenameArg>, V::Error> {
27778        let mut field_team_folder_id = None;
27779        let mut field_name = None;
27780        let mut nothing = true;
27781        while let Some(key) = map.next_key::<&str>()? {
27782            nothing = false;
27783            match key {
27784                "team_folder_id" => {
27785                    if field_team_folder_id.is_some() {
27786                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
27787                    }
27788                    field_team_folder_id = Some(map.next_value()?);
27789                }
27790                "name" => {
27791                    if field_name.is_some() {
27792                        return Err(::serde::de::Error::duplicate_field("name"));
27793                    }
27794                    field_name = Some(map.next_value()?);
27795                }
27796                _ => {
27797                    // unknown field allowed and ignored
27798                    map.next_value::<::serde_json::Value>()?;
27799                }
27800            }
27801        }
27802        if optional && nothing {
27803            return Ok(None);
27804        }
27805        let result = TeamFolderRenameArg {
27806            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
27807            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
27808        };
27809        Ok(Some(result))
27810    }
27811
27812    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27813        &self,
27814        s: &mut S::SerializeStruct,
27815    ) -> Result<(), S::Error> {
27816        use serde::ser::SerializeStruct;
27817        s.serialize_field("team_folder_id", &self.team_folder_id)?;
27818        s.serialize_field("name", &self.name)?;
27819        Ok(())
27820    }
27821}
27822
27823impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRenameArg {
27824    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27825        // struct deserializer
27826        use serde::de::{MapAccess, Visitor};
27827        struct StructVisitor;
27828        impl<'de> Visitor<'de> for StructVisitor {
27829            type Value = TeamFolderRenameArg;
27830            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27831                f.write_str("a TeamFolderRenameArg struct")
27832            }
27833            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27834                TeamFolderRenameArg::internal_deserialize(map)
27835            }
27836        }
27837        deserializer.deserialize_struct("TeamFolderRenameArg", TEAM_FOLDER_RENAME_ARG_FIELDS, StructVisitor)
27838    }
27839}
27840
27841impl ::serde::ser::Serialize for TeamFolderRenameArg {
27842    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27843        // struct serializer
27844        use serde::ser::SerializeStruct;
27845        let mut s = serializer.serialize_struct("TeamFolderRenameArg", 2)?;
27846        self.internal_serialize::<S>(&mut s)?;
27847        s.end()
27848    }
27849}
27850
27851// struct extends TeamFolderIdArg
27852impl From<TeamFolderRenameArg> for TeamFolderIdArg {
27853    fn from(subtype: TeamFolderRenameArg) -> Self {
27854        Self {
27855            team_folder_id: subtype.team_folder_id,
27856        }
27857    }
27858}
27859#[derive(Debug, Clone, PartialEq, Eq)]
27860#[non_exhaustive] // variants may be added in the future
27861pub enum TeamFolderRenameError {
27862    AccessError(TeamFolderAccessError),
27863    StatusError(TeamFolderInvalidStatusError),
27864    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
27865    /// The provided folder name cannot be used.
27866    InvalidFolderName,
27867    /// There is already a team folder with the same name.
27868    FolderNameAlreadyUsed,
27869    /// The provided name cannot be used because it is reserved.
27870    FolderNameReserved,
27871    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27872    /// typically indicates that this SDK version is out of date.
27873    Other,
27874}
27875
27876impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRenameError {
27877    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27878        // union deserializer
27879        use serde::de::{self, MapAccess, Visitor};
27880        struct EnumVisitor;
27881        impl<'de> Visitor<'de> for EnumVisitor {
27882            type Value = TeamFolderRenameError;
27883            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27884                f.write_str("a TeamFolderRenameError structure")
27885            }
27886            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27887                let tag: &str = match map.next_key()? {
27888                    Some(".tag") => map.next_value()?,
27889                    _ => return Err(de::Error::missing_field(".tag"))
27890                };
27891                let value = match tag {
27892                    "access_error" => {
27893                        match map.next_key()? {
27894                            Some("access_error") => TeamFolderRenameError::AccessError(map.next_value()?),
27895                            None => return Err(de::Error::missing_field("access_error")),
27896                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27897                        }
27898                    }
27899                    "status_error" => {
27900                        match map.next_key()? {
27901                            Some("status_error") => TeamFolderRenameError::StatusError(map.next_value()?),
27902                            None => return Err(de::Error::missing_field("status_error")),
27903                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27904                        }
27905                    }
27906                    "team_shared_dropbox_error" => {
27907                        match map.next_key()? {
27908                            Some("team_shared_dropbox_error") => TeamFolderRenameError::TeamSharedDropboxError(map.next_value()?),
27909                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
27910                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27911                        }
27912                    }
27913                    "invalid_folder_name" => TeamFolderRenameError::InvalidFolderName,
27914                    "folder_name_already_used" => TeamFolderRenameError::FolderNameAlreadyUsed,
27915                    "folder_name_reserved" => TeamFolderRenameError::FolderNameReserved,
27916                    _ => TeamFolderRenameError::Other,
27917                };
27918                crate::eat_json_fields(&mut map)?;
27919                Ok(value)
27920            }
27921        }
27922        const VARIANTS: &[&str] = &["access_error",
27923                                    "status_error",
27924                                    "team_shared_dropbox_error",
27925                                    "other",
27926                                    "invalid_folder_name",
27927                                    "folder_name_already_used",
27928                                    "folder_name_reserved"];
27929        deserializer.deserialize_struct("TeamFolderRenameError", VARIANTS, EnumVisitor)
27930    }
27931}
27932
27933impl ::serde::ser::Serialize for TeamFolderRenameError {
27934    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27935        // union serializer
27936        use serde::ser::SerializeStruct;
27937        match self {
27938            TeamFolderRenameError::AccessError(x) => {
27939                // union or polymporphic struct
27940                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
27941                s.serialize_field(".tag", "access_error")?;
27942                s.serialize_field("access_error", x)?;
27943                s.end()
27944            }
27945            TeamFolderRenameError::StatusError(x) => {
27946                // union or polymporphic struct
27947                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
27948                s.serialize_field(".tag", "status_error")?;
27949                s.serialize_field("status_error", x)?;
27950                s.end()
27951            }
27952            TeamFolderRenameError::TeamSharedDropboxError(x) => {
27953                // union or polymporphic struct
27954                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
27955                s.serialize_field(".tag", "team_shared_dropbox_error")?;
27956                s.serialize_field("team_shared_dropbox_error", x)?;
27957                s.end()
27958            }
27959            TeamFolderRenameError::InvalidFolderName => {
27960                // unit
27961                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27962                s.serialize_field(".tag", "invalid_folder_name")?;
27963                s.end()
27964            }
27965            TeamFolderRenameError::FolderNameAlreadyUsed => {
27966                // unit
27967                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27968                s.serialize_field(".tag", "folder_name_already_used")?;
27969                s.end()
27970            }
27971            TeamFolderRenameError::FolderNameReserved => {
27972                // unit
27973                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27974                s.serialize_field(".tag", "folder_name_reserved")?;
27975                s.end()
27976            }
27977            TeamFolderRenameError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27978        }
27979    }
27980}
27981
27982impl ::std::error::Error for TeamFolderRenameError {
27983    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
27984        match self {
27985            TeamFolderRenameError::AccessError(inner) => Some(inner),
27986            TeamFolderRenameError::StatusError(inner) => Some(inner),
27987            TeamFolderRenameError::TeamSharedDropboxError(inner) => Some(inner),
27988            _ => None,
27989        }
27990    }
27991}
27992
27993impl ::std::fmt::Display for TeamFolderRenameError {
27994    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27995        match self {
27996            TeamFolderRenameError::AccessError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27997            TeamFolderRenameError::StatusError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27998            TeamFolderRenameError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27999            TeamFolderRenameError::InvalidFolderName => f.write_str("The provided folder name cannot be used."),
28000            TeamFolderRenameError::FolderNameAlreadyUsed => f.write_str("There is already a team folder with the same name."),
28001            TeamFolderRenameError::FolderNameReserved => f.write_str("The provided name cannot be used because it is reserved."),
28002            _ => write!(f, "{:?}", *self),
28003        }
28004    }
28005}
28006
28007// union extends BaseTeamFolderError
28008impl From<BaseTeamFolderError> for TeamFolderRenameError {
28009    fn from(parent: BaseTeamFolderError) -> Self {
28010        match parent {
28011            BaseTeamFolderError::AccessError(x) => TeamFolderRenameError::AccessError(x),
28012            BaseTeamFolderError::StatusError(x) => TeamFolderRenameError::StatusError(x),
28013            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderRenameError::TeamSharedDropboxError(x),
28014            BaseTeamFolderError::Other => TeamFolderRenameError::Other,
28015        }
28016    }
28017}
28018#[derive(Debug, Clone, PartialEq, Eq)]
28019#[non_exhaustive] // variants may be added in the future
28020pub enum TeamFolderRestoreError {
28021    AccessError(TeamFolderAccessError),
28022    StatusError(TeamFolderInvalidStatusError),
28023    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
28024    /// The team has reached the maximum number of team folders allowed by its plan.
28025    FolderCountLimitExceeded,
28026    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28027    /// typically indicates that this SDK version is out of date.
28028    Other,
28029}
28030
28031impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRestoreError {
28032    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28033        // union deserializer
28034        use serde::de::{self, MapAccess, Visitor};
28035        struct EnumVisitor;
28036        impl<'de> Visitor<'de> for EnumVisitor {
28037            type Value = TeamFolderRestoreError;
28038            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28039                f.write_str("a TeamFolderRestoreError structure")
28040            }
28041            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28042                let tag: &str = match map.next_key()? {
28043                    Some(".tag") => map.next_value()?,
28044                    _ => return Err(de::Error::missing_field(".tag"))
28045                };
28046                let value = match tag {
28047                    "access_error" => {
28048                        match map.next_key()? {
28049                            Some("access_error") => TeamFolderRestoreError::AccessError(map.next_value()?),
28050                            None => return Err(de::Error::missing_field("access_error")),
28051                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28052                        }
28053                    }
28054                    "status_error" => {
28055                        match map.next_key()? {
28056                            Some("status_error") => TeamFolderRestoreError::StatusError(map.next_value()?),
28057                            None => return Err(de::Error::missing_field("status_error")),
28058                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28059                        }
28060                    }
28061                    "team_shared_dropbox_error" => {
28062                        match map.next_key()? {
28063                            Some("team_shared_dropbox_error") => TeamFolderRestoreError::TeamSharedDropboxError(map.next_value()?),
28064                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
28065                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28066                        }
28067                    }
28068                    "folder_count_limit_exceeded" => TeamFolderRestoreError::FolderCountLimitExceeded,
28069                    _ => TeamFolderRestoreError::Other,
28070                };
28071                crate::eat_json_fields(&mut map)?;
28072                Ok(value)
28073            }
28074        }
28075        const VARIANTS: &[&str] = &["access_error",
28076                                    "status_error",
28077                                    "team_shared_dropbox_error",
28078                                    "other",
28079                                    "folder_count_limit_exceeded"];
28080        deserializer.deserialize_struct("TeamFolderRestoreError", VARIANTS, EnumVisitor)
28081    }
28082}
28083
28084impl ::serde::ser::Serialize for TeamFolderRestoreError {
28085    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28086        // union serializer
28087        use serde::ser::SerializeStruct;
28088        match self {
28089            TeamFolderRestoreError::AccessError(x) => {
28090                // union or polymporphic struct
28091                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
28092                s.serialize_field(".tag", "access_error")?;
28093                s.serialize_field("access_error", x)?;
28094                s.end()
28095            }
28096            TeamFolderRestoreError::StatusError(x) => {
28097                // union or polymporphic struct
28098                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
28099                s.serialize_field(".tag", "status_error")?;
28100                s.serialize_field("status_error", x)?;
28101                s.end()
28102            }
28103            TeamFolderRestoreError::TeamSharedDropboxError(x) => {
28104                // union or polymporphic struct
28105                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
28106                s.serialize_field(".tag", "team_shared_dropbox_error")?;
28107                s.serialize_field("team_shared_dropbox_error", x)?;
28108                s.end()
28109            }
28110            TeamFolderRestoreError::FolderCountLimitExceeded => {
28111                // unit
28112                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 1)?;
28113                s.serialize_field(".tag", "folder_count_limit_exceeded")?;
28114                s.end()
28115            }
28116            TeamFolderRestoreError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28117        }
28118    }
28119}
28120
28121impl ::std::error::Error for TeamFolderRestoreError {
28122    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
28123        match self {
28124            TeamFolderRestoreError::AccessError(inner) => Some(inner),
28125            TeamFolderRestoreError::StatusError(inner) => Some(inner),
28126            TeamFolderRestoreError::TeamSharedDropboxError(inner) => Some(inner),
28127            _ => None,
28128        }
28129    }
28130}
28131
28132impl ::std::fmt::Display for TeamFolderRestoreError {
28133    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28134        match self {
28135            TeamFolderRestoreError::AccessError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
28136            TeamFolderRestoreError::StatusError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
28137            TeamFolderRestoreError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
28138            TeamFolderRestoreError::FolderCountLimitExceeded => f.write_str("The team has reached the maximum number of team folders allowed by its plan."),
28139            _ => write!(f, "{:?}", *self),
28140        }
28141    }
28142}
28143
28144// union extends BaseTeamFolderError
28145impl From<BaseTeamFolderError> for TeamFolderRestoreError {
28146    fn from(parent: BaseTeamFolderError) -> Self {
28147        match parent {
28148            BaseTeamFolderError::AccessError(x) => TeamFolderRestoreError::AccessError(x),
28149            BaseTeamFolderError::StatusError(x) => TeamFolderRestoreError::StatusError(x),
28150            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderRestoreError::TeamSharedDropboxError(x),
28151            BaseTeamFolderError::Other => TeamFolderRestoreError::Other,
28152        }
28153    }
28154}
28155#[derive(Debug, Clone, PartialEq, Eq)]
28156#[non_exhaustive] // variants may be added in the future
28157pub enum TeamFolderStatus {
28158    /// The team folder and sub-folders are available to all members.
28159    Active,
28160    /// The team folder is archived and is not accessible outside of the team folder manager.
28161    Archived,
28162    /// The team folder is in the process of being archived and is not accessible outside of the
28163    /// team folder manager.
28164    ArchiveInProgress,
28165    /// The team folder is unmounted and can be restored.
28166    Inactive,
28167    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28168    /// typically indicates that this SDK version is out of date.
28169    Other,
28170}
28171
28172impl<'de> ::serde::de::Deserialize<'de> for TeamFolderStatus {
28173    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28174        // union deserializer
28175        use serde::de::{self, MapAccess, Visitor};
28176        struct EnumVisitor;
28177        impl<'de> Visitor<'de> for EnumVisitor {
28178            type Value = TeamFolderStatus;
28179            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28180                f.write_str("a TeamFolderStatus structure")
28181            }
28182            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28183                let tag: &str = match map.next_key()? {
28184                    Some(".tag") => map.next_value()?,
28185                    _ => return Err(de::Error::missing_field(".tag"))
28186                };
28187                let value = match tag {
28188                    "active" => TeamFolderStatus::Active,
28189                    "archived" => TeamFolderStatus::Archived,
28190                    "archive_in_progress" => TeamFolderStatus::ArchiveInProgress,
28191                    "inactive" => TeamFolderStatus::Inactive,
28192                    _ => TeamFolderStatus::Other,
28193                };
28194                crate::eat_json_fields(&mut map)?;
28195                Ok(value)
28196            }
28197        }
28198        const VARIANTS: &[&str] = &["active",
28199                                    "archived",
28200                                    "archive_in_progress",
28201                                    "inactive",
28202                                    "other"];
28203        deserializer.deserialize_struct("TeamFolderStatus", VARIANTS, EnumVisitor)
28204    }
28205}
28206
28207impl ::serde::ser::Serialize for TeamFolderStatus {
28208    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28209        // union serializer
28210        use serde::ser::SerializeStruct;
28211        match self {
28212            TeamFolderStatus::Active => {
28213                // unit
28214                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
28215                s.serialize_field(".tag", "active")?;
28216                s.end()
28217            }
28218            TeamFolderStatus::Archived => {
28219                // unit
28220                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
28221                s.serialize_field(".tag", "archived")?;
28222                s.end()
28223            }
28224            TeamFolderStatus::ArchiveInProgress => {
28225                // unit
28226                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
28227                s.serialize_field(".tag", "archive_in_progress")?;
28228                s.end()
28229            }
28230            TeamFolderStatus::Inactive => {
28231                // unit
28232                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
28233                s.serialize_field(".tag", "inactive")?;
28234                s.end()
28235            }
28236            TeamFolderStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28237        }
28238    }
28239}
28240
28241#[derive(Debug, Clone, PartialEq, Eq)]
28242#[non_exhaustive] // variants may be added in the future
28243pub enum TeamFolderTeamSharedDropboxError {
28244    /// This action is not allowed for a shared team root.
28245    Disallowed,
28246    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28247    /// typically indicates that this SDK version is out of date.
28248    Other,
28249}
28250
28251impl<'de> ::serde::de::Deserialize<'de> for TeamFolderTeamSharedDropboxError {
28252    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28253        // union deserializer
28254        use serde::de::{self, MapAccess, Visitor};
28255        struct EnumVisitor;
28256        impl<'de> Visitor<'de> for EnumVisitor {
28257            type Value = TeamFolderTeamSharedDropboxError;
28258            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28259                f.write_str("a TeamFolderTeamSharedDropboxError structure")
28260            }
28261            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28262                let tag: &str = match map.next_key()? {
28263                    Some(".tag") => map.next_value()?,
28264                    _ => return Err(de::Error::missing_field(".tag"))
28265                };
28266                let value = match tag {
28267                    "disallowed" => TeamFolderTeamSharedDropboxError::Disallowed,
28268                    _ => TeamFolderTeamSharedDropboxError::Other,
28269                };
28270                crate::eat_json_fields(&mut map)?;
28271                Ok(value)
28272            }
28273        }
28274        const VARIANTS: &[&str] = &["disallowed",
28275                                    "other"];
28276        deserializer.deserialize_struct("TeamFolderTeamSharedDropboxError", VARIANTS, EnumVisitor)
28277    }
28278}
28279
28280impl ::serde::ser::Serialize for TeamFolderTeamSharedDropboxError {
28281    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28282        // union serializer
28283        use serde::ser::SerializeStruct;
28284        match self {
28285            TeamFolderTeamSharedDropboxError::Disallowed => {
28286                // unit
28287                let mut s = serializer.serialize_struct("TeamFolderTeamSharedDropboxError", 1)?;
28288                s.serialize_field(".tag", "disallowed")?;
28289                s.end()
28290            }
28291            TeamFolderTeamSharedDropboxError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28292        }
28293    }
28294}
28295
28296impl ::std::error::Error for TeamFolderTeamSharedDropboxError {
28297}
28298
28299impl ::std::fmt::Display for TeamFolderTeamSharedDropboxError {
28300    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28301        match self {
28302            TeamFolderTeamSharedDropboxError::Disallowed => f.write_str("This action is not allowed for a shared team root."),
28303            _ => write!(f, "{:?}", *self),
28304        }
28305    }
28306}
28307
28308#[derive(Debug, Clone, PartialEq, Eq)]
28309#[non_exhaustive] // structs may have more fields added in the future.
28310pub struct TeamFolderUpdateSyncSettingsArg {
28311    /// The ID of the team folder.
28312    pub team_folder_id: crate::types::common::SharedFolderId,
28313    /// Sync setting to apply to the team folder itself. Only meaningful if the team folder is not a
28314    /// shared team root.
28315    pub sync_setting: Option<crate::types::files::SyncSettingArg>,
28316    /// Sync settings to apply to contents of this team folder.
28317    pub content_sync_settings: Option<Vec<crate::types::files::ContentSyncSettingArg>>,
28318}
28319
28320impl TeamFolderUpdateSyncSettingsArg {
28321    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
28322        TeamFolderUpdateSyncSettingsArg {
28323            team_folder_id,
28324            sync_setting: None,
28325            content_sync_settings: None,
28326        }
28327    }
28328
28329    pub fn with_sync_setting(mut self, value: crate::types::files::SyncSettingArg) -> Self {
28330        self.sync_setting = Some(value);
28331        self
28332    }
28333
28334    pub fn with_content_sync_settings(
28335        mut self,
28336        value: Vec<crate::types::files::ContentSyncSettingArg>,
28337    ) -> Self {
28338        self.content_sync_settings = Some(value);
28339        self
28340    }
28341}
28342
28343const TEAM_FOLDER_UPDATE_SYNC_SETTINGS_ARG_FIELDS: &[&str] = &["team_folder_id",
28344                                                               "sync_setting",
28345                                                               "content_sync_settings"];
28346impl TeamFolderUpdateSyncSettingsArg {
28347    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28348        map: V,
28349    ) -> Result<TeamFolderUpdateSyncSettingsArg, V::Error> {
28350        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28351    }
28352
28353    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28354        mut map: V,
28355        optional: bool,
28356    ) -> Result<Option<TeamFolderUpdateSyncSettingsArg>, V::Error> {
28357        let mut field_team_folder_id = None;
28358        let mut field_sync_setting = None;
28359        let mut field_content_sync_settings = None;
28360        let mut nothing = true;
28361        while let Some(key) = map.next_key::<&str>()? {
28362            nothing = false;
28363            match key {
28364                "team_folder_id" => {
28365                    if field_team_folder_id.is_some() {
28366                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
28367                    }
28368                    field_team_folder_id = Some(map.next_value()?);
28369                }
28370                "sync_setting" => {
28371                    if field_sync_setting.is_some() {
28372                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
28373                    }
28374                    field_sync_setting = Some(map.next_value()?);
28375                }
28376                "content_sync_settings" => {
28377                    if field_content_sync_settings.is_some() {
28378                        return Err(::serde::de::Error::duplicate_field("content_sync_settings"));
28379                    }
28380                    field_content_sync_settings = Some(map.next_value()?);
28381                }
28382                _ => {
28383                    // unknown field allowed and ignored
28384                    map.next_value::<::serde_json::Value>()?;
28385                }
28386            }
28387        }
28388        if optional && nothing {
28389            return Ok(None);
28390        }
28391        let result = TeamFolderUpdateSyncSettingsArg {
28392            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
28393            sync_setting: field_sync_setting.and_then(Option::flatten),
28394            content_sync_settings: field_content_sync_settings.and_then(Option::flatten),
28395        };
28396        Ok(Some(result))
28397    }
28398
28399    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28400        &self,
28401        s: &mut S::SerializeStruct,
28402    ) -> Result<(), S::Error> {
28403        use serde::ser::SerializeStruct;
28404        s.serialize_field("team_folder_id", &self.team_folder_id)?;
28405        if let Some(val) = &self.sync_setting {
28406            s.serialize_field("sync_setting", val)?;
28407        }
28408        if let Some(val) = &self.content_sync_settings {
28409            s.serialize_field("content_sync_settings", val)?;
28410        }
28411        Ok(())
28412    }
28413}
28414
28415impl<'de> ::serde::de::Deserialize<'de> for TeamFolderUpdateSyncSettingsArg {
28416    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28417        // struct deserializer
28418        use serde::de::{MapAccess, Visitor};
28419        struct StructVisitor;
28420        impl<'de> Visitor<'de> for StructVisitor {
28421            type Value = TeamFolderUpdateSyncSettingsArg;
28422            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28423                f.write_str("a TeamFolderUpdateSyncSettingsArg struct")
28424            }
28425            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28426                TeamFolderUpdateSyncSettingsArg::internal_deserialize(map)
28427            }
28428        }
28429        deserializer.deserialize_struct("TeamFolderUpdateSyncSettingsArg", TEAM_FOLDER_UPDATE_SYNC_SETTINGS_ARG_FIELDS, StructVisitor)
28430    }
28431}
28432
28433impl ::serde::ser::Serialize for TeamFolderUpdateSyncSettingsArg {
28434    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28435        // struct serializer
28436        use serde::ser::SerializeStruct;
28437        let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsArg", 3)?;
28438        self.internal_serialize::<S>(&mut s)?;
28439        s.end()
28440    }
28441}
28442
28443// struct extends TeamFolderIdArg
28444impl From<TeamFolderUpdateSyncSettingsArg> for TeamFolderIdArg {
28445    fn from(subtype: TeamFolderUpdateSyncSettingsArg) -> Self {
28446        Self {
28447            team_folder_id: subtype.team_folder_id,
28448        }
28449    }
28450}
28451#[derive(Debug, Clone, PartialEq, Eq)]
28452#[non_exhaustive] // variants may be added in the future
28453pub enum TeamFolderUpdateSyncSettingsError {
28454    AccessError(TeamFolderAccessError),
28455    StatusError(TeamFolderInvalidStatusError),
28456    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
28457    /// An error occurred setting the sync settings.
28458    SyncSettingsError(crate::types::files::SyncSettingsError),
28459    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28460    /// typically indicates that this SDK version is out of date.
28461    Other,
28462}
28463
28464impl<'de> ::serde::de::Deserialize<'de> for TeamFolderUpdateSyncSettingsError {
28465    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28466        // union deserializer
28467        use serde::de::{self, MapAccess, Visitor};
28468        struct EnumVisitor;
28469        impl<'de> Visitor<'de> for EnumVisitor {
28470            type Value = TeamFolderUpdateSyncSettingsError;
28471            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28472                f.write_str("a TeamFolderUpdateSyncSettingsError structure")
28473            }
28474            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28475                let tag: &str = match map.next_key()? {
28476                    Some(".tag") => map.next_value()?,
28477                    _ => return Err(de::Error::missing_field(".tag"))
28478                };
28479                let value = match tag {
28480                    "access_error" => {
28481                        match map.next_key()? {
28482                            Some("access_error") => TeamFolderUpdateSyncSettingsError::AccessError(map.next_value()?),
28483                            None => return Err(de::Error::missing_field("access_error")),
28484                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28485                        }
28486                    }
28487                    "status_error" => {
28488                        match map.next_key()? {
28489                            Some("status_error") => TeamFolderUpdateSyncSettingsError::StatusError(map.next_value()?),
28490                            None => return Err(de::Error::missing_field("status_error")),
28491                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28492                        }
28493                    }
28494                    "team_shared_dropbox_error" => {
28495                        match map.next_key()? {
28496                            Some("team_shared_dropbox_error") => TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(map.next_value()?),
28497                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
28498                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28499                        }
28500                    }
28501                    "sync_settings_error" => {
28502                        match map.next_key()? {
28503                            Some("sync_settings_error") => TeamFolderUpdateSyncSettingsError::SyncSettingsError(map.next_value()?),
28504                            None => return Err(de::Error::missing_field("sync_settings_error")),
28505                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
28506                        }
28507                    }
28508                    _ => TeamFolderUpdateSyncSettingsError::Other,
28509                };
28510                crate::eat_json_fields(&mut map)?;
28511                Ok(value)
28512            }
28513        }
28514        const VARIANTS: &[&str] = &["access_error",
28515                                    "status_error",
28516                                    "team_shared_dropbox_error",
28517                                    "other",
28518                                    "sync_settings_error"];
28519        deserializer.deserialize_struct("TeamFolderUpdateSyncSettingsError", VARIANTS, EnumVisitor)
28520    }
28521}
28522
28523impl ::serde::ser::Serialize for TeamFolderUpdateSyncSettingsError {
28524    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28525        // union serializer
28526        use serde::ser::SerializeStruct;
28527        match self {
28528            TeamFolderUpdateSyncSettingsError::AccessError(x) => {
28529                // union or polymporphic struct
28530                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
28531                s.serialize_field(".tag", "access_error")?;
28532                s.serialize_field("access_error", x)?;
28533                s.end()
28534            }
28535            TeamFolderUpdateSyncSettingsError::StatusError(x) => {
28536                // union or polymporphic struct
28537                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
28538                s.serialize_field(".tag", "status_error")?;
28539                s.serialize_field("status_error", x)?;
28540                s.end()
28541            }
28542            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(x) => {
28543                // union or polymporphic struct
28544                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
28545                s.serialize_field(".tag", "team_shared_dropbox_error")?;
28546                s.serialize_field("team_shared_dropbox_error", x)?;
28547                s.end()
28548            }
28549            TeamFolderUpdateSyncSettingsError::SyncSettingsError(x) => {
28550                // union or polymporphic struct
28551                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
28552                s.serialize_field(".tag", "sync_settings_error")?;
28553                s.serialize_field("sync_settings_error", x)?;
28554                s.end()
28555            }
28556            TeamFolderUpdateSyncSettingsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
28557        }
28558    }
28559}
28560
28561impl ::std::error::Error for TeamFolderUpdateSyncSettingsError {
28562    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
28563        match self {
28564            TeamFolderUpdateSyncSettingsError::AccessError(inner) => Some(inner),
28565            TeamFolderUpdateSyncSettingsError::StatusError(inner) => Some(inner),
28566            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(inner) => Some(inner),
28567            TeamFolderUpdateSyncSettingsError::SyncSettingsError(inner) => Some(inner),
28568            _ => None,
28569        }
28570    }
28571}
28572
28573impl ::std::fmt::Display for TeamFolderUpdateSyncSettingsError {
28574    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28575        match self {
28576            TeamFolderUpdateSyncSettingsError::AccessError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
28577            TeamFolderUpdateSyncSettingsError::StatusError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
28578            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
28579            TeamFolderUpdateSyncSettingsError::SyncSettingsError(inner) => write!(f, "An error occurred setting the sync settings: {}", inner),
28580            _ => write!(f, "{:?}", *self),
28581        }
28582    }
28583}
28584
28585// union extends BaseTeamFolderError
28586impl From<BaseTeamFolderError> for TeamFolderUpdateSyncSettingsError {
28587    fn from(parent: BaseTeamFolderError) -> Self {
28588        match parent {
28589            BaseTeamFolderError::AccessError(x) => TeamFolderUpdateSyncSettingsError::AccessError(x),
28590            BaseTeamFolderError::StatusError(x) => TeamFolderUpdateSyncSettingsError::StatusError(x),
28591            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(x),
28592            BaseTeamFolderError::Other => TeamFolderUpdateSyncSettingsError::Other,
28593        }
28594    }
28595}
28596#[derive(Debug, Clone, PartialEq, Eq)]
28597#[non_exhaustive] // structs may have more fields added in the future.
28598pub struct TeamGetInfoResult {
28599    /// The name of the team.
28600    pub name: String,
28601    /// The ID of the team.
28602    pub team_id: String,
28603    /// The number of licenses available to the team.
28604    pub num_licensed_users: u32,
28605    /// The number of accounts that have been invited or are already active members of the team.
28606    pub num_provisioned_users: u32,
28607    pub policies: crate::types::team_policies::TeamMemberPolicies,
28608    /// The number of licenses used on the team.
28609    pub num_used_licenses: u32,
28610}
28611
28612impl TeamGetInfoResult {
28613    pub fn new(
28614        name: String,
28615        team_id: String,
28616        num_licensed_users: u32,
28617        num_provisioned_users: u32,
28618        policies: crate::types::team_policies::TeamMemberPolicies,
28619    ) -> Self {
28620        TeamGetInfoResult {
28621            name,
28622            team_id,
28623            num_licensed_users,
28624            num_provisioned_users,
28625            policies,
28626            num_used_licenses: 0,
28627        }
28628    }
28629
28630    pub fn with_num_used_licenses(mut self, value: u32) -> Self {
28631        self.num_used_licenses = value;
28632        self
28633    }
28634}
28635
28636const TEAM_GET_INFO_RESULT_FIELDS: &[&str] = &["name",
28637                                               "team_id",
28638                                               "num_licensed_users",
28639                                               "num_provisioned_users",
28640                                               "policies",
28641                                               "num_used_licenses"];
28642impl TeamGetInfoResult {
28643    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28644        map: V,
28645    ) -> Result<TeamGetInfoResult, V::Error> {
28646        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28647    }
28648
28649    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28650        mut map: V,
28651        optional: bool,
28652    ) -> Result<Option<TeamGetInfoResult>, V::Error> {
28653        let mut field_name = None;
28654        let mut field_team_id = None;
28655        let mut field_num_licensed_users = None;
28656        let mut field_num_provisioned_users = None;
28657        let mut field_policies = None;
28658        let mut field_num_used_licenses = None;
28659        let mut nothing = true;
28660        while let Some(key) = map.next_key::<&str>()? {
28661            nothing = false;
28662            match key {
28663                "name" => {
28664                    if field_name.is_some() {
28665                        return Err(::serde::de::Error::duplicate_field("name"));
28666                    }
28667                    field_name = Some(map.next_value()?);
28668                }
28669                "team_id" => {
28670                    if field_team_id.is_some() {
28671                        return Err(::serde::de::Error::duplicate_field("team_id"));
28672                    }
28673                    field_team_id = Some(map.next_value()?);
28674                }
28675                "num_licensed_users" => {
28676                    if field_num_licensed_users.is_some() {
28677                        return Err(::serde::de::Error::duplicate_field("num_licensed_users"));
28678                    }
28679                    field_num_licensed_users = Some(map.next_value()?);
28680                }
28681                "num_provisioned_users" => {
28682                    if field_num_provisioned_users.is_some() {
28683                        return Err(::serde::de::Error::duplicate_field("num_provisioned_users"));
28684                    }
28685                    field_num_provisioned_users = Some(map.next_value()?);
28686                }
28687                "policies" => {
28688                    if field_policies.is_some() {
28689                        return Err(::serde::de::Error::duplicate_field("policies"));
28690                    }
28691                    field_policies = Some(map.next_value()?);
28692                }
28693                "num_used_licenses" => {
28694                    if field_num_used_licenses.is_some() {
28695                        return Err(::serde::de::Error::duplicate_field("num_used_licenses"));
28696                    }
28697                    field_num_used_licenses = Some(map.next_value()?);
28698                }
28699                _ => {
28700                    // unknown field allowed and ignored
28701                    map.next_value::<::serde_json::Value>()?;
28702                }
28703            }
28704        }
28705        if optional && nothing {
28706            return Ok(None);
28707        }
28708        let result = TeamGetInfoResult {
28709            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
28710            team_id: field_team_id.ok_or_else(|| ::serde::de::Error::missing_field("team_id"))?,
28711            num_licensed_users: field_num_licensed_users.ok_or_else(|| ::serde::de::Error::missing_field("num_licensed_users"))?,
28712            num_provisioned_users: field_num_provisioned_users.ok_or_else(|| ::serde::de::Error::missing_field("num_provisioned_users"))?,
28713            policies: field_policies.ok_or_else(|| ::serde::de::Error::missing_field("policies"))?,
28714            num_used_licenses: field_num_used_licenses.unwrap_or(0),
28715        };
28716        Ok(Some(result))
28717    }
28718
28719    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28720        &self,
28721        s: &mut S::SerializeStruct,
28722    ) -> Result<(), S::Error> {
28723        use serde::ser::SerializeStruct;
28724        s.serialize_field("name", &self.name)?;
28725        s.serialize_field("team_id", &self.team_id)?;
28726        s.serialize_field("num_licensed_users", &self.num_licensed_users)?;
28727        s.serialize_field("num_provisioned_users", &self.num_provisioned_users)?;
28728        s.serialize_field("policies", &self.policies)?;
28729        if self.num_used_licenses != 0 {
28730            s.serialize_field("num_used_licenses", &self.num_used_licenses)?;
28731        }
28732        Ok(())
28733    }
28734}
28735
28736impl<'de> ::serde::de::Deserialize<'de> for TeamGetInfoResult {
28737    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28738        // struct deserializer
28739        use serde::de::{MapAccess, Visitor};
28740        struct StructVisitor;
28741        impl<'de> Visitor<'de> for StructVisitor {
28742            type Value = TeamGetInfoResult;
28743            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28744                f.write_str("a TeamGetInfoResult struct")
28745            }
28746            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28747                TeamGetInfoResult::internal_deserialize(map)
28748            }
28749        }
28750        deserializer.deserialize_struct("TeamGetInfoResult", TEAM_GET_INFO_RESULT_FIELDS, StructVisitor)
28751    }
28752}
28753
28754impl ::serde::ser::Serialize for TeamGetInfoResult {
28755    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28756        // struct serializer
28757        use serde::ser::SerializeStruct;
28758        let mut s = serializer.serialize_struct("TeamGetInfoResult", 6)?;
28759        self.internal_serialize::<S>(&mut s)?;
28760        s.end()
28761    }
28762}
28763
28764/// Information about a team member.
28765#[derive(Debug, Clone, PartialEq, Eq)]
28766#[non_exhaustive] // structs may have more fields added in the future.
28767pub struct TeamMemberInfo {
28768    /// Profile of a user as a member of a team.
28769    pub profile: TeamMemberProfile,
28770    /// The user's role in the team.
28771    pub role: AdminTier,
28772}
28773
28774impl TeamMemberInfo {
28775    pub fn new(profile: TeamMemberProfile, role: AdminTier) -> Self {
28776        TeamMemberInfo {
28777            profile,
28778            role,
28779        }
28780    }
28781}
28782
28783const TEAM_MEMBER_INFO_FIELDS: &[&str] = &["profile",
28784                                           "role"];
28785impl TeamMemberInfo {
28786    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28787        map: V,
28788    ) -> Result<TeamMemberInfo, V::Error> {
28789        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28790    }
28791
28792    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28793        mut map: V,
28794        optional: bool,
28795    ) -> Result<Option<TeamMemberInfo>, V::Error> {
28796        let mut field_profile = None;
28797        let mut field_role = None;
28798        let mut nothing = true;
28799        while let Some(key) = map.next_key::<&str>()? {
28800            nothing = false;
28801            match key {
28802                "profile" => {
28803                    if field_profile.is_some() {
28804                        return Err(::serde::de::Error::duplicate_field("profile"));
28805                    }
28806                    field_profile = Some(map.next_value()?);
28807                }
28808                "role" => {
28809                    if field_role.is_some() {
28810                        return Err(::serde::de::Error::duplicate_field("role"));
28811                    }
28812                    field_role = Some(map.next_value()?);
28813                }
28814                _ => {
28815                    // unknown field allowed and ignored
28816                    map.next_value::<::serde_json::Value>()?;
28817                }
28818            }
28819        }
28820        if optional && nothing {
28821            return Ok(None);
28822        }
28823        let result = TeamMemberInfo {
28824            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
28825            role: field_role.ok_or_else(|| ::serde::de::Error::missing_field("role"))?,
28826        };
28827        Ok(Some(result))
28828    }
28829
28830    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28831        &self,
28832        s: &mut S::SerializeStruct,
28833    ) -> Result<(), S::Error> {
28834        use serde::ser::SerializeStruct;
28835        s.serialize_field("profile", &self.profile)?;
28836        s.serialize_field("role", &self.role)?;
28837        Ok(())
28838    }
28839}
28840
28841impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfo {
28842    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28843        // struct deserializer
28844        use serde::de::{MapAccess, Visitor};
28845        struct StructVisitor;
28846        impl<'de> Visitor<'de> for StructVisitor {
28847            type Value = TeamMemberInfo;
28848            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28849                f.write_str("a TeamMemberInfo struct")
28850            }
28851            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28852                TeamMemberInfo::internal_deserialize(map)
28853            }
28854        }
28855        deserializer.deserialize_struct("TeamMemberInfo", TEAM_MEMBER_INFO_FIELDS, StructVisitor)
28856    }
28857}
28858
28859impl ::serde::ser::Serialize for TeamMemberInfo {
28860    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28861        // struct serializer
28862        use serde::ser::SerializeStruct;
28863        let mut s = serializer.serialize_struct("TeamMemberInfo", 2)?;
28864        self.internal_serialize::<S>(&mut s)?;
28865        s.end()
28866    }
28867}
28868
28869/// Information about a team member.
28870#[derive(Debug, Clone, PartialEq, Eq)]
28871#[non_exhaustive] // structs may have more fields added in the future.
28872pub struct TeamMemberInfoV2 {
28873    /// Profile of a user as a member of a team.
28874    pub profile: TeamMemberProfile,
28875    /// The user's roles in the team.
28876    pub roles: Option<Vec<TeamMemberRole>>,
28877}
28878
28879impl TeamMemberInfoV2 {
28880    pub fn new(profile: TeamMemberProfile) -> Self {
28881        TeamMemberInfoV2 {
28882            profile,
28883            roles: None,
28884        }
28885    }
28886
28887    pub fn with_roles(mut self, value: Vec<TeamMemberRole>) -> Self {
28888        self.roles = Some(value);
28889        self
28890    }
28891}
28892
28893const TEAM_MEMBER_INFO_V2_FIELDS: &[&str] = &["profile",
28894                                              "roles"];
28895impl TeamMemberInfoV2 {
28896    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28897        map: V,
28898    ) -> Result<TeamMemberInfoV2, V::Error> {
28899        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28900    }
28901
28902    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28903        mut map: V,
28904        optional: bool,
28905    ) -> Result<Option<TeamMemberInfoV2>, V::Error> {
28906        let mut field_profile = None;
28907        let mut field_roles = None;
28908        let mut nothing = true;
28909        while let Some(key) = map.next_key::<&str>()? {
28910            nothing = false;
28911            match key {
28912                "profile" => {
28913                    if field_profile.is_some() {
28914                        return Err(::serde::de::Error::duplicate_field("profile"));
28915                    }
28916                    field_profile = Some(map.next_value()?);
28917                }
28918                "roles" => {
28919                    if field_roles.is_some() {
28920                        return Err(::serde::de::Error::duplicate_field("roles"));
28921                    }
28922                    field_roles = Some(map.next_value()?);
28923                }
28924                _ => {
28925                    // unknown field allowed and ignored
28926                    map.next_value::<::serde_json::Value>()?;
28927                }
28928            }
28929        }
28930        if optional && nothing {
28931            return Ok(None);
28932        }
28933        let result = TeamMemberInfoV2 {
28934            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
28935            roles: field_roles.and_then(Option::flatten),
28936        };
28937        Ok(Some(result))
28938    }
28939
28940    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28941        &self,
28942        s: &mut S::SerializeStruct,
28943    ) -> Result<(), S::Error> {
28944        use serde::ser::SerializeStruct;
28945        s.serialize_field("profile", &self.profile)?;
28946        if let Some(val) = &self.roles {
28947            s.serialize_field("roles", val)?;
28948        }
28949        Ok(())
28950    }
28951}
28952
28953impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfoV2 {
28954    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28955        // struct deserializer
28956        use serde::de::{MapAccess, Visitor};
28957        struct StructVisitor;
28958        impl<'de> Visitor<'de> for StructVisitor {
28959            type Value = TeamMemberInfoV2;
28960            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28961                f.write_str("a TeamMemberInfoV2 struct")
28962            }
28963            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28964                TeamMemberInfoV2::internal_deserialize(map)
28965            }
28966        }
28967        deserializer.deserialize_struct("TeamMemberInfoV2", TEAM_MEMBER_INFO_V2_FIELDS, StructVisitor)
28968    }
28969}
28970
28971impl ::serde::ser::Serialize for TeamMemberInfoV2 {
28972    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28973        // struct serializer
28974        use serde::ser::SerializeStruct;
28975        let mut s = serializer.serialize_struct("TeamMemberInfoV2", 2)?;
28976        self.internal_serialize::<S>(&mut s)?;
28977        s.end()
28978    }
28979}
28980
28981/// Information about a team member, after the change, like at
28982/// [`members_set_profile_v2()`](crate::team::members_set_profile_v2).
28983#[derive(Debug, Clone, PartialEq, Eq)]
28984#[non_exhaustive] // structs may have more fields added in the future.
28985pub struct TeamMemberInfoV2Result {
28986    /// Member info, after the change.
28987    pub member_info: TeamMemberInfoV2,
28988}
28989
28990impl TeamMemberInfoV2Result {
28991    pub fn new(member_info: TeamMemberInfoV2) -> Self {
28992        TeamMemberInfoV2Result {
28993            member_info,
28994        }
28995    }
28996}
28997
28998const TEAM_MEMBER_INFO_V2_RESULT_FIELDS: &[&str] = &["member_info"];
28999impl TeamMemberInfoV2Result {
29000    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29001        map: V,
29002    ) -> Result<TeamMemberInfoV2Result, V::Error> {
29003        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29004    }
29005
29006    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29007        mut map: V,
29008        optional: bool,
29009    ) -> Result<Option<TeamMemberInfoV2Result>, V::Error> {
29010        let mut field_member_info = None;
29011        let mut nothing = true;
29012        while let Some(key) = map.next_key::<&str>()? {
29013            nothing = false;
29014            match key {
29015                "member_info" => {
29016                    if field_member_info.is_some() {
29017                        return Err(::serde::de::Error::duplicate_field("member_info"));
29018                    }
29019                    field_member_info = Some(map.next_value()?);
29020                }
29021                _ => {
29022                    // unknown field allowed and ignored
29023                    map.next_value::<::serde_json::Value>()?;
29024                }
29025            }
29026        }
29027        if optional && nothing {
29028            return Ok(None);
29029        }
29030        let result = TeamMemberInfoV2Result {
29031            member_info: field_member_info.ok_or_else(|| ::serde::de::Error::missing_field("member_info"))?,
29032        };
29033        Ok(Some(result))
29034    }
29035
29036    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29037        &self,
29038        s: &mut S::SerializeStruct,
29039    ) -> Result<(), S::Error> {
29040        use serde::ser::SerializeStruct;
29041        s.serialize_field("member_info", &self.member_info)?;
29042        Ok(())
29043    }
29044}
29045
29046impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfoV2Result {
29047    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29048        // struct deserializer
29049        use serde::de::{MapAccess, Visitor};
29050        struct StructVisitor;
29051        impl<'de> Visitor<'de> for StructVisitor {
29052            type Value = TeamMemberInfoV2Result;
29053            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29054                f.write_str("a TeamMemberInfoV2Result struct")
29055            }
29056            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29057                TeamMemberInfoV2Result::internal_deserialize(map)
29058            }
29059        }
29060        deserializer.deserialize_struct("TeamMemberInfoV2Result", TEAM_MEMBER_INFO_V2_RESULT_FIELDS, StructVisitor)
29061    }
29062}
29063
29064impl ::serde::ser::Serialize for TeamMemberInfoV2Result {
29065    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29066        // struct serializer
29067        use serde::ser::SerializeStruct;
29068        let mut s = serializer.serialize_struct("TeamMemberInfoV2Result", 1)?;
29069        self.internal_serialize::<S>(&mut s)?;
29070        s.end()
29071    }
29072}
29073
29074/// Profile of a user as a member of a team.
29075#[derive(Debug, Clone, PartialEq, Eq)]
29076#[non_exhaustive] // structs may have more fields added in the future.
29077pub struct TeamMemberProfile {
29078    /// ID of user as a member of a team.
29079    pub team_member_id: crate::types::team_common::TeamMemberId,
29080    /// Email address of user.
29081    pub email: String,
29082    /// Is true if the user's email is verified to be owned by the user.
29083    pub email_verified: bool,
29084    /// The user's status as a member of a specific team.
29085    pub status: TeamMemberStatus,
29086    /// Representations for a person's name.
29087    pub name: crate::types::users::Name,
29088    /// The user's membership type: full (normal team member) vs limited (does not use a license; no
29089    /// access to the team's shared quota).
29090    pub membership_type: TeamMembershipType,
29091    /// List of group IDs of groups that the user belongs to.
29092    pub groups: Vec<crate::types::team_common::GroupId>,
29093    /// The namespace id of the user's member folder.
29094    pub member_folder_id: crate::types::common::NamespaceId,
29095    /// The namespace id of the user's root folder.
29096    pub root_folder_id: crate::types::common::NamespaceId,
29097    /// External ID that a team can attach to the user. An application using the API may find it
29098    /// easier to use their own IDs instead of Dropbox IDs like account_id or team_member_id.
29099    pub external_id: Option<String>,
29100    /// A user's account identifier.
29101    pub account_id: Option<crate::types::users_common::AccountId>,
29102    /// Secondary emails of a user.
29103    pub secondary_emails: Option<Vec<crate::types::secondary_emails::SecondaryEmail>>,
29104    /// The date and time the user was invited to the team (contains value only when the member's
29105    /// status matches [`TeamMemberStatus::Invited`]).
29106    pub invited_on: Option<crate::types::common::DropboxTimestamp>,
29107    /// The date and time the user joined as a member of a specific team.
29108    pub joined_on: Option<crate::types::common::DropboxTimestamp>,
29109    /// The date and time the user was suspended from the team (contains value only when the
29110    /// member's status matches [`TeamMemberStatus::Suspended`]).
29111    pub suspended_on: Option<crate::types::common::DropboxTimestamp>,
29112    /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used
29113    /// for SAML authentication.
29114    pub persistent_id: Option<String>,
29115    /// Whether the user is a directory restricted user.
29116    pub is_directory_restricted: Option<bool>,
29117    /// URL for the photo representing the user, if one is set.
29118    pub profile_photo_url: Option<String>,
29119}
29120
29121impl TeamMemberProfile {
29122    pub fn new(
29123        team_member_id: crate::types::team_common::TeamMemberId,
29124        email: String,
29125        email_verified: bool,
29126        status: TeamMemberStatus,
29127        name: crate::types::users::Name,
29128        membership_type: TeamMembershipType,
29129        groups: Vec<crate::types::team_common::GroupId>,
29130        member_folder_id: crate::types::common::NamespaceId,
29131        root_folder_id: crate::types::common::NamespaceId,
29132    ) -> Self {
29133        TeamMemberProfile {
29134            team_member_id,
29135            email,
29136            email_verified,
29137            status,
29138            name,
29139            membership_type,
29140            groups,
29141            member_folder_id,
29142            root_folder_id,
29143            external_id: None,
29144            account_id: None,
29145            secondary_emails: None,
29146            invited_on: None,
29147            joined_on: None,
29148            suspended_on: None,
29149            persistent_id: None,
29150            is_directory_restricted: None,
29151            profile_photo_url: None,
29152        }
29153    }
29154
29155    pub fn with_external_id(mut self, value: String) -> Self {
29156        self.external_id = Some(value);
29157        self
29158    }
29159
29160    pub fn with_account_id(mut self, value: crate::types::users_common::AccountId) -> Self {
29161        self.account_id = Some(value);
29162        self
29163    }
29164
29165    pub fn with_secondary_emails(
29166        mut self,
29167        value: Vec<crate::types::secondary_emails::SecondaryEmail>,
29168    ) -> Self {
29169        self.secondary_emails = Some(value);
29170        self
29171    }
29172
29173    pub fn with_invited_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
29174        self.invited_on = Some(value);
29175        self
29176    }
29177
29178    pub fn with_joined_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
29179        self.joined_on = Some(value);
29180        self
29181    }
29182
29183    pub fn with_suspended_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
29184        self.suspended_on = Some(value);
29185        self
29186    }
29187
29188    pub fn with_persistent_id(mut self, value: String) -> Self {
29189        self.persistent_id = Some(value);
29190        self
29191    }
29192
29193    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
29194        self.is_directory_restricted = Some(value);
29195        self
29196    }
29197
29198    pub fn with_profile_photo_url(mut self, value: String) -> Self {
29199        self.profile_photo_url = Some(value);
29200        self
29201    }
29202}
29203
29204const TEAM_MEMBER_PROFILE_FIELDS: &[&str] = &["team_member_id",
29205                                              "email",
29206                                              "email_verified",
29207                                              "status",
29208                                              "name",
29209                                              "membership_type",
29210                                              "groups",
29211                                              "member_folder_id",
29212                                              "root_folder_id",
29213                                              "external_id",
29214                                              "account_id",
29215                                              "secondary_emails",
29216                                              "invited_on",
29217                                              "joined_on",
29218                                              "suspended_on",
29219                                              "persistent_id",
29220                                              "is_directory_restricted",
29221                                              "profile_photo_url"];
29222impl TeamMemberProfile {
29223    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29224        map: V,
29225    ) -> Result<TeamMemberProfile, V::Error> {
29226        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29227    }
29228
29229    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29230        mut map: V,
29231        optional: bool,
29232    ) -> Result<Option<TeamMemberProfile>, V::Error> {
29233        let mut field_team_member_id = None;
29234        let mut field_email = None;
29235        let mut field_email_verified = None;
29236        let mut field_status = None;
29237        let mut field_name = None;
29238        let mut field_membership_type = None;
29239        let mut field_groups = None;
29240        let mut field_member_folder_id = None;
29241        let mut field_root_folder_id = None;
29242        let mut field_external_id = None;
29243        let mut field_account_id = None;
29244        let mut field_secondary_emails = None;
29245        let mut field_invited_on = None;
29246        let mut field_joined_on = None;
29247        let mut field_suspended_on = None;
29248        let mut field_persistent_id = None;
29249        let mut field_is_directory_restricted = None;
29250        let mut field_profile_photo_url = None;
29251        let mut nothing = true;
29252        while let Some(key) = map.next_key::<&str>()? {
29253            nothing = false;
29254            match key {
29255                "team_member_id" => {
29256                    if field_team_member_id.is_some() {
29257                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
29258                    }
29259                    field_team_member_id = Some(map.next_value()?);
29260                }
29261                "email" => {
29262                    if field_email.is_some() {
29263                        return Err(::serde::de::Error::duplicate_field("email"));
29264                    }
29265                    field_email = Some(map.next_value()?);
29266                }
29267                "email_verified" => {
29268                    if field_email_verified.is_some() {
29269                        return Err(::serde::de::Error::duplicate_field("email_verified"));
29270                    }
29271                    field_email_verified = Some(map.next_value()?);
29272                }
29273                "status" => {
29274                    if field_status.is_some() {
29275                        return Err(::serde::de::Error::duplicate_field("status"));
29276                    }
29277                    field_status = Some(map.next_value()?);
29278                }
29279                "name" => {
29280                    if field_name.is_some() {
29281                        return Err(::serde::de::Error::duplicate_field("name"));
29282                    }
29283                    field_name = Some(map.next_value()?);
29284                }
29285                "membership_type" => {
29286                    if field_membership_type.is_some() {
29287                        return Err(::serde::de::Error::duplicate_field("membership_type"));
29288                    }
29289                    field_membership_type = Some(map.next_value()?);
29290                }
29291                "groups" => {
29292                    if field_groups.is_some() {
29293                        return Err(::serde::de::Error::duplicate_field("groups"));
29294                    }
29295                    field_groups = Some(map.next_value()?);
29296                }
29297                "member_folder_id" => {
29298                    if field_member_folder_id.is_some() {
29299                        return Err(::serde::de::Error::duplicate_field("member_folder_id"));
29300                    }
29301                    field_member_folder_id = Some(map.next_value()?);
29302                }
29303                "root_folder_id" => {
29304                    if field_root_folder_id.is_some() {
29305                        return Err(::serde::de::Error::duplicate_field("root_folder_id"));
29306                    }
29307                    field_root_folder_id = Some(map.next_value()?);
29308                }
29309                "external_id" => {
29310                    if field_external_id.is_some() {
29311                        return Err(::serde::de::Error::duplicate_field("external_id"));
29312                    }
29313                    field_external_id = Some(map.next_value()?);
29314                }
29315                "account_id" => {
29316                    if field_account_id.is_some() {
29317                        return Err(::serde::de::Error::duplicate_field("account_id"));
29318                    }
29319                    field_account_id = Some(map.next_value()?);
29320                }
29321                "secondary_emails" => {
29322                    if field_secondary_emails.is_some() {
29323                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
29324                    }
29325                    field_secondary_emails = Some(map.next_value()?);
29326                }
29327                "invited_on" => {
29328                    if field_invited_on.is_some() {
29329                        return Err(::serde::de::Error::duplicate_field("invited_on"));
29330                    }
29331                    field_invited_on = Some(map.next_value()?);
29332                }
29333                "joined_on" => {
29334                    if field_joined_on.is_some() {
29335                        return Err(::serde::de::Error::duplicate_field("joined_on"));
29336                    }
29337                    field_joined_on = Some(map.next_value()?);
29338                }
29339                "suspended_on" => {
29340                    if field_suspended_on.is_some() {
29341                        return Err(::serde::de::Error::duplicate_field("suspended_on"));
29342                    }
29343                    field_suspended_on = Some(map.next_value()?);
29344                }
29345                "persistent_id" => {
29346                    if field_persistent_id.is_some() {
29347                        return Err(::serde::de::Error::duplicate_field("persistent_id"));
29348                    }
29349                    field_persistent_id = Some(map.next_value()?);
29350                }
29351                "is_directory_restricted" => {
29352                    if field_is_directory_restricted.is_some() {
29353                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
29354                    }
29355                    field_is_directory_restricted = Some(map.next_value()?);
29356                }
29357                "profile_photo_url" => {
29358                    if field_profile_photo_url.is_some() {
29359                        return Err(::serde::de::Error::duplicate_field("profile_photo_url"));
29360                    }
29361                    field_profile_photo_url = Some(map.next_value()?);
29362                }
29363                _ => {
29364                    // unknown field allowed and ignored
29365                    map.next_value::<::serde_json::Value>()?;
29366                }
29367            }
29368        }
29369        if optional && nothing {
29370            return Ok(None);
29371        }
29372        let result = TeamMemberProfile {
29373            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
29374            email: field_email.ok_or_else(|| ::serde::de::Error::missing_field("email"))?,
29375            email_verified: field_email_verified.ok_or_else(|| ::serde::de::Error::missing_field("email_verified"))?,
29376            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
29377            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
29378            membership_type: field_membership_type.ok_or_else(|| ::serde::de::Error::missing_field("membership_type"))?,
29379            groups: field_groups.ok_or_else(|| ::serde::de::Error::missing_field("groups"))?,
29380            member_folder_id: field_member_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("member_folder_id"))?,
29381            root_folder_id: field_root_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("root_folder_id"))?,
29382            external_id: field_external_id.and_then(Option::flatten),
29383            account_id: field_account_id.and_then(Option::flatten),
29384            secondary_emails: field_secondary_emails.and_then(Option::flatten),
29385            invited_on: field_invited_on.and_then(Option::flatten),
29386            joined_on: field_joined_on.and_then(Option::flatten),
29387            suspended_on: field_suspended_on.and_then(Option::flatten),
29388            persistent_id: field_persistent_id.and_then(Option::flatten),
29389            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
29390            profile_photo_url: field_profile_photo_url.and_then(Option::flatten),
29391        };
29392        Ok(Some(result))
29393    }
29394
29395    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29396        &self,
29397        s: &mut S::SerializeStruct,
29398    ) -> Result<(), S::Error> {
29399        use serde::ser::SerializeStruct;
29400        s.serialize_field("team_member_id", &self.team_member_id)?;
29401        s.serialize_field("email", &self.email)?;
29402        s.serialize_field("email_verified", &self.email_verified)?;
29403        s.serialize_field("status", &self.status)?;
29404        s.serialize_field("name", &self.name)?;
29405        s.serialize_field("membership_type", &self.membership_type)?;
29406        s.serialize_field("groups", &self.groups)?;
29407        s.serialize_field("member_folder_id", &self.member_folder_id)?;
29408        s.serialize_field("root_folder_id", &self.root_folder_id)?;
29409        if let Some(val) = &self.external_id {
29410            s.serialize_field("external_id", val)?;
29411        }
29412        if let Some(val) = &self.account_id {
29413            s.serialize_field("account_id", val)?;
29414        }
29415        if let Some(val) = &self.secondary_emails {
29416            s.serialize_field("secondary_emails", val)?;
29417        }
29418        if let Some(val) = &self.invited_on {
29419            s.serialize_field("invited_on", val)?;
29420        }
29421        if let Some(val) = &self.joined_on {
29422            s.serialize_field("joined_on", val)?;
29423        }
29424        if let Some(val) = &self.suspended_on {
29425            s.serialize_field("suspended_on", val)?;
29426        }
29427        if let Some(val) = &self.persistent_id {
29428            s.serialize_field("persistent_id", val)?;
29429        }
29430        if let Some(val) = &self.is_directory_restricted {
29431            s.serialize_field("is_directory_restricted", val)?;
29432        }
29433        if let Some(val) = &self.profile_photo_url {
29434            s.serialize_field("profile_photo_url", val)?;
29435        }
29436        Ok(())
29437    }
29438}
29439
29440impl<'de> ::serde::de::Deserialize<'de> for TeamMemberProfile {
29441    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29442        // struct deserializer
29443        use serde::de::{MapAccess, Visitor};
29444        struct StructVisitor;
29445        impl<'de> Visitor<'de> for StructVisitor {
29446            type Value = TeamMemberProfile;
29447            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29448                f.write_str("a TeamMemberProfile struct")
29449            }
29450            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29451                TeamMemberProfile::internal_deserialize(map)
29452            }
29453        }
29454        deserializer.deserialize_struct("TeamMemberProfile", TEAM_MEMBER_PROFILE_FIELDS, StructVisitor)
29455    }
29456}
29457
29458impl ::serde::ser::Serialize for TeamMemberProfile {
29459    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29460        // struct serializer
29461        use serde::ser::SerializeStruct;
29462        let mut s = serializer.serialize_struct("TeamMemberProfile", 18)?;
29463        self.internal_serialize::<S>(&mut s)?;
29464        s.end()
29465    }
29466}
29467
29468// struct extends MemberProfile
29469impl From<TeamMemberProfile> for MemberProfile {
29470    fn from(subtype: TeamMemberProfile) -> Self {
29471        Self {
29472            team_member_id: subtype.team_member_id,
29473            email: subtype.email,
29474            email_verified: subtype.email_verified,
29475            status: subtype.status,
29476            name: subtype.name,
29477            membership_type: subtype.membership_type,
29478            external_id: subtype.external_id,
29479            account_id: subtype.account_id,
29480            secondary_emails: subtype.secondary_emails,
29481            invited_on: subtype.invited_on,
29482            joined_on: subtype.joined_on,
29483            suspended_on: subtype.suspended_on,
29484            persistent_id: subtype.persistent_id,
29485            is_directory_restricted: subtype.is_directory_restricted,
29486            profile_photo_url: subtype.profile_photo_url,
29487        }
29488    }
29489}
29490/// A role which can be attached to a team member. This replaces AdminTier; each AdminTier
29491/// corresponds to a new TeamMemberRole with a matching name.
29492#[derive(Debug, Clone, PartialEq, Eq)]
29493#[non_exhaustive] // structs may have more fields added in the future.
29494pub struct TeamMemberRole {
29495    /// A string containing encoded role ID. For roles defined by Dropbox, this is the same across
29496    /// all teams.
29497    pub role_id: TeamMemberRoleId,
29498    /// The role display name.
29499    pub name: String,
29500    /// Role description. Describes which permissions come with this role.
29501    pub description: String,
29502}
29503
29504impl TeamMemberRole {
29505    pub fn new(role_id: TeamMemberRoleId, name: String, description: String) -> Self {
29506        TeamMemberRole {
29507            role_id,
29508            name,
29509            description,
29510        }
29511    }
29512}
29513
29514const TEAM_MEMBER_ROLE_FIELDS: &[&str] = &["role_id",
29515                                           "name",
29516                                           "description"];
29517impl TeamMemberRole {
29518    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29519        map: V,
29520    ) -> Result<TeamMemberRole, V::Error> {
29521        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29522    }
29523
29524    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29525        mut map: V,
29526        optional: bool,
29527    ) -> Result<Option<TeamMemberRole>, V::Error> {
29528        let mut field_role_id = None;
29529        let mut field_name = None;
29530        let mut field_description = None;
29531        let mut nothing = true;
29532        while let Some(key) = map.next_key::<&str>()? {
29533            nothing = false;
29534            match key {
29535                "role_id" => {
29536                    if field_role_id.is_some() {
29537                        return Err(::serde::de::Error::duplicate_field("role_id"));
29538                    }
29539                    field_role_id = Some(map.next_value()?);
29540                }
29541                "name" => {
29542                    if field_name.is_some() {
29543                        return Err(::serde::de::Error::duplicate_field("name"));
29544                    }
29545                    field_name = Some(map.next_value()?);
29546                }
29547                "description" => {
29548                    if field_description.is_some() {
29549                        return Err(::serde::de::Error::duplicate_field("description"));
29550                    }
29551                    field_description = Some(map.next_value()?);
29552                }
29553                _ => {
29554                    // unknown field allowed and ignored
29555                    map.next_value::<::serde_json::Value>()?;
29556                }
29557            }
29558        }
29559        if optional && nothing {
29560            return Ok(None);
29561        }
29562        let result = TeamMemberRole {
29563            role_id: field_role_id.ok_or_else(|| ::serde::de::Error::missing_field("role_id"))?,
29564            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
29565            description: field_description.ok_or_else(|| ::serde::de::Error::missing_field("description"))?,
29566        };
29567        Ok(Some(result))
29568    }
29569
29570    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29571        &self,
29572        s: &mut S::SerializeStruct,
29573    ) -> Result<(), S::Error> {
29574        use serde::ser::SerializeStruct;
29575        s.serialize_field("role_id", &self.role_id)?;
29576        s.serialize_field("name", &self.name)?;
29577        s.serialize_field("description", &self.description)?;
29578        Ok(())
29579    }
29580}
29581
29582impl<'de> ::serde::de::Deserialize<'de> for TeamMemberRole {
29583    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29584        // struct deserializer
29585        use serde::de::{MapAccess, Visitor};
29586        struct StructVisitor;
29587        impl<'de> Visitor<'de> for StructVisitor {
29588            type Value = TeamMemberRole;
29589            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29590                f.write_str("a TeamMemberRole struct")
29591            }
29592            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29593                TeamMemberRole::internal_deserialize(map)
29594            }
29595        }
29596        deserializer.deserialize_struct("TeamMemberRole", TEAM_MEMBER_ROLE_FIELDS, StructVisitor)
29597    }
29598}
29599
29600impl ::serde::ser::Serialize for TeamMemberRole {
29601    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29602        // struct serializer
29603        use serde::ser::SerializeStruct;
29604        let mut s = serializer.serialize_struct("TeamMemberRole", 3)?;
29605        self.internal_serialize::<S>(&mut s)?;
29606        s.end()
29607    }
29608}
29609
29610/// The user's status as a member of a specific team.
29611#[derive(Debug, Clone, PartialEq, Eq)]
29612pub enum TeamMemberStatus {
29613    /// User has successfully joined the team.
29614    Active,
29615    /// User has been invited to a team, but has not joined the team yet.
29616    Invited,
29617    /// User is no longer a member of the team, but the account can be un-suspended, re-establishing
29618    /// the user as a team member.
29619    Suspended,
29620    /// User is no longer a member of the team. Removed users are only listed when include_removed
29621    /// is true in members/list.
29622    Removed(RemovedStatus),
29623}
29624
29625impl<'de> ::serde::de::Deserialize<'de> for TeamMemberStatus {
29626    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29627        // union deserializer
29628        use serde::de::{self, MapAccess, Visitor};
29629        struct EnumVisitor;
29630        impl<'de> Visitor<'de> for EnumVisitor {
29631            type Value = TeamMemberStatus;
29632            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29633                f.write_str("a TeamMemberStatus structure")
29634            }
29635            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29636                let tag: &str = match map.next_key()? {
29637                    Some(".tag") => map.next_value()?,
29638                    _ => return Err(de::Error::missing_field(".tag"))
29639                };
29640                let value = match tag {
29641                    "active" => TeamMemberStatus::Active,
29642                    "invited" => TeamMemberStatus::Invited,
29643                    "suspended" => TeamMemberStatus::Suspended,
29644                    "removed" => TeamMemberStatus::Removed(RemovedStatus::internal_deserialize(&mut map)?),
29645                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
29646                };
29647                crate::eat_json_fields(&mut map)?;
29648                Ok(value)
29649            }
29650        }
29651        const VARIANTS: &[&str] = &["active",
29652                                    "invited",
29653                                    "suspended",
29654                                    "removed"];
29655        deserializer.deserialize_struct("TeamMemberStatus", VARIANTS, EnumVisitor)
29656    }
29657}
29658
29659impl ::serde::ser::Serialize for TeamMemberStatus {
29660    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29661        // union serializer
29662        use serde::ser::SerializeStruct;
29663        match self {
29664            TeamMemberStatus::Active => {
29665                // unit
29666                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
29667                s.serialize_field(".tag", "active")?;
29668                s.end()
29669            }
29670            TeamMemberStatus::Invited => {
29671                // unit
29672                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
29673                s.serialize_field(".tag", "invited")?;
29674                s.end()
29675            }
29676            TeamMemberStatus::Suspended => {
29677                // unit
29678                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
29679                s.serialize_field(".tag", "suspended")?;
29680                s.end()
29681            }
29682            TeamMemberStatus::Removed(x) => {
29683                // struct
29684                let mut s = serializer.serialize_struct("TeamMemberStatus", 3)?;
29685                s.serialize_field(".tag", "removed")?;
29686                x.internal_serialize::<S>(&mut s)?;
29687                s.end()
29688            }
29689        }
29690    }
29691}
29692
29693#[derive(Debug, Clone, PartialEq, Eq)]
29694pub enum TeamMembershipType {
29695    /// User uses a license and has full access to team resources like the shared quota.
29696    Full,
29697    /// Field is deprecated. User does not have access to the shared quota and team admins have
29698    /// restricted administrative control.
29699    #[deprecated]
29700    Limited,
29701}
29702
29703impl<'de> ::serde::de::Deserialize<'de> for TeamMembershipType {
29704    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29705        // union deserializer
29706        use serde::de::{self, MapAccess, Visitor};
29707        struct EnumVisitor;
29708        impl<'de> Visitor<'de> for EnumVisitor {
29709            type Value = TeamMembershipType;
29710            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29711                f.write_str("a TeamMembershipType structure")
29712            }
29713            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29714                let tag: &str = match map.next_key()? {
29715                    Some(".tag") => map.next_value()?,
29716                    _ => return Err(de::Error::missing_field(".tag"))
29717                };
29718                let value = match tag {
29719                    "full" => TeamMembershipType::Full,
29720                    #[allow(deprecated)]
29721                    "limited" => TeamMembershipType::Limited,
29722                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
29723                };
29724                crate::eat_json_fields(&mut map)?;
29725                Ok(value)
29726            }
29727        }
29728        const VARIANTS: &[&str] = &["full",
29729                                    "limited"];
29730        deserializer.deserialize_struct("TeamMembershipType", VARIANTS, EnumVisitor)
29731    }
29732}
29733
29734impl ::serde::ser::Serialize for TeamMembershipType {
29735    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29736        // union serializer
29737        use serde::ser::SerializeStruct;
29738        match self {
29739            TeamMembershipType::Full => {
29740                // unit
29741                let mut s = serializer.serialize_struct("TeamMembershipType", 1)?;
29742                s.serialize_field(".tag", "full")?;
29743                s.end()
29744            }
29745            #[allow(deprecated)]
29746            TeamMembershipType::Limited => {
29747                // unit
29748                let mut s = serializer.serialize_struct("TeamMembershipType", 1)?;
29749                s.serialize_field(".tag", "limited")?;
29750                s.end()
29751            }
29752        }
29753    }
29754}
29755
29756#[derive(Debug, Clone, PartialEq, Eq)]
29757#[non_exhaustive] // structs may have more fields added in the future.
29758pub struct TeamNamespacesListArg {
29759    /// Field is deprecated. Specifying a value here has no effect.
29760    #[deprecated]
29761    pub limit: u32,
29762}
29763
29764impl Default for TeamNamespacesListArg {
29765    fn default() -> Self {
29766        TeamNamespacesListArg {
29767            #[allow(deprecated)] limit: 1000,
29768        }
29769    }
29770}
29771
29772impl TeamNamespacesListArg {
29773    #[deprecated]
29774    #[allow(deprecated)]
29775    pub fn with_limit(mut self, value: u32) -> Self {
29776        self.limit = value;
29777        self
29778    }
29779}
29780
29781const TEAM_NAMESPACES_LIST_ARG_FIELDS: &[&str] = &["limit"];
29782impl TeamNamespacesListArg {
29783    // no _opt deserializer
29784    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29785        mut map: V,
29786    ) -> Result<TeamNamespacesListArg, V::Error> {
29787        let mut field_limit = None;
29788        while let Some(key) = map.next_key::<&str>()? {
29789            match key {
29790                "limit" => {
29791                    if field_limit.is_some() {
29792                        return Err(::serde::de::Error::duplicate_field("limit"));
29793                    }
29794                    field_limit = Some(map.next_value()?);
29795                }
29796                _ => {
29797                    // unknown field allowed and ignored
29798                    map.next_value::<::serde_json::Value>()?;
29799                }
29800            }
29801        }
29802        let result = TeamNamespacesListArg {
29803            #[allow(deprecated)] limit: field_limit.unwrap_or(1000),
29804        };
29805        Ok(result)
29806    }
29807
29808    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29809        &self,
29810        s: &mut S::SerializeStruct,
29811    ) -> Result<(), S::Error> {
29812        use serde::ser::SerializeStruct;
29813        #[allow(deprecated)]
29814        if self.limit != 1000 {
29815            s.serialize_field("limit", &self.limit)?;
29816        }
29817        Ok(())
29818    }
29819}
29820
29821impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListArg {
29822    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29823        // struct deserializer
29824        use serde::de::{MapAccess, Visitor};
29825        struct StructVisitor;
29826        impl<'de> Visitor<'de> for StructVisitor {
29827            type Value = TeamNamespacesListArg;
29828            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29829                f.write_str("a TeamNamespacesListArg struct")
29830            }
29831            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29832                TeamNamespacesListArg::internal_deserialize(map)
29833            }
29834        }
29835        deserializer.deserialize_struct("TeamNamespacesListArg", TEAM_NAMESPACES_LIST_ARG_FIELDS, StructVisitor)
29836    }
29837}
29838
29839impl ::serde::ser::Serialize for TeamNamespacesListArg {
29840    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29841        // struct serializer
29842        use serde::ser::SerializeStruct;
29843        let mut s = serializer.serialize_struct("TeamNamespacesListArg", 1)?;
29844        self.internal_serialize::<S>(&mut s)?;
29845        s.end()
29846    }
29847}
29848
29849#[derive(Debug, Clone, PartialEq, Eq)]
29850#[non_exhaustive] // structs may have more fields added in the future.
29851pub struct TeamNamespacesListContinueArg {
29852    /// Indicates from what point to get the next set of team-accessible namespaces.
29853    pub cursor: String,
29854}
29855
29856impl TeamNamespacesListContinueArg {
29857    pub fn new(cursor: String) -> Self {
29858        TeamNamespacesListContinueArg {
29859            cursor,
29860        }
29861    }
29862}
29863
29864const TEAM_NAMESPACES_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
29865impl TeamNamespacesListContinueArg {
29866    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29867        map: V,
29868    ) -> Result<TeamNamespacesListContinueArg, V::Error> {
29869        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29870    }
29871
29872    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29873        mut map: V,
29874        optional: bool,
29875    ) -> Result<Option<TeamNamespacesListContinueArg>, V::Error> {
29876        let mut field_cursor = None;
29877        let mut nothing = true;
29878        while let Some(key) = map.next_key::<&str>()? {
29879            nothing = false;
29880            match key {
29881                "cursor" => {
29882                    if field_cursor.is_some() {
29883                        return Err(::serde::de::Error::duplicate_field("cursor"));
29884                    }
29885                    field_cursor = Some(map.next_value()?);
29886                }
29887                _ => {
29888                    // unknown field allowed and ignored
29889                    map.next_value::<::serde_json::Value>()?;
29890                }
29891            }
29892        }
29893        if optional && nothing {
29894            return Ok(None);
29895        }
29896        let result = TeamNamespacesListContinueArg {
29897            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
29898        };
29899        Ok(Some(result))
29900    }
29901
29902    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29903        &self,
29904        s: &mut S::SerializeStruct,
29905    ) -> Result<(), S::Error> {
29906        use serde::ser::SerializeStruct;
29907        s.serialize_field("cursor", &self.cursor)?;
29908        Ok(())
29909    }
29910}
29911
29912impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListContinueArg {
29913    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29914        // struct deserializer
29915        use serde::de::{MapAccess, Visitor};
29916        struct StructVisitor;
29917        impl<'de> Visitor<'de> for StructVisitor {
29918            type Value = TeamNamespacesListContinueArg;
29919            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29920                f.write_str("a TeamNamespacesListContinueArg struct")
29921            }
29922            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29923                TeamNamespacesListContinueArg::internal_deserialize(map)
29924            }
29925        }
29926        deserializer.deserialize_struct("TeamNamespacesListContinueArg", TEAM_NAMESPACES_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
29927    }
29928}
29929
29930impl ::serde::ser::Serialize for TeamNamespacesListContinueArg {
29931    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29932        // struct serializer
29933        use serde::ser::SerializeStruct;
29934        let mut s = serializer.serialize_struct("TeamNamespacesListContinueArg", 1)?;
29935        self.internal_serialize::<S>(&mut s)?;
29936        s.end()
29937    }
29938}
29939
29940#[derive(Debug, Clone, PartialEq, Eq)]
29941#[non_exhaustive] // variants may be added in the future
29942pub enum TeamNamespacesListContinueError {
29943    /// Argument passed in is invalid.
29944    InvalidArg,
29945    /// The cursor is invalid.
29946    InvalidCursor,
29947    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29948    /// typically indicates that this SDK version is out of date.
29949    Other,
29950}
29951
29952impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListContinueError {
29953    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29954        // union deserializer
29955        use serde::de::{self, MapAccess, Visitor};
29956        struct EnumVisitor;
29957        impl<'de> Visitor<'de> for EnumVisitor {
29958            type Value = TeamNamespacesListContinueError;
29959            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29960                f.write_str("a TeamNamespacesListContinueError structure")
29961            }
29962            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29963                let tag: &str = match map.next_key()? {
29964                    Some(".tag") => map.next_value()?,
29965                    _ => return Err(de::Error::missing_field(".tag"))
29966                };
29967                let value = match tag {
29968                    "invalid_arg" => TeamNamespacesListContinueError::InvalidArg,
29969                    "invalid_cursor" => TeamNamespacesListContinueError::InvalidCursor,
29970                    _ => TeamNamespacesListContinueError::Other,
29971                };
29972                crate::eat_json_fields(&mut map)?;
29973                Ok(value)
29974            }
29975        }
29976        const VARIANTS: &[&str] = &["invalid_arg",
29977                                    "other",
29978                                    "invalid_cursor"];
29979        deserializer.deserialize_struct("TeamNamespacesListContinueError", VARIANTS, EnumVisitor)
29980    }
29981}
29982
29983impl ::serde::ser::Serialize for TeamNamespacesListContinueError {
29984    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29985        // union serializer
29986        use serde::ser::SerializeStruct;
29987        match self {
29988            TeamNamespacesListContinueError::InvalidArg => {
29989                // unit
29990                let mut s = serializer.serialize_struct("TeamNamespacesListContinueError", 1)?;
29991                s.serialize_field(".tag", "invalid_arg")?;
29992                s.end()
29993            }
29994            TeamNamespacesListContinueError::InvalidCursor => {
29995                // unit
29996                let mut s = serializer.serialize_struct("TeamNamespacesListContinueError", 1)?;
29997                s.serialize_field(".tag", "invalid_cursor")?;
29998                s.end()
29999            }
30000            TeamNamespacesListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30001        }
30002    }
30003}
30004
30005impl ::std::error::Error for TeamNamespacesListContinueError {
30006}
30007
30008impl ::std::fmt::Display for TeamNamespacesListContinueError {
30009    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30010        match self {
30011            TeamNamespacesListContinueError::InvalidArg => f.write_str("Argument passed in is invalid."),
30012            TeamNamespacesListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
30013            _ => write!(f, "{:?}", *self),
30014        }
30015    }
30016}
30017
30018// union extends TeamNamespacesListError
30019impl From<TeamNamespacesListError> for TeamNamespacesListContinueError {
30020    fn from(parent: TeamNamespacesListError) -> Self {
30021        match parent {
30022            TeamNamespacesListError::InvalidArg => TeamNamespacesListContinueError::InvalidArg,
30023            TeamNamespacesListError::Other => TeamNamespacesListContinueError::Other,
30024        }
30025    }
30026}
30027#[derive(Debug, Clone, PartialEq, Eq)]
30028#[non_exhaustive] // variants may be added in the future
30029pub enum TeamNamespacesListError {
30030    /// Argument passed in is invalid.
30031    InvalidArg,
30032    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30033    /// typically indicates that this SDK version is out of date.
30034    Other,
30035}
30036
30037impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListError {
30038    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30039        // union deserializer
30040        use serde::de::{self, MapAccess, Visitor};
30041        struct EnumVisitor;
30042        impl<'de> Visitor<'de> for EnumVisitor {
30043            type Value = TeamNamespacesListError;
30044            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30045                f.write_str("a TeamNamespacesListError structure")
30046            }
30047            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30048                let tag: &str = match map.next_key()? {
30049                    Some(".tag") => map.next_value()?,
30050                    _ => return Err(de::Error::missing_field(".tag"))
30051                };
30052                let value = match tag {
30053                    "invalid_arg" => TeamNamespacesListError::InvalidArg,
30054                    _ => TeamNamespacesListError::Other,
30055                };
30056                crate::eat_json_fields(&mut map)?;
30057                Ok(value)
30058            }
30059        }
30060        const VARIANTS: &[&str] = &["invalid_arg",
30061                                    "other"];
30062        deserializer.deserialize_struct("TeamNamespacesListError", VARIANTS, EnumVisitor)
30063    }
30064}
30065
30066impl ::serde::ser::Serialize for TeamNamespacesListError {
30067    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30068        // union serializer
30069        use serde::ser::SerializeStruct;
30070        match self {
30071            TeamNamespacesListError::InvalidArg => {
30072                // unit
30073                let mut s = serializer.serialize_struct("TeamNamespacesListError", 1)?;
30074                s.serialize_field(".tag", "invalid_arg")?;
30075                s.end()
30076            }
30077            TeamNamespacesListError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30078        }
30079    }
30080}
30081
30082impl ::std::error::Error for TeamNamespacesListError {
30083}
30084
30085impl ::std::fmt::Display for TeamNamespacesListError {
30086    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30087        match self {
30088            TeamNamespacesListError::InvalidArg => f.write_str("Argument passed in is invalid."),
30089            _ => write!(f, "{:?}", *self),
30090        }
30091    }
30092}
30093
30094/// Result for [`namespaces_list()`](crate::team::namespaces_list).
30095#[derive(Debug, Clone, PartialEq, Eq)]
30096#[non_exhaustive] // structs may have more fields added in the future.
30097pub struct TeamNamespacesListResult {
30098    /// List of all namespaces the team can access.
30099    pub namespaces: Vec<NamespaceMetadata>,
30100    /// Pass the cursor into [`namespaces_list_continue()`](crate::team::namespaces_list_continue)
30101    /// to obtain additional namespaces. Note that duplicate namespaces may be returned.
30102    pub cursor: String,
30103    /// Is true if there are additional namespaces that have not been returned yet.
30104    pub has_more: bool,
30105}
30106
30107impl TeamNamespacesListResult {
30108    pub fn new(namespaces: Vec<NamespaceMetadata>, cursor: String, has_more: bool) -> Self {
30109        TeamNamespacesListResult {
30110            namespaces,
30111            cursor,
30112            has_more,
30113        }
30114    }
30115}
30116
30117const TEAM_NAMESPACES_LIST_RESULT_FIELDS: &[&str] = &["namespaces",
30118                                                      "cursor",
30119                                                      "has_more"];
30120impl TeamNamespacesListResult {
30121    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30122        map: V,
30123    ) -> Result<TeamNamespacesListResult, V::Error> {
30124        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30125    }
30126
30127    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30128        mut map: V,
30129        optional: bool,
30130    ) -> Result<Option<TeamNamespacesListResult>, V::Error> {
30131        let mut field_namespaces = None;
30132        let mut field_cursor = None;
30133        let mut field_has_more = None;
30134        let mut nothing = true;
30135        while let Some(key) = map.next_key::<&str>()? {
30136            nothing = false;
30137            match key {
30138                "namespaces" => {
30139                    if field_namespaces.is_some() {
30140                        return Err(::serde::de::Error::duplicate_field("namespaces"));
30141                    }
30142                    field_namespaces = Some(map.next_value()?);
30143                }
30144                "cursor" => {
30145                    if field_cursor.is_some() {
30146                        return Err(::serde::de::Error::duplicate_field("cursor"));
30147                    }
30148                    field_cursor = Some(map.next_value()?);
30149                }
30150                "has_more" => {
30151                    if field_has_more.is_some() {
30152                        return Err(::serde::de::Error::duplicate_field("has_more"));
30153                    }
30154                    field_has_more = Some(map.next_value()?);
30155                }
30156                _ => {
30157                    // unknown field allowed and ignored
30158                    map.next_value::<::serde_json::Value>()?;
30159                }
30160            }
30161        }
30162        if optional && nothing {
30163            return Ok(None);
30164        }
30165        let result = TeamNamespacesListResult {
30166            namespaces: field_namespaces.ok_or_else(|| ::serde::de::Error::missing_field("namespaces"))?,
30167            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
30168            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
30169        };
30170        Ok(Some(result))
30171    }
30172
30173    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30174        &self,
30175        s: &mut S::SerializeStruct,
30176    ) -> Result<(), S::Error> {
30177        use serde::ser::SerializeStruct;
30178        s.serialize_field("namespaces", &self.namespaces)?;
30179        s.serialize_field("cursor", &self.cursor)?;
30180        s.serialize_field("has_more", &self.has_more)?;
30181        Ok(())
30182    }
30183}
30184
30185impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListResult {
30186    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30187        // struct deserializer
30188        use serde::de::{MapAccess, Visitor};
30189        struct StructVisitor;
30190        impl<'de> Visitor<'de> for StructVisitor {
30191            type Value = TeamNamespacesListResult;
30192            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30193                f.write_str("a TeamNamespacesListResult struct")
30194            }
30195            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30196                TeamNamespacesListResult::internal_deserialize(map)
30197            }
30198        }
30199        deserializer.deserialize_struct("TeamNamespacesListResult", TEAM_NAMESPACES_LIST_RESULT_FIELDS, StructVisitor)
30200    }
30201}
30202
30203impl ::serde::ser::Serialize for TeamNamespacesListResult {
30204    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30205        // struct serializer
30206        use serde::ser::SerializeStruct;
30207        let mut s = serializer.serialize_struct("TeamNamespacesListResult", 3)?;
30208        self.internal_serialize::<S>(&mut s)?;
30209        s.end()
30210    }
30211}
30212
30213#[derive(Debug, Clone, PartialEq, Eq)]
30214#[non_exhaustive] // variants may be added in the future
30215pub enum TeamReportFailureReason {
30216    /// We couldn't create the report, but we think this was a fluke. Everything should work if you
30217    /// try it again.
30218    TemporaryError,
30219    /// Too many other reports are being created right now. Try creating this report again once the
30220    /// others finish.
30221    ManyReportsAtOnce,
30222    /// We couldn't create the report. Try creating the report again with less data.
30223    TooMuchData,
30224    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30225    /// typically indicates that this SDK version is out of date.
30226    Other,
30227}
30228
30229impl<'de> ::serde::de::Deserialize<'de> for TeamReportFailureReason {
30230    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30231        // union deserializer
30232        use serde::de::{self, MapAccess, Visitor};
30233        struct EnumVisitor;
30234        impl<'de> Visitor<'de> for EnumVisitor {
30235            type Value = TeamReportFailureReason;
30236            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30237                f.write_str("a TeamReportFailureReason structure")
30238            }
30239            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30240                let tag: &str = match map.next_key()? {
30241                    Some(".tag") => map.next_value()?,
30242                    _ => return Err(de::Error::missing_field(".tag"))
30243                };
30244                let value = match tag {
30245                    "temporary_error" => TeamReportFailureReason::TemporaryError,
30246                    "many_reports_at_once" => TeamReportFailureReason::ManyReportsAtOnce,
30247                    "too_much_data" => TeamReportFailureReason::TooMuchData,
30248                    _ => TeamReportFailureReason::Other,
30249                };
30250                crate::eat_json_fields(&mut map)?;
30251                Ok(value)
30252            }
30253        }
30254        const VARIANTS: &[&str] = &["temporary_error",
30255                                    "many_reports_at_once",
30256                                    "too_much_data",
30257                                    "other"];
30258        deserializer.deserialize_struct("TeamReportFailureReason", VARIANTS, EnumVisitor)
30259    }
30260}
30261
30262impl ::serde::ser::Serialize for TeamReportFailureReason {
30263    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30264        // union serializer
30265        use serde::ser::SerializeStruct;
30266        match self {
30267            TeamReportFailureReason::TemporaryError => {
30268                // unit
30269                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
30270                s.serialize_field(".tag", "temporary_error")?;
30271                s.end()
30272            }
30273            TeamReportFailureReason::ManyReportsAtOnce => {
30274                // unit
30275                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
30276                s.serialize_field(".tag", "many_reports_at_once")?;
30277                s.end()
30278            }
30279            TeamReportFailureReason::TooMuchData => {
30280                // unit
30281                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
30282                s.serialize_field(".tag", "too_much_data")?;
30283                s.end()
30284            }
30285            TeamReportFailureReason::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30286        }
30287    }
30288}
30289
30290/// Error returned by
30291/// [`token_get_authenticated_admin()`](crate::team::token_get_authenticated_admin).
30292#[derive(Debug, Clone, PartialEq, Eq)]
30293#[non_exhaustive] // variants may be added in the future
30294pub enum TokenGetAuthenticatedAdminError {
30295    /// The current token is not associated with a team admin, because mappings were not recorded
30296    /// when the token was created. Consider re-authorizing a new access token to record its
30297    /// authenticating admin.
30298    MappingNotFound,
30299    /// Either the team admin that authorized this token is no longer an active member of the team
30300    /// or no longer a team admin.
30301    AdminNotActive,
30302    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30303    /// typically indicates that this SDK version is out of date.
30304    Other,
30305}
30306
30307impl<'de> ::serde::de::Deserialize<'de> for TokenGetAuthenticatedAdminError {
30308    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30309        // union deserializer
30310        use serde::de::{self, MapAccess, Visitor};
30311        struct EnumVisitor;
30312        impl<'de> Visitor<'de> for EnumVisitor {
30313            type Value = TokenGetAuthenticatedAdminError;
30314            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30315                f.write_str("a TokenGetAuthenticatedAdminError structure")
30316            }
30317            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30318                let tag: &str = match map.next_key()? {
30319                    Some(".tag") => map.next_value()?,
30320                    _ => return Err(de::Error::missing_field(".tag"))
30321                };
30322                let value = match tag {
30323                    "mapping_not_found" => TokenGetAuthenticatedAdminError::MappingNotFound,
30324                    "admin_not_active" => TokenGetAuthenticatedAdminError::AdminNotActive,
30325                    _ => TokenGetAuthenticatedAdminError::Other,
30326                };
30327                crate::eat_json_fields(&mut map)?;
30328                Ok(value)
30329            }
30330        }
30331        const VARIANTS: &[&str] = &["mapping_not_found",
30332                                    "admin_not_active",
30333                                    "other"];
30334        deserializer.deserialize_struct("TokenGetAuthenticatedAdminError", VARIANTS, EnumVisitor)
30335    }
30336}
30337
30338impl ::serde::ser::Serialize for TokenGetAuthenticatedAdminError {
30339    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30340        // union serializer
30341        use serde::ser::SerializeStruct;
30342        match self {
30343            TokenGetAuthenticatedAdminError::MappingNotFound => {
30344                // unit
30345                let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminError", 1)?;
30346                s.serialize_field(".tag", "mapping_not_found")?;
30347                s.end()
30348            }
30349            TokenGetAuthenticatedAdminError::AdminNotActive => {
30350                // unit
30351                let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminError", 1)?;
30352                s.serialize_field(".tag", "admin_not_active")?;
30353                s.end()
30354            }
30355            TokenGetAuthenticatedAdminError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30356        }
30357    }
30358}
30359
30360impl ::std::error::Error for TokenGetAuthenticatedAdminError {
30361}
30362
30363impl ::std::fmt::Display for TokenGetAuthenticatedAdminError {
30364    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30365        match self {
30366            TokenGetAuthenticatedAdminError::MappingNotFound => f.write_str("The current token is not associated with a team admin, because mappings were not recorded when the token was created. Consider re-authorizing a new access token to record its authenticating admin."),
30367            TokenGetAuthenticatedAdminError::AdminNotActive => f.write_str("Either the team admin that authorized this token is no longer an active member of the team or no longer a team admin."),
30368            _ => write!(f, "{:?}", *self),
30369        }
30370    }
30371}
30372
30373/// Results for [`token_get_authenticated_admin()`](crate::team::token_get_authenticated_admin).
30374#[derive(Debug, Clone, PartialEq, Eq)]
30375#[non_exhaustive] // structs may have more fields added in the future.
30376pub struct TokenGetAuthenticatedAdminResult {
30377    /// The admin who authorized the token.
30378    pub admin_profile: TeamMemberProfile,
30379}
30380
30381impl TokenGetAuthenticatedAdminResult {
30382    pub fn new(admin_profile: TeamMemberProfile) -> Self {
30383        TokenGetAuthenticatedAdminResult {
30384            admin_profile,
30385        }
30386    }
30387}
30388
30389const TOKEN_GET_AUTHENTICATED_ADMIN_RESULT_FIELDS: &[&str] = &["admin_profile"];
30390impl TokenGetAuthenticatedAdminResult {
30391    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30392        map: V,
30393    ) -> Result<TokenGetAuthenticatedAdminResult, V::Error> {
30394        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30395    }
30396
30397    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30398        mut map: V,
30399        optional: bool,
30400    ) -> Result<Option<TokenGetAuthenticatedAdminResult>, V::Error> {
30401        let mut field_admin_profile = None;
30402        let mut nothing = true;
30403        while let Some(key) = map.next_key::<&str>()? {
30404            nothing = false;
30405            match key {
30406                "admin_profile" => {
30407                    if field_admin_profile.is_some() {
30408                        return Err(::serde::de::Error::duplicate_field("admin_profile"));
30409                    }
30410                    field_admin_profile = Some(map.next_value()?);
30411                }
30412                _ => {
30413                    // unknown field allowed and ignored
30414                    map.next_value::<::serde_json::Value>()?;
30415                }
30416            }
30417        }
30418        if optional && nothing {
30419            return Ok(None);
30420        }
30421        let result = TokenGetAuthenticatedAdminResult {
30422            admin_profile: field_admin_profile.ok_or_else(|| ::serde::de::Error::missing_field("admin_profile"))?,
30423        };
30424        Ok(Some(result))
30425    }
30426
30427    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30428        &self,
30429        s: &mut S::SerializeStruct,
30430    ) -> Result<(), S::Error> {
30431        use serde::ser::SerializeStruct;
30432        s.serialize_field("admin_profile", &self.admin_profile)?;
30433        Ok(())
30434    }
30435}
30436
30437impl<'de> ::serde::de::Deserialize<'de> for TokenGetAuthenticatedAdminResult {
30438    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30439        // struct deserializer
30440        use serde::de::{MapAccess, Visitor};
30441        struct StructVisitor;
30442        impl<'de> Visitor<'de> for StructVisitor {
30443            type Value = TokenGetAuthenticatedAdminResult;
30444            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30445                f.write_str("a TokenGetAuthenticatedAdminResult struct")
30446            }
30447            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30448                TokenGetAuthenticatedAdminResult::internal_deserialize(map)
30449            }
30450        }
30451        deserializer.deserialize_struct("TokenGetAuthenticatedAdminResult", TOKEN_GET_AUTHENTICATED_ADMIN_RESULT_FIELDS, StructVisitor)
30452    }
30453}
30454
30455impl ::serde::ser::Serialize for TokenGetAuthenticatedAdminResult {
30456    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30457        // struct serializer
30458        use serde::ser::SerializeStruct;
30459        let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminResult", 1)?;
30460        self.internal_serialize::<S>(&mut s)?;
30461        s.end()
30462    }
30463}
30464
30465/// The value for [`Feature::UploadApiRateLimit`].
30466#[derive(Debug, Clone, PartialEq, Eq)]
30467#[non_exhaustive] // variants may be added in the future
30468pub enum UploadApiRateLimitValue {
30469    /// This team has unlimited upload API quota. So far both server version account and legacy
30470    /// account type have unlimited monthly upload api quota.
30471    Unlimited,
30472    /// The number of upload API calls allowed per month.
30473    Limit(u32),
30474    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30475    /// typically indicates that this SDK version is out of date.
30476    Other,
30477}
30478
30479impl<'de> ::serde::de::Deserialize<'de> for UploadApiRateLimitValue {
30480    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30481        // union deserializer
30482        use serde::de::{self, MapAccess, Visitor};
30483        struct EnumVisitor;
30484        impl<'de> Visitor<'de> for EnumVisitor {
30485            type Value = UploadApiRateLimitValue;
30486            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30487                f.write_str("a UploadApiRateLimitValue structure")
30488            }
30489            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30490                let tag: &str = match map.next_key()? {
30491                    Some(".tag") => map.next_value()?,
30492                    _ => return Err(de::Error::missing_field(".tag"))
30493                };
30494                let value = match tag {
30495                    "unlimited" => UploadApiRateLimitValue::Unlimited,
30496                    "limit" => {
30497                        match map.next_key()? {
30498                            Some("limit") => UploadApiRateLimitValue::Limit(map.next_value()?),
30499                            None => return Err(de::Error::missing_field("limit")),
30500                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30501                        }
30502                    }
30503                    _ => UploadApiRateLimitValue::Other,
30504                };
30505                crate::eat_json_fields(&mut map)?;
30506                Ok(value)
30507            }
30508        }
30509        const VARIANTS: &[&str] = &["unlimited",
30510                                    "limit",
30511                                    "other"];
30512        deserializer.deserialize_struct("UploadApiRateLimitValue", VARIANTS, EnumVisitor)
30513    }
30514}
30515
30516impl ::serde::ser::Serialize for UploadApiRateLimitValue {
30517    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30518        // union serializer
30519        use serde::ser::SerializeStruct;
30520        match self {
30521            UploadApiRateLimitValue::Unlimited => {
30522                // unit
30523                let mut s = serializer.serialize_struct("UploadApiRateLimitValue", 1)?;
30524                s.serialize_field(".tag", "unlimited")?;
30525                s.end()
30526            }
30527            UploadApiRateLimitValue::Limit(x) => {
30528                // primitive
30529                let mut s = serializer.serialize_struct("UploadApiRateLimitValue", 2)?;
30530                s.serialize_field(".tag", "limit")?;
30531                s.serialize_field("limit", x)?;
30532                s.end()
30533            }
30534            UploadApiRateLimitValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30535        }
30536    }
30537}
30538
30539/// Result of trying to add secondary emails to a user. 'success' is the only value indicating that
30540/// a user was successfully retrieved for adding secondary emails. The other values explain the type
30541/// of error that occurred, and include the user for which the error occurred.
30542#[derive(Debug, Clone, PartialEq, Eq)]
30543#[non_exhaustive] // variants may be added in the future
30544pub enum UserAddResult {
30545    /// Describes a user and the results for each attempt to add a secondary email.
30546    Success(UserSecondaryEmailsResult),
30547    /// Specified user is not a valid target for adding secondary emails.
30548    InvalidUser(UserSelectorArg),
30549    /// Secondary emails can only be added to verified users.
30550    Unverified(UserSelectorArg),
30551    /// Secondary emails cannot be added to placeholder users.
30552    PlaceholderUser(UserSelectorArg),
30553    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30554    /// typically indicates that this SDK version is out of date.
30555    Other,
30556}
30557
30558impl<'de> ::serde::de::Deserialize<'de> for UserAddResult {
30559    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30560        // union deserializer
30561        use serde::de::{self, MapAccess, Visitor};
30562        struct EnumVisitor;
30563        impl<'de> Visitor<'de> for EnumVisitor {
30564            type Value = UserAddResult;
30565            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30566                f.write_str("a UserAddResult structure")
30567            }
30568            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30569                let tag: &str = match map.next_key()? {
30570                    Some(".tag") => map.next_value()?,
30571                    _ => return Err(de::Error::missing_field(".tag"))
30572                };
30573                let value = match tag {
30574                    "success" => UserAddResult::Success(UserSecondaryEmailsResult::internal_deserialize(&mut map)?),
30575                    "invalid_user" => {
30576                        match map.next_key()? {
30577                            Some("invalid_user") => UserAddResult::InvalidUser(map.next_value()?),
30578                            None => return Err(de::Error::missing_field("invalid_user")),
30579                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30580                        }
30581                    }
30582                    "unverified" => {
30583                        match map.next_key()? {
30584                            Some("unverified") => UserAddResult::Unverified(map.next_value()?),
30585                            None => return Err(de::Error::missing_field("unverified")),
30586                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30587                        }
30588                    }
30589                    "placeholder_user" => {
30590                        match map.next_key()? {
30591                            Some("placeholder_user") => UserAddResult::PlaceholderUser(map.next_value()?),
30592                            None => return Err(de::Error::missing_field("placeholder_user")),
30593                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30594                        }
30595                    }
30596                    _ => UserAddResult::Other,
30597                };
30598                crate::eat_json_fields(&mut map)?;
30599                Ok(value)
30600            }
30601        }
30602        const VARIANTS: &[&str] = &["success",
30603                                    "invalid_user",
30604                                    "unverified",
30605                                    "placeholder_user",
30606                                    "other"];
30607        deserializer.deserialize_struct("UserAddResult", VARIANTS, EnumVisitor)
30608    }
30609}
30610
30611impl ::serde::ser::Serialize for UserAddResult {
30612    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30613        // union serializer
30614        use serde::ser::SerializeStruct;
30615        match self {
30616            UserAddResult::Success(x) => {
30617                // struct
30618                let mut s = serializer.serialize_struct("UserAddResult", 3)?;
30619                s.serialize_field(".tag", "success")?;
30620                x.internal_serialize::<S>(&mut s)?;
30621                s.end()
30622            }
30623            UserAddResult::InvalidUser(x) => {
30624                // union or polymporphic struct
30625                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
30626                s.serialize_field(".tag", "invalid_user")?;
30627                s.serialize_field("invalid_user", x)?;
30628                s.end()
30629            }
30630            UserAddResult::Unverified(x) => {
30631                // union or polymporphic struct
30632                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
30633                s.serialize_field(".tag", "unverified")?;
30634                s.serialize_field("unverified", x)?;
30635                s.end()
30636            }
30637            UserAddResult::PlaceholderUser(x) => {
30638                // union or polymporphic struct
30639                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
30640                s.serialize_field(".tag", "placeholder_user")?;
30641                s.serialize_field("placeholder_user", x)?;
30642                s.end()
30643            }
30644            UserAddResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30645        }
30646    }
30647}
30648
30649/// User and their required custom quota in GB (1 TB = 1024 GB).
30650#[derive(Debug, Clone, PartialEq, Eq)]
30651#[non_exhaustive] // structs may have more fields added in the future.
30652pub struct UserCustomQuotaArg {
30653    pub user: UserSelectorArg,
30654    pub quota_gb: UserQuota,
30655}
30656
30657impl UserCustomQuotaArg {
30658    pub fn new(user: UserSelectorArg, quota_gb: UserQuota) -> Self {
30659        UserCustomQuotaArg {
30660            user,
30661            quota_gb,
30662        }
30663    }
30664}
30665
30666const USER_CUSTOM_QUOTA_ARG_FIELDS: &[&str] = &["user",
30667                                                "quota_gb"];
30668impl UserCustomQuotaArg {
30669    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30670        map: V,
30671    ) -> Result<UserCustomQuotaArg, V::Error> {
30672        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30673    }
30674
30675    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30676        mut map: V,
30677        optional: bool,
30678    ) -> Result<Option<UserCustomQuotaArg>, V::Error> {
30679        let mut field_user = None;
30680        let mut field_quota_gb = None;
30681        let mut nothing = true;
30682        while let Some(key) = map.next_key::<&str>()? {
30683            nothing = false;
30684            match key {
30685                "user" => {
30686                    if field_user.is_some() {
30687                        return Err(::serde::de::Error::duplicate_field("user"));
30688                    }
30689                    field_user = Some(map.next_value()?);
30690                }
30691                "quota_gb" => {
30692                    if field_quota_gb.is_some() {
30693                        return Err(::serde::de::Error::duplicate_field("quota_gb"));
30694                    }
30695                    field_quota_gb = Some(map.next_value()?);
30696                }
30697                _ => {
30698                    // unknown field allowed and ignored
30699                    map.next_value::<::serde_json::Value>()?;
30700                }
30701            }
30702        }
30703        if optional && nothing {
30704            return Ok(None);
30705        }
30706        let result = UserCustomQuotaArg {
30707            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30708            quota_gb: field_quota_gb.ok_or_else(|| ::serde::de::Error::missing_field("quota_gb"))?,
30709        };
30710        Ok(Some(result))
30711    }
30712
30713    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30714        &self,
30715        s: &mut S::SerializeStruct,
30716    ) -> Result<(), S::Error> {
30717        use serde::ser::SerializeStruct;
30718        s.serialize_field("user", &self.user)?;
30719        s.serialize_field("quota_gb", &self.quota_gb)?;
30720        Ok(())
30721    }
30722}
30723
30724impl<'de> ::serde::de::Deserialize<'de> for UserCustomQuotaArg {
30725    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30726        // struct deserializer
30727        use serde::de::{MapAccess, Visitor};
30728        struct StructVisitor;
30729        impl<'de> Visitor<'de> for StructVisitor {
30730            type Value = UserCustomQuotaArg;
30731            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30732                f.write_str("a UserCustomQuotaArg struct")
30733            }
30734            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30735                UserCustomQuotaArg::internal_deserialize(map)
30736            }
30737        }
30738        deserializer.deserialize_struct("UserCustomQuotaArg", USER_CUSTOM_QUOTA_ARG_FIELDS, StructVisitor)
30739    }
30740}
30741
30742impl ::serde::ser::Serialize for UserCustomQuotaArg {
30743    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30744        // struct serializer
30745        use serde::ser::SerializeStruct;
30746        let mut s = serializer.serialize_struct("UserCustomQuotaArg", 2)?;
30747        self.internal_serialize::<S>(&mut s)?;
30748        s.end()
30749    }
30750}
30751
30752/// User and their custom quota in GB (1 TB = 1024 GB). No quota returns if the user has no custom
30753/// quota set.
30754#[derive(Debug, Clone, PartialEq, Eq)]
30755#[non_exhaustive] // structs may have more fields added in the future.
30756pub struct UserCustomQuotaResult {
30757    pub user: UserSelectorArg,
30758    pub quota_gb: Option<UserQuota>,
30759}
30760
30761impl UserCustomQuotaResult {
30762    pub fn new(user: UserSelectorArg) -> Self {
30763        UserCustomQuotaResult {
30764            user,
30765            quota_gb: None,
30766        }
30767    }
30768
30769    pub fn with_quota_gb(mut self, value: UserQuota) -> Self {
30770        self.quota_gb = Some(value);
30771        self
30772    }
30773}
30774
30775const USER_CUSTOM_QUOTA_RESULT_FIELDS: &[&str] = &["user",
30776                                                   "quota_gb"];
30777impl UserCustomQuotaResult {
30778    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30779        map: V,
30780    ) -> Result<UserCustomQuotaResult, V::Error> {
30781        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30782    }
30783
30784    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30785        mut map: V,
30786        optional: bool,
30787    ) -> Result<Option<UserCustomQuotaResult>, V::Error> {
30788        let mut field_user = None;
30789        let mut field_quota_gb = None;
30790        let mut nothing = true;
30791        while let Some(key) = map.next_key::<&str>()? {
30792            nothing = false;
30793            match key {
30794                "user" => {
30795                    if field_user.is_some() {
30796                        return Err(::serde::de::Error::duplicate_field("user"));
30797                    }
30798                    field_user = Some(map.next_value()?);
30799                }
30800                "quota_gb" => {
30801                    if field_quota_gb.is_some() {
30802                        return Err(::serde::de::Error::duplicate_field("quota_gb"));
30803                    }
30804                    field_quota_gb = Some(map.next_value()?);
30805                }
30806                _ => {
30807                    // unknown field allowed and ignored
30808                    map.next_value::<::serde_json::Value>()?;
30809                }
30810            }
30811        }
30812        if optional && nothing {
30813            return Ok(None);
30814        }
30815        let result = UserCustomQuotaResult {
30816            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30817            quota_gb: field_quota_gb.and_then(Option::flatten),
30818        };
30819        Ok(Some(result))
30820    }
30821
30822    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30823        &self,
30824        s: &mut S::SerializeStruct,
30825    ) -> Result<(), S::Error> {
30826        use serde::ser::SerializeStruct;
30827        s.serialize_field("user", &self.user)?;
30828        if let Some(val) = &self.quota_gb {
30829            s.serialize_field("quota_gb", val)?;
30830        }
30831        Ok(())
30832    }
30833}
30834
30835impl<'de> ::serde::de::Deserialize<'de> for UserCustomQuotaResult {
30836    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30837        // struct deserializer
30838        use serde::de::{MapAccess, Visitor};
30839        struct StructVisitor;
30840        impl<'de> Visitor<'de> for StructVisitor {
30841            type Value = UserCustomQuotaResult;
30842            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30843                f.write_str("a UserCustomQuotaResult struct")
30844            }
30845            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30846                UserCustomQuotaResult::internal_deserialize(map)
30847            }
30848        }
30849        deserializer.deserialize_struct("UserCustomQuotaResult", USER_CUSTOM_QUOTA_RESULT_FIELDS, StructVisitor)
30850    }
30851}
30852
30853impl ::serde::ser::Serialize for UserCustomQuotaResult {
30854    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30855        // struct serializer
30856        use serde::ser::SerializeStruct;
30857        let mut s = serializer.serialize_struct("UserCustomQuotaResult", 2)?;
30858        self.internal_serialize::<S>(&mut s)?;
30859        s.end()
30860    }
30861}
30862
30863#[derive(Debug, Clone, PartialEq, Eq)]
30864#[non_exhaustive] // structs may have more fields added in the future.
30865pub struct UserDeleteEmailsResult {
30866    pub user: UserSelectorArg,
30867    pub results: Vec<DeleteSecondaryEmailResult>,
30868}
30869
30870impl UserDeleteEmailsResult {
30871    pub fn new(user: UserSelectorArg, results: Vec<DeleteSecondaryEmailResult>) -> Self {
30872        UserDeleteEmailsResult {
30873            user,
30874            results,
30875        }
30876    }
30877}
30878
30879const USER_DELETE_EMAILS_RESULT_FIELDS: &[&str] = &["user",
30880                                                    "results"];
30881impl UserDeleteEmailsResult {
30882    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30883        map: V,
30884    ) -> Result<UserDeleteEmailsResult, V::Error> {
30885        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30886    }
30887
30888    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30889        mut map: V,
30890        optional: bool,
30891    ) -> Result<Option<UserDeleteEmailsResult>, V::Error> {
30892        let mut field_user = None;
30893        let mut field_results = None;
30894        let mut nothing = true;
30895        while let Some(key) = map.next_key::<&str>()? {
30896            nothing = false;
30897            match key {
30898                "user" => {
30899                    if field_user.is_some() {
30900                        return Err(::serde::de::Error::duplicate_field("user"));
30901                    }
30902                    field_user = Some(map.next_value()?);
30903                }
30904                "results" => {
30905                    if field_results.is_some() {
30906                        return Err(::serde::de::Error::duplicate_field("results"));
30907                    }
30908                    field_results = Some(map.next_value()?);
30909                }
30910                _ => {
30911                    // unknown field allowed and ignored
30912                    map.next_value::<::serde_json::Value>()?;
30913                }
30914            }
30915        }
30916        if optional && nothing {
30917            return Ok(None);
30918        }
30919        let result = UserDeleteEmailsResult {
30920            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30921            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
30922        };
30923        Ok(Some(result))
30924    }
30925
30926    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30927        &self,
30928        s: &mut S::SerializeStruct,
30929    ) -> Result<(), S::Error> {
30930        use serde::ser::SerializeStruct;
30931        s.serialize_field("user", &self.user)?;
30932        s.serialize_field("results", &self.results)?;
30933        Ok(())
30934    }
30935}
30936
30937impl<'de> ::serde::de::Deserialize<'de> for UserDeleteEmailsResult {
30938    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30939        // struct deserializer
30940        use serde::de::{MapAccess, Visitor};
30941        struct StructVisitor;
30942        impl<'de> Visitor<'de> for StructVisitor {
30943            type Value = UserDeleteEmailsResult;
30944            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30945                f.write_str("a UserDeleteEmailsResult struct")
30946            }
30947            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30948                UserDeleteEmailsResult::internal_deserialize(map)
30949            }
30950        }
30951        deserializer.deserialize_struct("UserDeleteEmailsResult", USER_DELETE_EMAILS_RESULT_FIELDS, StructVisitor)
30952    }
30953}
30954
30955impl ::serde::ser::Serialize for UserDeleteEmailsResult {
30956    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30957        // struct serializer
30958        use serde::ser::SerializeStruct;
30959        let mut s = serializer.serialize_struct("UserDeleteEmailsResult", 2)?;
30960        self.internal_serialize::<S>(&mut s)?;
30961        s.end()
30962    }
30963}
30964
30965/// Result of trying to delete a user's secondary emails. 'success' is the only value indicating
30966/// that a user was successfully retrieved for deleting secondary emails. The other values explain
30967/// the type of error that occurred, and include the user for which the error occurred.
30968#[derive(Debug, Clone, PartialEq, Eq)]
30969#[non_exhaustive] // variants may be added in the future
30970pub enum UserDeleteResult {
30971    /// Describes a user and the results for each attempt to delete a secondary email.
30972    Success(UserDeleteEmailsResult),
30973    /// Specified user is not a valid target for deleting secondary emails.
30974    InvalidUser(UserSelectorArg),
30975    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30976    /// typically indicates that this SDK version is out of date.
30977    Other,
30978}
30979
30980impl<'de> ::serde::de::Deserialize<'de> for UserDeleteResult {
30981    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30982        // union deserializer
30983        use serde::de::{self, MapAccess, Visitor};
30984        struct EnumVisitor;
30985        impl<'de> Visitor<'de> for EnumVisitor {
30986            type Value = UserDeleteResult;
30987            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30988                f.write_str("a UserDeleteResult structure")
30989            }
30990            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30991                let tag: &str = match map.next_key()? {
30992                    Some(".tag") => map.next_value()?,
30993                    _ => return Err(de::Error::missing_field(".tag"))
30994                };
30995                let value = match tag {
30996                    "success" => UserDeleteResult::Success(UserDeleteEmailsResult::internal_deserialize(&mut map)?),
30997                    "invalid_user" => {
30998                        match map.next_key()? {
30999                            Some("invalid_user") => UserDeleteResult::InvalidUser(map.next_value()?),
31000                            None => return Err(de::Error::missing_field("invalid_user")),
31001                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
31002                        }
31003                    }
31004                    _ => UserDeleteResult::Other,
31005                };
31006                crate::eat_json_fields(&mut map)?;
31007                Ok(value)
31008            }
31009        }
31010        const VARIANTS: &[&str] = &["success",
31011                                    "invalid_user",
31012                                    "other"];
31013        deserializer.deserialize_struct("UserDeleteResult", VARIANTS, EnumVisitor)
31014    }
31015}
31016
31017impl ::serde::ser::Serialize for UserDeleteResult {
31018    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
31019        // union serializer
31020        use serde::ser::SerializeStruct;
31021        match self {
31022            UserDeleteResult::Success(x) => {
31023                // struct
31024                let mut s = serializer.serialize_struct("UserDeleteResult", 3)?;
31025                s.serialize_field(".tag", "success")?;
31026                x.internal_serialize::<S>(&mut s)?;
31027                s.end()
31028            }
31029            UserDeleteResult::InvalidUser(x) => {
31030                // union or polymporphic struct
31031                let mut s = serializer.serialize_struct("UserDeleteResult", 2)?;
31032                s.serialize_field(".tag", "invalid_user")?;
31033                s.serialize_field("invalid_user", x)?;
31034                s.end()
31035            }
31036            UserDeleteResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
31037        }
31038    }
31039}
31040
31041#[derive(Debug, Clone, PartialEq, Eq)]
31042#[non_exhaustive] // structs may have more fields added in the future.
31043pub struct UserResendEmailsResult {
31044    pub user: UserSelectorArg,
31045    pub results: Vec<ResendSecondaryEmailResult>,
31046}
31047
31048impl UserResendEmailsResult {
31049    pub fn new(user: UserSelectorArg, results: Vec<ResendSecondaryEmailResult>) -> Self {
31050        UserResendEmailsResult {
31051            user,
31052            results,
31053        }
31054    }
31055}
31056
31057const USER_RESEND_EMAILS_RESULT_FIELDS: &[&str] = &["user",
31058                                                    "results"];
31059impl UserResendEmailsResult {
31060    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
31061        map: V,
31062    ) -> Result<UserResendEmailsResult, V::Error> {
31063        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
31064    }
31065
31066    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
31067        mut map: V,
31068        optional: bool,
31069    ) -> Result<Option<UserResendEmailsResult>, V::Error> {
31070        let mut field_user = None;
31071        let mut field_results = None;
31072        let mut nothing = true;
31073        while let Some(key) = map.next_key::<&str>()? {
31074            nothing = false;
31075            match key {
31076                "user" => {
31077                    if field_user.is_some() {
31078                        return Err(::serde::de::Error::duplicate_field("user"));
31079                    }
31080                    field_user = Some(map.next_value()?);
31081                }
31082                "results" => {
31083                    if field_results.is_some() {
31084                        return Err(::serde::de::Error::duplicate_field("results"));
31085                    }
31086                    field_results = Some(map.next_value()?);
31087                }
31088                _ => {
31089                    // unknown field allowed and ignored
31090                    map.next_value::<::serde_json::Value>()?;
31091                }
31092            }
31093        }
31094        if optional && nothing {
31095            return Ok(None);
31096        }
31097        let result = UserResendEmailsResult {
31098            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
31099            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
31100        };
31101        Ok(Some(result))
31102    }
31103
31104    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
31105        &self,
31106        s: &mut S::SerializeStruct,
31107    ) -> Result<(), S::Error> {
31108        use serde::ser::SerializeStruct;
31109        s.serialize_field("user", &self.user)?;
31110        s.serialize_field("results", &self.results)?;
31111        Ok(())
31112    }
31113}
31114
31115impl<'de> ::serde::de::Deserialize<'de> for UserResendEmailsResult {
31116    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
31117        // struct deserializer
31118        use serde::de::{MapAccess, Visitor};
31119        struct StructVisitor;
31120        impl<'de> Visitor<'de> for StructVisitor {
31121            type Value = UserResendEmailsResult;
31122            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
31123                f.write_str("a UserResendEmailsResult struct")
31124            }
31125            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
31126                UserResendEmailsResult::internal_deserialize(map)
31127            }
31128        }
31129        deserializer.deserialize_struct("UserResendEmailsResult", USER_RESEND_EMAILS_RESULT_FIELDS, StructVisitor)
31130    }
31131}
31132
31133impl ::serde::ser::Serialize for UserResendEmailsResult {
31134    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
31135        // struct serializer
31136        use serde::ser::SerializeStruct;
31137        let mut s = serializer.serialize_struct("UserResendEmailsResult", 2)?;
31138        self.internal_serialize::<S>(&mut s)?;
31139        s.end()
31140    }
31141}
31142
31143/// Result of trying to resend verification emails to a user. 'success' is the only value indicating
31144/// that a user was successfully retrieved for sending verification emails. The other values explain
31145/// the type of error that occurred, and include the user for which the error occurred.
31146#[derive(Debug, Clone, PartialEq, Eq)]
31147#[non_exhaustive] // variants may be added in the future
31148pub enum UserResendResult {
31149    /// Describes a user and the results for each attempt to resend verification emails.
31150    Success(UserResendEmailsResult),
31151    /// Specified user is not a valid target for resending verification emails.
31152    InvalidUser(UserSelectorArg),
31153    /// Catch-all used for unrecognized values returned from the server. Encountering this value
31154    /// typically indicates that this SDK version is out of date.
31155    Other,
31156}
31157
31158impl<'de> ::serde::de::Deserialize<'de> for UserResendResult {
31159    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
31160        // union deserializer
31161        use serde::de::{self, MapAccess, Visitor};
31162        struct EnumVisitor;
31163        impl<'de> Visitor<'de> for EnumVisitor {
31164            type Value = UserResendResult;
31165            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
31166                f.write_str("a UserResendResult structure")
31167            }
31168            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
31169                let tag: &str = match map.next_key()? {
31170                    Some(".tag") => map.next_value()?,
31171                    _ => return Err(de::Error::missing_field(".tag"))
31172                };
31173                let value = match tag {
31174                    "success" => UserResendResult::Success(UserResendEmailsResult::internal_deserialize(&mut map)?),
31175                    "invalid_user" => {
31176                        match map.next_key()? {
31177                            Some("invalid_user") => UserResendResult::InvalidUser(map.next_value()?),
31178                            None => return Err(de::Error::missing_field("invalid_user")),
31179                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
31180                        }
31181                    }
31182                    _ => UserResendResult::Other,
31183                };
31184                crate::eat_json_fields(&mut map)?;
31185                Ok(value)
31186            }
31187        }
31188        const VARIANTS: &[&str] = &["success",
31189                                    "invalid_user",
31190                                    "other"];
31191        deserializer.deserialize_struct("UserResendResult", VARIANTS, EnumVisitor)
31192    }
31193}
31194
31195impl ::serde::ser::Serialize for UserResendResult {
31196    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
31197        // union serializer
31198        use serde::ser::SerializeStruct;
31199        match self {
31200            UserResendResult::Success(x) => {
31201                // struct
31202                let mut s = serializer.serialize_struct("UserResendResult", 3)?;
31203                s.serialize_field(".tag", "success")?;
31204                x.internal_serialize::<S>(&mut s)?;
31205                s.end()
31206            }
31207            UserResendResult::InvalidUser(x) => {
31208                // union or polymporphic struct
31209                let mut s = serializer.serialize_struct("UserResendResult", 2)?;
31210                s.serialize_field(".tag", "invalid_user")?;
31211                s.serialize_field("invalid_user", x)?;
31212                s.end()
31213            }
31214            UserResendResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
31215        }
31216    }
31217}
31218
31219/// User and a list of secondary emails.
31220#[derive(Debug, Clone, PartialEq, Eq)]
31221#[non_exhaustive] // structs may have more fields added in the future.
31222pub struct UserSecondaryEmailsArg {
31223    pub user: UserSelectorArg,
31224    pub secondary_emails: Vec<crate::types::common::EmailAddress>,
31225}
31226
31227impl UserSecondaryEmailsArg {
31228    pub fn new(
31229        user: UserSelectorArg,
31230        secondary_emails: Vec<crate::types::common::EmailAddress>,
31231    ) -> Self {
31232        UserSecondaryEmailsArg {
31233            user,
31234            secondary_emails,
31235        }
31236    }
31237}
31238
31239const USER_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["user",
31240                                                    "secondary_emails"];
31241impl UserSecondaryEmailsArg {
31242    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
31243        map: V,
31244    ) -> Result<UserSecondaryEmailsArg, V::Error> {
31245        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
31246    }
31247
31248    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
31249        mut map: V,
31250        optional: bool,
31251    ) -> Result<Option<UserSecondaryEmailsArg>, V::Error> {
31252        let mut field_user = None;
31253        let mut field_secondary_emails = None;
31254        let mut nothing = true;
31255        while let Some(key) = map.next_key::<&str>()? {
31256            nothing = false;
31257            match key {
31258                "user" => {
31259                    if field_user.is_some() {
31260                        return Err(::serde::de::Error::duplicate_field("user"));
31261                    }
31262                    field_user = Some(map.next_value()?);
31263                }
31264                "secondary_emails" => {
31265                    if field_secondary_emails.is_some() {
31266                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
31267                    }
31268                    field_secondary_emails = Some(map.next_value()?);
31269                }
31270                _ => {
31271                    // unknown field allowed and ignored
31272                    map.next_value::<::serde_json::Value>()?;
31273                }
31274            }
31275        }
31276        if optional && nothing {
31277            return Ok(None);
31278        }
31279        let result = UserSecondaryEmailsArg {
31280            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
31281            secondary_emails: field_secondary_emails.ok_or_else(|| ::serde::de::Error::missing_field("secondary_emails"))?,
31282        };
31283        Ok(Some(result))
31284    }
31285
31286    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
31287        &self,
31288        s: &mut S::SerializeStruct,
31289    ) -> Result<(), S::Error> {
31290        use serde::ser::SerializeStruct;
31291        s.serialize_field("user", &self.user)?;
31292        s.serialize_field("secondary_emails", &self.secondary_emails)?;
31293        Ok(())
31294    }
31295}
31296
31297impl<'de> ::serde::de::Deserialize<'de> for UserSecondaryEmailsArg {
31298    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
31299        // struct deserializer
31300        use serde::de::{MapAccess, Visitor};
31301        struct StructVisitor;
31302        impl<'de> Visitor<'de> for StructVisitor {
31303            type Value = UserSecondaryEmailsArg;
31304            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
31305                f.write_str("a UserSecondaryEmailsArg struct")
31306            }
31307            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
31308                UserSecondaryEmailsArg::internal_deserialize(map)
31309            }
31310        }
31311        deserializer.deserialize_struct("UserSecondaryEmailsArg", USER_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
31312    }
31313}
31314
31315impl ::serde::ser::Serialize for UserSecondaryEmailsArg {
31316    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
31317        // struct serializer
31318        use serde::ser::SerializeStruct;
31319        let mut s = serializer.serialize_struct("UserSecondaryEmailsArg", 2)?;
31320        self.internal_serialize::<S>(&mut s)?;
31321        s.end()
31322    }
31323}
31324
31325#[derive(Debug, Clone, PartialEq, Eq)]
31326#[non_exhaustive] // structs may have more fields added in the future.
31327pub struct UserSecondaryEmailsResult {
31328    pub user: UserSelectorArg,
31329    pub results: Vec<AddSecondaryEmailResult>,
31330}
31331
31332impl UserSecondaryEmailsResult {
31333    pub fn new(user: UserSelectorArg, results: Vec<AddSecondaryEmailResult>) -> Self {
31334        UserSecondaryEmailsResult {
31335            user,
31336            results,
31337        }
31338    }
31339}
31340
31341const USER_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["user",
31342                                                       "results"];
31343impl UserSecondaryEmailsResult {
31344    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
31345        map: V,
31346    ) -> Result<UserSecondaryEmailsResult, V::Error> {
31347        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
31348    }
31349
31350    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
31351        mut map: V,
31352        optional: bool,
31353    ) -> Result<Option<UserSecondaryEmailsResult>, V::Error> {
31354        let mut field_user = None;
31355        let mut field_results = None;
31356        let mut nothing = true;
31357        while let Some(key) = map.next_key::<&str>()? {
31358            nothing = false;
31359            match key {
31360                "user" => {
31361                    if field_user.is_some() {
31362                        return Err(::serde::de::Error::duplicate_field("user"));
31363                    }
31364                    field_user = Some(map.next_value()?);
31365                }
31366                "results" => {
31367                    if field_results.is_some() {
31368                        return Err(::serde::de::Error::duplicate_field("results"));
31369                    }
31370                    field_results = Some(map.next_value()?);
31371                }
31372                _ => {
31373                    // unknown field allowed and ignored
31374                    map.next_value::<::serde_json::Value>()?;
31375                }
31376            }
31377        }
31378        if optional && nothing {
31379            return Ok(None);
31380        }
31381        let result = UserSecondaryEmailsResult {
31382            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
31383            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
31384        };
31385        Ok(Some(result))
31386    }
31387
31388    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
31389        &self,
31390        s: &mut S::SerializeStruct,
31391    ) -> Result<(), S::Error> {
31392        use serde::ser::SerializeStruct;
31393        s.serialize_field("user", &self.user)?;
31394        s.serialize_field("results", &self.results)?;
31395        Ok(())
31396    }
31397}
31398
31399impl<'de> ::serde::de::Deserialize<'de> for UserSecondaryEmailsResult {
31400    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
31401        // struct deserializer
31402        use serde::de::{MapAccess, Visitor};
31403        struct StructVisitor;
31404        impl<'de> Visitor<'de> for StructVisitor {
31405            type Value = UserSecondaryEmailsResult;
31406            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
31407                f.write_str("a UserSecondaryEmailsResult struct")
31408            }
31409            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
31410                UserSecondaryEmailsResult::internal_deserialize(map)
31411            }
31412        }
31413        deserializer.deserialize_struct("UserSecondaryEmailsResult", USER_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
31414    }
31415}
31416
31417impl ::serde::ser::Serialize for UserSecondaryEmailsResult {
31418    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
31419        // struct serializer
31420        use serde::ser::SerializeStruct;
31421        let mut s = serializer.serialize_struct("UserSecondaryEmailsResult", 2)?;
31422        self.internal_serialize::<S>(&mut s)?;
31423        s.end()
31424    }
31425}
31426
31427/// Argument for selecting a single user, either by team_member_id, external_id or email.
31428#[derive(Debug, Clone, PartialEq, Eq)]
31429pub enum UserSelectorArg {
31430    TeamMemberId(crate::types::team_common::TeamMemberId),
31431    ExternalId(crate::types::team_common::MemberExternalId),
31432    Email(crate::types::common::EmailAddress),
31433}
31434
31435impl<'de> ::serde::de::Deserialize<'de> for UserSelectorArg {
31436    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
31437        // union deserializer
31438        use serde::de::{self, MapAccess, Visitor};
31439        struct EnumVisitor;
31440        impl<'de> Visitor<'de> for EnumVisitor {
31441            type Value = UserSelectorArg;
31442            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
31443                f.write_str("a UserSelectorArg structure")
31444            }
31445            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
31446                let tag: &str = match map.next_key()? {
31447                    Some(".tag") => map.next_value()?,
31448                    _ => return Err(de::Error::missing_field(".tag"))
31449                };
31450                let value = match tag {
31451                    "team_member_id" => {
31452                        match map.next_key()? {
31453                            Some("team_member_id") => UserSelectorArg::TeamMemberId(map.next_value()?),
31454                            None => return Err(de::Error::missing_field("team_member_id")),
31455                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
31456                        }
31457                    }
31458                    "external_id" => {
31459                        match map.next_key()? {
31460                            Some("external_id") => UserSelectorArg::ExternalId(map.next_value()?),
31461                            None => return Err(de::Error::missing_field("external_id")),
31462                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
31463                        }
31464                    }
31465                    "email" => {
31466                        match map.next_key()? {
31467                            Some("email") => UserSelectorArg::Email(map.next_value()?),
31468                            None => return Err(de::Error::missing_field("email")),
31469                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
31470                        }
31471                    }
31472                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
31473                };
31474                crate::eat_json_fields(&mut map)?;
31475                Ok(value)
31476            }
31477        }
31478        const VARIANTS: &[&str] = &["team_member_id",
31479                                    "external_id",
31480                                    "email"];
31481        deserializer.deserialize_struct("UserSelectorArg", VARIANTS, EnumVisitor)
31482    }
31483}
31484
31485impl ::serde::ser::Serialize for UserSelectorArg {
31486    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
31487        // union serializer
31488        use serde::ser::SerializeStruct;
31489        match self {
31490            UserSelectorArg::TeamMemberId(x) => {
31491                // primitive
31492                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
31493                s.serialize_field(".tag", "team_member_id")?;
31494                s.serialize_field("team_member_id", x)?;
31495                s.end()
31496            }
31497            UserSelectorArg::ExternalId(x) => {
31498                // primitive
31499                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
31500                s.serialize_field(".tag", "external_id")?;
31501                s.serialize_field("external_id", x)?;
31502                s.end()
31503            }
31504            UserSelectorArg::Email(x) => {
31505                // primitive
31506                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
31507                s.serialize_field(".tag", "email")?;
31508                s.serialize_field("email", x)?;
31509                s.end()
31510            }
31511        }
31512    }
31513}
31514
31515/// Error that can be returned whenever a struct derived from [`UserSelectorArg`] is used.
31516#[derive(Debug, Clone, PartialEq, Eq)]
31517pub enum UserSelectorError {
31518    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
31519    /// this team.
31520    UserNotFound,
31521}
31522
31523impl<'de> ::serde::de::Deserialize<'de> for UserSelectorError {
31524    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
31525        // union deserializer
31526        use serde::de::{self, MapAccess, Visitor};
31527        struct EnumVisitor;
31528        impl<'de> Visitor<'de> for EnumVisitor {
31529            type Value = UserSelectorError;
31530            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
31531                f.write_str("a UserSelectorError structure")
31532            }
31533            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
31534                let tag: &str = match map.next_key()? {
31535                    Some(".tag") => map.next_value()?,
31536                    _ => return Err(de::Error::missing_field(".tag"))
31537                };
31538                let value = match tag {
31539                    "user_not_found" => UserSelectorError::UserNotFound,
31540                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
31541                };
31542                crate::eat_json_fields(&mut map)?;
31543                Ok(value)
31544            }
31545        }
31546        const VARIANTS: &[&str] = &["user_not_found"];
31547        deserializer.deserialize_struct("UserSelectorError", VARIANTS, EnumVisitor)
31548    }
31549}
31550
31551impl ::serde::ser::Serialize for UserSelectorError {
31552    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
31553        // union serializer
31554        use serde::ser::SerializeStruct;
31555        match self {
31556            UserSelectorError::UserNotFound => {
31557                // unit
31558                let mut s = serializer.serialize_struct("UserSelectorError", 1)?;
31559                s.serialize_field(".tag", "user_not_found")?;
31560                s.end()
31561            }
31562        }
31563    }
31564}
31565
31566impl ::std::error::Error for UserSelectorError {
31567}
31568
31569impl ::std::fmt::Display for UserSelectorError {
31570    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
31571        match self {
31572            UserSelectorError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
31573        }
31574    }
31575}
31576
31577/// Argument for selecting a list of users, either by team_member_ids, external_ids or emails.
31578#[derive(Debug, Clone, PartialEq, Eq)]
31579pub enum UsersSelectorArg {
31580    /// List of member IDs.
31581    TeamMemberIds(Vec<crate::types::team_common::TeamMemberId>),
31582    /// List of external user IDs.
31583    ExternalIds(Vec<crate::types::team_common::MemberExternalId>),
31584    /// List of email addresses.
31585    Emails(Vec<crate::types::common::EmailAddress>),
31586}
31587
31588impl<'de> ::serde::de::Deserialize<'de> for UsersSelectorArg {
31589    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
31590        // union deserializer
31591        use serde::de::{self, MapAccess, Visitor};
31592        struct EnumVisitor;
31593        impl<'de> Visitor<'de> for EnumVisitor {
31594            type Value = UsersSelectorArg;
31595            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
31596                f.write_str("a UsersSelectorArg structure")
31597            }
31598            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
31599                let tag: &str = match map.next_key()? {
31600                    Some(".tag") => map.next_value()?,
31601                    _ => return Err(de::Error::missing_field(".tag"))
31602                };
31603                let value = match tag {
31604                    "team_member_ids" => {
31605                        match map.next_key()? {
31606                            Some("team_member_ids") => UsersSelectorArg::TeamMemberIds(map.next_value()?),
31607                            None => return Err(de::Error::missing_field("team_member_ids")),
31608                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
31609                        }
31610                    }
31611                    "external_ids" => {
31612                        match map.next_key()? {
31613                            Some("external_ids") => UsersSelectorArg::ExternalIds(map.next_value()?),
31614                            None => return Err(de::Error::missing_field("external_ids")),
31615                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
31616                        }
31617                    }
31618                    "emails" => {
31619                        match map.next_key()? {
31620                            Some("emails") => UsersSelectorArg::Emails(map.next_value()?),
31621                            None => return Err(de::Error::missing_field("emails")),
31622                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
31623                        }
31624                    }
31625                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
31626                };
31627                crate::eat_json_fields(&mut map)?;
31628                Ok(value)
31629            }
31630        }
31631        const VARIANTS: &[&str] = &["team_member_ids",
31632                                    "external_ids",
31633                                    "emails"];
31634        deserializer.deserialize_struct("UsersSelectorArg", VARIANTS, EnumVisitor)
31635    }
31636}
31637
31638impl ::serde::ser::Serialize for UsersSelectorArg {
31639    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
31640        // union serializer
31641        use serde::ser::SerializeStruct;
31642        match self {
31643            UsersSelectorArg::TeamMemberIds(x) => {
31644                // primitive
31645                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
31646                s.serialize_field(".tag", "team_member_ids")?;
31647                s.serialize_field("team_member_ids", x)?;
31648                s.end()
31649            }
31650            UsersSelectorArg::ExternalIds(x) => {
31651                // primitive
31652                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
31653                s.serialize_field(".tag", "external_ids")?;
31654                s.serialize_field("external_ids", x)?;
31655                s.end()
31656            }
31657            UsersSelectorArg::Emails(x) => {
31658                // primitive
31659                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
31660                s.serialize_field(".tag", "emails")?;
31661                s.serialize_field("emails", x)?;
31662                s.end()
31663            }
31664        }
31665    }
31666}
31667