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/// Error returned when getting member custom quota.
1196#[derive(Debug, Clone, PartialEq, Eq)]
1197#[non_exhaustive] // variants may be added in the future
1198pub enum CustomQuotaError {
1199    /// A maximum of 1000 users can be set for a single call.
1200    TooManyUsers,
1201    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1202    /// typically indicates that this SDK version is out of date.
1203    Other,
1204}
1205
1206impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaError {
1207    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1208        // union deserializer
1209        use serde::de::{self, MapAccess, Visitor};
1210        struct EnumVisitor;
1211        impl<'de> Visitor<'de> for EnumVisitor {
1212            type Value = CustomQuotaError;
1213            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1214                f.write_str("a CustomQuotaError structure")
1215            }
1216            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1217                let tag: &str = match map.next_key()? {
1218                    Some(".tag") => map.next_value()?,
1219                    _ => return Err(de::Error::missing_field(".tag"))
1220                };
1221                let value = match tag {
1222                    "too_many_users" => CustomQuotaError::TooManyUsers,
1223                    _ => CustomQuotaError::Other,
1224                };
1225                crate::eat_json_fields(&mut map)?;
1226                Ok(value)
1227            }
1228        }
1229        const VARIANTS: &[&str] = &["too_many_users",
1230                                    "other"];
1231        deserializer.deserialize_struct("CustomQuotaError", VARIANTS, EnumVisitor)
1232    }
1233}
1234
1235impl ::serde::ser::Serialize for CustomQuotaError {
1236    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1237        // union serializer
1238        use serde::ser::SerializeStruct;
1239        match self {
1240            CustomQuotaError::TooManyUsers => {
1241                // unit
1242                let mut s = serializer.serialize_struct("CustomQuotaError", 1)?;
1243                s.serialize_field(".tag", "too_many_users")?;
1244                s.end()
1245            }
1246            CustomQuotaError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1247        }
1248    }
1249}
1250
1251impl ::std::error::Error for CustomQuotaError {
1252}
1253
1254impl ::std::fmt::Display for CustomQuotaError {
1255    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1256        match self {
1257            CustomQuotaError::TooManyUsers => f.write_str("A maximum of 1000 users can be set for a single call."),
1258            _ => write!(f, "{:?}", *self),
1259        }
1260    }
1261}
1262
1263/// User custom quota.
1264#[derive(Debug, Clone, PartialEq, Eq)]
1265#[non_exhaustive] // variants may be added in the future
1266pub enum CustomQuotaResult {
1267    /// User's custom quota.
1268    Success(UserCustomQuotaResult),
1269    /// Invalid user (not in team).
1270    InvalidUser(UserSelectorArg),
1271    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1272    /// typically indicates that this SDK version is out of date.
1273    Other,
1274}
1275
1276impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaResult {
1277    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1278        // union deserializer
1279        use serde::de::{self, MapAccess, Visitor};
1280        struct EnumVisitor;
1281        impl<'de> Visitor<'de> for EnumVisitor {
1282            type Value = CustomQuotaResult;
1283            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1284                f.write_str("a CustomQuotaResult structure")
1285            }
1286            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1287                let tag: &str = match map.next_key()? {
1288                    Some(".tag") => map.next_value()?,
1289                    _ => return Err(de::Error::missing_field(".tag"))
1290                };
1291                let value = match tag {
1292                    "success" => CustomQuotaResult::Success(UserCustomQuotaResult::internal_deserialize(&mut map)?),
1293                    "invalid_user" => {
1294                        match map.next_key()? {
1295                            Some("invalid_user") => CustomQuotaResult::InvalidUser(map.next_value()?),
1296                            None => return Err(de::Error::missing_field("invalid_user")),
1297                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1298                        }
1299                    }
1300                    _ => CustomQuotaResult::Other,
1301                };
1302                crate::eat_json_fields(&mut map)?;
1303                Ok(value)
1304            }
1305        }
1306        const VARIANTS: &[&str] = &["success",
1307                                    "invalid_user",
1308                                    "other"];
1309        deserializer.deserialize_struct("CustomQuotaResult", VARIANTS, EnumVisitor)
1310    }
1311}
1312
1313impl ::serde::ser::Serialize for CustomQuotaResult {
1314    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1315        // union serializer
1316        use serde::ser::SerializeStruct;
1317        match self {
1318            CustomQuotaResult::Success(x) => {
1319                // struct
1320                let mut s = serializer.serialize_struct("CustomQuotaResult", 3)?;
1321                s.serialize_field(".tag", "success")?;
1322                x.internal_serialize::<S>(&mut s)?;
1323                s.end()
1324            }
1325            CustomQuotaResult::InvalidUser(x) => {
1326                // union or polymporphic struct
1327                let mut s = serializer.serialize_struct("CustomQuotaResult", 2)?;
1328                s.serialize_field(".tag", "invalid_user")?;
1329                s.serialize_field("invalid_user", x)?;
1330                s.end()
1331            }
1332            CustomQuotaResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1333        }
1334    }
1335}
1336
1337#[derive(Debug, Clone, PartialEq, Eq)]
1338#[non_exhaustive] // structs may have more fields added in the future.
1339pub struct CustomQuotaUsersArg {
1340    /// List of users.
1341    pub users: Vec<UserSelectorArg>,
1342}
1343
1344impl CustomQuotaUsersArg {
1345    pub fn new(users: Vec<UserSelectorArg>) -> Self {
1346        CustomQuotaUsersArg {
1347            users,
1348        }
1349    }
1350}
1351
1352const CUSTOM_QUOTA_USERS_ARG_FIELDS: &[&str] = &["users"];
1353impl CustomQuotaUsersArg {
1354    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1355        map: V,
1356    ) -> Result<CustomQuotaUsersArg, V::Error> {
1357        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1358    }
1359
1360    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1361        mut map: V,
1362        optional: bool,
1363    ) -> Result<Option<CustomQuotaUsersArg>, V::Error> {
1364        let mut field_users = None;
1365        let mut nothing = true;
1366        while let Some(key) = map.next_key::<&str>()? {
1367            nothing = false;
1368            match key {
1369                "users" => {
1370                    if field_users.is_some() {
1371                        return Err(::serde::de::Error::duplicate_field("users"));
1372                    }
1373                    field_users = Some(map.next_value()?);
1374                }
1375                _ => {
1376                    // unknown field allowed and ignored
1377                    map.next_value::<::serde_json::Value>()?;
1378                }
1379            }
1380        }
1381        if optional && nothing {
1382            return Ok(None);
1383        }
1384        let result = CustomQuotaUsersArg {
1385            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
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("users", &self.users)?;
1396        Ok(())
1397    }
1398}
1399
1400impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaUsersArg {
1401    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1402        // struct deserializer
1403        use serde::de::{MapAccess, Visitor};
1404        struct StructVisitor;
1405        impl<'de> Visitor<'de> for StructVisitor {
1406            type Value = CustomQuotaUsersArg;
1407            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1408                f.write_str("a CustomQuotaUsersArg struct")
1409            }
1410            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1411                CustomQuotaUsersArg::internal_deserialize(map)
1412            }
1413        }
1414        deserializer.deserialize_struct("CustomQuotaUsersArg", CUSTOM_QUOTA_USERS_ARG_FIELDS, StructVisitor)
1415    }
1416}
1417
1418impl ::serde::ser::Serialize for CustomQuotaUsersArg {
1419    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1420        // struct serializer
1421        use serde::ser::SerializeStruct;
1422        let mut s = serializer.serialize_struct("CustomQuotaUsersArg", 1)?;
1423        self.internal_serialize::<S>(&mut s)?;
1424        s.end()
1425    }
1426}
1427
1428/// Input arguments that can be provided for most reports.
1429#[derive(Debug, Clone, PartialEq, Eq, Default)]
1430#[non_exhaustive] // structs may have more fields added in the future.
1431pub struct DateRange {
1432    /// Optional starting date (inclusive). If start_date is None or too long ago, this field will
1433    /// be set to 6 months ago.
1434    pub start_date: Option<crate::types::common::Date>,
1435    /// Optional ending date (exclusive).
1436    pub end_date: Option<crate::types::common::Date>,
1437}
1438
1439impl DateRange {
1440    pub fn with_start_date(mut self, value: crate::types::common::Date) -> Self {
1441        self.start_date = Some(value);
1442        self
1443    }
1444
1445    pub fn with_end_date(mut self, value: crate::types::common::Date) -> Self {
1446        self.end_date = Some(value);
1447        self
1448    }
1449}
1450
1451const DATE_RANGE_FIELDS: &[&str] = &["start_date",
1452                                     "end_date"];
1453impl DateRange {
1454    // no _opt deserializer
1455    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1456        mut map: V,
1457    ) -> Result<DateRange, V::Error> {
1458        let mut field_start_date = None;
1459        let mut field_end_date = None;
1460        while let Some(key) = map.next_key::<&str>()? {
1461            match key {
1462                "start_date" => {
1463                    if field_start_date.is_some() {
1464                        return Err(::serde::de::Error::duplicate_field("start_date"));
1465                    }
1466                    field_start_date = Some(map.next_value()?);
1467                }
1468                "end_date" => {
1469                    if field_end_date.is_some() {
1470                        return Err(::serde::de::Error::duplicate_field("end_date"));
1471                    }
1472                    field_end_date = Some(map.next_value()?);
1473                }
1474                _ => {
1475                    // unknown field allowed and ignored
1476                    map.next_value::<::serde_json::Value>()?;
1477                }
1478            }
1479        }
1480        let result = DateRange {
1481            start_date: field_start_date.and_then(Option::flatten),
1482            end_date: field_end_date.and_then(Option::flatten),
1483        };
1484        Ok(result)
1485    }
1486
1487    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1488        &self,
1489        s: &mut S::SerializeStruct,
1490    ) -> Result<(), S::Error> {
1491        use serde::ser::SerializeStruct;
1492        if let Some(val) = &self.start_date {
1493            s.serialize_field("start_date", val)?;
1494        }
1495        if let Some(val) = &self.end_date {
1496            s.serialize_field("end_date", val)?;
1497        }
1498        Ok(())
1499    }
1500}
1501
1502impl<'de> ::serde::de::Deserialize<'de> for DateRange {
1503    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1504        // struct deserializer
1505        use serde::de::{MapAccess, Visitor};
1506        struct StructVisitor;
1507        impl<'de> Visitor<'de> for StructVisitor {
1508            type Value = DateRange;
1509            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1510                f.write_str("a DateRange struct")
1511            }
1512            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1513                DateRange::internal_deserialize(map)
1514            }
1515        }
1516        deserializer.deserialize_struct("DateRange", DATE_RANGE_FIELDS, StructVisitor)
1517    }
1518}
1519
1520impl ::serde::ser::Serialize for DateRange {
1521    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1522        // struct serializer
1523        use serde::ser::SerializeStruct;
1524        let mut s = serializer.serialize_struct("DateRange", 2)?;
1525        self.internal_serialize::<S>(&mut s)?;
1526        s.end()
1527    }
1528}
1529
1530/// Errors that can originate from problems in input arguments to reports.
1531#[derive(Debug, Clone, PartialEq, Eq)]
1532#[non_exhaustive] // variants may be added in the future
1533pub enum DateRangeError {
1534    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1535    /// typically indicates that this SDK version is out of date.
1536    Other,
1537}
1538
1539impl<'de> ::serde::de::Deserialize<'de> for DateRangeError {
1540    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1541        // union deserializer
1542        use serde::de::{self, MapAccess, Visitor};
1543        struct EnumVisitor;
1544        impl<'de> Visitor<'de> for EnumVisitor {
1545            type Value = DateRangeError;
1546            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1547                f.write_str("a DateRangeError structure")
1548            }
1549            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1550                let tag: &str = match map.next_key()? {
1551                    Some(".tag") => map.next_value()?,
1552                    _ => return Err(de::Error::missing_field(".tag"))
1553                };
1554                // open enum with no defined variants
1555                let _ = tag;
1556                crate::eat_json_fields(&mut map)?;
1557                Ok(DateRangeError::Other)
1558            }
1559        }
1560        const VARIANTS: &[&str] = &["other"];
1561        deserializer.deserialize_struct("DateRangeError", VARIANTS, EnumVisitor)
1562    }
1563}
1564
1565impl ::serde::ser::Serialize for DateRangeError {
1566    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1567        // union serializer
1568        #![allow(unused_variables)]
1569        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
1570    }
1571}
1572
1573impl ::std::error::Error for DateRangeError {
1574}
1575
1576impl ::std::fmt::Display for DateRangeError {
1577    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1578        write!(f, "{:?}", *self)
1579    }
1580}
1581
1582/// Result of trying to delete a secondary email address. 'success' is the only value indicating
1583/// that a secondary email was successfully deleted. The other values explain the type of error that
1584/// occurred, and include the email for which the error occurred.
1585#[derive(Debug, Clone, PartialEq, Eq)]
1586#[non_exhaustive] // variants may be added in the future
1587pub enum DeleteSecondaryEmailResult {
1588    /// The secondary email was successfully deleted.
1589    Success(crate::types::common::EmailAddress),
1590    /// The email address was not found for the user.
1591    NotFound(crate::types::common::EmailAddress),
1592    /// The email address is the primary email address of the user, and cannot be removed.
1593    CannotRemovePrimary(crate::types::common::EmailAddress),
1594    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1595    /// typically indicates that this SDK version is out of date.
1596    Other,
1597}
1598
1599impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailResult {
1600    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1601        // union deserializer
1602        use serde::de::{self, MapAccess, Visitor};
1603        struct EnumVisitor;
1604        impl<'de> Visitor<'de> for EnumVisitor {
1605            type Value = DeleteSecondaryEmailResult;
1606            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1607                f.write_str("a DeleteSecondaryEmailResult structure")
1608            }
1609            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1610                let tag: &str = match map.next_key()? {
1611                    Some(".tag") => map.next_value()?,
1612                    _ => return Err(de::Error::missing_field(".tag"))
1613                };
1614                let value = match tag {
1615                    "success" => {
1616                        match map.next_key()? {
1617                            Some("success") => DeleteSecondaryEmailResult::Success(map.next_value()?),
1618                            None => return Err(de::Error::missing_field("success")),
1619                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1620                        }
1621                    }
1622                    "not_found" => {
1623                        match map.next_key()? {
1624                            Some("not_found") => DeleteSecondaryEmailResult::NotFound(map.next_value()?),
1625                            None => return Err(de::Error::missing_field("not_found")),
1626                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1627                        }
1628                    }
1629                    "cannot_remove_primary" => {
1630                        match map.next_key()? {
1631                            Some("cannot_remove_primary") => DeleteSecondaryEmailResult::CannotRemovePrimary(map.next_value()?),
1632                            None => return Err(de::Error::missing_field("cannot_remove_primary")),
1633                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1634                        }
1635                    }
1636                    _ => DeleteSecondaryEmailResult::Other,
1637                };
1638                crate::eat_json_fields(&mut map)?;
1639                Ok(value)
1640            }
1641        }
1642        const VARIANTS: &[&str] = &["success",
1643                                    "not_found",
1644                                    "cannot_remove_primary",
1645                                    "other"];
1646        deserializer.deserialize_struct("DeleteSecondaryEmailResult", VARIANTS, EnumVisitor)
1647    }
1648}
1649
1650impl ::serde::ser::Serialize for DeleteSecondaryEmailResult {
1651    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1652        // union serializer
1653        use serde::ser::SerializeStruct;
1654        match self {
1655            DeleteSecondaryEmailResult::Success(x) => {
1656                // primitive
1657                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1658                s.serialize_field(".tag", "success")?;
1659                s.serialize_field("success", x)?;
1660                s.end()
1661            }
1662            DeleteSecondaryEmailResult::NotFound(x) => {
1663                // primitive
1664                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1665                s.serialize_field(".tag", "not_found")?;
1666                s.serialize_field("not_found", x)?;
1667                s.end()
1668            }
1669            DeleteSecondaryEmailResult::CannotRemovePrimary(x) => {
1670                // primitive
1671                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1672                s.serialize_field(".tag", "cannot_remove_primary")?;
1673                s.serialize_field("cannot_remove_primary", x)?;
1674                s.end()
1675            }
1676            DeleteSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1677        }
1678    }
1679}
1680
1681#[derive(Debug, Clone, PartialEq, Eq)]
1682#[non_exhaustive] // structs may have more fields added in the future.
1683pub struct DeleteSecondaryEmailsArg {
1684    /// List of users and their secondary emails to delete.
1685    pub emails_to_delete: Vec<UserSecondaryEmailsArg>,
1686}
1687
1688impl DeleteSecondaryEmailsArg {
1689    pub fn new(emails_to_delete: Vec<UserSecondaryEmailsArg>) -> Self {
1690        DeleteSecondaryEmailsArg {
1691            emails_to_delete,
1692        }
1693    }
1694}
1695
1696const DELETE_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["emails_to_delete"];
1697impl DeleteSecondaryEmailsArg {
1698    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1699        map: V,
1700    ) -> Result<DeleteSecondaryEmailsArg, V::Error> {
1701        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1702    }
1703
1704    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1705        mut map: V,
1706        optional: bool,
1707    ) -> Result<Option<DeleteSecondaryEmailsArg>, V::Error> {
1708        let mut field_emails_to_delete = None;
1709        let mut nothing = true;
1710        while let Some(key) = map.next_key::<&str>()? {
1711            nothing = false;
1712            match key {
1713                "emails_to_delete" => {
1714                    if field_emails_to_delete.is_some() {
1715                        return Err(::serde::de::Error::duplicate_field("emails_to_delete"));
1716                    }
1717                    field_emails_to_delete = Some(map.next_value()?);
1718                }
1719                _ => {
1720                    // unknown field allowed and ignored
1721                    map.next_value::<::serde_json::Value>()?;
1722                }
1723            }
1724        }
1725        if optional && nothing {
1726            return Ok(None);
1727        }
1728        let result = DeleteSecondaryEmailsArg {
1729            emails_to_delete: field_emails_to_delete.ok_or_else(|| ::serde::de::Error::missing_field("emails_to_delete"))?,
1730        };
1731        Ok(Some(result))
1732    }
1733
1734    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1735        &self,
1736        s: &mut S::SerializeStruct,
1737    ) -> Result<(), S::Error> {
1738        use serde::ser::SerializeStruct;
1739        s.serialize_field("emails_to_delete", &self.emails_to_delete)?;
1740        Ok(())
1741    }
1742}
1743
1744impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailsArg {
1745    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1746        // struct deserializer
1747        use serde::de::{MapAccess, Visitor};
1748        struct StructVisitor;
1749        impl<'de> Visitor<'de> for StructVisitor {
1750            type Value = DeleteSecondaryEmailsArg;
1751            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1752                f.write_str("a DeleteSecondaryEmailsArg struct")
1753            }
1754            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1755                DeleteSecondaryEmailsArg::internal_deserialize(map)
1756            }
1757        }
1758        deserializer.deserialize_struct("DeleteSecondaryEmailsArg", DELETE_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
1759    }
1760}
1761
1762impl ::serde::ser::Serialize for DeleteSecondaryEmailsArg {
1763    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1764        // struct serializer
1765        use serde::ser::SerializeStruct;
1766        let mut s = serializer.serialize_struct("DeleteSecondaryEmailsArg", 1)?;
1767        self.internal_serialize::<S>(&mut s)?;
1768        s.end()
1769    }
1770}
1771
1772#[derive(Debug, Clone, PartialEq, Eq)]
1773#[non_exhaustive] // structs may have more fields added in the future.
1774pub struct DeleteSecondaryEmailsResult {
1775    pub results: Vec<UserDeleteResult>,
1776}
1777
1778impl DeleteSecondaryEmailsResult {
1779    pub fn new(results: Vec<UserDeleteResult>) -> Self {
1780        DeleteSecondaryEmailsResult {
1781            results,
1782        }
1783    }
1784}
1785
1786const DELETE_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["results"];
1787impl DeleteSecondaryEmailsResult {
1788    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1789        map: V,
1790    ) -> Result<DeleteSecondaryEmailsResult, V::Error> {
1791        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1792    }
1793
1794    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1795        mut map: V,
1796        optional: bool,
1797    ) -> Result<Option<DeleteSecondaryEmailsResult>, V::Error> {
1798        let mut field_results = None;
1799        let mut nothing = true;
1800        while let Some(key) = map.next_key::<&str>()? {
1801            nothing = false;
1802            match key {
1803                "results" => {
1804                    if field_results.is_some() {
1805                        return Err(::serde::de::Error::duplicate_field("results"));
1806                    }
1807                    field_results = Some(map.next_value()?);
1808                }
1809                _ => {
1810                    // unknown field allowed and ignored
1811                    map.next_value::<::serde_json::Value>()?;
1812                }
1813            }
1814        }
1815        if optional && nothing {
1816            return Ok(None);
1817        }
1818        let result = DeleteSecondaryEmailsResult {
1819            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
1820        };
1821        Ok(Some(result))
1822    }
1823
1824    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1825        &self,
1826        s: &mut S::SerializeStruct,
1827    ) -> Result<(), S::Error> {
1828        use serde::ser::SerializeStruct;
1829        s.serialize_field("results", &self.results)?;
1830        Ok(())
1831    }
1832}
1833
1834impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailsResult {
1835    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1836        // struct deserializer
1837        use serde::de::{MapAccess, Visitor};
1838        struct StructVisitor;
1839        impl<'de> Visitor<'de> for StructVisitor {
1840            type Value = DeleteSecondaryEmailsResult;
1841            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1842                f.write_str("a DeleteSecondaryEmailsResult struct")
1843            }
1844            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1845                DeleteSecondaryEmailsResult::internal_deserialize(map)
1846            }
1847        }
1848        deserializer.deserialize_struct("DeleteSecondaryEmailsResult", DELETE_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
1849    }
1850}
1851
1852impl ::serde::ser::Serialize for DeleteSecondaryEmailsResult {
1853    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1854        // struct serializer
1855        use serde::ser::SerializeStruct;
1856        let mut s = serializer.serialize_struct("DeleteSecondaryEmailsResult", 1)?;
1857        self.internal_serialize::<S>(&mut s)?;
1858        s.end()
1859    }
1860}
1861
1862/// Information about linked Dropbox desktop client sessions.
1863#[derive(Debug, Clone, PartialEq, Eq)]
1864#[non_exhaustive] // structs may have more fields added in the future.
1865pub struct DesktopClientSession {
1866    /// The session id.
1867    pub session_id: String,
1868    /// Name of the hosting desktop.
1869    pub host_name: String,
1870    /// The Dropbox desktop client type.
1871    pub client_type: DesktopPlatform,
1872    /// The Dropbox client version.
1873    pub client_version: String,
1874    /// Information on the hosting platform.
1875    pub platform: String,
1876    /// Whether it's possible to delete all of the account files upon unlinking.
1877    pub is_delete_on_unlink_supported: bool,
1878    /// The IP address of the last activity from this session.
1879    pub ip_address: Option<String>,
1880    /// The country from which the last activity from this session was made.
1881    pub country: Option<String>,
1882    /// The time this session was created.
1883    pub created: Option<crate::types::common::DropboxTimestamp>,
1884    /// The time of the last activity from this session.
1885    pub updated: Option<crate::types::common::DropboxTimestamp>,
1886}
1887
1888impl DesktopClientSession {
1889    pub fn new(
1890        session_id: String,
1891        host_name: String,
1892        client_type: DesktopPlatform,
1893        client_version: String,
1894        platform: String,
1895        is_delete_on_unlink_supported: bool,
1896    ) -> Self {
1897        DesktopClientSession {
1898            session_id,
1899            host_name,
1900            client_type,
1901            client_version,
1902            platform,
1903            is_delete_on_unlink_supported,
1904            ip_address: None,
1905            country: None,
1906            created: None,
1907            updated: None,
1908        }
1909    }
1910
1911    pub fn with_ip_address(mut self, value: String) -> Self {
1912        self.ip_address = Some(value);
1913        self
1914    }
1915
1916    pub fn with_country(mut self, value: String) -> Self {
1917        self.country = Some(value);
1918        self
1919    }
1920
1921    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
1922        self.created = Some(value);
1923        self
1924    }
1925
1926    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
1927        self.updated = Some(value);
1928        self
1929    }
1930}
1931
1932const DESKTOP_CLIENT_SESSION_FIELDS: &[&str] = &["session_id",
1933                                                 "host_name",
1934                                                 "client_type",
1935                                                 "client_version",
1936                                                 "platform",
1937                                                 "is_delete_on_unlink_supported",
1938                                                 "ip_address",
1939                                                 "country",
1940                                                 "created",
1941                                                 "updated"];
1942impl DesktopClientSession {
1943    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1944        map: V,
1945    ) -> Result<DesktopClientSession, V::Error> {
1946        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1947    }
1948
1949    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1950        mut map: V,
1951        optional: bool,
1952    ) -> Result<Option<DesktopClientSession>, V::Error> {
1953        let mut field_session_id = None;
1954        let mut field_host_name = None;
1955        let mut field_client_type = None;
1956        let mut field_client_version = None;
1957        let mut field_platform = None;
1958        let mut field_is_delete_on_unlink_supported = None;
1959        let mut field_ip_address = None;
1960        let mut field_country = None;
1961        let mut field_created = None;
1962        let mut field_updated = None;
1963        let mut nothing = true;
1964        while let Some(key) = map.next_key::<&str>()? {
1965            nothing = false;
1966            match key {
1967                "session_id" => {
1968                    if field_session_id.is_some() {
1969                        return Err(::serde::de::Error::duplicate_field("session_id"));
1970                    }
1971                    field_session_id = Some(map.next_value()?);
1972                }
1973                "host_name" => {
1974                    if field_host_name.is_some() {
1975                        return Err(::serde::de::Error::duplicate_field("host_name"));
1976                    }
1977                    field_host_name = Some(map.next_value()?);
1978                }
1979                "client_type" => {
1980                    if field_client_type.is_some() {
1981                        return Err(::serde::de::Error::duplicate_field("client_type"));
1982                    }
1983                    field_client_type = Some(map.next_value()?);
1984                }
1985                "client_version" => {
1986                    if field_client_version.is_some() {
1987                        return Err(::serde::de::Error::duplicate_field("client_version"));
1988                    }
1989                    field_client_version = Some(map.next_value()?);
1990                }
1991                "platform" => {
1992                    if field_platform.is_some() {
1993                        return Err(::serde::de::Error::duplicate_field("platform"));
1994                    }
1995                    field_platform = Some(map.next_value()?);
1996                }
1997                "is_delete_on_unlink_supported" => {
1998                    if field_is_delete_on_unlink_supported.is_some() {
1999                        return Err(::serde::de::Error::duplicate_field("is_delete_on_unlink_supported"));
2000                    }
2001                    field_is_delete_on_unlink_supported = Some(map.next_value()?);
2002                }
2003                "ip_address" => {
2004                    if field_ip_address.is_some() {
2005                        return Err(::serde::de::Error::duplicate_field("ip_address"));
2006                    }
2007                    field_ip_address = Some(map.next_value()?);
2008                }
2009                "country" => {
2010                    if field_country.is_some() {
2011                        return Err(::serde::de::Error::duplicate_field("country"));
2012                    }
2013                    field_country = Some(map.next_value()?);
2014                }
2015                "created" => {
2016                    if field_created.is_some() {
2017                        return Err(::serde::de::Error::duplicate_field("created"));
2018                    }
2019                    field_created = Some(map.next_value()?);
2020                }
2021                "updated" => {
2022                    if field_updated.is_some() {
2023                        return Err(::serde::de::Error::duplicate_field("updated"));
2024                    }
2025                    field_updated = Some(map.next_value()?);
2026                }
2027                _ => {
2028                    // unknown field allowed and ignored
2029                    map.next_value::<::serde_json::Value>()?;
2030                }
2031            }
2032        }
2033        if optional && nothing {
2034            return Ok(None);
2035        }
2036        let result = DesktopClientSession {
2037            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2038            host_name: field_host_name.ok_or_else(|| ::serde::de::Error::missing_field("host_name"))?,
2039            client_type: field_client_type.ok_or_else(|| ::serde::de::Error::missing_field("client_type"))?,
2040            client_version: field_client_version.ok_or_else(|| ::serde::de::Error::missing_field("client_version"))?,
2041            platform: field_platform.ok_or_else(|| ::serde::de::Error::missing_field("platform"))?,
2042            is_delete_on_unlink_supported: field_is_delete_on_unlink_supported.ok_or_else(|| ::serde::de::Error::missing_field("is_delete_on_unlink_supported"))?,
2043            ip_address: field_ip_address.and_then(Option::flatten),
2044            country: field_country.and_then(Option::flatten),
2045            created: field_created.and_then(Option::flatten),
2046            updated: field_updated.and_then(Option::flatten),
2047        };
2048        Ok(Some(result))
2049    }
2050
2051    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2052        &self,
2053        s: &mut S::SerializeStruct,
2054    ) -> Result<(), S::Error> {
2055        use serde::ser::SerializeStruct;
2056        s.serialize_field("session_id", &self.session_id)?;
2057        s.serialize_field("host_name", &self.host_name)?;
2058        s.serialize_field("client_type", &self.client_type)?;
2059        s.serialize_field("client_version", &self.client_version)?;
2060        s.serialize_field("platform", &self.platform)?;
2061        s.serialize_field("is_delete_on_unlink_supported", &self.is_delete_on_unlink_supported)?;
2062        if let Some(val) = &self.ip_address {
2063            s.serialize_field("ip_address", val)?;
2064        }
2065        if let Some(val) = &self.country {
2066            s.serialize_field("country", val)?;
2067        }
2068        if let Some(val) = &self.created {
2069            s.serialize_field("created", val)?;
2070        }
2071        if let Some(val) = &self.updated {
2072            s.serialize_field("updated", val)?;
2073        }
2074        Ok(())
2075    }
2076}
2077
2078impl<'de> ::serde::de::Deserialize<'de> for DesktopClientSession {
2079    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2080        // struct deserializer
2081        use serde::de::{MapAccess, Visitor};
2082        struct StructVisitor;
2083        impl<'de> Visitor<'de> for StructVisitor {
2084            type Value = DesktopClientSession;
2085            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2086                f.write_str("a DesktopClientSession struct")
2087            }
2088            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2089                DesktopClientSession::internal_deserialize(map)
2090            }
2091        }
2092        deserializer.deserialize_struct("DesktopClientSession", DESKTOP_CLIENT_SESSION_FIELDS, StructVisitor)
2093    }
2094}
2095
2096impl ::serde::ser::Serialize for DesktopClientSession {
2097    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2098        // struct serializer
2099        use serde::ser::SerializeStruct;
2100        let mut s = serializer.serialize_struct("DesktopClientSession", 10)?;
2101        self.internal_serialize::<S>(&mut s)?;
2102        s.end()
2103    }
2104}
2105
2106// struct extends DeviceSession
2107impl From<DesktopClientSession> for DeviceSession {
2108    fn from(subtype: DesktopClientSession) -> Self {
2109        Self {
2110            session_id: subtype.session_id,
2111            ip_address: subtype.ip_address,
2112            country: subtype.country,
2113            created: subtype.created,
2114            updated: subtype.updated,
2115        }
2116    }
2117}
2118#[derive(Debug, Clone, PartialEq, Eq)]
2119#[non_exhaustive] // variants may be added in the future
2120pub enum DesktopPlatform {
2121    /// Official Windows Dropbox desktop client.
2122    Windows,
2123    /// Official Mac Dropbox desktop client.
2124    Mac,
2125    /// Official Linux Dropbox desktop client.
2126    Linux,
2127    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2128    /// typically indicates that this SDK version is out of date.
2129    Other,
2130}
2131
2132impl<'de> ::serde::de::Deserialize<'de> for DesktopPlatform {
2133    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2134        // union deserializer
2135        use serde::de::{self, MapAccess, Visitor};
2136        struct EnumVisitor;
2137        impl<'de> Visitor<'de> for EnumVisitor {
2138            type Value = DesktopPlatform;
2139            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2140                f.write_str("a DesktopPlatform structure")
2141            }
2142            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2143                let tag: &str = match map.next_key()? {
2144                    Some(".tag") => map.next_value()?,
2145                    _ => return Err(de::Error::missing_field(".tag"))
2146                };
2147                let value = match tag {
2148                    "windows" => DesktopPlatform::Windows,
2149                    "mac" => DesktopPlatform::Mac,
2150                    "linux" => DesktopPlatform::Linux,
2151                    _ => DesktopPlatform::Other,
2152                };
2153                crate::eat_json_fields(&mut map)?;
2154                Ok(value)
2155            }
2156        }
2157        const VARIANTS: &[&str] = &["windows",
2158                                    "mac",
2159                                    "linux",
2160                                    "other"];
2161        deserializer.deserialize_struct("DesktopPlatform", VARIANTS, EnumVisitor)
2162    }
2163}
2164
2165impl ::serde::ser::Serialize for DesktopPlatform {
2166    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2167        // union serializer
2168        use serde::ser::SerializeStruct;
2169        match self {
2170            DesktopPlatform::Windows => {
2171                // unit
2172                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2173                s.serialize_field(".tag", "windows")?;
2174                s.end()
2175            }
2176            DesktopPlatform::Mac => {
2177                // unit
2178                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2179                s.serialize_field(".tag", "mac")?;
2180                s.end()
2181            }
2182            DesktopPlatform::Linux => {
2183                // unit
2184                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2185                s.serialize_field(".tag", "linux")?;
2186                s.end()
2187            }
2188            DesktopPlatform::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2189        }
2190    }
2191}
2192
2193#[derive(Debug, Clone, PartialEq, Eq)]
2194#[non_exhaustive] // structs may have more fields added in the future.
2195pub struct DeviceSession {
2196    /// The session id.
2197    pub session_id: String,
2198    /// The IP address of the last activity from this session.
2199    pub ip_address: Option<String>,
2200    /// The country from which the last activity from this session was made.
2201    pub country: Option<String>,
2202    /// The time this session was created.
2203    pub created: Option<crate::types::common::DropboxTimestamp>,
2204    /// The time of the last activity from this session.
2205    pub updated: Option<crate::types::common::DropboxTimestamp>,
2206}
2207
2208impl DeviceSession {
2209    pub fn new(session_id: String) -> Self {
2210        DeviceSession {
2211            session_id,
2212            ip_address: None,
2213            country: None,
2214            created: None,
2215            updated: None,
2216        }
2217    }
2218
2219    pub fn with_ip_address(mut self, value: String) -> Self {
2220        self.ip_address = Some(value);
2221        self
2222    }
2223
2224    pub fn with_country(mut self, value: String) -> Self {
2225        self.country = Some(value);
2226        self
2227    }
2228
2229    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
2230        self.created = Some(value);
2231        self
2232    }
2233
2234    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
2235        self.updated = Some(value);
2236        self
2237    }
2238}
2239
2240const DEVICE_SESSION_FIELDS: &[&str] = &["session_id",
2241                                         "ip_address",
2242                                         "country",
2243                                         "created",
2244                                         "updated"];
2245impl DeviceSession {
2246    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2247        map: V,
2248    ) -> Result<DeviceSession, V::Error> {
2249        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2250    }
2251
2252    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2253        mut map: V,
2254        optional: bool,
2255    ) -> Result<Option<DeviceSession>, V::Error> {
2256        let mut field_session_id = None;
2257        let mut field_ip_address = None;
2258        let mut field_country = None;
2259        let mut field_created = None;
2260        let mut field_updated = None;
2261        let mut nothing = true;
2262        while let Some(key) = map.next_key::<&str>()? {
2263            nothing = false;
2264            match key {
2265                "session_id" => {
2266                    if field_session_id.is_some() {
2267                        return Err(::serde::de::Error::duplicate_field("session_id"));
2268                    }
2269                    field_session_id = Some(map.next_value()?);
2270                }
2271                "ip_address" => {
2272                    if field_ip_address.is_some() {
2273                        return Err(::serde::de::Error::duplicate_field("ip_address"));
2274                    }
2275                    field_ip_address = Some(map.next_value()?);
2276                }
2277                "country" => {
2278                    if field_country.is_some() {
2279                        return Err(::serde::de::Error::duplicate_field("country"));
2280                    }
2281                    field_country = Some(map.next_value()?);
2282                }
2283                "created" => {
2284                    if field_created.is_some() {
2285                        return Err(::serde::de::Error::duplicate_field("created"));
2286                    }
2287                    field_created = Some(map.next_value()?);
2288                }
2289                "updated" => {
2290                    if field_updated.is_some() {
2291                        return Err(::serde::de::Error::duplicate_field("updated"));
2292                    }
2293                    field_updated = Some(map.next_value()?);
2294                }
2295                _ => {
2296                    // unknown field allowed and ignored
2297                    map.next_value::<::serde_json::Value>()?;
2298                }
2299            }
2300        }
2301        if optional && nothing {
2302            return Ok(None);
2303        }
2304        let result = DeviceSession {
2305            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2306            ip_address: field_ip_address.and_then(Option::flatten),
2307            country: field_country.and_then(Option::flatten),
2308            created: field_created.and_then(Option::flatten),
2309            updated: field_updated.and_then(Option::flatten),
2310        };
2311        Ok(Some(result))
2312    }
2313
2314    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2315        &self,
2316        s: &mut S::SerializeStruct,
2317    ) -> Result<(), S::Error> {
2318        use serde::ser::SerializeStruct;
2319        s.serialize_field("session_id", &self.session_id)?;
2320        if let Some(val) = &self.ip_address {
2321            s.serialize_field("ip_address", val)?;
2322        }
2323        if let Some(val) = &self.country {
2324            s.serialize_field("country", val)?;
2325        }
2326        if let Some(val) = &self.created {
2327            s.serialize_field("created", val)?;
2328        }
2329        if let Some(val) = &self.updated {
2330            s.serialize_field("updated", val)?;
2331        }
2332        Ok(())
2333    }
2334}
2335
2336impl<'de> ::serde::de::Deserialize<'de> for DeviceSession {
2337    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2338        // struct deserializer
2339        use serde::de::{MapAccess, Visitor};
2340        struct StructVisitor;
2341        impl<'de> Visitor<'de> for StructVisitor {
2342            type Value = DeviceSession;
2343            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2344                f.write_str("a DeviceSession struct")
2345            }
2346            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2347                DeviceSession::internal_deserialize(map)
2348            }
2349        }
2350        deserializer.deserialize_struct("DeviceSession", DEVICE_SESSION_FIELDS, StructVisitor)
2351    }
2352}
2353
2354impl ::serde::ser::Serialize for DeviceSession {
2355    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2356        // struct serializer
2357        use serde::ser::SerializeStruct;
2358        let mut s = serializer.serialize_struct("DeviceSession", 5)?;
2359        self.internal_serialize::<S>(&mut s)?;
2360        s.end()
2361    }
2362}
2363
2364#[derive(Debug, Clone, PartialEq, Eq)]
2365#[non_exhaustive] // structs may have more fields added in the future.
2366pub struct DeviceSessionArg {
2367    /// The session id.
2368    pub session_id: String,
2369    /// The unique id of the member owning the device.
2370    pub team_member_id: String,
2371}
2372
2373impl DeviceSessionArg {
2374    pub fn new(session_id: String, team_member_id: String) -> Self {
2375        DeviceSessionArg {
2376            session_id,
2377            team_member_id,
2378        }
2379    }
2380}
2381
2382const DEVICE_SESSION_ARG_FIELDS: &[&str] = &["session_id",
2383                                             "team_member_id"];
2384impl DeviceSessionArg {
2385    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2386        map: V,
2387    ) -> Result<DeviceSessionArg, V::Error> {
2388        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2389    }
2390
2391    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2392        mut map: V,
2393        optional: bool,
2394    ) -> Result<Option<DeviceSessionArg>, V::Error> {
2395        let mut field_session_id = None;
2396        let mut field_team_member_id = None;
2397        let mut nothing = true;
2398        while let Some(key) = map.next_key::<&str>()? {
2399            nothing = false;
2400            match key {
2401                "session_id" => {
2402                    if field_session_id.is_some() {
2403                        return Err(::serde::de::Error::duplicate_field("session_id"));
2404                    }
2405                    field_session_id = Some(map.next_value()?);
2406                }
2407                "team_member_id" => {
2408                    if field_team_member_id.is_some() {
2409                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
2410                    }
2411                    field_team_member_id = Some(map.next_value()?);
2412                }
2413                _ => {
2414                    // unknown field allowed and ignored
2415                    map.next_value::<::serde_json::Value>()?;
2416                }
2417            }
2418        }
2419        if optional && nothing {
2420            return Ok(None);
2421        }
2422        let result = DeviceSessionArg {
2423            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2424            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
2425        };
2426        Ok(Some(result))
2427    }
2428
2429    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2430        &self,
2431        s: &mut S::SerializeStruct,
2432    ) -> Result<(), S::Error> {
2433        use serde::ser::SerializeStruct;
2434        s.serialize_field("session_id", &self.session_id)?;
2435        s.serialize_field("team_member_id", &self.team_member_id)?;
2436        Ok(())
2437    }
2438}
2439
2440impl<'de> ::serde::de::Deserialize<'de> for DeviceSessionArg {
2441    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2442        // struct deserializer
2443        use serde::de::{MapAccess, Visitor};
2444        struct StructVisitor;
2445        impl<'de> Visitor<'de> for StructVisitor {
2446            type Value = DeviceSessionArg;
2447            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2448                f.write_str("a DeviceSessionArg struct")
2449            }
2450            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2451                DeviceSessionArg::internal_deserialize(map)
2452            }
2453        }
2454        deserializer.deserialize_struct("DeviceSessionArg", DEVICE_SESSION_ARG_FIELDS, StructVisitor)
2455    }
2456}
2457
2458impl ::serde::ser::Serialize for DeviceSessionArg {
2459    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2460        // struct serializer
2461        use serde::ser::SerializeStruct;
2462        let mut s = serializer.serialize_struct("DeviceSessionArg", 2)?;
2463        self.internal_serialize::<S>(&mut s)?;
2464        s.end()
2465    }
2466}
2467
2468/// Each of the items is an array of values, one value per day. The value is the number of devices
2469/// active within a time window, ending with that day. If there is no data for a day, then the value
2470/// will be None.
2471#[derive(Debug, Clone, PartialEq, Eq)]
2472#[non_exhaustive] // structs may have more fields added in the future.
2473pub struct DevicesActive {
2474    /// Array of number of linked windows (desktop) clients with activity.
2475    pub windows: NumberPerDay,
2476    /// Array of number of linked mac (desktop) clients with activity.
2477    pub macos: NumberPerDay,
2478    /// Array of number of linked linus (desktop) clients with activity.
2479    pub linux: NumberPerDay,
2480    /// Array of number of linked ios devices with activity.
2481    pub ios: NumberPerDay,
2482    /// Array of number of linked android devices with activity.
2483    pub android: NumberPerDay,
2484    /// Array of number of other linked devices (blackberry, windows phone, etc) with activity.
2485    pub other: NumberPerDay,
2486    /// Array of total number of linked clients with activity.
2487    pub total: NumberPerDay,
2488}
2489
2490impl DevicesActive {
2491    pub fn new(
2492        windows: NumberPerDay,
2493        macos: NumberPerDay,
2494        linux: NumberPerDay,
2495        ios: NumberPerDay,
2496        android: NumberPerDay,
2497        other: NumberPerDay,
2498        total: NumberPerDay,
2499    ) -> Self {
2500        DevicesActive {
2501            windows,
2502            macos,
2503            linux,
2504            ios,
2505            android,
2506            other,
2507            total,
2508        }
2509    }
2510}
2511
2512const DEVICES_ACTIVE_FIELDS: &[&str] = &["windows",
2513                                         "macos",
2514                                         "linux",
2515                                         "ios",
2516                                         "android",
2517                                         "other",
2518                                         "total"];
2519impl DevicesActive {
2520    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2521        map: V,
2522    ) -> Result<DevicesActive, V::Error> {
2523        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2524    }
2525
2526    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2527        mut map: V,
2528        optional: bool,
2529    ) -> Result<Option<DevicesActive>, V::Error> {
2530        let mut field_windows = None;
2531        let mut field_macos = None;
2532        let mut field_linux = None;
2533        let mut field_ios = None;
2534        let mut field_android = None;
2535        let mut field_other = None;
2536        let mut field_total = None;
2537        let mut nothing = true;
2538        while let Some(key) = map.next_key::<&str>()? {
2539            nothing = false;
2540            match key {
2541                "windows" => {
2542                    if field_windows.is_some() {
2543                        return Err(::serde::de::Error::duplicate_field("windows"));
2544                    }
2545                    field_windows = Some(map.next_value()?);
2546                }
2547                "macos" => {
2548                    if field_macos.is_some() {
2549                        return Err(::serde::de::Error::duplicate_field("macos"));
2550                    }
2551                    field_macos = Some(map.next_value()?);
2552                }
2553                "linux" => {
2554                    if field_linux.is_some() {
2555                        return Err(::serde::de::Error::duplicate_field("linux"));
2556                    }
2557                    field_linux = Some(map.next_value()?);
2558                }
2559                "ios" => {
2560                    if field_ios.is_some() {
2561                        return Err(::serde::de::Error::duplicate_field("ios"));
2562                    }
2563                    field_ios = Some(map.next_value()?);
2564                }
2565                "android" => {
2566                    if field_android.is_some() {
2567                        return Err(::serde::de::Error::duplicate_field("android"));
2568                    }
2569                    field_android = Some(map.next_value()?);
2570                }
2571                "other" => {
2572                    if field_other.is_some() {
2573                        return Err(::serde::de::Error::duplicate_field("other"));
2574                    }
2575                    field_other = Some(map.next_value()?);
2576                }
2577                "total" => {
2578                    if field_total.is_some() {
2579                        return Err(::serde::de::Error::duplicate_field("total"));
2580                    }
2581                    field_total = Some(map.next_value()?);
2582                }
2583                _ => {
2584                    // unknown field allowed and ignored
2585                    map.next_value::<::serde_json::Value>()?;
2586                }
2587            }
2588        }
2589        if optional && nothing {
2590            return Ok(None);
2591        }
2592        let result = DevicesActive {
2593            windows: field_windows.ok_or_else(|| ::serde::de::Error::missing_field("windows"))?,
2594            macos: field_macos.ok_or_else(|| ::serde::de::Error::missing_field("macos"))?,
2595            linux: field_linux.ok_or_else(|| ::serde::de::Error::missing_field("linux"))?,
2596            ios: field_ios.ok_or_else(|| ::serde::de::Error::missing_field("ios"))?,
2597            android: field_android.ok_or_else(|| ::serde::de::Error::missing_field("android"))?,
2598            other: field_other.ok_or_else(|| ::serde::de::Error::missing_field("other"))?,
2599            total: field_total.ok_or_else(|| ::serde::de::Error::missing_field("total"))?,
2600        };
2601        Ok(Some(result))
2602    }
2603
2604    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2605        &self,
2606        s: &mut S::SerializeStruct,
2607    ) -> Result<(), S::Error> {
2608        use serde::ser::SerializeStruct;
2609        s.serialize_field("windows", &self.windows)?;
2610        s.serialize_field("macos", &self.macos)?;
2611        s.serialize_field("linux", &self.linux)?;
2612        s.serialize_field("ios", &self.ios)?;
2613        s.serialize_field("android", &self.android)?;
2614        s.serialize_field("other", &self.other)?;
2615        s.serialize_field("total", &self.total)?;
2616        Ok(())
2617    }
2618}
2619
2620impl<'de> ::serde::de::Deserialize<'de> for DevicesActive {
2621    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2622        // struct deserializer
2623        use serde::de::{MapAccess, Visitor};
2624        struct StructVisitor;
2625        impl<'de> Visitor<'de> for StructVisitor {
2626            type Value = DevicesActive;
2627            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2628                f.write_str("a DevicesActive struct")
2629            }
2630            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2631                DevicesActive::internal_deserialize(map)
2632            }
2633        }
2634        deserializer.deserialize_struct("DevicesActive", DEVICES_ACTIVE_FIELDS, StructVisitor)
2635    }
2636}
2637
2638impl ::serde::ser::Serialize for DevicesActive {
2639    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2640        // struct serializer
2641        use serde::ser::SerializeStruct;
2642        let mut s = serializer.serialize_struct("DevicesActive", 7)?;
2643        self.internal_serialize::<S>(&mut s)?;
2644        s.end()
2645    }
2646}
2647
2648/// Excluded users list argument.
2649#[derive(Debug, Clone, PartialEq, Eq)]
2650#[non_exhaustive] // structs may have more fields added in the future.
2651pub struct ExcludedUsersListArg {
2652    /// Number of results to return per call.
2653    pub limit: u32,
2654}
2655
2656impl Default for ExcludedUsersListArg {
2657    fn default() -> Self {
2658        ExcludedUsersListArg {
2659            limit: 1000,
2660        }
2661    }
2662}
2663
2664impl ExcludedUsersListArg {
2665    pub fn with_limit(mut self, value: u32) -> Self {
2666        self.limit = value;
2667        self
2668    }
2669}
2670
2671const EXCLUDED_USERS_LIST_ARG_FIELDS: &[&str] = &["limit"];
2672impl ExcludedUsersListArg {
2673    // no _opt deserializer
2674    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2675        mut map: V,
2676    ) -> Result<ExcludedUsersListArg, V::Error> {
2677        let mut field_limit = None;
2678        while let Some(key) = map.next_key::<&str>()? {
2679            match key {
2680                "limit" => {
2681                    if field_limit.is_some() {
2682                        return Err(::serde::de::Error::duplicate_field("limit"));
2683                    }
2684                    field_limit = Some(map.next_value()?);
2685                }
2686                _ => {
2687                    // unknown field allowed and ignored
2688                    map.next_value::<::serde_json::Value>()?;
2689                }
2690            }
2691        }
2692        let result = ExcludedUsersListArg {
2693            limit: field_limit.unwrap_or(1000),
2694        };
2695        Ok(result)
2696    }
2697
2698    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2699        &self,
2700        s: &mut S::SerializeStruct,
2701    ) -> Result<(), S::Error> {
2702        use serde::ser::SerializeStruct;
2703        if self.limit != 1000 {
2704            s.serialize_field("limit", &self.limit)?;
2705        }
2706        Ok(())
2707    }
2708}
2709
2710impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListArg {
2711    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2712        // struct deserializer
2713        use serde::de::{MapAccess, Visitor};
2714        struct StructVisitor;
2715        impl<'de> Visitor<'de> for StructVisitor {
2716            type Value = ExcludedUsersListArg;
2717            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2718                f.write_str("a ExcludedUsersListArg struct")
2719            }
2720            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2721                ExcludedUsersListArg::internal_deserialize(map)
2722            }
2723        }
2724        deserializer.deserialize_struct("ExcludedUsersListArg", EXCLUDED_USERS_LIST_ARG_FIELDS, StructVisitor)
2725    }
2726}
2727
2728impl ::serde::ser::Serialize for ExcludedUsersListArg {
2729    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2730        // struct serializer
2731        use serde::ser::SerializeStruct;
2732        let mut s = serializer.serialize_struct("ExcludedUsersListArg", 1)?;
2733        self.internal_serialize::<S>(&mut s)?;
2734        s.end()
2735    }
2736}
2737
2738/// Excluded users list continue argument.
2739#[derive(Debug, Clone, PartialEq, Eq)]
2740#[non_exhaustive] // structs may have more fields added in the future.
2741pub struct ExcludedUsersListContinueArg {
2742    /// Indicates from what point to get the next set of users.
2743    pub cursor: String,
2744}
2745
2746impl ExcludedUsersListContinueArg {
2747    pub fn new(cursor: String) -> Self {
2748        ExcludedUsersListContinueArg {
2749            cursor,
2750        }
2751    }
2752}
2753
2754const EXCLUDED_USERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
2755impl ExcludedUsersListContinueArg {
2756    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2757        map: V,
2758    ) -> Result<ExcludedUsersListContinueArg, V::Error> {
2759        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2760    }
2761
2762    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2763        mut map: V,
2764        optional: bool,
2765    ) -> Result<Option<ExcludedUsersListContinueArg>, V::Error> {
2766        let mut field_cursor = None;
2767        let mut nothing = true;
2768        while let Some(key) = map.next_key::<&str>()? {
2769            nothing = false;
2770            match key {
2771                "cursor" => {
2772                    if field_cursor.is_some() {
2773                        return Err(::serde::de::Error::duplicate_field("cursor"));
2774                    }
2775                    field_cursor = Some(map.next_value()?);
2776                }
2777                _ => {
2778                    // unknown field allowed and ignored
2779                    map.next_value::<::serde_json::Value>()?;
2780                }
2781            }
2782        }
2783        if optional && nothing {
2784            return Ok(None);
2785        }
2786        let result = ExcludedUsersListContinueArg {
2787            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2788        };
2789        Ok(Some(result))
2790    }
2791
2792    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2793        &self,
2794        s: &mut S::SerializeStruct,
2795    ) -> Result<(), S::Error> {
2796        use serde::ser::SerializeStruct;
2797        s.serialize_field("cursor", &self.cursor)?;
2798        Ok(())
2799    }
2800}
2801
2802impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListContinueArg {
2803    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2804        // struct deserializer
2805        use serde::de::{MapAccess, Visitor};
2806        struct StructVisitor;
2807        impl<'de> Visitor<'de> for StructVisitor {
2808            type Value = ExcludedUsersListContinueArg;
2809            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2810                f.write_str("a ExcludedUsersListContinueArg struct")
2811            }
2812            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2813                ExcludedUsersListContinueArg::internal_deserialize(map)
2814            }
2815        }
2816        deserializer.deserialize_struct("ExcludedUsersListContinueArg", EXCLUDED_USERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
2817    }
2818}
2819
2820impl ::serde::ser::Serialize for ExcludedUsersListContinueArg {
2821    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2822        // struct serializer
2823        use serde::ser::SerializeStruct;
2824        let mut s = serializer.serialize_struct("ExcludedUsersListContinueArg", 1)?;
2825        self.internal_serialize::<S>(&mut s)?;
2826        s.end()
2827    }
2828}
2829
2830/// Excluded users list continue error.
2831#[derive(Debug, Clone, PartialEq, Eq)]
2832#[non_exhaustive] // variants may be added in the future
2833pub enum ExcludedUsersListContinueError {
2834    /// The cursor is invalid.
2835    InvalidCursor,
2836    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2837    /// typically indicates that this SDK version is out of date.
2838    Other,
2839}
2840
2841impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListContinueError {
2842    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2843        // union deserializer
2844        use serde::de::{self, MapAccess, Visitor};
2845        struct EnumVisitor;
2846        impl<'de> Visitor<'de> for EnumVisitor {
2847            type Value = ExcludedUsersListContinueError;
2848            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2849                f.write_str("a ExcludedUsersListContinueError structure")
2850            }
2851            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2852                let tag: &str = match map.next_key()? {
2853                    Some(".tag") => map.next_value()?,
2854                    _ => return Err(de::Error::missing_field(".tag"))
2855                };
2856                let value = match tag {
2857                    "invalid_cursor" => ExcludedUsersListContinueError::InvalidCursor,
2858                    _ => ExcludedUsersListContinueError::Other,
2859                };
2860                crate::eat_json_fields(&mut map)?;
2861                Ok(value)
2862            }
2863        }
2864        const VARIANTS: &[&str] = &["invalid_cursor",
2865                                    "other"];
2866        deserializer.deserialize_struct("ExcludedUsersListContinueError", VARIANTS, EnumVisitor)
2867    }
2868}
2869
2870impl ::serde::ser::Serialize for ExcludedUsersListContinueError {
2871    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2872        // union serializer
2873        use serde::ser::SerializeStruct;
2874        match self {
2875            ExcludedUsersListContinueError::InvalidCursor => {
2876                // unit
2877                let mut s = serializer.serialize_struct("ExcludedUsersListContinueError", 1)?;
2878                s.serialize_field(".tag", "invalid_cursor")?;
2879                s.end()
2880            }
2881            ExcludedUsersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2882        }
2883    }
2884}
2885
2886impl ::std::error::Error for ExcludedUsersListContinueError {
2887}
2888
2889impl ::std::fmt::Display for ExcludedUsersListContinueError {
2890    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2891        match self {
2892            ExcludedUsersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
2893            _ => write!(f, "{:?}", *self),
2894        }
2895    }
2896}
2897
2898/// Excluded users list error.
2899#[derive(Debug, Clone, PartialEq, Eq)]
2900#[non_exhaustive] // variants may be added in the future
2901pub enum ExcludedUsersListError {
2902    /// An error occurred.
2903    ListError,
2904    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2905    /// typically indicates that this SDK version is out of date.
2906    Other,
2907}
2908
2909impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListError {
2910    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2911        // union deserializer
2912        use serde::de::{self, MapAccess, Visitor};
2913        struct EnumVisitor;
2914        impl<'de> Visitor<'de> for EnumVisitor {
2915            type Value = ExcludedUsersListError;
2916            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2917                f.write_str("a ExcludedUsersListError structure")
2918            }
2919            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2920                let tag: &str = match map.next_key()? {
2921                    Some(".tag") => map.next_value()?,
2922                    _ => return Err(de::Error::missing_field(".tag"))
2923                };
2924                let value = match tag {
2925                    "list_error" => ExcludedUsersListError::ListError,
2926                    _ => ExcludedUsersListError::Other,
2927                };
2928                crate::eat_json_fields(&mut map)?;
2929                Ok(value)
2930            }
2931        }
2932        const VARIANTS: &[&str] = &["list_error",
2933                                    "other"];
2934        deserializer.deserialize_struct("ExcludedUsersListError", VARIANTS, EnumVisitor)
2935    }
2936}
2937
2938impl ::serde::ser::Serialize for ExcludedUsersListError {
2939    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2940        // union serializer
2941        use serde::ser::SerializeStruct;
2942        match self {
2943            ExcludedUsersListError::ListError => {
2944                // unit
2945                let mut s = serializer.serialize_struct("ExcludedUsersListError", 1)?;
2946                s.serialize_field(".tag", "list_error")?;
2947                s.end()
2948            }
2949            ExcludedUsersListError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2950        }
2951    }
2952}
2953
2954impl ::std::error::Error for ExcludedUsersListError {
2955}
2956
2957impl ::std::fmt::Display for ExcludedUsersListError {
2958    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2959        match self {
2960            ExcludedUsersListError::ListError => f.write_str("An error occurred."),
2961            _ => write!(f, "{:?}", *self),
2962        }
2963    }
2964}
2965
2966/// Excluded users list result.
2967#[derive(Debug, Clone, PartialEq, Eq)]
2968#[non_exhaustive] // structs may have more fields added in the future.
2969pub struct ExcludedUsersListResult {
2970    pub users: Vec<MemberProfile>,
2971    /// Is true if there are additional excluded users that have not been returned yet. An
2972    /// additional call to
2973    /// [`member_space_limits_excluded_users_list_continue()`](crate::team::member_space_limits_excluded_users_list_continue)
2974    /// can retrieve them.
2975    pub has_more: bool,
2976    /// Pass the cursor into
2977    /// [`member_space_limits_excluded_users_list_continue()`](crate::team::member_space_limits_excluded_users_list_continue)
2978    /// to obtain additional excluded users.
2979    pub cursor: Option<String>,
2980}
2981
2982impl ExcludedUsersListResult {
2983    pub fn new(users: Vec<MemberProfile>, has_more: bool) -> Self {
2984        ExcludedUsersListResult {
2985            users,
2986            has_more,
2987            cursor: None,
2988        }
2989    }
2990
2991    pub fn with_cursor(mut self, value: String) -> Self {
2992        self.cursor = Some(value);
2993        self
2994    }
2995}
2996
2997const EXCLUDED_USERS_LIST_RESULT_FIELDS: &[&str] = &["users",
2998                                                     "has_more",
2999                                                     "cursor"];
3000impl ExcludedUsersListResult {
3001    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3002        map: V,
3003    ) -> Result<ExcludedUsersListResult, V::Error> {
3004        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3005    }
3006
3007    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3008        mut map: V,
3009        optional: bool,
3010    ) -> Result<Option<ExcludedUsersListResult>, V::Error> {
3011        let mut field_users = None;
3012        let mut field_has_more = None;
3013        let mut field_cursor = None;
3014        let mut nothing = true;
3015        while let Some(key) = map.next_key::<&str>()? {
3016            nothing = false;
3017            match key {
3018                "users" => {
3019                    if field_users.is_some() {
3020                        return Err(::serde::de::Error::duplicate_field("users"));
3021                    }
3022                    field_users = Some(map.next_value()?);
3023                }
3024                "has_more" => {
3025                    if field_has_more.is_some() {
3026                        return Err(::serde::de::Error::duplicate_field("has_more"));
3027                    }
3028                    field_has_more = Some(map.next_value()?);
3029                }
3030                "cursor" => {
3031                    if field_cursor.is_some() {
3032                        return Err(::serde::de::Error::duplicate_field("cursor"));
3033                    }
3034                    field_cursor = Some(map.next_value()?);
3035                }
3036                _ => {
3037                    // unknown field allowed and ignored
3038                    map.next_value::<::serde_json::Value>()?;
3039                }
3040            }
3041        }
3042        if optional && nothing {
3043            return Ok(None);
3044        }
3045        let result = ExcludedUsersListResult {
3046            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
3047            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
3048            cursor: field_cursor.and_then(Option::flatten),
3049        };
3050        Ok(Some(result))
3051    }
3052
3053    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3054        &self,
3055        s: &mut S::SerializeStruct,
3056    ) -> Result<(), S::Error> {
3057        use serde::ser::SerializeStruct;
3058        s.serialize_field("users", &self.users)?;
3059        s.serialize_field("has_more", &self.has_more)?;
3060        if let Some(val) = &self.cursor {
3061            s.serialize_field("cursor", val)?;
3062        }
3063        Ok(())
3064    }
3065}
3066
3067impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListResult {
3068    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3069        // struct deserializer
3070        use serde::de::{MapAccess, Visitor};
3071        struct StructVisitor;
3072        impl<'de> Visitor<'de> for StructVisitor {
3073            type Value = ExcludedUsersListResult;
3074            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3075                f.write_str("a ExcludedUsersListResult struct")
3076            }
3077            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3078                ExcludedUsersListResult::internal_deserialize(map)
3079            }
3080        }
3081        deserializer.deserialize_struct("ExcludedUsersListResult", EXCLUDED_USERS_LIST_RESULT_FIELDS, StructVisitor)
3082    }
3083}
3084
3085impl ::serde::ser::Serialize for ExcludedUsersListResult {
3086    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3087        // struct serializer
3088        use serde::ser::SerializeStruct;
3089        let mut s = serializer.serialize_struct("ExcludedUsersListResult", 3)?;
3090        self.internal_serialize::<S>(&mut s)?;
3091        s.end()
3092    }
3093}
3094
3095/// Argument of excluded users update operation. Should include a list of users to add/remove
3096/// (according to endpoint), Maximum size of the list is 1000 users.
3097#[derive(Debug, Clone, PartialEq, Eq, Default)]
3098#[non_exhaustive] // structs may have more fields added in the future.
3099pub struct ExcludedUsersUpdateArg {
3100    /// List of users to be added/removed.
3101    pub users: Option<Vec<UserSelectorArg>>,
3102}
3103
3104impl ExcludedUsersUpdateArg {
3105    pub fn with_users(mut self, value: Vec<UserSelectorArg>) -> Self {
3106        self.users = Some(value);
3107        self
3108    }
3109}
3110
3111const EXCLUDED_USERS_UPDATE_ARG_FIELDS: &[&str] = &["users"];
3112impl ExcludedUsersUpdateArg {
3113    // no _opt deserializer
3114    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3115        mut map: V,
3116    ) -> Result<ExcludedUsersUpdateArg, V::Error> {
3117        let mut field_users = None;
3118        while let Some(key) = map.next_key::<&str>()? {
3119            match key {
3120                "users" => {
3121                    if field_users.is_some() {
3122                        return Err(::serde::de::Error::duplicate_field("users"));
3123                    }
3124                    field_users = Some(map.next_value()?);
3125                }
3126                _ => {
3127                    // unknown field allowed and ignored
3128                    map.next_value::<::serde_json::Value>()?;
3129                }
3130            }
3131        }
3132        let result = ExcludedUsersUpdateArg {
3133            users: field_users.and_then(Option::flatten),
3134        };
3135        Ok(result)
3136    }
3137
3138    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3139        &self,
3140        s: &mut S::SerializeStruct,
3141    ) -> Result<(), S::Error> {
3142        use serde::ser::SerializeStruct;
3143        if let Some(val) = &self.users {
3144            s.serialize_field("users", val)?;
3145        }
3146        Ok(())
3147    }
3148}
3149
3150impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateArg {
3151    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3152        // struct deserializer
3153        use serde::de::{MapAccess, Visitor};
3154        struct StructVisitor;
3155        impl<'de> Visitor<'de> for StructVisitor {
3156            type Value = ExcludedUsersUpdateArg;
3157            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3158                f.write_str("a ExcludedUsersUpdateArg struct")
3159            }
3160            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3161                ExcludedUsersUpdateArg::internal_deserialize(map)
3162            }
3163        }
3164        deserializer.deserialize_struct("ExcludedUsersUpdateArg", EXCLUDED_USERS_UPDATE_ARG_FIELDS, StructVisitor)
3165    }
3166}
3167
3168impl ::serde::ser::Serialize for ExcludedUsersUpdateArg {
3169    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3170        // struct serializer
3171        use serde::ser::SerializeStruct;
3172        let mut s = serializer.serialize_struct("ExcludedUsersUpdateArg", 1)?;
3173        self.internal_serialize::<S>(&mut s)?;
3174        s.end()
3175    }
3176}
3177
3178/// Excluded users update error.
3179#[derive(Debug, Clone, PartialEq, Eq)]
3180#[non_exhaustive] // variants may be added in the future
3181pub enum ExcludedUsersUpdateError {
3182    /// At least one of the users is not part of your team.
3183    UsersNotInTeam,
3184    /// A maximum of 1000 users for each of addition/removal can be supplied.
3185    TooManyUsers,
3186    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3187    /// typically indicates that this SDK version is out of date.
3188    Other,
3189}
3190
3191impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateError {
3192    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3193        // union deserializer
3194        use serde::de::{self, MapAccess, Visitor};
3195        struct EnumVisitor;
3196        impl<'de> Visitor<'de> for EnumVisitor {
3197            type Value = ExcludedUsersUpdateError;
3198            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3199                f.write_str("a ExcludedUsersUpdateError structure")
3200            }
3201            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3202                let tag: &str = match map.next_key()? {
3203                    Some(".tag") => map.next_value()?,
3204                    _ => return Err(de::Error::missing_field(".tag"))
3205                };
3206                let value = match tag {
3207                    "users_not_in_team" => ExcludedUsersUpdateError::UsersNotInTeam,
3208                    "too_many_users" => ExcludedUsersUpdateError::TooManyUsers,
3209                    _ => ExcludedUsersUpdateError::Other,
3210                };
3211                crate::eat_json_fields(&mut map)?;
3212                Ok(value)
3213            }
3214        }
3215        const VARIANTS: &[&str] = &["users_not_in_team",
3216                                    "too_many_users",
3217                                    "other"];
3218        deserializer.deserialize_struct("ExcludedUsersUpdateError", VARIANTS, EnumVisitor)
3219    }
3220}
3221
3222impl ::serde::ser::Serialize for ExcludedUsersUpdateError {
3223    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3224        // union serializer
3225        use serde::ser::SerializeStruct;
3226        match self {
3227            ExcludedUsersUpdateError::UsersNotInTeam => {
3228                // unit
3229                let mut s = serializer.serialize_struct("ExcludedUsersUpdateError", 1)?;
3230                s.serialize_field(".tag", "users_not_in_team")?;
3231                s.end()
3232            }
3233            ExcludedUsersUpdateError::TooManyUsers => {
3234                // unit
3235                let mut s = serializer.serialize_struct("ExcludedUsersUpdateError", 1)?;
3236                s.serialize_field(".tag", "too_many_users")?;
3237                s.end()
3238            }
3239            ExcludedUsersUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3240        }
3241    }
3242}
3243
3244impl ::std::error::Error for ExcludedUsersUpdateError {
3245}
3246
3247impl ::std::fmt::Display for ExcludedUsersUpdateError {
3248    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3249        match self {
3250            ExcludedUsersUpdateError::UsersNotInTeam => f.write_str("At least one of the users is not part of your team."),
3251            ExcludedUsersUpdateError::TooManyUsers => f.write_str("A maximum of 1000 users for each of addition/removal can be supplied."),
3252            _ => write!(f, "{:?}", *self),
3253        }
3254    }
3255}
3256
3257/// Excluded users update result.
3258#[derive(Debug, Clone, PartialEq, Eq)]
3259#[non_exhaustive] // structs may have more fields added in the future.
3260pub struct ExcludedUsersUpdateResult {
3261    /// Update status.
3262    pub status: ExcludedUsersUpdateStatus,
3263}
3264
3265impl ExcludedUsersUpdateResult {
3266    pub fn new(status: ExcludedUsersUpdateStatus) -> Self {
3267        ExcludedUsersUpdateResult {
3268            status,
3269        }
3270    }
3271}
3272
3273const EXCLUDED_USERS_UPDATE_RESULT_FIELDS: &[&str] = &["status"];
3274impl ExcludedUsersUpdateResult {
3275    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3276        map: V,
3277    ) -> Result<ExcludedUsersUpdateResult, V::Error> {
3278        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3279    }
3280
3281    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3282        mut map: V,
3283        optional: bool,
3284    ) -> Result<Option<ExcludedUsersUpdateResult>, V::Error> {
3285        let mut field_status = None;
3286        let mut nothing = true;
3287        while let Some(key) = map.next_key::<&str>()? {
3288            nothing = false;
3289            match key {
3290                "status" => {
3291                    if field_status.is_some() {
3292                        return Err(::serde::de::Error::duplicate_field("status"));
3293                    }
3294                    field_status = Some(map.next_value()?);
3295                }
3296                _ => {
3297                    // unknown field allowed and ignored
3298                    map.next_value::<::serde_json::Value>()?;
3299                }
3300            }
3301        }
3302        if optional && nothing {
3303            return Ok(None);
3304        }
3305        let result = ExcludedUsersUpdateResult {
3306            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
3307        };
3308        Ok(Some(result))
3309    }
3310
3311    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3312        &self,
3313        s: &mut S::SerializeStruct,
3314    ) -> Result<(), S::Error> {
3315        use serde::ser::SerializeStruct;
3316        s.serialize_field("status", &self.status)?;
3317        Ok(())
3318    }
3319}
3320
3321impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateResult {
3322    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3323        // struct deserializer
3324        use serde::de::{MapAccess, Visitor};
3325        struct StructVisitor;
3326        impl<'de> Visitor<'de> for StructVisitor {
3327            type Value = ExcludedUsersUpdateResult;
3328            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3329                f.write_str("a ExcludedUsersUpdateResult struct")
3330            }
3331            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3332                ExcludedUsersUpdateResult::internal_deserialize(map)
3333            }
3334        }
3335        deserializer.deserialize_struct("ExcludedUsersUpdateResult", EXCLUDED_USERS_UPDATE_RESULT_FIELDS, StructVisitor)
3336    }
3337}
3338
3339impl ::serde::ser::Serialize for ExcludedUsersUpdateResult {
3340    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3341        // struct serializer
3342        use serde::ser::SerializeStruct;
3343        let mut s = serializer.serialize_struct("ExcludedUsersUpdateResult", 1)?;
3344        self.internal_serialize::<S>(&mut s)?;
3345        s.end()
3346    }
3347}
3348
3349/// Excluded users update operation status.
3350#[derive(Debug, Clone, PartialEq, Eq)]
3351#[non_exhaustive] // variants may be added in the future
3352pub enum ExcludedUsersUpdateStatus {
3353    /// Update successful.
3354    Success,
3355    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3356    /// typically indicates that this SDK version is out of date.
3357    Other,
3358}
3359
3360impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateStatus {
3361    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3362        // union deserializer
3363        use serde::de::{self, MapAccess, Visitor};
3364        struct EnumVisitor;
3365        impl<'de> Visitor<'de> for EnumVisitor {
3366            type Value = ExcludedUsersUpdateStatus;
3367            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3368                f.write_str("a ExcludedUsersUpdateStatus structure")
3369            }
3370            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3371                let tag: &str = match map.next_key()? {
3372                    Some(".tag") => map.next_value()?,
3373                    _ => return Err(de::Error::missing_field(".tag"))
3374                };
3375                let value = match tag {
3376                    "success" => ExcludedUsersUpdateStatus::Success,
3377                    _ => ExcludedUsersUpdateStatus::Other,
3378                };
3379                crate::eat_json_fields(&mut map)?;
3380                Ok(value)
3381            }
3382        }
3383        const VARIANTS: &[&str] = &["success",
3384                                    "other"];
3385        deserializer.deserialize_struct("ExcludedUsersUpdateStatus", VARIANTS, EnumVisitor)
3386    }
3387}
3388
3389impl ::serde::ser::Serialize for ExcludedUsersUpdateStatus {
3390    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3391        // union serializer
3392        use serde::ser::SerializeStruct;
3393        match self {
3394            ExcludedUsersUpdateStatus::Success => {
3395                // unit
3396                let mut s = serializer.serialize_struct("ExcludedUsersUpdateStatus", 1)?;
3397                s.serialize_field(".tag", "success")?;
3398                s.end()
3399            }
3400            ExcludedUsersUpdateStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3401        }
3402    }
3403}
3404
3405/// A set of features that a Dropbox Business account may support.
3406#[derive(Debug, Clone, PartialEq, Eq)]
3407#[non_exhaustive] // variants may be added in the future
3408pub enum Feature {
3409    /// The number of upload API calls allowed per month.
3410    UploadApiRateLimit,
3411    /// Does this team have a shared team root.
3412    HasTeamSharedDropbox,
3413    /// Does this team have file events.
3414    HasTeamFileEvents,
3415    /// Does this team have team selective sync enabled.
3416    HasTeamSelectiveSync,
3417    /// Does this team have team member folder.
3418    HasDistinctMemberHomes,
3419    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3420    /// typically indicates that this SDK version is out of date.
3421    Other,
3422}
3423
3424impl<'de> ::serde::de::Deserialize<'de> for Feature {
3425    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3426        // union deserializer
3427        use serde::de::{self, MapAccess, Visitor};
3428        struct EnumVisitor;
3429        impl<'de> Visitor<'de> for EnumVisitor {
3430            type Value = Feature;
3431            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3432                f.write_str("a Feature structure")
3433            }
3434            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3435                let tag: &str = match map.next_key()? {
3436                    Some(".tag") => map.next_value()?,
3437                    _ => return Err(de::Error::missing_field(".tag"))
3438                };
3439                let value = match tag {
3440                    "upload_api_rate_limit" => Feature::UploadApiRateLimit,
3441                    "has_team_shared_dropbox" => Feature::HasTeamSharedDropbox,
3442                    "has_team_file_events" => Feature::HasTeamFileEvents,
3443                    "has_team_selective_sync" => Feature::HasTeamSelectiveSync,
3444                    "has_distinct_member_homes" => Feature::HasDistinctMemberHomes,
3445                    _ => Feature::Other,
3446                };
3447                crate::eat_json_fields(&mut map)?;
3448                Ok(value)
3449            }
3450        }
3451        const VARIANTS: &[&str] = &["upload_api_rate_limit",
3452                                    "has_team_shared_dropbox",
3453                                    "has_team_file_events",
3454                                    "has_team_selective_sync",
3455                                    "has_distinct_member_homes",
3456                                    "other"];
3457        deserializer.deserialize_struct("Feature", VARIANTS, EnumVisitor)
3458    }
3459}
3460
3461impl ::serde::ser::Serialize for Feature {
3462    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3463        // union serializer
3464        use serde::ser::SerializeStruct;
3465        match self {
3466            Feature::UploadApiRateLimit => {
3467                // unit
3468                let mut s = serializer.serialize_struct("Feature", 1)?;
3469                s.serialize_field(".tag", "upload_api_rate_limit")?;
3470                s.end()
3471            }
3472            Feature::HasTeamSharedDropbox => {
3473                // unit
3474                let mut s = serializer.serialize_struct("Feature", 1)?;
3475                s.serialize_field(".tag", "has_team_shared_dropbox")?;
3476                s.end()
3477            }
3478            Feature::HasTeamFileEvents => {
3479                // unit
3480                let mut s = serializer.serialize_struct("Feature", 1)?;
3481                s.serialize_field(".tag", "has_team_file_events")?;
3482                s.end()
3483            }
3484            Feature::HasTeamSelectiveSync => {
3485                // unit
3486                let mut s = serializer.serialize_struct("Feature", 1)?;
3487                s.serialize_field(".tag", "has_team_selective_sync")?;
3488                s.end()
3489            }
3490            Feature::HasDistinctMemberHomes => {
3491                // unit
3492                let mut s = serializer.serialize_struct("Feature", 1)?;
3493                s.serialize_field(".tag", "has_distinct_member_homes")?;
3494                s.end()
3495            }
3496            Feature::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3497        }
3498    }
3499}
3500
3501/// The values correspond to entries in [`Feature`]. You may get different value according to your
3502/// Dropbox Business plan.
3503#[derive(Debug, Clone, PartialEq, Eq)]
3504#[non_exhaustive] // variants may be added in the future
3505pub enum FeatureValue {
3506    UploadApiRateLimit(UploadApiRateLimitValue),
3507    HasTeamSharedDropbox(HasTeamSharedDropboxValue),
3508    HasTeamFileEvents(HasTeamFileEventsValue),
3509    HasTeamSelectiveSync(HasTeamSelectiveSyncValue),
3510    HasDistinctMemberHomes(HasDistinctMemberHomesValue),
3511    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3512    /// typically indicates that this SDK version is out of date.
3513    Other,
3514}
3515
3516impl<'de> ::serde::de::Deserialize<'de> for FeatureValue {
3517    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3518        // union deserializer
3519        use serde::de::{self, MapAccess, Visitor};
3520        struct EnumVisitor;
3521        impl<'de> Visitor<'de> for EnumVisitor {
3522            type Value = FeatureValue;
3523            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3524                f.write_str("a FeatureValue structure")
3525            }
3526            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3527                let tag: &str = match map.next_key()? {
3528                    Some(".tag") => map.next_value()?,
3529                    _ => return Err(de::Error::missing_field(".tag"))
3530                };
3531                let value = match tag {
3532                    "upload_api_rate_limit" => {
3533                        match map.next_key()? {
3534                            Some("upload_api_rate_limit") => FeatureValue::UploadApiRateLimit(map.next_value()?),
3535                            None => return Err(de::Error::missing_field("upload_api_rate_limit")),
3536                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3537                        }
3538                    }
3539                    "has_team_shared_dropbox" => {
3540                        match map.next_key()? {
3541                            Some("has_team_shared_dropbox") => FeatureValue::HasTeamSharedDropbox(map.next_value()?),
3542                            None => return Err(de::Error::missing_field("has_team_shared_dropbox")),
3543                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3544                        }
3545                    }
3546                    "has_team_file_events" => {
3547                        match map.next_key()? {
3548                            Some("has_team_file_events") => FeatureValue::HasTeamFileEvents(map.next_value()?),
3549                            None => return Err(de::Error::missing_field("has_team_file_events")),
3550                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3551                        }
3552                    }
3553                    "has_team_selective_sync" => {
3554                        match map.next_key()? {
3555                            Some("has_team_selective_sync") => FeatureValue::HasTeamSelectiveSync(map.next_value()?),
3556                            None => return Err(de::Error::missing_field("has_team_selective_sync")),
3557                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3558                        }
3559                    }
3560                    "has_distinct_member_homes" => {
3561                        match map.next_key()? {
3562                            Some("has_distinct_member_homes") => FeatureValue::HasDistinctMemberHomes(map.next_value()?),
3563                            None => return Err(de::Error::missing_field("has_distinct_member_homes")),
3564                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3565                        }
3566                    }
3567                    _ => FeatureValue::Other,
3568                };
3569                crate::eat_json_fields(&mut map)?;
3570                Ok(value)
3571            }
3572        }
3573        const VARIANTS: &[&str] = &["upload_api_rate_limit",
3574                                    "has_team_shared_dropbox",
3575                                    "has_team_file_events",
3576                                    "has_team_selective_sync",
3577                                    "has_distinct_member_homes",
3578                                    "other"];
3579        deserializer.deserialize_struct("FeatureValue", VARIANTS, EnumVisitor)
3580    }
3581}
3582
3583impl ::serde::ser::Serialize for FeatureValue {
3584    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3585        // union serializer
3586        use serde::ser::SerializeStruct;
3587        match self {
3588            FeatureValue::UploadApiRateLimit(x) => {
3589                // union or polymporphic struct
3590                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3591                s.serialize_field(".tag", "upload_api_rate_limit")?;
3592                s.serialize_field("upload_api_rate_limit", x)?;
3593                s.end()
3594            }
3595            FeatureValue::HasTeamSharedDropbox(x) => {
3596                // union or polymporphic struct
3597                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3598                s.serialize_field(".tag", "has_team_shared_dropbox")?;
3599                s.serialize_field("has_team_shared_dropbox", x)?;
3600                s.end()
3601            }
3602            FeatureValue::HasTeamFileEvents(x) => {
3603                // union or polymporphic struct
3604                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3605                s.serialize_field(".tag", "has_team_file_events")?;
3606                s.serialize_field("has_team_file_events", x)?;
3607                s.end()
3608            }
3609            FeatureValue::HasTeamSelectiveSync(x) => {
3610                // union or polymporphic struct
3611                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3612                s.serialize_field(".tag", "has_team_selective_sync")?;
3613                s.serialize_field("has_team_selective_sync", x)?;
3614                s.end()
3615            }
3616            FeatureValue::HasDistinctMemberHomes(x) => {
3617                // union or polymporphic struct
3618                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3619                s.serialize_field(".tag", "has_distinct_member_homes")?;
3620                s.serialize_field("has_distinct_member_homes", x)?;
3621                s.end()
3622            }
3623            FeatureValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3624        }
3625    }
3626}
3627
3628#[derive(Debug, Clone, PartialEq, Eq)]
3629#[non_exhaustive] // structs may have more fields added in the future.
3630pub struct FeaturesGetValuesBatchArg {
3631    /// A list of features in [`Feature`]. If the list is empty, this route will return
3632    /// [`FeaturesGetValuesBatchError`].
3633    pub features: Vec<Feature>,
3634}
3635
3636impl FeaturesGetValuesBatchArg {
3637    pub fn new(features: Vec<Feature>) -> Self {
3638        FeaturesGetValuesBatchArg {
3639            features,
3640        }
3641    }
3642}
3643
3644const FEATURES_GET_VALUES_BATCH_ARG_FIELDS: &[&str] = &["features"];
3645impl FeaturesGetValuesBatchArg {
3646    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3647        map: V,
3648    ) -> Result<FeaturesGetValuesBatchArg, V::Error> {
3649        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3650    }
3651
3652    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3653        mut map: V,
3654        optional: bool,
3655    ) -> Result<Option<FeaturesGetValuesBatchArg>, V::Error> {
3656        let mut field_features = None;
3657        let mut nothing = true;
3658        while let Some(key) = map.next_key::<&str>()? {
3659            nothing = false;
3660            match key {
3661                "features" => {
3662                    if field_features.is_some() {
3663                        return Err(::serde::de::Error::duplicate_field("features"));
3664                    }
3665                    field_features = Some(map.next_value()?);
3666                }
3667                _ => {
3668                    // unknown field allowed and ignored
3669                    map.next_value::<::serde_json::Value>()?;
3670                }
3671            }
3672        }
3673        if optional && nothing {
3674            return Ok(None);
3675        }
3676        let result = FeaturesGetValuesBatchArg {
3677            features: field_features.ok_or_else(|| ::serde::de::Error::missing_field("features"))?,
3678        };
3679        Ok(Some(result))
3680    }
3681
3682    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3683        &self,
3684        s: &mut S::SerializeStruct,
3685    ) -> Result<(), S::Error> {
3686        use serde::ser::SerializeStruct;
3687        s.serialize_field("features", &self.features)?;
3688        Ok(())
3689    }
3690}
3691
3692impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchArg {
3693    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3694        // struct deserializer
3695        use serde::de::{MapAccess, Visitor};
3696        struct StructVisitor;
3697        impl<'de> Visitor<'de> for StructVisitor {
3698            type Value = FeaturesGetValuesBatchArg;
3699            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3700                f.write_str("a FeaturesGetValuesBatchArg struct")
3701            }
3702            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3703                FeaturesGetValuesBatchArg::internal_deserialize(map)
3704            }
3705        }
3706        deserializer.deserialize_struct("FeaturesGetValuesBatchArg", FEATURES_GET_VALUES_BATCH_ARG_FIELDS, StructVisitor)
3707    }
3708}
3709
3710impl ::serde::ser::Serialize for FeaturesGetValuesBatchArg {
3711    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3712        // struct serializer
3713        use serde::ser::SerializeStruct;
3714        let mut s = serializer.serialize_struct("FeaturesGetValuesBatchArg", 1)?;
3715        self.internal_serialize::<S>(&mut s)?;
3716        s.end()
3717    }
3718}
3719
3720#[derive(Debug, Clone, PartialEq, Eq)]
3721#[non_exhaustive] // variants may be added in the future
3722pub enum FeaturesGetValuesBatchError {
3723    /// At least one [`Feature`] must be included in the [`FeaturesGetValuesBatchArg`].features
3724    /// list.
3725    EmptyFeaturesList,
3726    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3727    /// typically indicates that this SDK version is out of date.
3728    Other,
3729}
3730
3731impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchError {
3732    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3733        // union deserializer
3734        use serde::de::{self, MapAccess, Visitor};
3735        struct EnumVisitor;
3736        impl<'de> Visitor<'de> for EnumVisitor {
3737            type Value = FeaturesGetValuesBatchError;
3738            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3739                f.write_str("a FeaturesGetValuesBatchError structure")
3740            }
3741            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3742                let tag: &str = match map.next_key()? {
3743                    Some(".tag") => map.next_value()?,
3744                    _ => return Err(de::Error::missing_field(".tag"))
3745                };
3746                let value = match tag {
3747                    "empty_features_list" => FeaturesGetValuesBatchError::EmptyFeaturesList,
3748                    _ => FeaturesGetValuesBatchError::Other,
3749                };
3750                crate::eat_json_fields(&mut map)?;
3751                Ok(value)
3752            }
3753        }
3754        const VARIANTS: &[&str] = &["empty_features_list",
3755                                    "other"];
3756        deserializer.deserialize_struct("FeaturesGetValuesBatchError", VARIANTS, EnumVisitor)
3757    }
3758}
3759
3760impl ::serde::ser::Serialize for FeaturesGetValuesBatchError {
3761    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3762        // union serializer
3763        use serde::ser::SerializeStruct;
3764        match self {
3765            FeaturesGetValuesBatchError::EmptyFeaturesList => {
3766                // unit
3767                let mut s = serializer.serialize_struct("FeaturesGetValuesBatchError", 1)?;
3768                s.serialize_field(".tag", "empty_features_list")?;
3769                s.end()
3770            }
3771            FeaturesGetValuesBatchError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3772        }
3773    }
3774}
3775
3776impl ::std::error::Error for FeaturesGetValuesBatchError {
3777}
3778
3779impl ::std::fmt::Display for FeaturesGetValuesBatchError {
3780    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3781        write!(f, "{:?}", *self)
3782    }
3783}
3784
3785#[derive(Debug, Clone, PartialEq, Eq)]
3786#[non_exhaustive] // structs may have more fields added in the future.
3787pub struct FeaturesGetValuesBatchResult {
3788    pub values: Vec<FeatureValue>,
3789}
3790
3791impl FeaturesGetValuesBatchResult {
3792    pub fn new(values: Vec<FeatureValue>) -> Self {
3793        FeaturesGetValuesBatchResult {
3794            values,
3795        }
3796    }
3797}
3798
3799const FEATURES_GET_VALUES_BATCH_RESULT_FIELDS: &[&str] = &["values"];
3800impl FeaturesGetValuesBatchResult {
3801    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3802        map: V,
3803    ) -> Result<FeaturesGetValuesBatchResult, V::Error> {
3804        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3805    }
3806
3807    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3808        mut map: V,
3809        optional: bool,
3810    ) -> Result<Option<FeaturesGetValuesBatchResult>, V::Error> {
3811        let mut field_values = None;
3812        let mut nothing = true;
3813        while let Some(key) = map.next_key::<&str>()? {
3814            nothing = false;
3815            match key {
3816                "values" => {
3817                    if field_values.is_some() {
3818                        return Err(::serde::de::Error::duplicate_field("values"));
3819                    }
3820                    field_values = Some(map.next_value()?);
3821                }
3822                _ => {
3823                    // unknown field allowed and ignored
3824                    map.next_value::<::serde_json::Value>()?;
3825                }
3826            }
3827        }
3828        if optional && nothing {
3829            return Ok(None);
3830        }
3831        let result = FeaturesGetValuesBatchResult {
3832            values: field_values.ok_or_else(|| ::serde::de::Error::missing_field("values"))?,
3833        };
3834        Ok(Some(result))
3835    }
3836
3837    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3838        &self,
3839        s: &mut S::SerializeStruct,
3840    ) -> Result<(), S::Error> {
3841        use serde::ser::SerializeStruct;
3842        s.serialize_field("values", &self.values)?;
3843        Ok(())
3844    }
3845}
3846
3847impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchResult {
3848    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3849        // struct deserializer
3850        use serde::de::{MapAccess, Visitor};
3851        struct StructVisitor;
3852        impl<'de> Visitor<'de> for StructVisitor {
3853            type Value = FeaturesGetValuesBatchResult;
3854            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3855                f.write_str("a FeaturesGetValuesBatchResult struct")
3856            }
3857            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3858                FeaturesGetValuesBatchResult::internal_deserialize(map)
3859            }
3860        }
3861        deserializer.deserialize_struct("FeaturesGetValuesBatchResult", FEATURES_GET_VALUES_BATCH_RESULT_FIELDS, StructVisitor)
3862    }
3863}
3864
3865impl ::serde::ser::Serialize for FeaturesGetValuesBatchResult {
3866    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3867        // struct serializer
3868        use serde::ser::SerializeStruct;
3869        let mut s = serializer.serialize_struct("FeaturesGetValuesBatchResult", 1)?;
3870        self.internal_serialize::<S>(&mut s)?;
3871        s.end()
3872    }
3873}
3874
3875/// Activity Report Result. Each of the items in the storage report is an array of values, one value
3876/// per day. If there is no data for a day, then the value will be None.
3877#[derive(Debug, Clone, PartialEq, Eq)]
3878#[non_exhaustive] // structs may have more fields added in the future.
3879pub struct GetActivityReport {
3880    /// First date present in the results as 'YYYY-MM-DD' or None.
3881    pub start_date: String,
3882    /// Array of total number of adds by team members.
3883    pub adds: NumberPerDay,
3884    /// Array of number of edits by team members. If the same user edits the same file multiple
3885    /// times this is counted as a single edit.
3886    pub edits: NumberPerDay,
3887    /// Array of total number of deletes by team members.
3888    pub deletes: NumberPerDay,
3889    /// Array of the number of users who have been active in the last 28 days.
3890    pub active_users_28_day: NumberPerDay,
3891    /// Array of the number of users who have been active in the last week.
3892    pub active_users_7_day: NumberPerDay,
3893    /// Array of the number of users who have been active in the last day.
3894    pub active_users_1_day: NumberPerDay,
3895    /// Array of the number of shared folders with some activity in the last 28 days.
3896    pub active_shared_folders_28_day: NumberPerDay,
3897    /// Array of the number of shared folders with some activity in the last week.
3898    pub active_shared_folders_7_day: NumberPerDay,
3899    /// Array of the number of shared folders with some activity in the last day.
3900    pub active_shared_folders_1_day: NumberPerDay,
3901    /// Array of the number of shared links created.
3902    pub shared_links_created: NumberPerDay,
3903    /// Array of the number of views by team users to shared links created by the team.
3904    pub shared_links_viewed_by_team: NumberPerDay,
3905    /// Array of the number of views by users outside of the team to shared links created by the
3906    /// team.
3907    pub shared_links_viewed_by_outside_user: NumberPerDay,
3908    /// Array of the number of views by non-logged-in users to shared links created by the team.
3909    pub shared_links_viewed_by_not_logged_in: NumberPerDay,
3910    /// Array of the total number of views to shared links created by the team.
3911    pub shared_links_viewed_total: NumberPerDay,
3912}
3913
3914impl GetActivityReport {
3915    pub fn new(
3916        start_date: String,
3917        adds: NumberPerDay,
3918        edits: NumberPerDay,
3919        deletes: NumberPerDay,
3920        active_users_28_day: NumberPerDay,
3921        active_users_7_day: NumberPerDay,
3922        active_users_1_day: NumberPerDay,
3923        active_shared_folders_28_day: NumberPerDay,
3924        active_shared_folders_7_day: NumberPerDay,
3925        active_shared_folders_1_day: NumberPerDay,
3926        shared_links_created: NumberPerDay,
3927        shared_links_viewed_by_team: NumberPerDay,
3928        shared_links_viewed_by_outside_user: NumberPerDay,
3929        shared_links_viewed_by_not_logged_in: NumberPerDay,
3930        shared_links_viewed_total: NumberPerDay,
3931    ) -> Self {
3932        GetActivityReport {
3933            start_date,
3934            adds,
3935            edits,
3936            deletes,
3937            active_users_28_day,
3938            active_users_7_day,
3939            active_users_1_day,
3940            active_shared_folders_28_day,
3941            active_shared_folders_7_day,
3942            active_shared_folders_1_day,
3943            shared_links_created,
3944            shared_links_viewed_by_team,
3945            shared_links_viewed_by_outside_user,
3946            shared_links_viewed_by_not_logged_in,
3947            shared_links_viewed_total,
3948        }
3949    }
3950}
3951
3952const GET_ACTIVITY_REPORT_FIELDS: &[&str] = &["start_date",
3953                                              "adds",
3954                                              "edits",
3955                                              "deletes",
3956                                              "active_users_28_day",
3957                                              "active_users_7_day",
3958                                              "active_users_1_day",
3959                                              "active_shared_folders_28_day",
3960                                              "active_shared_folders_7_day",
3961                                              "active_shared_folders_1_day",
3962                                              "shared_links_created",
3963                                              "shared_links_viewed_by_team",
3964                                              "shared_links_viewed_by_outside_user",
3965                                              "shared_links_viewed_by_not_logged_in",
3966                                              "shared_links_viewed_total"];
3967impl GetActivityReport {
3968    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3969        map: V,
3970    ) -> Result<GetActivityReport, V::Error> {
3971        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3972    }
3973
3974    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3975        mut map: V,
3976        optional: bool,
3977    ) -> Result<Option<GetActivityReport>, V::Error> {
3978        let mut field_start_date = None;
3979        let mut field_adds = None;
3980        let mut field_edits = None;
3981        let mut field_deletes = None;
3982        let mut field_active_users_28_day = None;
3983        let mut field_active_users_7_day = None;
3984        let mut field_active_users_1_day = None;
3985        let mut field_active_shared_folders_28_day = None;
3986        let mut field_active_shared_folders_7_day = None;
3987        let mut field_active_shared_folders_1_day = None;
3988        let mut field_shared_links_created = None;
3989        let mut field_shared_links_viewed_by_team = None;
3990        let mut field_shared_links_viewed_by_outside_user = None;
3991        let mut field_shared_links_viewed_by_not_logged_in = None;
3992        let mut field_shared_links_viewed_total = None;
3993        let mut nothing = true;
3994        while let Some(key) = map.next_key::<&str>()? {
3995            nothing = false;
3996            match key {
3997                "start_date" => {
3998                    if field_start_date.is_some() {
3999                        return Err(::serde::de::Error::duplicate_field("start_date"));
4000                    }
4001                    field_start_date = Some(map.next_value()?);
4002                }
4003                "adds" => {
4004                    if field_adds.is_some() {
4005                        return Err(::serde::de::Error::duplicate_field("adds"));
4006                    }
4007                    field_adds = Some(map.next_value()?);
4008                }
4009                "edits" => {
4010                    if field_edits.is_some() {
4011                        return Err(::serde::de::Error::duplicate_field("edits"));
4012                    }
4013                    field_edits = Some(map.next_value()?);
4014                }
4015                "deletes" => {
4016                    if field_deletes.is_some() {
4017                        return Err(::serde::de::Error::duplicate_field("deletes"));
4018                    }
4019                    field_deletes = Some(map.next_value()?);
4020                }
4021                "active_users_28_day" => {
4022                    if field_active_users_28_day.is_some() {
4023                        return Err(::serde::de::Error::duplicate_field("active_users_28_day"));
4024                    }
4025                    field_active_users_28_day = Some(map.next_value()?);
4026                }
4027                "active_users_7_day" => {
4028                    if field_active_users_7_day.is_some() {
4029                        return Err(::serde::de::Error::duplicate_field("active_users_7_day"));
4030                    }
4031                    field_active_users_7_day = Some(map.next_value()?);
4032                }
4033                "active_users_1_day" => {
4034                    if field_active_users_1_day.is_some() {
4035                        return Err(::serde::de::Error::duplicate_field("active_users_1_day"));
4036                    }
4037                    field_active_users_1_day = Some(map.next_value()?);
4038                }
4039                "active_shared_folders_28_day" => {
4040                    if field_active_shared_folders_28_day.is_some() {
4041                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_28_day"));
4042                    }
4043                    field_active_shared_folders_28_day = Some(map.next_value()?);
4044                }
4045                "active_shared_folders_7_day" => {
4046                    if field_active_shared_folders_7_day.is_some() {
4047                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_7_day"));
4048                    }
4049                    field_active_shared_folders_7_day = Some(map.next_value()?);
4050                }
4051                "active_shared_folders_1_day" => {
4052                    if field_active_shared_folders_1_day.is_some() {
4053                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_1_day"));
4054                    }
4055                    field_active_shared_folders_1_day = Some(map.next_value()?);
4056                }
4057                "shared_links_created" => {
4058                    if field_shared_links_created.is_some() {
4059                        return Err(::serde::de::Error::duplicate_field("shared_links_created"));
4060                    }
4061                    field_shared_links_created = Some(map.next_value()?);
4062                }
4063                "shared_links_viewed_by_team" => {
4064                    if field_shared_links_viewed_by_team.is_some() {
4065                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_team"));
4066                    }
4067                    field_shared_links_viewed_by_team = Some(map.next_value()?);
4068                }
4069                "shared_links_viewed_by_outside_user" => {
4070                    if field_shared_links_viewed_by_outside_user.is_some() {
4071                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_outside_user"));
4072                    }
4073                    field_shared_links_viewed_by_outside_user = Some(map.next_value()?);
4074                }
4075                "shared_links_viewed_by_not_logged_in" => {
4076                    if field_shared_links_viewed_by_not_logged_in.is_some() {
4077                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_not_logged_in"));
4078                    }
4079                    field_shared_links_viewed_by_not_logged_in = Some(map.next_value()?);
4080                }
4081                "shared_links_viewed_total" => {
4082                    if field_shared_links_viewed_total.is_some() {
4083                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_total"));
4084                    }
4085                    field_shared_links_viewed_total = Some(map.next_value()?);
4086                }
4087                _ => {
4088                    // unknown field allowed and ignored
4089                    map.next_value::<::serde_json::Value>()?;
4090                }
4091            }
4092        }
4093        if optional && nothing {
4094            return Ok(None);
4095        }
4096        let result = GetActivityReport {
4097            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4098            adds: field_adds.ok_or_else(|| ::serde::de::Error::missing_field("adds"))?,
4099            edits: field_edits.ok_or_else(|| ::serde::de::Error::missing_field("edits"))?,
4100            deletes: field_deletes.ok_or_else(|| ::serde::de::Error::missing_field("deletes"))?,
4101            active_users_28_day: field_active_users_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_28_day"))?,
4102            active_users_7_day: field_active_users_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_7_day"))?,
4103            active_users_1_day: field_active_users_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_1_day"))?,
4104            active_shared_folders_28_day: field_active_shared_folders_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_28_day"))?,
4105            active_shared_folders_7_day: field_active_shared_folders_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_7_day"))?,
4106            active_shared_folders_1_day: field_active_shared_folders_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_1_day"))?,
4107            shared_links_created: field_shared_links_created.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_created"))?,
4108            shared_links_viewed_by_team: field_shared_links_viewed_by_team.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_by_team"))?,
4109            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"))?,
4110            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"))?,
4111            shared_links_viewed_total: field_shared_links_viewed_total.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_total"))?,
4112        };
4113        Ok(Some(result))
4114    }
4115
4116    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4117        &self,
4118        s: &mut S::SerializeStruct,
4119    ) -> Result<(), S::Error> {
4120        use serde::ser::SerializeStruct;
4121        s.serialize_field("start_date", &self.start_date)?;
4122        s.serialize_field("adds", &self.adds)?;
4123        s.serialize_field("edits", &self.edits)?;
4124        s.serialize_field("deletes", &self.deletes)?;
4125        s.serialize_field("active_users_28_day", &self.active_users_28_day)?;
4126        s.serialize_field("active_users_7_day", &self.active_users_7_day)?;
4127        s.serialize_field("active_users_1_day", &self.active_users_1_day)?;
4128        s.serialize_field("active_shared_folders_28_day", &self.active_shared_folders_28_day)?;
4129        s.serialize_field("active_shared_folders_7_day", &self.active_shared_folders_7_day)?;
4130        s.serialize_field("active_shared_folders_1_day", &self.active_shared_folders_1_day)?;
4131        s.serialize_field("shared_links_created", &self.shared_links_created)?;
4132        s.serialize_field("shared_links_viewed_by_team", &self.shared_links_viewed_by_team)?;
4133        s.serialize_field("shared_links_viewed_by_outside_user", &self.shared_links_viewed_by_outside_user)?;
4134        s.serialize_field("shared_links_viewed_by_not_logged_in", &self.shared_links_viewed_by_not_logged_in)?;
4135        s.serialize_field("shared_links_viewed_total", &self.shared_links_viewed_total)?;
4136        Ok(())
4137    }
4138}
4139
4140impl<'de> ::serde::de::Deserialize<'de> for GetActivityReport {
4141    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4142        // struct deserializer
4143        use serde::de::{MapAccess, Visitor};
4144        struct StructVisitor;
4145        impl<'de> Visitor<'de> for StructVisitor {
4146            type Value = GetActivityReport;
4147            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4148                f.write_str("a GetActivityReport struct")
4149            }
4150            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4151                GetActivityReport::internal_deserialize(map)
4152            }
4153        }
4154        deserializer.deserialize_struct("GetActivityReport", GET_ACTIVITY_REPORT_FIELDS, StructVisitor)
4155    }
4156}
4157
4158impl ::serde::ser::Serialize for GetActivityReport {
4159    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4160        // struct serializer
4161        use serde::ser::SerializeStruct;
4162        let mut s = serializer.serialize_struct("GetActivityReport", 15)?;
4163        self.internal_serialize::<S>(&mut s)?;
4164        s.end()
4165    }
4166}
4167
4168// struct extends BaseDfbReport
4169impl From<GetActivityReport> for BaseDfbReport {
4170    fn from(subtype: GetActivityReport) -> Self {
4171        Self {
4172            start_date: subtype.start_date,
4173        }
4174    }
4175}
4176/// Devices Report Result. Contains subsections for different time ranges of activity. Each of the
4177/// items in each subsection of the storage report is an array of values, one value per day. If
4178/// there is no data for a day, then the value will be None.
4179#[derive(Debug, Clone, PartialEq, Eq)]
4180#[non_exhaustive] // structs may have more fields added in the future.
4181pub struct GetDevicesReport {
4182    /// First date present in the results as 'YYYY-MM-DD' or None.
4183    pub start_date: String,
4184    /// Report of the number of devices active in the last day.
4185    pub active_1_day: DevicesActive,
4186    /// Report of the number of devices active in the last 7 days.
4187    pub active_7_day: DevicesActive,
4188    /// Report of the number of devices active in the last 28 days.
4189    pub active_28_day: DevicesActive,
4190}
4191
4192impl GetDevicesReport {
4193    pub fn new(
4194        start_date: String,
4195        active_1_day: DevicesActive,
4196        active_7_day: DevicesActive,
4197        active_28_day: DevicesActive,
4198    ) -> Self {
4199        GetDevicesReport {
4200            start_date,
4201            active_1_day,
4202            active_7_day,
4203            active_28_day,
4204        }
4205    }
4206}
4207
4208const GET_DEVICES_REPORT_FIELDS: &[&str] = &["start_date",
4209                                             "active_1_day",
4210                                             "active_7_day",
4211                                             "active_28_day"];
4212impl GetDevicesReport {
4213    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4214        map: V,
4215    ) -> Result<GetDevicesReport, V::Error> {
4216        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4217    }
4218
4219    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4220        mut map: V,
4221        optional: bool,
4222    ) -> Result<Option<GetDevicesReport>, V::Error> {
4223        let mut field_start_date = None;
4224        let mut field_active_1_day = None;
4225        let mut field_active_7_day = None;
4226        let mut field_active_28_day = None;
4227        let mut nothing = true;
4228        while let Some(key) = map.next_key::<&str>()? {
4229            nothing = false;
4230            match key {
4231                "start_date" => {
4232                    if field_start_date.is_some() {
4233                        return Err(::serde::de::Error::duplicate_field("start_date"));
4234                    }
4235                    field_start_date = Some(map.next_value()?);
4236                }
4237                "active_1_day" => {
4238                    if field_active_1_day.is_some() {
4239                        return Err(::serde::de::Error::duplicate_field("active_1_day"));
4240                    }
4241                    field_active_1_day = Some(map.next_value()?);
4242                }
4243                "active_7_day" => {
4244                    if field_active_7_day.is_some() {
4245                        return Err(::serde::de::Error::duplicate_field("active_7_day"));
4246                    }
4247                    field_active_7_day = Some(map.next_value()?);
4248                }
4249                "active_28_day" => {
4250                    if field_active_28_day.is_some() {
4251                        return Err(::serde::de::Error::duplicate_field("active_28_day"));
4252                    }
4253                    field_active_28_day = Some(map.next_value()?);
4254                }
4255                _ => {
4256                    // unknown field allowed and ignored
4257                    map.next_value::<::serde_json::Value>()?;
4258                }
4259            }
4260        }
4261        if optional && nothing {
4262            return Ok(None);
4263        }
4264        let result = GetDevicesReport {
4265            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4266            active_1_day: field_active_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_1_day"))?,
4267            active_7_day: field_active_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_7_day"))?,
4268            active_28_day: field_active_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_28_day"))?,
4269        };
4270        Ok(Some(result))
4271    }
4272
4273    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4274        &self,
4275        s: &mut S::SerializeStruct,
4276    ) -> Result<(), S::Error> {
4277        use serde::ser::SerializeStruct;
4278        s.serialize_field("start_date", &self.start_date)?;
4279        s.serialize_field("active_1_day", &self.active_1_day)?;
4280        s.serialize_field("active_7_day", &self.active_7_day)?;
4281        s.serialize_field("active_28_day", &self.active_28_day)?;
4282        Ok(())
4283    }
4284}
4285
4286impl<'de> ::serde::de::Deserialize<'de> for GetDevicesReport {
4287    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4288        // struct deserializer
4289        use serde::de::{MapAccess, Visitor};
4290        struct StructVisitor;
4291        impl<'de> Visitor<'de> for StructVisitor {
4292            type Value = GetDevicesReport;
4293            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4294                f.write_str("a GetDevicesReport struct")
4295            }
4296            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4297                GetDevicesReport::internal_deserialize(map)
4298            }
4299        }
4300        deserializer.deserialize_struct("GetDevicesReport", GET_DEVICES_REPORT_FIELDS, StructVisitor)
4301    }
4302}
4303
4304impl ::serde::ser::Serialize for GetDevicesReport {
4305    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4306        // struct serializer
4307        use serde::ser::SerializeStruct;
4308        let mut s = serializer.serialize_struct("GetDevicesReport", 4)?;
4309        self.internal_serialize::<S>(&mut s)?;
4310        s.end()
4311    }
4312}
4313
4314// struct extends BaseDfbReport
4315impl From<GetDevicesReport> for BaseDfbReport {
4316    fn from(subtype: GetDevicesReport) -> Self {
4317        Self {
4318            start_date: subtype.start_date,
4319        }
4320    }
4321}
4322/// Membership Report Result. Each of the items in the storage report is an array of values, one
4323/// value per day. If there is no data for a day, then the value will be None.
4324#[derive(Debug, Clone, PartialEq, Eq)]
4325#[non_exhaustive] // structs may have more fields added in the future.
4326pub struct GetMembershipReport {
4327    /// First date present in the results as 'YYYY-MM-DD' or None.
4328    pub start_date: String,
4329    /// Team size, for each day.
4330    pub team_size: NumberPerDay,
4331    /// The number of pending invites to the team, for each day.
4332    pub pending_invites: NumberPerDay,
4333    /// The number of members that joined the team, for each day.
4334    pub members_joined: NumberPerDay,
4335    /// The number of suspended team members, for each day.
4336    pub suspended_members: NumberPerDay,
4337    /// The total number of licenses the team has, for each day.
4338    pub licenses: NumberPerDay,
4339}
4340
4341impl GetMembershipReport {
4342    pub fn new(
4343        start_date: String,
4344        team_size: NumberPerDay,
4345        pending_invites: NumberPerDay,
4346        members_joined: NumberPerDay,
4347        suspended_members: NumberPerDay,
4348        licenses: NumberPerDay,
4349    ) -> Self {
4350        GetMembershipReport {
4351            start_date,
4352            team_size,
4353            pending_invites,
4354            members_joined,
4355            suspended_members,
4356            licenses,
4357        }
4358    }
4359}
4360
4361const GET_MEMBERSHIP_REPORT_FIELDS: &[&str] = &["start_date",
4362                                                "team_size",
4363                                                "pending_invites",
4364                                                "members_joined",
4365                                                "suspended_members",
4366                                                "licenses"];
4367impl GetMembershipReport {
4368    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4369        map: V,
4370    ) -> Result<GetMembershipReport, V::Error> {
4371        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4372    }
4373
4374    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4375        mut map: V,
4376        optional: bool,
4377    ) -> Result<Option<GetMembershipReport>, V::Error> {
4378        let mut field_start_date = None;
4379        let mut field_team_size = None;
4380        let mut field_pending_invites = None;
4381        let mut field_members_joined = None;
4382        let mut field_suspended_members = None;
4383        let mut field_licenses = None;
4384        let mut nothing = true;
4385        while let Some(key) = map.next_key::<&str>()? {
4386            nothing = false;
4387            match key {
4388                "start_date" => {
4389                    if field_start_date.is_some() {
4390                        return Err(::serde::de::Error::duplicate_field("start_date"));
4391                    }
4392                    field_start_date = Some(map.next_value()?);
4393                }
4394                "team_size" => {
4395                    if field_team_size.is_some() {
4396                        return Err(::serde::de::Error::duplicate_field("team_size"));
4397                    }
4398                    field_team_size = Some(map.next_value()?);
4399                }
4400                "pending_invites" => {
4401                    if field_pending_invites.is_some() {
4402                        return Err(::serde::de::Error::duplicate_field("pending_invites"));
4403                    }
4404                    field_pending_invites = Some(map.next_value()?);
4405                }
4406                "members_joined" => {
4407                    if field_members_joined.is_some() {
4408                        return Err(::serde::de::Error::duplicate_field("members_joined"));
4409                    }
4410                    field_members_joined = Some(map.next_value()?);
4411                }
4412                "suspended_members" => {
4413                    if field_suspended_members.is_some() {
4414                        return Err(::serde::de::Error::duplicate_field("suspended_members"));
4415                    }
4416                    field_suspended_members = Some(map.next_value()?);
4417                }
4418                "licenses" => {
4419                    if field_licenses.is_some() {
4420                        return Err(::serde::de::Error::duplicate_field("licenses"));
4421                    }
4422                    field_licenses = Some(map.next_value()?);
4423                }
4424                _ => {
4425                    // unknown field allowed and ignored
4426                    map.next_value::<::serde_json::Value>()?;
4427                }
4428            }
4429        }
4430        if optional && nothing {
4431            return Ok(None);
4432        }
4433        let result = GetMembershipReport {
4434            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4435            team_size: field_team_size.ok_or_else(|| ::serde::de::Error::missing_field("team_size"))?,
4436            pending_invites: field_pending_invites.ok_or_else(|| ::serde::de::Error::missing_field("pending_invites"))?,
4437            members_joined: field_members_joined.ok_or_else(|| ::serde::de::Error::missing_field("members_joined"))?,
4438            suspended_members: field_suspended_members.ok_or_else(|| ::serde::de::Error::missing_field("suspended_members"))?,
4439            licenses: field_licenses.ok_or_else(|| ::serde::de::Error::missing_field("licenses"))?,
4440        };
4441        Ok(Some(result))
4442    }
4443
4444    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4445        &self,
4446        s: &mut S::SerializeStruct,
4447    ) -> Result<(), S::Error> {
4448        use serde::ser::SerializeStruct;
4449        s.serialize_field("start_date", &self.start_date)?;
4450        s.serialize_field("team_size", &self.team_size)?;
4451        s.serialize_field("pending_invites", &self.pending_invites)?;
4452        s.serialize_field("members_joined", &self.members_joined)?;
4453        s.serialize_field("suspended_members", &self.suspended_members)?;
4454        s.serialize_field("licenses", &self.licenses)?;
4455        Ok(())
4456    }
4457}
4458
4459impl<'de> ::serde::de::Deserialize<'de> for GetMembershipReport {
4460    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4461        // struct deserializer
4462        use serde::de::{MapAccess, Visitor};
4463        struct StructVisitor;
4464        impl<'de> Visitor<'de> for StructVisitor {
4465            type Value = GetMembershipReport;
4466            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4467                f.write_str("a GetMembershipReport struct")
4468            }
4469            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4470                GetMembershipReport::internal_deserialize(map)
4471            }
4472        }
4473        deserializer.deserialize_struct("GetMembershipReport", GET_MEMBERSHIP_REPORT_FIELDS, StructVisitor)
4474    }
4475}
4476
4477impl ::serde::ser::Serialize for GetMembershipReport {
4478    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4479        // struct serializer
4480        use serde::ser::SerializeStruct;
4481        let mut s = serializer.serialize_struct("GetMembershipReport", 6)?;
4482        self.internal_serialize::<S>(&mut s)?;
4483        s.end()
4484    }
4485}
4486
4487// struct extends BaseDfbReport
4488impl From<GetMembershipReport> for BaseDfbReport {
4489    fn from(subtype: GetMembershipReport) -> Self {
4490        Self {
4491            start_date: subtype.start_date,
4492        }
4493    }
4494}
4495/// Storage Report Result. Each of the items in the storage report is an array of values, one value
4496/// per day. If there is no data for a day, then the value will be None.
4497#[derive(Debug, Clone, PartialEq, Eq)]
4498#[non_exhaustive] // structs may have more fields added in the future.
4499pub struct GetStorageReport {
4500    /// First date present in the results as 'YYYY-MM-DD' or None.
4501    pub start_date: String,
4502    /// Sum of the shared, unshared, and datastore usages, for each day.
4503    pub total_usage: NumberPerDay,
4504    /// Array of the combined size (bytes) of team members' shared folders, for each day.
4505    pub shared_usage: NumberPerDay,
4506    /// Array of the combined size (bytes) of team members' root namespaces, for each day.
4507    pub unshared_usage: NumberPerDay,
4508    /// Array of the number of shared folders owned by team members, for each day.
4509    pub shared_folders: NumberPerDay,
4510    /// Array of storage summaries of team members' account sizes. Each storage summary is an array
4511    /// of key, value pairs, where each pair describes a storage bucket. The key indicates the upper
4512    /// bound of the bucket and the value is the number of users in that bucket. There is one such
4513    /// summary per day. If there is no data for a day, the storage summary will be empty.
4514    pub member_storage_map: Vec<Vec<StorageBucket>>,
4515}
4516
4517impl GetStorageReport {
4518    pub fn new(
4519        start_date: String,
4520        total_usage: NumberPerDay,
4521        shared_usage: NumberPerDay,
4522        unshared_usage: NumberPerDay,
4523        shared_folders: NumberPerDay,
4524        member_storage_map: Vec<Vec<StorageBucket>>,
4525    ) -> Self {
4526        GetStorageReport {
4527            start_date,
4528            total_usage,
4529            shared_usage,
4530            unshared_usage,
4531            shared_folders,
4532            member_storage_map,
4533        }
4534    }
4535}
4536
4537const GET_STORAGE_REPORT_FIELDS: &[&str] = &["start_date",
4538                                             "total_usage",
4539                                             "shared_usage",
4540                                             "unshared_usage",
4541                                             "shared_folders",
4542                                             "member_storage_map"];
4543impl GetStorageReport {
4544    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4545        map: V,
4546    ) -> Result<GetStorageReport, V::Error> {
4547        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4548    }
4549
4550    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4551        mut map: V,
4552        optional: bool,
4553    ) -> Result<Option<GetStorageReport>, V::Error> {
4554        let mut field_start_date = None;
4555        let mut field_total_usage = None;
4556        let mut field_shared_usage = None;
4557        let mut field_unshared_usage = None;
4558        let mut field_shared_folders = None;
4559        let mut field_member_storage_map = None;
4560        let mut nothing = true;
4561        while let Some(key) = map.next_key::<&str>()? {
4562            nothing = false;
4563            match key {
4564                "start_date" => {
4565                    if field_start_date.is_some() {
4566                        return Err(::serde::de::Error::duplicate_field("start_date"));
4567                    }
4568                    field_start_date = Some(map.next_value()?);
4569                }
4570                "total_usage" => {
4571                    if field_total_usage.is_some() {
4572                        return Err(::serde::de::Error::duplicate_field("total_usage"));
4573                    }
4574                    field_total_usage = Some(map.next_value()?);
4575                }
4576                "shared_usage" => {
4577                    if field_shared_usage.is_some() {
4578                        return Err(::serde::de::Error::duplicate_field("shared_usage"));
4579                    }
4580                    field_shared_usage = Some(map.next_value()?);
4581                }
4582                "unshared_usage" => {
4583                    if field_unshared_usage.is_some() {
4584                        return Err(::serde::de::Error::duplicate_field("unshared_usage"));
4585                    }
4586                    field_unshared_usage = Some(map.next_value()?);
4587                }
4588                "shared_folders" => {
4589                    if field_shared_folders.is_some() {
4590                        return Err(::serde::de::Error::duplicate_field("shared_folders"));
4591                    }
4592                    field_shared_folders = Some(map.next_value()?);
4593                }
4594                "member_storage_map" => {
4595                    if field_member_storage_map.is_some() {
4596                        return Err(::serde::de::Error::duplicate_field("member_storage_map"));
4597                    }
4598                    field_member_storage_map = Some(map.next_value()?);
4599                }
4600                _ => {
4601                    // unknown field allowed and ignored
4602                    map.next_value::<::serde_json::Value>()?;
4603                }
4604            }
4605        }
4606        if optional && nothing {
4607            return Ok(None);
4608        }
4609        let result = GetStorageReport {
4610            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4611            total_usage: field_total_usage.ok_or_else(|| ::serde::de::Error::missing_field("total_usage"))?,
4612            shared_usage: field_shared_usage.ok_or_else(|| ::serde::de::Error::missing_field("shared_usage"))?,
4613            unshared_usage: field_unshared_usage.ok_or_else(|| ::serde::de::Error::missing_field("unshared_usage"))?,
4614            shared_folders: field_shared_folders.ok_or_else(|| ::serde::de::Error::missing_field("shared_folders"))?,
4615            member_storage_map: field_member_storage_map.ok_or_else(|| ::serde::de::Error::missing_field("member_storage_map"))?,
4616        };
4617        Ok(Some(result))
4618    }
4619
4620    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4621        &self,
4622        s: &mut S::SerializeStruct,
4623    ) -> Result<(), S::Error> {
4624        use serde::ser::SerializeStruct;
4625        s.serialize_field("start_date", &self.start_date)?;
4626        s.serialize_field("total_usage", &self.total_usage)?;
4627        s.serialize_field("shared_usage", &self.shared_usage)?;
4628        s.serialize_field("unshared_usage", &self.unshared_usage)?;
4629        s.serialize_field("shared_folders", &self.shared_folders)?;
4630        s.serialize_field("member_storage_map", &self.member_storage_map)?;
4631        Ok(())
4632    }
4633}
4634
4635impl<'de> ::serde::de::Deserialize<'de> for GetStorageReport {
4636    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4637        // struct deserializer
4638        use serde::de::{MapAccess, Visitor};
4639        struct StructVisitor;
4640        impl<'de> Visitor<'de> for StructVisitor {
4641            type Value = GetStorageReport;
4642            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4643                f.write_str("a GetStorageReport struct")
4644            }
4645            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4646                GetStorageReport::internal_deserialize(map)
4647            }
4648        }
4649        deserializer.deserialize_struct("GetStorageReport", GET_STORAGE_REPORT_FIELDS, StructVisitor)
4650    }
4651}
4652
4653impl ::serde::ser::Serialize for GetStorageReport {
4654    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4655        // struct serializer
4656        use serde::ser::SerializeStruct;
4657        let mut s = serializer.serialize_struct("GetStorageReport", 6)?;
4658        self.internal_serialize::<S>(&mut s)?;
4659        s.end()
4660    }
4661}
4662
4663// struct extends BaseDfbReport
4664impl From<GetStorageReport> for BaseDfbReport {
4665    fn from(subtype: GetStorageReport) -> Self {
4666        Self {
4667            start_date: subtype.start_date,
4668        }
4669    }
4670}
4671/// Role of a user in group.
4672#[derive(Debug, Clone, PartialEq, Eq)]
4673pub enum GroupAccessType {
4674    /// User is a member of the group, but has no special permissions.
4675    Member,
4676    /// User can rename the group, and add/remove members.
4677    Owner,
4678}
4679
4680impl<'de> ::serde::de::Deserialize<'de> for GroupAccessType {
4681    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4682        // union deserializer
4683        use serde::de::{self, MapAccess, Visitor};
4684        struct EnumVisitor;
4685        impl<'de> Visitor<'de> for EnumVisitor {
4686            type Value = GroupAccessType;
4687            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4688                f.write_str("a GroupAccessType structure")
4689            }
4690            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4691                let tag: &str = match map.next_key()? {
4692                    Some(".tag") => map.next_value()?,
4693                    _ => return Err(de::Error::missing_field(".tag"))
4694                };
4695                let value = match tag {
4696                    "member" => GroupAccessType::Member,
4697                    "owner" => GroupAccessType::Owner,
4698                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
4699                };
4700                crate::eat_json_fields(&mut map)?;
4701                Ok(value)
4702            }
4703        }
4704        const VARIANTS: &[&str] = &["member",
4705                                    "owner"];
4706        deserializer.deserialize_struct("GroupAccessType", VARIANTS, EnumVisitor)
4707    }
4708}
4709
4710impl ::serde::ser::Serialize for GroupAccessType {
4711    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4712        // union serializer
4713        use serde::ser::SerializeStruct;
4714        match self {
4715            GroupAccessType::Member => {
4716                // unit
4717                let mut s = serializer.serialize_struct("GroupAccessType", 1)?;
4718                s.serialize_field(".tag", "member")?;
4719                s.end()
4720            }
4721            GroupAccessType::Owner => {
4722                // unit
4723                let mut s = serializer.serialize_struct("GroupAccessType", 1)?;
4724                s.serialize_field(".tag", "owner")?;
4725                s.end()
4726            }
4727        }
4728    }
4729}
4730
4731#[derive(Debug, Clone, PartialEq, Eq)]
4732#[non_exhaustive] // structs may have more fields added in the future.
4733pub struct GroupCreateArg {
4734    /// Group name.
4735    pub group_name: String,
4736    /// Automatically add the creator of the group.
4737    pub add_creator_as_owner: bool,
4738    /// The creator of a team can associate an arbitrary external ID to the group.
4739    pub group_external_id: Option<crate::types::team_common::GroupExternalId>,
4740    /// Whether the team can be managed by selected users, or only by team admins.
4741    pub group_management_type: Option<crate::types::team_common::GroupManagementType>,
4742}
4743
4744impl GroupCreateArg {
4745    pub fn new(group_name: String) -> Self {
4746        GroupCreateArg {
4747            group_name,
4748            add_creator_as_owner: false,
4749            group_external_id: None,
4750            group_management_type: None,
4751        }
4752    }
4753
4754    pub fn with_add_creator_as_owner(mut self, value: bool) -> Self {
4755        self.add_creator_as_owner = value;
4756        self
4757    }
4758
4759    pub fn with_group_external_id(
4760        mut self,
4761        value: crate::types::team_common::GroupExternalId,
4762    ) -> Self {
4763        self.group_external_id = Some(value);
4764        self
4765    }
4766
4767    pub fn with_group_management_type(
4768        mut self,
4769        value: crate::types::team_common::GroupManagementType,
4770    ) -> Self {
4771        self.group_management_type = Some(value);
4772        self
4773    }
4774}
4775
4776const GROUP_CREATE_ARG_FIELDS: &[&str] = &["group_name",
4777                                           "add_creator_as_owner",
4778                                           "group_external_id",
4779                                           "group_management_type"];
4780impl GroupCreateArg {
4781    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4782        map: V,
4783    ) -> Result<GroupCreateArg, V::Error> {
4784        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4785    }
4786
4787    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4788        mut map: V,
4789        optional: bool,
4790    ) -> Result<Option<GroupCreateArg>, V::Error> {
4791        let mut field_group_name = None;
4792        let mut field_add_creator_as_owner = None;
4793        let mut field_group_external_id = None;
4794        let mut field_group_management_type = None;
4795        let mut nothing = true;
4796        while let Some(key) = map.next_key::<&str>()? {
4797            nothing = false;
4798            match key {
4799                "group_name" => {
4800                    if field_group_name.is_some() {
4801                        return Err(::serde::de::Error::duplicate_field("group_name"));
4802                    }
4803                    field_group_name = Some(map.next_value()?);
4804                }
4805                "add_creator_as_owner" => {
4806                    if field_add_creator_as_owner.is_some() {
4807                        return Err(::serde::de::Error::duplicate_field("add_creator_as_owner"));
4808                    }
4809                    field_add_creator_as_owner = Some(map.next_value()?);
4810                }
4811                "group_external_id" => {
4812                    if field_group_external_id.is_some() {
4813                        return Err(::serde::de::Error::duplicate_field("group_external_id"));
4814                    }
4815                    field_group_external_id = Some(map.next_value()?);
4816                }
4817                "group_management_type" => {
4818                    if field_group_management_type.is_some() {
4819                        return Err(::serde::de::Error::duplicate_field("group_management_type"));
4820                    }
4821                    field_group_management_type = Some(map.next_value()?);
4822                }
4823                _ => {
4824                    // unknown field allowed and ignored
4825                    map.next_value::<::serde_json::Value>()?;
4826                }
4827            }
4828        }
4829        if optional && nothing {
4830            return Ok(None);
4831        }
4832        let result = GroupCreateArg {
4833            group_name: field_group_name.ok_or_else(|| ::serde::de::Error::missing_field("group_name"))?,
4834            add_creator_as_owner: field_add_creator_as_owner.unwrap_or(false),
4835            group_external_id: field_group_external_id.and_then(Option::flatten),
4836            group_management_type: field_group_management_type.and_then(Option::flatten),
4837        };
4838        Ok(Some(result))
4839    }
4840
4841    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4842        &self,
4843        s: &mut S::SerializeStruct,
4844    ) -> Result<(), S::Error> {
4845        use serde::ser::SerializeStruct;
4846        s.serialize_field("group_name", &self.group_name)?;
4847        if self.add_creator_as_owner {
4848            s.serialize_field("add_creator_as_owner", &self.add_creator_as_owner)?;
4849        }
4850        if let Some(val) = &self.group_external_id {
4851            s.serialize_field("group_external_id", val)?;
4852        }
4853        if let Some(val) = &self.group_management_type {
4854            s.serialize_field("group_management_type", val)?;
4855        }
4856        Ok(())
4857    }
4858}
4859
4860impl<'de> ::serde::de::Deserialize<'de> for GroupCreateArg {
4861    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4862        // struct deserializer
4863        use serde::de::{MapAccess, Visitor};
4864        struct StructVisitor;
4865        impl<'de> Visitor<'de> for StructVisitor {
4866            type Value = GroupCreateArg;
4867            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4868                f.write_str("a GroupCreateArg struct")
4869            }
4870            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4871                GroupCreateArg::internal_deserialize(map)
4872            }
4873        }
4874        deserializer.deserialize_struct("GroupCreateArg", GROUP_CREATE_ARG_FIELDS, StructVisitor)
4875    }
4876}
4877
4878impl ::serde::ser::Serialize for GroupCreateArg {
4879    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4880        // struct serializer
4881        use serde::ser::SerializeStruct;
4882        let mut s = serializer.serialize_struct("GroupCreateArg", 4)?;
4883        self.internal_serialize::<S>(&mut s)?;
4884        s.end()
4885    }
4886}
4887
4888#[derive(Debug, Clone, PartialEq, Eq)]
4889#[non_exhaustive] // variants may be added in the future
4890pub enum GroupCreateError {
4891    /// The requested group name is already being used by another group.
4892    GroupNameAlreadyUsed,
4893    /// Group name is empty or has invalid characters.
4894    GroupNameInvalid,
4895    /// The requested external ID is already being used by another group.
4896    ExternalIdAlreadyInUse,
4897    /// System-managed group cannot be manually created.
4898    SystemManagedGroupDisallowed,
4899    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4900    /// typically indicates that this SDK version is out of date.
4901    Other,
4902}
4903
4904impl<'de> ::serde::de::Deserialize<'de> for GroupCreateError {
4905    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4906        // union deserializer
4907        use serde::de::{self, MapAccess, Visitor};
4908        struct EnumVisitor;
4909        impl<'de> Visitor<'de> for EnumVisitor {
4910            type Value = GroupCreateError;
4911            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4912                f.write_str("a GroupCreateError structure")
4913            }
4914            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4915                let tag: &str = match map.next_key()? {
4916                    Some(".tag") => map.next_value()?,
4917                    _ => return Err(de::Error::missing_field(".tag"))
4918                };
4919                let value = match tag {
4920                    "group_name_already_used" => GroupCreateError::GroupNameAlreadyUsed,
4921                    "group_name_invalid" => GroupCreateError::GroupNameInvalid,
4922                    "external_id_already_in_use" => GroupCreateError::ExternalIdAlreadyInUse,
4923                    "system_managed_group_disallowed" => GroupCreateError::SystemManagedGroupDisallowed,
4924                    _ => GroupCreateError::Other,
4925                };
4926                crate::eat_json_fields(&mut map)?;
4927                Ok(value)
4928            }
4929        }
4930        const VARIANTS: &[&str] = &["group_name_already_used",
4931                                    "group_name_invalid",
4932                                    "external_id_already_in_use",
4933                                    "system_managed_group_disallowed",
4934                                    "other"];
4935        deserializer.deserialize_struct("GroupCreateError", VARIANTS, EnumVisitor)
4936    }
4937}
4938
4939impl ::serde::ser::Serialize for GroupCreateError {
4940    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4941        // union serializer
4942        use serde::ser::SerializeStruct;
4943        match self {
4944            GroupCreateError::GroupNameAlreadyUsed => {
4945                // unit
4946                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4947                s.serialize_field(".tag", "group_name_already_used")?;
4948                s.end()
4949            }
4950            GroupCreateError::GroupNameInvalid => {
4951                // unit
4952                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4953                s.serialize_field(".tag", "group_name_invalid")?;
4954                s.end()
4955            }
4956            GroupCreateError::ExternalIdAlreadyInUse => {
4957                // unit
4958                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4959                s.serialize_field(".tag", "external_id_already_in_use")?;
4960                s.end()
4961            }
4962            GroupCreateError::SystemManagedGroupDisallowed => {
4963                // unit
4964                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4965                s.serialize_field(".tag", "system_managed_group_disallowed")?;
4966                s.end()
4967            }
4968            GroupCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4969        }
4970    }
4971}
4972
4973impl ::std::error::Error for GroupCreateError {
4974}
4975
4976impl ::std::fmt::Display for GroupCreateError {
4977    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4978        match self {
4979            GroupCreateError::GroupNameAlreadyUsed => f.write_str("The requested group name is already being used by another group."),
4980            GroupCreateError::GroupNameInvalid => f.write_str("Group name is empty or has invalid characters."),
4981            GroupCreateError::ExternalIdAlreadyInUse => f.write_str("The requested external ID is already being used by another group."),
4982            GroupCreateError::SystemManagedGroupDisallowed => f.write_str("System-managed group cannot be manually created."),
4983            _ => write!(f, "{:?}", *self),
4984        }
4985    }
4986}
4987
4988#[derive(Debug, Clone, PartialEq, Eq)]
4989#[non_exhaustive] // variants may be added in the future
4990pub enum GroupDeleteError {
4991    /// No matching group found. No groups match the specified group ID.
4992    GroupNotFound,
4993    /// This operation is not supported on system-managed groups.
4994    SystemManagedGroupDisallowed,
4995    /// This group has already been deleted.
4996    GroupAlreadyDeleted,
4997    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4998    /// typically indicates that this SDK version is out of date.
4999    Other,
5000}
5001
5002impl<'de> ::serde::de::Deserialize<'de> for GroupDeleteError {
5003    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5004        // union deserializer
5005        use serde::de::{self, MapAccess, Visitor};
5006        struct EnumVisitor;
5007        impl<'de> Visitor<'de> for EnumVisitor {
5008            type Value = GroupDeleteError;
5009            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5010                f.write_str("a GroupDeleteError structure")
5011            }
5012            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5013                let tag: &str = match map.next_key()? {
5014                    Some(".tag") => map.next_value()?,
5015                    _ => return Err(de::Error::missing_field(".tag"))
5016                };
5017                let value = match tag {
5018                    "group_not_found" => GroupDeleteError::GroupNotFound,
5019                    "system_managed_group_disallowed" => GroupDeleteError::SystemManagedGroupDisallowed,
5020                    "group_already_deleted" => GroupDeleteError::GroupAlreadyDeleted,
5021                    _ => GroupDeleteError::Other,
5022                };
5023                crate::eat_json_fields(&mut map)?;
5024                Ok(value)
5025            }
5026        }
5027        const VARIANTS: &[&str] = &["group_not_found",
5028                                    "other",
5029                                    "system_managed_group_disallowed",
5030                                    "group_already_deleted"];
5031        deserializer.deserialize_struct("GroupDeleteError", VARIANTS, EnumVisitor)
5032    }
5033}
5034
5035impl ::serde::ser::Serialize for GroupDeleteError {
5036    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5037        // union serializer
5038        use serde::ser::SerializeStruct;
5039        match self {
5040            GroupDeleteError::GroupNotFound => {
5041                // unit
5042                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5043                s.serialize_field(".tag", "group_not_found")?;
5044                s.end()
5045            }
5046            GroupDeleteError::SystemManagedGroupDisallowed => {
5047                // unit
5048                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5049                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5050                s.end()
5051            }
5052            GroupDeleteError::GroupAlreadyDeleted => {
5053                // unit
5054                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5055                s.serialize_field(".tag", "group_already_deleted")?;
5056                s.end()
5057            }
5058            GroupDeleteError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5059        }
5060    }
5061}
5062
5063impl ::std::error::Error for GroupDeleteError {
5064}
5065
5066impl ::std::fmt::Display for GroupDeleteError {
5067    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5068        match self {
5069            GroupDeleteError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5070            GroupDeleteError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5071            GroupDeleteError::GroupAlreadyDeleted => f.write_str("This group has already been deleted."),
5072            _ => write!(f, "{:?}", *self),
5073        }
5074    }
5075}
5076
5077// union extends GroupSelectorWithTeamGroupError
5078impl From<GroupSelectorWithTeamGroupError> for GroupDeleteError {
5079    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
5080        match parent {
5081            GroupSelectorWithTeamGroupError::GroupNotFound => GroupDeleteError::GroupNotFound,
5082            GroupSelectorWithTeamGroupError::Other => GroupDeleteError::Other,
5083            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupDeleteError::SystemManagedGroupDisallowed,
5084        }
5085    }
5086}
5087/// Full description of a group.
5088#[derive(Debug, Clone, PartialEq, Eq)]
5089#[non_exhaustive] // structs may have more fields added in the future.
5090pub struct GroupFullInfo {
5091    pub group_name: String,
5092    pub group_id: crate::types::team_common::GroupId,
5093    /// Who is allowed to manage the group.
5094    pub group_management_type: crate::types::team_common::GroupManagementType,
5095    /// The group creation time as a UTC timestamp in milliseconds since the Unix epoch.
5096    pub created: u64,
5097    /// External ID of group. This is an arbitrary ID that an admin can attach to a group.
5098    pub group_external_id: Option<crate::types::team_common::GroupExternalId>,
5099    /// The number of members in the group.
5100    pub member_count: Option<u32>,
5101    /// List of group members.
5102    pub members: Option<Vec<GroupMemberInfo>>,
5103}
5104
5105impl GroupFullInfo {
5106    pub fn new(
5107        group_name: String,
5108        group_id: crate::types::team_common::GroupId,
5109        group_management_type: crate::types::team_common::GroupManagementType,
5110        created: u64,
5111    ) -> Self {
5112        GroupFullInfo {
5113            group_name,
5114            group_id,
5115            group_management_type,
5116            created,
5117            group_external_id: None,
5118            member_count: None,
5119            members: None,
5120        }
5121    }
5122
5123    pub fn with_group_external_id(
5124        mut self,
5125        value: crate::types::team_common::GroupExternalId,
5126    ) -> Self {
5127        self.group_external_id = Some(value);
5128        self
5129    }
5130
5131    pub fn with_member_count(mut self, value: u32) -> Self {
5132        self.member_count = Some(value);
5133        self
5134    }
5135
5136    pub fn with_members(mut self, value: Vec<GroupMemberInfo>) -> Self {
5137        self.members = Some(value);
5138        self
5139    }
5140}
5141
5142const GROUP_FULL_INFO_FIELDS: &[&str] = &["group_name",
5143                                          "group_id",
5144                                          "group_management_type",
5145                                          "created",
5146                                          "group_external_id",
5147                                          "member_count",
5148                                          "members"];
5149impl GroupFullInfo {
5150    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5151        map: V,
5152    ) -> Result<GroupFullInfo, V::Error> {
5153        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5154    }
5155
5156    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5157        mut map: V,
5158        optional: bool,
5159    ) -> Result<Option<GroupFullInfo>, V::Error> {
5160        let mut field_group_name = None;
5161        let mut field_group_id = None;
5162        let mut field_group_management_type = None;
5163        let mut field_created = None;
5164        let mut field_group_external_id = None;
5165        let mut field_member_count = None;
5166        let mut field_members = None;
5167        let mut nothing = true;
5168        while let Some(key) = map.next_key::<&str>()? {
5169            nothing = false;
5170            match key {
5171                "group_name" => {
5172                    if field_group_name.is_some() {
5173                        return Err(::serde::de::Error::duplicate_field("group_name"));
5174                    }
5175                    field_group_name = Some(map.next_value()?);
5176                }
5177                "group_id" => {
5178                    if field_group_id.is_some() {
5179                        return Err(::serde::de::Error::duplicate_field("group_id"));
5180                    }
5181                    field_group_id = Some(map.next_value()?);
5182                }
5183                "group_management_type" => {
5184                    if field_group_management_type.is_some() {
5185                        return Err(::serde::de::Error::duplicate_field("group_management_type"));
5186                    }
5187                    field_group_management_type = Some(map.next_value()?);
5188                }
5189                "created" => {
5190                    if field_created.is_some() {
5191                        return Err(::serde::de::Error::duplicate_field("created"));
5192                    }
5193                    field_created = Some(map.next_value()?);
5194                }
5195                "group_external_id" => {
5196                    if field_group_external_id.is_some() {
5197                        return Err(::serde::de::Error::duplicate_field("group_external_id"));
5198                    }
5199                    field_group_external_id = Some(map.next_value()?);
5200                }
5201                "member_count" => {
5202                    if field_member_count.is_some() {
5203                        return Err(::serde::de::Error::duplicate_field("member_count"));
5204                    }
5205                    field_member_count = Some(map.next_value()?);
5206                }
5207                "members" => {
5208                    if field_members.is_some() {
5209                        return Err(::serde::de::Error::duplicate_field("members"));
5210                    }
5211                    field_members = Some(map.next_value()?);
5212                }
5213                _ => {
5214                    // unknown field allowed and ignored
5215                    map.next_value::<::serde_json::Value>()?;
5216                }
5217            }
5218        }
5219        if optional && nothing {
5220            return Ok(None);
5221        }
5222        let result = GroupFullInfo {
5223            group_name: field_group_name.ok_or_else(|| ::serde::de::Error::missing_field("group_name"))?,
5224            group_id: field_group_id.ok_or_else(|| ::serde::de::Error::missing_field("group_id"))?,
5225            group_management_type: field_group_management_type.ok_or_else(|| ::serde::de::Error::missing_field("group_management_type"))?,
5226            created: field_created.ok_or_else(|| ::serde::de::Error::missing_field("created"))?,
5227            group_external_id: field_group_external_id.and_then(Option::flatten),
5228            member_count: field_member_count.and_then(Option::flatten),
5229            members: field_members.and_then(Option::flatten),
5230        };
5231        Ok(Some(result))
5232    }
5233
5234    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5235        &self,
5236        s: &mut S::SerializeStruct,
5237    ) -> Result<(), S::Error> {
5238        use serde::ser::SerializeStruct;
5239        s.serialize_field("group_name", &self.group_name)?;
5240        s.serialize_field("group_id", &self.group_id)?;
5241        s.serialize_field("group_management_type", &self.group_management_type)?;
5242        s.serialize_field("created", &self.created)?;
5243        if let Some(val) = &self.group_external_id {
5244            s.serialize_field("group_external_id", val)?;
5245        }
5246        if let Some(val) = &self.member_count {
5247            s.serialize_field("member_count", val)?;
5248        }
5249        if let Some(val) = &self.members {
5250            s.serialize_field("members", val)?;
5251        }
5252        Ok(())
5253    }
5254}
5255
5256impl<'de> ::serde::de::Deserialize<'de> for GroupFullInfo {
5257    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5258        // struct deserializer
5259        use serde::de::{MapAccess, Visitor};
5260        struct StructVisitor;
5261        impl<'de> Visitor<'de> for StructVisitor {
5262            type Value = GroupFullInfo;
5263            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5264                f.write_str("a GroupFullInfo struct")
5265            }
5266            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5267                GroupFullInfo::internal_deserialize(map)
5268            }
5269        }
5270        deserializer.deserialize_struct("GroupFullInfo", GROUP_FULL_INFO_FIELDS, StructVisitor)
5271    }
5272}
5273
5274impl ::serde::ser::Serialize for GroupFullInfo {
5275    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5276        // struct serializer
5277        use serde::ser::SerializeStruct;
5278        let mut s = serializer.serialize_struct("GroupFullInfo", 7)?;
5279        self.internal_serialize::<S>(&mut s)?;
5280        s.end()
5281    }
5282}
5283
5284// struct extends crate::types::team_common::GroupSummary
5285impl From<GroupFullInfo> for crate::types::team_common::GroupSummary {
5286    fn from(subtype: GroupFullInfo) -> Self {
5287        Self {
5288            group_name: subtype.group_name,
5289            group_id: subtype.group_id,
5290            group_management_type: subtype.group_management_type,
5291            group_external_id: subtype.group_external_id,
5292            member_count: subtype.member_count,
5293        }
5294    }
5295}
5296/// Profile of group member, and role in group.
5297#[derive(Debug, Clone, PartialEq, Eq)]
5298#[non_exhaustive] // structs may have more fields added in the future.
5299pub struct GroupMemberInfo {
5300    /// Profile of group member.
5301    pub profile: MemberProfile,
5302    /// The role that the user has in the group.
5303    pub access_type: GroupAccessType,
5304}
5305
5306impl GroupMemberInfo {
5307    pub fn new(profile: MemberProfile, access_type: GroupAccessType) -> Self {
5308        GroupMemberInfo {
5309            profile,
5310            access_type,
5311        }
5312    }
5313}
5314
5315const GROUP_MEMBER_INFO_FIELDS: &[&str] = &["profile",
5316                                            "access_type"];
5317impl GroupMemberInfo {
5318    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5319        map: V,
5320    ) -> Result<GroupMemberInfo, V::Error> {
5321        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5322    }
5323
5324    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5325        mut map: V,
5326        optional: bool,
5327    ) -> Result<Option<GroupMemberInfo>, V::Error> {
5328        let mut field_profile = None;
5329        let mut field_access_type = None;
5330        let mut nothing = true;
5331        while let Some(key) = map.next_key::<&str>()? {
5332            nothing = false;
5333            match key {
5334                "profile" => {
5335                    if field_profile.is_some() {
5336                        return Err(::serde::de::Error::duplicate_field("profile"));
5337                    }
5338                    field_profile = Some(map.next_value()?);
5339                }
5340                "access_type" => {
5341                    if field_access_type.is_some() {
5342                        return Err(::serde::de::Error::duplicate_field("access_type"));
5343                    }
5344                    field_access_type = Some(map.next_value()?);
5345                }
5346                _ => {
5347                    // unknown field allowed and ignored
5348                    map.next_value::<::serde_json::Value>()?;
5349                }
5350            }
5351        }
5352        if optional && nothing {
5353            return Ok(None);
5354        }
5355        let result = GroupMemberInfo {
5356            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
5357            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
5358        };
5359        Ok(Some(result))
5360    }
5361
5362    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5363        &self,
5364        s: &mut S::SerializeStruct,
5365    ) -> Result<(), S::Error> {
5366        use serde::ser::SerializeStruct;
5367        s.serialize_field("profile", &self.profile)?;
5368        s.serialize_field("access_type", &self.access_type)?;
5369        Ok(())
5370    }
5371}
5372
5373impl<'de> ::serde::de::Deserialize<'de> for GroupMemberInfo {
5374    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5375        // struct deserializer
5376        use serde::de::{MapAccess, Visitor};
5377        struct StructVisitor;
5378        impl<'de> Visitor<'de> for StructVisitor {
5379            type Value = GroupMemberInfo;
5380            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5381                f.write_str("a GroupMemberInfo struct")
5382            }
5383            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5384                GroupMemberInfo::internal_deserialize(map)
5385            }
5386        }
5387        deserializer.deserialize_struct("GroupMemberInfo", GROUP_MEMBER_INFO_FIELDS, StructVisitor)
5388    }
5389}
5390
5391impl ::serde::ser::Serialize for GroupMemberInfo {
5392    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5393        // struct serializer
5394        use serde::ser::SerializeStruct;
5395        let mut s = serializer.serialize_struct("GroupMemberInfo", 2)?;
5396        self.internal_serialize::<S>(&mut s)?;
5397        s.end()
5398    }
5399}
5400
5401/// Argument for selecting a group and a single user.
5402#[derive(Debug, Clone, PartialEq, Eq)]
5403#[non_exhaustive] // structs may have more fields added in the future.
5404pub struct GroupMemberSelector {
5405    /// Specify a group.
5406    pub group: GroupSelector,
5407    /// Identity of a user that is a member of `group`.
5408    pub user: UserSelectorArg,
5409}
5410
5411impl GroupMemberSelector {
5412    pub fn new(group: GroupSelector, user: UserSelectorArg) -> Self {
5413        GroupMemberSelector {
5414            group,
5415            user,
5416        }
5417    }
5418}
5419
5420const GROUP_MEMBER_SELECTOR_FIELDS: &[&str] = &["group",
5421                                                "user"];
5422impl GroupMemberSelector {
5423    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5424        map: V,
5425    ) -> Result<GroupMemberSelector, V::Error> {
5426        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5427    }
5428
5429    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5430        mut map: V,
5431        optional: bool,
5432    ) -> Result<Option<GroupMemberSelector>, V::Error> {
5433        let mut field_group = None;
5434        let mut field_user = None;
5435        let mut nothing = true;
5436        while let Some(key) = map.next_key::<&str>()? {
5437            nothing = false;
5438            match key {
5439                "group" => {
5440                    if field_group.is_some() {
5441                        return Err(::serde::de::Error::duplicate_field("group"));
5442                    }
5443                    field_group = Some(map.next_value()?);
5444                }
5445                "user" => {
5446                    if field_user.is_some() {
5447                        return Err(::serde::de::Error::duplicate_field("user"));
5448                    }
5449                    field_user = Some(map.next_value()?);
5450                }
5451                _ => {
5452                    // unknown field allowed and ignored
5453                    map.next_value::<::serde_json::Value>()?;
5454                }
5455            }
5456        }
5457        if optional && nothing {
5458            return Ok(None);
5459        }
5460        let result = GroupMemberSelector {
5461            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
5462            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
5463        };
5464        Ok(Some(result))
5465    }
5466
5467    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5468        &self,
5469        s: &mut S::SerializeStruct,
5470    ) -> Result<(), S::Error> {
5471        use serde::ser::SerializeStruct;
5472        s.serialize_field("group", &self.group)?;
5473        s.serialize_field("user", &self.user)?;
5474        Ok(())
5475    }
5476}
5477
5478impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSelector {
5479    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5480        // struct deserializer
5481        use serde::de::{MapAccess, Visitor};
5482        struct StructVisitor;
5483        impl<'de> Visitor<'de> for StructVisitor {
5484            type Value = GroupMemberSelector;
5485            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5486                f.write_str("a GroupMemberSelector struct")
5487            }
5488            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5489                GroupMemberSelector::internal_deserialize(map)
5490            }
5491        }
5492        deserializer.deserialize_struct("GroupMemberSelector", GROUP_MEMBER_SELECTOR_FIELDS, StructVisitor)
5493    }
5494}
5495
5496impl ::serde::ser::Serialize for GroupMemberSelector {
5497    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5498        // struct serializer
5499        use serde::ser::SerializeStruct;
5500        let mut s = serializer.serialize_struct("GroupMemberSelector", 2)?;
5501        self.internal_serialize::<S>(&mut s)?;
5502        s.end()
5503    }
5504}
5505
5506/// Error that can be raised when [`GroupMemberSelector`] is used, and the user is required to be a
5507/// member of the specified group.
5508#[derive(Debug, Clone, PartialEq, Eq)]
5509#[non_exhaustive] // variants may be added in the future
5510pub enum GroupMemberSelectorError {
5511    /// No matching group found. No groups match the specified group ID.
5512    GroupNotFound,
5513    /// This operation is not supported on system-managed groups.
5514    SystemManagedGroupDisallowed,
5515    /// The specified user is not a member of this group.
5516    MemberNotInGroup,
5517    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5518    /// typically indicates that this SDK version is out of date.
5519    Other,
5520}
5521
5522impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSelectorError {
5523    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5524        // union deserializer
5525        use serde::de::{self, MapAccess, Visitor};
5526        struct EnumVisitor;
5527        impl<'de> Visitor<'de> for EnumVisitor {
5528            type Value = GroupMemberSelectorError;
5529            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5530                f.write_str("a GroupMemberSelectorError structure")
5531            }
5532            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5533                let tag: &str = match map.next_key()? {
5534                    Some(".tag") => map.next_value()?,
5535                    _ => return Err(de::Error::missing_field(".tag"))
5536                };
5537                let value = match tag {
5538                    "group_not_found" => GroupMemberSelectorError::GroupNotFound,
5539                    "system_managed_group_disallowed" => GroupMemberSelectorError::SystemManagedGroupDisallowed,
5540                    "member_not_in_group" => GroupMemberSelectorError::MemberNotInGroup,
5541                    _ => GroupMemberSelectorError::Other,
5542                };
5543                crate::eat_json_fields(&mut map)?;
5544                Ok(value)
5545            }
5546        }
5547        const VARIANTS: &[&str] = &["group_not_found",
5548                                    "other",
5549                                    "system_managed_group_disallowed",
5550                                    "member_not_in_group"];
5551        deserializer.deserialize_struct("GroupMemberSelectorError", VARIANTS, EnumVisitor)
5552    }
5553}
5554
5555impl ::serde::ser::Serialize for GroupMemberSelectorError {
5556    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5557        // union serializer
5558        use serde::ser::SerializeStruct;
5559        match self {
5560            GroupMemberSelectorError::GroupNotFound => {
5561                // unit
5562                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5563                s.serialize_field(".tag", "group_not_found")?;
5564                s.end()
5565            }
5566            GroupMemberSelectorError::SystemManagedGroupDisallowed => {
5567                // unit
5568                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5569                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5570                s.end()
5571            }
5572            GroupMemberSelectorError::MemberNotInGroup => {
5573                // unit
5574                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5575                s.serialize_field(".tag", "member_not_in_group")?;
5576                s.end()
5577            }
5578            GroupMemberSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5579        }
5580    }
5581}
5582
5583impl ::std::error::Error for GroupMemberSelectorError {
5584}
5585
5586impl ::std::fmt::Display for GroupMemberSelectorError {
5587    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5588        match self {
5589            GroupMemberSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5590            GroupMemberSelectorError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5591            GroupMemberSelectorError::MemberNotInGroup => f.write_str("The specified user is not a member of this group."),
5592            _ => write!(f, "{:?}", *self),
5593        }
5594    }
5595}
5596
5597// union extends GroupSelectorWithTeamGroupError
5598impl From<GroupSelectorWithTeamGroupError> for GroupMemberSelectorError {
5599    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
5600        match parent {
5601            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMemberSelectorError::GroupNotFound,
5602            GroupSelectorWithTeamGroupError::Other => GroupMemberSelectorError::Other,
5603            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMemberSelectorError::SystemManagedGroupDisallowed,
5604        }
5605    }
5606}
5607#[derive(Debug, Clone, PartialEq, Eq)]
5608#[non_exhaustive] // variants may be added in the future
5609pub enum GroupMemberSetAccessTypeError {
5610    /// No matching group found. No groups match the specified group ID.
5611    GroupNotFound,
5612    /// This operation is not supported on system-managed groups.
5613    SystemManagedGroupDisallowed,
5614    /// The specified user is not a member of this group.
5615    MemberNotInGroup,
5616    /// A company managed group cannot be managed by a user.
5617    UserCannotBeManagerOfCompanyManagedGroup,
5618    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5619    /// typically indicates that this SDK version is out of date.
5620    Other,
5621}
5622
5623impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSetAccessTypeError {
5624    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5625        // union deserializer
5626        use serde::de::{self, MapAccess, Visitor};
5627        struct EnumVisitor;
5628        impl<'de> Visitor<'de> for EnumVisitor {
5629            type Value = GroupMemberSetAccessTypeError;
5630            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5631                f.write_str("a GroupMemberSetAccessTypeError structure")
5632            }
5633            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5634                let tag: &str = match map.next_key()? {
5635                    Some(".tag") => map.next_value()?,
5636                    _ => return Err(de::Error::missing_field(".tag"))
5637                };
5638                let value = match tag {
5639                    "group_not_found" => GroupMemberSetAccessTypeError::GroupNotFound,
5640                    "system_managed_group_disallowed" => GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed,
5641                    "member_not_in_group" => GroupMemberSetAccessTypeError::MemberNotInGroup,
5642                    "user_cannot_be_manager_of_company_managed_group" => GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup,
5643                    _ => GroupMemberSetAccessTypeError::Other,
5644                };
5645                crate::eat_json_fields(&mut map)?;
5646                Ok(value)
5647            }
5648        }
5649        const VARIANTS: &[&str] = &["group_not_found",
5650                                    "other",
5651                                    "system_managed_group_disallowed",
5652                                    "member_not_in_group",
5653                                    "user_cannot_be_manager_of_company_managed_group"];
5654        deserializer.deserialize_struct("GroupMemberSetAccessTypeError", VARIANTS, EnumVisitor)
5655    }
5656}
5657
5658impl ::serde::ser::Serialize for GroupMemberSetAccessTypeError {
5659    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5660        // union serializer
5661        use serde::ser::SerializeStruct;
5662        match self {
5663            GroupMemberSetAccessTypeError::GroupNotFound => {
5664                // unit
5665                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5666                s.serialize_field(".tag", "group_not_found")?;
5667                s.end()
5668            }
5669            GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed => {
5670                // unit
5671                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5672                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5673                s.end()
5674            }
5675            GroupMemberSetAccessTypeError::MemberNotInGroup => {
5676                // unit
5677                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5678                s.serialize_field(".tag", "member_not_in_group")?;
5679                s.end()
5680            }
5681            GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup => {
5682                // unit
5683                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5684                s.serialize_field(".tag", "user_cannot_be_manager_of_company_managed_group")?;
5685                s.end()
5686            }
5687            GroupMemberSetAccessTypeError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5688        }
5689    }
5690}
5691
5692impl ::std::error::Error for GroupMemberSetAccessTypeError {
5693}
5694
5695impl ::std::fmt::Display for GroupMemberSetAccessTypeError {
5696    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5697        match self {
5698            GroupMemberSetAccessTypeError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5699            GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5700            GroupMemberSetAccessTypeError::MemberNotInGroup => f.write_str("The specified user is not a member of this group."),
5701            GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup => f.write_str("A company managed group cannot be managed by a user."),
5702            _ => write!(f, "{:?}", *self),
5703        }
5704    }
5705}
5706
5707// union extends GroupMemberSelectorError
5708impl From<GroupMemberSelectorError> for GroupMemberSetAccessTypeError {
5709    fn from(parent: GroupMemberSelectorError) -> Self {
5710        match parent {
5711            GroupMemberSelectorError::GroupNotFound => GroupMemberSetAccessTypeError::GroupNotFound,
5712            GroupMemberSelectorError::Other => GroupMemberSetAccessTypeError::Other,
5713            GroupMemberSelectorError::SystemManagedGroupDisallowed => GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed,
5714            GroupMemberSelectorError::MemberNotInGroup => GroupMemberSetAccessTypeError::MemberNotInGroup,
5715        }
5716    }
5717}
5718#[derive(Debug, Clone, PartialEq, Eq)]
5719#[non_exhaustive] // structs may have more fields added in the future.
5720pub struct GroupMembersAddArg {
5721    /// Group to which users will be added.
5722    pub group: GroupSelector,
5723    /// List of users to be added to the group.
5724    pub members: Vec<MemberAccess>,
5725    /// Whether to return the list of members in the group. Note that the default value will cause
5726    /// all the group members to be returned in the response. This may take a long time for large
5727    /// groups.
5728    pub return_members: bool,
5729}
5730
5731impl GroupMembersAddArg {
5732    pub fn new(group: GroupSelector, members: Vec<MemberAccess>) -> Self {
5733        GroupMembersAddArg {
5734            group,
5735            members,
5736            return_members: true,
5737        }
5738    }
5739
5740    pub fn with_return_members(mut self, value: bool) -> Self {
5741        self.return_members = value;
5742        self
5743    }
5744}
5745
5746const GROUP_MEMBERS_ADD_ARG_FIELDS: &[&str] = &["group",
5747                                                "members",
5748                                                "return_members"];
5749impl GroupMembersAddArg {
5750    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5751        map: V,
5752    ) -> Result<GroupMembersAddArg, V::Error> {
5753        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5754    }
5755
5756    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5757        mut map: V,
5758        optional: bool,
5759    ) -> Result<Option<GroupMembersAddArg>, V::Error> {
5760        let mut field_group = None;
5761        let mut field_members = None;
5762        let mut field_return_members = None;
5763        let mut nothing = true;
5764        while let Some(key) = map.next_key::<&str>()? {
5765            nothing = false;
5766            match key {
5767                "group" => {
5768                    if field_group.is_some() {
5769                        return Err(::serde::de::Error::duplicate_field("group"));
5770                    }
5771                    field_group = Some(map.next_value()?);
5772                }
5773                "members" => {
5774                    if field_members.is_some() {
5775                        return Err(::serde::de::Error::duplicate_field("members"));
5776                    }
5777                    field_members = Some(map.next_value()?);
5778                }
5779                "return_members" => {
5780                    if field_return_members.is_some() {
5781                        return Err(::serde::de::Error::duplicate_field("return_members"));
5782                    }
5783                    field_return_members = Some(map.next_value()?);
5784                }
5785                _ => {
5786                    // unknown field allowed and ignored
5787                    map.next_value::<::serde_json::Value>()?;
5788                }
5789            }
5790        }
5791        if optional && nothing {
5792            return Ok(None);
5793        }
5794        let result = GroupMembersAddArg {
5795            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
5796            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
5797            return_members: field_return_members.unwrap_or(true),
5798        };
5799        Ok(Some(result))
5800    }
5801
5802    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5803        &self,
5804        s: &mut S::SerializeStruct,
5805    ) -> Result<(), S::Error> {
5806        use serde::ser::SerializeStruct;
5807        s.serialize_field("group", &self.group)?;
5808        s.serialize_field("members", &self.members)?;
5809        if !self.return_members {
5810            s.serialize_field("return_members", &self.return_members)?;
5811        }
5812        Ok(())
5813    }
5814}
5815
5816impl<'de> ::serde::de::Deserialize<'de> for GroupMembersAddArg {
5817    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5818        // struct deserializer
5819        use serde::de::{MapAccess, Visitor};
5820        struct StructVisitor;
5821        impl<'de> Visitor<'de> for StructVisitor {
5822            type Value = GroupMembersAddArg;
5823            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5824                f.write_str("a GroupMembersAddArg struct")
5825            }
5826            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5827                GroupMembersAddArg::internal_deserialize(map)
5828            }
5829        }
5830        deserializer.deserialize_struct("GroupMembersAddArg", GROUP_MEMBERS_ADD_ARG_FIELDS, StructVisitor)
5831    }
5832}
5833
5834impl ::serde::ser::Serialize for GroupMembersAddArg {
5835    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5836        // struct serializer
5837        use serde::ser::SerializeStruct;
5838        let mut s = serializer.serialize_struct("GroupMembersAddArg", 3)?;
5839        self.internal_serialize::<S>(&mut s)?;
5840        s.end()
5841    }
5842}
5843
5844// struct extends IncludeMembersArg
5845impl From<GroupMembersAddArg> for IncludeMembersArg {
5846    fn from(subtype: GroupMembersAddArg) -> Self {
5847        Self {
5848            return_members: subtype.return_members,
5849        }
5850    }
5851}
5852#[derive(Debug, Clone, PartialEq, Eq)]
5853#[non_exhaustive] // variants may be added in the future
5854pub enum GroupMembersAddError {
5855    /// No matching group found. No groups match the specified group ID.
5856    GroupNotFound,
5857    /// This operation is not supported on system-managed groups.
5858    SystemManagedGroupDisallowed,
5859    /// You cannot add duplicate users. One or more of the members you are trying to add is already
5860    /// a member of the group.
5861    DuplicateUser,
5862    /// Group is not in this team. You cannot add members to a group that is outside of your team.
5863    GroupNotInTeam,
5864    /// These members are not part of your team. Currently, you cannot add members to a group if
5865    /// they are not part of your team, though this may change in a subsequent version. To add new
5866    /// members to your Dropbox Business team, use the [`members_add()`](crate::team::members_add)
5867    /// endpoint.
5868    MembersNotInTeam(Vec<String>),
5869    /// These users were not found in Dropbox.
5870    UsersNotFound(Vec<String>),
5871    /// A suspended user cannot be added to a group as [`GroupAccessType::Owner`].
5872    UserMustBeActiveToBeOwner,
5873    /// A company-managed group cannot be managed by a user.
5874    UserCannotBeManagerOfCompanyManagedGroup(Vec<String>),
5875    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5876    /// typically indicates that this SDK version is out of date.
5877    Other,
5878}
5879
5880impl<'de> ::serde::de::Deserialize<'de> for GroupMembersAddError {
5881    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5882        // union deserializer
5883        use serde::de::{self, MapAccess, Visitor};
5884        struct EnumVisitor;
5885        impl<'de> Visitor<'de> for EnumVisitor {
5886            type Value = GroupMembersAddError;
5887            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5888                f.write_str("a GroupMembersAddError structure")
5889            }
5890            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5891                let tag: &str = match map.next_key()? {
5892                    Some(".tag") => map.next_value()?,
5893                    _ => return Err(de::Error::missing_field(".tag"))
5894                };
5895                let value = match tag {
5896                    "group_not_found" => GroupMembersAddError::GroupNotFound,
5897                    "system_managed_group_disallowed" => GroupMembersAddError::SystemManagedGroupDisallowed,
5898                    "duplicate_user" => GroupMembersAddError::DuplicateUser,
5899                    "group_not_in_team" => GroupMembersAddError::GroupNotInTeam,
5900                    "members_not_in_team" => {
5901                        match map.next_key()? {
5902                            Some("members_not_in_team") => GroupMembersAddError::MembersNotInTeam(map.next_value()?),
5903                            None => return Err(de::Error::missing_field("members_not_in_team")),
5904                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5905                        }
5906                    }
5907                    "users_not_found" => {
5908                        match map.next_key()? {
5909                            Some("users_not_found") => GroupMembersAddError::UsersNotFound(map.next_value()?),
5910                            None => return Err(de::Error::missing_field("users_not_found")),
5911                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5912                        }
5913                    }
5914                    "user_must_be_active_to_be_owner" => GroupMembersAddError::UserMustBeActiveToBeOwner,
5915                    "user_cannot_be_manager_of_company_managed_group" => {
5916                        match map.next_key()? {
5917                            Some("user_cannot_be_manager_of_company_managed_group") => GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(map.next_value()?),
5918                            None => return Err(de::Error::missing_field("user_cannot_be_manager_of_company_managed_group")),
5919                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5920                        }
5921                    }
5922                    _ => GroupMembersAddError::Other,
5923                };
5924                crate::eat_json_fields(&mut map)?;
5925                Ok(value)
5926            }
5927        }
5928        const VARIANTS: &[&str] = &["group_not_found",
5929                                    "other",
5930                                    "system_managed_group_disallowed",
5931                                    "duplicate_user",
5932                                    "group_not_in_team",
5933                                    "members_not_in_team",
5934                                    "users_not_found",
5935                                    "user_must_be_active_to_be_owner",
5936                                    "user_cannot_be_manager_of_company_managed_group"];
5937        deserializer.deserialize_struct("GroupMembersAddError", VARIANTS, EnumVisitor)
5938    }
5939}
5940
5941impl ::serde::ser::Serialize for GroupMembersAddError {
5942    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5943        // union serializer
5944        use serde::ser::SerializeStruct;
5945        match self {
5946            GroupMembersAddError::GroupNotFound => {
5947                // unit
5948                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5949                s.serialize_field(".tag", "group_not_found")?;
5950                s.end()
5951            }
5952            GroupMembersAddError::SystemManagedGroupDisallowed => {
5953                // unit
5954                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5955                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5956                s.end()
5957            }
5958            GroupMembersAddError::DuplicateUser => {
5959                // unit
5960                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5961                s.serialize_field(".tag", "duplicate_user")?;
5962                s.end()
5963            }
5964            GroupMembersAddError::GroupNotInTeam => {
5965                // unit
5966                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5967                s.serialize_field(".tag", "group_not_in_team")?;
5968                s.end()
5969            }
5970            GroupMembersAddError::MembersNotInTeam(x) => {
5971                // primitive
5972                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5973                s.serialize_field(".tag", "members_not_in_team")?;
5974                s.serialize_field("members_not_in_team", x)?;
5975                s.end()
5976            }
5977            GroupMembersAddError::UsersNotFound(x) => {
5978                // primitive
5979                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5980                s.serialize_field(".tag", "users_not_found")?;
5981                s.serialize_field("users_not_found", x)?;
5982                s.end()
5983            }
5984            GroupMembersAddError::UserMustBeActiveToBeOwner => {
5985                // unit
5986                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5987                s.serialize_field(".tag", "user_must_be_active_to_be_owner")?;
5988                s.end()
5989            }
5990            GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(x) => {
5991                // primitive
5992                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5993                s.serialize_field(".tag", "user_cannot_be_manager_of_company_managed_group")?;
5994                s.serialize_field("user_cannot_be_manager_of_company_managed_group", x)?;
5995                s.end()
5996            }
5997            GroupMembersAddError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5998        }
5999    }
6000}
6001
6002impl ::std::error::Error for GroupMembersAddError {
6003}
6004
6005impl ::std::fmt::Display for GroupMembersAddError {
6006    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6007        match self {
6008            GroupMembersAddError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6009            GroupMembersAddError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6010            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."),
6011            GroupMembersAddError::GroupNotInTeam => f.write_str("Group is not in this team. You cannot add members to a group that is outside of your team."),
6012            GroupMembersAddError::MembersNotInTeam(inner) => write!(f, "members_not_in_team: {:?}", inner),
6013            GroupMembersAddError::UsersNotFound(inner) => write!(f, "These users were not found in Dropbox: {:?}", inner),
6014            GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(inner) => write!(f, "A company-managed group cannot be managed by a user: {:?}", inner),
6015            _ => write!(f, "{:?}", *self),
6016        }
6017    }
6018}
6019
6020// union extends GroupSelectorWithTeamGroupError
6021impl From<GroupSelectorWithTeamGroupError> for GroupMembersAddError {
6022    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
6023        match parent {
6024            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMembersAddError::GroupNotFound,
6025            GroupSelectorWithTeamGroupError::Other => GroupMembersAddError::Other,
6026            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMembersAddError::SystemManagedGroupDisallowed,
6027        }
6028    }
6029}
6030/// Result returned by [`groups_members_add()`](crate::team::groups_members_add) and
6031/// [`groups_members_remove()`](crate::team::groups_members_remove).
6032#[derive(Debug, Clone, PartialEq, Eq)]
6033#[non_exhaustive] // structs may have more fields added in the future.
6034pub struct GroupMembersChangeResult {
6035    /// The group info after member change operation has been performed.
6036    pub group_info: GroupFullInfo,
6037    /// Field is deprecated. For legacy purposes async_job_id will always return one space ' '.
6038    /// Formerly, it was an ID that was used to obtain the status of granting/revoking group-owned
6039    /// resources. It's no longer necessary because the async processing now happens automatically.
6040    #[deprecated]
6041    pub async_job_id: crate::types::dbx_async::AsyncJobId,
6042}
6043
6044impl GroupMembersChangeResult {
6045    pub fn new(
6046        group_info: GroupFullInfo,
6047        async_job_id: crate::types::dbx_async::AsyncJobId,
6048    ) -> Self {
6049        GroupMembersChangeResult {
6050            group_info,
6051            #[allow(deprecated)] async_job_id,
6052        }
6053    }
6054}
6055
6056const GROUP_MEMBERS_CHANGE_RESULT_FIELDS: &[&str] = &["group_info",
6057                                                      "async_job_id"];
6058impl GroupMembersChangeResult {
6059    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6060        map: V,
6061    ) -> Result<GroupMembersChangeResult, V::Error> {
6062        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6063    }
6064
6065    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6066        mut map: V,
6067        optional: bool,
6068    ) -> Result<Option<GroupMembersChangeResult>, V::Error> {
6069        let mut field_group_info = None;
6070        let mut field_async_job_id = None;
6071        let mut nothing = true;
6072        while let Some(key) = map.next_key::<&str>()? {
6073            nothing = false;
6074            match key {
6075                "group_info" => {
6076                    if field_group_info.is_some() {
6077                        return Err(::serde::de::Error::duplicate_field("group_info"));
6078                    }
6079                    field_group_info = Some(map.next_value()?);
6080                }
6081                "async_job_id" => {
6082                    if field_async_job_id.is_some() {
6083                        return Err(::serde::de::Error::duplicate_field("async_job_id"));
6084                    }
6085                    field_async_job_id = Some(map.next_value()?);
6086                }
6087                _ => {
6088                    // unknown field allowed and ignored
6089                    map.next_value::<::serde_json::Value>()?;
6090                }
6091            }
6092        }
6093        if optional && nothing {
6094            return Ok(None);
6095        }
6096        let result = GroupMembersChangeResult {
6097            group_info: field_group_info.ok_or_else(|| ::serde::de::Error::missing_field("group_info"))?,
6098            #[allow(deprecated)] async_job_id: field_async_job_id.ok_or_else(|| ::serde::de::Error::missing_field("async_job_id"))?,
6099        };
6100        Ok(Some(result))
6101    }
6102
6103    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6104        &self,
6105        s: &mut S::SerializeStruct,
6106    ) -> Result<(), S::Error> {
6107        use serde::ser::SerializeStruct;
6108        s.serialize_field("group_info", &self.group_info)?;
6109        #[allow(deprecated)]
6110        s.serialize_field("async_job_id", &self.async_job_id)?;
6111        Ok(())
6112    }
6113}
6114
6115impl<'de> ::serde::de::Deserialize<'de> for GroupMembersChangeResult {
6116    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6117        // struct deserializer
6118        use serde::de::{MapAccess, Visitor};
6119        struct StructVisitor;
6120        impl<'de> Visitor<'de> for StructVisitor {
6121            type Value = GroupMembersChangeResult;
6122            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6123                f.write_str("a GroupMembersChangeResult struct")
6124            }
6125            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6126                GroupMembersChangeResult::internal_deserialize(map)
6127            }
6128        }
6129        deserializer.deserialize_struct("GroupMembersChangeResult", GROUP_MEMBERS_CHANGE_RESULT_FIELDS, StructVisitor)
6130    }
6131}
6132
6133impl ::serde::ser::Serialize for GroupMembersChangeResult {
6134    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6135        // struct serializer
6136        use serde::ser::SerializeStruct;
6137        let mut s = serializer.serialize_struct("GroupMembersChangeResult", 2)?;
6138        self.internal_serialize::<S>(&mut s)?;
6139        s.end()
6140    }
6141}
6142
6143#[derive(Debug, Clone, PartialEq, Eq)]
6144#[non_exhaustive] // structs may have more fields added in the future.
6145pub struct GroupMembersRemoveArg {
6146    /// Group from which users will be removed.
6147    pub group: GroupSelector,
6148    /// List of users to be removed from the group.
6149    pub users: Vec<UserSelectorArg>,
6150    /// Whether to return the list of members in the group. Note that the default value will cause
6151    /// all the group members to be returned in the response. This may take a long time for large
6152    /// groups.
6153    pub return_members: bool,
6154}
6155
6156impl GroupMembersRemoveArg {
6157    pub fn new(group: GroupSelector, users: Vec<UserSelectorArg>) -> Self {
6158        GroupMembersRemoveArg {
6159            group,
6160            users,
6161            return_members: true,
6162        }
6163    }
6164
6165    pub fn with_return_members(mut self, value: bool) -> Self {
6166        self.return_members = value;
6167        self
6168    }
6169}
6170
6171const GROUP_MEMBERS_REMOVE_ARG_FIELDS: &[&str] = &["group",
6172                                                   "users",
6173                                                   "return_members"];
6174impl GroupMembersRemoveArg {
6175    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6176        map: V,
6177    ) -> Result<GroupMembersRemoveArg, V::Error> {
6178        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6179    }
6180
6181    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6182        mut map: V,
6183        optional: bool,
6184    ) -> Result<Option<GroupMembersRemoveArg>, V::Error> {
6185        let mut field_group = None;
6186        let mut field_users = None;
6187        let mut field_return_members = None;
6188        let mut nothing = true;
6189        while let Some(key) = map.next_key::<&str>()? {
6190            nothing = false;
6191            match key {
6192                "group" => {
6193                    if field_group.is_some() {
6194                        return Err(::serde::de::Error::duplicate_field("group"));
6195                    }
6196                    field_group = Some(map.next_value()?);
6197                }
6198                "users" => {
6199                    if field_users.is_some() {
6200                        return Err(::serde::de::Error::duplicate_field("users"));
6201                    }
6202                    field_users = Some(map.next_value()?);
6203                }
6204                "return_members" => {
6205                    if field_return_members.is_some() {
6206                        return Err(::serde::de::Error::duplicate_field("return_members"));
6207                    }
6208                    field_return_members = Some(map.next_value()?);
6209                }
6210                _ => {
6211                    // unknown field allowed and ignored
6212                    map.next_value::<::serde_json::Value>()?;
6213                }
6214            }
6215        }
6216        if optional && nothing {
6217            return Ok(None);
6218        }
6219        let result = GroupMembersRemoveArg {
6220            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6221            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
6222            return_members: field_return_members.unwrap_or(true),
6223        };
6224        Ok(Some(result))
6225    }
6226
6227    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6228        &self,
6229        s: &mut S::SerializeStruct,
6230    ) -> Result<(), S::Error> {
6231        use serde::ser::SerializeStruct;
6232        s.serialize_field("group", &self.group)?;
6233        s.serialize_field("users", &self.users)?;
6234        if !self.return_members {
6235            s.serialize_field("return_members", &self.return_members)?;
6236        }
6237        Ok(())
6238    }
6239}
6240
6241impl<'de> ::serde::de::Deserialize<'de> for GroupMembersRemoveArg {
6242    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6243        // struct deserializer
6244        use serde::de::{MapAccess, Visitor};
6245        struct StructVisitor;
6246        impl<'de> Visitor<'de> for StructVisitor {
6247            type Value = GroupMembersRemoveArg;
6248            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6249                f.write_str("a GroupMembersRemoveArg struct")
6250            }
6251            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6252                GroupMembersRemoveArg::internal_deserialize(map)
6253            }
6254        }
6255        deserializer.deserialize_struct("GroupMembersRemoveArg", GROUP_MEMBERS_REMOVE_ARG_FIELDS, StructVisitor)
6256    }
6257}
6258
6259impl ::serde::ser::Serialize for GroupMembersRemoveArg {
6260    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6261        // struct serializer
6262        use serde::ser::SerializeStruct;
6263        let mut s = serializer.serialize_struct("GroupMembersRemoveArg", 3)?;
6264        self.internal_serialize::<S>(&mut s)?;
6265        s.end()
6266    }
6267}
6268
6269// struct extends IncludeMembersArg
6270impl From<GroupMembersRemoveArg> for IncludeMembersArg {
6271    fn from(subtype: GroupMembersRemoveArg) -> Self {
6272        Self {
6273            return_members: subtype.return_members,
6274        }
6275    }
6276}
6277#[derive(Debug, Clone, PartialEq, Eq)]
6278#[non_exhaustive] // variants may be added in the future
6279pub enum GroupMembersRemoveError {
6280    /// No matching group found. No groups match the specified group ID.
6281    GroupNotFound,
6282    /// This operation is not supported on system-managed groups.
6283    SystemManagedGroupDisallowed,
6284    /// At least one of the specified users is not a member of the group.
6285    MemberNotInGroup,
6286    /// Group is not in this team. You cannot remove members from a group that is outside of your
6287    /// team.
6288    GroupNotInTeam,
6289    /// These members are not part of your team.
6290    MembersNotInTeam(Vec<String>),
6291    /// These users were not found in Dropbox.
6292    UsersNotFound(Vec<String>),
6293    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6294    /// typically indicates that this SDK version is out of date.
6295    Other,
6296}
6297
6298impl<'de> ::serde::de::Deserialize<'de> for GroupMembersRemoveError {
6299    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6300        // union deserializer
6301        use serde::de::{self, MapAccess, Visitor};
6302        struct EnumVisitor;
6303        impl<'de> Visitor<'de> for EnumVisitor {
6304            type Value = GroupMembersRemoveError;
6305            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6306                f.write_str("a GroupMembersRemoveError structure")
6307            }
6308            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6309                let tag: &str = match map.next_key()? {
6310                    Some(".tag") => map.next_value()?,
6311                    _ => return Err(de::Error::missing_field(".tag"))
6312                };
6313                let value = match tag {
6314                    "group_not_found" => GroupMembersRemoveError::GroupNotFound,
6315                    "system_managed_group_disallowed" => GroupMembersRemoveError::SystemManagedGroupDisallowed,
6316                    "member_not_in_group" => GroupMembersRemoveError::MemberNotInGroup,
6317                    "group_not_in_team" => GroupMembersRemoveError::GroupNotInTeam,
6318                    "members_not_in_team" => {
6319                        match map.next_key()? {
6320                            Some("members_not_in_team") => GroupMembersRemoveError::MembersNotInTeam(map.next_value()?),
6321                            None => return Err(de::Error::missing_field("members_not_in_team")),
6322                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6323                        }
6324                    }
6325                    "users_not_found" => {
6326                        match map.next_key()? {
6327                            Some("users_not_found") => GroupMembersRemoveError::UsersNotFound(map.next_value()?),
6328                            None => return Err(de::Error::missing_field("users_not_found")),
6329                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6330                        }
6331                    }
6332                    _ => GroupMembersRemoveError::Other,
6333                };
6334                crate::eat_json_fields(&mut map)?;
6335                Ok(value)
6336            }
6337        }
6338        const VARIANTS: &[&str] = &["group_not_found",
6339                                    "other",
6340                                    "system_managed_group_disallowed",
6341                                    "member_not_in_group",
6342                                    "group_not_in_team",
6343                                    "members_not_in_team",
6344                                    "users_not_found"];
6345        deserializer.deserialize_struct("GroupMembersRemoveError", VARIANTS, EnumVisitor)
6346    }
6347}
6348
6349impl ::serde::ser::Serialize for GroupMembersRemoveError {
6350    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6351        // union serializer
6352        use serde::ser::SerializeStruct;
6353        match self {
6354            GroupMembersRemoveError::GroupNotFound => {
6355                // unit
6356                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6357                s.serialize_field(".tag", "group_not_found")?;
6358                s.end()
6359            }
6360            GroupMembersRemoveError::SystemManagedGroupDisallowed => {
6361                // unit
6362                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6363                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6364                s.end()
6365            }
6366            GroupMembersRemoveError::MemberNotInGroup => {
6367                // unit
6368                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6369                s.serialize_field(".tag", "member_not_in_group")?;
6370                s.end()
6371            }
6372            GroupMembersRemoveError::GroupNotInTeam => {
6373                // unit
6374                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6375                s.serialize_field(".tag", "group_not_in_team")?;
6376                s.end()
6377            }
6378            GroupMembersRemoveError::MembersNotInTeam(x) => {
6379                // primitive
6380                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 2)?;
6381                s.serialize_field(".tag", "members_not_in_team")?;
6382                s.serialize_field("members_not_in_team", x)?;
6383                s.end()
6384            }
6385            GroupMembersRemoveError::UsersNotFound(x) => {
6386                // primitive
6387                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 2)?;
6388                s.serialize_field(".tag", "users_not_found")?;
6389                s.serialize_field("users_not_found", x)?;
6390                s.end()
6391            }
6392            GroupMembersRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6393        }
6394    }
6395}
6396
6397impl ::std::error::Error for GroupMembersRemoveError {
6398}
6399
6400impl ::std::fmt::Display for GroupMembersRemoveError {
6401    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6402        match self {
6403            GroupMembersRemoveError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6404            GroupMembersRemoveError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6405            GroupMembersRemoveError::MemberNotInGroup => f.write_str("At least one of the specified users is not a member of the group."),
6406            GroupMembersRemoveError::GroupNotInTeam => f.write_str("Group is not in this team. You cannot remove members from a group that is outside of your team."),
6407            GroupMembersRemoveError::MembersNotInTeam(inner) => write!(f, "These members are not part of your team: {:?}", inner),
6408            GroupMembersRemoveError::UsersNotFound(inner) => write!(f, "These users were not found in Dropbox: {:?}", inner),
6409            _ => write!(f, "{:?}", *self),
6410        }
6411    }
6412}
6413
6414// union extends GroupMembersSelectorError
6415impl From<GroupMembersSelectorError> for GroupMembersRemoveError {
6416    fn from(parent: GroupMembersSelectorError) -> Self {
6417        match parent {
6418            GroupMembersSelectorError::GroupNotFound => GroupMembersRemoveError::GroupNotFound,
6419            GroupMembersSelectorError::Other => GroupMembersRemoveError::Other,
6420            GroupMembersSelectorError::SystemManagedGroupDisallowed => GroupMembersRemoveError::SystemManagedGroupDisallowed,
6421            GroupMembersSelectorError::MemberNotInGroup => GroupMembersRemoveError::MemberNotInGroup,
6422        }
6423    }
6424}
6425/// Argument for selecting a group and a list of users.
6426#[derive(Debug, Clone, PartialEq, Eq)]
6427#[non_exhaustive] // structs may have more fields added in the future.
6428pub struct GroupMembersSelector {
6429    /// Specify a group.
6430    pub group: GroupSelector,
6431    /// A list of users that are members of `group`.
6432    pub users: UsersSelectorArg,
6433}
6434
6435impl GroupMembersSelector {
6436    pub fn new(group: GroupSelector, users: UsersSelectorArg) -> Self {
6437        GroupMembersSelector {
6438            group,
6439            users,
6440        }
6441    }
6442}
6443
6444const GROUP_MEMBERS_SELECTOR_FIELDS: &[&str] = &["group",
6445                                                 "users"];
6446impl GroupMembersSelector {
6447    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6448        map: V,
6449    ) -> Result<GroupMembersSelector, V::Error> {
6450        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6451    }
6452
6453    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6454        mut map: V,
6455        optional: bool,
6456    ) -> Result<Option<GroupMembersSelector>, V::Error> {
6457        let mut field_group = None;
6458        let mut field_users = None;
6459        let mut nothing = true;
6460        while let Some(key) = map.next_key::<&str>()? {
6461            nothing = false;
6462            match key {
6463                "group" => {
6464                    if field_group.is_some() {
6465                        return Err(::serde::de::Error::duplicate_field("group"));
6466                    }
6467                    field_group = Some(map.next_value()?);
6468                }
6469                "users" => {
6470                    if field_users.is_some() {
6471                        return Err(::serde::de::Error::duplicate_field("users"));
6472                    }
6473                    field_users = Some(map.next_value()?);
6474                }
6475                _ => {
6476                    // unknown field allowed and ignored
6477                    map.next_value::<::serde_json::Value>()?;
6478                }
6479            }
6480        }
6481        if optional && nothing {
6482            return Ok(None);
6483        }
6484        let result = GroupMembersSelector {
6485            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6486            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
6487        };
6488        Ok(Some(result))
6489    }
6490
6491    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6492        &self,
6493        s: &mut S::SerializeStruct,
6494    ) -> Result<(), S::Error> {
6495        use serde::ser::SerializeStruct;
6496        s.serialize_field("group", &self.group)?;
6497        s.serialize_field("users", &self.users)?;
6498        Ok(())
6499    }
6500}
6501
6502impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSelector {
6503    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6504        // struct deserializer
6505        use serde::de::{MapAccess, Visitor};
6506        struct StructVisitor;
6507        impl<'de> Visitor<'de> for StructVisitor {
6508            type Value = GroupMembersSelector;
6509            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6510                f.write_str("a GroupMembersSelector struct")
6511            }
6512            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6513                GroupMembersSelector::internal_deserialize(map)
6514            }
6515        }
6516        deserializer.deserialize_struct("GroupMembersSelector", GROUP_MEMBERS_SELECTOR_FIELDS, StructVisitor)
6517    }
6518}
6519
6520impl ::serde::ser::Serialize for GroupMembersSelector {
6521    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6522        // struct serializer
6523        use serde::ser::SerializeStruct;
6524        let mut s = serializer.serialize_struct("GroupMembersSelector", 2)?;
6525        self.internal_serialize::<S>(&mut s)?;
6526        s.end()
6527    }
6528}
6529
6530/// Error that can be raised when [`GroupMembersSelector`] is used, and the users are required to be
6531/// members of the specified group.
6532#[derive(Debug, Clone, PartialEq, Eq)]
6533#[non_exhaustive] // variants may be added in the future
6534pub enum GroupMembersSelectorError {
6535    /// No matching group found. No groups match the specified group ID.
6536    GroupNotFound,
6537    /// This operation is not supported on system-managed groups.
6538    SystemManagedGroupDisallowed,
6539    /// At least one of the specified users is not a member of the group.
6540    MemberNotInGroup,
6541    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6542    /// typically indicates that this SDK version is out of date.
6543    Other,
6544}
6545
6546impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSelectorError {
6547    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6548        // union deserializer
6549        use serde::de::{self, MapAccess, Visitor};
6550        struct EnumVisitor;
6551        impl<'de> Visitor<'de> for EnumVisitor {
6552            type Value = GroupMembersSelectorError;
6553            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6554                f.write_str("a GroupMembersSelectorError structure")
6555            }
6556            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6557                let tag: &str = match map.next_key()? {
6558                    Some(".tag") => map.next_value()?,
6559                    _ => return Err(de::Error::missing_field(".tag"))
6560                };
6561                let value = match tag {
6562                    "group_not_found" => GroupMembersSelectorError::GroupNotFound,
6563                    "system_managed_group_disallowed" => GroupMembersSelectorError::SystemManagedGroupDisallowed,
6564                    "member_not_in_group" => GroupMembersSelectorError::MemberNotInGroup,
6565                    _ => GroupMembersSelectorError::Other,
6566                };
6567                crate::eat_json_fields(&mut map)?;
6568                Ok(value)
6569            }
6570        }
6571        const VARIANTS: &[&str] = &["group_not_found",
6572                                    "other",
6573                                    "system_managed_group_disallowed",
6574                                    "member_not_in_group"];
6575        deserializer.deserialize_struct("GroupMembersSelectorError", VARIANTS, EnumVisitor)
6576    }
6577}
6578
6579impl ::serde::ser::Serialize for GroupMembersSelectorError {
6580    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6581        // union serializer
6582        use serde::ser::SerializeStruct;
6583        match self {
6584            GroupMembersSelectorError::GroupNotFound => {
6585                // unit
6586                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6587                s.serialize_field(".tag", "group_not_found")?;
6588                s.end()
6589            }
6590            GroupMembersSelectorError::SystemManagedGroupDisallowed => {
6591                // unit
6592                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6593                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6594                s.end()
6595            }
6596            GroupMembersSelectorError::MemberNotInGroup => {
6597                // unit
6598                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6599                s.serialize_field(".tag", "member_not_in_group")?;
6600                s.end()
6601            }
6602            GroupMembersSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6603        }
6604    }
6605}
6606
6607impl ::std::error::Error for GroupMembersSelectorError {
6608}
6609
6610impl ::std::fmt::Display for GroupMembersSelectorError {
6611    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6612        match self {
6613            GroupMembersSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6614            GroupMembersSelectorError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6615            GroupMembersSelectorError::MemberNotInGroup => f.write_str("At least one of the specified users is not a member of the group."),
6616            _ => write!(f, "{:?}", *self),
6617        }
6618    }
6619}
6620
6621// union extends GroupSelectorWithTeamGroupError
6622impl From<GroupSelectorWithTeamGroupError> for GroupMembersSelectorError {
6623    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
6624        match parent {
6625            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMembersSelectorError::GroupNotFound,
6626            GroupSelectorWithTeamGroupError::Other => GroupMembersSelectorError::Other,
6627            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMembersSelectorError::SystemManagedGroupDisallowed,
6628        }
6629    }
6630}
6631#[derive(Debug, Clone, PartialEq, Eq)]
6632#[non_exhaustive] // structs may have more fields added in the future.
6633pub struct GroupMembersSetAccessTypeArg {
6634    /// Specify a group.
6635    pub group: GroupSelector,
6636    /// Identity of a user that is a member of `group`.
6637    pub user: UserSelectorArg,
6638    /// New group access type the user will have.
6639    pub access_type: GroupAccessType,
6640    /// Whether to return the list of members in the group. Note that the default value will cause
6641    /// all the group members to be returned in the response. This may take a long time for large
6642    /// groups.
6643    pub return_members: bool,
6644}
6645
6646impl GroupMembersSetAccessTypeArg {
6647    pub fn new(group: GroupSelector, user: UserSelectorArg, access_type: GroupAccessType) -> Self {
6648        GroupMembersSetAccessTypeArg {
6649            group,
6650            user,
6651            access_type,
6652            return_members: true,
6653        }
6654    }
6655
6656    pub fn with_return_members(mut self, value: bool) -> Self {
6657        self.return_members = value;
6658        self
6659    }
6660}
6661
6662const GROUP_MEMBERS_SET_ACCESS_TYPE_ARG_FIELDS: &[&str] = &["group",
6663                                                            "user",
6664                                                            "access_type",
6665                                                            "return_members"];
6666impl GroupMembersSetAccessTypeArg {
6667    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6668        map: V,
6669    ) -> Result<GroupMembersSetAccessTypeArg, V::Error> {
6670        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6671    }
6672
6673    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6674        mut map: V,
6675        optional: bool,
6676    ) -> Result<Option<GroupMembersSetAccessTypeArg>, V::Error> {
6677        let mut field_group = None;
6678        let mut field_user = None;
6679        let mut field_access_type = None;
6680        let mut field_return_members = None;
6681        let mut nothing = true;
6682        while let Some(key) = map.next_key::<&str>()? {
6683            nothing = false;
6684            match key {
6685                "group" => {
6686                    if field_group.is_some() {
6687                        return Err(::serde::de::Error::duplicate_field("group"));
6688                    }
6689                    field_group = Some(map.next_value()?);
6690                }
6691                "user" => {
6692                    if field_user.is_some() {
6693                        return Err(::serde::de::Error::duplicate_field("user"));
6694                    }
6695                    field_user = Some(map.next_value()?);
6696                }
6697                "access_type" => {
6698                    if field_access_type.is_some() {
6699                        return Err(::serde::de::Error::duplicate_field("access_type"));
6700                    }
6701                    field_access_type = Some(map.next_value()?);
6702                }
6703                "return_members" => {
6704                    if field_return_members.is_some() {
6705                        return Err(::serde::de::Error::duplicate_field("return_members"));
6706                    }
6707                    field_return_members = Some(map.next_value()?);
6708                }
6709                _ => {
6710                    // unknown field allowed and ignored
6711                    map.next_value::<::serde_json::Value>()?;
6712                }
6713            }
6714        }
6715        if optional && nothing {
6716            return Ok(None);
6717        }
6718        let result = GroupMembersSetAccessTypeArg {
6719            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6720            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
6721            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
6722            return_members: field_return_members.unwrap_or(true),
6723        };
6724        Ok(Some(result))
6725    }
6726
6727    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6728        &self,
6729        s: &mut S::SerializeStruct,
6730    ) -> Result<(), S::Error> {
6731        use serde::ser::SerializeStruct;
6732        s.serialize_field("group", &self.group)?;
6733        s.serialize_field("user", &self.user)?;
6734        s.serialize_field("access_type", &self.access_type)?;
6735        if !self.return_members {
6736            s.serialize_field("return_members", &self.return_members)?;
6737        }
6738        Ok(())
6739    }
6740}
6741
6742impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSetAccessTypeArg {
6743    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6744        // struct deserializer
6745        use serde::de::{MapAccess, Visitor};
6746        struct StructVisitor;
6747        impl<'de> Visitor<'de> for StructVisitor {
6748            type Value = GroupMembersSetAccessTypeArg;
6749            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6750                f.write_str("a GroupMembersSetAccessTypeArg struct")
6751            }
6752            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6753                GroupMembersSetAccessTypeArg::internal_deserialize(map)
6754            }
6755        }
6756        deserializer.deserialize_struct("GroupMembersSetAccessTypeArg", GROUP_MEMBERS_SET_ACCESS_TYPE_ARG_FIELDS, StructVisitor)
6757    }
6758}
6759
6760impl ::serde::ser::Serialize for GroupMembersSetAccessTypeArg {
6761    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6762        // struct serializer
6763        use serde::ser::SerializeStruct;
6764        let mut s = serializer.serialize_struct("GroupMembersSetAccessTypeArg", 4)?;
6765        self.internal_serialize::<S>(&mut s)?;
6766        s.end()
6767    }
6768}
6769
6770// struct extends GroupMemberSelector
6771impl From<GroupMembersSetAccessTypeArg> for GroupMemberSelector {
6772    fn from(subtype: GroupMembersSetAccessTypeArg) -> Self {
6773        Self {
6774            group: subtype.group,
6775            user: subtype.user,
6776        }
6777    }
6778}
6779/// Argument for selecting a single group, either by group_id or by external group ID.
6780#[derive(Debug, Clone, PartialEq, Eq)]
6781pub enum GroupSelector {
6782    /// Group ID.
6783    GroupId(crate::types::team_common::GroupId),
6784    /// External ID of the group.
6785    GroupExternalId(crate::types::team_common::GroupExternalId),
6786}
6787
6788impl<'de> ::serde::de::Deserialize<'de> for GroupSelector {
6789    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6790        // union deserializer
6791        use serde::de::{self, MapAccess, Visitor};
6792        struct EnumVisitor;
6793        impl<'de> Visitor<'de> for EnumVisitor {
6794            type Value = GroupSelector;
6795            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6796                f.write_str("a GroupSelector structure")
6797            }
6798            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6799                let tag: &str = match map.next_key()? {
6800                    Some(".tag") => map.next_value()?,
6801                    _ => return Err(de::Error::missing_field(".tag"))
6802                };
6803                let value = match tag {
6804                    "group_id" => {
6805                        match map.next_key()? {
6806                            Some("group_id") => GroupSelector::GroupId(map.next_value()?),
6807                            None => return Err(de::Error::missing_field("group_id")),
6808                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6809                        }
6810                    }
6811                    "group_external_id" => {
6812                        match map.next_key()? {
6813                            Some("group_external_id") => GroupSelector::GroupExternalId(map.next_value()?),
6814                            None => return Err(de::Error::missing_field("group_external_id")),
6815                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6816                        }
6817                    }
6818                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
6819                };
6820                crate::eat_json_fields(&mut map)?;
6821                Ok(value)
6822            }
6823        }
6824        const VARIANTS: &[&str] = &["group_id",
6825                                    "group_external_id"];
6826        deserializer.deserialize_struct("GroupSelector", VARIANTS, EnumVisitor)
6827    }
6828}
6829
6830impl ::serde::ser::Serialize for GroupSelector {
6831    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6832        // union serializer
6833        use serde::ser::SerializeStruct;
6834        match self {
6835            GroupSelector::GroupId(x) => {
6836                // primitive
6837                let mut s = serializer.serialize_struct("GroupSelector", 2)?;
6838                s.serialize_field(".tag", "group_id")?;
6839                s.serialize_field("group_id", x)?;
6840                s.end()
6841            }
6842            GroupSelector::GroupExternalId(x) => {
6843                // primitive
6844                let mut s = serializer.serialize_struct("GroupSelector", 2)?;
6845                s.serialize_field(".tag", "group_external_id")?;
6846                s.serialize_field("group_external_id", x)?;
6847                s.end()
6848            }
6849        }
6850    }
6851}
6852
6853/// Error that can be raised when [`GroupSelector`] is used.
6854#[derive(Debug, Clone, PartialEq, Eq)]
6855#[non_exhaustive] // variants may be added in the future
6856pub enum GroupSelectorError {
6857    /// No matching group found. No groups match the specified group ID.
6858    GroupNotFound,
6859    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6860    /// typically indicates that this SDK version is out of date.
6861    Other,
6862}
6863
6864impl<'de> ::serde::de::Deserialize<'de> for GroupSelectorError {
6865    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6866        // union deserializer
6867        use serde::de::{self, MapAccess, Visitor};
6868        struct EnumVisitor;
6869        impl<'de> Visitor<'de> for EnumVisitor {
6870            type Value = GroupSelectorError;
6871            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6872                f.write_str("a GroupSelectorError structure")
6873            }
6874            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6875                let tag: &str = match map.next_key()? {
6876                    Some(".tag") => map.next_value()?,
6877                    _ => return Err(de::Error::missing_field(".tag"))
6878                };
6879                let value = match tag {
6880                    "group_not_found" => GroupSelectorError::GroupNotFound,
6881                    _ => GroupSelectorError::Other,
6882                };
6883                crate::eat_json_fields(&mut map)?;
6884                Ok(value)
6885            }
6886        }
6887        const VARIANTS: &[&str] = &["group_not_found",
6888                                    "other"];
6889        deserializer.deserialize_struct("GroupSelectorError", VARIANTS, EnumVisitor)
6890    }
6891}
6892
6893impl ::serde::ser::Serialize for GroupSelectorError {
6894    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6895        // union serializer
6896        use serde::ser::SerializeStruct;
6897        match self {
6898            GroupSelectorError::GroupNotFound => {
6899                // unit
6900                let mut s = serializer.serialize_struct("GroupSelectorError", 1)?;
6901                s.serialize_field(".tag", "group_not_found")?;
6902                s.end()
6903            }
6904            GroupSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6905        }
6906    }
6907}
6908
6909impl ::std::error::Error for GroupSelectorError {
6910}
6911
6912impl ::std::fmt::Display for GroupSelectorError {
6913    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6914        match self {
6915            GroupSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6916            _ => write!(f, "{:?}", *self),
6917        }
6918    }
6919}
6920
6921/// Error that can be raised when [`GroupSelector`] is used and team groups are disallowed from
6922/// being used.
6923#[derive(Debug, Clone, PartialEq, Eq)]
6924#[non_exhaustive] // variants may be added in the future
6925pub enum GroupSelectorWithTeamGroupError {
6926    /// No matching group found. No groups match the specified group ID.
6927    GroupNotFound,
6928    /// This operation is not supported on system-managed groups.
6929    SystemManagedGroupDisallowed,
6930    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6931    /// typically indicates that this SDK version is out of date.
6932    Other,
6933}
6934
6935impl<'de> ::serde::de::Deserialize<'de> for GroupSelectorWithTeamGroupError {
6936    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6937        // union deserializer
6938        use serde::de::{self, MapAccess, Visitor};
6939        struct EnumVisitor;
6940        impl<'de> Visitor<'de> for EnumVisitor {
6941            type Value = GroupSelectorWithTeamGroupError;
6942            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6943                f.write_str("a GroupSelectorWithTeamGroupError structure")
6944            }
6945            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6946                let tag: &str = match map.next_key()? {
6947                    Some(".tag") => map.next_value()?,
6948                    _ => return Err(de::Error::missing_field(".tag"))
6949                };
6950                let value = match tag {
6951                    "group_not_found" => GroupSelectorWithTeamGroupError::GroupNotFound,
6952                    "system_managed_group_disallowed" => GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed,
6953                    _ => GroupSelectorWithTeamGroupError::Other,
6954                };
6955                crate::eat_json_fields(&mut map)?;
6956                Ok(value)
6957            }
6958        }
6959        const VARIANTS: &[&str] = &["group_not_found",
6960                                    "other",
6961                                    "system_managed_group_disallowed"];
6962        deserializer.deserialize_struct("GroupSelectorWithTeamGroupError", VARIANTS, EnumVisitor)
6963    }
6964}
6965
6966impl ::serde::ser::Serialize for GroupSelectorWithTeamGroupError {
6967    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6968        // union serializer
6969        use serde::ser::SerializeStruct;
6970        match self {
6971            GroupSelectorWithTeamGroupError::GroupNotFound => {
6972                // unit
6973                let mut s = serializer.serialize_struct("GroupSelectorWithTeamGroupError", 1)?;
6974                s.serialize_field(".tag", "group_not_found")?;
6975                s.end()
6976            }
6977            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => {
6978                // unit
6979                let mut s = serializer.serialize_struct("GroupSelectorWithTeamGroupError", 1)?;
6980                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6981                s.end()
6982            }
6983            GroupSelectorWithTeamGroupError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6984        }
6985    }
6986}
6987
6988impl ::std::error::Error for GroupSelectorWithTeamGroupError {
6989}
6990
6991impl ::std::fmt::Display for GroupSelectorWithTeamGroupError {
6992    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6993        match self {
6994            GroupSelectorWithTeamGroupError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6995            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6996            _ => write!(f, "{:?}", *self),
6997        }
6998    }
6999}
7000
7001// union extends GroupSelectorError
7002impl From<GroupSelectorError> for GroupSelectorWithTeamGroupError {
7003    fn from(parent: GroupSelectorError) -> Self {
7004        match parent {
7005            GroupSelectorError::GroupNotFound => GroupSelectorWithTeamGroupError::GroupNotFound,
7006            GroupSelectorError::Other => GroupSelectorWithTeamGroupError::Other,
7007        }
7008    }
7009}
7010#[derive(Debug, Clone, PartialEq, Eq)]
7011#[non_exhaustive] // structs may have more fields added in the future.
7012pub struct GroupUpdateArgs {
7013    /// Specify a group.
7014    pub group: GroupSelector,
7015    /// Whether to return the list of members in the group. Note that the default value will cause
7016    /// all the group members to be returned in the response. This may take a long time for large
7017    /// groups.
7018    pub return_members: bool,
7019    /// Optional argument. Set group name to this if provided.
7020    pub new_group_name: Option<String>,
7021    /// Optional argument. New group external ID. If the argument is None, the group's external_id
7022    /// won't be updated. If the argument is empty string, the group's external id will be cleared.
7023    pub new_group_external_id: Option<crate::types::team_common::GroupExternalId>,
7024    /// Set new group management type, if provided.
7025    pub new_group_management_type: Option<crate::types::team_common::GroupManagementType>,
7026}
7027
7028impl GroupUpdateArgs {
7029    pub fn new(group: GroupSelector) -> Self {
7030        GroupUpdateArgs {
7031            group,
7032            return_members: true,
7033            new_group_name: None,
7034            new_group_external_id: None,
7035            new_group_management_type: None,
7036        }
7037    }
7038
7039    pub fn with_return_members(mut self, value: bool) -> Self {
7040        self.return_members = value;
7041        self
7042    }
7043
7044    pub fn with_new_group_name(mut self, value: String) -> Self {
7045        self.new_group_name = Some(value);
7046        self
7047    }
7048
7049    pub fn with_new_group_external_id(
7050        mut self,
7051        value: crate::types::team_common::GroupExternalId,
7052    ) -> Self {
7053        self.new_group_external_id = Some(value);
7054        self
7055    }
7056
7057    pub fn with_new_group_management_type(
7058        mut self,
7059        value: crate::types::team_common::GroupManagementType,
7060    ) -> Self {
7061        self.new_group_management_type = Some(value);
7062        self
7063    }
7064}
7065
7066const GROUP_UPDATE_ARGS_FIELDS: &[&str] = &["group",
7067                                            "return_members",
7068                                            "new_group_name",
7069                                            "new_group_external_id",
7070                                            "new_group_management_type"];
7071impl GroupUpdateArgs {
7072    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7073        map: V,
7074    ) -> Result<GroupUpdateArgs, V::Error> {
7075        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7076    }
7077
7078    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7079        mut map: V,
7080        optional: bool,
7081    ) -> Result<Option<GroupUpdateArgs>, V::Error> {
7082        let mut field_group = None;
7083        let mut field_return_members = None;
7084        let mut field_new_group_name = None;
7085        let mut field_new_group_external_id = None;
7086        let mut field_new_group_management_type = None;
7087        let mut nothing = true;
7088        while let Some(key) = map.next_key::<&str>()? {
7089            nothing = false;
7090            match key {
7091                "group" => {
7092                    if field_group.is_some() {
7093                        return Err(::serde::de::Error::duplicate_field("group"));
7094                    }
7095                    field_group = Some(map.next_value()?);
7096                }
7097                "return_members" => {
7098                    if field_return_members.is_some() {
7099                        return Err(::serde::de::Error::duplicate_field("return_members"));
7100                    }
7101                    field_return_members = Some(map.next_value()?);
7102                }
7103                "new_group_name" => {
7104                    if field_new_group_name.is_some() {
7105                        return Err(::serde::de::Error::duplicate_field("new_group_name"));
7106                    }
7107                    field_new_group_name = Some(map.next_value()?);
7108                }
7109                "new_group_external_id" => {
7110                    if field_new_group_external_id.is_some() {
7111                        return Err(::serde::de::Error::duplicate_field("new_group_external_id"));
7112                    }
7113                    field_new_group_external_id = Some(map.next_value()?);
7114                }
7115                "new_group_management_type" => {
7116                    if field_new_group_management_type.is_some() {
7117                        return Err(::serde::de::Error::duplicate_field("new_group_management_type"));
7118                    }
7119                    field_new_group_management_type = Some(map.next_value()?);
7120                }
7121                _ => {
7122                    // unknown field allowed and ignored
7123                    map.next_value::<::serde_json::Value>()?;
7124                }
7125            }
7126        }
7127        if optional && nothing {
7128            return Ok(None);
7129        }
7130        let result = GroupUpdateArgs {
7131            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7132            return_members: field_return_members.unwrap_or(true),
7133            new_group_name: field_new_group_name.and_then(Option::flatten),
7134            new_group_external_id: field_new_group_external_id.and_then(Option::flatten),
7135            new_group_management_type: field_new_group_management_type.and_then(Option::flatten),
7136        };
7137        Ok(Some(result))
7138    }
7139
7140    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7141        &self,
7142        s: &mut S::SerializeStruct,
7143    ) -> Result<(), S::Error> {
7144        use serde::ser::SerializeStruct;
7145        s.serialize_field("group", &self.group)?;
7146        if !self.return_members {
7147            s.serialize_field("return_members", &self.return_members)?;
7148        }
7149        if let Some(val) = &self.new_group_name {
7150            s.serialize_field("new_group_name", val)?;
7151        }
7152        if let Some(val) = &self.new_group_external_id {
7153            s.serialize_field("new_group_external_id", val)?;
7154        }
7155        if let Some(val) = &self.new_group_management_type {
7156            s.serialize_field("new_group_management_type", val)?;
7157        }
7158        Ok(())
7159    }
7160}
7161
7162impl<'de> ::serde::de::Deserialize<'de> for GroupUpdateArgs {
7163    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7164        // struct deserializer
7165        use serde::de::{MapAccess, Visitor};
7166        struct StructVisitor;
7167        impl<'de> Visitor<'de> for StructVisitor {
7168            type Value = GroupUpdateArgs;
7169            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7170                f.write_str("a GroupUpdateArgs struct")
7171            }
7172            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7173                GroupUpdateArgs::internal_deserialize(map)
7174            }
7175        }
7176        deserializer.deserialize_struct("GroupUpdateArgs", GROUP_UPDATE_ARGS_FIELDS, StructVisitor)
7177    }
7178}
7179
7180impl ::serde::ser::Serialize for GroupUpdateArgs {
7181    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7182        // struct serializer
7183        use serde::ser::SerializeStruct;
7184        let mut s = serializer.serialize_struct("GroupUpdateArgs", 5)?;
7185        self.internal_serialize::<S>(&mut s)?;
7186        s.end()
7187    }
7188}
7189
7190// struct extends IncludeMembersArg
7191impl From<GroupUpdateArgs> for IncludeMembersArg {
7192    fn from(subtype: GroupUpdateArgs) -> Self {
7193        Self {
7194            return_members: subtype.return_members,
7195        }
7196    }
7197}
7198#[derive(Debug, Clone, PartialEq, Eq)]
7199#[non_exhaustive] // variants may be added in the future
7200pub enum GroupUpdateError {
7201    /// No matching group found. No groups match the specified group ID.
7202    GroupNotFound,
7203    /// This operation is not supported on system-managed groups.
7204    SystemManagedGroupDisallowed,
7205    /// The requested group name is already being used by another group.
7206    GroupNameAlreadyUsed,
7207    /// Group name is empty or has invalid characters.
7208    GroupNameInvalid,
7209    /// The requested external ID is already being used by another group.
7210    ExternalIdAlreadyInUse,
7211    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7212    /// typically indicates that this SDK version is out of date.
7213    Other,
7214}
7215
7216impl<'de> ::serde::de::Deserialize<'de> for GroupUpdateError {
7217    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7218        // union deserializer
7219        use serde::de::{self, MapAccess, Visitor};
7220        struct EnumVisitor;
7221        impl<'de> Visitor<'de> for EnumVisitor {
7222            type Value = GroupUpdateError;
7223            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7224                f.write_str("a GroupUpdateError structure")
7225            }
7226            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7227                let tag: &str = match map.next_key()? {
7228                    Some(".tag") => map.next_value()?,
7229                    _ => return Err(de::Error::missing_field(".tag"))
7230                };
7231                let value = match tag {
7232                    "group_not_found" => GroupUpdateError::GroupNotFound,
7233                    "system_managed_group_disallowed" => GroupUpdateError::SystemManagedGroupDisallowed,
7234                    "group_name_already_used" => GroupUpdateError::GroupNameAlreadyUsed,
7235                    "group_name_invalid" => GroupUpdateError::GroupNameInvalid,
7236                    "external_id_already_in_use" => GroupUpdateError::ExternalIdAlreadyInUse,
7237                    _ => GroupUpdateError::Other,
7238                };
7239                crate::eat_json_fields(&mut map)?;
7240                Ok(value)
7241            }
7242        }
7243        const VARIANTS: &[&str] = &["group_not_found",
7244                                    "other",
7245                                    "system_managed_group_disallowed",
7246                                    "group_name_already_used",
7247                                    "group_name_invalid",
7248                                    "external_id_already_in_use"];
7249        deserializer.deserialize_struct("GroupUpdateError", VARIANTS, EnumVisitor)
7250    }
7251}
7252
7253impl ::serde::ser::Serialize for GroupUpdateError {
7254    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7255        // union serializer
7256        use serde::ser::SerializeStruct;
7257        match self {
7258            GroupUpdateError::GroupNotFound => {
7259                // unit
7260                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7261                s.serialize_field(".tag", "group_not_found")?;
7262                s.end()
7263            }
7264            GroupUpdateError::SystemManagedGroupDisallowed => {
7265                // unit
7266                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7267                s.serialize_field(".tag", "system_managed_group_disallowed")?;
7268                s.end()
7269            }
7270            GroupUpdateError::GroupNameAlreadyUsed => {
7271                // unit
7272                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7273                s.serialize_field(".tag", "group_name_already_used")?;
7274                s.end()
7275            }
7276            GroupUpdateError::GroupNameInvalid => {
7277                // unit
7278                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7279                s.serialize_field(".tag", "group_name_invalid")?;
7280                s.end()
7281            }
7282            GroupUpdateError::ExternalIdAlreadyInUse => {
7283                // unit
7284                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7285                s.serialize_field(".tag", "external_id_already_in_use")?;
7286                s.end()
7287            }
7288            GroupUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7289        }
7290    }
7291}
7292
7293impl ::std::error::Error for GroupUpdateError {
7294}
7295
7296impl ::std::fmt::Display for GroupUpdateError {
7297    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7298        match self {
7299            GroupUpdateError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
7300            GroupUpdateError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
7301            GroupUpdateError::GroupNameAlreadyUsed => f.write_str("The requested group name is already being used by another group."),
7302            GroupUpdateError::GroupNameInvalid => f.write_str("Group name is empty or has invalid characters."),
7303            GroupUpdateError::ExternalIdAlreadyInUse => f.write_str("The requested external ID is already being used by another group."),
7304            _ => write!(f, "{:?}", *self),
7305        }
7306    }
7307}
7308
7309// union extends GroupSelectorWithTeamGroupError
7310impl From<GroupSelectorWithTeamGroupError> for GroupUpdateError {
7311    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
7312        match parent {
7313            GroupSelectorWithTeamGroupError::GroupNotFound => GroupUpdateError::GroupNotFound,
7314            GroupSelectorWithTeamGroupError::Other => GroupUpdateError::Other,
7315            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupUpdateError::SystemManagedGroupDisallowed,
7316        }
7317    }
7318}
7319#[derive(Debug, Clone, PartialEq, Eq)]
7320#[non_exhaustive] // variants may be added in the future
7321pub enum GroupsGetInfoError {
7322    /// The group is not on your team.
7323    GroupNotOnTeam,
7324    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7325    /// typically indicates that this SDK version is out of date.
7326    Other,
7327}
7328
7329impl<'de> ::serde::de::Deserialize<'de> for GroupsGetInfoError {
7330    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7331        // union deserializer
7332        use serde::de::{self, MapAccess, Visitor};
7333        struct EnumVisitor;
7334        impl<'de> Visitor<'de> for EnumVisitor {
7335            type Value = GroupsGetInfoError;
7336            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7337                f.write_str("a GroupsGetInfoError structure")
7338            }
7339            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7340                let tag: &str = match map.next_key()? {
7341                    Some(".tag") => map.next_value()?,
7342                    _ => return Err(de::Error::missing_field(".tag"))
7343                };
7344                let value = match tag {
7345                    "group_not_on_team" => GroupsGetInfoError::GroupNotOnTeam,
7346                    _ => GroupsGetInfoError::Other,
7347                };
7348                crate::eat_json_fields(&mut map)?;
7349                Ok(value)
7350            }
7351        }
7352        const VARIANTS: &[&str] = &["group_not_on_team",
7353                                    "other"];
7354        deserializer.deserialize_struct("GroupsGetInfoError", VARIANTS, EnumVisitor)
7355    }
7356}
7357
7358impl ::serde::ser::Serialize for GroupsGetInfoError {
7359    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7360        // union serializer
7361        use serde::ser::SerializeStruct;
7362        match self {
7363            GroupsGetInfoError::GroupNotOnTeam => {
7364                // unit
7365                let mut s = serializer.serialize_struct("GroupsGetInfoError", 1)?;
7366                s.serialize_field(".tag", "group_not_on_team")?;
7367                s.end()
7368            }
7369            GroupsGetInfoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7370        }
7371    }
7372}
7373
7374impl ::std::error::Error for GroupsGetInfoError {
7375}
7376
7377impl ::std::fmt::Display for GroupsGetInfoError {
7378    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7379        match self {
7380            GroupsGetInfoError::GroupNotOnTeam => f.write_str("The group is not on your team."),
7381            _ => write!(f, "{:?}", *self),
7382        }
7383    }
7384}
7385
7386#[derive(Debug, Clone, PartialEq, Eq)]
7387pub enum GroupsGetInfoItem {
7388    /// An ID that was provided as a parameter to
7389    /// [`groups_get_info()`](crate::team::groups_get_info), and did not match a corresponding
7390    /// group. The ID can be a group ID, or an external ID, depending on how the method was called.
7391    IdNotFound(String),
7392    /// Info about a group.
7393    GroupInfo(GroupFullInfo),
7394}
7395
7396impl<'de> ::serde::de::Deserialize<'de> for GroupsGetInfoItem {
7397    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7398        // union deserializer
7399        use serde::de::{self, MapAccess, Visitor};
7400        struct EnumVisitor;
7401        impl<'de> Visitor<'de> for EnumVisitor {
7402            type Value = GroupsGetInfoItem;
7403            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7404                f.write_str("a GroupsGetInfoItem structure")
7405            }
7406            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7407                let tag: &str = match map.next_key()? {
7408                    Some(".tag") => map.next_value()?,
7409                    _ => return Err(de::Error::missing_field(".tag"))
7410                };
7411                let value = match tag {
7412                    "id_not_found" => {
7413                        match map.next_key()? {
7414                            Some("id_not_found") => GroupsGetInfoItem::IdNotFound(map.next_value()?),
7415                            None => return Err(de::Error::missing_field("id_not_found")),
7416                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
7417                        }
7418                    }
7419                    "group_info" => GroupsGetInfoItem::GroupInfo(GroupFullInfo::internal_deserialize(&mut map)?),
7420                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
7421                };
7422                crate::eat_json_fields(&mut map)?;
7423                Ok(value)
7424            }
7425        }
7426        const VARIANTS: &[&str] = &["id_not_found",
7427                                    "group_info"];
7428        deserializer.deserialize_struct("GroupsGetInfoItem", VARIANTS, EnumVisitor)
7429    }
7430}
7431
7432impl ::serde::ser::Serialize for GroupsGetInfoItem {
7433    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7434        // union serializer
7435        use serde::ser::SerializeStruct;
7436        match self {
7437            GroupsGetInfoItem::IdNotFound(x) => {
7438                // primitive
7439                let mut s = serializer.serialize_struct("GroupsGetInfoItem", 2)?;
7440                s.serialize_field(".tag", "id_not_found")?;
7441                s.serialize_field("id_not_found", x)?;
7442                s.end()
7443            }
7444            GroupsGetInfoItem::GroupInfo(x) => {
7445                // struct
7446                let mut s = serializer.serialize_struct("GroupsGetInfoItem", 8)?;
7447                s.serialize_field(".tag", "group_info")?;
7448                x.internal_serialize::<S>(&mut s)?;
7449                s.end()
7450            }
7451        }
7452    }
7453}
7454
7455#[derive(Debug, Clone, PartialEq, Eq)]
7456#[non_exhaustive] // structs may have more fields added in the future.
7457pub struct GroupsListArg {
7458    /// Number of results to return per call.
7459    pub limit: u32,
7460}
7461
7462impl Default for GroupsListArg {
7463    fn default() -> Self {
7464        GroupsListArg {
7465            limit: 1000,
7466        }
7467    }
7468}
7469
7470impl GroupsListArg {
7471    pub fn with_limit(mut self, value: u32) -> Self {
7472        self.limit = value;
7473        self
7474    }
7475}
7476
7477const GROUPS_LIST_ARG_FIELDS: &[&str] = &["limit"];
7478impl GroupsListArg {
7479    // no _opt deserializer
7480    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7481        mut map: V,
7482    ) -> Result<GroupsListArg, V::Error> {
7483        let mut field_limit = None;
7484        while let Some(key) = map.next_key::<&str>()? {
7485            match key {
7486                "limit" => {
7487                    if field_limit.is_some() {
7488                        return Err(::serde::de::Error::duplicate_field("limit"));
7489                    }
7490                    field_limit = Some(map.next_value()?);
7491                }
7492                _ => {
7493                    // unknown field allowed and ignored
7494                    map.next_value::<::serde_json::Value>()?;
7495                }
7496            }
7497        }
7498        let result = GroupsListArg {
7499            limit: field_limit.unwrap_or(1000),
7500        };
7501        Ok(result)
7502    }
7503
7504    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7505        &self,
7506        s: &mut S::SerializeStruct,
7507    ) -> Result<(), S::Error> {
7508        use serde::ser::SerializeStruct;
7509        if self.limit != 1000 {
7510            s.serialize_field("limit", &self.limit)?;
7511        }
7512        Ok(())
7513    }
7514}
7515
7516impl<'de> ::serde::de::Deserialize<'de> for GroupsListArg {
7517    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7518        // struct deserializer
7519        use serde::de::{MapAccess, Visitor};
7520        struct StructVisitor;
7521        impl<'de> Visitor<'de> for StructVisitor {
7522            type Value = GroupsListArg;
7523            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7524                f.write_str("a GroupsListArg struct")
7525            }
7526            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7527                GroupsListArg::internal_deserialize(map)
7528            }
7529        }
7530        deserializer.deserialize_struct("GroupsListArg", GROUPS_LIST_ARG_FIELDS, StructVisitor)
7531    }
7532}
7533
7534impl ::serde::ser::Serialize for GroupsListArg {
7535    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7536        // struct serializer
7537        use serde::ser::SerializeStruct;
7538        let mut s = serializer.serialize_struct("GroupsListArg", 1)?;
7539        self.internal_serialize::<S>(&mut s)?;
7540        s.end()
7541    }
7542}
7543
7544#[derive(Debug, Clone, PartialEq, Eq)]
7545#[non_exhaustive] // structs may have more fields added in the future.
7546pub struct GroupsListContinueArg {
7547    /// Indicates from what point to get the next set of groups.
7548    pub cursor: String,
7549}
7550
7551impl GroupsListContinueArg {
7552    pub fn new(cursor: String) -> Self {
7553        GroupsListContinueArg {
7554            cursor,
7555        }
7556    }
7557}
7558
7559const GROUPS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
7560impl GroupsListContinueArg {
7561    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7562        map: V,
7563    ) -> Result<GroupsListContinueArg, V::Error> {
7564        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7565    }
7566
7567    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7568        mut map: V,
7569        optional: bool,
7570    ) -> Result<Option<GroupsListContinueArg>, V::Error> {
7571        let mut field_cursor = None;
7572        let mut nothing = true;
7573        while let Some(key) = map.next_key::<&str>()? {
7574            nothing = false;
7575            match key {
7576                "cursor" => {
7577                    if field_cursor.is_some() {
7578                        return Err(::serde::de::Error::duplicate_field("cursor"));
7579                    }
7580                    field_cursor = Some(map.next_value()?);
7581                }
7582                _ => {
7583                    // unknown field allowed and ignored
7584                    map.next_value::<::serde_json::Value>()?;
7585                }
7586            }
7587        }
7588        if optional && nothing {
7589            return Ok(None);
7590        }
7591        let result = GroupsListContinueArg {
7592            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7593        };
7594        Ok(Some(result))
7595    }
7596
7597    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7598        &self,
7599        s: &mut S::SerializeStruct,
7600    ) -> Result<(), S::Error> {
7601        use serde::ser::SerializeStruct;
7602        s.serialize_field("cursor", &self.cursor)?;
7603        Ok(())
7604    }
7605}
7606
7607impl<'de> ::serde::de::Deserialize<'de> for GroupsListContinueArg {
7608    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7609        // struct deserializer
7610        use serde::de::{MapAccess, Visitor};
7611        struct StructVisitor;
7612        impl<'de> Visitor<'de> for StructVisitor {
7613            type Value = GroupsListContinueArg;
7614            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7615                f.write_str("a GroupsListContinueArg struct")
7616            }
7617            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7618                GroupsListContinueArg::internal_deserialize(map)
7619            }
7620        }
7621        deserializer.deserialize_struct("GroupsListContinueArg", GROUPS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
7622    }
7623}
7624
7625impl ::serde::ser::Serialize for GroupsListContinueArg {
7626    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7627        // struct serializer
7628        use serde::ser::SerializeStruct;
7629        let mut s = serializer.serialize_struct("GroupsListContinueArg", 1)?;
7630        self.internal_serialize::<S>(&mut s)?;
7631        s.end()
7632    }
7633}
7634
7635#[derive(Debug, Clone, PartialEq, Eq)]
7636#[non_exhaustive] // variants may be added in the future
7637pub enum GroupsListContinueError {
7638    /// The cursor is invalid.
7639    InvalidCursor,
7640    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7641    /// typically indicates that this SDK version is out of date.
7642    Other,
7643}
7644
7645impl<'de> ::serde::de::Deserialize<'de> for GroupsListContinueError {
7646    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7647        // union deserializer
7648        use serde::de::{self, MapAccess, Visitor};
7649        struct EnumVisitor;
7650        impl<'de> Visitor<'de> for EnumVisitor {
7651            type Value = GroupsListContinueError;
7652            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7653                f.write_str("a GroupsListContinueError structure")
7654            }
7655            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7656                let tag: &str = match map.next_key()? {
7657                    Some(".tag") => map.next_value()?,
7658                    _ => return Err(de::Error::missing_field(".tag"))
7659                };
7660                let value = match tag {
7661                    "invalid_cursor" => GroupsListContinueError::InvalidCursor,
7662                    _ => GroupsListContinueError::Other,
7663                };
7664                crate::eat_json_fields(&mut map)?;
7665                Ok(value)
7666            }
7667        }
7668        const VARIANTS: &[&str] = &["invalid_cursor",
7669                                    "other"];
7670        deserializer.deserialize_struct("GroupsListContinueError", VARIANTS, EnumVisitor)
7671    }
7672}
7673
7674impl ::serde::ser::Serialize for GroupsListContinueError {
7675    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7676        // union serializer
7677        use serde::ser::SerializeStruct;
7678        match self {
7679            GroupsListContinueError::InvalidCursor => {
7680                // unit
7681                let mut s = serializer.serialize_struct("GroupsListContinueError", 1)?;
7682                s.serialize_field(".tag", "invalid_cursor")?;
7683                s.end()
7684            }
7685            GroupsListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7686        }
7687    }
7688}
7689
7690impl ::std::error::Error for GroupsListContinueError {
7691}
7692
7693impl ::std::fmt::Display for GroupsListContinueError {
7694    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7695        match self {
7696            GroupsListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
7697            _ => write!(f, "{:?}", *self),
7698        }
7699    }
7700}
7701
7702#[derive(Debug, Clone, PartialEq, Eq)]
7703#[non_exhaustive] // structs may have more fields added in the future.
7704pub struct GroupsListResult {
7705    pub groups: Vec<crate::types::team_common::GroupSummary>,
7706    /// Pass the cursor into [`groups_list_continue()`](crate::team::groups_list_continue) to obtain
7707    /// the additional groups.
7708    pub cursor: String,
7709    /// Is true if there are additional groups that have not been returned yet. An additional call
7710    /// to [`groups_list_continue()`](crate::team::groups_list_continue) can retrieve them.
7711    pub has_more: bool,
7712}
7713
7714impl GroupsListResult {
7715    pub fn new(
7716        groups: Vec<crate::types::team_common::GroupSummary>,
7717        cursor: String,
7718        has_more: bool,
7719    ) -> Self {
7720        GroupsListResult {
7721            groups,
7722            cursor,
7723            has_more,
7724        }
7725    }
7726}
7727
7728const GROUPS_LIST_RESULT_FIELDS: &[&str] = &["groups",
7729                                             "cursor",
7730                                             "has_more"];
7731impl GroupsListResult {
7732    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7733        map: V,
7734    ) -> Result<GroupsListResult, V::Error> {
7735        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7736    }
7737
7738    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7739        mut map: V,
7740        optional: bool,
7741    ) -> Result<Option<GroupsListResult>, V::Error> {
7742        let mut field_groups = None;
7743        let mut field_cursor = None;
7744        let mut field_has_more = None;
7745        let mut nothing = true;
7746        while let Some(key) = map.next_key::<&str>()? {
7747            nothing = false;
7748            match key {
7749                "groups" => {
7750                    if field_groups.is_some() {
7751                        return Err(::serde::de::Error::duplicate_field("groups"));
7752                    }
7753                    field_groups = Some(map.next_value()?);
7754                }
7755                "cursor" => {
7756                    if field_cursor.is_some() {
7757                        return Err(::serde::de::Error::duplicate_field("cursor"));
7758                    }
7759                    field_cursor = Some(map.next_value()?);
7760                }
7761                "has_more" => {
7762                    if field_has_more.is_some() {
7763                        return Err(::serde::de::Error::duplicate_field("has_more"));
7764                    }
7765                    field_has_more = Some(map.next_value()?);
7766                }
7767                _ => {
7768                    // unknown field allowed and ignored
7769                    map.next_value::<::serde_json::Value>()?;
7770                }
7771            }
7772        }
7773        if optional && nothing {
7774            return Ok(None);
7775        }
7776        let result = GroupsListResult {
7777            groups: field_groups.ok_or_else(|| ::serde::de::Error::missing_field("groups"))?,
7778            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7779            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
7780        };
7781        Ok(Some(result))
7782    }
7783
7784    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7785        &self,
7786        s: &mut S::SerializeStruct,
7787    ) -> Result<(), S::Error> {
7788        use serde::ser::SerializeStruct;
7789        s.serialize_field("groups", &self.groups)?;
7790        s.serialize_field("cursor", &self.cursor)?;
7791        s.serialize_field("has_more", &self.has_more)?;
7792        Ok(())
7793    }
7794}
7795
7796impl<'de> ::serde::de::Deserialize<'de> for GroupsListResult {
7797    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7798        // struct deserializer
7799        use serde::de::{MapAccess, Visitor};
7800        struct StructVisitor;
7801        impl<'de> Visitor<'de> for StructVisitor {
7802            type Value = GroupsListResult;
7803            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7804                f.write_str("a GroupsListResult struct")
7805            }
7806            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7807                GroupsListResult::internal_deserialize(map)
7808            }
7809        }
7810        deserializer.deserialize_struct("GroupsListResult", GROUPS_LIST_RESULT_FIELDS, StructVisitor)
7811    }
7812}
7813
7814impl ::serde::ser::Serialize for GroupsListResult {
7815    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7816        // struct serializer
7817        use serde::ser::SerializeStruct;
7818        let mut s = serializer.serialize_struct("GroupsListResult", 3)?;
7819        self.internal_serialize::<S>(&mut s)?;
7820        s.end()
7821    }
7822}
7823
7824#[derive(Debug, Clone, PartialEq, Eq)]
7825#[non_exhaustive] // structs may have more fields added in the future.
7826pub struct GroupsMembersListArg {
7827    /// The group whose members are to be listed.
7828    pub group: GroupSelector,
7829    /// Number of results to return per call.
7830    pub limit: u32,
7831}
7832
7833impl GroupsMembersListArg {
7834    pub fn new(group: GroupSelector) -> Self {
7835        GroupsMembersListArg {
7836            group,
7837            limit: 1000,
7838        }
7839    }
7840
7841    pub fn with_limit(mut self, value: u32) -> Self {
7842        self.limit = value;
7843        self
7844    }
7845}
7846
7847const GROUPS_MEMBERS_LIST_ARG_FIELDS: &[&str] = &["group",
7848                                                  "limit"];
7849impl GroupsMembersListArg {
7850    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7851        map: V,
7852    ) -> Result<GroupsMembersListArg, V::Error> {
7853        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7854    }
7855
7856    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7857        mut map: V,
7858        optional: bool,
7859    ) -> Result<Option<GroupsMembersListArg>, V::Error> {
7860        let mut field_group = None;
7861        let mut field_limit = None;
7862        let mut nothing = true;
7863        while let Some(key) = map.next_key::<&str>()? {
7864            nothing = false;
7865            match key {
7866                "group" => {
7867                    if field_group.is_some() {
7868                        return Err(::serde::de::Error::duplicate_field("group"));
7869                    }
7870                    field_group = Some(map.next_value()?);
7871                }
7872                "limit" => {
7873                    if field_limit.is_some() {
7874                        return Err(::serde::de::Error::duplicate_field("limit"));
7875                    }
7876                    field_limit = Some(map.next_value()?);
7877                }
7878                _ => {
7879                    // unknown field allowed and ignored
7880                    map.next_value::<::serde_json::Value>()?;
7881                }
7882            }
7883        }
7884        if optional && nothing {
7885            return Ok(None);
7886        }
7887        let result = GroupsMembersListArg {
7888            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7889            limit: field_limit.unwrap_or(1000),
7890        };
7891        Ok(Some(result))
7892    }
7893
7894    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7895        &self,
7896        s: &mut S::SerializeStruct,
7897    ) -> Result<(), S::Error> {
7898        use serde::ser::SerializeStruct;
7899        s.serialize_field("group", &self.group)?;
7900        if self.limit != 1000 {
7901            s.serialize_field("limit", &self.limit)?;
7902        }
7903        Ok(())
7904    }
7905}
7906
7907impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListArg {
7908    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7909        // struct deserializer
7910        use serde::de::{MapAccess, Visitor};
7911        struct StructVisitor;
7912        impl<'de> Visitor<'de> for StructVisitor {
7913            type Value = GroupsMembersListArg;
7914            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7915                f.write_str("a GroupsMembersListArg struct")
7916            }
7917            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7918                GroupsMembersListArg::internal_deserialize(map)
7919            }
7920        }
7921        deserializer.deserialize_struct("GroupsMembersListArg", GROUPS_MEMBERS_LIST_ARG_FIELDS, StructVisitor)
7922    }
7923}
7924
7925impl ::serde::ser::Serialize for GroupsMembersListArg {
7926    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7927        // struct serializer
7928        use serde::ser::SerializeStruct;
7929        let mut s = serializer.serialize_struct("GroupsMembersListArg", 2)?;
7930        self.internal_serialize::<S>(&mut s)?;
7931        s.end()
7932    }
7933}
7934
7935#[derive(Debug, Clone, PartialEq, Eq)]
7936#[non_exhaustive] // structs may have more fields added in the future.
7937pub struct GroupsMembersListContinueArg {
7938    /// Indicates from what point to get the next set of groups.
7939    pub cursor: String,
7940}
7941
7942impl GroupsMembersListContinueArg {
7943    pub fn new(cursor: String) -> Self {
7944        GroupsMembersListContinueArg {
7945            cursor,
7946        }
7947    }
7948}
7949
7950const GROUPS_MEMBERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
7951impl GroupsMembersListContinueArg {
7952    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7953        map: V,
7954    ) -> Result<GroupsMembersListContinueArg, V::Error> {
7955        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7956    }
7957
7958    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7959        mut map: V,
7960        optional: bool,
7961    ) -> Result<Option<GroupsMembersListContinueArg>, V::Error> {
7962        let mut field_cursor = None;
7963        let mut nothing = true;
7964        while let Some(key) = map.next_key::<&str>()? {
7965            nothing = false;
7966            match key {
7967                "cursor" => {
7968                    if field_cursor.is_some() {
7969                        return Err(::serde::de::Error::duplicate_field("cursor"));
7970                    }
7971                    field_cursor = Some(map.next_value()?);
7972                }
7973                _ => {
7974                    // unknown field allowed and ignored
7975                    map.next_value::<::serde_json::Value>()?;
7976                }
7977            }
7978        }
7979        if optional && nothing {
7980            return Ok(None);
7981        }
7982        let result = GroupsMembersListContinueArg {
7983            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7984        };
7985        Ok(Some(result))
7986    }
7987
7988    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7989        &self,
7990        s: &mut S::SerializeStruct,
7991    ) -> Result<(), S::Error> {
7992        use serde::ser::SerializeStruct;
7993        s.serialize_field("cursor", &self.cursor)?;
7994        Ok(())
7995    }
7996}
7997
7998impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListContinueArg {
7999    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8000        // struct deserializer
8001        use serde::de::{MapAccess, Visitor};
8002        struct StructVisitor;
8003        impl<'de> Visitor<'de> for StructVisitor {
8004            type Value = GroupsMembersListContinueArg;
8005            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8006                f.write_str("a GroupsMembersListContinueArg struct")
8007            }
8008            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8009                GroupsMembersListContinueArg::internal_deserialize(map)
8010            }
8011        }
8012        deserializer.deserialize_struct("GroupsMembersListContinueArg", GROUPS_MEMBERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
8013    }
8014}
8015
8016impl ::serde::ser::Serialize for GroupsMembersListContinueArg {
8017    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8018        // struct serializer
8019        use serde::ser::SerializeStruct;
8020        let mut s = serializer.serialize_struct("GroupsMembersListContinueArg", 1)?;
8021        self.internal_serialize::<S>(&mut s)?;
8022        s.end()
8023    }
8024}
8025
8026#[derive(Debug, Clone, PartialEq, Eq)]
8027#[non_exhaustive] // variants may be added in the future
8028pub enum GroupsMembersListContinueError {
8029    /// The cursor is invalid.
8030    InvalidCursor,
8031    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8032    /// typically indicates that this SDK version is out of date.
8033    Other,
8034}
8035
8036impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListContinueError {
8037    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8038        // union deserializer
8039        use serde::de::{self, MapAccess, Visitor};
8040        struct EnumVisitor;
8041        impl<'de> Visitor<'de> for EnumVisitor {
8042            type Value = GroupsMembersListContinueError;
8043            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8044                f.write_str("a GroupsMembersListContinueError structure")
8045            }
8046            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8047                let tag: &str = match map.next_key()? {
8048                    Some(".tag") => map.next_value()?,
8049                    _ => return Err(de::Error::missing_field(".tag"))
8050                };
8051                let value = match tag {
8052                    "invalid_cursor" => GroupsMembersListContinueError::InvalidCursor,
8053                    _ => GroupsMembersListContinueError::Other,
8054                };
8055                crate::eat_json_fields(&mut map)?;
8056                Ok(value)
8057            }
8058        }
8059        const VARIANTS: &[&str] = &["invalid_cursor",
8060                                    "other"];
8061        deserializer.deserialize_struct("GroupsMembersListContinueError", VARIANTS, EnumVisitor)
8062    }
8063}
8064
8065impl ::serde::ser::Serialize for GroupsMembersListContinueError {
8066    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8067        // union serializer
8068        use serde::ser::SerializeStruct;
8069        match self {
8070            GroupsMembersListContinueError::InvalidCursor => {
8071                // unit
8072                let mut s = serializer.serialize_struct("GroupsMembersListContinueError", 1)?;
8073                s.serialize_field(".tag", "invalid_cursor")?;
8074                s.end()
8075            }
8076            GroupsMembersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8077        }
8078    }
8079}
8080
8081impl ::std::error::Error for GroupsMembersListContinueError {
8082}
8083
8084impl ::std::fmt::Display for GroupsMembersListContinueError {
8085    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8086        match self {
8087            GroupsMembersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
8088            _ => write!(f, "{:?}", *self),
8089        }
8090    }
8091}
8092
8093#[derive(Debug, Clone, PartialEq, Eq)]
8094#[non_exhaustive] // structs may have more fields added in the future.
8095pub struct GroupsMembersListResult {
8096    pub members: Vec<GroupMemberInfo>,
8097    /// Pass the cursor into
8098    /// [`groups_members_list_continue()`](crate::team::groups_members_list_continue) to obtain
8099    /// additional group members.
8100    pub cursor: String,
8101    /// Is true if there are additional group members that have not been returned yet. An additional
8102    /// call to [`groups_members_list_continue()`](crate::team::groups_members_list_continue) can
8103    /// retrieve them.
8104    pub has_more: bool,
8105}
8106
8107impl GroupsMembersListResult {
8108    pub fn new(members: Vec<GroupMemberInfo>, cursor: String, has_more: bool) -> Self {
8109        GroupsMembersListResult {
8110            members,
8111            cursor,
8112            has_more,
8113        }
8114    }
8115}
8116
8117const GROUPS_MEMBERS_LIST_RESULT_FIELDS: &[&str] = &["members",
8118                                                     "cursor",
8119                                                     "has_more"];
8120impl GroupsMembersListResult {
8121    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8122        map: V,
8123    ) -> Result<GroupsMembersListResult, V::Error> {
8124        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8125    }
8126
8127    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8128        mut map: V,
8129        optional: bool,
8130    ) -> Result<Option<GroupsMembersListResult>, V::Error> {
8131        let mut field_members = None;
8132        let mut field_cursor = None;
8133        let mut field_has_more = None;
8134        let mut nothing = true;
8135        while let Some(key) = map.next_key::<&str>()? {
8136            nothing = false;
8137            match key {
8138                "members" => {
8139                    if field_members.is_some() {
8140                        return Err(::serde::de::Error::duplicate_field("members"));
8141                    }
8142                    field_members = Some(map.next_value()?);
8143                }
8144                "cursor" => {
8145                    if field_cursor.is_some() {
8146                        return Err(::serde::de::Error::duplicate_field("cursor"));
8147                    }
8148                    field_cursor = Some(map.next_value()?);
8149                }
8150                "has_more" => {
8151                    if field_has_more.is_some() {
8152                        return Err(::serde::de::Error::duplicate_field("has_more"));
8153                    }
8154                    field_has_more = Some(map.next_value()?);
8155                }
8156                _ => {
8157                    // unknown field allowed and ignored
8158                    map.next_value::<::serde_json::Value>()?;
8159                }
8160            }
8161        }
8162        if optional && nothing {
8163            return Ok(None);
8164        }
8165        let result = GroupsMembersListResult {
8166            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
8167            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
8168            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
8169        };
8170        Ok(Some(result))
8171    }
8172
8173    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8174        &self,
8175        s: &mut S::SerializeStruct,
8176    ) -> Result<(), S::Error> {
8177        use serde::ser::SerializeStruct;
8178        s.serialize_field("members", &self.members)?;
8179        s.serialize_field("cursor", &self.cursor)?;
8180        s.serialize_field("has_more", &self.has_more)?;
8181        Ok(())
8182    }
8183}
8184
8185impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListResult {
8186    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8187        // struct deserializer
8188        use serde::de::{MapAccess, Visitor};
8189        struct StructVisitor;
8190        impl<'de> Visitor<'de> for StructVisitor {
8191            type Value = GroupsMembersListResult;
8192            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8193                f.write_str("a GroupsMembersListResult struct")
8194            }
8195            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8196                GroupsMembersListResult::internal_deserialize(map)
8197            }
8198        }
8199        deserializer.deserialize_struct("GroupsMembersListResult", GROUPS_MEMBERS_LIST_RESULT_FIELDS, StructVisitor)
8200    }
8201}
8202
8203impl ::serde::ser::Serialize for GroupsMembersListResult {
8204    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8205        // struct serializer
8206        use serde::ser::SerializeStruct;
8207        let mut s = serializer.serialize_struct("GroupsMembersListResult", 3)?;
8208        self.internal_serialize::<S>(&mut s)?;
8209        s.end()
8210    }
8211}
8212
8213#[derive(Debug, Clone, PartialEq, Eq)]
8214#[non_exhaustive] // variants may be added in the future
8215pub enum GroupsPollError {
8216    /// The job ID is invalid.
8217    InvalidAsyncJobId,
8218    /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action
8219    /// you were taking succeeded, and if not, try again. This should happen very rarely.
8220    InternalError,
8221    /// You are not allowed to poll this job.
8222    AccessDenied,
8223    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8224    /// typically indicates that this SDK version is out of date.
8225    Other,
8226}
8227
8228impl<'de> ::serde::de::Deserialize<'de> for GroupsPollError {
8229    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8230        // union deserializer
8231        use serde::de::{self, MapAccess, Visitor};
8232        struct EnumVisitor;
8233        impl<'de> Visitor<'de> for EnumVisitor {
8234            type Value = GroupsPollError;
8235            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8236                f.write_str("a GroupsPollError structure")
8237            }
8238            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8239                let tag: &str = match map.next_key()? {
8240                    Some(".tag") => map.next_value()?,
8241                    _ => return Err(de::Error::missing_field(".tag"))
8242                };
8243                let value = match tag {
8244                    "invalid_async_job_id" => GroupsPollError::InvalidAsyncJobId,
8245                    "internal_error" => GroupsPollError::InternalError,
8246                    "access_denied" => GroupsPollError::AccessDenied,
8247                    _ => GroupsPollError::Other,
8248                };
8249                crate::eat_json_fields(&mut map)?;
8250                Ok(value)
8251            }
8252        }
8253        const VARIANTS: &[&str] = &["invalid_async_job_id",
8254                                    "internal_error",
8255                                    "other",
8256                                    "access_denied"];
8257        deserializer.deserialize_struct("GroupsPollError", VARIANTS, EnumVisitor)
8258    }
8259}
8260
8261impl ::serde::ser::Serialize for GroupsPollError {
8262    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8263        // union serializer
8264        use serde::ser::SerializeStruct;
8265        match self {
8266            GroupsPollError::InvalidAsyncJobId => {
8267                // unit
8268                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8269                s.serialize_field(".tag", "invalid_async_job_id")?;
8270                s.end()
8271            }
8272            GroupsPollError::InternalError => {
8273                // unit
8274                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8275                s.serialize_field(".tag", "internal_error")?;
8276                s.end()
8277            }
8278            GroupsPollError::AccessDenied => {
8279                // unit
8280                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8281                s.serialize_field(".tag", "access_denied")?;
8282                s.end()
8283            }
8284            GroupsPollError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8285        }
8286    }
8287}
8288
8289impl ::std::error::Error for GroupsPollError {
8290}
8291
8292impl ::std::fmt::Display for GroupsPollError {
8293    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8294        match self {
8295            GroupsPollError::InvalidAsyncJobId => f.write_str("The job ID is invalid."),
8296            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."),
8297            GroupsPollError::AccessDenied => f.write_str("You are not allowed to poll this job."),
8298            _ => write!(f, "{:?}", *self),
8299        }
8300    }
8301}
8302
8303// union extends crate::types::dbx_async::PollError
8304impl From<crate::types::dbx_async::PollError> for GroupsPollError {
8305    fn from(parent: crate::types::dbx_async::PollError) -> Self {
8306        match parent {
8307            crate::types::dbx_async::PollError::InvalidAsyncJobId => GroupsPollError::InvalidAsyncJobId,
8308            crate::types::dbx_async::PollError::InternalError => GroupsPollError::InternalError,
8309            crate::types::dbx_async::PollError::Other => GroupsPollError::Other,
8310        }
8311    }
8312}
8313/// Argument for selecting a list of groups, either by group_ids, or external group IDs.
8314#[derive(Debug, Clone, PartialEq, Eq)]
8315pub enum GroupsSelector {
8316    /// List of group IDs.
8317    GroupIds(Vec<crate::types::team_common::GroupId>),
8318    /// List of external IDs of groups.
8319    GroupExternalIds(Vec<String>),
8320}
8321
8322impl<'de> ::serde::de::Deserialize<'de> for GroupsSelector {
8323    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8324        // union deserializer
8325        use serde::de::{self, MapAccess, Visitor};
8326        struct EnumVisitor;
8327        impl<'de> Visitor<'de> for EnumVisitor {
8328            type Value = GroupsSelector;
8329            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8330                f.write_str("a GroupsSelector structure")
8331            }
8332            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8333                let tag: &str = match map.next_key()? {
8334                    Some(".tag") => map.next_value()?,
8335                    _ => return Err(de::Error::missing_field(".tag"))
8336                };
8337                let value = match tag {
8338                    "group_ids" => {
8339                        match map.next_key()? {
8340                            Some("group_ids") => GroupsSelector::GroupIds(map.next_value()?),
8341                            None => return Err(de::Error::missing_field("group_ids")),
8342                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8343                        }
8344                    }
8345                    "group_external_ids" => {
8346                        match map.next_key()? {
8347                            Some("group_external_ids") => GroupsSelector::GroupExternalIds(map.next_value()?),
8348                            None => return Err(de::Error::missing_field("group_external_ids")),
8349                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8350                        }
8351                    }
8352                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
8353                };
8354                crate::eat_json_fields(&mut map)?;
8355                Ok(value)
8356            }
8357        }
8358        const VARIANTS: &[&str] = &["group_ids",
8359                                    "group_external_ids"];
8360        deserializer.deserialize_struct("GroupsSelector", VARIANTS, EnumVisitor)
8361    }
8362}
8363
8364impl ::serde::ser::Serialize for GroupsSelector {
8365    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8366        // union serializer
8367        use serde::ser::SerializeStruct;
8368        match self {
8369            GroupsSelector::GroupIds(x) => {
8370                // primitive
8371                let mut s = serializer.serialize_struct("GroupsSelector", 2)?;
8372                s.serialize_field(".tag", "group_ids")?;
8373                s.serialize_field("group_ids", x)?;
8374                s.end()
8375            }
8376            GroupsSelector::GroupExternalIds(x) => {
8377                // primitive
8378                let mut s = serializer.serialize_struct("GroupsSelector", 2)?;
8379                s.serialize_field(".tag", "group_external_ids")?;
8380                s.serialize_field("group_external_ids", x)?;
8381                s.end()
8382            }
8383        }
8384    }
8385}
8386
8387/// The value for [`Feature::HasDistinctMemberHomes`].
8388#[derive(Debug, Clone, PartialEq, Eq)]
8389#[non_exhaustive] // variants may be added in the future
8390pub enum HasDistinctMemberHomesValue {
8391    /// Does this team have distinct team member homes.
8392    HasDistinctMemberHomes(bool),
8393    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8394    /// typically indicates that this SDK version is out of date.
8395    Other,
8396}
8397
8398impl<'de> ::serde::de::Deserialize<'de> for HasDistinctMemberHomesValue {
8399    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8400        // union deserializer
8401        use serde::de::{self, MapAccess, Visitor};
8402        struct EnumVisitor;
8403        impl<'de> Visitor<'de> for EnumVisitor {
8404            type Value = HasDistinctMemberHomesValue;
8405            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8406                f.write_str("a HasDistinctMemberHomesValue structure")
8407            }
8408            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8409                let tag: &str = match map.next_key()? {
8410                    Some(".tag") => map.next_value()?,
8411                    _ => return Err(de::Error::missing_field(".tag"))
8412                };
8413                let value = match tag {
8414                    "has_distinct_member_homes" => {
8415                        match map.next_key()? {
8416                            Some("has_distinct_member_homes") => HasDistinctMemberHomesValue::HasDistinctMemberHomes(map.next_value()?),
8417                            None => return Err(de::Error::missing_field("has_distinct_member_homes")),
8418                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8419                        }
8420                    }
8421                    _ => HasDistinctMemberHomesValue::Other,
8422                };
8423                crate::eat_json_fields(&mut map)?;
8424                Ok(value)
8425            }
8426        }
8427        const VARIANTS: &[&str] = &["has_distinct_member_homes",
8428                                    "other"];
8429        deserializer.deserialize_struct("HasDistinctMemberHomesValue", VARIANTS, EnumVisitor)
8430    }
8431}
8432
8433impl ::serde::ser::Serialize for HasDistinctMemberHomesValue {
8434    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8435        // union serializer
8436        use serde::ser::SerializeStruct;
8437        match self {
8438            HasDistinctMemberHomesValue::HasDistinctMemberHomes(x) => {
8439                // primitive
8440                let mut s = serializer.serialize_struct("HasDistinctMemberHomesValue", 2)?;
8441                s.serialize_field(".tag", "has_distinct_member_homes")?;
8442                s.serialize_field("has_distinct_member_homes", x)?;
8443                s.end()
8444            }
8445            HasDistinctMemberHomesValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8446        }
8447    }
8448}
8449
8450/// The value for [`Feature::HasTeamFileEvents`].
8451#[derive(Debug, Clone, PartialEq, Eq)]
8452#[non_exhaustive] // variants may be added in the future
8453pub enum HasTeamFileEventsValue {
8454    /// Does this team have file events.
8455    Enabled(bool),
8456    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8457    /// typically indicates that this SDK version is out of date.
8458    Other,
8459}
8460
8461impl<'de> ::serde::de::Deserialize<'de> for HasTeamFileEventsValue {
8462    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8463        // union deserializer
8464        use serde::de::{self, MapAccess, Visitor};
8465        struct EnumVisitor;
8466        impl<'de> Visitor<'de> for EnumVisitor {
8467            type Value = HasTeamFileEventsValue;
8468            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8469                f.write_str("a HasTeamFileEventsValue structure")
8470            }
8471            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8472                let tag: &str = match map.next_key()? {
8473                    Some(".tag") => map.next_value()?,
8474                    _ => return Err(de::Error::missing_field(".tag"))
8475                };
8476                let value = match tag {
8477                    "enabled" => {
8478                        match map.next_key()? {
8479                            Some("enabled") => HasTeamFileEventsValue::Enabled(map.next_value()?),
8480                            None => return Err(de::Error::missing_field("enabled")),
8481                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8482                        }
8483                    }
8484                    _ => HasTeamFileEventsValue::Other,
8485                };
8486                crate::eat_json_fields(&mut map)?;
8487                Ok(value)
8488            }
8489        }
8490        const VARIANTS: &[&str] = &["enabled",
8491                                    "other"];
8492        deserializer.deserialize_struct("HasTeamFileEventsValue", VARIANTS, EnumVisitor)
8493    }
8494}
8495
8496impl ::serde::ser::Serialize for HasTeamFileEventsValue {
8497    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8498        // union serializer
8499        use serde::ser::SerializeStruct;
8500        match self {
8501            HasTeamFileEventsValue::Enabled(x) => {
8502                // primitive
8503                let mut s = serializer.serialize_struct("HasTeamFileEventsValue", 2)?;
8504                s.serialize_field(".tag", "enabled")?;
8505                s.serialize_field("enabled", x)?;
8506                s.end()
8507            }
8508            HasTeamFileEventsValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8509        }
8510    }
8511}
8512
8513/// The value for [`Feature::HasTeamSelectiveSync`].
8514#[derive(Debug, Clone, PartialEq, Eq)]
8515#[non_exhaustive] // variants may be added in the future
8516pub enum HasTeamSelectiveSyncValue {
8517    /// Does this team have team selective sync enabled.
8518    HasTeamSelectiveSync(bool),
8519    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8520    /// typically indicates that this SDK version is out of date.
8521    Other,
8522}
8523
8524impl<'de> ::serde::de::Deserialize<'de> for HasTeamSelectiveSyncValue {
8525    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8526        // union deserializer
8527        use serde::de::{self, MapAccess, Visitor};
8528        struct EnumVisitor;
8529        impl<'de> Visitor<'de> for EnumVisitor {
8530            type Value = HasTeamSelectiveSyncValue;
8531            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8532                f.write_str("a HasTeamSelectiveSyncValue structure")
8533            }
8534            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8535                let tag: &str = match map.next_key()? {
8536                    Some(".tag") => map.next_value()?,
8537                    _ => return Err(de::Error::missing_field(".tag"))
8538                };
8539                let value = match tag {
8540                    "has_team_selective_sync" => {
8541                        match map.next_key()? {
8542                            Some("has_team_selective_sync") => HasTeamSelectiveSyncValue::HasTeamSelectiveSync(map.next_value()?),
8543                            None => return Err(de::Error::missing_field("has_team_selective_sync")),
8544                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8545                        }
8546                    }
8547                    _ => HasTeamSelectiveSyncValue::Other,
8548                };
8549                crate::eat_json_fields(&mut map)?;
8550                Ok(value)
8551            }
8552        }
8553        const VARIANTS: &[&str] = &["has_team_selective_sync",
8554                                    "other"];
8555        deserializer.deserialize_struct("HasTeamSelectiveSyncValue", VARIANTS, EnumVisitor)
8556    }
8557}
8558
8559impl ::serde::ser::Serialize for HasTeamSelectiveSyncValue {
8560    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8561        // union serializer
8562        use serde::ser::SerializeStruct;
8563        match self {
8564            HasTeamSelectiveSyncValue::HasTeamSelectiveSync(x) => {
8565                // primitive
8566                let mut s = serializer.serialize_struct("HasTeamSelectiveSyncValue", 2)?;
8567                s.serialize_field(".tag", "has_team_selective_sync")?;
8568                s.serialize_field("has_team_selective_sync", x)?;
8569                s.end()
8570            }
8571            HasTeamSelectiveSyncValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8572        }
8573    }
8574}
8575
8576/// The value for [`Feature::HasTeamSharedDropbox`].
8577#[derive(Debug, Clone, PartialEq, Eq)]
8578#[non_exhaustive] // variants may be added in the future
8579pub enum HasTeamSharedDropboxValue {
8580    /// Does this team have a shared team root.
8581    HasTeamSharedDropbox(bool),
8582    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8583    /// typically indicates that this SDK version is out of date.
8584    Other,
8585}
8586
8587impl<'de> ::serde::de::Deserialize<'de> for HasTeamSharedDropboxValue {
8588    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8589        // union deserializer
8590        use serde::de::{self, MapAccess, Visitor};
8591        struct EnumVisitor;
8592        impl<'de> Visitor<'de> for EnumVisitor {
8593            type Value = HasTeamSharedDropboxValue;
8594            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8595                f.write_str("a HasTeamSharedDropboxValue structure")
8596            }
8597            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8598                let tag: &str = match map.next_key()? {
8599                    Some(".tag") => map.next_value()?,
8600                    _ => return Err(de::Error::missing_field(".tag"))
8601                };
8602                let value = match tag {
8603                    "has_team_shared_dropbox" => {
8604                        match map.next_key()? {
8605                            Some("has_team_shared_dropbox") => HasTeamSharedDropboxValue::HasTeamSharedDropbox(map.next_value()?),
8606                            None => return Err(de::Error::missing_field("has_team_shared_dropbox")),
8607                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8608                        }
8609                    }
8610                    _ => HasTeamSharedDropboxValue::Other,
8611                };
8612                crate::eat_json_fields(&mut map)?;
8613                Ok(value)
8614            }
8615        }
8616        const VARIANTS: &[&str] = &["has_team_shared_dropbox",
8617                                    "other"];
8618        deserializer.deserialize_struct("HasTeamSharedDropboxValue", VARIANTS, EnumVisitor)
8619    }
8620}
8621
8622impl ::serde::ser::Serialize for HasTeamSharedDropboxValue {
8623    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8624        // union serializer
8625        use serde::ser::SerializeStruct;
8626        match self {
8627            HasTeamSharedDropboxValue::HasTeamSharedDropbox(x) => {
8628                // primitive
8629                let mut s = serializer.serialize_struct("HasTeamSharedDropboxValue", 2)?;
8630                s.serialize_field(".tag", "has_team_shared_dropbox")?;
8631                s.serialize_field("has_team_shared_dropbox", x)?;
8632                s.end()
8633            }
8634            HasTeamSharedDropboxValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8635        }
8636    }
8637}
8638
8639#[derive(Debug, Clone, PartialEq, Eq)]
8640#[non_exhaustive] // structs may have more fields added in the future.
8641pub struct IncludeMembersArg {
8642    /// Whether to return the list of members in the group. Note that the default value will cause
8643    /// all the group members to be returned in the response. This may take a long time for large
8644    /// groups.
8645    pub return_members: bool,
8646}
8647
8648impl Default for IncludeMembersArg {
8649    fn default() -> Self {
8650        IncludeMembersArg {
8651            return_members: true,
8652        }
8653    }
8654}
8655
8656impl IncludeMembersArg {
8657    pub fn with_return_members(mut self, value: bool) -> Self {
8658        self.return_members = value;
8659        self
8660    }
8661}
8662
8663const INCLUDE_MEMBERS_ARG_FIELDS: &[&str] = &["return_members"];
8664impl IncludeMembersArg {
8665    // no _opt deserializer
8666    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8667        mut map: V,
8668    ) -> Result<IncludeMembersArg, V::Error> {
8669        let mut field_return_members = None;
8670        while let Some(key) = map.next_key::<&str>()? {
8671            match key {
8672                "return_members" => {
8673                    if field_return_members.is_some() {
8674                        return Err(::serde::de::Error::duplicate_field("return_members"));
8675                    }
8676                    field_return_members = Some(map.next_value()?);
8677                }
8678                _ => {
8679                    // unknown field allowed and ignored
8680                    map.next_value::<::serde_json::Value>()?;
8681                }
8682            }
8683        }
8684        let result = IncludeMembersArg {
8685            return_members: field_return_members.unwrap_or(true),
8686        };
8687        Ok(result)
8688    }
8689
8690    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8691        &self,
8692        s: &mut S::SerializeStruct,
8693    ) -> Result<(), S::Error> {
8694        use serde::ser::SerializeStruct;
8695        if !self.return_members {
8696            s.serialize_field("return_members", &self.return_members)?;
8697        }
8698        Ok(())
8699    }
8700}
8701
8702impl<'de> ::serde::de::Deserialize<'de> for IncludeMembersArg {
8703    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8704        // struct deserializer
8705        use serde::de::{MapAccess, Visitor};
8706        struct StructVisitor;
8707        impl<'de> Visitor<'de> for StructVisitor {
8708            type Value = IncludeMembersArg;
8709            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8710                f.write_str("a IncludeMembersArg struct")
8711            }
8712            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8713                IncludeMembersArg::internal_deserialize(map)
8714            }
8715        }
8716        deserializer.deserialize_struct("IncludeMembersArg", INCLUDE_MEMBERS_ARG_FIELDS, StructVisitor)
8717    }
8718}
8719
8720impl ::serde::ser::Serialize for IncludeMembersArg {
8721    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8722        // struct serializer
8723        use serde::ser::SerializeStruct;
8724        let mut s = serializer.serialize_struct("IncludeMembersArg", 1)?;
8725        self.internal_serialize::<S>(&mut s)?;
8726        s.end()
8727    }
8728}
8729
8730#[derive(Debug, Clone, PartialEq, Eq)]
8731#[non_exhaustive] // structs may have more fields added in the future.
8732pub struct LegalHoldHeldRevisionMetadata {
8733    /// The held revision filename.
8734    pub new_filename: String,
8735    /// The id of the held revision.
8736    pub original_revision_id: crate::types::files::Rev,
8737    /// The original path of the held revision.
8738    pub original_file_path: Path,
8739    /// The last time the file was modified on Dropbox.
8740    pub server_modified: crate::types::common::DropboxTimestamp,
8741    /// The member id of the revision's author.
8742    pub author_member_id: crate::types::team_common::TeamMemberId,
8743    /// The member status of the revision's author.
8744    pub author_member_status: TeamMemberStatus,
8745    /// The email address of the held revision author.
8746    pub author_email: crate::types::common::EmailAddress,
8747    /// The type of the held revision's file.
8748    pub file_type: String,
8749    /// The file size in bytes.
8750    pub size: u64,
8751    /// A hash of the file content. This field can be used to verify data integrity. For more
8752    /// information see our [Content
8753    /// hash](https://www.dropbox.com/developers/reference/content-hash) page.
8754    pub content_hash: crate::types::files::Sha256HexHash,
8755}
8756
8757impl LegalHoldHeldRevisionMetadata {
8758    pub fn new(
8759        new_filename: String,
8760        original_revision_id: crate::types::files::Rev,
8761        original_file_path: Path,
8762        server_modified: crate::types::common::DropboxTimestamp,
8763        author_member_id: crate::types::team_common::TeamMemberId,
8764        author_member_status: TeamMemberStatus,
8765        author_email: crate::types::common::EmailAddress,
8766        file_type: String,
8767        size: u64,
8768        content_hash: crate::types::files::Sha256HexHash,
8769    ) -> Self {
8770        LegalHoldHeldRevisionMetadata {
8771            new_filename,
8772            original_revision_id,
8773            original_file_path,
8774            server_modified,
8775            author_member_id,
8776            author_member_status,
8777            author_email,
8778            file_type,
8779            size,
8780            content_hash,
8781        }
8782    }
8783}
8784
8785const LEGAL_HOLD_HELD_REVISION_METADATA_FIELDS: &[&str] = &["new_filename",
8786                                                            "original_revision_id",
8787                                                            "original_file_path",
8788                                                            "server_modified",
8789                                                            "author_member_id",
8790                                                            "author_member_status",
8791                                                            "author_email",
8792                                                            "file_type",
8793                                                            "size",
8794                                                            "content_hash"];
8795impl LegalHoldHeldRevisionMetadata {
8796    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8797        map: V,
8798    ) -> Result<LegalHoldHeldRevisionMetadata, V::Error> {
8799        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8800    }
8801
8802    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8803        mut map: V,
8804        optional: bool,
8805    ) -> Result<Option<LegalHoldHeldRevisionMetadata>, V::Error> {
8806        let mut field_new_filename = None;
8807        let mut field_original_revision_id = None;
8808        let mut field_original_file_path = None;
8809        let mut field_server_modified = None;
8810        let mut field_author_member_id = None;
8811        let mut field_author_member_status = None;
8812        let mut field_author_email = None;
8813        let mut field_file_type = None;
8814        let mut field_size = None;
8815        let mut field_content_hash = None;
8816        let mut nothing = true;
8817        while let Some(key) = map.next_key::<&str>()? {
8818            nothing = false;
8819            match key {
8820                "new_filename" => {
8821                    if field_new_filename.is_some() {
8822                        return Err(::serde::de::Error::duplicate_field("new_filename"));
8823                    }
8824                    field_new_filename = Some(map.next_value()?);
8825                }
8826                "original_revision_id" => {
8827                    if field_original_revision_id.is_some() {
8828                        return Err(::serde::de::Error::duplicate_field("original_revision_id"));
8829                    }
8830                    field_original_revision_id = Some(map.next_value()?);
8831                }
8832                "original_file_path" => {
8833                    if field_original_file_path.is_some() {
8834                        return Err(::serde::de::Error::duplicate_field("original_file_path"));
8835                    }
8836                    field_original_file_path = Some(map.next_value()?);
8837                }
8838                "server_modified" => {
8839                    if field_server_modified.is_some() {
8840                        return Err(::serde::de::Error::duplicate_field("server_modified"));
8841                    }
8842                    field_server_modified = Some(map.next_value()?);
8843                }
8844                "author_member_id" => {
8845                    if field_author_member_id.is_some() {
8846                        return Err(::serde::de::Error::duplicate_field("author_member_id"));
8847                    }
8848                    field_author_member_id = Some(map.next_value()?);
8849                }
8850                "author_member_status" => {
8851                    if field_author_member_status.is_some() {
8852                        return Err(::serde::de::Error::duplicate_field("author_member_status"));
8853                    }
8854                    field_author_member_status = Some(map.next_value()?);
8855                }
8856                "author_email" => {
8857                    if field_author_email.is_some() {
8858                        return Err(::serde::de::Error::duplicate_field("author_email"));
8859                    }
8860                    field_author_email = Some(map.next_value()?);
8861                }
8862                "file_type" => {
8863                    if field_file_type.is_some() {
8864                        return Err(::serde::de::Error::duplicate_field("file_type"));
8865                    }
8866                    field_file_type = Some(map.next_value()?);
8867                }
8868                "size" => {
8869                    if field_size.is_some() {
8870                        return Err(::serde::de::Error::duplicate_field("size"));
8871                    }
8872                    field_size = Some(map.next_value()?);
8873                }
8874                "content_hash" => {
8875                    if field_content_hash.is_some() {
8876                        return Err(::serde::de::Error::duplicate_field("content_hash"));
8877                    }
8878                    field_content_hash = Some(map.next_value()?);
8879                }
8880                _ => {
8881                    // unknown field allowed and ignored
8882                    map.next_value::<::serde_json::Value>()?;
8883                }
8884            }
8885        }
8886        if optional && nothing {
8887            return Ok(None);
8888        }
8889        let result = LegalHoldHeldRevisionMetadata {
8890            new_filename: field_new_filename.ok_or_else(|| ::serde::de::Error::missing_field("new_filename"))?,
8891            original_revision_id: field_original_revision_id.ok_or_else(|| ::serde::de::Error::missing_field("original_revision_id"))?,
8892            original_file_path: field_original_file_path.ok_or_else(|| ::serde::de::Error::missing_field("original_file_path"))?,
8893            server_modified: field_server_modified.ok_or_else(|| ::serde::de::Error::missing_field("server_modified"))?,
8894            author_member_id: field_author_member_id.ok_or_else(|| ::serde::de::Error::missing_field("author_member_id"))?,
8895            author_member_status: field_author_member_status.ok_or_else(|| ::serde::de::Error::missing_field("author_member_status"))?,
8896            author_email: field_author_email.ok_or_else(|| ::serde::de::Error::missing_field("author_email"))?,
8897            file_type: field_file_type.ok_or_else(|| ::serde::de::Error::missing_field("file_type"))?,
8898            size: field_size.ok_or_else(|| ::serde::de::Error::missing_field("size"))?,
8899            content_hash: field_content_hash.ok_or_else(|| ::serde::de::Error::missing_field("content_hash"))?,
8900        };
8901        Ok(Some(result))
8902    }
8903
8904    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8905        &self,
8906        s: &mut S::SerializeStruct,
8907    ) -> Result<(), S::Error> {
8908        use serde::ser::SerializeStruct;
8909        s.serialize_field("new_filename", &self.new_filename)?;
8910        s.serialize_field("original_revision_id", &self.original_revision_id)?;
8911        s.serialize_field("original_file_path", &self.original_file_path)?;
8912        s.serialize_field("server_modified", &self.server_modified)?;
8913        s.serialize_field("author_member_id", &self.author_member_id)?;
8914        s.serialize_field("author_member_status", &self.author_member_status)?;
8915        s.serialize_field("author_email", &self.author_email)?;
8916        s.serialize_field("file_type", &self.file_type)?;
8917        s.serialize_field("size", &self.size)?;
8918        s.serialize_field("content_hash", &self.content_hash)?;
8919        Ok(())
8920    }
8921}
8922
8923impl<'de> ::serde::de::Deserialize<'de> for LegalHoldHeldRevisionMetadata {
8924    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8925        // struct deserializer
8926        use serde::de::{MapAccess, Visitor};
8927        struct StructVisitor;
8928        impl<'de> Visitor<'de> for StructVisitor {
8929            type Value = LegalHoldHeldRevisionMetadata;
8930            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8931                f.write_str("a LegalHoldHeldRevisionMetadata struct")
8932            }
8933            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8934                LegalHoldHeldRevisionMetadata::internal_deserialize(map)
8935            }
8936        }
8937        deserializer.deserialize_struct("LegalHoldHeldRevisionMetadata", LEGAL_HOLD_HELD_REVISION_METADATA_FIELDS, StructVisitor)
8938    }
8939}
8940
8941impl ::serde::ser::Serialize for LegalHoldHeldRevisionMetadata {
8942    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8943        // struct serializer
8944        use serde::ser::SerializeStruct;
8945        let mut s = serializer.serialize_struct("LegalHoldHeldRevisionMetadata", 10)?;
8946        self.internal_serialize::<S>(&mut s)?;
8947        s.end()
8948    }
8949}
8950
8951#[derive(Debug, Clone, PartialEq, Eq)]
8952#[non_exhaustive] // structs may have more fields added in the future.
8953pub struct LegalHoldPolicy {
8954    /// The legal hold id.
8955    pub id: LegalHoldId,
8956    /// Policy name.
8957    pub name: LegalHoldPolicyName,
8958    /// Team members IDs and number of permanently deleted members under hold.
8959    pub members: MembersInfo,
8960    /// The current state of the hold.
8961    pub status: LegalHoldStatus,
8962    /// Start date of the legal hold policy.
8963    pub start_date: crate::types::common::DropboxTimestamp,
8964    /// A description of the legal hold policy.
8965    pub description: Option<LegalHoldPolicyDescription>,
8966    /// The time at which the legal hold was activated.
8967    pub activation_time: Option<crate::types::common::DropboxTimestamp>,
8968    /// End date of the legal hold policy.
8969    pub end_date: Option<crate::types::common::DropboxTimestamp>,
8970}
8971
8972impl LegalHoldPolicy {
8973    pub fn new(
8974        id: LegalHoldId,
8975        name: LegalHoldPolicyName,
8976        members: MembersInfo,
8977        status: LegalHoldStatus,
8978        start_date: crate::types::common::DropboxTimestamp,
8979    ) -> Self {
8980        LegalHoldPolicy {
8981            id,
8982            name,
8983            members,
8984            status,
8985            start_date,
8986            description: None,
8987            activation_time: None,
8988            end_date: None,
8989        }
8990    }
8991
8992    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
8993        self.description = Some(value);
8994        self
8995    }
8996
8997    pub fn with_activation_time(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
8998        self.activation_time = Some(value);
8999        self
9000    }
9001
9002    pub fn with_end_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
9003        self.end_date = Some(value);
9004        self
9005    }
9006}
9007
9008const LEGAL_HOLD_POLICY_FIELDS: &[&str] = &["id",
9009                                            "name",
9010                                            "members",
9011                                            "status",
9012                                            "start_date",
9013                                            "description",
9014                                            "activation_time",
9015                                            "end_date"];
9016impl LegalHoldPolicy {
9017    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9018        map: V,
9019    ) -> Result<LegalHoldPolicy, V::Error> {
9020        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9021    }
9022
9023    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9024        mut map: V,
9025        optional: bool,
9026    ) -> Result<Option<LegalHoldPolicy>, V::Error> {
9027        let mut field_id = None;
9028        let mut field_name = None;
9029        let mut field_members = None;
9030        let mut field_status = None;
9031        let mut field_start_date = None;
9032        let mut field_description = None;
9033        let mut field_activation_time = None;
9034        let mut field_end_date = None;
9035        let mut nothing = true;
9036        while let Some(key) = map.next_key::<&str>()? {
9037            nothing = false;
9038            match key {
9039                "id" => {
9040                    if field_id.is_some() {
9041                        return Err(::serde::de::Error::duplicate_field("id"));
9042                    }
9043                    field_id = Some(map.next_value()?);
9044                }
9045                "name" => {
9046                    if field_name.is_some() {
9047                        return Err(::serde::de::Error::duplicate_field("name"));
9048                    }
9049                    field_name = Some(map.next_value()?);
9050                }
9051                "members" => {
9052                    if field_members.is_some() {
9053                        return Err(::serde::de::Error::duplicate_field("members"));
9054                    }
9055                    field_members = Some(map.next_value()?);
9056                }
9057                "status" => {
9058                    if field_status.is_some() {
9059                        return Err(::serde::de::Error::duplicate_field("status"));
9060                    }
9061                    field_status = Some(map.next_value()?);
9062                }
9063                "start_date" => {
9064                    if field_start_date.is_some() {
9065                        return Err(::serde::de::Error::duplicate_field("start_date"));
9066                    }
9067                    field_start_date = Some(map.next_value()?);
9068                }
9069                "description" => {
9070                    if field_description.is_some() {
9071                        return Err(::serde::de::Error::duplicate_field("description"));
9072                    }
9073                    field_description = Some(map.next_value()?);
9074                }
9075                "activation_time" => {
9076                    if field_activation_time.is_some() {
9077                        return Err(::serde::de::Error::duplicate_field("activation_time"));
9078                    }
9079                    field_activation_time = Some(map.next_value()?);
9080                }
9081                "end_date" => {
9082                    if field_end_date.is_some() {
9083                        return Err(::serde::de::Error::duplicate_field("end_date"));
9084                    }
9085                    field_end_date = Some(map.next_value()?);
9086                }
9087                _ => {
9088                    // unknown field allowed and ignored
9089                    map.next_value::<::serde_json::Value>()?;
9090                }
9091            }
9092        }
9093        if optional && nothing {
9094            return Ok(None);
9095        }
9096        let result = LegalHoldPolicy {
9097            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9098            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
9099            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
9100            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
9101            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
9102            description: field_description.and_then(Option::flatten),
9103            activation_time: field_activation_time.and_then(Option::flatten),
9104            end_date: field_end_date.and_then(Option::flatten),
9105        };
9106        Ok(Some(result))
9107    }
9108
9109    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9110        &self,
9111        s: &mut S::SerializeStruct,
9112    ) -> Result<(), S::Error> {
9113        use serde::ser::SerializeStruct;
9114        s.serialize_field("id", &self.id)?;
9115        s.serialize_field("name", &self.name)?;
9116        s.serialize_field("members", &self.members)?;
9117        s.serialize_field("status", &self.status)?;
9118        s.serialize_field("start_date", &self.start_date)?;
9119        if let Some(val) = &self.description {
9120            s.serialize_field("description", val)?;
9121        }
9122        if let Some(val) = &self.activation_time {
9123            s.serialize_field("activation_time", val)?;
9124        }
9125        if let Some(val) = &self.end_date {
9126            s.serialize_field("end_date", val)?;
9127        }
9128        Ok(())
9129    }
9130}
9131
9132impl<'de> ::serde::de::Deserialize<'de> for LegalHoldPolicy {
9133    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9134        // struct deserializer
9135        use serde::de::{MapAccess, Visitor};
9136        struct StructVisitor;
9137        impl<'de> Visitor<'de> for StructVisitor {
9138            type Value = LegalHoldPolicy;
9139            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9140                f.write_str("a LegalHoldPolicy struct")
9141            }
9142            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9143                LegalHoldPolicy::internal_deserialize(map)
9144            }
9145        }
9146        deserializer.deserialize_struct("LegalHoldPolicy", LEGAL_HOLD_POLICY_FIELDS, StructVisitor)
9147    }
9148}
9149
9150impl ::serde::ser::Serialize for LegalHoldPolicy {
9151    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9152        // struct serializer
9153        use serde::ser::SerializeStruct;
9154        let mut s = serializer.serialize_struct("LegalHoldPolicy", 8)?;
9155        self.internal_serialize::<S>(&mut s)?;
9156        s.end()
9157    }
9158}
9159
9160#[derive(Debug, Clone, PartialEq, Eq)]
9161#[non_exhaustive] // variants may be added in the future
9162pub enum LegalHoldStatus {
9163    /// The legal hold policy is active.
9164    Active,
9165    /// The legal hold policy was released.
9166    Released,
9167    /// The legal hold policy is activating.
9168    Activating,
9169    /// The legal hold policy is updating.
9170    Updating,
9171    /// The legal hold policy is exporting.
9172    Exporting,
9173    /// The legal hold policy is releasing.
9174    Releasing,
9175    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9176    /// typically indicates that this SDK version is out of date.
9177    Other,
9178}
9179
9180impl<'de> ::serde::de::Deserialize<'de> for LegalHoldStatus {
9181    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9182        // union deserializer
9183        use serde::de::{self, MapAccess, Visitor};
9184        struct EnumVisitor;
9185        impl<'de> Visitor<'de> for EnumVisitor {
9186            type Value = LegalHoldStatus;
9187            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9188                f.write_str("a LegalHoldStatus structure")
9189            }
9190            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9191                let tag: &str = match map.next_key()? {
9192                    Some(".tag") => map.next_value()?,
9193                    _ => return Err(de::Error::missing_field(".tag"))
9194                };
9195                let value = match tag {
9196                    "active" => LegalHoldStatus::Active,
9197                    "released" => LegalHoldStatus::Released,
9198                    "activating" => LegalHoldStatus::Activating,
9199                    "updating" => LegalHoldStatus::Updating,
9200                    "exporting" => LegalHoldStatus::Exporting,
9201                    "releasing" => LegalHoldStatus::Releasing,
9202                    _ => LegalHoldStatus::Other,
9203                };
9204                crate::eat_json_fields(&mut map)?;
9205                Ok(value)
9206            }
9207        }
9208        const VARIANTS: &[&str] = &["active",
9209                                    "released",
9210                                    "activating",
9211                                    "updating",
9212                                    "exporting",
9213                                    "releasing",
9214                                    "other"];
9215        deserializer.deserialize_struct("LegalHoldStatus", VARIANTS, EnumVisitor)
9216    }
9217}
9218
9219impl ::serde::ser::Serialize for LegalHoldStatus {
9220    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9221        // union serializer
9222        use serde::ser::SerializeStruct;
9223        match self {
9224            LegalHoldStatus::Active => {
9225                // unit
9226                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9227                s.serialize_field(".tag", "active")?;
9228                s.end()
9229            }
9230            LegalHoldStatus::Released => {
9231                // unit
9232                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9233                s.serialize_field(".tag", "released")?;
9234                s.end()
9235            }
9236            LegalHoldStatus::Activating => {
9237                // unit
9238                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9239                s.serialize_field(".tag", "activating")?;
9240                s.end()
9241            }
9242            LegalHoldStatus::Updating => {
9243                // unit
9244                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9245                s.serialize_field(".tag", "updating")?;
9246                s.end()
9247            }
9248            LegalHoldStatus::Exporting => {
9249                // unit
9250                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9251                s.serialize_field(".tag", "exporting")?;
9252                s.end()
9253            }
9254            LegalHoldStatus::Releasing => {
9255                // unit
9256                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9257                s.serialize_field(".tag", "releasing")?;
9258                s.end()
9259            }
9260            LegalHoldStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9261        }
9262    }
9263}
9264
9265#[derive(Debug, Clone, PartialEq, Eq)]
9266#[non_exhaustive] // variants may be added in the future
9267pub enum LegalHoldsError {
9268    /// There has been an unknown legal hold error.
9269    UnknownLegalHoldError,
9270    /// You don't have permissions to perform this action.
9271    InsufficientPermissions,
9272    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9273    /// typically indicates that this SDK version is out of date.
9274    Other,
9275}
9276
9277impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsError {
9278    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9279        // union deserializer
9280        use serde::de::{self, MapAccess, Visitor};
9281        struct EnumVisitor;
9282        impl<'de> Visitor<'de> for EnumVisitor {
9283            type Value = LegalHoldsError;
9284            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9285                f.write_str("a LegalHoldsError structure")
9286            }
9287            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9288                let tag: &str = match map.next_key()? {
9289                    Some(".tag") => map.next_value()?,
9290                    _ => return Err(de::Error::missing_field(".tag"))
9291                };
9292                let value = match tag {
9293                    "unknown_legal_hold_error" => LegalHoldsError::UnknownLegalHoldError,
9294                    "insufficient_permissions" => LegalHoldsError::InsufficientPermissions,
9295                    _ => LegalHoldsError::Other,
9296                };
9297                crate::eat_json_fields(&mut map)?;
9298                Ok(value)
9299            }
9300        }
9301        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9302                                    "insufficient_permissions",
9303                                    "other"];
9304        deserializer.deserialize_struct("LegalHoldsError", VARIANTS, EnumVisitor)
9305    }
9306}
9307
9308impl ::serde::ser::Serialize for LegalHoldsError {
9309    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9310        // union serializer
9311        use serde::ser::SerializeStruct;
9312        match self {
9313            LegalHoldsError::UnknownLegalHoldError => {
9314                // unit
9315                let mut s = serializer.serialize_struct("LegalHoldsError", 1)?;
9316                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9317                s.end()
9318            }
9319            LegalHoldsError::InsufficientPermissions => {
9320                // unit
9321                let mut s = serializer.serialize_struct("LegalHoldsError", 1)?;
9322                s.serialize_field(".tag", "insufficient_permissions")?;
9323                s.end()
9324            }
9325            LegalHoldsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9326        }
9327    }
9328}
9329
9330impl ::std::error::Error for LegalHoldsError {
9331}
9332
9333impl ::std::fmt::Display for LegalHoldsError {
9334    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9335        match self {
9336            LegalHoldsError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9337            LegalHoldsError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
9338            _ => write!(f, "{:?}", *self),
9339        }
9340    }
9341}
9342
9343#[derive(Debug, Clone, PartialEq, Eq)]
9344#[non_exhaustive] // structs may have more fields added in the future.
9345pub struct LegalHoldsGetPolicyArg {
9346    /// The legal hold Id.
9347    pub id: LegalHoldId,
9348}
9349
9350impl LegalHoldsGetPolicyArg {
9351    pub fn new(id: LegalHoldId) -> Self {
9352        LegalHoldsGetPolicyArg {
9353            id,
9354        }
9355    }
9356}
9357
9358const LEGAL_HOLDS_GET_POLICY_ARG_FIELDS: &[&str] = &["id"];
9359impl LegalHoldsGetPolicyArg {
9360    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9361        map: V,
9362    ) -> Result<LegalHoldsGetPolicyArg, V::Error> {
9363        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9364    }
9365
9366    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9367        mut map: V,
9368        optional: bool,
9369    ) -> Result<Option<LegalHoldsGetPolicyArg>, V::Error> {
9370        let mut field_id = None;
9371        let mut nothing = true;
9372        while let Some(key) = map.next_key::<&str>()? {
9373            nothing = false;
9374            match key {
9375                "id" => {
9376                    if field_id.is_some() {
9377                        return Err(::serde::de::Error::duplicate_field("id"));
9378                    }
9379                    field_id = Some(map.next_value()?);
9380                }
9381                _ => {
9382                    // unknown field allowed and ignored
9383                    map.next_value::<::serde_json::Value>()?;
9384                }
9385            }
9386        }
9387        if optional && nothing {
9388            return Ok(None);
9389        }
9390        let result = LegalHoldsGetPolicyArg {
9391            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9392        };
9393        Ok(Some(result))
9394    }
9395
9396    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9397        &self,
9398        s: &mut S::SerializeStruct,
9399    ) -> Result<(), S::Error> {
9400        use serde::ser::SerializeStruct;
9401        s.serialize_field("id", &self.id)?;
9402        Ok(())
9403    }
9404}
9405
9406impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsGetPolicyArg {
9407    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9408        // struct deserializer
9409        use serde::de::{MapAccess, Visitor};
9410        struct StructVisitor;
9411        impl<'de> Visitor<'de> for StructVisitor {
9412            type Value = LegalHoldsGetPolicyArg;
9413            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9414                f.write_str("a LegalHoldsGetPolicyArg struct")
9415            }
9416            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9417                LegalHoldsGetPolicyArg::internal_deserialize(map)
9418            }
9419        }
9420        deserializer.deserialize_struct("LegalHoldsGetPolicyArg", LEGAL_HOLDS_GET_POLICY_ARG_FIELDS, StructVisitor)
9421    }
9422}
9423
9424impl ::serde::ser::Serialize for LegalHoldsGetPolicyArg {
9425    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9426        // struct serializer
9427        use serde::ser::SerializeStruct;
9428        let mut s = serializer.serialize_struct("LegalHoldsGetPolicyArg", 1)?;
9429        self.internal_serialize::<S>(&mut s)?;
9430        s.end()
9431    }
9432}
9433
9434#[derive(Debug, Clone, PartialEq, Eq)]
9435#[non_exhaustive] // variants may be added in the future
9436pub enum LegalHoldsGetPolicyError {
9437    /// There has been an unknown legal hold error.
9438    UnknownLegalHoldError,
9439    /// You don't have permissions to perform this action.
9440    InsufficientPermissions,
9441    /// Legal hold policy does not exist for [`LegalHoldsGetPolicyArg::id`](LegalHoldsGetPolicyArg).
9442    LegalHoldPolicyNotFound,
9443    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9444    /// typically indicates that this SDK version is out of date.
9445    Other,
9446}
9447
9448impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsGetPolicyError {
9449    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9450        // union deserializer
9451        use serde::de::{self, MapAccess, Visitor};
9452        struct EnumVisitor;
9453        impl<'de> Visitor<'de> for EnumVisitor {
9454            type Value = LegalHoldsGetPolicyError;
9455            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9456                f.write_str("a LegalHoldsGetPolicyError structure")
9457            }
9458            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9459                let tag: &str = match map.next_key()? {
9460                    Some(".tag") => map.next_value()?,
9461                    _ => return Err(de::Error::missing_field(".tag"))
9462                };
9463                let value = match tag {
9464                    "unknown_legal_hold_error" => LegalHoldsGetPolicyError::UnknownLegalHoldError,
9465                    "insufficient_permissions" => LegalHoldsGetPolicyError::InsufficientPermissions,
9466                    "legal_hold_policy_not_found" => LegalHoldsGetPolicyError::LegalHoldPolicyNotFound,
9467                    _ => LegalHoldsGetPolicyError::Other,
9468                };
9469                crate::eat_json_fields(&mut map)?;
9470                Ok(value)
9471            }
9472        }
9473        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9474                                    "insufficient_permissions",
9475                                    "other",
9476                                    "legal_hold_policy_not_found"];
9477        deserializer.deserialize_struct("LegalHoldsGetPolicyError", VARIANTS, EnumVisitor)
9478    }
9479}
9480
9481impl ::serde::ser::Serialize for LegalHoldsGetPolicyError {
9482    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9483        // union serializer
9484        use serde::ser::SerializeStruct;
9485        match self {
9486            LegalHoldsGetPolicyError::UnknownLegalHoldError => {
9487                // unit
9488                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9489                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9490                s.end()
9491            }
9492            LegalHoldsGetPolicyError::InsufficientPermissions => {
9493                // unit
9494                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9495                s.serialize_field(".tag", "insufficient_permissions")?;
9496                s.end()
9497            }
9498            LegalHoldsGetPolicyError::LegalHoldPolicyNotFound => {
9499                // unit
9500                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9501                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
9502                s.end()
9503            }
9504            LegalHoldsGetPolicyError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9505        }
9506    }
9507}
9508
9509impl ::std::error::Error for LegalHoldsGetPolicyError {
9510}
9511
9512impl ::std::fmt::Display for LegalHoldsGetPolicyError {
9513    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9514        match self {
9515            LegalHoldsGetPolicyError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9516            LegalHoldsGetPolicyError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
9517            _ => write!(f, "{:?}", *self),
9518        }
9519    }
9520}
9521
9522// union extends LegalHoldsError
9523impl From<LegalHoldsError> for LegalHoldsGetPolicyError {
9524    fn from(parent: LegalHoldsError) -> Self {
9525        match parent {
9526            LegalHoldsError::UnknownLegalHoldError => LegalHoldsGetPolicyError::UnknownLegalHoldError,
9527            LegalHoldsError::InsufficientPermissions => LegalHoldsGetPolicyError::InsufficientPermissions,
9528            LegalHoldsError::Other => LegalHoldsGetPolicyError::Other,
9529        }
9530    }
9531}
9532#[derive(Debug, Clone, PartialEq, Eq)]
9533#[non_exhaustive] // structs may have more fields added in the future.
9534pub struct LegalHoldsListHeldRevisionResult {
9535    /// List of file entries that under the hold.
9536    pub entries: Vec<LegalHoldHeldRevisionMetadata>,
9537    /// True if there are more file entries that haven't been returned. You can retrieve them with a
9538    /// call to /legal_holds/list_held_revisions_continue.
9539    pub has_more: bool,
9540    /// The cursor idicates where to continue reading file metadata entries for the next API call.
9541    /// When there are no more entries, the cursor will return none. Pass the cursor into
9542    /// /2/team/legal_holds/list_held_revisions/continue.
9543    pub cursor: Option<ListHeldRevisionCursor>,
9544}
9545
9546impl LegalHoldsListHeldRevisionResult {
9547    pub fn new(entries: Vec<LegalHoldHeldRevisionMetadata>, has_more: bool) -> Self {
9548        LegalHoldsListHeldRevisionResult {
9549            entries,
9550            has_more,
9551            cursor: None,
9552        }
9553    }
9554
9555    pub fn with_cursor(mut self, value: ListHeldRevisionCursor) -> Self {
9556        self.cursor = Some(value);
9557        self
9558    }
9559}
9560
9561const LEGAL_HOLDS_LIST_HELD_REVISION_RESULT_FIELDS: &[&str] = &["entries",
9562                                                                "has_more",
9563                                                                "cursor"];
9564impl LegalHoldsListHeldRevisionResult {
9565    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9566        map: V,
9567    ) -> Result<LegalHoldsListHeldRevisionResult, V::Error> {
9568        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9569    }
9570
9571    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9572        mut map: V,
9573        optional: bool,
9574    ) -> Result<Option<LegalHoldsListHeldRevisionResult>, V::Error> {
9575        let mut field_entries = None;
9576        let mut field_has_more = None;
9577        let mut field_cursor = None;
9578        let mut nothing = true;
9579        while let Some(key) = map.next_key::<&str>()? {
9580            nothing = false;
9581            match key {
9582                "entries" => {
9583                    if field_entries.is_some() {
9584                        return Err(::serde::de::Error::duplicate_field("entries"));
9585                    }
9586                    field_entries = Some(map.next_value()?);
9587                }
9588                "has_more" => {
9589                    if field_has_more.is_some() {
9590                        return Err(::serde::de::Error::duplicate_field("has_more"));
9591                    }
9592                    field_has_more = Some(map.next_value()?);
9593                }
9594                "cursor" => {
9595                    if field_cursor.is_some() {
9596                        return Err(::serde::de::Error::duplicate_field("cursor"));
9597                    }
9598                    field_cursor = Some(map.next_value()?);
9599                }
9600                _ => {
9601                    // unknown field allowed and ignored
9602                    map.next_value::<::serde_json::Value>()?;
9603                }
9604            }
9605        }
9606        if optional && nothing {
9607            return Ok(None);
9608        }
9609        let result = LegalHoldsListHeldRevisionResult {
9610            entries: field_entries.ok_or_else(|| ::serde::de::Error::missing_field("entries"))?,
9611            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
9612            cursor: field_cursor.and_then(Option::flatten),
9613        };
9614        Ok(Some(result))
9615    }
9616
9617    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9618        &self,
9619        s: &mut S::SerializeStruct,
9620    ) -> Result<(), S::Error> {
9621        use serde::ser::SerializeStruct;
9622        s.serialize_field("entries", &self.entries)?;
9623        s.serialize_field("has_more", &self.has_more)?;
9624        if let Some(val) = &self.cursor {
9625            s.serialize_field("cursor", val)?;
9626        }
9627        Ok(())
9628    }
9629}
9630
9631impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionResult {
9632    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9633        // struct deserializer
9634        use serde::de::{MapAccess, Visitor};
9635        struct StructVisitor;
9636        impl<'de> Visitor<'de> for StructVisitor {
9637            type Value = LegalHoldsListHeldRevisionResult;
9638            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9639                f.write_str("a LegalHoldsListHeldRevisionResult struct")
9640            }
9641            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9642                LegalHoldsListHeldRevisionResult::internal_deserialize(map)
9643            }
9644        }
9645        deserializer.deserialize_struct("LegalHoldsListHeldRevisionResult", LEGAL_HOLDS_LIST_HELD_REVISION_RESULT_FIELDS, StructVisitor)
9646    }
9647}
9648
9649impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionResult {
9650    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9651        // struct serializer
9652        use serde::ser::SerializeStruct;
9653        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionResult", 3)?;
9654        self.internal_serialize::<S>(&mut s)?;
9655        s.end()
9656    }
9657}
9658
9659#[derive(Debug, Clone, PartialEq, Eq)]
9660#[non_exhaustive] // structs may have more fields added in the future.
9661pub struct LegalHoldsListHeldRevisionsArg {
9662    /// The legal hold Id.
9663    pub id: LegalHoldId,
9664}
9665
9666impl LegalHoldsListHeldRevisionsArg {
9667    pub fn new(id: LegalHoldId) -> Self {
9668        LegalHoldsListHeldRevisionsArg {
9669            id,
9670        }
9671    }
9672}
9673
9674const LEGAL_HOLDS_LIST_HELD_REVISIONS_ARG_FIELDS: &[&str] = &["id"];
9675impl LegalHoldsListHeldRevisionsArg {
9676    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9677        map: V,
9678    ) -> Result<LegalHoldsListHeldRevisionsArg, V::Error> {
9679        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9680    }
9681
9682    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9683        mut map: V,
9684        optional: bool,
9685    ) -> Result<Option<LegalHoldsListHeldRevisionsArg>, V::Error> {
9686        let mut field_id = None;
9687        let mut nothing = true;
9688        while let Some(key) = map.next_key::<&str>()? {
9689            nothing = false;
9690            match key {
9691                "id" => {
9692                    if field_id.is_some() {
9693                        return Err(::serde::de::Error::duplicate_field("id"));
9694                    }
9695                    field_id = Some(map.next_value()?);
9696                }
9697                _ => {
9698                    // unknown field allowed and ignored
9699                    map.next_value::<::serde_json::Value>()?;
9700                }
9701            }
9702        }
9703        if optional && nothing {
9704            return Ok(None);
9705        }
9706        let result = LegalHoldsListHeldRevisionsArg {
9707            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9708        };
9709        Ok(Some(result))
9710    }
9711
9712    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9713        &self,
9714        s: &mut S::SerializeStruct,
9715    ) -> Result<(), S::Error> {
9716        use serde::ser::SerializeStruct;
9717        s.serialize_field("id", &self.id)?;
9718        Ok(())
9719    }
9720}
9721
9722impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsArg {
9723    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9724        // struct deserializer
9725        use serde::de::{MapAccess, Visitor};
9726        struct StructVisitor;
9727        impl<'de> Visitor<'de> for StructVisitor {
9728            type Value = LegalHoldsListHeldRevisionsArg;
9729            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9730                f.write_str("a LegalHoldsListHeldRevisionsArg struct")
9731            }
9732            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9733                LegalHoldsListHeldRevisionsArg::internal_deserialize(map)
9734            }
9735        }
9736        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsArg", LEGAL_HOLDS_LIST_HELD_REVISIONS_ARG_FIELDS, StructVisitor)
9737    }
9738}
9739
9740impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsArg {
9741    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9742        // struct serializer
9743        use serde::ser::SerializeStruct;
9744        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsArg", 1)?;
9745        self.internal_serialize::<S>(&mut s)?;
9746        s.end()
9747    }
9748}
9749
9750#[derive(Debug, Clone, PartialEq, Eq)]
9751#[non_exhaustive] // structs may have more fields added in the future.
9752pub struct LegalHoldsListHeldRevisionsContinueArg {
9753    /// The legal hold Id.
9754    pub id: LegalHoldId,
9755    /// The cursor idicates where to continue reading file metadata entries for the next API call.
9756    /// When there are no more entries, the cursor will return none.
9757    pub cursor: Option<ListHeldRevisionCursor>,
9758}
9759
9760impl LegalHoldsListHeldRevisionsContinueArg {
9761    pub fn new(id: LegalHoldId) -> Self {
9762        LegalHoldsListHeldRevisionsContinueArg {
9763            id,
9764            cursor: None,
9765        }
9766    }
9767
9768    pub fn with_cursor(mut self, value: ListHeldRevisionCursor) -> Self {
9769        self.cursor = Some(value);
9770        self
9771    }
9772}
9773
9774const LEGAL_HOLDS_LIST_HELD_REVISIONS_CONTINUE_ARG_FIELDS: &[&str] = &["id",
9775                                                                       "cursor"];
9776impl LegalHoldsListHeldRevisionsContinueArg {
9777    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9778        map: V,
9779    ) -> Result<LegalHoldsListHeldRevisionsContinueArg, V::Error> {
9780        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9781    }
9782
9783    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9784        mut map: V,
9785        optional: bool,
9786    ) -> Result<Option<LegalHoldsListHeldRevisionsContinueArg>, V::Error> {
9787        let mut field_id = None;
9788        let mut field_cursor = None;
9789        let mut nothing = true;
9790        while let Some(key) = map.next_key::<&str>()? {
9791            nothing = false;
9792            match key {
9793                "id" => {
9794                    if field_id.is_some() {
9795                        return Err(::serde::de::Error::duplicate_field("id"));
9796                    }
9797                    field_id = Some(map.next_value()?);
9798                }
9799                "cursor" => {
9800                    if field_cursor.is_some() {
9801                        return Err(::serde::de::Error::duplicate_field("cursor"));
9802                    }
9803                    field_cursor = Some(map.next_value()?);
9804                }
9805                _ => {
9806                    // unknown field allowed and ignored
9807                    map.next_value::<::serde_json::Value>()?;
9808                }
9809            }
9810        }
9811        if optional && nothing {
9812            return Ok(None);
9813        }
9814        let result = LegalHoldsListHeldRevisionsContinueArg {
9815            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9816            cursor: field_cursor.and_then(Option::flatten),
9817        };
9818        Ok(Some(result))
9819    }
9820
9821    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9822        &self,
9823        s: &mut S::SerializeStruct,
9824    ) -> Result<(), S::Error> {
9825        use serde::ser::SerializeStruct;
9826        s.serialize_field("id", &self.id)?;
9827        if let Some(val) = &self.cursor {
9828            s.serialize_field("cursor", val)?;
9829        }
9830        Ok(())
9831    }
9832}
9833
9834impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsContinueArg {
9835    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9836        // struct deserializer
9837        use serde::de::{MapAccess, Visitor};
9838        struct StructVisitor;
9839        impl<'de> Visitor<'de> for StructVisitor {
9840            type Value = LegalHoldsListHeldRevisionsContinueArg;
9841            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9842                f.write_str("a LegalHoldsListHeldRevisionsContinueArg struct")
9843            }
9844            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9845                LegalHoldsListHeldRevisionsContinueArg::internal_deserialize(map)
9846            }
9847        }
9848        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsContinueArg", LEGAL_HOLDS_LIST_HELD_REVISIONS_CONTINUE_ARG_FIELDS, StructVisitor)
9849    }
9850}
9851
9852impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsContinueArg {
9853    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9854        // struct serializer
9855        use serde::ser::SerializeStruct;
9856        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueArg", 2)?;
9857        self.internal_serialize::<S>(&mut s)?;
9858        s.end()
9859    }
9860}
9861
9862#[derive(Debug, Clone, PartialEq, Eq)]
9863#[non_exhaustive] // variants may be added in the future
9864pub enum LegalHoldsListHeldRevisionsContinueError {
9865    /// There has been an unknown legal hold error.
9866    UnknownLegalHoldError,
9867    /// Temporary infrastructure failure, please retry.
9868    TransientError,
9869    /// Indicates that the cursor has been invalidated. Call
9870    /// [`legal_holds_list_held_revisions_continue()`](crate::team::legal_holds_list_held_revisions_continue)
9871    /// again with an empty cursor to obtain a new cursor.
9872    Reset,
9873    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9874    /// typically indicates that this SDK version is out of date.
9875    Other,
9876}
9877
9878impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsContinueError {
9879    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9880        // union deserializer
9881        use serde::de::{self, MapAccess, Visitor};
9882        struct EnumVisitor;
9883        impl<'de> Visitor<'de> for EnumVisitor {
9884            type Value = LegalHoldsListHeldRevisionsContinueError;
9885            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9886                f.write_str("a LegalHoldsListHeldRevisionsContinueError structure")
9887            }
9888            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9889                let tag: &str = match map.next_key()? {
9890                    Some(".tag") => map.next_value()?,
9891                    _ => return Err(de::Error::missing_field(".tag"))
9892                };
9893                let value = match tag {
9894                    "unknown_legal_hold_error" => LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError,
9895                    "transient_error" => LegalHoldsListHeldRevisionsContinueError::TransientError,
9896                    "reset" => LegalHoldsListHeldRevisionsContinueError::Reset,
9897                    _ => LegalHoldsListHeldRevisionsContinueError::Other,
9898                };
9899                crate::eat_json_fields(&mut map)?;
9900                Ok(value)
9901            }
9902        }
9903        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9904                                    "transient_error",
9905                                    "reset",
9906                                    "other"];
9907        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsContinueError", VARIANTS, EnumVisitor)
9908    }
9909}
9910
9911impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsContinueError {
9912    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9913        // union serializer
9914        use serde::ser::SerializeStruct;
9915        match self {
9916            LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError => {
9917                // unit
9918                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9919                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9920                s.end()
9921            }
9922            LegalHoldsListHeldRevisionsContinueError::TransientError => {
9923                // unit
9924                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9925                s.serialize_field(".tag", "transient_error")?;
9926                s.end()
9927            }
9928            LegalHoldsListHeldRevisionsContinueError::Reset => {
9929                // unit
9930                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9931                s.serialize_field(".tag", "reset")?;
9932                s.end()
9933            }
9934            LegalHoldsListHeldRevisionsContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9935        }
9936    }
9937}
9938
9939impl ::std::error::Error for LegalHoldsListHeldRevisionsContinueError {
9940}
9941
9942impl ::std::fmt::Display for LegalHoldsListHeldRevisionsContinueError {
9943    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9944        match self {
9945            LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9946            LegalHoldsListHeldRevisionsContinueError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
9947            _ => write!(f, "{:?}", *self),
9948        }
9949    }
9950}
9951
9952#[derive(Debug, Clone, PartialEq, Eq)]
9953#[non_exhaustive] // variants may be added in the future
9954pub enum LegalHoldsListHeldRevisionsError {
9955    /// There has been an unknown legal hold error.
9956    UnknownLegalHoldError,
9957    /// You don't have permissions to perform this action.
9958    InsufficientPermissions,
9959    /// Temporary infrastructure failure, please retry.
9960    TransientError,
9961    /// The legal hold is not holding any revisions yet.
9962    LegalHoldStillEmpty,
9963    /// Trying to list revisions for an inactive legal hold.
9964    InactiveLegalHold,
9965    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9966    /// typically indicates that this SDK version is out of date.
9967    Other,
9968}
9969
9970impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsError {
9971    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9972        // union deserializer
9973        use serde::de::{self, MapAccess, Visitor};
9974        struct EnumVisitor;
9975        impl<'de> Visitor<'de> for EnumVisitor {
9976            type Value = LegalHoldsListHeldRevisionsError;
9977            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9978                f.write_str("a LegalHoldsListHeldRevisionsError structure")
9979            }
9980            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9981                let tag: &str = match map.next_key()? {
9982                    Some(".tag") => map.next_value()?,
9983                    _ => return Err(de::Error::missing_field(".tag"))
9984                };
9985                let value = match tag {
9986                    "unknown_legal_hold_error" => LegalHoldsListHeldRevisionsError::UnknownLegalHoldError,
9987                    "insufficient_permissions" => LegalHoldsListHeldRevisionsError::InsufficientPermissions,
9988                    "transient_error" => LegalHoldsListHeldRevisionsError::TransientError,
9989                    "legal_hold_still_empty" => LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty,
9990                    "inactive_legal_hold" => LegalHoldsListHeldRevisionsError::InactiveLegalHold,
9991                    _ => LegalHoldsListHeldRevisionsError::Other,
9992                };
9993                crate::eat_json_fields(&mut map)?;
9994                Ok(value)
9995            }
9996        }
9997        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9998                                    "insufficient_permissions",
9999                                    "other",
10000                                    "transient_error",
10001                                    "legal_hold_still_empty",
10002                                    "inactive_legal_hold"];
10003        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsError", VARIANTS, EnumVisitor)
10004    }
10005}
10006
10007impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsError {
10008    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10009        // union serializer
10010        use serde::ser::SerializeStruct;
10011        match self {
10012            LegalHoldsListHeldRevisionsError::UnknownLegalHoldError => {
10013                // unit
10014                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10015                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10016                s.end()
10017            }
10018            LegalHoldsListHeldRevisionsError::InsufficientPermissions => {
10019                // unit
10020                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10021                s.serialize_field(".tag", "insufficient_permissions")?;
10022                s.end()
10023            }
10024            LegalHoldsListHeldRevisionsError::TransientError => {
10025                // unit
10026                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10027                s.serialize_field(".tag", "transient_error")?;
10028                s.end()
10029            }
10030            LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty => {
10031                // unit
10032                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10033                s.serialize_field(".tag", "legal_hold_still_empty")?;
10034                s.end()
10035            }
10036            LegalHoldsListHeldRevisionsError::InactiveLegalHold => {
10037                // unit
10038                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10039                s.serialize_field(".tag", "inactive_legal_hold")?;
10040                s.end()
10041            }
10042            LegalHoldsListHeldRevisionsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10043        }
10044    }
10045}
10046
10047impl ::std::error::Error for LegalHoldsListHeldRevisionsError {
10048}
10049
10050impl ::std::fmt::Display for LegalHoldsListHeldRevisionsError {
10051    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10052        match self {
10053            LegalHoldsListHeldRevisionsError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10054            LegalHoldsListHeldRevisionsError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10055            LegalHoldsListHeldRevisionsError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10056            LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty => f.write_str("The legal hold is not holding any revisions yet."),
10057            LegalHoldsListHeldRevisionsError::InactiveLegalHold => f.write_str("Trying to list revisions for an inactive legal hold."),
10058            _ => write!(f, "{:?}", *self),
10059        }
10060    }
10061}
10062
10063// union extends LegalHoldsError
10064impl From<LegalHoldsError> for LegalHoldsListHeldRevisionsError {
10065    fn from(parent: LegalHoldsError) -> Self {
10066        match parent {
10067            LegalHoldsError::UnknownLegalHoldError => LegalHoldsListHeldRevisionsError::UnknownLegalHoldError,
10068            LegalHoldsError::InsufficientPermissions => LegalHoldsListHeldRevisionsError::InsufficientPermissions,
10069            LegalHoldsError::Other => LegalHoldsListHeldRevisionsError::Other,
10070        }
10071    }
10072}
10073#[derive(Debug, Clone, PartialEq, Eq, Default)]
10074#[non_exhaustive] // structs may have more fields added in the future.
10075pub struct LegalHoldsListPoliciesArg {
10076    /// Whether to return holds that were released.
10077    pub include_released: bool,
10078}
10079
10080impl LegalHoldsListPoliciesArg {
10081    pub fn with_include_released(mut self, value: bool) -> Self {
10082        self.include_released = value;
10083        self
10084    }
10085}
10086
10087const LEGAL_HOLDS_LIST_POLICIES_ARG_FIELDS: &[&str] = &["include_released"];
10088impl LegalHoldsListPoliciesArg {
10089    // no _opt deserializer
10090    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10091        mut map: V,
10092    ) -> Result<LegalHoldsListPoliciesArg, V::Error> {
10093        let mut field_include_released = None;
10094        while let Some(key) = map.next_key::<&str>()? {
10095            match key {
10096                "include_released" => {
10097                    if field_include_released.is_some() {
10098                        return Err(::serde::de::Error::duplicate_field("include_released"));
10099                    }
10100                    field_include_released = Some(map.next_value()?);
10101                }
10102                _ => {
10103                    // unknown field allowed and ignored
10104                    map.next_value::<::serde_json::Value>()?;
10105                }
10106            }
10107        }
10108        let result = LegalHoldsListPoliciesArg {
10109            include_released: field_include_released.unwrap_or(false),
10110        };
10111        Ok(result)
10112    }
10113
10114    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10115        &self,
10116        s: &mut S::SerializeStruct,
10117    ) -> Result<(), S::Error> {
10118        use serde::ser::SerializeStruct;
10119        if self.include_released {
10120            s.serialize_field("include_released", &self.include_released)?;
10121        }
10122        Ok(())
10123    }
10124}
10125
10126impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesArg {
10127    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10128        // struct deserializer
10129        use serde::de::{MapAccess, Visitor};
10130        struct StructVisitor;
10131        impl<'de> Visitor<'de> for StructVisitor {
10132            type Value = LegalHoldsListPoliciesArg;
10133            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10134                f.write_str("a LegalHoldsListPoliciesArg struct")
10135            }
10136            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10137                LegalHoldsListPoliciesArg::internal_deserialize(map)
10138            }
10139        }
10140        deserializer.deserialize_struct("LegalHoldsListPoliciesArg", LEGAL_HOLDS_LIST_POLICIES_ARG_FIELDS, StructVisitor)
10141    }
10142}
10143
10144impl ::serde::ser::Serialize for LegalHoldsListPoliciesArg {
10145    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10146        // struct serializer
10147        use serde::ser::SerializeStruct;
10148        let mut s = serializer.serialize_struct("LegalHoldsListPoliciesArg", 1)?;
10149        self.internal_serialize::<S>(&mut s)?;
10150        s.end()
10151    }
10152}
10153
10154#[derive(Debug, Clone, PartialEq, Eq)]
10155#[non_exhaustive] // variants may be added in the future
10156pub enum LegalHoldsListPoliciesError {
10157    /// There has been an unknown legal hold error.
10158    UnknownLegalHoldError,
10159    /// You don't have permissions to perform this action.
10160    InsufficientPermissions,
10161    /// Temporary infrastructure failure, please retry.
10162    TransientError,
10163    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10164    /// typically indicates that this SDK version is out of date.
10165    Other,
10166}
10167
10168impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesError {
10169    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10170        // union deserializer
10171        use serde::de::{self, MapAccess, Visitor};
10172        struct EnumVisitor;
10173        impl<'de> Visitor<'de> for EnumVisitor {
10174            type Value = LegalHoldsListPoliciesError;
10175            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10176                f.write_str("a LegalHoldsListPoliciesError structure")
10177            }
10178            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10179                let tag: &str = match map.next_key()? {
10180                    Some(".tag") => map.next_value()?,
10181                    _ => return Err(de::Error::missing_field(".tag"))
10182                };
10183                let value = match tag {
10184                    "unknown_legal_hold_error" => LegalHoldsListPoliciesError::UnknownLegalHoldError,
10185                    "insufficient_permissions" => LegalHoldsListPoliciesError::InsufficientPermissions,
10186                    "transient_error" => LegalHoldsListPoliciesError::TransientError,
10187                    _ => LegalHoldsListPoliciesError::Other,
10188                };
10189                crate::eat_json_fields(&mut map)?;
10190                Ok(value)
10191            }
10192        }
10193        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10194                                    "insufficient_permissions",
10195                                    "other",
10196                                    "transient_error"];
10197        deserializer.deserialize_struct("LegalHoldsListPoliciesError", VARIANTS, EnumVisitor)
10198    }
10199}
10200
10201impl ::serde::ser::Serialize for LegalHoldsListPoliciesError {
10202    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10203        // union serializer
10204        use serde::ser::SerializeStruct;
10205        match self {
10206            LegalHoldsListPoliciesError::UnknownLegalHoldError => {
10207                // unit
10208                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10209                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10210                s.end()
10211            }
10212            LegalHoldsListPoliciesError::InsufficientPermissions => {
10213                // unit
10214                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10215                s.serialize_field(".tag", "insufficient_permissions")?;
10216                s.end()
10217            }
10218            LegalHoldsListPoliciesError::TransientError => {
10219                // unit
10220                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10221                s.serialize_field(".tag", "transient_error")?;
10222                s.end()
10223            }
10224            LegalHoldsListPoliciesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10225        }
10226    }
10227}
10228
10229impl ::std::error::Error for LegalHoldsListPoliciesError {
10230}
10231
10232impl ::std::fmt::Display for LegalHoldsListPoliciesError {
10233    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10234        match self {
10235            LegalHoldsListPoliciesError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10236            LegalHoldsListPoliciesError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10237            LegalHoldsListPoliciesError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10238            _ => write!(f, "{:?}", *self),
10239        }
10240    }
10241}
10242
10243// union extends LegalHoldsError
10244impl From<LegalHoldsError> for LegalHoldsListPoliciesError {
10245    fn from(parent: LegalHoldsError) -> Self {
10246        match parent {
10247            LegalHoldsError::UnknownLegalHoldError => LegalHoldsListPoliciesError::UnknownLegalHoldError,
10248            LegalHoldsError::InsufficientPermissions => LegalHoldsListPoliciesError::InsufficientPermissions,
10249            LegalHoldsError::Other => LegalHoldsListPoliciesError::Other,
10250        }
10251    }
10252}
10253#[derive(Debug, Clone, PartialEq, Eq)]
10254#[non_exhaustive] // structs may have more fields added in the future.
10255pub struct LegalHoldsListPoliciesResult {
10256    pub policies: Vec<LegalHoldPolicy>,
10257}
10258
10259impl LegalHoldsListPoliciesResult {
10260    pub fn new(policies: Vec<LegalHoldPolicy>) -> Self {
10261        LegalHoldsListPoliciesResult {
10262            policies,
10263        }
10264    }
10265}
10266
10267const LEGAL_HOLDS_LIST_POLICIES_RESULT_FIELDS: &[&str] = &["policies"];
10268impl LegalHoldsListPoliciesResult {
10269    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10270        map: V,
10271    ) -> Result<LegalHoldsListPoliciesResult, V::Error> {
10272        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10273    }
10274
10275    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10276        mut map: V,
10277        optional: bool,
10278    ) -> Result<Option<LegalHoldsListPoliciesResult>, V::Error> {
10279        let mut field_policies = None;
10280        let mut nothing = true;
10281        while let Some(key) = map.next_key::<&str>()? {
10282            nothing = false;
10283            match key {
10284                "policies" => {
10285                    if field_policies.is_some() {
10286                        return Err(::serde::de::Error::duplicate_field("policies"));
10287                    }
10288                    field_policies = Some(map.next_value()?);
10289                }
10290                _ => {
10291                    // unknown field allowed and ignored
10292                    map.next_value::<::serde_json::Value>()?;
10293                }
10294            }
10295        }
10296        if optional && nothing {
10297            return Ok(None);
10298        }
10299        let result = LegalHoldsListPoliciesResult {
10300            policies: field_policies.ok_or_else(|| ::serde::de::Error::missing_field("policies"))?,
10301        };
10302        Ok(Some(result))
10303    }
10304
10305    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10306        &self,
10307        s: &mut S::SerializeStruct,
10308    ) -> Result<(), S::Error> {
10309        use serde::ser::SerializeStruct;
10310        s.serialize_field("policies", &self.policies)?;
10311        Ok(())
10312    }
10313}
10314
10315impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesResult {
10316    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10317        // struct deserializer
10318        use serde::de::{MapAccess, Visitor};
10319        struct StructVisitor;
10320        impl<'de> Visitor<'de> for StructVisitor {
10321            type Value = LegalHoldsListPoliciesResult;
10322            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10323                f.write_str("a LegalHoldsListPoliciesResult struct")
10324            }
10325            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10326                LegalHoldsListPoliciesResult::internal_deserialize(map)
10327            }
10328        }
10329        deserializer.deserialize_struct("LegalHoldsListPoliciesResult", LEGAL_HOLDS_LIST_POLICIES_RESULT_FIELDS, StructVisitor)
10330    }
10331}
10332
10333impl ::serde::ser::Serialize for LegalHoldsListPoliciesResult {
10334    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10335        // struct serializer
10336        use serde::ser::SerializeStruct;
10337        let mut s = serializer.serialize_struct("LegalHoldsListPoliciesResult", 1)?;
10338        self.internal_serialize::<S>(&mut s)?;
10339        s.end()
10340    }
10341}
10342
10343#[derive(Debug, Clone, PartialEq, Eq)]
10344#[non_exhaustive] // structs may have more fields added in the future.
10345pub struct LegalHoldsPolicyCreateArg {
10346    /// Policy name.
10347    pub name: LegalHoldPolicyName,
10348    /// List of team member IDs added to the hold.
10349    pub members: Vec<crate::types::team_common::TeamMemberId>,
10350    /// A description of the legal hold policy.
10351    pub description: Option<LegalHoldPolicyDescription>,
10352    /// start date of the legal hold policy.
10353    pub start_date: Option<crate::types::common::DropboxTimestamp>,
10354    /// end date of the legal hold policy.
10355    pub end_date: Option<crate::types::common::DropboxTimestamp>,
10356}
10357
10358impl LegalHoldsPolicyCreateArg {
10359    pub fn new(
10360        name: LegalHoldPolicyName,
10361        members: Vec<crate::types::team_common::TeamMemberId>,
10362    ) -> Self {
10363        LegalHoldsPolicyCreateArg {
10364            name,
10365            members,
10366            description: None,
10367            start_date: None,
10368            end_date: None,
10369        }
10370    }
10371
10372    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
10373        self.description = Some(value);
10374        self
10375    }
10376
10377    pub fn with_start_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
10378        self.start_date = Some(value);
10379        self
10380    }
10381
10382    pub fn with_end_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
10383        self.end_date = Some(value);
10384        self
10385    }
10386}
10387
10388const LEGAL_HOLDS_POLICY_CREATE_ARG_FIELDS: &[&str] = &["name",
10389                                                        "members",
10390                                                        "description",
10391                                                        "start_date",
10392                                                        "end_date"];
10393impl LegalHoldsPolicyCreateArg {
10394    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10395        map: V,
10396    ) -> Result<LegalHoldsPolicyCreateArg, V::Error> {
10397        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10398    }
10399
10400    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10401        mut map: V,
10402        optional: bool,
10403    ) -> Result<Option<LegalHoldsPolicyCreateArg>, V::Error> {
10404        let mut field_name = None;
10405        let mut field_members = None;
10406        let mut field_description = None;
10407        let mut field_start_date = None;
10408        let mut field_end_date = None;
10409        let mut nothing = true;
10410        while let Some(key) = map.next_key::<&str>()? {
10411            nothing = false;
10412            match key {
10413                "name" => {
10414                    if field_name.is_some() {
10415                        return Err(::serde::de::Error::duplicate_field("name"));
10416                    }
10417                    field_name = Some(map.next_value()?);
10418                }
10419                "members" => {
10420                    if field_members.is_some() {
10421                        return Err(::serde::de::Error::duplicate_field("members"));
10422                    }
10423                    field_members = Some(map.next_value()?);
10424                }
10425                "description" => {
10426                    if field_description.is_some() {
10427                        return Err(::serde::de::Error::duplicate_field("description"));
10428                    }
10429                    field_description = Some(map.next_value()?);
10430                }
10431                "start_date" => {
10432                    if field_start_date.is_some() {
10433                        return Err(::serde::de::Error::duplicate_field("start_date"));
10434                    }
10435                    field_start_date = Some(map.next_value()?);
10436                }
10437                "end_date" => {
10438                    if field_end_date.is_some() {
10439                        return Err(::serde::de::Error::duplicate_field("end_date"));
10440                    }
10441                    field_end_date = Some(map.next_value()?);
10442                }
10443                _ => {
10444                    // unknown field allowed and ignored
10445                    map.next_value::<::serde_json::Value>()?;
10446                }
10447            }
10448        }
10449        if optional && nothing {
10450            return Ok(None);
10451        }
10452        let result = LegalHoldsPolicyCreateArg {
10453            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
10454            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
10455            description: field_description.and_then(Option::flatten),
10456            start_date: field_start_date.and_then(Option::flatten),
10457            end_date: field_end_date.and_then(Option::flatten),
10458        };
10459        Ok(Some(result))
10460    }
10461
10462    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10463        &self,
10464        s: &mut S::SerializeStruct,
10465    ) -> Result<(), S::Error> {
10466        use serde::ser::SerializeStruct;
10467        s.serialize_field("name", &self.name)?;
10468        s.serialize_field("members", &self.members)?;
10469        if let Some(val) = &self.description {
10470            s.serialize_field("description", val)?;
10471        }
10472        if let Some(val) = &self.start_date {
10473            s.serialize_field("start_date", val)?;
10474        }
10475        if let Some(val) = &self.end_date {
10476            s.serialize_field("end_date", val)?;
10477        }
10478        Ok(())
10479    }
10480}
10481
10482impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyCreateArg {
10483    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10484        // struct deserializer
10485        use serde::de::{MapAccess, Visitor};
10486        struct StructVisitor;
10487        impl<'de> Visitor<'de> for StructVisitor {
10488            type Value = LegalHoldsPolicyCreateArg;
10489            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10490                f.write_str("a LegalHoldsPolicyCreateArg struct")
10491            }
10492            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10493                LegalHoldsPolicyCreateArg::internal_deserialize(map)
10494            }
10495        }
10496        deserializer.deserialize_struct("LegalHoldsPolicyCreateArg", LEGAL_HOLDS_POLICY_CREATE_ARG_FIELDS, StructVisitor)
10497    }
10498}
10499
10500impl ::serde::ser::Serialize for LegalHoldsPolicyCreateArg {
10501    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10502        // struct serializer
10503        use serde::ser::SerializeStruct;
10504        let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateArg", 5)?;
10505        self.internal_serialize::<S>(&mut s)?;
10506        s.end()
10507    }
10508}
10509
10510#[derive(Debug, Clone, PartialEq, Eq)]
10511#[non_exhaustive] // variants may be added in the future
10512pub enum LegalHoldsPolicyCreateError {
10513    /// There has been an unknown legal hold error.
10514    UnknownLegalHoldError,
10515    /// You don't have permissions to perform this action.
10516    InsufficientPermissions,
10517    /// Start date must be earlier than end date.
10518    StartDateIsLaterThanEndDate,
10519    /// The users list must have at least one user.
10520    EmptyMembersList,
10521    /// Some members in the members list are not valid to be placed under legal hold.
10522    InvalidMembers,
10523    /// You cannot add more than 5 users in a legal hold.
10524    NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
10525    /// Temporary infrastructure failure, please retry.
10526    TransientError,
10527    /// The name provided is already in use by another legal hold.
10528    NameMustBeUnique,
10529    /// Team exceeded legal hold quota.
10530    TeamExceededLegalHoldQuota,
10531    /// The provided date is invalid.
10532    InvalidDate,
10533    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10534    /// typically indicates that this SDK version is out of date.
10535    Other,
10536}
10537
10538impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyCreateError {
10539    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10540        // union deserializer
10541        use serde::de::{self, MapAccess, Visitor};
10542        struct EnumVisitor;
10543        impl<'de> Visitor<'de> for EnumVisitor {
10544            type Value = LegalHoldsPolicyCreateError;
10545            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10546                f.write_str("a LegalHoldsPolicyCreateError structure")
10547            }
10548            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10549                let tag: &str = match map.next_key()? {
10550                    Some(".tag") => map.next_value()?,
10551                    _ => return Err(de::Error::missing_field(".tag"))
10552                };
10553                let value = match tag {
10554                    "unknown_legal_hold_error" => LegalHoldsPolicyCreateError::UnknownLegalHoldError,
10555                    "insufficient_permissions" => LegalHoldsPolicyCreateError::InsufficientPermissions,
10556                    "start_date_is_later_than_end_date" => LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate,
10557                    "empty_members_list" => LegalHoldsPolicyCreateError::EmptyMembersList,
10558                    "invalid_members" => LegalHoldsPolicyCreateError::InvalidMembers,
10559                    "number_of_users_on_hold_is_greater_than_hold_limitation" => LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
10560                    "transient_error" => LegalHoldsPolicyCreateError::TransientError,
10561                    "name_must_be_unique" => LegalHoldsPolicyCreateError::NameMustBeUnique,
10562                    "team_exceeded_legal_hold_quota" => LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota,
10563                    "invalid_date" => LegalHoldsPolicyCreateError::InvalidDate,
10564                    _ => LegalHoldsPolicyCreateError::Other,
10565                };
10566                crate::eat_json_fields(&mut map)?;
10567                Ok(value)
10568            }
10569        }
10570        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10571                                    "insufficient_permissions",
10572                                    "other",
10573                                    "start_date_is_later_than_end_date",
10574                                    "empty_members_list",
10575                                    "invalid_members",
10576                                    "number_of_users_on_hold_is_greater_than_hold_limitation",
10577                                    "transient_error",
10578                                    "name_must_be_unique",
10579                                    "team_exceeded_legal_hold_quota",
10580                                    "invalid_date"];
10581        deserializer.deserialize_struct("LegalHoldsPolicyCreateError", VARIANTS, EnumVisitor)
10582    }
10583}
10584
10585impl ::serde::ser::Serialize for LegalHoldsPolicyCreateError {
10586    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10587        // union serializer
10588        use serde::ser::SerializeStruct;
10589        match self {
10590            LegalHoldsPolicyCreateError::UnknownLegalHoldError => {
10591                // unit
10592                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10593                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10594                s.end()
10595            }
10596            LegalHoldsPolicyCreateError::InsufficientPermissions => {
10597                // unit
10598                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10599                s.serialize_field(".tag", "insufficient_permissions")?;
10600                s.end()
10601            }
10602            LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate => {
10603                // unit
10604                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10605                s.serialize_field(".tag", "start_date_is_later_than_end_date")?;
10606                s.end()
10607            }
10608            LegalHoldsPolicyCreateError::EmptyMembersList => {
10609                // unit
10610                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10611                s.serialize_field(".tag", "empty_members_list")?;
10612                s.end()
10613            }
10614            LegalHoldsPolicyCreateError::InvalidMembers => {
10615                // unit
10616                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10617                s.serialize_field(".tag", "invalid_members")?;
10618                s.end()
10619            }
10620            LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => {
10621                // unit
10622                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10623                s.serialize_field(".tag", "number_of_users_on_hold_is_greater_than_hold_limitation")?;
10624                s.end()
10625            }
10626            LegalHoldsPolicyCreateError::TransientError => {
10627                // unit
10628                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10629                s.serialize_field(".tag", "transient_error")?;
10630                s.end()
10631            }
10632            LegalHoldsPolicyCreateError::NameMustBeUnique => {
10633                // unit
10634                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10635                s.serialize_field(".tag", "name_must_be_unique")?;
10636                s.end()
10637            }
10638            LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota => {
10639                // unit
10640                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10641                s.serialize_field(".tag", "team_exceeded_legal_hold_quota")?;
10642                s.end()
10643            }
10644            LegalHoldsPolicyCreateError::InvalidDate => {
10645                // unit
10646                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10647                s.serialize_field(".tag", "invalid_date")?;
10648                s.end()
10649            }
10650            LegalHoldsPolicyCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10651        }
10652    }
10653}
10654
10655impl ::std::error::Error for LegalHoldsPolicyCreateError {
10656}
10657
10658impl ::std::fmt::Display for LegalHoldsPolicyCreateError {
10659    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10660        match self {
10661            LegalHoldsPolicyCreateError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10662            LegalHoldsPolicyCreateError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10663            LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate => f.write_str("Start date must be earlier than end date."),
10664            LegalHoldsPolicyCreateError::EmptyMembersList => f.write_str("The users list must have at least one user."),
10665            LegalHoldsPolicyCreateError::InvalidMembers => f.write_str("Some members in the members list are not valid to be placed under legal hold."),
10666            LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => f.write_str("You cannot add more than 5 users in a legal hold."),
10667            LegalHoldsPolicyCreateError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10668            LegalHoldsPolicyCreateError::NameMustBeUnique => f.write_str("The name provided is already in use by another legal hold."),
10669            LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota => f.write_str("Team exceeded legal hold quota."),
10670            LegalHoldsPolicyCreateError::InvalidDate => f.write_str("The provided date is invalid."),
10671            _ => write!(f, "{:?}", *self),
10672        }
10673    }
10674}
10675
10676// union extends LegalHoldsError
10677impl From<LegalHoldsError> for LegalHoldsPolicyCreateError {
10678    fn from(parent: LegalHoldsError) -> Self {
10679        match parent {
10680            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyCreateError::UnknownLegalHoldError,
10681            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyCreateError::InsufficientPermissions,
10682            LegalHoldsError::Other => LegalHoldsPolicyCreateError::Other,
10683        }
10684    }
10685}
10686#[derive(Debug, Clone, PartialEq, Eq)]
10687#[non_exhaustive] // structs may have more fields added in the future.
10688pub struct LegalHoldsPolicyReleaseArg {
10689    /// The legal hold Id.
10690    pub id: LegalHoldId,
10691}
10692
10693impl LegalHoldsPolicyReleaseArg {
10694    pub fn new(id: LegalHoldId) -> Self {
10695        LegalHoldsPolicyReleaseArg {
10696            id,
10697        }
10698    }
10699}
10700
10701const LEGAL_HOLDS_POLICY_RELEASE_ARG_FIELDS: &[&str] = &["id"];
10702impl LegalHoldsPolicyReleaseArg {
10703    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10704        map: V,
10705    ) -> Result<LegalHoldsPolicyReleaseArg, V::Error> {
10706        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10707    }
10708
10709    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10710        mut map: V,
10711        optional: bool,
10712    ) -> Result<Option<LegalHoldsPolicyReleaseArg>, V::Error> {
10713        let mut field_id = None;
10714        let mut nothing = true;
10715        while let Some(key) = map.next_key::<&str>()? {
10716            nothing = false;
10717            match key {
10718                "id" => {
10719                    if field_id.is_some() {
10720                        return Err(::serde::de::Error::duplicate_field("id"));
10721                    }
10722                    field_id = Some(map.next_value()?);
10723                }
10724                _ => {
10725                    // unknown field allowed and ignored
10726                    map.next_value::<::serde_json::Value>()?;
10727                }
10728            }
10729        }
10730        if optional && nothing {
10731            return Ok(None);
10732        }
10733        let result = LegalHoldsPolicyReleaseArg {
10734            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10735        };
10736        Ok(Some(result))
10737    }
10738
10739    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10740        &self,
10741        s: &mut S::SerializeStruct,
10742    ) -> Result<(), S::Error> {
10743        use serde::ser::SerializeStruct;
10744        s.serialize_field("id", &self.id)?;
10745        Ok(())
10746    }
10747}
10748
10749impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyReleaseArg {
10750    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10751        // struct deserializer
10752        use serde::de::{MapAccess, Visitor};
10753        struct StructVisitor;
10754        impl<'de> Visitor<'de> for StructVisitor {
10755            type Value = LegalHoldsPolicyReleaseArg;
10756            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10757                f.write_str("a LegalHoldsPolicyReleaseArg struct")
10758            }
10759            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10760                LegalHoldsPolicyReleaseArg::internal_deserialize(map)
10761            }
10762        }
10763        deserializer.deserialize_struct("LegalHoldsPolicyReleaseArg", LEGAL_HOLDS_POLICY_RELEASE_ARG_FIELDS, StructVisitor)
10764    }
10765}
10766
10767impl ::serde::ser::Serialize for LegalHoldsPolicyReleaseArg {
10768    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10769        // struct serializer
10770        use serde::ser::SerializeStruct;
10771        let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseArg", 1)?;
10772        self.internal_serialize::<S>(&mut s)?;
10773        s.end()
10774    }
10775}
10776
10777#[derive(Debug, Clone, PartialEq, Eq)]
10778#[non_exhaustive] // variants may be added in the future
10779pub enum LegalHoldsPolicyReleaseError {
10780    /// There has been an unknown legal hold error.
10781    UnknownLegalHoldError,
10782    /// You don't have permissions to perform this action.
10783    InsufficientPermissions,
10784    /// Legal hold is currently performing another operation.
10785    LegalHoldPerformingAnotherOperation,
10786    /// Legal hold is currently performing a release or is already released.
10787    LegalHoldAlreadyReleasing,
10788    /// Legal hold policy does not exist for
10789    /// [`LegalHoldsPolicyReleaseArg::id`](LegalHoldsPolicyReleaseArg).
10790    LegalHoldPolicyNotFound,
10791    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10792    /// typically indicates that this SDK version is out of date.
10793    Other,
10794}
10795
10796impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyReleaseError {
10797    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10798        // union deserializer
10799        use serde::de::{self, MapAccess, Visitor};
10800        struct EnumVisitor;
10801        impl<'de> Visitor<'de> for EnumVisitor {
10802            type Value = LegalHoldsPolicyReleaseError;
10803            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10804                f.write_str("a LegalHoldsPolicyReleaseError structure")
10805            }
10806            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10807                let tag: &str = match map.next_key()? {
10808                    Some(".tag") => map.next_value()?,
10809                    _ => return Err(de::Error::missing_field(".tag"))
10810                };
10811                let value = match tag {
10812                    "unknown_legal_hold_error" => LegalHoldsPolicyReleaseError::UnknownLegalHoldError,
10813                    "insufficient_permissions" => LegalHoldsPolicyReleaseError::InsufficientPermissions,
10814                    "legal_hold_performing_another_operation" => LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation,
10815                    "legal_hold_already_releasing" => LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing,
10816                    "legal_hold_policy_not_found" => LegalHoldsPolicyReleaseError::LegalHoldPolicyNotFound,
10817                    _ => LegalHoldsPolicyReleaseError::Other,
10818                };
10819                crate::eat_json_fields(&mut map)?;
10820                Ok(value)
10821            }
10822        }
10823        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10824                                    "insufficient_permissions",
10825                                    "other",
10826                                    "legal_hold_performing_another_operation",
10827                                    "legal_hold_already_releasing",
10828                                    "legal_hold_policy_not_found"];
10829        deserializer.deserialize_struct("LegalHoldsPolicyReleaseError", VARIANTS, EnumVisitor)
10830    }
10831}
10832
10833impl ::serde::ser::Serialize for LegalHoldsPolicyReleaseError {
10834    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10835        // union serializer
10836        use serde::ser::SerializeStruct;
10837        match self {
10838            LegalHoldsPolicyReleaseError::UnknownLegalHoldError => {
10839                // unit
10840                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10841                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10842                s.end()
10843            }
10844            LegalHoldsPolicyReleaseError::InsufficientPermissions => {
10845                // unit
10846                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10847                s.serialize_field(".tag", "insufficient_permissions")?;
10848                s.end()
10849            }
10850            LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation => {
10851                // unit
10852                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10853                s.serialize_field(".tag", "legal_hold_performing_another_operation")?;
10854                s.end()
10855            }
10856            LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing => {
10857                // unit
10858                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10859                s.serialize_field(".tag", "legal_hold_already_releasing")?;
10860                s.end()
10861            }
10862            LegalHoldsPolicyReleaseError::LegalHoldPolicyNotFound => {
10863                // unit
10864                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10865                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
10866                s.end()
10867            }
10868            LegalHoldsPolicyReleaseError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10869        }
10870    }
10871}
10872
10873impl ::std::error::Error for LegalHoldsPolicyReleaseError {
10874}
10875
10876impl ::std::fmt::Display for LegalHoldsPolicyReleaseError {
10877    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10878        match self {
10879            LegalHoldsPolicyReleaseError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10880            LegalHoldsPolicyReleaseError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10881            LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation => f.write_str("Legal hold is currently performing another operation."),
10882            LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing => f.write_str("Legal hold is currently performing a release or is already released."),
10883            _ => write!(f, "{:?}", *self),
10884        }
10885    }
10886}
10887
10888// union extends LegalHoldsError
10889impl From<LegalHoldsError> for LegalHoldsPolicyReleaseError {
10890    fn from(parent: LegalHoldsError) -> Self {
10891        match parent {
10892            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyReleaseError::UnknownLegalHoldError,
10893            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyReleaseError::InsufficientPermissions,
10894            LegalHoldsError::Other => LegalHoldsPolicyReleaseError::Other,
10895        }
10896    }
10897}
10898#[derive(Debug, Clone, PartialEq, Eq)]
10899#[non_exhaustive] // structs may have more fields added in the future.
10900pub struct LegalHoldsPolicyUpdateArg {
10901    /// The legal hold Id.
10902    pub id: LegalHoldId,
10903    /// Policy new name.
10904    pub name: Option<LegalHoldPolicyName>,
10905    /// Policy new description.
10906    pub description: Option<LegalHoldPolicyDescription>,
10907    /// List of team member IDs to apply the policy on.
10908    pub members: Option<Vec<crate::types::team_common::TeamMemberId>>,
10909}
10910
10911impl LegalHoldsPolicyUpdateArg {
10912    pub fn new(id: LegalHoldId) -> Self {
10913        LegalHoldsPolicyUpdateArg {
10914            id,
10915            name: None,
10916            description: None,
10917            members: None,
10918        }
10919    }
10920
10921    pub fn with_name(mut self, value: LegalHoldPolicyName) -> Self {
10922        self.name = Some(value);
10923        self
10924    }
10925
10926    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
10927        self.description = Some(value);
10928        self
10929    }
10930
10931    pub fn with_members(mut self, value: Vec<crate::types::team_common::TeamMemberId>) -> Self {
10932        self.members = Some(value);
10933        self
10934    }
10935}
10936
10937const LEGAL_HOLDS_POLICY_UPDATE_ARG_FIELDS: &[&str] = &["id",
10938                                                        "name",
10939                                                        "description",
10940                                                        "members"];
10941impl LegalHoldsPolicyUpdateArg {
10942    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10943        map: V,
10944    ) -> Result<LegalHoldsPolicyUpdateArg, V::Error> {
10945        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10946    }
10947
10948    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10949        mut map: V,
10950        optional: bool,
10951    ) -> Result<Option<LegalHoldsPolicyUpdateArg>, V::Error> {
10952        let mut field_id = None;
10953        let mut field_name = None;
10954        let mut field_description = None;
10955        let mut field_members = None;
10956        let mut nothing = true;
10957        while let Some(key) = map.next_key::<&str>()? {
10958            nothing = false;
10959            match key {
10960                "id" => {
10961                    if field_id.is_some() {
10962                        return Err(::serde::de::Error::duplicate_field("id"));
10963                    }
10964                    field_id = Some(map.next_value()?);
10965                }
10966                "name" => {
10967                    if field_name.is_some() {
10968                        return Err(::serde::de::Error::duplicate_field("name"));
10969                    }
10970                    field_name = Some(map.next_value()?);
10971                }
10972                "description" => {
10973                    if field_description.is_some() {
10974                        return Err(::serde::de::Error::duplicate_field("description"));
10975                    }
10976                    field_description = Some(map.next_value()?);
10977                }
10978                "members" => {
10979                    if field_members.is_some() {
10980                        return Err(::serde::de::Error::duplicate_field("members"));
10981                    }
10982                    field_members = Some(map.next_value()?);
10983                }
10984                _ => {
10985                    // unknown field allowed and ignored
10986                    map.next_value::<::serde_json::Value>()?;
10987                }
10988            }
10989        }
10990        if optional && nothing {
10991            return Ok(None);
10992        }
10993        let result = LegalHoldsPolicyUpdateArg {
10994            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10995            name: field_name.and_then(Option::flatten),
10996            description: field_description.and_then(Option::flatten),
10997            members: field_members.and_then(Option::flatten),
10998        };
10999        Ok(Some(result))
11000    }
11001
11002    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11003        &self,
11004        s: &mut S::SerializeStruct,
11005    ) -> Result<(), S::Error> {
11006        use serde::ser::SerializeStruct;
11007        s.serialize_field("id", &self.id)?;
11008        if let Some(val) = &self.name {
11009            s.serialize_field("name", val)?;
11010        }
11011        if let Some(val) = &self.description {
11012            s.serialize_field("description", val)?;
11013        }
11014        if let Some(val) = &self.members {
11015            s.serialize_field("members", val)?;
11016        }
11017        Ok(())
11018    }
11019}
11020
11021impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyUpdateArg {
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 = LegalHoldsPolicyUpdateArg;
11028            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11029                f.write_str("a LegalHoldsPolicyUpdateArg struct")
11030            }
11031            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11032                LegalHoldsPolicyUpdateArg::internal_deserialize(map)
11033            }
11034        }
11035        deserializer.deserialize_struct("LegalHoldsPolicyUpdateArg", LEGAL_HOLDS_POLICY_UPDATE_ARG_FIELDS, StructVisitor)
11036    }
11037}
11038
11039impl ::serde::ser::Serialize for LegalHoldsPolicyUpdateArg {
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("LegalHoldsPolicyUpdateArg", 4)?;
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 LegalHoldsPolicyUpdateError {
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    /// Trying to release an inactive legal hold.
11059    InactiveLegalHold,
11060    /// Legal hold is currently performing another operation.
11061    LegalHoldPerformingAnotherOperation,
11062    /// Some members in the members list are not valid to be placed under legal hold.
11063    InvalidMembers,
11064    /// You cannot add more than 5 users in a legal hold.
11065    NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11066    /// The users list must have at least one user.
11067    EmptyMembersList,
11068    /// The name provided is already in use by another legal hold.
11069    NameMustBeUnique,
11070    /// Legal hold policy does not exist for
11071    /// [`LegalHoldsPolicyUpdateArg::id`](LegalHoldsPolicyUpdateArg).
11072    LegalHoldPolicyNotFound,
11073    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11074    /// typically indicates that this SDK version is out of date.
11075    Other,
11076}
11077
11078impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyUpdateError {
11079    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11080        // union deserializer
11081        use serde::de::{self, MapAccess, Visitor};
11082        struct EnumVisitor;
11083        impl<'de> Visitor<'de> for EnumVisitor {
11084            type Value = LegalHoldsPolicyUpdateError;
11085            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11086                f.write_str("a LegalHoldsPolicyUpdateError structure")
11087            }
11088            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11089                let tag: &str = match map.next_key()? {
11090                    Some(".tag") => map.next_value()?,
11091                    _ => return Err(de::Error::missing_field(".tag"))
11092                };
11093                let value = match tag {
11094                    "unknown_legal_hold_error" => LegalHoldsPolicyUpdateError::UnknownLegalHoldError,
11095                    "insufficient_permissions" => LegalHoldsPolicyUpdateError::InsufficientPermissions,
11096                    "transient_error" => LegalHoldsPolicyUpdateError::TransientError,
11097                    "inactive_legal_hold" => LegalHoldsPolicyUpdateError::InactiveLegalHold,
11098                    "legal_hold_performing_another_operation" => LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation,
11099                    "invalid_members" => LegalHoldsPolicyUpdateError::InvalidMembers,
11100                    "number_of_users_on_hold_is_greater_than_hold_limitation" => LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11101                    "empty_members_list" => LegalHoldsPolicyUpdateError::EmptyMembersList,
11102                    "name_must_be_unique" => LegalHoldsPolicyUpdateError::NameMustBeUnique,
11103                    "legal_hold_policy_not_found" => LegalHoldsPolicyUpdateError::LegalHoldPolicyNotFound,
11104                    _ => LegalHoldsPolicyUpdateError::Other,
11105                };
11106                crate::eat_json_fields(&mut map)?;
11107                Ok(value)
11108            }
11109        }
11110        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
11111                                    "insufficient_permissions",
11112                                    "other",
11113                                    "transient_error",
11114                                    "inactive_legal_hold",
11115                                    "legal_hold_performing_another_operation",
11116                                    "invalid_members",
11117                                    "number_of_users_on_hold_is_greater_than_hold_limitation",
11118                                    "empty_members_list",
11119                                    "name_must_be_unique",
11120                                    "legal_hold_policy_not_found"];
11121        deserializer.deserialize_struct("LegalHoldsPolicyUpdateError", VARIANTS, EnumVisitor)
11122    }
11123}
11124
11125impl ::serde::ser::Serialize for LegalHoldsPolicyUpdateError {
11126    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11127        // union serializer
11128        use serde::ser::SerializeStruct;
11129        match self {
11130            LegalHoldsPolicyUpdateError::UnknownLegalHoldError => {
11131                // unit
11132                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11133                s.serialize_field(".tag", "unknown_legal_hold_error")?;
11134                s.end()
11135            }
11136            LegalHoldsPolicyUpdateError::InsufficientPermissions => {
11137                // unit
11138                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11139                s.serialize_field(".tag", "insufficient_permissions")?;
11140                s.end()
11141            }
11142            LegalHoldsPolicyUpdateError::TransientError => {
11143                // unit
11144                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11145                s.serialize_field(".tag", "transient_error")?;
11146                s.end()
11147            }
11148            LegalHoldsPolicyUpdateError::InactiveLegalHold => {
11149                // unit
11150                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11151                s.serialize_field(".tag", "inactive_legal_hold")?;
11152                s.end()
11153            }
11154            LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation => {
11155                // unit
11156                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11157                s.serialize_field(".tag", "legal_hold_performing_another_operation")?;
11158                s.end()
11159            }
11160            LegalHoldsPolicyUpdateError::InvalidMembers => {
11161                // unit
11162                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11163                s.serialize_field(".tag", "invalid_members")?;
11164                s.end()
11165            }
11166            LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => {
11167                // unit
11168                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11169                s.serialize_field(".tag", "number_of_users_on_hold_is_greater_than_hold_limitation")?;
11170                s.end()
11171            }
11172            LegalHoldsPolicyUpdateError::EmptyMembersList => {
11173                // unit
11174                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11175                s.serialize_field(".tag", "empty_members_list")?;
11176                s.end()
11177            }
11178            LegalHoldsPolicyUpdateError::NameMustBeUnique => {
11179                // unit
11180                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11181                s.serialize_field(".tag", "name_must_be_unique")?;
11182                s.end()
11183            }
11184            LegalHoldsPolicyUpdateError::LegalHoldPolicyNotFound => {
11185                // unit
11186                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11187                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
11188                s.end()
11189            }
11190            LegalHoldsPolicyUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11191        }
11192    }
11193}
11194
11195impl ::std::error::Error for LegalHoldsPolicyUpdateError {
11196}
11197
11198impl ::std::fmt::Display for LegalHoldsPolicyUpdateError {
11199    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11200        match self {
11201            LegalHoldsPolicyUpdateError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
11202            LegalHoldsPolicyUpdateError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
11203            LegalHoldsPolicyUpdateError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
11204            LegalHoldsPolicyUpdateError::InactiveLegalHold => f.write_str("Trying to release an inactive legal hold."),
11205            LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation => f.write_str("Legal hold is currently performing another operation."),
11206            LegalHoldsPolicyUpdateError::InvalidMembers => f.write_str("Some members in the members list are not valid to be placed under legal hold."),
11207            LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => f.write_str("You cannot add more than 5 users in a legal hold."),
11208            LegalHoldsPolicyUpdateError::EmptyMembersList => f.write_str("The users list must have at least one user."),
11209            LegalHoldsPolicyUpdateError::NameMustBeUnique => f.write_str("The name provided is already in use by another legal hold."),
11210            _ => write!(f, "{:?}", *self),
11211        }
11212    }
11213}
11214
11215// union extends LegalHoldsError
11216impl From<LegalHoldsError> for LegalHoldsPolicyUpdateError {
11217    fn from(parent: LegalHoldsError) -> Self {
11218        match parent {
11219            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyUpdateError::UnknownLegalHoldError,
11220            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyUpdateError::InsufficientPermissions,
11221            LegalHoldsError::Other => LegalHoldsPolicyUpdateError::Other,
11222        }
11223    }
11224}
11225#[derive(Debug, Clone, PartialEq, Eq)]
11226#[non_exhaustive] // structs may have more fields added in the future.
11227pub struct ListMemberAppsArg {
11228    /// The team member id.
11229    pub team_member_id: String,
11230}
11231
11232impl ListMemberAppsArg {
11233    pub fn new(team_member_id: String) -> Self {
11234        ListMemberAppsArg {
11235            team_member_id,
11236        }
11237    }
11238}
11239
11240const LIST_MEMBER_APPS_ARG_FIELDS: &[&str] = &["team_member_id"];
11241impl ListMemberAppsArg {
11242    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11243        map: V,
11244    ) -> Result<ListMemberAppsArg, V::Error> {
11245        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11246    }
11247
11248    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11249        mut map: V,
11250        optional: bool,
11251    ) -> Result<Option<ListMemberAppsArg>, V::Error> {
11252        let mut field_team_member_id = None;
11253        let mut nothing = true;
11254        while let Some(key) = map.next_key::<&str>()? {
11255            nothing = false;
11256            match key {
11257                "team_member_id" => {
11258                    if field_team_member_id.is_some() {
11259                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
11260                    }
11261                    field_team_member_id = Some(map.next_value()?);
11262                }
11263                _ => {
11264                    // unknown field allowed and ignored
11265                    map.next_value::<::serde_json::Value>()?;
11266                }
11267            }
11268        }
11269        if optional && nothing {
11270            return Ok(None);
11271        }
11272        let result = ListMemberAppsArg {
11273            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
11274        };
11275        Ok(Some(result))
11276    }
11277
11278    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11279        &self,
11280        s: &mut S::SerializeStruct,
11281    ) -> Result<(), S::Error> {
11282        use serde::ser::SerializeStruct;
11283        s.serialize_field("team_member_id", &self.team_member_id)?;
11284        Ok(())
11285    }
11286}
11287
11288impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsArg {
11289    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11290        // struct deserializer
11291        use serde::de::{MapAccess, Visitor};
11292        struct StructVisitor;
11293        impl<'de> Visitor<'de> for StructVisitor {
11294            type Value = ListMemberAppsArg;
11295            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11296                f.write_str("a ListMemberAppsArg struct")
11297            }
11298            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11299                ListMemberAppsArg::internal_deserialize(map)
11300            }
11301        }
11302        deserializer.deserialize_struct("ListMemberAppsArg", LIST_MEMBER_APPS_ARG_FIELDS, StructVisitor)
11303    }
11304}
11305
11306impl ::serde::ser::Serialize for ListMemberAppsArg {
11307    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11308        // struct serializer
11309        use serde::ser::SerializeStruct;
11310        let mut s = serializer.serialize_struct("ListMemberAppsArg", 1)?;
11311        self.internal_serialize::<S>(&mut s)?;
11312        s.end()
11313    }
11314}
11315
11316/// Error returned by
11317/// [`linked_apps_list_member_linked_apps()`](crate::team::linked_apps_list_member_linked_apps).
11318#[derive(Debug, Clone, PartialEq, Eq)]
11319#[non_exhaustive] // variants may be added in the future
11320pub enum ListMemberAppsError {
11321    /// Member not found.
11322    MemberNotFound,
11323    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11324    /// typically indicates that this SDK version is out of date.
11325    Other,
11326}
11327
11328impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsError {
11329    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11330        // union deserializer
11331        use serde::de::{self, MapAccess, Visitor};
11332        struct EnumVisitor;
11333        impl<'de> Visitor<'de> for EnumVisitor {
11334            type Value = ListMemberAppsError;
11335            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11336                f.write_str("a ListMemberAppsError structure")
11337            }
11338            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11339                let tag: &str = match map.next_key()? {
11340                    Some(".tag") => map.next_value()?,
11341                    _ => return Err(de::Error::missing_field(".tag"))
11342                };
11343                let value = match tag {
11344                    "member_not_found" => ListMemberAppsError::MemberNotFound,
11345                    _ => ListMemberAppsError::Other,
11346                };
11347                crate::eat_json_fields(&mut map)?;
11348                Ok(value)
11349            }
11350        }
11351        const VARIANTS: &[&str] = &["member_not_found",
11352                                    "other"];
11353        deserializer.deserialize_struct("ListMemberAppsError", VARIANTS, EnumVisitor)
11354    }
11355}
11356
11357impl ::serde::ser::Serialize for ListMemberAppsError {
11358    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11359        // union serializer
11360        use serde::ser::SerializeStruct;
11361        match self {
11362            ListMemberAppsError::MemberNotFound => {
11363                // unit
11364                let mut s = serializer.serialize_struct("ListMemberAppsError", 1)?;
11365                s.serialize_field(".tag", "member_not_found")?;
11366                s.end()
11367            }
11368            ListMemberAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11369        }
11370    }
11371}
11372
11373impl ::std::error::Error for ListMemberAppsError {
11374}
11375
11376impl ::std::fmt::Display for ListMemberAppsError {
11377    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11378        match self {
11379            ListMemberAppsError::MemberNotFound => f.write_str("Member not found."),
11380            _ => write!(f, "{:?}", *self),
11381        }
11382    }
11383}
11384
11385#[derive(Debug, Clone, PartialEq, Eq)]
11386#[non_exhaustive] // structs may have more fields added in the future.
11387pub struct ListMemberAppsResult {
11388    /// List of third party applications linked by this team member.
11389    pub linked_api_apps: Vec<ApiApp>,
11390}
11391
11392impl ListMemberAppsResult {
11393    pub fn new(linked_api_apps: Vec<ApiApp>) -> Self {
11394        ListMemberAppsResult {
11395            linked_api_apps,
11396        }
11397    }
11398}
11399
11400const LIST_MEMBER_APPS_RESULT_FIELDS: &[&str] = &["linked_api_apps"];
11401impl ListMemberAppsResult {
11402    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11403        map: V,
11404    ) -> Result<ListMemberAppsResult, V::Error> {
11405        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11406    }
11407
11408    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11409        mut map: V,
11410        optional: bool,
11411    ) -> Result<Option<ListMemberAppsResult>, V::Error> {
11412        let mut field_linked_api_apps = None;
11413        let mut nothing = true;
11414        while let Some(key) = map.next_key::<&str>()? {
11415            nothing = false;
11416            match key {
11417                "linked_api_apps" => {
11418                    if field_linked_api_apps.is_some() {
11419                        return Err(::serde::de::Error::duplicate_field("linked_api_apps"));
11420                    }
11421                    field_linked_api_apps = Some(map.next_value()?);
11422                }
11423                _ => {
11424                    // unknown field allowed and ignored
11425                    map.next_value::<::serde_json::Value>()?;
11426                }
11427            }
11428        }
11429        if optional && nothing {
11430            return Ok(None);
11431        }
11432        let result = ListMemberAppsResult {
11433            linked_api_apps: field_linked_api_apps.ok_or_else(|| ::serde::de::Error::missing_field("linked_api_apps"))?,
11434        };
11435        Ok(Some(result))
11436    }
11437
11438    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11439        &self,
11440        s: &mut S::SerializeStruct,
11441    ) -> Result<(), S::Error> {
11442        use serde::ser::SerializeStruct;
11443        s.serialize_field("linked_api_apps", &self.linked_api_apps)?;
11444        Ok(())
11445    }
11446}
11447
11448impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsResult {
11449    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11450        // struct deserializer
11451        use serde::de::{MapAccess, Visitor};
11452        struct StructVisitor;
11453        impl<'de> Visitor<'de> for StructVisitor {
11454            type Value = ListMemberAppsResult;
11455            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11456                f.write_str("a ListMemberAppsResult struct")
11457            }
11458            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11459                ListMemberAppsResult::internal_deserialize(map)
11460            }
11461        }
11462        deserializer.deserialize_struct("ListMemberAppsResult", LIST_MEMBER_APPS_RESULT_FIELDS, StructVisitor)
11463    }
11464}
11465
11466impl ::serde::ser::Serialize for ListMemberAppsResult {
11467    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11468        // struct serializer
11469        use serde::ser::SerializeStruct;
11470        let mut s = serializer.serialize_struct("ListMemberAppsResult", 1)?;
11471        self.internal_serialize::<S>(&mut s)?;
11472        s.end()
11473    }
11474}
11475
11476#[derive(Debug, Clone, PartialEq, Eq)]
11477#[non_exhaustive] // structs may have more fields added in the future.
11478pub struct ListMemberDevicesArg {
11479    /// The team's member id.
11480    pub team_member_id: String,
11481    /// Whether to list web sessions of the team's member.
11482    pub include_web_sessions: bool,
11483    /// Whether to list linked desktop devices of the team's member.
11484    pub include_desktop_clients: bool,
11485    /// Whether to list linked mobile devices of the team's member.
11486    pub include_mobile_clients: bool,
11487}
11488
11489impl ListMemberDevicesArg {
11490    pub fn new(team_member_id: String) -> Self {
11491        ListMemberDevicesArg {
11492            team_member_id,
11493            include_web_sessions: true,
11494            include_desktop_clients: true,
11495            include_mobile_clients: true,
11496        }
11497    }
11498
11499    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
11500        self.include_web_sessions = value;
11501        self
11502    }
11503
11504    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
11505        self.include_desktop_clients = value;
11506        self
11507    }
11508
11509    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
11510        self.include_mobile_clients = value;
11511        self
11512    }
11513}
11514
11515const LIST_MEMBER_DEVICES_ARG_FIELDS: &[&str] = &["team_member_id",
11516                                                  "include_web_sessions",
11517                                                  "include_desktop_clients",
11518                                                  "include_mobile_clients"];
11519impl ListMemberDevicesArg {
11520    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11521        map: V,
11522    ) -> Result<ListMemberDevicesArg, V::Error> {
11523        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11524    }
11525
11526    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11527        mut map: V,
11528        optional: bool,
11529    ) -> Result<Option<ListMemberDevicesArg>, V::Error> {
11530        let mut field_team_member_id = None;
11531        let mut field_include_web_sessions = None;
11532        let mut field_include_desktop_clients = None;
11533        let mut field_include_mobile_clients = None;
11534        let mut nothing = true;
11535        while let Some(key) = map.next_key::<&str>()? {
11536            nothing = false;
11537            match key {
11538                "team_member_id" => {
11539                    if field_team_member_id.is_some() {
11540                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
11541                    }
11542                    field_team_member_id = Some(map.next_value()?);
11543                }
11544                "include_web_sessions" => {
11545                    if field_include_web_sessions.is_some() {
11546                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
11547                    }
11548                    field_include_web_sessions = Some(map.next_value()?);
11549                }
11550                "include_desktop_clients" => {
11551                    if field_include_desktop_clients.is_some() {
11552                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
11553                    }
11554                    field_include_desktop_clients = Some(map.next_value()?);
11555                }
11556                "include_mobile_clients" => {
11557                    if field_include_mobile_clients.is_some() {
11558                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
11559                    }
11560                    field_include_mobile_clients = Some(map.next_value()?);
11561                }
11562                _ => {
11563                    // unknown field allowed and ignored
11564                    map.next_value::<::serde_json::Value>()?;
11565                }
11566            }
11567        }
11568        if optional && nothing {
11569            return Ok(None);
11570        }
11571        let result = ListMemberDevicesArg {
11572            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
11573            include_web_sessions: field_include_web_sessions.unwrap_or(true),
11574            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
11575            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
11576        };
11577        Ok(Some(result))
11578    }
11579
11580    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11581        &self,
11582        s: &mut S::SerializeStruct,
11583    ) -> Result<(), S::Error> {
11584        use serde::ser::SerializeStruct;
11585        s.serialize_field("team_member_id", &self.team_member_id)?;
11586        if !self.include_web_sessions {
11587            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
11588        }
11589        if !self.include_desktop_clients {
11590            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
11591        }
11592        if !self.include_mobile_clients {
11593            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
11594        }
11595        Ok(())
11596    }
11597}
11598
11599impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesArg {
11600    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11601        // struct deserializer
11602        use serde::de::{MapAccess, Visitor};
11603        struct StructVisitor;
11604        impl<'de> Visitor<'de> for StructVisitor {
11605            type Value = ListMemberDevicesArg;
11606            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11607                f.write_str("a ListMemberDevicesArg struct")
11608            }
11609            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11610                ListMemberDevicesArg::internal_deserialize(map)
11611            }
11612        }
11613        deserializer.deserialize_struct("ListMemberDevicesArg", LIST_MEMBER_DEVICES_ARG_FIELDS, StructVisitor)
11614    }
11615}
11616
11617impl ::serde::ser::Serialize for ListMemberDevicesArg {
11618    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11619        // struct serializer
11620        use serde::ser::SerializeStruct;
11621        let mut s = serializer.serialize_struct("ListMemberDevicesArg", 4)?;
11622        self.internal_serialize::<S>(&mut s)?;
11623        s.end()
11624    }
11625}
11626
11627#[derive(Debug, Clone, PartialEq, Eq)]
11628#[non_exhaustive] // variants may be added in the future
11629pub enum ListMemberDevicesError {
11630    /// Member not found.
11631    MemberNotFound,
11632    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11633    /// typically indicates that this SDK version is out of date.
11634    Other,
11635}
11636
11637impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesError {
11638    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11639        // union deserializer
11640        use serde::de::{self, MapAccess, Visitor};
11641        struct EnumVisitor;
11642        impl<'de> Visitor<'de> for EnumVisitor {
11643            type Value = ListMemberDevicesError;
11644            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11645                f.write_str("a ListMemberDevicesError structure")
11646            }
11647            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11648                let tag: &str = match map.next_key()? {
11649                    Some(".tag") => map.next_value()?,
11650                    _ => return Err(de::Error::missing_field(".tag"))
11651                };
11652                let value = match tag {
11653                    "member_not_found" => ListMemberDevicesError::MemberNotFound,
11654                    _ => ListMemberDevicesError::Other,
11655                };
11656                crate::eat_json_fields(&mut map)?;
11657                Ok(value)
11658            }
11659        }
11660        const VARIANTS: &[&str] = &["member_not_found",
11661                                    "other"];
11662        deserializer.deserialize_struct("ListMemberDevicesError", VARIANTS, EnumVisitor)
11663    }
11664}
11665
11666impl ::serde::ser::Serialize for ListMemberDevicesError {
11667    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11668        // union serializer
11669        use serde::ser::SerializeStruct;
11670        match self {
11671            ListMemberDevicesError::MemberNotFound => {
11672                // unit
11673                let mut s = serializer.serialize_struct("ListMemberDevicesError", 1)?;
11674                s.serialize_field(".tag", "member_not_found")?;
11675                s.end()
11676            }
11677            ListMemberDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11678        }
11679    }
11680}
11681
11682impl ::std::error::Error for ListMemberDevicesError {
11683}
11684
11685impl ::std::fmt::Display for ListMemberDevicesError {
11686    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11687        match self {
11688            ListMemberDevicesError::MemberNotFound => f.write_str("Member not found."),
11689            _ => write!(f, "{:?}", *self),
11690        }
11691    }
11692}
11693
11694#[derive(Debug, Clone, PartialEq, Eq, Default)]
11695#[non_exhaustive] // structs may have more fields added in the future.
11696pub struct ListMemberDevicesResult {
11697    /// List of web sessions made by this team member.
11698    pub active_web_sessions: Option<Vec<ActiveWebSession>>,
11699    /// List of desktop clients used by this team member.
11700    pub desktop_client_sessions: Option<Vec<DesktopClientSession>>,
11701    /// List of mobile client used by this team member.
11702    pub mobile_client_sessions: Option<Vec<MobileClientSession>>,
11703}
11704
11705impl ListMemberDevicesResult {
11706    pub fn with_active_web_sessions(mut self, value: Vec<ActiveWebSession>) -> Self {
11707        self.active_web_sessions = Some(value);
11708        self
11709    }
11710
11711    pub fn with_desktop_client_sessions(mut self, value: Vec<DesktopClientSession>) -> Self {
11712        self.desktop_client_sessions = Some(value);
11713        self
11714    }
11715
11716    pub fn with_mobile_client_sessions(mut self, value: Vec<MobileClientSession>) -> Self {
11717        self.mobile_client_sessions = Some(value);
11718        self
11719    }
11720}
11721
11722const LIST_MEMBER_DEVICES_RESULT_FIELDS: &[&str] = &["active_web_sessions",
11723                                                     "desktop_client_sessions",
11724                                                     "mobile_client_sessions"];
11725impl ListMemberDevicesResult {
11726    // no _opt deserializer
11727    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11728        mut map: V,
11729    ) -> Result<ListMemberDevicesResult, V::Error> {
11730        let mut field_active_web_sessions = None;
11731        let mut field_desktop_client_sessions = None;
11732        let mut field_mobile_client_sessions = None;
11733        while let Some(key) = map.next_key::<&str>()? {
11734            match key {
11735                "active_web_sessions" => {
11736                    if field_active_web_sessions.is_some() {
11737                        return Err(::serde::de::Error::duplicate_field("active_web_sessions"));
11738                    }
11739                    field_active_web_sessions = Some(map.next_value()?);
11740                }
11741                "desktop_client_sessions" => {
11742                    if field_desktop_client_sessions.is_some() {
11743                        return Err(::serde::de::Error::duplicate_field("desktop_client_sessions"));
11744                    }
11745                    field_desktop_client_sessions = Some(map.next_value()?);
11746                }
11747                "mobile_client_sessions" => {
11748                    if field_mobile_client_sessions.is_some() {
11749                        return Err(::serde::de::Error::duplicate_field("mobile_client_sessions"));
11750                    }
11751                    field_mobile_client_sessions = Some(map.next_value()?);
11752                }
11753                _ => {
11754                    // unknown field allowed and ignored
11755                    map.next_value::<::serde_json::Value>()?;
11756                }
11757            }
11758        }
11759        let result = ListMemberDevicesResult {
11760            active_web_sessions: field_active_web_sessions.and_then(Option::flatten),
11761            desktop_client_sessions: field_desktop_client_sessions.and_then(Option::flatten),
11762            mobile_client_sessions: field_mobile_client_sessions.and_then(Option::flatten),
11763        };
11764        Ok(result)
11765    }
11766
11767    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11768        &self,
11769        s: &mut S::SerializeStruct,
11770    ) -> Result<(), S::Error> {
11771        use serde::ser::SerializeStruct;
11772        if let Some(val) = &self.active_web_sessions {
11773            s.serialize_field("active_web_sessions", val)?;
11774        }
11775        if let Some(val) = &self.desktop_client_sessions {
11776            s.serialize_field("desktop_client_sessions", val)?;
11777        }
11778        if let Some(val) = &self.mobile_client_sessions {
11779            s.serialize_field("mobile_client_sessions", val)?;
11780        }
11781        Ok(())
11782    }
11783}
11784
11785impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesResult {
11786    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11787        // struct deserializer
11788        use serde::de::{MapAccess, Visitor};
11789        struct StructVisitor;
11790        impl<'de> Visitor<'de> for StructVisitor {
11791            type Value = ListMemberDevicesResult;
11792            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11793                f.write_str("a ListMemberDevicesResult struct")
11794            }
11795            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11796                ListMemberDevicesResult::internal_deserialize(map)
11797            }
11798        }
11799        deserializer.deserialize_struct("ListMemberDevicesResult", LIST_MEMBER_DEVICES_RESULT_FIELDS, StructVisitor)
11800    }
11801}
11802
11803impl ::serde::ser::Serialize for ListMemberDevicesResult {
11804    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11805        // struct serializer
11806        use serde::ser::SerializeStruct;
11807        let mut s = serializer.serialize_struct("ListMemberDevicesResult", 3)?;
11808        self.internal_serialize::<S>(&mut s)?;
11809        s.end()
11810    }
11811}
11812
11813/// Arguments for
11814/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11815#[derive(Debug, Clone, PartialEq, Eq, Default)]
11816#[non_exhaustive] // structs may have more fields added in the future.
11817pub struct ListMembersAppsArg {
11818    /// At the first call to the
11819    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11820    /// the cursor shouldn't be passed. Then, if the result of the call includes a cursor, the
11821    /// following requests should include the received cursors in order to receive the next sub list
11822    /// of the team applications.
11823    pub cursor: Option<String>,
11824}
11825
11826impl ListMembersAppsArg {
11827    pub fn with_cursor(mut self, value: String) -> Self {
11828        self.cursor = Some(value);
11829        self
11830    }
11831}
11832
11833const LIST_MEMBERS_APPS_ARG_FIELDS: &[&str] = &["cursor"];
11834impl ListMembersAppsArg {
11835    // no _opt deserializer
11836    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11837        mut map: V,
11838    ) -> Result<ListMembersAppsArg, V::Error> {
11839        let mut field_cursor = None;
11840        while let Some(key) = map.next_key::<&str>()? {
11841            match key {
11842                "cursor" => {
11843                    if field_cursor.is_some() {
11844                        return Err(::serde::de::Error::duplicate_field("cursor"));
11845                    }
11846                    field_cursor = Some(map.next_value()?);
11847                }
11848                _ => {
11849                    // unknown field allowed and ignored
11850                    map.next_value::<::serde_json::Value>()?;
11851                }
11852            }
11853        }
11854        let result = ListMembersAppsArg {
11855            cursor: field_cursor.and_then(Option::flatten),
11856        };
11857        Ok(result)
11858    }
11859
11860    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11861        &self,
11862        s: &mut S::SerializeStruct,
11863    ) -> Result<(), S::Error> {
11864        use serde::ser::SerializeStruct;
11865        if let Some(val) = &self.cursor {
11866            s.serialize_field("cursor", val)?;
11867        }
11868        Ok(())
11869    }
11870}
11871
11872impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsArg {
11873    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11874        // struct deserializer
11875        use serde::de::{MapAccess, Visitor};
11876        struct StructVisitor;
11877        impl<'de> Visitor<'de> for StructVisitor {
11878            type Value = ListMembersAppsArg;
11879            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11880                f.write_str("a ListMembersAppsArg struct")
11881            }
11882            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11883                ListMembersAppsArg::internal_deserialize(map)
11884            }
11885        }
11886        deserializer.deserialize_struct("ListMembersAppsArg", LIST_MEMBERS_APPS_ARG_FIELDS, StructVisitor)
11887    }
11888}
11889
11890impl ::serde::ser::Serialize for ListMembersAppsArg {
11891    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11892        // struct serializer
11893        use serde::ser::SerializeStruct;
11894        let mut s = serializer.serialize_struct("ListMembersAppsArg", 1)?;
11895        self.internal_serialize::<S>(&mut s)?;
11896        s.end()
11897    }
11898}
11899
11900/// Error returned by
11901/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11902#[derive(Debug, Clone, PartialEq, Eq)]
11903#[non_exhaustive] // variants may be added in the future
11904pub enum ListMembersAppsError {
11905    /// Indicates that the cursor has been invalidated. Call
11906    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11907    /// again with an empty cursor to obtain a new cursor.
11908    Reset,
11909    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11910    /// typically indicates that this SDK version is out of date.
11911    Other,
11912}
11913
11914impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsError {
11915    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11916        // union deserializer
11917        use serde::de::{self, MapAccess, Visitor};
11918        struct EnumVisitor;
11919        impl<'de> Visitor<'de> for EnumVisitor {
11920            type Value = ListMembersAppsError;
11921            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11922                f.write_str("a ListMembersAppsError structure")
11923            }
11924            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11925                let tag: &str = match map.next_key()? {
11926                    Some(".tag") => map.next_value()?,
11927                    _ => return Err(de::Error::missing_field(".tag"))
11928                };
11929                let value = match tag {
11930                    "reset" => ListMembersAppsError::Reset,
11931                    _ => ListMembersAppsError::Other,
11932                };
11933                crate::eat_json_fields(&mut map)?;
11934                Ok(value)
11935            }
11936        }
11937        const VARIANTS: &[&str] = &["reset",
11938                                    "other"];
11939        deserializer.deserialize_struct("ListMembersAppsError", VARIANTS, EnumVisitor)
11940    }
11941}
11942
11943impl ::serde::ser::Serialize for ListMembersAppsError {
11944    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11945        // union serializer
11946        use serde::ser::SerializeStruct;
11947        match self {
11948            ListMembersAppsError::Reset => {
11949                // unit
11950                let mut s = serializer.serialize_struct("ListMembersAppsError", 1)?;
11951                s.serialize_field(".tag", "reset")?;
11952                s.end()
11953            }
11954            ListMembersAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11955        }
11956    }
11957}
11958
11959impl ::std::error::Error for ListMembersAppsError {
11960}
11961
11962impl ::std::fmt::Display for ListMembersAppsError {
11963    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11964        write!(f, "{:?}", *self)
11965    }
11966}
11967
11968/// Information returned by
11969/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11970#[derive(Debug, Clone, PartialEq, Eq)]
11971#[non_exhaustive] // structs may have more fields added in the future.
11972pub struct ListMembersAppsResult {
11973    /// The linked applications of each member of the team.
11974    pub apps: Vec<MemberLinkedApps>,
11975    /// If true, then there are more apps available. Pass the cursor to
11976    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11977    /// to retrieve the rest.
11978    pub has_more: bool,
11979    /// Pass the cursor into
11980    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11981    /// to receive the next sub list of team's applications.
11982    pub cursor: Option<String>,
11983}
11984
11985impl ListMembersAppsResult {
11986    pub fn new(apps: Vec<MemberLinkedApps>, has_more: bool) -> Self {
11987        ListMembersAppsResult {
11988            apps,
11989            has_more,
11990            cursor: None,
11991        }
11992    }
11993
11994    pub fn with_cursor(mut self, value: String) -> Self {
11995        self.cursor = Some(value);
11996        self
11997    }
11998}
11999
12000const LIST_MEMBERS_APPS_RESULT_FIELDS: &[&str] = &["apps",
12001                                                   "has_more",
12002                                                   "cursor"];
12003impl ListMembersAppsResult {
12004    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12005        map: V,
12006    ) -> Result<ListMembersAppsResult, V::Error> {
12007        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12008    }
12009
12010    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12011        mut map: V,
12012        optional: bool,
12013    ) -> Result<Option<ListMembersAppsResult>, V::Error> {
12014        let mut field_apps = None;
12015        let mut field_has_more = None;
12016        let mut field_cursor = None;
12017        let mut nothing = true;
12018        while let Some(key) = map.next_key::<&str>()? {
12019            nothing = false;
12020            match key {
12021                "apps" => {
12022                    if field_apps.is_some() {
12023                        return Err(::serde::de::Error::duplicate_field("apps"));
12024                    }
12025                    field_apps = Some(map.next_value()?);
12026                }
12027                "has_more" => {
12028                    if field_has_more.is_some() {
12029                        return Err(::serde::de::Error::duplicate_field("has_more"));
12030                    }
12031                    field_has_more = Some(map.next_value()?);
12032                }
12033                "cursor" => {
12034                    if field_cursor.is_some() {
12035                        return Err(::serde::de::Error::duplicate_field("cursor"));
12036                    }
12037                    field_cursor = Some(map.next_value()?);
12038                }
12039                _ => {
12040                    // unknown field allowed and ignored
12041                    map.next_value::<::serde_json::Value>()?;
12042                }
12043            }
12044        }
12045        if optional && nothing {
12046            return Ok(None);
12047        }
12048        let result = ListMembersAppsResult {
12049            apps: field_apps.ok_or_else(|| ::serde::de::Error::missing_field("apps"))?,
12050            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12051            cursor: field_cursor.and_then(Option::flatten),
12052        };
12053        Ok(Some(result))
12054    }
12055
12056    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12057        &self,
12058        s: &mut S::SerializeStruct,
12059    ) -> Result<(), S::Error> {
12060        use serde::ser::SerializeStruct;
12061        s.serialize_field("apps", &self.apps)?;
12062        s.serialize_field("has_more", &self.has_more)?;
12063        if let Some(val) = &self.cursor {
12064            s.serialize_field("cursor", val)?;
12065        }
12066        Ok(())
12067    }
12068}
12069
12070impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsResult {
12071    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12072        // struct deserializer
12073        use serde::de::{MapAccess, Visitor};
12074        struct StructVisitor;
12075        impl<'de> Visitor<'de> for StructVisitor {
12076            type Value = ListMembersAppsResult;
12077            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12078                f.write_str("a ListMembersAppsResult struct")
12079            }
12080            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12081                ListMembersAppsResult::internal_deserialize(map)
12082            }
12083        }
12084        deserializer.deserialize_struct("ListMembersAppsResult", LIST_MEMBERS_APPS_RESULT_FIELDS, StructVisitor)
12085    }
12086}
12087
12088impl ::serde::ser::Serialize for ListMembersAppsResult {
12089    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12090        // struct serializer
12091        use serde::ser::SerializeStruct;
12092        let mut s = serializer.serialize_struct("ListMembersAppsResult", 3)?;
12093        self.internal_serialize::<S>(&mut s)?;
12094        s.end()
12095    }
12096}
12097
12098#[derive(Debug, Clone, PartialEq, Eq)]
12099#[non_exhaustive] // structs may have more fields added in the future.
12100pub struct ListMembersDevicesArg {
12101    /// At the first call to the
12102    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) the cursor
12103    /// shouldn't be passed. Then, if the result of the call includes a cursor, the following
12104    /// requests should include the received cursors in order to receive the next sub list of team
12105    /// devices.
12106    pub cursor: Option<String>,
12107    /// Whether to list web sessions of the team members.
12108    pub include_web_sessions: bool,
12109    /// Whether to list desktop clients of the team members.
12110    pub include_desktop_clients: bool,
12111    /// Whether to list mobile clients of the team members.
12112    pub include_mobile_clients: bool,
12113}
12114
12115impl Default for ListMembersDevicesArg {
12116    fn default() -> Self {
12117        ListMembersDevicesArg {
12118            cursor: None,
12119            include_web_sessions: true,
12120            include_desktop_clients: true,
12121            include_mobile_clients: true,
12122        }
12123    }
12124}
12125
12126impl ListMembersDevicesArg {
12127    pub fn with_cursor(mut self, value: String) -> Self {
12128        self.cursor = Some(value);
12129        self
12130    }
12131
12132    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
12133        self.include_web_sessions = value;
12134        self
12135    }
12136
12137    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
12138        self.include_desktop_clients = value;
12139        self
12140    }
12141
12142    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
12143        self.include_mobile_clients = value;
12144        self
12145    }
12146}
12147
12148const LIST_MEMBERS_DEVICES_ARG_FIELDS: &[&str] = &["cursor",
12149                                                   "include_web_sessions",
12150                                                   "include_desktop_clients",
12151                                                   "include_mobile_clients"];
12152impl ListMembersDevicesArg {
12153    // no _opt deserializer
12154    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12155        mut map: V,
12156    ) -> Result<ListMembersDevicesArg, V::Error> {
12157        let mut field_cursor = None;
12158        let mut field_include_web_sessions = None;
12159        let mut field_include_desktop_clients = None;
12160        let mut field_include_mobile_clients = None;
12161        while let Some(key) = map.next_key::<&str>()? {
12162            match key {
12163                "cursor" => {
12164                    if field_cursor.is_some() {
12165                        return Err(::serde::de::Error::duplicate_field("cursor"));
12166                    }
12167                    field_cursor = Some(map.next_value()?);
12168                }
12169                "include_web_sessions" => {
12170                    if field_include_web_sessions.is_some() {
12171                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
12172                    }
12173                    field_include_web_sessions = Some(map.next_value()?);
12174                }
12175                "include_desktop_clients" => {
12176                    if field_include_desktop_clients.is_some() {
12177                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
12178                    }
12179                    field_include_desktop_clients = Some(map.next_value()?);
12180                }
12181                "include_mobile_clients" => {
12182                    if field_include_mobile_clients.is_some() {
12183                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
12184                    }
12185                    field_include_mobile_clients = Some(map.next_value()?);
12186                }
12187                _ => {
12188                    // unknown field allowed and ignored
12189                    map.next_value::<::serde_json::Value>()?;
12190                }
12191            }
12192        }
12193        let result = ListMembersDevicesArg {
12194            cursor: field_cursor.and_then(Option::flatten),
12195            include_web_sessions: field_include_web_sessions.unwrap_or(true),
12196            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
12197            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
12198        };
12199        Ok(result)
12200    }
12201
12202    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12203        &self,
12204        s: &mut S::SerializeStruct,
12205    ) -> Result<(), S::Error> {
12206        use serde::ser::SerializeStruct;
12207        if let Some(val) = &self.cursor {
12208            s.serialize_field("cursor", val)?;
12209        }
12210        if !self.include_web_sessions {
12211            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
12212        }
12213        if !self.include_desktop_clients {
12214            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
12215        }
12216        if !self.include_mobile_clients {
12217            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
12218        }
12219        Ok(())
12220    }
12221}
12222
12223impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesArg {
12224    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12225        // struct deserializer
12226        use serde::de::{MapAccess, Visitor};
12227        struct StructVisitor;
12228        impl<'de> Visitor<'de> for StructVisitor {
12229            type Value = ListMembersDevicesArg;
12230            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12231                f.write_str("a ListMembersDevicesArg struct")
12232            }
12233            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12234                ListMembersDevicesArg::internal_deserialize(map)
12235            }
12236        }
12237        deserializer.deserialize_struct("ListMembersDevicesArg", LIST_MEMBERS_DEVICES_ARG_FIELDS, StructVisitor)
12238    }
12239}
12240
12241impl ::serde::ser::Serialize for ListMembersDevicesArg {
12242    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12243        // struct serializer
12244        use serde::ser::SerializeStruct;
12245        let mut s = serializer.serialize_struct("ListMembersDevicesArg", 4)?;
12246        self.internal_serialize::<S>(&mut s)?;
12247        s.end()
12248    }
12249}
12250
12251#[derive(Debug, Clone, PartialEq, Eq)]
12252#[non_exhaustive] // variants may be added in the future
12253pub enum ListMembersDevicesError {
12254    /// Indicates that the cursor has been invalidated. Call
12255    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) again with an
12256    /// empty cursor to obtain a new cursor.
12257    Reset,
12258    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12259    /// typically indicates that this SDK version is out of date.
12260    Other,
12261}
12262
12263impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesError {
12264    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12265        // union deserializer
12266        use serde::de::{self, MapAccess, Visitor};
12267        struct EnumVisitor;
12268        impl<'de> Visitor<'de> for EnumVisitor {
12269            type Value = ListMembersDevicesError;
12270            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12271                f.write_str("a ListMembersDevicesError structure")
12272            }
12273            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12274                let tag: &str = match map.next_key()? {
12275                    Some(".tag") => map.next_value()?,
12276                    _ => return Err(de::Error::missing_field(".tag"))
12277                };
12278                let value = match tag {
12279                    "reset" => ListMembersDevicesError::Reset,
12280                    _ => ListMembersDevicesError::Other,
12281                };
12282                crate::eat_json_fields(&mut map)?;
12283                Ok(value)
12284            }
12285        }
12286        const VARIANTS: &[&str] = &["reset",
12287                                    "other"];
12288        deserializer.deserialize_struct("ListMembersDevicesError", VARIANTS, EnumVisitor)
12289    }
12290}
12291
12292impl ::serde::ser::Serialize for ListMembersDevicesError {
12293    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12294        // union serializer
12295        use serde::ser::SerializeStruct;
12296        match self {
12297            ListMembersDevicesError::Reset => {
12298                // unit
12299                let mut s = serializer.serialize_struct("ListMembersDevicesError", 1)?;
12300                s.serialize_field(".tag", "reset")?;
12301                s.end()
12302            }
12303            ListMembersDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12304        }
12305    }
12306}
12307
12308impl ::std::error::Error for ListMembersDevicesError {
12309}
12310
12311impl ::std::fmt::Display for ListMembersDevicesError {
12312    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12313        write!(f, "{:?}", *self)
12314    }
12315}
12316
12317#[derive(Debug, Clone, PartialEq, Eq)]
12318#[non_exhaustive] // structs may have more fields added in the future.
12319pub struct ListMembersDevicesResult {
12320    /// The devices of each member of the team.
12321    pub devices: Vec<MemberDevices>,
12322    /// If true, then there are more devices available. Pass the cursor to
12323    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) to retrieve
12324    /// the rest.
12325    pub has_more: bool,
12326    /// Pass the cursor into
12327    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) to receive the
12328    /// next sub list of team's devices.
12329    pub cursor: Option<String>,
12330}
12331
12332impl ListMembersDevicesResult {
12333    pub fn new(devices: Vec<MemberDevices>, has_more: bool) -> Self {
12334        ListMembersDevicesResult {
12335            devices,
12336            has_more,
12337            cursor: None,
12338        }
12339    }
12340
12341    pub fn with_cursor(mut self, value: String) -> Self {
12342        self.cursor = Some(value);
12343        self
12344    }
12345}
12346
12347const LIST_MEMBERS_DEVICES_RESULT_FIELDS: &[&str] = &["devices",
12348                                                      "has_more",
12349                                                      "cursor"];
12350impl ListMembersDevicesResult {
12351    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12352        map: V,
12353    ) -> Result<ListMembersDevicesResult, V::Error> {
12354        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12355    }
12356
12357    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12358        mut map: V,
12359        optional: bool,
12360    ) -> Result<Option<ListMembersDevicesResult>, V::Error> {
12361        let mut field_devices = None;
12362        let mut field_has_more = None;
12363        let mut field_cursor = None;
12364        let mut nothing = true;
12365        while let Some(key) = map.next_key::<&str>()? {
12366            nothing = false;
12367            match key {
12368                "devices" => {
12369                    if field_devices.is_some() {
12370                        return Err(::serde::de::Error::duplicate_field("devices"));
12371                    }
12372                    field_devices = Some(map.next_value()?);
12373                }
12374                "has_more" => {
12375                    if field_has_more.is_some() {
12376                        return Err(::serde::de::Error::duplicate_field("has_more"));
12377                    }
12378                    field_has_more = Some(map.next_value()?);
12379                }
12380                "cursor" => {
12381                    if field_cursor.is_some() {
12382                        return Err(::serde::de::Error::duplicate_field("cursor"));
12383                    }
12384                    field_cursor = Some(map.next_value()?);
12385                }
12386                _ => {
12387                    // unknown field allowed and ignored
12388                    map.next_value::<::serde_json::Value>()?;
12389                }
12390            }
12391        }
12392        if optional && nothing {
12393            return Ok(None);
12394        }
12395        let result = ListMembersDevicesResult {
12396            devices: field_devices.ok_or_else(|| ::serde::de::Error::missing_field("devices"))?,
12397            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12398            cursor: field_cursor.and_then(Option::flatten),
12399        };
12400        Ok(Some(result))
12401    }
12402
12403    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12404        &self,
12405        s: &mut S::SerializeStruct,
12406    ) -> Result<(), S::Error> {
12407        use serde::ser::SerializeStruct;
12408        s.serialize_field("devices", &self.devices)?;
12409        s.serialize_field("has_more", &self.has_more)?;
12410        if let Some(val) = &self.cursor {
12411            s.serialize_field("cursor", val)?;
12412        }
12413        Ok(())
12414    }
12415}
12416
12417impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesResult {
12418    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12419        // struct deserializer
12420        use serde::de::{MapAccess, Visitor};
12421        struct StructVisitor;
12422        impl<'de> Visitor<'de> for StructVisitor {
12423            type Value = ListMembersDevicesResult;
12424            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12425                f.write_str("a ListMembersDevicesResult struct")
12426            }
12427            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12428                ListMembersDevicesResult::internal_deserialize(map)
12429            }
12430        }
12431        deserializer.deserialize_struct("ListMembersDevicesResult", LIST_MEMBERS_DEVICES_RESULT_FIELDS, StructVisitor)
12432    }
12433}
12434
12435impl ::serde::ser::Serialize for ListMembersDevicesResult {
12436    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12437        // struct serializer
12438        use serde::ser::SerializeStruct;
12439        let mut s = serializer.serialize_struct("ListMembersDevicesResult", 3)?;
12440        self.internal_serialize::<S>(&mut s)?;
12441        s.end()
12442    }
12443}
12444
12445/// Arguments for
12446/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12447#[derive(Debug, Clone, PartialEq, Eq, Default)]
12448#[non_exhaustive] // structs may have more fields added in the future.
12449pub struct ListTeamAppsArg {
12450    /// At the first call to the
12451    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) the
12452    /// cursor shouldn't be passed. Then, if the result of the call includes a cursor, the following
12453    /// requests should include the received cursors in order to receive the next sub list of the
12454    /// team applications.
12455    pub cursor: Option<String>,
12456}
12457
12458impl ListTeamAppsArg {
12459    pub fn with_cursor(mut self, value: String) -> Self {
12460        self.cursor = Some(value);
12461        self
12462    }
12463}
12464
12465const LIST_TEAM_APPS_ARG_FIELDS: &[&str] = &["cursor"];
12466impl ListTeamAppsArg {
12467    // no _opt deserializer
12468    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12469        mut map: V,
12470    ) -> Result<ListTeamAppsArg, V::Error> {
12471        let mut field_cursor = None;
12472        while let Some(key) = map.next_key::<&str>()? {
12473            match key {
12474                "cursor" => {
12475                    if field_cursor.is_some() {
12476                        return Err(::serde::de::Error::duplicate_field("cursor"));
12477                    }
12478                    field_cursor = Some(map.next_value()?);
12479                }
12480                _ => {
12481                    // unknown field allowed and ignored
12482                    map.next_value::<::serde_json::Value>()?;
12483                }
12484            }
12485        }
12486        let result = ListTeamAppsArg {
12487            cursor: field_cursor.and_then(Option::flatten),
12488        };
12489        Ok(result)
12490    }
12491
12492    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12493        &self,
12494        s: &mut S::SerializeStruct,
12495    ) -> Result<(), S::Error> {
12496        use serde::ser::SerializeStruct;
12497        if let Some(val) = &self.cursor {
12498            s.serialize_field("cursor", val)?;
12499        }
12500        Ok(())
12501    }
12502}
12503
12504impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsArg {
12505    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12506        // struct deserializer
12507        use serde::de::{MapAccess, Visitor};
12508        struct StructVisitor;
12509        impl<'de> Visitor<'de> for StructVisitor {
12510            type Value = ListTeamAppsArg;
12511            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12512                f.write_str("a ListTeamAppsArg struct")
12513            }
12514            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12515                ListTeamAppsArg::internal_deserialize(map)
12516            }
12517        }
12518        deserializer.deserialize_struct("ListTeamAppsArg", LIST_TEAM_APPS_ARG_FIELDS, StructVisitor)
12519    }
12520}
12521
12522impl ::serde::ser::Serialize for ListTeamAppsArg {
12523    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12524        // struct serializer
12525        use serde::ser::SerializeStruct;
12526        let mut s = serializer.serialize_struct("ListTeamAppsArg", 1)?;
12527        self.internal_serialize::<S>(&mut s)?;
12528        s.end()
12529    }
12530}
12531
12532/// Error returned by
12533/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12534#[derive(Debug, Clone, PartialEq, Eq)]
12535#[non_exhaustive] // variants may be added in the future
12536pub enum ListTeamAppsError {
12537    /// Indicates that the cursor has been invalidated. Call
12538    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps)
12539    /// again with an empty cursor to obtain a new cursor.
12540    Reset,
12541    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12542    /// typically indicates that this SDK version is out of date.
12543    Other,
12544}
12545
12546impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsError {
12547    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12548        // union deserializer
12549        use serde::de::{self, MapAccess, Visitor};
12550        struct EnumVisitor;
12551        impl<'de> Visitor<'de> for EnumVisitor {
12552            type Value = ListTeamAppsError;
12553            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12554                f.write_str("a ListTeamAppsError structure")
12555            }
12556            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12557                let tag: &str = match map.next_key()? {
12558                    Some(".tag") => map.next_value()?,
12559                    _ => return Err(de::Error::missing_field(".tag"))
12560                };
12561                let value = match tag {
12562                    "reset" => ListTeamAppsError::Reset,
12563                    _ => ListTeamAppsError::Other,
12564                };
12565                crate::eat_json_fields(&mut map)?;
12566                Ok(value)
12567            }
12568        }
12569        const VARIANTS: &[&str] = &["reset",
12570                                    "other"];
12571        deserializer.deserialize_struct("ListTeamAppsError", VARIANTS, EnumVisitor)
12572    }
12573}
12574
12575impl ::serde::ser::Serialize for ListTeamAppsError {
12576    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12577        // union serializer
12578        use serde::ser::SerializeStruct;
12579        match self {
12580            ListTeamAppsError::Reset => {
12581                // unit
12582                let mut s = serializer.serialize_struct("ListTeamAppsError", 1)?;
12583                s.serialize_field(".tag", "reset")?;
12584                s.end()
12585            }
12586            ListTeamAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12587        }
12588    }
12589}
12590
12591impl ::std::error::Error for ListTeamAppsError {
12592}
12593
12594impl ::std::fmt::Display for ListTeamAppsError {
12595    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12596        write!(f, "{:?}", *self)
12597    }
12598}
12599
12600/// Information returned by
12601/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12602#[derive(Debug, Clone, PartialEq, Eq)]
12603#[non_exhaustive] // structs may have more fields added in the future.
12604pub struct ListTeamAppsResult {
12605    /// The linked applications of each member of the team.
12606    pub apps: Vec<MemberLinkedApps>,
12607    /// If true, then there are more apps available. Pass the cursor to
12608    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) to
12609    /// retrieve the rest.
12610    pub has_more: bool,
12611    /// Pass the cursor into
12612    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) to
12613    /// receive the next sub list of team's applications.
12614    pub cursor: Option<String>,
12615}
12616
12617impl ListTeamAppsResult {
12618    pub fn new(apps: Vec<MemberLinkedApps>, has_more: bool) -> Self {
12619        ListTeamAppsResult {
12620            apps,
12621            has_more,
12622            cursor: None,
12623        }
12624    }
12625
12626    pub fn with_cursor(mut self, value: String) -> Self {
12627        self.cursor = Some(value);
12628        self
12629    }
12630}
12631
12632const LIST_TEAM_APPS_RESULT_FIELDS: &[&str] = &["apps",
12633                                                "has_more",
12634                                                "cursor"];
12635impl ListTeamAppsResult {
12636    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12637        map: V,
12638    ) -> Result<ListTeamAppsResult, V::Error> {
12639        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12640    }
12641
12642    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12643        mut map: V,
12644        optional: bool,
12645    ) -> Result<Option<ListTeamAppsResult>, V::Error> {
12646        let mut field_apps = None;
12647        let mut field_has_more = None;
12648        let mut field_cursor = None;
12649        let mut nothing = true;
12650        while let Some(key) = map.next_key::<&str>()? {
12651            nothing = false;
12652            match key {
12653                "apps" => {
12654                    if field_apps.is_some() {
12655                        return Err(::serde::de::Error::duplicate_field("apps"));
12656                    }
12657                    field_apps = Some(map.next_value()?);
12658                }
12659                "has_more" => {
12660                    if field_has_more.is_some() {
12661                        return Err(::serde::de::Error::duplicate_field("has_more"));
12662                    }
12663                    field_has_more = Some(map.next_value()?);
12664                }
12665                "cursor" => {
12666                    if field_cursor.is_some() {
12667                        return Err(::serde::de::Error::duplicate_field("cursor"));
12668                    }
12669                    field_cursor = Some(map.next_value()?);
12670                }
12671                _ => {
12672                    // unknown field allowed and ignored
12673                    map.next_value::<::serde_json::Value>()?;
12674                }
12675            }
12676        }
12677        if optional && nothing {
12678            return Ok(None);
12679        }
12680        let result = ListTeamAppsResult {
12681            apps: field_apps.ok_or_else(|| ::serde::de::Error::missing_field("apps"))?,
12682            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12683            cursor: field_cursor.and_then(Option::flatten),
12684        };
12685        Ok(Some(result))
12686    }
12687
12688    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12689        &self,
12690        s: &mut S::SerializeStruct,
12691    ) -> Result<(), S::Error> {
12692        use serde::ser::SerializeStruct;
12693        s.serialize_field("apps", &self.apps)?;
12694        s.serialize_field("has_more", &self.has_more)?;
12695        if let Some(val) = &self.cursor {
12696            s.serialize_field("cursor", val)?;
12697        }
12698        Ok(())
12699    }
12700}
12701
12702impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsResult {
12703    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12704        // struct deserializer
12705        use serde::de::{MapAccess, Visitor};
12706        struct StructVisitor;
12707        impl<'de> Visitor<'de> for StructVisitor {
12708            type Value = ListTeamAppsResult;
12709            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12710                f.write_str("a ListTeamAppsResult struct")
12711            }
12712            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12713                ListTeamAppsResult::internal_deserialize(map)
12714            }
12715        }
12716        deserializer.deserialize_struct("ListTeamAppsResult", LIST_TEAM_APPS_RESULT_FIELDS, StructVisitor)
12717    }
12718}
12719
12720impl ::serde::ser::Serialize for ListTeamAppsResult {
12721    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12722        // struct serializer
12723        use serde::ser::SerializeStruct;
12724        let mut s = serializer.serialize_struct("ListTeamAppsResult", 3)?;
12725        self.internal_serialize::<S>(&mut s)?;
12726        s.end()
12727    }
12728}
12729
12730#[derive(Debug, Clone, PartialEq, Eq)]
12731#[non_exhaustive] // structs may have more fields added in the future.
12732pub struct ListTeamDevicesArg {
12733    /// At the first call to the
12734    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) the cursor shouldn't
12735    /// be passed. Then, if the result of the call includes a cursor, the following requests should
12736    /// include the received cursors in order to receive the next sub list of team devices.
12737    pub cursor: Option<String>,
12738    /// Whether to list web sessions of the team members.
12739    pub include_web_sessions: bool,
12740    /// Whether to list desktop clients of the team members.
12741    pub include_desktop_clients: bool,
12742    /// Whether to list mobile clients of the team members.
12743    pub include_mobile_clients: bool,
12744}
12745
12746impl Default for ListTeamDevicesArg {
12747    fn default() -> Self {
12748        ListTeamDevicesArg {
12749            cursor: None,
12750            include_web_sessions: true,
12751            include_desktop_clients: true,
12752            include_mobile_clients: true,
12753        }
12754    }
12755}
12756
12757impl ListTeamDevicesArg {
12758    pub fn with_cursor(mut self, value: String) -> Self {
12759        self.cursor = Some(value);
12760        self
12761    }
12762
12763    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
12764        self.include_web_sessions = value;
12765        self
12766    }
12767
12768    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
12769        self.include_desktop_clients = value;
12770        self
12771    }
12772
12773    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
12774        self.include_mobile_clients = value;
12775        self
12776    }
12777}
12778
12779const LIST_TEAM_DEVICES_ARG_FIELDS: &[&str] = &["cursor",
12780                                                "include_web_sessions",
12781                                                "include_desktop_clients",
12782                                                "include_mobile_clients"];
12783impl ListTeamDevicesArg {
12784    // no _opt deserializer
12785    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12786        mut map: V,
12787    ) -> Result<ListTeamDevicesArg, V::Error> {
12788        let mut field_cursor = None;
12789        let mut field_include_web_sessions = None;
12790        let mut field_include_desktop_clients = None;
12791        let mut field_include_mobile_clients = None;
12792        while let Some(key) = map.next_key::<&str>()? {
12793            match key {
12794                "cursor" => {
12795                    if field_cursor.is_some() {
12796                        return Err(::serde::de::Error::duplicate_field("cursor"));
12797                    }
12798                    field_cursor = Some(map.next_value()?);
12799                }
12800                "include_web_sessions" => {
12801                    if field_include_web_sessions.is_some() {
12802                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
12803                    }
12804                    field_include_web_sessions = Some(map.next_value()?);
12805                }
12806                "include_desktop_clients" => {
12807                    if field_include_desktop_clients.is_some() {
12808                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
12809                    }
12810                    field_include_desktop_clients = Some(map.next_value()?);
12811                }
12812                "include_mobile_clients" => {
12813                    if field_include_mobile_clients.is_some() {
12814                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
12815                    }
12816                    field_include_mobile_clients = Some(map.next_value()?);
12817                }
12818                _ => {
12819                    // unknown field allowed and ignored
12820                    map.next_value::<::serde_json::Value>()?;
12821                }
12822            }
12823        }
12824        let result = ListTeamDevicesArg {
12825            cursor: field_cursor.and_then(Option::flatten),
12826            include_web_sessions: field_include_web_sessions.unwrap_or(true),
12827            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
12828            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
12829        };
12830        Ok(result)
12831    }
12832
12833    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12834        &self,
12835        s: &mut S::SerializeStruct,
12836    ) -> Result<(), S::Error> {
12837        use serde::ser::SerializeStruct;
12838        if let Some(val) = &self.cursor {
12839            s.serialize_field("cursor", val)?;
12840        }
12841        if !self.include_web_sessions {
12842            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
12843        }
12844        if !self.include_desktop_clients {
12845            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
12846        }
12847        if !self.include_mobile_clients {
12848            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
12849        }
12850        Ok(())
12851    }
12852}
12853
12854impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesArg {
12855    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12856        // struct deserializer
12857        use serde::de::{MapAccess, Visitor};
12858        struct StructVisitor;
12859        impl<'de> Visitor<'de> for StructVisitor {
12860            type Value = ListTeamDevicesArg;
12861            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12862                f.write_str("a ListTeamDevicesArg struct")
12863            }
12864            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12865                ListTeamDevicesArg::internal_deserialize(map)
12866            }
12867        }
12868        deserializer.deserialize_struct("ListTeamDevicesArg", LIST_TEAM_DEVICES_ARG_FIELDS, StructVisitor)
12869    }
12870}
12871
12872impl ::serde::ser::Serialize for ListTeamDevicesArg {
12873    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12874        // struct serializer
12875        use serde::ser::SerializeStruct;
12876        let mut s = serializer.serialize_struct("ListTeamDevicesArg", 4)?;
12877        self.internal_serialize::<S>(&mut s)?;
12878        s.end()
12879    }
12880}
12881
12882#[derive(Debug, Clone, PartialEq, Eq)]
12883#[non_exhaustive] // variants may be added in the future
12884pub enum ListTeamDevicesError {
12885    /// Indicates that the cursor has been invalidated. Call
12886    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) again with an empty
12887    /// cursor to obtain a new cursor.
12888    Reset,
12889    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12890    /// typically indicates that this SDK version is out of date.
12891    Other,
12892}
12893
12894impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesError {
12895    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12896        // union deserializer
12897        use serde::de::{self, MapAccess, Visitor};
12898        struct EnumVisitor;
12899        impl<'de> Visitor<'de> for EnumVisitor {
12900            type Value = ListTeamDevicesError;
12901            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12902                f.write_str("a ListTeamDevicesError structure")
12903            }
12904            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12905                let tag: &str = match map.next_key()? {
12906                    Some(".tag") => map.next_value()?,
12907                    _ => return Err(de::Error::missing_field(".tag"))
12908                };
12909                let value = match tag {
12910                    "reset" => ListTeamDevicesError::Reset,
12911                    _ => ListTeamDevicesError::Other,
12912                };
12913                crate::eat_json_fields(&mut map)?;
12914                Ok(value)
12915            }
12916        }
12917        const VARIANTS: &[&str] = &["reset",
12918                                    "other"];
12919        deserializer.deserialize_struct("ListTeamDevicesError", VARIANTS, EnumVisitor)
12920    }
12921}
12922
12923impl ::serde::ser::Serialize for ListTeamDevicesError {
12924    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12925        // union serializer
12926        use serde::ser::SerializeStruct;
12927        match self {
12928            ListTeamDevicesError::Reset => {
12929                // unit
12930                let mut s = serializer.serialize_struct("ListTeamDevicesError", 1)?;
12931                s.serialize_field(".tag", "reset")?;
12932                s.end()
12933            }
12934            ListTeamDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12935        }
12936    }
12937}
12938
12939impl ::std::error::Error for ListTeamDevicesError {
12940}
12941
12942impl ::std::fmt::Display for ListTeamDevicesError {
12943    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12944        write!(f, "{:?}", *self)
12945    }
12946}
12947
12948#[derive(Debug, Clone, PartialEq, Eq)]
12949#[non_exhaustive] // structs may have more fields added in the future.
12950pub struct ListTeamDevicesResult {
12951    /// The devices of each member of the team.
12952    pub devices: Vec<MemberDevices>,
12953    /// If true, then there are more devices available. Pass the cursor to
12954    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) to retrieve the
12955    /// rest.
12956    pub has_more: bool,
12957    /// Pass the cursor into [`devices_list_team_devices()`](crate::team::devices_list_team_devices)
12958    /// to receive the next sub list of team's devices.
12959    pub cursor: Option<String>,
12960}
12961
12962impl ListTeamDevicesResult {
12963    pub fn new(devices: Vec<MemberDevices>, has_more: bool) -> Self {
12964        ListTeamDevicesResult {
12965            devices,
12966            has_more,
12967            cursor: None,
12968        }
12969    }
12970
12971    pub fn with_cursor(mut self, value: String) -> Self {
12972        self.cursor = Some(value);
12973        self
12974    }
12975}
12976
12977const LIST_TEAM_DEVICES_RESULT_FIELDS: &[&str] = &["devices",
12978                                                   "has_more",
12979                                                   "cursor"];
12980impl ListTeamDevicesResult {
12981    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12982        map: V,
12983    ) -> Result<ListTeamDevicesResult, V::Error> {
12984        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12985    }
12986
12987    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12988        mut map: V,
12989        optional: bool,
12990    ) -> Result<Option<ListTeamDevicesResult>, V::Error> {
12991        let mut field_devices = None;
12992        let mut field_has_more = None;
12993        let mut field_cursor = None;
12994        let mut nothing = true;
12995        while let Some(key) = map.next_key::<&str>()? {
12996            nothing = false;
12997            match key {
12998                "devices" => {
12999                    if field_devices.is_some() {
13000                        return Err(::serde::de::Error::duplicate_field("devices"));
13001                    }
13002                    field_devices = Some(map.next_value()?);
13003                }
13004                "has_more" => {
13005                    if field_has_more.is_some() {
13006                        return Err(::serde::de::Error::duplicate_field("has_more"));
13007                    }
13008                    field_has_more = Some(map.next_value()?);
13009                }
13010                "cursor" => {
13011                    if field_cursor.is_some() {
13012                        return Err(::serde::de::Error::duplicate_field("cursor"));
13013                    }
13014                    field_cursor = Some(map.next_value()?);
13015                }
13016                _ => {
13017                    // unknown field allowed and ignored
13018                    map.next_value::<::serde_json::Value>()?;
13019                }
13020            }
13021        }
13022        if optional && nothing {
13023            return Ok(None);
13024        }
13025        let result = ListTeamDevicesResult {
13026            devices: field_devices.ok_or_else(|| ::serde::de::Error::missing_field("devices"))?,
13027            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
13028            cursor: field_cursor.and_then(Option::flatten),
13029        };
13030        Ok(Some(result))
13031    }
13032
13033    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13034        &self,
13035        s: &mut S::SerializeStruct,
13036    ) -> Result<(), S::Error> {
13037        use serde::ser::SerializeStruct;
13038        s.serialize_field("devices", &self.devices)?;
13039        s.serialize_field("has_more", &self.has_more)?;
13040        if let Some(val) = &self.cursor {
13041            s.serialize_field("cursor", val)?;
13042        }
13043        Ok(())
13044    }
13045}
13046
13047impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesResult {
13048    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13049        // struct deserializer
13050        use serde::de::{MapAccess, Visitor};
13051        struct StructVisitor;
13052        impl<'de> Visitor<'de> for StructVisitor {
13053            type Value = ListTeamDevicesResult;
13054            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13055                f.write_str("a ListTeamDevicesResult struct")
13056            }
13057            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13058                ListTeamDevicesResult::internal_deserialize(map)
13059            }
13060        }
13061        deserializer.deserialize_struct("ListTeamDevicesResult", LIST_TEAM_DEVICES_RESULT_FIELDS, StructVisitor)
13062    }
13063}
13064
13065impl ::serde::ser::Serialize for ListTeamDevicesResult {
13066    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13067        // struct serializer
13068        use serde::ser::SerializeStruct;
13069        let mut s = serializer.serialize_struct("ListTeamDevicesResult", 3)?;
13070        self.internal_serialize::<S>(&mut s)?;
13071        s.end()
13072    }
13073}
13074
13075/// Specify access type a member should have when joined to a group.
13076#[derive(Debug, Clone, PartialEq, Eq)]
13077#[non_exhaustive] // structs may have more fields added in the future.
13078pub struct MemberAccess {
13079    /// Identity of a user.
13080    pub user: UserSelectorArg,
13081    /// Access type.
13082    pub access_type: GroupAccessType,
13083}
13084
13085impl MemberAccess {
13086    pub fn new(user: UserSelectorArg, access_type: GroupAccessType) -> Self {
13087        MemberAccess {
13088            user,
13089            access_type,
13090        }
13091    }
13092}
13093
13094const MEMBER_ACCESS_FIELDS: &[&str] = &["user",
13095                                        "access_type"];
13096impl MemberAccess {
13097    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13098        map: V,
13099    ) -> Result<MemberAccess, V::Error> {
13100        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13101    }
13102
13103    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13104        mut map: V,
13105        optional: bool,
13106    ) -> Result<Option<MemberAccess>, V::Error> {
13107        let mut field_user = None;
13108        let mut field_access_type = None;
13109        let mut nothing = true;
13110        while let Some(key) = map.next_key::<&str>()? {
13111            nothing = false;
13112            match key {
13113                "user" => {
13114                    if field_user.is_some() {
13115                        return Err(::serde::de::Error::duplicate_field("user"));
13116                    }
13117                    field_user = Some(map.next_value()?);
13118                }
13119                "access_type" => {
13120                    if field_access_type.is_some() {
13121                        return Err(::serde::de::Error::duplicate_field("access_type"));
13122                    }
13123                    field_access_type = Some(map.next_value()?);
13124                }
13125                _ => {
13126                    // unknown field allowed and ignored
13127                    map.next_value::<::serde_json::Value>()?;
13128                }
13129            }
13130        }
13131        if optional && nothing {
13132            return Ok(None);
13133        }
13134        let result = MemberAccess {
13135            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
13136            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
13137        };
13138        Ok(Some(result))
13139    }
13140
13141    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13142        &self,
13143        s: &mut S::SerializeStruct,
13144    ) -> Result<(), S::Error> {
13145        use serde::ser::SerializeStruct;
13146        s.serialize_field("user", &self.user)?;
13147        s.serialize_field("access_type", &self.access_type)?;
13148        Ok(())
13149    }
13150}
13151
13152impl<'de> ::serde::de::Deserialize<'de> for MemberAccess {
13153    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13154        // struct deserializer
13155        use serde::de::{MapAccess, Visitor};
13156        struct StructVisitor;
13157        impl<'de> Visitor<'de> for StructVisitor {
13158            type Value = MemberAccess;
13159            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13160                f.write_str("a MemberAccess struct")
13161            }
13162            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13163                MemberAccess::internal_deserialize(map)
13164            }
13165        }
13166        deserializer.deserialize_struct("MemberAccess", MEMBER_ACCESS_FIELDS, StructVisitor)
13167    }
13168}
13169
13170impl ::serde::ser::Serialize for MemberAccess {
13171    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13172        // struct serializer
13173        use serde::ser::SerializeStruct;
13174        let mut s = serializer.serialize_struct("MemberAccess", 2)?;
13175        self.internal_serialize::<S>(&mut s)?;
13176        s.end()
13177    }
13178}
13179
13180#[derive(Debug, Clone, PartialEq, Eq)]
13181#[non_exhaustive] // structs may have more fields added in the future.
13182pub struct MemberAddArg {
13183    pub member_email: crate::types::common::EmailAddress,
13184    /// Member's first name.
13185    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
13186    /// Member's last name.
13187    pub member_surname: Option<crate::types::common::OptionalNamePart>,
13188    /// External ID for member.
13189    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
13190    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
13191    /// configuration.
13192    pub member_persistent_id: Option<String>,
13193    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
13194    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
13195    /// flows for onboarding that want to handle announcements themselves.
13196    pub send_welcome_email: bool,
13197    /// Whether a user is directory restricted.
13198    pub is_directory_restricted: Option<bool>,
13199    pub role: AdminTier,
13200}
13201
13202impl MemberAddArg {
13203    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
13204        MemberAddArg {
13205            member_email,
13206            member_given_name: None,
13207            member_surname: None,
13208            member_external_id: None,
13209            member_persistent_id: None,
13210            send_welcome_email: true,
13211            is_directory_restricted: None,
13212            role: AdminTier::MemberOnly,
13213        }
13214    }
13215
13216    pub fn with_member_given_name(
13217        mut self,
13218        value: crate::types::common::OptionalNamePart,
13219    ) -> Self {
13220        self.member_given_name = Some(value);
13221        self
13222    }
13223
13224    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
13225        self.member_surname = Some(value);
13226        self
13227    }
13228
13229    pub fn with_member_external_id(
13230        mut self,
13231        value: crate::types::team_common::MemberExternalId,
13232    ) -> Self {
13233        self.member_external_id = Some(value);
13234        self
13235    }
13236
13237    pub fn with_member_persistent_id(mut self, value: String) -> Self {
13238        self.member_persistent_id = Some(value);
13239        self
13240    }
13241
13242    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
13243        self.send_welcome_email = value;
13244        self
13245    }
13246
13247    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
13248        self.is_directory_restricted = Some(value);
13249        self
13250    }
13251
13252    pub fn with_role(mut self, value: AdminTier) -> Self {
13253        self.role = value;
13254        self
13255    }
13256}
13257
13258const MEMBER_ADD_ARG_FIELDS: &[&str] = &["member_email",
13259                                         "member_given_name",
13260                                         "member_surname",
13261                                         "member_external_id",
13262                                         "member_persistent_id",
13263                                         "send_welcome_email",
13264                                         "is_directory_restricted",
13265                                         "role"];
13266impl MemberAddArg {
13267    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13268        map: V,
13269    ) -> Result<MemberAddArg, V::Error> {
13270        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13271    }
13272
13273    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13274        mut map: V,
13275        optional: bool,
13276    ) -> Result<Option<MemberAddArg>, V::Error> {
13277        let mut field_member_email = None;
13278        let mut field_member_given_name = None;
13279        let mut field_member_surname = None;
13280        let mut field_member_external_id = None;
13281        let mut field_member_persistent_id = None;
13282        let mut field_send_welcome_email = None;
13283        let mut field_is_directory_restricted = None;
13284        let mut field_role = None;
13285        let mut nothing = true;
13286        while let Some(key) = map.next_key::<&str>()? {
13287            nothing = false;
13288            match key {
13289                "member_email" => {
13290                    if field_member_email.is_some() {
13291                        return Err(::serde::de::Error::duplicate_field("member_email"));
13292                    }
13293                    field_member_email = Some(map.next_value()?);
13294                }
13295                "member_given_name" => {
13296                    if field_member_given_name.is_some() {
13297                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
13298                    }
13299                    field_member_given_name = Some(map.next_value()?);
13300                }
13301                "member_surname" => {
13302                    if field_member_surname.is_some() {
13303                        return Err(::serde::de::Error::duplicate_field("member_surname"));
13304                    }
13305                    field_member_surname = Some(map.next_value()?);
13306                }
13307                "member_external_id" => {
13308                    if field_member_external_id.is_some() {
13309                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
13310                    }
13311                    field_member_external_id = Some(map.next_value()?);
13312                }
13313                "member_persistent_id" => {
13314                    if field_member_persistent_id.is_some() {
13315                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
13316                    }
13317                    field_member_persistent_id = Some(map.next_value()?);
13318                }
13319                "send_welcome_email" => {
13320                    if field_send_welcome_email.is_some() {
13321                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
13322                    }
13323                    field_send_welcome_email = Some(map.next_value()?);
13324                }
13325                "is_directory_restricted" => {
13326                    if field_is_directory_restricted.is_some() {
13327                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
13328                    }
13329                    field_is_directory_restricted = Some(map.next_value()?);
13330                }
13331                "role" => {
13332                    if field_role.is_some() {
13333                        return Err(::serde::de::Error::duplicate_field("role"));
13334                    }
13335                    field_role = Some(map.next_value()?);
13336                }
13337                _ => {
13338                    // unknown field allowed and ignored
13339                    map.next_value::<::serde_json::Value>()?;
13340                }
13341            }
13342        }
13343        if optional && nothing {
13344            return Ok(None);
13345        }
13346        let result = MemberAddArg {
13347            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
13348            member_given_name: field_member_given_name.and_then(Option::flatten),
13349            member_surname: field_member_surname.and_then(Option::flatten),
13350            member_external_id: field_member_external_id.and_then(Option::flatten),
13351            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
13352            send_welcome_email: field_send_welcome_email.unwrap_or(true),
13353            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
13354            role: field_role.unwrap_or(AdminTier::MemberOnly),
13355        };
13356        Ok(Some(result))
13357    }
13358
13359    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13360        &self,
13361        s: &mut S::SerializeStruct,
13362    ) -> Result<(), S::Error> {
13363        use serde::ser::SerializeStruct;
13364        s.serialize_field("member_email", &self.member_email)?;
13365        if let Some(val) = &self.member_given_name {
13366            s.serialize_field("member_given_name", val)?;
13367        }
13368        if let Some(val) = &self.member_surname {
13369            s.serialize_field("member_surname", val)?;
13370        }
13371        if let Some(val) = &self.member_external_id {
13372            s.serialize_field("member_external_id", val)?;
13373        }
13374        if let Some(val) = &self.member_persistent_id {
13375            s.serialize_field("member_persistent_id", val)?;
13376        }
13377        if !self.send_welcome_email {
13378            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
13379        }
13380        if let Some(val) = &self.is_directory_restricted {
13381            s.serialize_field("is_directory_restricted", val)?;
13382        }
13383        if self.role != AdminTier::MemberOnly {
13384            s.serialize_field("role", &self.role)?;
13385        }
13386        Ok(())
13387    }
13388}
13389
13390impl<'de> ::serde::de::Deserialize<'de> for MemberAddArg {
13391    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13392        // struct deserializer
13393        use serde::de::{MapAccess, Visitor};
13394        struct StructVisitor;
13395        impl<'de> Visitor<'de> for StructVisitor {
13396            type Value = MemberAddArg;
13397            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13398                f.write_str("a MemberAddArg struct")
13399            }
13400            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13401                MemberAddArg::internal_deserialize(map)
13402            }
13403        }
13404        deserializer.deserialize_struct("MemberAddArg", MEMBER_ADD_ARG_FIELDS, StructVisitor)
13405    }
13406}
13407
13408impl ::serde::ser::Serialize for MemberAddArg {
13409    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13410        // struct serializer
13411        use serde::ser::SerializeStruct;
13412        let mut s = serializer.serialize_struct("MemberAddArg", 8)?;
13413        self.internal_serialize::<S>(&mut s)?;
13414        s.end()
13415    }
13416}
13417
13418// struct extends MemberAddArgBase
13419impl From<MemberAddArg> for MemberAddArgBase {
13420    fn from(subtype: MemberAddArg) -> Self {
13421        Self {
13422            member_email: subtype.member_email,
13423            member_given_name: subtype.member_given_name,
13424            member_surname: subtype.member_surname,
13425            member_external_id: subtype.member_external_id,
13426            member_persistent_id: subtype.member_persistent_id,
13427            send_welcome_email: subtype.send_welcome_email,
13428            is_directory_restricted: subtype.is_directory_restricted,
13429        }
13430    }
13431}
13432#[derive(Debug, Clone, PartialEq, Eq)]
13433#[non_exhaustive] // structs may have more fields added in the future.
13434pub struct MemberAddArgBase {
13435    pub member_email: crate::types::common::EmailAddress,
13436    /// Member's first name.
13437    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
13438    /// Member's last name.
13439    pub member_surname: Option<crate::types::common::OptionalNamePart>,
13440    /// External ID for member.
13441    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
13442    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
13443    /// configuration.
13444    pub member_persistent_id: Option<String>,
13445    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
13446    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
13447    /// flows for onboarding that want to handle announcements themselves.
13448    pub send_welcome_email: bool,
13449    /// Whether a user is directory restricted.
13450    pub is_directory_restricted: Option<bool>,
13451}
13452
13453impl MemberAddArgBase {
13454    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
13455        MemberAddArgBase {
13456            member_email,
13457            member_given_name: None,
13458            member_surname: None,
13459            member_external_id: None,
13460            member_persistent_id: None,
13461            send_welcome_email: true,
13462            is_directory_restricted: None,
13463        }
13464    }
13465
13466    pub fn with_member_given_name(
13467        mut self,
13468        value: crate::types::common::OptionalNamePart,
13469    ) -> Self {
13470        self.member_given_name = Some(value);
13471        self
13472    }
13473
13474    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
13475        self.member_surname = Some(value);
13476        self
13477    }
13478
13479    pub fn with_member_external_id(
13480        mut self,
13481        value: crate::types::team_common::MemberExternalId,
13482    ) -> Self {
13483        self.member_external_id = Some(value);
13484        self
13485    }
13486
13487    pub fn with_member_persistent_id(mut self, value: String) -> Self {
13488        self.member_persistent_id = Some(value);
13489        self
13490    }
13491
13492    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
13493        self.send_welcome_email = value;
13494        self
13495    }
13496
13497    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
13498        self.is_directory_restricted = Some(value);
13499        self
13500    }
13501}
13502
13503const MEMBER_ADD_ARG_BASE_FIELDS: &[&str] = &["member_email",
13504                                              "member_given_name",
13505                                              "member_surname",
13506                                              "member_external_id",
13507                                              "member_persistent_id",
13508                                              "send_welcome_email",
13509                                              "is_directory_restricted"];
13510impl MemberAddArgBase {
13511    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13512        map: V,
13513    ) -> Result<MemberAddArgBase, V::Error> {
13514        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13515    }
13516
13517    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13518        mut map: V,
13519        optional: bool,
13520    ) -> Result<Option<MemberAddArgBase>, V::Error> {
13521        let mut field_member_email = None;
13522        let mut field_member_given_name = None;
13523        let mut field_member_surname = None;
13524        let mut field_member_external_id = None;
13525        let mut field_member_persistent_id = None;
13526        let mut field_send_welcome_email = None;
13527        let mut field_is_directory_restricted = None;
13528        let mut nothing = true;
13529        while let Some(key) = map.next_key::<&str>()? {
13530            nothing = false;
13531            match key {
13532                "member_email" => {
13533                    if field_member_email.is_some() {
13534                        return Err(::serde::de::Error::duplicate_field("member_email"));
13535                    }
13536                    field_member_email = Some(map.next_value()?);
13537                }
13538                "member_given_name" => {
13539                    if field_member_given_name.is_some() {
13540                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
13541                    }
13542                    field_member_given_name = Some(map.next_value()?);
13543                }
13544                "member_surname" => {
13545                    if field_member_surname.is_some() {
13546                        return Err(::serde::de::Error::duplicate_field("member_surname"));
13547                    }
13548                    field_member_surname = Some(map.next_value()?);
13549                }
13550                "member_external_id" => {
13551                    if field_member_external_id.is_some() {
13552                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
13553                    }
13554                    field_member_external_id = Some(map.next_value()?);
13555                }
13556                "member_persistent_id" => {
13557                    if field_member_persistent_id.is_some() {
13558                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
13559                    }
13560                    field_member_persistent_id = Some(map.next_value()?);
13561                }
13562                "send_welcome_email" => {
13563                    if field_send_welcome_email.is_some() {
13564                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
13565                    }
13566                    field_send_welcome_email = Some(map.next_value()?);
13567                }
13568                "is_directory_restricted" => {
13569                    if field_is_directory_restricted.is_some() {
13570                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
13571                    }
13572                    field_is_directory_restricted = Some(map.next_value()?);
13573                }
13574                _ => {
13575                    // unknown field allowed and ignored
13576                    map.next_value::<::serde_json::Value>()?;
13577                }
13578            }
13579        }
13580        if optional && nothing {
13581            return Ok(None);
13582        }
13583        let result = MemberAddArgBase {
13584            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
13585            member_given_name: field_member_given_name.and_then(Option::flatten),
13586            member_surname: field_member_surname.and_then(Option::flatten),
13587            member_external_id: field_member_external_id.and_then(Option::flatten),
13588            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
13589            send_welcome_email: field_send_welcome_email.unwrap_or(true),
13590            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
13591        };
13592        Ok(Some(result))
13593    }
13594
13595    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13596        &self,
13597        s: &mut S::SerializeStruct,
13598    ) -> Result<(), S::Error> {
13599        use serde::ser::SerializeStruct;
13600        s.serialize_field("member_email", &self.member_email)?;
13601        if let Some(val) = &self.member_given_name {
13602            s.serialize_field("member_given_name", val)?;
13603        }
13604        if let Some(val) = &self.member_surname {
13605            s.serialize_field("member_surname", val)?;
13606        }
13607        if let Some(val) = &self.member_external_id {
13608            s.serialize_field("member_external_id", val)?;
13609        }
13610        if let Some(val) = &self.member_persistent_id {
13611            s.serialize_field("member_persistent_id", val)?;
13612        }
13613        if !self.send_welcome_email {
13614            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
13615        }
13616        if let Some(val) = &self.is_directory_restricted {
13617            s.serialize_field("is_directory_restricted", val)?;
13618        }
13619        Ok(())
13620    }
13621}
13622
13623impl<'de> ::serde::de::Deserialize<'de> for MemberAddArgBase {
13624    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13625        // struct deserializer
13626        use serde::de::{MapAccess, Visitor};
13627        struct StructVisitor;
13628        impl<'de> Visitor<'de> for StructVisitor {
13629            type Value = MemberAddArgBase;
13630            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13631                f.write_str("a MemberAddArgBase struct")
13632            }
13633            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13634                MemberAddArgBase::internal_deserialize(map)
13635            }
13636        }
13637        deserializer.deserialize_struct("MemberAddArgBase", MEMBER_ADD_ARG_BASE_FIELDS, StructVisitor)
13638    }
13639}
13640
13641impl ::serde::ser::Serialize for MemberAddArgBase {
13642    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13643        // struct serializer
13644        use serde::ser::SerializeStruct;
13645        let mut s = serializer.serialize_struct("MemberAddArgBase", 7)?;
13646        self.internal_serialize::<S>(&mut s)?;
13647        s.end()
13648    }
13649}
13650
13651/// Describes the result of attempting to add a single user to the team. 'success' is the only value
13652/// indicating that a user was indeed added to the team - the other values explain the type of
13653/// failure that occurred, and include the email of the user for which the operation has failed.
13654#[derive(Debug, Clone, PartialEq, Eq)]
13655pub enum MemberAddResult {
13656    /// Team is already full. The organization has no available licenses.
13657    TeamLicenseLimit(crate::types::common::EmailAddress),
13658    /// Team is already full. The free team member limit has been reached.
13659    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
13660    /// User is already on this team. The provided email address is associated with a user who is
13661    /// already a member of (including in recoverable state) or invited to the team.
13662    UserAlreadyOnTeam(crate::types::common::EmailAddress),
13663    /// User is already on another team. The provided email address is associated with a user that
13664    /// is already a member or invited to another team.
13665    UserOnAnotherTeam(crate::types::common::EmailAddress),
13666    /// User is already paired.
13667    UserAlreadyPaired(crate::types::common::EmailAddress),
13668    /// User migration has failed.
13669    UserMigrationFailed(crate::types::common::EmailAddress),
13670    /// A user with the given external member ID already exists on the team (including in
13671    /// recoverable state).
13672    DuplicateExternalMemberId(crate::types::common::EmailAddress),
13673    /// A user with the given persistent ID already exists on the team (including in recoverable
13674    /// state).
13675    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
13676    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
13677    /// contact Dropbox for more information.
13678    PersistentIdDisabled(crate::types::common::EmailAddress),
13679    /// User creation has failed.
13680    UserCreationFailed(crate::types::common::EmailAddress),
13681    /// Describes a user that was successfully added to the team.
13682    Success(TeamMemberInfo),
13683}
13684
13685impl<'de> ::serde::de::Deserialize<'de> for MemberAddResult {
13686    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13687        // union deserializer
13688        use serde::de::{self, MapAccess, Visitor};
13689        struct EnumVisitor;
13690        impl<'de> Visitor<'de> for EnumVisitor {
13691            type Value = MemberAddResult;
13692            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13693                f.write_str("a MemberAddResult structure")
13694            }
13695            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13696                let tag: &str = match map.next_key()? {
13697                    Some(".tag") => map.next_value()?,
13698                    _ => return Err(de::Error::missing_field(".tag"))
13699                };
13700                let value = match tag {
13701                    "team_license_limit" => {
13702                        match map.next_key()? {
13703                            Some("team_license_limit") => MemberAddResult::TeamLicenseLimit(map.next_value()?),
13704                            None => return Err(de::Error::missing_field("team_license_limit")),
13705                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13706                        }
13707                    }
13708                    "free_team_member_limit_reached" => {
13709                        match map.next_key()? {
13710                            Some("free_team_member_limit_reached") => MemberAddResult::FreeTeamMemberLimitReached(map.next_value()?),
13711                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
13712                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13713                        }
13714                    }
13715                    "user_already_on_team" => {
13716                        match map.next_key()? {
13717                            Some("user_already_on_team") => MemberAddResult::UserAlreadyOnTeam(map.next_value()?),
13718                            None => return Err(de::Error::missing_field("user_already_on_team")),
13719                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13720                        }
13721                    }
13722                    "user_on_another_team" => {
13723                        match map.next_key()? {
13724                            Some("user_on_another_team") => MemberAddResult::UserOnAnotherTeam(map.next_value()?),
13725                            None => return Err(de::Error::missing_field("user_on_another_team")),
13726                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13727                        }
13728                    }
13729                    "user_already_paired" => {
13730                        match map.next_key()? {
13731                            Some("user_already_paired") => MemberAddResult::UserAlreadyPaired(map.next_value()?),
13732                            None => return Err(de::Error::missing_field("user_already_paired")),
13733                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13734                        }
13735                    }
13736                    "user_migration_failed" => {
13737                        match map.next_key()? {
13738                            Some("user_migration_failed") => MemberAddResult::UserMigrationFailed(map.next_value()?),
13739                            None => return Err(de::Error::missing_field("user_migration_failed")),
13740                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13741                        }
13742                    }
13743                    "duplicate_external_member_id" => {
13744                        match map.next_key()? {
13745                            Some("duplicate_external_member_id") => MemberAddResult::DuplicateExternalMemberId(map.next_value()?),
13746                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
13747                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13748                        }
13749                    }
13750                    "duplicate_member_persistent_id" => {
13751                        match map.next_key()? {
13752                            Some("duplicate_member_persistent_id") => MemberAddResult::DuplicateMemberPersistentId(map.next_value()?),
13753                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
13754                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13755                        }
13756                    }
13757                    "persistent_id_disabled" => {
13758                        match map.next_key()? {
13759                            Some("persistent_id_disabled") => MemberAddResult::PersistentIdDisabled(map.next_value()?),
13760                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
13761                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13762                        }
13763                    }
13764                    "user_creation_failed" => {
13765                        match map.next_key()? {
13766                            Some("user_creation_failed") => MemberAddResult::UserCreationFailed(map.next_value()?),
13767                            None => return Err(de::Error::missing_field("user_creation_failed")),
13768                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13769                        }
13770                    }
13771                    "success" => MemberAddResult::Success(TeamMemberInfo::internal_deserialize(&mut map)?),
13772                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
13773                };
13774                crate::eat_json_fields(&mut map)?;
13775                Ok(value)
13776            }
13777        }
13778        const VARIANTS: &[&str] = &["team_license_limit",
13779                                    "free_team_member_limit_reached",
13780                                    "user_already_on_team",
13781                                    "user_on_another_team",
13782                                    "user_already_paired",
13783                                    "user_migration_failed",
13784                                    "duplicate_external_member_id",
13785                                    "duplicate_member_persistent_id",
13786                                    "persistent_id_disabled",
13787                                    "user_creation_failed",
13788                                    "success"];
13789        deserializer.deserialize_struct("MemberAddResult", VARIANTS, EnumVisitor)
13790    }
13791}
13792
13793impl ::serde::ser::Serialize for MemberAddResult {
13794    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13795        // union serializer
13796        use serde::ser::SerializeStruct;
13797        match self {
13798            MemberAddResult::TeamLicenseLimit(x) => {
13799                // primitive
13800                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13801                s.serialize_field(".tag", "team_license_limit")?;
13802                s.serialize_field("team_license_limit", x)?;
13803                s.end()
13804            }
13805            MemberAddResult::FreeTeamMemberLimitReached(x) => {
13806                // primitive
13807                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13808                s.serialize_field(".tag", "free_team_member_limit_reached")?;
13809                s.serialize_field("free_team_member_limit_reached", x)?;
13810                s.end()
13811            }
13812            MemberAddResult::UserAlreadyOnTeam(x) => {
13813                // primitive
13814                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13815                s.serialize_field(".tag", "user_already_on_team")?;
13816                s.serialize_field("user_already_on_team", x)?;
13817                s.end()
13818            }
13819            MemberAddResult::UserOnAnotherTeam(x) => {
13820                // primitive
13821                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13822                s.serialize_field(".tag", "user_on_another_team")?;
13823                s.serialize_field("user_on_another_team", x)?;
13824                s.end()
13825            }
13826            MemberAddResult::UserAlreadyPaired(x) => {
13827                // primitive
13828                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13829                s.serialize_field(".tag", "user_already_paired")?;
13830                s.serialize_field("user_already_paired", x)?;
13831                s.end()
13832            }
13833            MemberAddResult::UserMigrationFailed(x) => {
13834                // primitive
13835                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13836                s.serialize_field(".tag", "user_migration_failed")?;
13837                s.serialize_field("user_migration_failed", x)?;
13838                s.end()
13839            }
13840            MemberAddResult::DuplicateExternalMemberId(x) => {
13841                // primitive
13842                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13843                s.serialize_field(".tag", "duplicate_external_member_id")?;
13844                s.serialize_field("duplicate_external_member_id", x)?;
13845                s.end()
13846            }
13847            MemberAddResult::DuplicateMemberPersistentId(x) => {
13848                // primitive
13849                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13850                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
13851                s.serialize_field("duplicate_member_persistent_id", x)?;
13852                s.end()
13853            }
13854            MemberAddResult::PersistentIdDisabled(x) => {
13855                // primitive
13856                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13857                s.serialize_field(".tag", "persistent_id_disabled")?;
13858                s.serialize_field("persistent_id_disabled", x)?;
13859                s.end()
13860            }
13861            MemberAddResult::UserCreationFailed(x) => {
13862                // primitive
13863                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13864                s.serialize_field(".tag", "user_creation_failed")?;
13865                s.serialize_field("user_creation_failed", x)?;
13866                s.end()
13867            }
13868            MemberAddResult::Success(x) => {
13869                // struct
13870                let mut s = serializer.serialize_struct("MemberAddResult", 3)?;
13871                s.serialize_field(".tag", "success")?;
13872                x.internal_serialize::<S>(&mut s)?;
13873                s.end()
13874            }
13875        }
13876    }
13877}
13878
13879// union extends MemberAddResultBase
13880impl From<MemberAddResultBase> for MemberAddResult {
13881    fn from(parent: MemberAddResultBase) -> Self {
13882        match parent {
13883            MemberAddResultBase::TeamLicenseLimit(x) => MemberAddResult::TeamLicenseLimit(x),
13884            MemberAddResultBase::FreeTeamMemberLimitReached(x) => MemberAddResult::FreeTeamMemberLimitReached(x),
13885            MemberAddResultBase::UserAlreadyOnTeam(x) => MemberAddResult::UserAlreadyOnTeam(x),
13886            MemberAddResultBase::UserOnAnotherTeam(x) => MemberAddResult::UserOnAnotherTeam(x),
13887            MemberAddResultBase::UserAlreadyPaired(x) => MemberAddResult::UserAlreadyPaired(x),
13888            MemberAddResultBase::UserMigrationFailed(x) => MemberAddResult::UserMigrationFailed(x),
13889            MemberAddResultBase::DuplicateExternalMemberId(x) => MemberAddResult::DuplicateExternalMemberId(x),
13890            MemberAddResultBase::DuplicateMemberPersistentId(x) => MemberAddResult::DuplicateMemberPersistentId(x),
13891            MemberAddResultBase::PersistentIdDisabled(x) => MemberAddResult::PersistentIdDisabled(x),
13892            MemberAddResultBase::UserCreationFailed(x) => MemberAddResult::UserCreationFailed(x),
13893        }
13894    }
13895}
13896#[derive(Debug, Clone, PartialEq, Eq)]
13897pub enum MemberAddResultBase {
13898    /// Team is already full. The organization has no available licenses.
13899    TeamLicenseLimit(crate::types::common::EmailAddress),
13900    /// Team is already full. The free team member limit has been reached.
13901    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
13902    /// User is already on this team. The provided email address is associated with a user who is
13903    /// already a member of (including in recoverable state) or invited to the team.
13904    UserAlreadyOnTeam(crate::types::common::EmailAddress),
13905    /// User is already on another team. The provided email address is associated with a user that
13906    /// is already a member or invited to another team.
13907    UserOnAnotherTeam(crate::types::common::EmailAddress),
13908    /// User is already paired.
13909    UserAlreadyPaired(crate::types::common::EmailAddress),
13910    /// User migration has failed.
13911    UserMigrationFailed(crate::types::common::EmailAddress),
13912    /// A user with the given external member ID already exists on the team (including in
13913    /// recoverable state).
13914    DuplicateExternalMemberId(crate::types::common::EmailAddress),
13915    /// A user with the given persistent ID already exists on the team (including in recoverable
13916    /// state).
13917    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
13918    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
13919    /// contact Dropbox for more information.
13920    PersistentIdDisabled(crate::types::common::EmailAddress),
13921    /// User creation has failed.
13922    UserCreationFailed(crate::types::common::EmailAddress),
13923}
13924
13925impl<'de> ::serde::de::Deserialize<'de> for MemberAddResultBase {
13926    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13927        // union deserializer
13928        use serde::de::{self, MapAccess, Visitor};
13929        struct EnumVisitor;
13930        impl<'de> Visitor<'de> for EnumVisitor {
13931            type Value = MemberAddResultBase;
13932            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13933                f.write_str("a MemberAddResultBase structure")
13934            }
13935            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13936                let tag: &str = match map.next_key()? {
13937                    Some(".tag") => map.next_value()?,
13938                    _ => return Err(de::Error::missing_field(".tag"))
13939                };
13940                let value = match tag {
13941                    "team_license_limit" => {
13942                        match map.next_key()? {
13943                            Some("team_license_limit") => MemberAddResultBase::TeamLicenseLimit(map.next_value()?),
13944                            None => return Err(de::Error::missing_field("team_license_limit")),
13945                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13946                        }
13947                    }
13948                    "free_team_member_limit_reached" => {
13949                        match map.next_key()? {
13950                            Some("free_team_member_limit_reached") => MemberAddResultBase::FreeTeamMemberLimitReached(map.next_value()?),
13951                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
13952                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13953                        }
13954                    }
13955                    "user_already_on_team" => {
13956                        match map.next_key()? {
13957                            Some("user_already_on_team") => MemberAddResultBase::UserAlreadyOnTeam(map.next_value()?),
13958                            None => return Err(de::Error::missing_field("user_already_on_team")),
13959                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13960                        }
13961                    }
13962                    "user_on_another_team" => {
13963                        match map.next_key()? {
13964                            Some("user_on_another_team") => MemberAddResultBase::UserOnAnotherTeam(map.next_value()?),
13965                            None => return Err(de::Error::missing_field("user_on_another_team")),
13966                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13967                        }
13968                    }
13969                    "user_already_paired" => {
13970                        match map.next_key()? {
13971                            Some("user_already_paired") => MemberAddResultBase::UserAlreadyPaired(map.next_value()?),
13972                            None => return Err(de::Error::missing_field("user_already_paired")),
13973                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13974                        }
13975                    }
13976                    "user_migration_failed" => {
13977                        match map.next_key()? {
13978                            Some("user_migration_failed") => MemberAddResultBase::UserMigrationFailed(map.next_value()?),
13979                            None => return Err(de::Error::missing_field("user_migration_failed")),
13980                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13981                        }
13982                    }
13983                    "duplicate_external_member_id" => {
13984                        match map.next_key()? {
13985                            Some("duplicate_external_member_id") => MemberAddResultBase::DuplicateExternalMemberId(map.next_value()?),
13986                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
13987                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13988                        }
13989                    }
13990                    "duplicate_member_persistent_id" => {
13991                        match map.next_key()? {
13992                            Some("duplicate_member_persistent_id") => MemberAddResultBase::DuplicateMemberPersistentId(map.next_value()?),
13993                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
13994                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13995                        }
13996                    }
13997                    "persistent_id_disabled" => {
13998                        match map.next_key()? {
13999                            Some("persistent_id_disabled") => MemberAddResultBase::PersistentIdDisabled(map.next_value()?),
14000                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
14001                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14002                        }
14003                    }
14004                    "user_creation_failed" => {
14005                        match map.next_key()? {
14006                            Some("user_creation_failed") => MemberAddResultBase::UserCreationFailed(map.next_value()?),
14007                            None => return Err(de::Error::missing_field("user_creation_failed")),
14008                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14009                        }
14010                    }
14011                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
14012                };
14013                crate::eat_json_fields(&mut map)?;
14014                Ok(value)
14015            }
14016        }
14017        const VARIANTS: &[&str] = &["team_license_limit",
14018                                    "free_team_member_limit_reached",
14019                                    "user_already_on_team",
14020                                    "user_on_another_team",
14021                                    "user_already_paired",
14022                                    "user_migration_failed",
14023                                    "duplicate_external_member_id",
14024                                    "duplicate_member_persistent_id",
14025                                    "persistent_id_disabled",
14026                                    "user_creation_failed"];
14027        deserializer.deserialize_struct("MemberAddResultBase", VARIANTS, EnumVisitor)
14028    }
14029}
14030
14031impl ::serde::ser::Serialize for MemberAddResultBase {
14032    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14033        // union serializer
14034        use serde::ser::SerializeStruct;
14035        match self {
14036            MemberAddResultBase::TeamLicenseLimit(x) => {
14037                // primitive
14038                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14039                s.serialize_field(".tag", "team_license_limit")?;
14040                s.serialize_field("team_license_limit", x)?;
14041                s.end()
14042            }
14043            MemberAddResultBase::FreeTeamMemberLimitReached(x) => {
14044                // primitive
14045                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14046                s.serialize_field(".tag", "free_team_member_limit_reached")?;
14047                s.serialize_field("free_team_member_limit_reached", x)?;
14048                s.end()
14049            }
14050            MemberAddResultBase::UserAlreadyOnTeam(x) => {
14051                // primitive
14052                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14053                s.serialize_field(".tag", "user_already_on_team")?;
14054                s.serialize_field("user_already_on_team", x)?;
14055                s.end()
14056            }
14057            MemberAddResultBase::UserOnAnotherTeam(x) => {
14058                // primitive
14059                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14060                s.serialize_field(".tag", "user_on_another_team")?;
14061                s.serialize_field("user_on_another_team", x)?;
14062                s.end()
14063            }
14064            MemberAddResultBase::UserAlreadyPaired(x) => {
14065                // primitive
14066                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14067                s.serialize_field(".tag", "user_already_paired")?;
14068                s.serialize_field("user_already_paired", x)?;
14069                s.end()
14070            }
14071            MemberAddResultBase::UserMigrationFailed(x) => {
14072                // primitive
14073                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14074                s.serialize_field(".tag", "user_migration_failed")?;
14075                s.serialize_field("user_migration_failed", x)?;
14076                s.end()
14077            }
14078            MemberAddResultBase::DuplicateExternalMemberId(x) => {
14079                // primitive
14080                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14081                s.serialize_field(".tag", "duplicate_external_member_id")?;
14082                s.serialize_field("duplicate_external_member_id", x)?;
14083                s.end()
14084            }
14085            MemberAddResultBase::DuplicateMemberPersistentId(x) => {
14086                // primitive
14087                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14088                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
14089                s.serialize_field("duplicate_member_persistent_id", x)?;
14090                s.end()
14091            }
14092            MemberAddResultBase::PersistentIdDisabled(x) => {
14093                // primitive
14094                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14095                s.serialize_field(".tag", "persistent_id_disabled")?;
14096                s.serialize_field("persistent_id_disabled", x)?;
14097                s.end()
14098            }
14099            MemberAddResultBase::UserCreationFailed(x) => {
14100                // primitive
14101                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14102                s.serialize_field(".tag", "user_creation_failed")?;
14103                s.serialize_field("user_creation_failed", x)?;
14104                s.end()
14105            }
14106        }
14107    }
14108}
14109
14110#[derive(Debug, Clone, PartialEq, Eq)]
14111#[non_exhaustive] // structs may have more fields added in the future.
14112pub struct MemberAddV2Arg {
14113    pub member_email: crate::types::common::EmailAddress,
14114    /// Member's first name.
14115    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
14116    /// Member's last name.
14117    pub member_surname: Option<crate::types::common::OptionalNamePart>,
14118    /// External ID for member.
14119    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
14120    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
14121    /// configuration.
14122    pub member_persistent_id: Option<String>,
14123    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
14124    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
14125    /// flows for onboarding that want to handle announcements themselves.
14126    pub send_welcome_email: bool,
14127    /// Whether a user is directory restricted.
14128    pub is_directory_restricted: Option<bool>,
14129    pub role_ids: Option<Vec<TeamMemberRoleId>>,
14130}
14131
14132impl MemberAddV2Arg {
14133    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
14134        MemberAddV2Arg {
14135            member_email,
14136            member_given_name: None,
14137            member_surname: None,
14138            member_external_id: None,
14139            member_persistent_id: None,
14140            send_welcome_email: true,
14141            is_directory_restricted: None,
14142            role_ids: None,
14143        }
14144    }
14145
14146    pub fn with_member_given_name(
14147        mut self,
14148        value: crate::types::common::OptionalNamePart,
14149    ) -> Self {
14150        self.member_given_name = Some(value);
14151        self
14152    }
14153
14154    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
14155        self.member_surname = Some(value);
14156        self
14157    }
14158
14159    pub fn with_member_external_id(
14160        mut self,
14161        value: crate::types::team_common::MemberExternalId,
14162    ) -> Self {
14163        self.member_external_id = Some(value);
14164        self
14165    }
14166
14167    pub fn with_member_persistent_id(mut self, value: String) -> Self {
14168        self.member_persistent_id = Some(value);
14169        self
14170    }
14171
14172    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
14173        self.send_welcome_email = value;
14174        self
14175    }
14176
14177    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
14178        self.is_directory_restricted = Some(value);
14179        self
14180    }
14181
14182    pub fn with_role_ids(mut self, value: Vec<TeamMemberRoleId>) -> Self {
14183        self.role_ids = Some(value);
14184        self
14185    }
14186}
14187
14188const MEMBER_ADD_V2_ARG_FIELDS: &[&str] = &["member_email",
14189                                            "member_given_name",
14190                                            "member_surname",
14191                                            "member_external_id",
14192                                            "member_persistent_id",
14193                                            "send_welcome_email",
14194                                            "is_directory_restricted",
14195                                            "role_ids"];
14196impl MemberAddV2Arg {
14197    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14198        map: V,
14199    ) -> Result<MemberAddV2Arg, V::Error> {
14200        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14201    }
14202
14203    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14204        mut map: V,
14205        optional: bool,
14206    ) -> Result<Option<MemberAddV2Arg>, V::Error> {
14207        let mut field_member_email = None;
14208        let mut field_member_given_name = None;
14209        let mut field_member_surname = None;
14210        let mut field_member_external_id = None;
14211        let mut field_member_persistent_id = None;
14212        let mut field_send_welcome_email = None;
14213        let mut field_is_directory_restricted = None;
14214        let mut field_role_ids = None;
14215        let mut nothing = true;
14216        while let Some(key) = map.next_key::<&str>()? {
14217            nothing = false;
14218            match key {
14219                "member_email" => {
14220                    if field_member_email.is_some() {
14221                        return Err(::serde::de::Error::duplicate_field("member_email"));
14222                    }
14223                    field_member_email = Some(map.next_value()?);
14224                }
14225                "member_given_name" => {
14226                    if field_member_given_name.is_some() {
14227                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
14228                    }
14229                    field_member_given_name = Some(map.next_value()?);
14230                }
14231                "member_surname" => {
14232                    if field_member_surname.is_some() {
14233                        return Err(::serde::de::Error::duplicate_field("member_surname"));
14234                    }
14235                    field_member_surname = Some(map.next_value()?);
14236                }
14237                "member_external_id" => {
14238                    if field_member_external_id.is_some() {
14239                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
14240                    }
14241                    field_member_external_id = Some(map.next_value()?);
14242                }
14243                "member_persistent_id" => {
14244                    if field_member_persistent_id.is_some() {
14245                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
14246                    }
14247                    field_member_persistent_id = Some(map.next_value()?);
14248                }
14249                "send_welcome_email" => {
14250                    if field_send_welcome_email.is_some() {
14251                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
14252                    }
14253                    field_send_welcome_email = Some(map.next_value()?);
14254                }
14255                "is_directory_restricted" => {
14256                    if field_is_directory_restricted.is_some() {
14257                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
14258                    }
14259                    field_is_directory_restricted = Some(map.next_value()?);
14260                }
14261                "role_ids" => {
14262                    if field_role_ids.is_some() {
14263                        return Err(::serde::de::Error::duplicate_field("role_ids"));
14264                    }
14265                    field_role_ids = Some(map.next_value()?);
14266                }
14267                _ => {
14268                    // unknown field allowed and ignored
14269                    map.next_value::<::serde_json::Value>()?;
14270                }
14271            }
14272        }
14273        if optional && nothing {
14274            return Ok(None);
14275        }
14276        let result = MemberAddV2Arg {
14277            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
14278            member_given_name: field_member_given_name.and_then(Option::flatten),
14279            member_surname: field_member_surname.and_then(Option::flatten),
14280            member_external_id: field_member_external_id.and_then(Option::flatten),
14281            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
14282            send_welcome_email: field_send_welcome_email.unwrap_or(true),
14283            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
14284            role_ids: field_role_ids.and_then(Option::flatten),
14285        };
14286        Ok(Some(result))
14287    }
14288
14289    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14290        &self,
14291        s: &mut S::SerializeStruct,
14292    ) -> Result<(), S::Error> {
14293        use serde::ser::SerializeStruct;
14294        s.serialize_field("member_email", &self.member_email)?;
14295        if let Some(val) = &self.member_given_name {
14296            s.serialize_field("member_given_name", val)?;
14297        }
14298        if let Some(val) = &self.member_surname {
14299            s.serialize_field("member_surname", val)?;
14300        }
14301        if let Some(val) = &self.member_external_id {
14302            s.serialize_field("member_external_id", val)?;
14303        }
14304        if let Some(val) = &self.member_persistent_id {
14305            s.serialize_field("member_persistent_id", val)?;
14306        }
14307        if !self.send_welcome_email {
14308            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
14309        }
14310        if let Some(val) = &self.is_directory_restricted {
14311            s.serialize_field("is_directory_restricted", val)?;
14312        }
14313        if let Some(val) = &self.role_ids {
14314            s.serialize_field("role_ids", val)?;
14315        }
14316        Ok(())
14317    }
14318}
14319
14320impl<'de> ::serde::de::Deserialize<'de> for MemberAddV2Arg {
14321    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14322        // struct deserializer
14323        use serde::de::{MapAccess, Visitor};
14324        struct StructVisitor;
14325        impl<'de> Visitor<'de> for StructVisitor {
14326            type Value = MemberAddV2Arg;
14327            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14328                f.write_str("a MemberAddV2Arg struct")
14329            }
14330            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14331                MemberAddV2Arg::internal_deserialize(map)
14332            }
14333        }
14334        deserializer.deserialize_struct("MemberAddV2Arg", MEMBER_ADD_V2_ARG_FIELDS, StructVisitor)
14335    }
14336}
14337
14338impl ::serde::ser::Serialize for MemberAddV2Arg {
14339    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14340        // struct serializer
14341        use serde::ser::SerializeStruct;
14342        let mut s = serializer.serialize_struct("MemberAddV2Arg", 8)?;
14343        self.internal_serialize::<S>(&mut s)?;
14344        s.end()
14345    }
14346}
14347
14348// struct extends MemberAddArgBase
14349impl From<MemberAddV2Arg> for MemberAddArgBase {
14350    fn from(subtype: MemberAddV2Arg) -> Self {
14351        Self {
14352            member_email: subtype.member_email,
14353            member_given_name: subtype.member_given_name,
14354            member_surname: subtype.member_surname,
14355            member_external_id: subtype.member_external_id,
14356            member_persistent_id: subtype.member_persistent_id,
14357            send_welcome_email: subtype.send_welcome_email,
14358            is_directory_restricted: subtype.is_directory_restricted,
14359        }
14360    }
14361}
14362/// Describes the result of attempting to add a single user to the team. 'success' is the only value
14363/// indicating that a user was indeed added to the team - the other values explain the type of
14364/// failure that occurred, and include the email of the user for which the operation has failed.
14365#[derive(Debug, Clone, PartialEq, Eq)]
14366#[non_exhaustive] // variants may be added in the future
14367pub enum MemberAddV2Result {
14368    /// Team is already full. The organization has no available licenses.
14369    TeamLicenseLimit(crate::types::common::EmailAddress),
14370    /// Team is already full. The free team member limit has been reached.
14371    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
14372    /// User is already on this team. The provided email address is associated with a user who is
14373    /// already a member of (including in recoverable state) or invited to the team.
14374    UserAlreadyOnTeam(crate::types::common::EmailAddress),
14375    /// User is already on another team. The provided email address is associated with a user that
14376    /// is already a member or invited to another team.
14377    UserOnAnotherTeam(crate::types::common::EmailAddress),
14378    /// User is already paired.
14379    UserAlreadyPaired(crate::types::common::EmailAddress),
14380    /// User migration has failed.
14381    UserMigrationFailed(crate::types::common::EmailAddress),
14382    /// A user with the given external member ID already exists on the team (including in
14383    /// recoverable state).
14384    DuplicateExternalMemberId(crate::types::common::EmailAddress),
14385    /// A user with the given persistent ID already exists on the team (including in recoverable
14386    /// state).
14387    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
14388    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
14389    /// contact Dropbox for more information.
14390    PersistentIdDisabled(crate::types::common::EmailAddress),
14391    /// User creation has failed.
14392    UserCreationFailed(crate::types::common::EmailAddress),
14393    /// Describes a user that was successfully added to the team.
14394    Success(TeamMemberInfoV2),
14395    /// Catch-all used for unrecognized values returned from the server. Encountering this value
14396    /// typically indicates that this SDK version is out of date.
14397    Other,
14398}
14399
14400impl<'de> ::serde::de::Deserialize<'de> for MemberAddV2Result {
14401    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14402        // union deserializer
14403        use serde::de::{self, MapAccess, Visitor};
14404        struct EnumVisitor;
14405        impl<'de> Visitor<'de> for EnumVisitor {
14406            type Value = MemberAddV2Result;
14407            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14408                f.write_str("a MemberAddV2Result structure")
14409            }
14410            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
14411                let tag: &str = match map.next_key()? {
14412                    Some(".tag") => map.next_value()?,
14413                    _ => return Err(de::Error::missing_field(".tag"))
14414                };
14415                let value = match tag {
14416                    "team_license_limit" => {
14417                        match map.next_key()? {
14418                            Some("team_license_limit") => MemberAddV2Result::TeamLicenseLimit(map.next_value()?),
14419                            None => return Err(de::Error::missing_field("team_license_limit")),
14420                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14421                        }
14422                    }
14423                    "free_team_member_limit_reached" => {
14424                        match map.next_key()? {
14425                            Some("free_team_member_limit_reached") => MemberAddV2Result::FreeTeamMemberLimitReached(map.next_value()?),
14426                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
14427                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14428                        }
14429                    }
14430                    "user_already_on_team" => {
14431                        match map.next_key()? {
14432                            Some("user_already_on_team") => MemberAddV2Result::UserAlreadyOnTeam(map.next_value()?),
14433                            None => return Err(de::Error::missing_field("user_already_on_team")),
14434                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14435                        }
14436                    }
14437                    "user_on_another_team" => {
14438                        match map.next_key()? {
14439                            Some("user_on_another_team") => MemberAddV2Result::UserOnAnotherTeam(map.next_value()?),
14440                            None => return Err(de::Error::missing_field("user_on_another_team")),
14441                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14442                        }
14443                    }
14444                    "user_already_paired" => {
14445                        match map.next_key()? {
14446                            Some("user_already_paired") => MemberAddV2Result::UserAlreadyPaired(map.next_value()?),
14447                            None => return Err(de::Error::missing_field("user_already_paired")),
14448                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14449                        }
14450                    }
14451                    "user_migration_failed" => {
14452                        match map.next_key()? {
14453                            Some("user_migration_failed") => MemberAddV2Result::UserMigrationFailed(map.next_value()?),
14454                            None => return Err(de::Error::missing_field("user_migration_failed")),
14455                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14456                        }
14457                    }
14458                    "duplicate_external_member_id" => {
14459                        match map.next_key()? {
14460                            Some("duplicate_external_member_id") => MemberAddV2Result::DuplicateExternalMemberId(map.next_value()?),
14461                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
14462                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14463                        }
14464                    }
14465                    "duplicate_member_persistent_id" => {
14466                        match map.next_key()? {
14467                            Some("duplicate_member_persistent_id") => MemberAddV2Result::DuplicateMemberPersistentId(map.next_value()?),
14468                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
14469                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14470                        }
14471                    }
14472                    "persistent_id_disabled" => {
14473                        match map.next_key()? {
14474                            Some("persistent_id_disabled") => MemberAddV2Result::PersistentIdDisabled(map.next_value()?),
14475                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
14476                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14477                        }
14478                    }
14479                    "user_creation_failed" => {
14480                        match map.next_key()? {
14481                            Some("user_creation_failed") => MemberAddV2Result::UserCreationFailed(map.next_value()?),
14482                            None => return Err(de::Error::missing_field("user_creation_failed")),
14483                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14484                        }
14485                    }
14486                    "success" => MemberAddV2Result::Success(TeamMemberInfoV2::internal_deserialize(&mut map)?),
14487                    _ => MemberAddV2Result::Other,
14488                };
14489                crate::eat_json_fields(&mut map)?;
14490                Ok(value)
14491            }
14492        }
14493        const VARIANTS: &[&str] = &["team_license_limit",
14494                                    "free_team_member_limit_reached",
14495                                    "user_already_on_team",
14496                                    "user_on_another_team",
14497                                    "user_already_paired",
14498                                    "user_migration_failed",
14499                                    "duplicate_external_member_id",
14500                                    "duplicate_member_persistent_id",
14501                                    "persistent_id_disabled",
14502                                    "user_creation_failed",
14503                                    "success",
14504                                    "other"];
14505        deserializer.deserialize_struct("MemberAddV2Result", VARIANTS, EnumVisitor)
14506    }
14507}
14508
14509impl ::serde::ser::Serialize for MemberAddV2Result {
14510    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14511        // union serializer
14512        use serde::ser::SerializeStruct;
14513        match self {
14514            MemberAddV2Result::TeamLicenseLimit(x) => {
14515                // primitive
14516                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14517                s.serialize_field(".tag", "team_license_limit")?;
14518                s.serialize_field("team_license_limit", x)?;
14519                s.end()
14520            }
14521            MemberAddV2Result::FreeTeamMemberLimitReached(x) => {
14522                // primitive
14523                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14524                s.serialize_field(".tag", "free_team_member_limit_reached")?;
14525                s.serialize_field("free_team_member_limit_reached", x)?;
14526                s.end()
14527            }
14528            MemberAddV2Result::UserAlreadyOnTeam(x) => {
14529                // primitive
14530                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14531                s.serialize_field(".tag", "user_already_on_team")?;
14532                s.serialize_field("user_already_on_team", x)?;
14533                s.end()
14534            }
14535            MemberAddV2Result::UserOnAnotherTeam(x) => {
14536                // primitive
14537                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14538                s.serialize_field(".tag", "user_on_another_team")?;
14539                s.serialize_field("user_on_another_team", x)?;
14540                s.end()
14541            }
14542            MemberAddV2Result::UserAlreadyPaired(x) => {
14543                // primitive
14544                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14545                s.serialize_field(".tag", "user_already_paired")?;
14546                s.serialize_field("user_already_paired", x)?;
14547                s.end()
14548            }
14549            MemberAddV2Result::UserMigrationFailed(x) => {
14550                // primitive
14551                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14552                s.serialize_field(".tag", "user_migration_failed")?;
14553                s.serialize_field("user_migration_failed", x)?;
14554                s.end()
14555            }
14556            MemberAddV2Result::DuplicateExternalMemberId(x) => {
14557                // primitive
14558                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14559                s.serialize_field(".tag", "duplicate_external_member_id")?;
14560                s.serialize_field("duplicate_external_member_id", x)?;
14561                s.end()
14562            }
14563            MemberAddV2Result::DuplicateMemberPersistentId(x) => {
14564                // primitive
14565                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14566                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
14567                s.serialize_field("duplicate_member_persistent_id", x)?;
14568                s.end()
14569            }
14570            MemberAddV2Result::PersistentIdDisabled(x) => {
14571                // primitive
14572                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14573                s.serialize_field(".tag", "persistent_id_disabled")?;
14574                s.serialize_field("persistent_id_disabled", x)?;
14575                s.end()
14576            }
14577            MemberAddV2Result::UserCreationFailed(x) => {
14578                // primitive
14579                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14580                s.serialize_field(".tag", "user_creation_failed")?;
14581                s.serialize_field("user_creation_failed", x)?;
14582                s.end()
14583            }
14584            MemberAddV2Result::Success(x) => {
14585                // struct
14586                let mut s = serializer.serialize_struct("MemberAddV2Result", 3)?;
14587                s.serialize_field(".tag", "success")?;
14588                x.internal_serialize::<S>(&mut s)?;
14589                s.end()
14590            }
14591            MemberAddV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
14592        }
14593    }
14594}
14595
14596// union extends MemberAddResultBase
14597impl From<MemberAddResultBase> for MemberAddV2Result {
14598    fn from(parent: MemberAddResultBase) -> Self {
14599        match parent {
14600            MemberAddResultBase::TeamLicenseLimit(x) => MemberAddV2Result::TeamLicenseLimit(x),
14601            MemberAddResultBase::FreeTeamMemberLimitReached(x) => MemberAddV2Result::FreeTeamMemberLimitReached(x),
14602            MemberAddResultBase::UserAlreadyOnTeam(x) => MemberAddV2Result::UserAlreadyOnTeam(x),
14603            MemberAddResultBase::UserOnAnotherTeam(x) => MemberAddV2Result::UserOnAnotherTeam(x),
14604            MemberAddResultBase::UserAlreadyPaired(x) => MemberAddV2Result::UserAlreadyPaired(x),
14605            MemberAddResultBase::UserMigrationFailed(x) => MemberAddV2Result::UserMigrationFailed(x),
14606            MemberAddResultBase::DuplicateExternalMemberId(x) => MemberAddV2Result::DuplicateExternalMemberId(x),
14607            MemberAddResultBase::DuplicateMemberPersistentId(x) => MemberAddV2Result::DuplicateMemberPersistentId(x),
14608            MemberAddResultBase::PersistentIdDisabled(x) => MemberAddV2Result::PersistentIdDisabled(x),
14609            MemberAddResultBase::UserCreationFailed(x) => MemberAddV2Result::UserCreationFailed(x),
14610        }
14611    }
14612}
14613/// Information on devices of a team's member.
14614#[derive(Debug, Clone, PartialEq, Eq)]
14615#[non_exhaustive] // structs may have more fields added in the future.
14616pub struct MemberDevices {
14617    /// The member unique Id.
14618    pub team_member_id: String,
14619    /// List of web sessions made by this team member.
14620    pub web_sessions: Option<Vec<ActiveWebSession>>,
14621    /// List of desktop clients by this team member.
14622    pub desktop_clients: Option<Vec<DesktopClientSession>>,
14623    /// List of mobile clients by this team member.
14624    pub mobile_clients: Option<Vec<MobileClientSession>>,
14625}
14626
14627impl MemberDevices {
14628    pub fn new(team_member_id: String) -> Self {
14629        MemberDevices {
14630            team_member_id,
14631            web_sessions: None,
14632            desktop_clients: None,
14633            mobile_clients: None,
14634        }
14635    }
14636
14637    pub fn with_web_sessions(mut self, value: Vec<ActiveWebSession>) -> Self {
14638        self.web_sessions = Some(value);
14639        self
14640    }
14641
14642    pub fn with_desktop_clients(mut self, value: Vec<DesktopClientSession>) -> Self {
14643        self.desktop_clients = Some(value);
14644        self
14645    }
14646
14647    pub fn with_mobile_clients(mut self, value: Vec<MobileClientSession>) -> Self {
14648        self.mobile_clients = Some(value);
14649        self
14650    }
14651}
14652
14653const MEMBER_DEVICES_FIELDS: &[&str] = &["team_member_id",
14654                                         "web_sessions",
14655                                         "desktop_clients",
14656                                         "mobile_clients"];
14657impl MemberDevices {
14658    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14659        map: V,
14660    ) -> Result<MemberDevices, V::Error> {
14661        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14662    }
14663
14664    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14665        mut map: V,
14666        optional: bool,
14667    ) -> Result<Option<MemberDevices>, V::Error> {
14668        let mut field_team_member_id = None;
14669        let mut field_web_sessions = None;
14670        let mut field_desktop_clients = None;
14671        let mut field_mobile_clients = None;
14672        let mut nothing = true;
14673        while let Some(key) = map.next_key::<&str>()? {
14674            nothing = false;
14675            match key {
14676                "team_member_id" => {
14677                    if field_team_member_id.is_some() {
14678                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
14679                    }
14680                    field_team_member_id = Some(map.next_value()?);
14681                }
14682                "web_sessions" => {
14683                    if field_web_sessions.is_some() {
14684                        return Err(::serde::de::Error::duplicate_field("web_sessions"));
14685                    }
14686                    field_web_sessions = Some(map.next_value()?);
14687                }
14688                "desktop_clients" => {
14689                    if field_desktop_clients.is_some() {
14690                        return Err(::serde::de::Error::duplicate_field("desktop_clients"));
14691                    }
14692                    field_desktop_clients = Some(map.next_value()?);
14693                }
14694                "mobile_clients" => {
14695                    if field_mobile_clients.is_some() {
14696                        return Err(::serde::de::Error::duplicate_field("mobile_clients"));
14697                    }
14698                    field_mobile_clients = Some(map.next_value()?);
14699                }
14700                _ => {
14701                    // unknown field allowed and ignored
14702                    map.next_value::<::serde_json::Value>()?;
14703                }
14704            }
14705        }
14706        if optional && nothing {
14707            return Ok(None);
14708        }
14709        let result = MemberDevices {
14710            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
14711            web_sessions: field_web_sessions.and_then(Option::flatten),
14712            desktop_clients: field_desktop_clients.and_then(Option::flatten),
14713            mobile_clients: field_mobile_clients.and_then(Option::flatten),
14714        };
14715        Ok(Some(result))
14716    }
14717
14718    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14719        &self,
14720        s: &mut S::SerializeStruct,
14721    ) -> Result<(), S::Error> {
14722        use serde::ser::SerializeStruct;
14723        s.serialize_field("team_member_id", &self.team_member_id)?;
14724        if let Some(val) = &self.web_sessions {
14725            s.serialize_field("web_sessions", val)?;
14726        }
14727        if let Some(val) = &self.desktop_clients {
14728            s.serialize_field("desktop_clients", val)?;
14729        }
14730        if let Some(val) = &self.mobile_clients {
14731            s.serialize_field("mobile_clients", val)?;
14732        }
14733        Ok(())
14734    }
14735}
14736
14737impl<'de> ::serde::de::Deserialize<'de> for MemberDevices {
14738    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14739        // struct deserializer
14740        use serde::de::{MapAccess, Visitor};
14741        struct StructVisitor;
14742        impl<'de> Visitor<'de> for StructVisitor {
14743            type Value = MemberDevices;
14744            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14745                f.write_str("a MemberDevices struct")
14746            }
14747            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14748                MemberDevices::internal_deserialize(map)
14749            }
14750        }
14751        deserializer.deserialize_struct("MemberDevices", MEMBER_DEVICES_FIELDS, StructVisitor)
14752    }
14753}
14754
14755impl ::serde::ser::Serialize for MemberDevices {
14756    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14757        // struct serializer
14758        use serde::ser::SerializeStruct;
14759        let mut s = serializer.serialize_struct("MemberDevices", 4)?;
14760        self.internal_serialize::<S>(&mut s)?;
14761        s.end()
14762    }
14763}
14764
14765/// Information on linked applications of a team member.
14766#[derive(Debug, Clone, PartialEq, Eq)]
14767#[non_exhaustive] // structs may have more fields added in the future.
14768pub struct MemberLinkedApps {
14769    /// The member unique Id.
14770    pub team_member_id: String,
14771    /// List of third party applications linked by this team member.
14772    pub linked_api_apps: Vec<ApiApp>,
14773}
14774
14775impl MemberLinkedApps {
14776    pub fn new(team_member_id: String, linked_api_apps: Vec<ApiApp>) -> Self {
14777        MemberLinkedApps {
14778            team_member_id,
14779            linked_api_apps,
14780        }
14781    }
14782}
14783
14784const MEMBER_LINKED_APPS_FIELDS: &[&str] = &["team_member_id",
14785                                             "linked_api_apps"];
14786impl MemberLinkedApps {
14787    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14788        map: V,
14789    ) -> Result<MemberLinkedApps, V::Error> {
14790        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14791    }
14792
14793    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14794        mut map: V,
14795        optional: bool,
14796    ) -> Result<Option<MemberLinkedApps>, V::Error> {
14797        let mut field_team_member_id = None;
14798        let mut field_linked_api_apps = None;
14799        let mut nothing = true;
14800        while let Some(key) = map.next_key::<&str>()? {
14801            nothing = false;
14802            match key {
14803                "team_member_id" => {
14804                    if field_team_member_id.is_some() {
14805                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
14806                    }
14807                    field_team_member_id = Some(map.next_value()?);
14808                }
14809                "linked_api_apps" => {
14810                    if field_linked_api_apps.is_some() {
14811                        return Err(::serde::de::Error::duplicate_field("linked_api_apps"));
14812                    }
14813                    field_linked_api_apps = Some(map.next_value()?);
14814                }
14815                _ => {
14816                    // unknown field allowed and ignored
14817                    map.next_value::<::serde_json::Value>()?;
14818                }
14819            }
14820        }
14821        if optional && nothing {
14822            return Ok(None);
14823        }
14824        let result = MemberLinkedApps {
14825            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
14826            linked_api_apps: field_linked_api_apps.ok_or_else(|| ::serde::de::Error::missing_field("linked_api_apps"))?,
14827        };
14828        Ok(Some(result))
14829    }
14830
14831    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14832        &self,
14833        s: &mut S::SerializeStruct,
14834    ) -> Result<(), S::Error> {
14835        use serde::ser::SerializeStruct;
14836        s.serialize_field("team_member_id", &self.team_member_id)?;
14837        s.serialize_field("linked_api_apps", &self.linked_api_apps)?;
14838        Ok(())
14839    }
14840}
14841
14842impl<'de> ::serde::de::Deserialize<'de> for MemberLinkedApps {
14843    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14844        // struct deserializer
14845        use serde::de::{MapAccess, Visitor};
14846        struct StructVisitor;
14847        impl<'de> Visitor<'de> for StructVisitor {
14848            type Value = MemberLinkedApps;
14849            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14850                f.write_str("a MemberLinkedApps struct")
14851            }
14852            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14853                MemberLinkedApps::internal_deserialize(map)
14854            }
14855        }
14856        deserializer.deserialize_struct("MemberLinkedApps", MEMBER_LINKED_APPS_FIELDS, StructVisitor)
14857    }
14858}
14859
14860impl ::serde::ser::Serialize for MemberLinkedApps {
14861    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14862        // struct serializer
14863        use serde::ser::SerializeStruct;
14864        let mut s = serializer.serialize_struct("MemberLinkedApps", 2)?;
14865        self.internal_serialize::<S>(&mut s)?;
14866        s.end()
14867    }
14868}
14869
14870/// Basic member profile.
14871#[derive(Debug, Clone, PartialEq, Eq)]
14872#[non_exhaustive] // structs may have more fields added in the future.
14873pub struct MemberProfile {
14874    /// ID of user as a member of a team.
14875    pub team_member_id: crate::types::team_common::TeamMemberId,
14876    /// Email address of user.
14877    pub email: String,
14878    /// Is true if the user's email is verified to be owned by the user.
14879    pub email_verified: bool,
14880    /// The user's status as a member of a specific team.
14881    pub status: TeamMemberStatus,
14882    /// Representations for a person's name.
14883    pub name: crate::types::users::Name,
14884    /// The user's membership type: full (normal team member) vs limited (does not use a license; no
14885    /// access to the team's shared quota).
14886    pub membership_type: TeamMembershipType,
14887    /// External ID that a team can attach to the user. An application using the API may find it
14888    /// easier to use their own IDs instead of Dropbox IDs like account_id or team_member_id.
14889    pub external_id: Option<String>,
14890    /// A user's account identifier.
14891    pub account_id: Option<crate::types::users_common::AccountId>,
14892    /// Secondary emails of a user.
14893    pub secondary_emails: Option<Vec<crate::types::secondary_emails::SecondaryEmail>>,
14894    /// The date and time the user was invited to the team (contains value only when the member's
14895    /// status matches [`TeamMemberStatus::Invited`]).
14896    pub invited_on: Option<crate::types::common::DropboxTimestamp>,
14897    /// The date and time the user joined as a member of a specific team.
14898    pub joined_on: Option<crate::types::common::DropboxTimestamp>,
14899    /// The date and time the user was suspended from the team (contains value only when the
14900    /// member's status matches [`TeamMemberStatus::Suspended`]).
14901    pub suspended_on: Option<crate::types::common::DropboxTimestamp>,
14902    /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used
14903    /// for SAML authentication.
14904    pub persistent_id: Option<String>,
14905    /// Whether the user is a directory restricted user.
14906    pub is_directory_restricted: Option<bool>,
14907    /// URL for the photo representing the user, if one is set.
14908    pub profile_photo_url: Option<String>,
14909}
14910
14911impl MemberProfile {
14912    pub fn new(
14913        team_member_id: crate::types::team_common::TeamMemberId,
14914        email: String,
14915        email_verified: bool,
14916        status: TeamMemberStatus,
14917        name: crate::types::users::Name,
14918        membership_type: TeamMembershipType,
14919    ) -> Self {
14920        MemberProfile {
14921            team_member_id,
14922            email,
14923            email_verified,
14924            status,
14925            name,
14926            membership_type,
14927            external_id: None,
14928            account_id: None,
14929            secondary_emails: None,
14930            invited_on: None,
14931            joined_on: None,
14932            suspended_on: None,
14933            persistent_id: None,
14934            is_directory_restricted: None,
14935            profile_photo_url: None,
14936        }
14937    }
14938
14939    pub fn with_external_id(mut self, value: String) -> Self {
14940        self.external_id = Some(value);
14941        self
14942    }
14943
14944    pub fn with_account_id(mut self, value: crate::types::users_common::AccountId) -> Self {
14945        self.account_id = Some(value);
14946        self
14947    }
14948
14949    pub fn with_secondary_emails(
14950        mut self,
14951        value: Vec<crate::types::secondary_emails::SecondaryEmail>,
14952    ) -> Self {
14953        self.secondary_emails = Some(value);
14954        self
14955    }
14956
14957    pub fn with_invited_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14958        self.invited_on = Some(value);
14959        self
14960    }
14961
14962    pub fn with_joined_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14963        self.joined_on = Some(value);
14964        self
14965    }
14966
14967    pub fn with_suspended_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14968        self.suspended_on = Some(value);
14969        self
14970    }
14971
14972    pub fn with_persistent_id(mut self, value: String) -> Self {
14973        self.persistent_id = Some(value);
14974        self
14975    }
14976
14977    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
14978        self.is_directory_restricted = Some(value);
14979        self
14980    }
14981
14982    pub fn with_profile_photo_url(mut self, value: String) -> Self {
14983        self.profile_photo_url = Some(value);
14984        self
14985    }
14986}
14987
14988const MEMBER_PROFILE_FIELDS: &[&str] = &["team_member_id",
14989                                         "email",
14990                                         "email_verified",
14991                                         "status",
14992                                         "name",
14993                                         "membership_type",
14994                                         "external_id",
14995                                         "account_id",
14996                                         "secondary_emails",
14997                                         "invited_on",
14998                                         "joined_on",
14999                                         "suspended_on",
15000                                         "persistent_id",
15001                                         "is_directory_restricted",
15002                                         "profile_photo_url"];
15003impl MemberProfile {
15004    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15005        map: V,
15006    ) -> Result<MemberProfile, V::Error> {
15007        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15008    }
15009
15010    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15011        mut map: V,
15012        optional: bool,
15013    ) -> Result<Option<MemberProfile>, V::Error> {
15014        let mut field_team_member_id = None;
15015        let mut field_email = None;
15016        let mut field_email_verified = None;
15017        let mut field_status = None;
15018        let mut field_name = None;
15019        let mut field_membership_type = None;
15020        let mut field_external_id = None;
15021        let mut field_account_id = None;
15022        let mut field_secondary_emails = None;
15023        let mut field_invited_on = None;
15024        let mut field_joined_on = None;
15025        let mut field_suspended_on = None;
15026        let mut field_persistent_id = None;
15027        let mut field_is_directory_restricted = None;
15028        let mut field_profile_photo_url = None;
15029        let mut nothing = true;
15030        while let Some(key) = map.next_key::<&str>()? {
15031            nothing = false;
15032            match key {
15033                "team_member_id" => {
15034                    if field_team_member_id.is_some() {
15035                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
15036                    }
15037                    field_team_member_id = Some(map.next_value()?);
15038                }
15039                "email" => {
15040                    if field_email.is_some() {
15041                        return Err(::serde::de::Error::duplicate_field("email"));
15042                    }
15043                    field_email = Some(map.next_value()?);
15044                }
15045                "email_verified" => {
15046                    if field_email_verified.is_some() {
15047                        return Err(::serde::de::Error::duplicate_field("email_verified"));
15048                    }
15049                    field_email_verified = Some(map.next_value()?);
15050                }
15051                "status" => {
15052                    if field_status.is_some() {
15053                        return Err(::serde::de::Error::duplicate_field("status"));
15054                    }
15055                    field_status = Some(map.next_value()?);
15056                }
15057                "name" => {
15058                    if field_name.is_some() {
15059                        return Err(::serde::de::Error::duplicate_field("name"));
15060                    }
15061                    field_name = Some(map.next_value()?);
15062                }
15063                "membership_type" => {
15064                    if field_membership_type.is_some() {
15065                        return Err(::serde::de::Error::duplicate_field("membership_type"));
15066                    }
15067                    field_membership_type = Some(map.next_value()?);
15068                }
15069                "external_id" => {
15070                    if field_external_id.is_some() {
15071                        return Err(::serde::de::Error::duplicate_field("external_id"));
15072                    }
15073                    field_external_id = Some(map.next_value()?);
15074                }
15075                "account_id" => {
15076                    if field_account_id.is_some() {
15077                        return Err(::serde::de::Error::duplicate_field("account_id"));
15078                    }
15079                    field_account_id = Some(map.next_value()?);
15080                }
15081                "secondary_emails" => {
15082                    if field_secondary_emails.is_some() {
15083                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
15084                    }
15085                    field_secondary_emails = Some(map.next_value()?);
15086                }
15087                "invited_on" => {
15088                    if field_invited_on.is_some() {
15089                        return Err(::serde::de::Error::duplicate_field("invited_on"));
15090                    }
15091                    field_invited_on = Some(map.next_value()?);
15092                }
15093                "joined_on" => {
15094                    if field_joined_on.is_some() {
15095                        return Err(::serde::de::Error::duplicate_field("joined_on"));
15096                    }
15097                    field_joined_on = Some(map.next_value()?);
15098                }
15099                "suspended_on" => {
15100                    if field_suspended_on.is_some() {
15101                        return Err(::serde::de::Error::duplicate_field("suspended_on"));
15102                    }
15103                    field_suspended_on = Some(map.next_value()?);
15104                }
15105                "persistent_id" => {
15106                    if field_persistent_id.is_some() {
15107                        return Err(::serde::de::Error::duplicate_field("persistent_id"));
15108                    }
15109                    field_persistent_id = Some(map.next_value()?);
15110                }
15111                "is_directory_restricted" => {
15112                    if field_is_directory_restricted.is_some() {
15113                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
15114                    }
15115                    field_is_directory_restricted = Some(map.next_value()?);
15116                }
15117                "profile_photo_url" => {
15118                    if field_profile_photo_url.is_some() {
15119                        return Err(::serde::de::Error::duplicate_field("profile_photo_url"));
15120                    }
15121                    field_profile_photo_url = Some(map.next_value()?);
15122                }
15123                _ => {
15124                    // unknown field allowed and ignored
15125                    map.next_value::<::serde_json::Value>()?;
15126                }
15127            }
15128        }
15129        if optional && nothing {
15130            return Ok(None);
15131        }
15132        let result = MemberProfile {
15133            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
15134            email: field_email.ok_or_else(|| ::serde::de::Error::missing_field("email"))?,
15135            email_verified: field_email_verified.ok_or_else(|| ::serde::de::Error::missing_field("email_verified"))?,
15136            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
15137            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
15138            membership_type: field_membership_type.ok_or_else(|| ::serde::de::Error::missing_field("membership_type"))?,
15139            external_id: field_external_id.and_then(Option::flatten),
15140            account_id: field_account_id.and_then(Option::flatten),
15141            secondary_emails: field_secondary_emails.and_then(Option::flatten),
15142            invited_on: field_invited_on.and_then(Option::flatten),
15143            joined_on: field_joined_on.and_then(Option::flatten),
15144            suspended_on: field_suspended_on.and_then(Option::flatten),
15145            persistent_id: field_persistent_id.and_then(Option::flatten),
15146            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
15147            profile_photo_url: field_profile_photo_url.and_then(Option::flatten),
15148        };
15149        Ok(Some(result))
15150    }
15151
15152    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15153        &self,
15154        s: &mut S::SerializeStruct,
15155    ) -> Result<(), S::Error> {
15156        use serde::ser::SerializeStruct;
15157        s.serialize_field("team_member_id", &self.team_member_id)?;
15158        s.serialize_field("email", &self.email)?;
15159        s.serialize_field("email_verified", &self.email_verified)?;
15160        s.serialize_field("status", &self.status)?;
15161        s.serialize_field("name", &self.name)?;
15162        s.serialize_field("membership_type", &self.membership_type)?;
15163        if let Some(val) = &self.external_id {
15164            s.serialize_field("external_id", val)?;
15165        }
15166        if let Some(val) = &self.account_id {
15167            s.serialize_field("account_id", val)?;
15168        }
15169        if let Some(val) = &self.secondary_emails {
15170            s.serialize_field("secondary_emails", val)?;
15171        }
15172        if let Some(val) = &self.invited_on {
15173            s.serialize_field("invited_on", val)?;
15174        }
15175        if let Some(val) = &self.joined_on {
15176            s.serialize_field("joined_on", val)?;
15177        }
15178        if let Some(val) = &self.suspended_on {
15179            s.serialize_field("suspended_on", val)?;
15180        }
15181        if let Some(val) = &self.persistent_id {
15182            s.serialize_field("persistent_id", val)?;
15183        }
15184        if let Some(val) = &self.is_directory_restricted {
15185            s.serialize_field("is_directory_restricted", val)?;
15186        }
15187        if let Some(val) = &self.profile_photo_url {
15188            s.serialize_field("profile_photo_url", val)?;
15189        }
15190        Ok(())
15191    }
15192}
15193
15194impl<'de> ::serde::de::Deserialize<'de> for MemberProfile {
15195    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15196        // struct deserializer
15197        use serde::de::{MapAccess, Visitor};
15198        struct StructVisitor;
15199        impl<'de> Visitor<'de> for StructVisitor {
15200            type Value = MemberProfile;
15201            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15202                f.write_str("a MemberProfile struct")
15203            }
15204            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15205                MemberProfile::internal_deserialize(map)
15206            }
15207        }
15208        deserializer.deserialize_struct("MemberProfile", MEMBER_PROFILE_FIELDS, StructVisitor)
15209    }
15210}
15211
15212impl ::serde::ser::Serialize for MemberProfile {
15213    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15214        // struct serializer
15215        use serde::ser::SerializeStruct;
15216        let mut s = serializer.serialize_struct("MemberProfile", 15)?;
15217        self.internal_serialize::<S>(&mut s)?;
15218        s.end()
15219    }
15220}
15221
15222#[derive(Debug, Clone, PartialEq, Eq)]
15223pub enum MemberSelectorError {
15224    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
15225    /// this team.
15226    UserNotFound,
15227    /// The user is not a member of the team.
15228    UserNotInTeam,
15229}
15230
15231impl<'de> ::serde::de::Deserialize<'de> for MemberSelectorError {
15232    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15233        // union deserializer
15234        use serde::de::{self, MapAccess, Visitor};
15235        struct EnumVisitor;
15236        impl<'de> Visitor<'de> for EnumVisitor {
15237            type Value = MemberSelectorError;
15238            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15239                f.write_str("a MemberSelectorError structure")
15240            }
15241            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15242                let tag: &str = match map.next_key()? {
15243                    Some(".tag") => map.next_value()?,
15244                    _ => return Err(de::Error::missing_field(".tag"))
15245                };
15246                let value = match tag {
15247                    "user_not_found" => MemberSelectorError::UserNotFound,
15248                    "user_not_in_team" => MemberSelectorError::UserNotInTeam,
15249                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15250                };
15251                crate::eat_json_fields(&mut map)?;
15252                Ok(value)
15253            }
15254        }
15255        const VARIANTS: &[&str] = &["user_not_found",
15256                                    "user_not_in_team"];
15257        deserializer.deserialize_struct("MemberSelectorError", VARIANTS, EnumVisitor)
15258    }
15259}
15260
15261impl ::serde::ser::Serialize for MemberSelectorError {
15262    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15263        // union serializer
15264        use serde::ser::SerializeStruct;
15265        match self {
15266            MemberSelectorError::UserNotFound => {
15267                // unit
15268                let mut s = serializer.serialize_struct("MemberSelectorError", 1)?;
15269                s.serialize_field(".tag", "user_not_found")?;
15270                s.end()
15271            }
15272            MemberSelectorError::UserNotInTeam => {
15273                // unit
15274                let mut s = serializer.serialize_struct("MemberSelectorError", 1)?;
15275                s.serialize_field(".tag", "user_not_in_team")?;
15276                s.end()
15277            }
15278        }
15279    }
15280}
15281
15282impl ::std::error::Error for MemberSelectorError {
15283}
15284
15285impl ::std::fmt::Display for MemberSelectorError {
15286    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15287        match self {
15288            MemberSelectorError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
15289            MemberSelectorError::UserNotInTeam => f.write_str("The user is not a member of the team."),
15290        }
15291    }
15292}
15293
15294// union extends UserSelectorError
15295impl From<UserSelectorError> for MemberSelectorError {
15296    fn from(parent: UserSelectorError) -> Self {
15297        match parent {
15298            UserSelectorError::UserNotFound => MemberSelectorError::UserNotFound,
15299        }
15300    }
15301}
15302#[derive(Debug, Clone, PartialEq, Eq)]
15303#[non_exhaustive] // structs may have more fields added in the future.
15304pub struct MembersAddArg {
15305    /// Details of new members to be added to the team.
15306    pub new_members: Vec<MemberAddArg>,
15307    /// Whether to force the add to happen asynchronously.
15308    pub force_async: bool,
15309}
15310
15311impl MembersAddArg {
15312    pub fn new(new_members: Vec<MemberAddArg>) -> Self {
15313        MembersAddArg {
15314            new_members,
15315            force_async: false,
15316        }
15317    }
15318
15319    pub fn with_force_async(mut self, value: bool) -> Self {
15320        self.force_async = value;
15321        self
15322    }
15323}
15324
15325const MEMBERS_ADD_ARG_FIELDS: &[&str] = &["new_members",
15326                                          "force_async"];
15327impl MembersAddArg {
15328    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15329        map: V,
15330    ) -> Result<MembersAddArg, V::Error> {
15331        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15332    }
15333
15334    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15335        mut map: V,
15336        optional: bool,
15337    ) -> Result<Option<MembersAddArg>, V::Error> {
15338        let mut field_new_members = None;
15339        let mut field_force_async = None;
15340        let mut nothing = true;
15341        while let Some(key) = map.next_key::<&str>()? {
15342            nothing = false;
15343            match key {
15344                "new_members" => {
15345                    if field_new_members.is_some() {
15346                        return Err(::serde::de::Error::duplicate_field("new_members"));
15347                    }
15348                    field_new_members = Some(map.next_value()?);
15349                }
15350                "force_async" => {
15351                    if field_force_async.is_some() {
15352                        return Err(::serde::de::Error::duplicate_field("force_async"));
15353                    }
15354                    field_force_async = Some(map.next_value()?);
15355                }
15356                _ => {
15357                    // unknown field allowed and ignored
15358                    map.next_value::<::serde_json::Value>()?;
15359                }
15360            }
15361        }
15362        if optional && nothing {
15363            return Ok(None);
15364        }
15365        let result = MembersAddArg {
15366            new_members: field_new_members.ok_or_else(|| ::serde::de::Error::missing_field("new_members"))?,
15367            force_async: field_force_async.unwrap_or(false),
15368        };
15369        Ok(Some(result))
15370    }
15371
15372    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15373        &self,
15374        s: &mut S::SerializeStruct,
15375    ) -> Result<(), S::Error> {
15376        use serde::ser::SerializeStruct;
15377        s.serialize_field("new_members", &self.new_members)?;
15378        if self.force_async {
15379            s.serialize_field("force_async", &self.force_async)?;
15380        }
15381        Ok(())
15382    }
15383}
15384
15385impl<'de> ::serde::de::Deserialize<'de> for MembersAddArg {
15386    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15387        // struct deserializer
15388        use serde::de::{MapAccess, Visitor};
15389        struct StructVisitor;
15390        impl<'de> Visitor<'de> for StructVisitor {
15391            type Value = MembersAddArg;
15392            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15393                f.write_str("a MembersAddArg struct")
15394            }
15395            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15396                MembersAddArg::internal_deserialize(map)
15397            }
15398        }
15399        deserializer.deserialize_struct("MembersAddArg", MEMBERS_ADD_ARG_FIELDS, StructVisitor)
15400    }
15401}
15402
15403impl ::serde::ser::Serialize for MembersAddArg {
15404    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15405        // struct serializer
15406        use serde::ser::SerializeStruct;
15407        let mut s = serializer.serialize_struct("MembersAddArg", 2)?;
15408        self.internal_serialize::<S>(&mut s)?;
15409        s.end()
15410    }
15411}
15412
15413// struct extends MembersAddArgBase
15414impl From<MembersAddArg> for MembersAddArgBase {
15415    fn from(subtype: MembersAddArg) -> Self {
15416        Self {
15417            force_async: subtype.force_async,
15418        }
15419    }
15420}
15421#[derive(Debug, Clone, PartialEq, Eq, Default)]
15422#[non_exhaustive] // structs may have more fields added in the future.
15423pub struct MembersAddArgBase {
15424    /// Whether to force the add to happen asynchronously.
15425    pub force_async: bool,
15426}
15427
15428impl MembersAddArgBase {
15429    pub fn with_force_async(mut self, value: bool) -> Self {
15430        self.force_async = value;
15431        self
15432    }
15433}
15434
15435const MEMBERS_ADD_ARG_BASE_FIELDS: &[&str] = &["force_async"];
15436impl MembersAddArgBase {
15437    // no _opt deserializer
15438    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15439        mut map: V,
15440    ) -> Result<MembersAddArgBase, V::Error> {
15441        let mut field_force_async = None;
15442        while let Some(key) = map.next_key::<&str>()? {
15443            match key {
15444                "force_async" => {
15445                    if field_force_async.is_some() {
15446                        return Err(::serde::de::Error::duplicate_field("force_async"));
15447                    }
15448                    field_force_async = Some(map.next_value()?);
15449                }
15450                _ => {
15451                    // unknown field allowed and ignored
15452                    map.next_value::<::serde_json::Value>()?;
15453                }
15454            }
15455        }
15456        let result = MembersAddArgBase {
15457            force_async: field_force_async.unwrap_or(false),
15458        };
15459        Ok(result)
15460    }
15461
15462    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15463        &self,
15464        s: &mut S::SerializeStruct,
15465    ) -> Result<(), S::Error> {
15466        use serde::ser::SerializeStruct;
15467        if self.force_async {
15468            s.serialize_field("force_async", &self.force_async)?;
15469        }
15470        Ok(())
15471    }
15472}
15473
15474impl<'de> ::serde::de::Deserialize<'de> for MembersAddArgBase {
15475    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15476        // struct deserializer
15477        use serde::de::{MapAccess, Visitor};
15478        struct StructVisitor;
15479        impl<'de> Visitor<'de> for StructVisitor {
15480            type Value = MembersAddArgBase;
15481            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15482                f.write_str("a MembersAddArgBase struct")
15483            }
15484            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15485                MembersAddArgBase::internal_deserialize(map)
15486            }
15487        }
15488        deserializer.deserialize_struct("MembersAddArgBase", MEMBERS_ADD_ARG_BASE_FIELDS, StructVisitor)
15489    }
15490}
15491
15492impl ::serde::ser::Serialize for MembersAddArgBase {
15493    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15494        // struct serializer
15495        use serde::ser::SerializeStruct;
15496        let mut s = serializer.serialize_struct("MembersAddArgBase", 1)?;
15497        self.internal_serialize::<S>(&mut s)?;
15498        s.end()
15499    }
15500}
15501
15502#[derive(Debug, Clone, PartialEq, Eq)]
15503pub enum MembersAddJobStatus {
15504    /// The asynchronous job is still in progress.
15505    InProgress,
15506    /// The asynchronous job has finished. For each member that was specified in the parameter
15507    /// [`MembersAddArg`] that was provided to [`members_add()`](crate::team::members_add), a
15508    /// corresponding item is returned in this list.
15509    Complete(Vec<MemberAddResult>),
15510    /// The asynchronous job returned an error. The string contains an error message.
15511    Failed(String),
15512}
15513
15514impl<'de> ::serde::de::Deserialize<'de> for MembersAddJobStatus {
15515    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15516        // union deserializer
15517        use serde::de::{self, MapAccess, Visitor};
15518        struct EnumVisitor;
15519        impl<'de> Visitor<'de> for EnumVisitor {
15520            type Value = MembersAddJobStatus;
15521            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15522                f.write_str("a MembersAddJobStatus structure")
15523            }
15524            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15525                let tag: &str = match map.next_key()? {
15526                    Some(".tag") => map.next_value()?,
15527                    _ => return Err(de::Error::missing_field(".tag"))
15528                };
15529                let value = match tag {
15530                    "in_progress" => MembersAddJobStatus::InProgress,
15531                    "complete" => {
15532                        match map.next_key()? {
15533                            Some("complete") => MembersAddJobStatus::Complete(map.next_value()?),
15534                            None => return Err(de::Error::missing_field("complete")),
15535                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15536                        }
15537                    }
15538                    "failed" => {
15539                        match map.next_key()? {
15540                            Some("failed") => MembersAddJobStatus::Failed(map.next_value()?),
15541                            None => return Err(de::Error::missing_field("failed")),
15542                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15543                        }
15544                    }
15545                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15546                };
15547                crate::eat_json_fields(&mut map)?;
15548                Ok(value)
15549            }
15550        }
15551        const VARIANTS: &[&str] = &["in_progress",
15552                                    "complete",
15553                                    "failed"];
15554        deserializer.deserialize_struct("MembersAddJobStatus", VARIANTS, EnumVisitor)
15555    }
15556}
15557
15558impl ::serde::ser::Serialize for MembersAddJobStatus {
15559    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15560        // union serializer
15561        use serde::ser::SerializeStruct;
15562        match self {
15563            MembersAddJobStatus::InProgress => {
15564                // unit
15565                let mut s = serializer.serialize_struct("MembersAddJobStatus", 1)?;
15566                s.serialize_field(".tag", "in_progress")?;
15567                s.end()
15568            }
15569            MembersAddJobStatus::Complete(x) => {
15570                // primitive
15571                let mut s = serializer.serialize_struct("MembersAddJobStatus", 2)?;
15572                s.serialize_field(".tag", "complete")?;
15573                s.serialize_field("complete", x)?;
15574                s.end()
15575            }
15576            MembersAddJobStatus::Failed(x) => {
15577                // primitive
15578                let mut s = serializer.serialize_struct("MembersAddJobStatus", 2)?;
15579                s.serialize_field(".tag", "failed")?;
15580                s.serialize_field("failed", x)?;
15581                s.end()
15582            }
15583        }
15584    }
15585}
15586
15587// union extends crate::types::dbx_async::PollResultBase
15588impl From<crate::types::dbx_async::PollResultBase> for MembersAddJobStatus {
15589    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
15590        match parent {
15591            crate::types::dbx_async::PollResultBase::InProgress => MembersAddJobStatus::InProgress,
15592        }
15593    }
15594}
15595#[derive(Debug, Clone, PartialEq, Eq)]
15596#[non_exhaustive] // variants may be added in the future
15597pub enum MembersAddJobStatusV2Result {
15598    /// The asynchronous job is still in progress.
15599    InProgress,
15600    /// The asynchronous job has finished. For each member that was specified in the parameter
15601    /// [`MembersAddArg`] that was provided to [`members_add_v2()`](crate::team::members_add_v2), a
15602    /// corresponding item is returned in this list.
15603    Complete(Vec<MemberAddV2Result>),
15604    /// The asynchronous job returned an error. The string contains an error message.
15605    Failed(String),
15606    /// Catch-all used for unrecognized values returned from the server. Encountering this value
15607    /// typically indicates that this SDK version is out of date.
15608    Other,
15609}
15610
15611impl<'de> ::serde::de::Deserialize<'de> for MembersAddJobStatusV2Result {
15612    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15613        // union deserializer
15614        use serde::de::{self, MapAccess, Visitor};
15615        struct EnumVisitor;
15616        impl<'de> Visitor<'de> for EnumVisitor {
15617            type Value = MembersAddJobStatusV2Result;
15618            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15619                f.write_str("a MembersAddJobStatusV2Result structure")
15620            }
15621            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15622                let tag: &str = match map.next_key()? {
15623                    Some(".tag") => map.next_value()?,
15624                    _ => return Err(de::Error::missing_field(".tag"))
15625                };
15626                let value = match tag {
15627                    "in_progress" => MembersAddJobStatusV2Result::InProgress,
15628                    "complete" => {
15629                        match map.next_key()? {
15630                            Some("complete") => MembersAddJobStatusV2Result::Complete(map.next_value()?),
15631                            None => return Err(de::Error::missing_field("complete")),
15632                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15633                        }
15634                    }
15635                    "failed" => {
15636                        match map.next_key()? {
15637                            Some("failed") => MembersAddJobStatusV2Result::Failed(map.next_value()?),
15638                            None => return Err(de::Error::missing_field("failed")),
15639                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15640                        }
15641                    }
15642                    _ => MembersAddJobStatusV2Result::Other,
15643                };
15644                crate::eat_json_fields(&mut map)?;
15645                Ok(value)
15646            }
15647        }
15648        const VARIANTS: &[&str] = &["in_progress",
15649                                    "complete",
15650                                    "failed",
15651                                    "other"];
15652        deserializer.deserialize_struct("MembersAddJobStatusV2Result", VARIANTS, EnumVisitor)
15653    }
15654}
15655
15656impl ::serde::ser::Serialize for MembersAddJobStatusV2Result {
15657    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15658        // union serializer
15659        use serde::ser::SerializeStruct;
15660        match self {
15661            MembersAddJobStatusV2Result::InProgress => {
15662                // unit
15663                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 1)?;
15664                s.serialize_field(".tag", "in_progress")?;
15665                s.end()
15666            }
15667            MembersAddJobStatusV2Result::Complete(x) => {
15668                // primitive
15669                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 2)?;
15670                s.serialize_field(".tag", "complete")?;
15671                s.serialize_field("complete", x)?;
15672                s.end()
15673            }
15674            MembersAddJobStatusV2Result::Failed(x) => {
15675                // primitive
15676                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 2)?;
15677                s.serialize_field(".tag", "failed")?;
15678                s.serialize_field("failed", x)?;
15679                s.end()
15680            }
15681            MembersAddJobStatusV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
15682        }
15683    }
15684}
15685
15686// union extends crate::types::dbx_async::PollResultBase
15687impl From<crate::types::dbx_async::PollResultBase> for MembersAddJobStatusV2Result {
15688    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
15689        match parent {
15690            crate::types::dbx_async::PollResultBase::InProgress => MembersAddJobStatusV2Result::InProgress,
15691        }
15692    }
15693}
15694#[derive(Debug, Clone, PartialEq, Eq)]
15695pub enum MembersAddLaunch {
15696    /// This response indicates that the processing is asynchronous. The string is an id that can be
15697    /// used to obtain the status of the asynchronous job.
15698    AsyncJobId(crate::types::dbx_async::AsyncJobId),
15699    Complete(Vec<MemberAddResult>),
15700}
15701
15702impl<'de> ::serde::de::Deserialize<'de> for MembersAddLaunch {
15703    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15704        // union deserializer
15705        use serde::de::{self, MapAccess, Visitor};
15706        struct EnumVisitor;
15707        impl<'de> Visitor<'de> for EnumVisitor {
15708            type Value = MembersAddLaunch;
15709            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15710                f.write_str("a MembersAddLaunch structure")
15711            }
15712            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15713                let tag: &str = match map.next_key()? {
15714                    Some(".tag") => map.next_value()?,
15715                    _ => return Err(de::Error::missing_field(".tag"))
15716                };
15717                let value = match tag {
15718                    "async_job_id" => {
15719                        match map.next_key()? {
15720                            Some("async_job_id") => MembersAddLaunch::AsyncJobId(map.next_value()?),
15721                            None => return Err(de::Error::missing_field("async_job_id")),
15722                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15723                        }
15724                    }
15725                    "complete" => {
15726                        match map.next_key()? {
15727                            Some("complete") => MembersAddLaunch::Complete(map.next_value()?),
15728                            None => return Err(de::Error::missing_field("complete")),
15729                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15730                        }
15731                    }
15732                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15733                };
15734                crate::eat_json_fields(&mut map)?;
15735                Ok(value)
15736            }
15737        }
15738        const VARIANTS: &[&str] = &["async_job_id",
15739                                    "complete"];
15740        deserializer.deserialize_struct("MembersAddLaunch", VARIANTS, EnumVisitor)
15741    }
15742}
15743
15744impl ::serde::ser::Serialize for MembersAddLaunch {
15745    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15746        // union serializer
15747        use serde::ser::SerializeStruct;
15748        match self {
15749            MembersAddLaunch::AsyncJobId(x) => {
15750                // primitive
15751                let mut s = serializer.serialize_struct("MembersAddLaunch", 2)?;
15752                s.serialize_field(".tag", "async_job_id")?;
15753                s.serialize_field("async_job_id", x)?;
15754                s.end()
15755            }
15756            MembersAddLaunch::Complete(x) => {
15757                // primitive
15758                let mut s = serializer.serialize_struct("MembersAddLaunch", 2)?;
15759                s.serialize_field(".tag", "complete")?;
15760                s.serialize_field("complete", x)?;
15761                s.end()
15762            }
15763        }
15764    }
15765}
15766
15767// union extends crate::types::dbx_async::LaunchResultBase
15768impl From<crate::types::dbx_async::LaunchResultBase> for MembersAddLaunch {
15769    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
15770        match parent {
15771            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => MembersAddLaunch::AsyncJobId(x),
15772        }
15773    }
15774}
15775#[derive(Debug, Clone, PartialEq, Eq)]
15776#[non_exhaustive] // variants may be added in the future
15777pub enum MembersAddLaunchV2Result {
15778    /// This response indicates that the processing is asynchronous. The string is an id that can be
15779    /// used to obtain the status of the asynchronous job.
15780    AsyncJobId(crate::types::dbx_async::AsyncJobId),
15781    Complete(Vec<MemberAddV2Result>),
15782    /// Catch-all used for unrecognized values returned from the server. Encountering this value
15783    /// typically indicates that this SDK version is out of date.
15784    Other,
15785}
15786
15787impl<'de> ::serde::de::Deserialize<'de> for MembersAddLaunchV2Result {
15788    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15789        // union deserializer
15790        use serde::de::{self, MapAccess, Visitor};
15791        struct EnumVisitor;
15792        impl<'de> Visitor<'de> for EnumVisitor {
15793            type Value = MembersAddLaunchV2Result;
15794            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15795                f.write_str("a MembersAddLaunchV2Result structure")
15796            }
15797            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15798                let tag: &str = match map.next_key()? {
15799                    Some(".tag") => map.next_value()?,
15800                    _ => return Err(de::Error::missing_field(".tag"))
15801                };
15802                let value = match tag {
15803                    "async_job_id" => {
15804                        match map.next_key()? {
15805                            Some("async_job_id") => MembersAddLaunchV2Result::AsyncJobId(map.next_value()?),
15806                            None => return Err(de::Error::missing_field("async_job_id")),
15807                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15808                        }
15809                    }
15810                    "complete" => {
15811                        match map.next_key()? {
15812                            Some("complete") => MembersAddLaunchV2Result::Complete(map.next_value()?),
15813                            None => return Err(de::Error::missing_field("complete")),
15814                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15815                        }
15816                    }
15817                    _ => MembersAddLaunchV2Result::Other,
15818                };
15819                crate::eat_json_fields(&mut map)?;
15820                Ok(value)
15821            }
15822        }
15823        const VARIANTS: &[&str] = &["async_job_id",
15824                                    "complete",
15825                                    "other"];
15826        deserializer.deserialize_struct("MembersAddLaunchV2Result", VARIANTS, EnumVisitor)
15827    }
15828}
15829
15830impl ::serde::ser::Serialize for MembersAddLaunchV2Result {
15831    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15832        // union serializer
15833        use serde::ser::SerializeStruct;
15834        match self {
15835            MembersAddLaunchV2Result::AsyncJobId(x) => {
15836                // primitive
15837                let mut s = serializer.serialize_struct("MembersAddLaunchV2Result", 2)?;
15838                s.serialize_field(".tag", "async_job_id")?;
15839                s.serialize_field("async_job_id", x)?;
15840                s.end()
15841            }
15842            MembersAddLaunchV2Result::Complete(x) => {
15843                // primitive
15844                let mut s = serializer.serialize_struct("MembersAddLaunchV2Result", 2)?;
15845                s.serialize_field(".tag", "complete")?;
15846                s.serialize_field("complete", x)?;
15847                s.end()
15848            }
15849            MembersAddLaunchV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
15850        }
15851    }
15852}
15853
15854// union extends crate::types::dbx_async::LaunchResultBase
15855impl From<crate::types::dbx_async::LaunchResultBase> for MembersAddLaunchV2Result {
15856    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
15857        match parent {
15858            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => MembersAddLaunchV2Result::AsyncJobId(x),
15859        }
15860    }
15861}
15862#[derive(Debug, Clone, PartialEq, Eq)]
15863#[non_exhaustive] // structs may have more fields added in the future.
15864pub struct MembersAddV2Arg {
15865    /// Details of new members to be added to the team.
15866    pub new_members: Vec<MemberAddV2Arg>,
15867    /// Whether to force the add to happen asynchronously.
15868    pub force_async: bool,
15869}
15870
15871impl MembersAddV2Arg {
15872    pub fn new(new_members: Vec<MemberAddV2Arg>) -> Self {
15873        MembersAddV2Arg {
15874            new_members,
15875            force_async: false,
15876        }
15877    }
15878
15879    pub fn with_force_async(mut self, value: bool) -> Self {
15880        self.force_async = value;
15881        self
15882    }
15883}
15884
15885const MEMBERS_ADD_V2_ARG_FIELDS: &[&str] = &["new_members",
15886                                             "force_async"];
15887impl MembersAddV2Arg {
15888    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15889        map: V,
15890    ) -> Result<MembersAddV2Arg, V::Error> {
15891        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15892    }
15893
15894    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15895        mut map: V,
15896        optional: bool,
15897    ) -> Result<Option<MembersAddV2Arg>, V::Error> {
15898        let mut field_new_members = None;
15899        let mut field_force_async = None;
15900        let mut nothing = true;
15901        while let Some(key) = map.next_key::<&str>()? {
15902            nothing = false;
15903            match key {
15904                "new_members" => {
15905                    if field_new_members.is_some() {
15906                        return Err(::serde::de::Error::duplicate_field("new_members"));
15907                    }
15908                    field_new_members = Some(map.next_value()?);
15909                }
15910                "force_async" => {
15911                    if field_force_async.is_some() {
15912                        return Err(::serde::de::Error::duplicate_field("force_async"));
15913                    }
15914                    field_force_async = Some(map.next_value()?);
15915                }
15916                _ => {
15917                    // unknown field allowed and ignored
15918                    map.next_value::<::serde_json::Value>()?;
15919                }
15920            }
15921        }
15922        if optional && nothing {
15923            return Ok(None);
15924        }
15925        let result = MembersAddV2Arg {
15926            new_members: field_new_members.ok_or_else(|| ::serde::de::Error::missing_field("new_members"))?,
15927            force_async: field_force_async.unwrap_or(false),
15928        };
15929        Ok(Some(result))
15930    }
15931
15932    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15933        &self,
15934        s: &mut S::SerializeStruct,
15935    ) -> Result<(), S::Error> {
15936        use serde::ser::SerializeStruct;
15937        s.serialize_field("new_members", &self.new_members)?;
15938        if self.force_async {
15939            s.serialize_field("force_async", &self.force_async)?;
15940        }
15941        Ok(())
15942    }
15943}
15944
15945impl<'de> ::serde::de::Deserialize<'de> for MembersAddV2Arg {
15946    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15947        // struct deserializer
15948        use serde::de::{MapAccess, Visitor};
15949        struct StructVisitor;
15950        impl<'de> Visitor<'de> for StructVisitor {
15951            type Value = MembersAddV2Arg;
15952            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15953                f.write_str("a MembersAddV2Arg struct")
15954            }
15955            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15956                MembersAddV2Arg::internal_deserialize(map)
15957            }
15958        }
15959        deserializer.deserialize_struct("MembersAddV2Arg", MEMBERS_ADD_V2_ARG_FIELDS, StructVisitor)
15960    }
15961}
15962
15963impl ::serde::ser::Serialize for MembersAddV2Arg {
15964    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15965        // struct serializer
15966        use serde::ser::SerializeStruct;
15967        let mut s = serializer.serialize_struct("MembersAddV2Arg", 2)?;
15968        self.internal_serialize::<S>(&mut s)?;
15969        s.end()
15970    }
15971}
15972
15973// struct extends MembersAddArgBase
15974impl From<MembersAddV2Arg> for MembersAddArgBase {
15975    fn from(subtype: MembersAddV2Arg) -> Self {
15976        Self {
15977            force_async: subtype.force_async,
15978        }
15979    }
15980}
15981#[derive(Debug, Clone, PartialEq, Eq)]
15982#[non_exhaustive] // structs may have more fields added in the future.
15983pub struct MembersDataTransferArg {
15984    /// Identity of user to remove/suspend/have their files moved.
15985    pub user: UserSelectorArg,
15986    /// Files from the deleted member account will be transferred to this user.
15987    pub transfer_dest_id: UserSelectorArg,
15988    /// Errors during the transfer process will be sent via email to this user.
15989    pub transfer_admin_id: UserSelectorArg,
15990}
15991
15992impl MembersDataTransferArg {
15993    pub fn new(
15994        user: UserSelectorArg,
15995        transfer_dest_id: UserSelectorArg,
15996        transfer_admin_id: UserSelectorArg,
15997    ) -> Self {
15998        MembersDataTransferArg {
15999            user,
16000            transfer_dest_id,
16001            transfer_admin_id,
16002        }
16003    }
16004}
16005
16006const MEMBERS_DATA_TRANSFER_ARG_FIELDS: &[&str] = &["user",
16007                                                    "transfer_dest_id",
16008                                                    "transfer_admin_id"];
16009impl MembersDataTransferArg {
16010    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16011        map: V,
16012    ) -> Result<MembersDataTransferArg, V::Error> {
16013        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16014    }
16015
16016    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16017        mut map: V,
16018        optional: bool,
16019    ) -> Result<Option<MembersDataTransferArg>, V::Error> {
16020        let mut field_user = None;
16021        let mut field_transfer_dest_id = None;
16022        let mut field_transfer_admin_id = None;
16023        let mut nothing = true;
16024        while let Some(key) = map.next_key::<&str>()? {
16025            nothing = false;
16026            match key {
16027                "user" => {
16028                    if field_user.is_some() {
16029                        return Err(::serde::de::Error::duplicate_field("user"));
16030                    }
16031                    field_user = Some(map.next_value()?);
16032                }
16033                "transfer_dest_id" => {
16034                    if field_transfer_dest_id.is_some() {
16035                        return Err(::serde::de::Error::duplicate_field("transfer_dest_id"));
16036                    }
16037                    field_transfer_dest_id = Some(map.next_value()?);
16038                }
16039                "transfer_admin_id" => {
16040                    if field_transfer_admin_id.is_some() {
16041                        return Err(::serde::de::Error::duplicate_field("transfer_admin_id"));
16042                    }
16043                    field_transfer_admin_id = Some(map.next_value()?);
16044                }
16045                _ => {
16046                    // unknown field allowed and ignored
16047                    map.next_value::<::serde_json::Value>()?;
16048                }
16049            }
16050        }
16051        if optional && nothing {
16052            return Ok(None);
16053        }
16054        let result = MembersDataTransferArg {
16055            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16056            transfer_dest_id: field_transfer_dest_id.ok_or_else(|| ::serde::de::Error::missing_field("transfer_dest_id"))?,
16057            transfer_admin_id: field_transfer_admin_id.ok_or_else(|| ::serde::de::Error::missing_field("transfer_admin_id"))?,
16058        };
16059        Ok(Some(result))
16060    }
16061
16062    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16063        &self,
16064        s: &mut S::SerializeStruct,
16065    ) -> Result<(), S::Error> {
16066        use serde::ser::SerializeStruct;
16067        s.serialize_field("user", &self.user)?;
16068        s.serialize_field("transfer_dest_id", &self.transfer_dest_id)?;
16069        s.serialize_field("transfer_admin_id", &self.transfer_admin_id)?;
16070        Ok(())
16071    }
16072}
16073
16074impl<'de> ::serde::de::Deserialize<'de> for MembersDataTransferArg {
16075    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16076        // struct deserializer
16077        use serde::de::{MapAccess, Visitor};
16078        struct StructVisitor;
16079        impl<'de> Visitor<'de> for StructVisitor {
16080            type Value = MembersDataTransferArg;
16081            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16082                f.write_str("a MembersDataTransferArg struct")
16083            }
16084            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16085                MembersDataTransferArg::internal_deserialize(map)
16086            }
16087        }
16088        deserializer.deserialize_struct("MembersDataTransferArg", MEMBERS_DATA_TRANSFER_ARG_FIELDS, StructVisitor)
16089    }
16090}
16091
16092impl ::serde::ser::Serialize for MembersDataTransferArg {
16093    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16094        // struct serializer
16095        use serde::ser::SerializeStruct;
16096        let mut s = serializer.serialize_struct("MembersDataTransferArg", 3)?;
16097        self.internal_serialize::<S>(&mut s)?;
16098        s.end()
16099    }
16100}
16101
16102// struct extends MembersDeactivateBaseArg
16103impl From<MembersDataTransferArg> for MembersDeactivateBaseArg {
16104    fn from(subtype: MembersDataTransferArg) -> Self {
16105        Self {
16106            user: subtype.user,
16107        }
16108    }
16109}
16110#[derive(Debug, Clone, PartialEq, Eq)]
16111#[non_exhaustive] // structs may have more fields added in the future.
16112pub struct MembersDeactivateArg {
16113    /// Identity of user to remove/suspend/have their files moved.
16114    pub user: UserSelectorArg,
16115    /// If provided, controls if the user's data will be deleted on their linked devices.
16116    pub wipe_data: bool,
16117}
16118
16119impl MembersDeactivateArg {
16120    pub fn new(user: UserSelectorArg) -> Self {
16121        MembersDeactivateArg {
16122            user,
16123            wipe_data: true,
16124        }
16125    }
16126
16127    pub fn with_wipe_data(mut self, value: bool) -> Self {
16128        self.wipe_data = value;
16129        self
16130    }
16131}
16132
16133const MEMBERS_DEACTIVATE_ARG_FIELDS: &[&str] = &["user",
16134                                                 "wipe_data"];
16135impl MembersDeactivateArg {
16136    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16137        map: V,
16138    ) -> Result<MembersDeactivateArg, V::Error> {
16139        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16140    }
16141
16142    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16143        mut map: V,
16144        optional: bool,
16145    ) -> Result<Option<MembersDeactivateArg>, V::Error> {
16146        let mut field_user = None;
16147        let mut field_wipe_data = None;
16148        let mut nothing = true;
16149        while let Some(key) = map.next_key::<&str>()? {
16150            nothing = false;
16151            match key {
16152                "user" => {
16153                    if field_user.is_some() {
16154                        return Err(::serde::de::Error::duplicate_field("user"));
16155                    }
16156                    field_user = Some(map.next_value()?);
16157                }
16158                "wipe_data" => {
16159                    if field_wipe_data.is_some() {
16160                        return Err(::serde::de::Error::duplicate_field("wipe_data"));
16161                    }
16162                    field_wipe_data = Some(map.next_value()?);
16163                }
16164                _ => {
16165                    // unknown field allowed and ignored
16166                    map.next_value::<::serde_json::Value>()?;
16167                }
16168            }
16169        }
16170        if optional && nothing {
16171            return Ok(None);
16172        }
16173        let result = MembersDeactivateArg {
16174            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16175            wipe_data: field_wipe_data.unwrap_or(true),
16176        };
16177        Ok(Some(result))
16178    }
16179
16180    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16181        &self,
16182        s: &mut S::SerializeStruct,
16183    ) -> Result<(), S::Error> {
16184        use serde::ser::SerializeStruct;
16185        s.serialize_field("user", &self.user)?;
16186        if !self.wipe_data {
16187            s.serialize_field("wipe_data", &self.wipe_data)?;
16188        }
16189        Ok(())
16190    }
16191}
16192
16193impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateArg {
16194    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16195        // struct deserializer
16196        use serde::de::{MapAccess, Visitor};
16197        struct StructVisitor;
16198        impl<'de> Visitor<'de> for StructVisitor {
16199            type Value = MembersDeactivateArg;
16200            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16201                f.write_str("a MembersDeactivateArg struct")
16202            }
16203            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16204                MembersDeactivateArg::internal_deserialize(map)
16205            }
16206        }
16207        deserializer.deserialize_struct("MembersDeactivateArg", MEMBERS_DEACTIVATE_ARG_FIELDS, StructVisitor)
16208    }
16209}
16210
16211impl ::serde::ser::Serialize for MembersDeactivateArg {
16212    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16213        // struct serializer
16214        use serde::ser::SerializeStruct;
16215        let mut s = serializer.serialize_struct("MembersDeactivateArg", 2)?;
16216        self.internal_serialize::<S>(&mut s)?;
16217        s.end()
16218    }
16219}
16220
16221// struct extends MembersDeactivateBaseArg
16222impl From<MembersDeactivateArg> for MembersDeactivateBaseArg {
16223    fn from(subtype: MembersDeactivateArg) -> Self {
16224        Self {
16225            user: subtype.user,
16226        }
16227    }
16228}
16229/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
16230/// account.
16231#[derive(Debug, Clone, PartialEq, Eq)]
16232#[non_exhaustive] // structs may have more fields added in the future.
16233pub struct MembersDeactivateBaseArg {
16234    /// Identity of user to remove/suspend/have their files moved.
16235    pub user: UserSelectorArg,
16236}
16237
16238impl MembersDeactivateBaseArg {
16239    pub fn new(user: UserSelectorArg) -> Self {
16240        MembersDeactivateBaseArg {
16241            user,
16242        }
16243    }
16244}
16245
16246const MEMBERS_DEACTIVATE_BASE_ARG_FIELDS: &[&str] = &["user"];
16247impl MembersDeactivateBaseArg {
16248    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16249        map: V,
16250    ) -> Result<MembersDeactivateBaseArg, V::Error> {
16251        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16252    }
16253
16254    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16255        mut map: V,
16256        optional: bool,
16257    ) -> Result<Option<MembersDeactivateBaseArg>, V::Error> {
16258        let mut field_user = None;
16259        let mut nothing = true;
16260        while let Some(key) = map.next_key::<&str>()? {
16261            nothing = false;
16262            match key {
16263                "user" => {
16264                    if field_user.is_some() {
16265                        return Err(::serde::de::Error::duplicate_field("user"));
16266                    }
16267                    field_user = Some(map.next_value()?);
16268                }
16269                _ => {
16270                    // unknown field allowed and ignored
16271                    map.next_value::<::serde_json::Value>()?;
16272                }
16273            }
16274        }
16275        if optional && nothing {
16276            return Ok(None);
16277        }
16278        let result = MembersDeactivateBaseArg {
16279            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16280        };
16281        Ok(Some(result))
16282    }
16283
16284    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16285        &self,
16286        s: &mut S::SerializeStruct,
16287    ) -> Result<(), S::Error> {
16288        use serde::ser::SerializeStruct;
16289        s.serialize_field("user", &self.user)?;
16290        Ok(())
16291    }
16292}
16293
16294impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateBaseArg {
16295    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16296        // struct deserializer
16297        use serde::de::{MapAccess, Visitor};
16298        struct StructVisitor;
16299        impl<'de> Visitor<'de> for StructVisitor {
16300            type Value = MembersDeactivateBaseArg;
16301            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16302                f.write_str("a MembersDeactivateBaseArg struct")
16303            }
16304            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16305                MembersDeactivateBaseArg::internal_deserialize(map)
16306            }
16307        }
16308        deserializer.deserialize_struct("MembersDeactivateBaseArg", MEMBERS_DEACTIVATE_BASE_ARG_FIELDS, StructVisitor)
16309    }
16310}
16311
16312impl ::serde::ser::Serialize for MembersDeactivateBaseArg {
16313    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16314        // struct serializer
16315        use serde::ser::SerializeStruct;
16316        let mut s = serializer.serialize_struct("MembersDeactivateBaseArg", 1)?;
16317        self.internal_serialize::<S>(&mut s)?;
16318        s.end()
16319    }
16320}
16321
16322#[derive(Debug, Clone, PartialEq, Eq)]
16323#[non_exhaustive] // variants may be added in the future
16324pub enum MembersDeactivateError {
16325    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16326    /// this team.
16327    UserNotFound,
16328    /// The user is not a member of the team.
16329    UserNotInTeam,
16330    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16331    /// typically indicates that this SDK version is out of date.
16332    Other,
16333}
16334
16335impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateError {
16336    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16337        // union deserializer
16338        use serde::de::{self, MapAccess, Visitor};
16339        struct EnumVisitor;
16340        impl<'de> Visitor<'de> for EnumVisitor {
16341            type Value = MembersDeactivateError;
16342            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16343                f.write_str("a MembersDeactivateError structure")
16344            }
16345            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16346                let tag: &str = match map.next_key()? {
16347                    Some(".tag") => map.next_value()?,
16348                    _ => return Err(de::Error::missing_field(".tag"))
16349                };
16350                let value = match tag {
16351                    "user_not_found" => MembersDeactivateError::UserNotFound,
16352                    "user_not_in_team" => MembersDeactivateError::UserNotInTeam,
16353                    _ => MembersDeactivateError::Other,
16354                };
16355                crate::eat_json_fields(&mut map)?;
16356                Ok(value)
16357            }
16358        }
16359        const VARIANTS: &[&str] = &["user_not_found",
16360                                    "user_not_in_team",
16361                                    "other"];
16362        deserializer.deserialize_struct("MembersDeactivateError", VARIANTS, EnumVisitor)
16363    }
16364}
16365
16366impl ::serde::ser::Serialize for MembersDeactivateError {
16367    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16368        // union serializer
16369        use serde::ser::SerializeStruct;
16370        match self {
16371            MembersDeactivateError::UserNotFound => {
16372                // unit
16373                let mut s = serializer.serialize_struct("MembersDeactivateError", 1)?;
16374                s.serialize_field(".tag", "user_not_found")?;
16375                s.end()
16376            }
16377            MembersDeactivateError::UserNotInTeam => {
16378                // unit
16379                let mut s = serializer.serialize_struct("MembersDeactivateError", 1)?;
16380                s.serialize_field(".tag", "user_not_in_team")?;
16381                s.end()
16382            }
16383            MembersDeactivateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16384        }
16385    }
16386}
16387
16388impl ::std::error::Error for MembersDeactivateError {
16389}
16390
16391impl ::std::fmt::Display for MembersDeactivateError {
16392    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16393        match self {
16394            MembersDeactivateError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16395            MembersDeactivateError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16396            _ => write!(f, "{:?}", *self),
16397        }
16398    }
16399}
16400
16401// union extends UserSelectorError
16402impl From<UserSelectorError> for MembersDeactivateError {
16403    fn from(parent: UserSelectorError) -> Self {
16404        match parent {
16405            UserSelectorError::UserNotFound => MembersDeactivateError::UserNotFound,
16406        }
16407    }
16408}
16409#[derive(Debug, Clone, PartialEq, Eq)]
16410#[non_exhaustive] // variants may be added in the future
16411pub enum MembersDeleteFormerMemberFilesError {
16412    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16413    /// this team.
16414    UserNotFound,
16415    /// The user is not a member of the team.
16416    UserNotInTeam,
16417    /// Cannot permanently delete files while it's being transferred.
16418    TransferInProgress,
16419    /// Cannot permanently delete files that have already been transferred.
16420    AlreadyTransferred,
16421    /// Cannot permanently delete files that have already been transferred or deleted.
16422    AlreadyTransferredOrDeleted,
16423    /// User has not been removed from the team.
16424    UserNotRemoved,
16425    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16426    /// typically indicates that this SDK version is out of date.
16427    Other,
16428}
16429
16430impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteFormerMemberFilesError {
16431    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16432        // union deserializer
16433        use serde::de::{self, MapAccess, Visitor};
16434        struct EnumVisitor;
16435        impl<'de> Visitor<'de> for EnumVisitor {
16436            type Value = MembersDeleteFormerMemberFilesError;
16437            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16438                f.write_str("a MembersDeleteFormerMemberFilesError structure")
16439            }
16440            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16441                let tag: &str = match map.next_key()? {
16442                    Some(".tag") => map.next_value()?,
16443                    _ => return Err(de::Error::missing_field(".tag"))
16444                };
16445                let value = match tag {
16446                    "user_not_found" => MembersDeleteFormerMemberFilesError::UserNotFound,
16447                    "user_not_in_team" => MembersDeleteFormerMemberFilesError::UserNotInTeam,
16448                    "transfer_in_progress" => MembersDeleteFormerMemberFilesError::TransferInProgress,
16449                    "already_transferred" => MembersDeleteFormerMemberFilesError::AlreadyTransferred,
16450                    "already_transferred_or_deleted" => MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted,
16451                    "user_not_removed" => MembersDeleteFormerMemberFilesError::UserNotRemoved,
16452                    _ => MembersDeleteFormerMemberFilesError::Other,
16453                };
16454                crate::eat_json_fields(&mut map)?;
16455                Ok(value)
16456            }
16457        }
16458        const VARIANTS: &[&str] = &["user_not_found",
16459                                    "user_not_in_team",
16460                                    "other",
16461                                    "transfer_in_progress",
16462                                    "already_transferred",
16463                                    "already_transferred_or_deleted",
16464                                    "user_not_removed"];
16465        deserializer.deserialize_struct("MembersDeleteFormerMemberFilesError", VARIANTS, EnumVisitor)
16466    }
16467}
16468
16469impl ::serde::ser::Serialize for MembersDeleteFormerMemberFilesError {
16470    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16471        // union serializer
16472        use serde::ser::SerializeStruct;
16473        match self {
16474            MembersDeleteFormerMemberFilesError::UserNotFound => {
16475                // unit
16476                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16477                s.serialize_field(".tag", "user_not_found")?;
16478                s.end()
16479            }
16480            MembersDeleteFormerMemberFilesError::UserNotInTeam => {
16481                // unit
16482                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16483                s.serialize_field(".tag", "user_not_in_team")?;
16484                s.end()
16485            }
16486            MembersDeleteFormerMemberFilesError::TransferInProgress => {
16487                // unit
16488                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16489                s.serialize_field(".tag", "transfer_in_progress")?;
16490                s.end()
16491            }
16492            MembersDeleteFormerMemberFilesError::AlreadyTransferred => {
16493                // unit
16494                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16495                s.serialize_field(".tag", "already_transferred")?;
16496                s.end()
16497            }
16498            MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted => {
16499                // unit
16500                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16501                s.serialize_field(".tag", "already_transferred_or_deleted")?;
16502                s.end()
16503            }
16504            MembersDeleteFormerMemberFilesError::UserNotRemoved => {
16505                // unit
16506                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16507                s.serialize_field(".tag", "user_not_removed")?;
16508                s.end()
16509            }
16510            MembersDeleteFormerMemberFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16511        }
16512    }
16513}
16514
16515impl ::std::error::Error for MembersDeleteFormerMemberFilesError {
16516}
16517
16518impl ::std::fmt::Display for MembersDeleteFormerMemberFilesError {
16519    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16520        match self {
16521            MembersDeleteFormerMemberFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16522            MembersDeleteFormerMemberFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16523            MembersDeleteFormerMemberFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
16524            MembersDeleteFormerMemberFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
16525            MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
16526            MembersDeleteFormerMemberFilesError::UserNotRemoved => f.write_str("User has not been removed from the team."),
16527            _ => write!(f, "{:?}", *self),
16528        }
16529    }
16530}
16531
16532// union extends MembersPermanentlyDeleteFilesError
16533impl From<MembersPermanentlyDeleteFilesError> for MembersDeleteFormerMemberFilesError {
16534    fn from(parent: MembersPermanentlyDeleteFilesError) -> Self {
16535        match parent {
16536            MembersPermanentlyDeleteFilesError::UserNotFound => MembersDeleteFormerMemberFilesError::UserNotFound,
16537            MembersPermanentlyDeleteFilesError::UserNotInTeam => MembersDeleteFormerMemberFilesError::UserNotInTeam,
16538            MembersPermanentlyDeleteFilesError::Other => MembersDeleteFormerMemberFilesError::Other,
16539            MembersPermanentlyDeleteFilesError::TransferInProgress => MembersDeleteFormerMemberFilesError::TransferInProgress,
16540            MembersPermanentlyDeleteFilesError::AlreadyTransferred => MembersDeleteFormerMemberFilesError::AlreadyTransferred,
16541            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted,
16542        }
16543    }
16544}
16545#[derive(Debug, Clone, PartialEq, Eq)]
16546#[non_exhaustive] // structs may have more fields added in the future.
16547pub struct MembersDeleteProfilePhotoArg {
16548    /// Identity of the user whose profile photo will be deleted.
16549    pub user: UserSelectorArg,
16550}
16551
16552impl MembersDeleteProfilePhotoArg {
16553    pub fn new(user: UserSelectorArg) -> Self {
16554        MembersDeleteProfilePhotoArg {
16555            user,
16556        }
16557    }
16558}
16559
16560const MEMBERS_DELETE_PROFILE_PHOTO_ARG_FIELDS: &[&str] = &["user"];
16561impl MembersDeleteProfilePhotoArg {
16562    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16563        map: V,
16564    ) -> Result<MembersDeleteProfilePhotoArg, V::Error> {
16565        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16566    }
16567
16568    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16569        mut map: V,
16570        optional: bool,
16571    ) -> Result<Option<MembersDeleteProfilePhotoArg>, V::Error> {
16572        let mut field_user = None;
16573        let mut nothing = true;
16574        while let Some(key) = map.next_key::<&str>()? {
16575            nothing = false;
16576            match key {
16577                "user" => {
16578                    if field_user.is_some() {
16579                        return Err(::serde::de::Error::duplicate_field("user"));
16580                    }
16581                    field_user = Some(map.next_value()?);
16582                }
16583                _ => {
16584                    // unknown field allowed and ignored
16585                    map.next_value::<::serde_json::Value>()?;
16586                }
16587            }
16588        }
16589        if optional && nothing {
16590            return Ok(None);
16591        }
16592        let result = MembersDeleteProfilePhotoArg {
16593            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16594        };
16595        Ok(Some(result))
16596    }
16597
16598    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16599        &self,
16600        s: &mut S::SerializeStruct,
16601    ) -> Result<(), S::Error> {
16602        use serde::ser::SerializeStruct;
16603        s.serialize_field("user", &self.user)?;
16604        Ok(())
16605    }
16606}
16607
16608impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteProfilePhotoArg {
16609    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16610        // struct deserializer
16611        use serde::de::{MapAccess, Visitor};
16612        struct StructVisitor;
16613        impl<'de> Visitor<'de> for StructVisitor {
16614            type Value = MembersDeleteProfilePhotoArg;
16615            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16616                f.write_str("a MembersDeleteProfilePhotoArg struct")
16617            }
16618            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16619                MembersDeleteProfilePhotoArg::internal_deserialize(map)
16620            }
16621        }
16622        deserializer.deserialize_struct("MembersDeleteProfilePhotoArg", MEMBERS_DELETE_PROFILE_PHOTO_ARG_FIELDS, StructVisitor)
16623    }
16624}
16625
16626impl ::serde::ser::Serialize for MembersDeleteProfilePhotoArg {
16627    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16628        // struct serializer
16629        use serde::ser::SerializeStruct;
16630        let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoArg", 1)?;
16631        self.internal_serialize::<S>(&mut s)?;
16632        s.end()
16633    }
16634}
16635
16636#[derive(Debug, Clone, PartialEq, Eq)]
16637#[non_exhaustive] // variants may be added in the future
16638pub enum MembersDeleteProfilePhotoError {
16639    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16640    /// this team.
16641    UserNotFound,
16642    /// The user is not a member of the team.
16643    UserNotInTeam,
16644    /// Modifying deleted users is not allowed.
16645    SetProfileDisallowed,
16646    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16647    /// typically indicates that this SDK version is out of date.
16648    Other,
16649}
16650
16651impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteProfilePhotoError {
16652    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16653        // union deserializer
16654        use serde::de::{self, MapAccess, Visitor};
16655        struct EnumVisitor;
16656        impl<'de> Visitor<'de> for EnumVisitor {
16657            type Value = MembersDeleteProfilePhotoError;
16658            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16659                f.write_str("a MembersDeleteProfilePhotoError structure")
16660            }
16661            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16662                let tag: &str = match map.next_key()? {
16663                    Some(".tag") => map.next_value()?,
16664                    _ => return Err(de::Error::missing_field(".tag"))
16665                };
16666                let value = match tag {
16667                    "user_not_found" => MembersDeleteProfilePhotoError::UserNotFound,
16668                    "user_not_in_team" => MembersDeleteProfilePhotoError::UserNotInTeam,
16669                    "set_profile_disallowed" => MembersDeleteProfilePhotoError::SetProfileDisallowed,
16670                    _ => MembersDeleteProfilePhotoError::Other,
16671                };
16672                crate::eat_json_fields(&mut map)?;
16673                Ok(value)
16674            }
16675        }
16676        const VARIANTS: &[&str] = &["user_not_found",
16677                                    "user_not_in_team",
16678                                    "set_profile_disallowed",
16679                                    "other"];
16680        deserializer.deserialize_struct("MembersDeleteProfilePhotoError", VARIANTS, EnumVisitor)
16681    }
16682}
16683
16684impl ::serde::ser::Serialize for MembersDeleteProfilePhotoError {
16685    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16686        // union serializer
16687        use serde::ser::SerializeStruct;
16688        match self {
16689            MembersDeleteProfilePhotoError::UserNotFound => {
16690                // unit
16691                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16692                s.serialize_field(".tag", "user_not_found")?;
16693                s.end()
16694            }
16695            MembersDeleteProfilePhotoError::UserNotInTeam => {
16696                // unit
16697                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16698                s.serialize_field(".tag", "user_not_in_team")?;
16699                s.end()
16700            }
16701            MembersDeleteProfilePhotoError::SetProfileDisallowed => {
16702                // unit
16703                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16704                s.serialize_field(".tag", "set_profile_disallowed")?;
16705                s.end()
16706            }
16707            MembersDeleteProfilePhotoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16708        }
16709    }
16710}
16711
16712impl ::std::error::Error for MembersDeleteProfilePhotoError {
16713}
16714
16715impl ::std::fmt::Display for MembersDeleteProfilePhotoError {
16716    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16717        match self {
16718            MembersDeleteProfilePhotoError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16719            MembersDeleteProfilePhotoError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16720            MembersDeleteProfilePhotoError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
16721            _ => write!(f, "{:?}", *self),
16722        }
16723    }
16724}
16725
16726// union extends MemberSelectorError
16727impl From<MemberSelectorError> for MembersDeleteProfilePhotoError {
16728    fn from(parent: MemberSelectorError) -> Self {
16729        match parent {
16730            MemberSelectorError::UserNotFound => MembersDeleteProfilePhotoError::UserNotFound,
16731            MemberSelectorError::UserNotInTeam => MembersDeleteProfilePhotoError::UserNotInTeam,
16732        }
16733    }
16734}
16735/// Exactly one of team_member_id, email, or external_id must be provided to identify a former team
16736/// member.
16737#[derive(Debug, Clone, PartialEq, Eq)]
16738#[non_exhaustive] // structs may have more fields added in the future.
16739pub struct MembersFormerMemberArg {
16740    /// Identity of user whose files will be permanently deleted.
16741    pub user: UserSelectorArg,
16742}
16743
16744impl MembersFormerMemberArg {
16745    pub fn new(user: UserSelectorArg) -> Self {
16746        MembersFormerMemberArg {
16747            user,
16748        }
16749    }
16750}
16751
16752const MEMBERS_FORMER_MEMBER_ARG_FIELDS: &[&str] = &["user"];
16753impl MembersFormerMemberArg {
16754    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16755        map: V,
16756    ) -> Result<MembersFormerMemberArg, V::Error> {
16757        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16758    }
16759
16760    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16761        mut map: V,
16762        optional: bool,
16763    ) -> Result<Option<MembersFormerMemberArg>, V::Error> {
16764        let mut field_user = None;
16765        let mut nothing = true;
16766        while let Some(key) = map.next_key::<&str>()? {
16767            nothing = false;
16768            match key {
16769                "user" => {
16770                    if field_user.is_some() {
16771                        return Err(::serde::de::Error::duplicate_field("user"));
16772                    }
16773                    field_user = Some(map.next_value()?);
16774                }
16775                _ => {
16776                    // unknown field allowed and ignored
16777                    map.next_value::<::serde_json::Value>()?;
16778                }
16779            }
16780        }
16781        if optional && nothing {
16782            return Ok(None);
16783        }
16784        let result = MembersFormerMemberArg {
16785            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16786        };
16787        Ok(Some(result))
16788    }
16789
16790    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16791        &self,
16792        s: &mut S::SerializeStruct,
16793    ) -> Result<(), S::Error> {
16794        use serde::ser::SerializeStruct;
16795        s.serialize_field("user", &self.user)?;
16796        Ok(())
16797    }
16798}
16799
16800impl<'de> ::serde::de::Deserialize<'de> for MembersFormerMemberArg {
16801    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16802        // struct deserializer
16803        use serde::de::{MapAccess, Visitor};
16804        struct StructVisitor;
16805        impl<'de> Visitor<'de> for StructVisitor {
16806            type Value = MembersFormerMemberArg;
16807            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16808                f.write_str("a MembersFormerMemberArg struct")
16809            }
16810            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16811                MembersFormerMemberArg::internal_deserialize(map)
16812            }
16813        }
16814        deserializer.deserialize_struct("MembersFormerMemberArg", MEMBERS_FORMER_MEMBER_ARG_FIELDS, StructVisitor)
16815    }
16816}
16817
16818impl ::serde::ser::Serialize for MembersFormerMemberArg {
16819    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16820        // struct serializer
16821        use serde::ser::SerializeStruct;
16822        let mut s = serializer.serialize_struct("MembersFormerMemberArg", 1)?;
16823        self.internal_serialize::<S>(&mut s)?;
16824        s.end()
16825    }
16826}
16827
16828/// Available TeamMemberRole for the connected team. To be used with
16829/// [`members_set_admin_permissions_v2()`](crate::team::members_set_admin_permissions_v2).
16830#[derive(Debug, Clone, PartialEq, Eq)]
16831#[non_exhaustive] // structs may have more fields added in the future.
16832pub struct MembersGetAvailableTeamMemberRolesResult {
16833    /// Available roles.
16834    pub roles: Vec<TeamMemberRole>,
16835}
16836
16837impl MembersGetAvailableTeamMemberRolesResult {
16838    pub fn new(roles: Vec<TeamMemberRole>) -> Self {
16839        MembersGetAvailableTeamMemberRolesResult {
16840            roles,
16841        }
16842    }
16843}
16844
16845const MEMBERS_GET_AVAILABLE_TEAM_MEMBER_ROLES_RESULT_FIELDS: &[&str] = &["roles"];
16846impl MembersGetAvailableTeamMemberRolesResult {
16847    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16848        map: V,
16849    ) -> Result<MembersGetAvailableTeamMemberRolesResult, V::Error> {
16850        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16851    }
16852
16853    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16854        mut map: V,
16855        optional: bool,
16856    ) -> Result<Option<MembersGetAvailableTeamMemberRolesResult>, V::Error> {
16857        let mut field_roles = None;
16858        let mut nothing = true;
16859        while let Some(key) = map.next_key::<&str>()? {
16860            nothing = false;
16861            match key {
16862                "roles" => {
16863                    if field_roles.is_some() {
16864                        return Err(::serde::de::Error::duplicate_field("roles"));
16865                    }
16866                    field_roles = Some(map.next_value()?);
16867                }
16868                _ => {
16869                    // unknown field allowed and ignored
16870                    map.next_value::<::serde_json::Value>()?;
16871                }
16872            }
16873        }
16874        if optional && nothing {
16875            return Ok(None);
16876        }
16877        let result = MembersGetAvailableTeamMemberRolesResult {
16878            roles: field_roles.ok_or_else(|| ::serde::de::Error::missing_field("roles"))?,
16879        };
16880        Ok(Some(result))
16881    }
16882
16883    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16884        &self,
16885        s: &mut S::SerializeStruct,
16886    ) -> Result<(), S::Error> {
16887        use serde::ser::SerializeStruct;
16888        s.serialize_field("roles", &self.roles)?;
16889        Ok(())
16890    }
16891}
16892
16893impl<'de> ::serde::de::Deserialize<'de> for MembersGetAvailableTeamMemberRolesResult {
16894    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16895        // struct deserializer
16896        use serde::de::{MapAccess, Visitor};
16897        struct StructVisitor;
16898        impl<'de> Visitor<'de> for StructVisitor {
16899            type Value = MembersGetAvailableTeamMemberRolesResult;
16900            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16901                f.write_str("a MembersGetAvailableTeamMemberRolesResult struct")
16902            }
16903            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16904                MembersGetAvailableTeamMemberRolesResult::internal_deserialize(map)
16905            }
16906        }
16907        deserializer.deserialize_struct("MembersGetAvailableTeamMemberRolesResult", MEMBERS_GET_AVAILABLE_TEAM_MEMBER_ROLES_RESULT_FIELDS, StructVisitor)
16908    }
16909}
16910
16911impl ::serde::ser::Serialize for MembersGetAvailableTeamMemberRolesResult {
16912    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16913        // struct serializer
16914        use serde::ser::SerializeStruct;
16915        let mut s = serializer.serialize_struct("MembersGetAvailableTeamMemberRolesResult", 1)?;
16916        self.internal_serialize::<S>(&mut s)?;
16917        s.end()
16918    }
16919}
16920
16921#[derive(Debug, Clone, PartialEq, Eq)]
16922#[non_exhaustive] // structs may have more fields added in the future.
16923pub struct MembersGetInfoArgs {
16924    /// List of team members.
16925    pub members: Vec<UserSelectorArg>,
16926}
16927
16928impl MembersGetInfoArgs {
16929    pub fn new(members: Vec<UserSelectorArg>) -> Self {
16930        MembersGetInfoArgs {
16931            members,
16932        }
16933    }
16934}
16935
16936const MEMBERS_GET_INFO_ARGS_FIELDS: &[&str] = &["members"];
16937impl MembersGetInfoArgs {
16938    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16939        map: V,
16940    ) -> Result<MembersGetInfoArgs, V::Error> {
16941        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16942    }
16943
16944    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16945        mut map: V,
16946        optional: bool,
16947    ) -> Result<Option<MembersGetInfoArgs>, V::Error> {
16948        let mut field_members = None;
16949        let mut nothing = true;
16950        while let Some(key) = map.next_key::<&str>()? {
16951            nothing = false;
16952            match key {
16953                "members" => {
16954                    if field_members.is_some() {
16955                        return Err(::serde::de::Error::duplicate_field("members"));
16956                    }
16957                    field_members = Some(map.next_value()?);
16958                }
16959                _ => {
16960                    // unknown field allowed and ignored
16961                    map.next_value::<::serde_json::Value>()?;
16962                }
16963            }
16964        }
16965        if optional && nothing {
16966            return Ok(None);
16967        }
16968        let result = MembersGetInfoArgs {
16969            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
16970        };
16971        Ok(Some(result))
16972    }
16973
16974    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16975        &self,
16976        s: &mut S::SerializeStruct,
16977    ) -> Result<(), S::Error> {
16978        use serde::ser::SerializeStruct;
16979        s.serialize_field("members", &self.members)?;
16980        Ok(())
16981    }
16982}
16983
16984impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoArgs {
16985    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16986        // struct deserializer
16987        use serde::de::{MapAccess, Visitor};
16988        struct StructVisitor;
16989        impl<'de> Visitor<'de> for StructVisitor {
16990            type Value = MembersGetInfoArgs;
16991            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16992                f.write_str("a MembersGetInfoArgs struct")
16993            }
16994            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16995                MembersGetInfoArgs::internal_deserialize(map)
16996            }
16997        }
16998        deserializer.deserialize_struct("MembersGetInfoArgs", MEMBERS_GET_INFO_ARGS_FIELDS, StructVisitor)
16999    }
17000}
17001
17002impl ::serde::ser::Serialize for MembersGetInfoArgs {
17003    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17004        // struct serializer
17005        use serde::ser::SerializeStruct;
17006        let mut s = serializer.serialize_struct("MembersGetInfoArgs", 1)?;
17007        self.internal_serialize::<S>(&mut s)?;
17008        s.end()
17009    }
17010}
17011
17012
17013#[derive(Debug, Clone, PartialEq, Eq)]
17014#[non_exhaustive] // variants may be added in the future
17015pub enum MembersGetInfoError {
17016    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17017    /// typically indicates that this SDK version is out of date.
17018    Other,
17019}
17020
17021impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoError {
17022    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17023        // union deserializer
17024        use serde::de::{self, MapAccess, Visitor};
17025        struct EnumVisitor;
17026        impl<'de> Visitor<'de> for EnumVisitor {
17027            type Value = MembersGetInfoError;
17028            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17029                f.write_str("a MembersGetInfoError structure")
17030            }
17031            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17032                let tag: &str = match map.next_key()? {
17033                    Some(".tag") => map.next_value()?,
17034                    _ => return Err(de::Error::missing_field(".tag"))
17035                };
17036                // open enum with no defined variants
17037                let _ = tag;
17038                crate::eat_json_fields(&mut map)?;
17039                Ok(MembersGetInfoError::Other)
17040            }
17041        }
17042        const VARIANTS: &[&str] = &["other"];
17043        deserializer.deserialize_struct("MembersGetInfoError", VARIANTS, EnumVisitor)
17044    }
17045}
17046
17047impl ::serde::ser::Serialize for MembersGetInfoError {
17048    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17049        // union serializer
17050        #![allow(unused_variables)]
17051        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
17052    }
17053}
17054
17055impl ::std::error::Error for MembersGetInfoError {
17056}
17057
17058impl ::std::fmt::Display for MembersGetInfoError {
17059    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17060        write!(f, "{:?}", *self)
17061    }
17062}
17063
17064/// Describes a result obtained for a single user whose id was specified in the parameter of
17065/// [`members_get_info()`](crate::team::members_get_info).
17066#[derive(Debug, Clone, PartialEq, Eq)]
17067pub enum MembersGetInfoItem {
17068    /// An ID that was provided as a parameter to
17069    /// [`members_get_info()`](crate::team::members_get_info) or
17070    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
17071    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
17072    /// on how the method was called.
17073    IdNotFound(String),
17074    /// Info about a team member.
17075    MemberInfo(TeamMemberInfo),
17076}
17077
17078impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItem {
17079    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17080        // union deserializer
17081        use serde::de::{self, MapAccess, Visitor};
17082        struct EnumVisitor;
17083        impl<'de> Visitor<'de> for EnumVisitor {
17084            type Value = MembersGetInfoItem;
17085            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17086                f.write_str("a MembersGetInfoItem structure")
17087            }
17088            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17089                let tag: &str = match map.next_key()? {
17090                    Some(".tag") => map.next_value()?,
17091                    _ => return Err(de::Error::missing_field(".tag"))
17092                };
17093                let value = match tag {
17094                    "id_not_found" => {
17095                        match map.next_key()? {
17096                            Some("id_not_found") => MembersGetInfoItem::IdNotFound(map.next_value()?),
17097                            None => return Err(de::Error::missing_field("id_not_found")),
17098                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
17099                        }
17100                    }
17101                    "member_info" => MembersGetInfoItem::MemberInfo(TeamMemberInfo::internal_deserialize(&mut map)?),
17102                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
17103                };
17104                crate::eat_json_fields(&mut map)?;
17105                Ok(value)
17106            }
17107        }
17108        const VARIANTS: &[&str] = &["id_not_found",
17109                                    "member_info"];
17110        deserializer.deserialize_struct("MembersGetInfoItem", VARIANTS, EnumVisitor)
17111    }
17112}
17113
17114impl ::serde::ser::Serialize for MembersGetInfoItem {
17115    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17116        // union serializer
17117        use serde::ser::SerializeStruct;
17118        match self {
17119            MembersGetInfoItem::IdNotFound(x) => {
17120                // primitive
17121                let mut s = serializer.serialize_struct("MembersGetInfoItem", 2)?;
17122                s.serialize_field(".tag", "id_not_found")?;
17123                s.serialize_field("id_not_found", x)?;
17124                s.end()
17125            }
17126            MembersGetInfoItem::MemberInfo(x) => {
17127                // struct
17128                let mut s = serializer.serialize_struct("MembersGetInfoItem", 3)?;
17129                s.serialize_field(".tag", "member_info")?;
17130                x.internal_serialize::<S>(&mut s)?;
17131                s.end()
17132            }
17133        }
17134    }
17135}
17136
17137// union extends MembersGetInfoItemBase
17138impl From<MembersGetInfoItemBase> for MembersGetInfoItem {
17139    fn from(parent: MembersGetInfoItemBase) -> Self {
17140        match parent {
17141            MembersGetInfoItemBase::IdNotFound(x) => MembersGetInfoItem::IdNotFound(x),
17142        }
17143    }
17144}
17145#[derive(Debug, Clone, PartialEq, Eq)]
17146pub enum MembersGetInfoItemBase {
17147    /// An ID that was provided as a parameter to
17148    /// [`members_get_info()`](crate::team::members_get_info) or
17149    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
17150    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
17151    /// on how the method was called.
17152    IdNotFound(String),
17153}
17154
17155impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItemBase {
17156    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17157        // union deserializer
17158        use serde::de::{self, MapAccess, Visitor};
17159        struct EnumVisitor;
17160        impl<'de> Visitor<'de> for EnumVisitor {
17161            type Value = MembersGetInfoItemBase;
17162            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17163                f.write_str("a MembersGetInfoItemBase structure")
17164            }
17165            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17166                let tag: &str = match map.next_key()? {
17167                    Some(".tag") => map.next_value()?,
17168                    _ => return Err(de::Error::missing_field(".tag"))
17169                };
17170                let value = match tag {
17171                    "id_not_found" => {
17172                        match map.next_key()? {
17173                            Some("id_not_found") => MembersGetInfoItemBase::IdNotFound(map.next_value()?),
17174                            None => return Err(de::Error::missing_field("id_not_found")),
17175                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
17176                        }
17177                    }
17178                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
17179                };
17180                crate::eat_json_fields(&mut map)?;
17181                Ok(value)
17182            }
17183        }
17184        const VARIANTS: &[&str] = &["id_not_found"];
17185        deserializer.deserialize_struct("MembersGetInfoItemBase", VARIANTS, EnumVisitor)
17186    }
17187}
17188
17189impl ::serde::ser::Serialize for MembersGetInfoItemBase {
17190    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17191        // union serializer
17192        use serde::ser::SerializeStruct;
17193        match self {
17194            MembersGetInfoItemBase::IdNotFound(x) => {
17195                // primitive
17196                let mut s = serializer.serialize_struct("MembersGetInfoItemBase", 2)?;
17197                s.serialize_field(".tag", "id_not_found")?;
17198                s.serialize_field("id_not_found", x)?;
17199                s.end()
17200            }
17201        }
17202    }
17203}
17204
17205/// Describes a result obtained for a single user whose id was specified in the parameter of
17206/// [`members_get_info_v2()`](crate::team::members_get_info_v2).
17207#[derive(Debug, Clone, PartialEq, Eq)]
17208#[non_exhaustive] // variants may be added in the future
17209pub enum MembersGetInfoItemV2 {
17210    /// An ID that was provided as a parameter to
17211    /// [`members_get_info()`](crate::team::members_get_info) or
17212    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
17213    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
17214    /// on how the method was called.
17215    IdNotFound(String),
17216    /// Info about a team member.
17217    MemberInfo(TeamMemberInfoV2),
17218    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17219    /// typically indicates that this SDK version is out of date.
17220    Other,
17221}
17222
17223impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItemV2 {
17224    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17225        // union deserializer
17226        use serde::de::{self, MapAccess, Visitor};
17227        struct EnumVisitor;
17228        impl<'de> Visitor<'de> for EnumVisitor {
17229            type Value = MembersGetInfoItemV2;
17230            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17231                f.write_str("a MembersGetInfoItemV2 structure")
17232            }
17233            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17234                let tag: &str = match map.next_key()? {
17235                    Some(".tag") => map.next_value()?,
17236                    _ => return Err(de::Error::missing_field(".tag"))
17237                };
17238                let value = match tag {
17239                    "id_not_found" => {
17240                        match map.next_key()? {
17241                            Some("id_not_found") => MembersGetInfoItemV2::IdNotFound(map.next_value()?),
17242                            None => return Err(de::Error::missing_field("id_not_found")),
17243                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
17244                        }
17245                    }
17246                    "member_info" => MembersGetInfoItemV2::MemberInfo(TeamMemberInfoV2::internal_deserialize(&mut map)?),
17247                    _ => MembersGetInfoItemV2::Other,
17248                };
17249                crate::eat_json_fields(&mut map)?;
17250                Ok(value)
17251            }
17252        }
17253        const VARIANTS: &[&str] = &["id_not_found",
17254                                    "member_info",
17255                                    "other"];
17256        deserializer.deserialize_struct("MembersGetInfoItemV2", VARIANTS, EnumVisitor)
17257    }
17258}
17259
17260impl ::serde::ser::Serialize for MembersGetInfoItemV2 {
17261    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17262        // union serializer
17263        use serde::ser::SerializeStruct;
17264        match self {
17265            MembersGetInfoItemV2::IdNotFound(x) => {
17266                // primitive
17267                let mut s = serializer.serialize_struct("MembersGetInfoItemV2", 2)?;
17268                s.serialize_field(".tag", "id_not_found")?;
17269                s.serialize_field("id_not_found", x)?;
17270                s.end()
17271            }
17272            MembersGetInfoItemV2::MemberInfo(x) => {
17273                // struct
17274                let mut s = serializer.serialize_struct("MembersGetInfoItemV2", 3)?;
17275                s.serialize_field(".tag", "member_info")?;
17276                x.internal_serialize::<S>(&mut s)?;
17277                s.end()
17278            }
17279            MembersGetInfoItemV2::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17280        }
17281    }
17282}
17283
17284// union extends MembersGetInfoItemBase
17285impl From<MembersGetInfoItemBase> for MembersGetInfoItemV2 {
17286    fn from(parent: MembersGetInfoItemBase) -> Self {
17287        match parent {
17288            MembersGetInfoItemBase::IdNotFound(x) => MembersGetInfoItemV2::IdNotFound(x),
17289        }
17290    }
17291}
17292#[derive(Debug, Clone, PartialEq, Eq)]
17293#[non_exhaustive] // structs may have more fields added in the future.
17294pub struct MembersGetInfoV2Arg {
17295    /// List of team members.
17296    pub members: Vec<UserSelectorArg>,
17297}
17298
17299impl MembersGetInfoV2Arg {
17300    pub fn new(members: Vec<UserSelectorArg>) -> Self {
17301        MembersGetInfoV2Arg {
17302            members,
17303        }
17304    }
17305}
17306
17307const MEMBERS_GET_INFO_V2_ARG_FIELDS: &[&str] = &["members"];
17308impl MembersGetInfoV2Arg {
17309    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17310        map: V,
17311    ) -> Result<MembersGetInfoV2Arg, V::Error> {
17312        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17313    }
17314
17315    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17316        mut map: V,
17317        optional: bool,
17318    ) -> Result<Option<MembersGetInfoV2Arg>, V::Error> {
17319        let mut field_members = None;
17320        let mut nothing = true;
17321        while let Some(key) = map.next_key::<&str>()? {
17322            nothing = false;
17323            match key {
17324                "members" => {
17325                    if field_members.is_some() {
17326                        return Err(::serde::de::Error::duplicate_field("members"));
17327                    }
17328                    field_members = Some(map.next_value()?);
17329                }
17330                _ => {
17331                    // unknown field allowed and ignored
17332                    map.next_value::<::serde_json::Value>()?;
17333                }
17334            }
17335        }
17336        if optional && nothing {
17337            return Ok(None);
17338        }
17339        let result = MembersGetInfoV2Arg {
17340            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
17341        };
17342        Ok(Some(result))
17343    }
17344
17345    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17346        &self,
17347        s: &mut S::SerializeStruct,
17348    ) -> Result<(), S::Error> {
17349        use serde::ser::SerializeStruct;
17350        s.serialize_field("members", &self.members)?;
17351        Ok(())
17352    }
17353}
17354
17355impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoV2Arg {
17356    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17357        // struct deserializer
17358        use serde::de::{MapAccess, Visitor};
17359        struct StructVisitor;
17360        impl<'de> Visitor<'de> for StructVisitor {
17361            type Value = MembersGetInfoV2Arg;
17362            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17363                f.write_str("a MembersGetInfoV2Arg struct")
17364            }
17365            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17366                MembersGetInfoV2Arg::internal_deserialize(map)
17367            }
17368        }
17369        deserializer.deserialize_struct("MembersGetInfoV2Arg", MEMBERS_GET_INFO_V2_ARG_FIELDS, StructVisitor)
17370    }
17371}
17372
17373impl ::serde::ser::Serialize for MembersGetInfoV2Arg {
17374    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17375        // struct serializer
17376        use serde::ser::SerializeStruct;
17377        let mut s = serializer.serialize_struct("MembersGetInfoV2Arg", 1)?;
17378        self.internal_serialize::<S>(&mut s)?;
17379        s.end()
17380    }
17381}
17382
17383#[derive(Debug, Clone, PartialEq, Eq)]
17384#[non_exhaustive] // structs may have more fields added in the future.
17385pub struct MembersGetInfoV2Result {
17386    /// List of team members info.
17387    pub members_info: Vec<MembersGetInfoItemV2>,
17388}
17389
17390impl MembersGetInfoV2Result {
17391    pub fn new(members_info: Vec<MembersGetInfoItemV2>) -> Self {
17392        MembersGetInfoV2Result {
17393            members_info,
17394        }
17395    }
17396}
17397
17398const MEMBERS_GET_INFO_V2_RESULT_FIELDS: &[&str] = &["members_info"];
17399impl MembersGetInfoV2Result {
17400    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17401        map: V,
17402    ) -> Result<MembersGetInfoV2Result, V::Error> {
17403        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17404    }
17405
17406    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17407        mut map: V,
17408        optional: bool,
17409    ) -> Result<Option<MembersGetInfoV2Result>, V::Error> {
17410        let mut field_members_info = None;
17411        let mut nothing = true;
17412        while let Some(key) = map.next_key::<&str>()? {
17413            nothing = false;
17414            match key {
17415                "members_info" => {
17416                    if field_members_info.is_some() {
17417                        return Err(::serde::de::Error::duplicate_field("members_info"));
17418                    }
17419                    field_members_info = Some(map.next_value()?);
17420                }
17421                _ => {
17422                    // unknown field allowed and ignored
17423                    map.next_value::<::serde_json::Value>()?;
17424                }
17425            }
17426        }
17427        if optional && nothing {
17428            return Ok(None);
17429        }
17430        let result = MembersGetInfoV2Result {
17431            members_info: field_members_info.ok_or_else(|| ::serde::de::Error::missing_field("members_info"))?,
17432        };
17433        Ok(Some(result))
17434    }
17435
17436    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17437        &self,
17438        s: &mut S::SerializeStruct,
17439    ) -> Result<(), S::Error> {
17440        use serde::ser::SerializeStruct;
17441        s.serialize_field("members_info", &self.members_info)?;
17442        Ok(())
17443    }
17444}
17445
17446impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoV2Result {
17447    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17448        // struct deserializer
17449        use serde::de::{MapAccess, Visitor};
17450        struct StructVisitor;
17451        impl<'de> Visitor<'de> for StructVisitor {
17452            type Value = MembersGetInfoV2Result;
17453            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17454                f.write_str("a MembersGetInfoV2Result struct")
17455            }
17456            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17457                MembersGetInfoV2Result::internal_deserialize(map)
17458            }
17459        }
17460        deserializer.deserialize_struct("MembersGetInfoV2Result", MEMBERS_GET_INFO_V2_RESULT_FIELDS, StructVisitor)
17461    }
17462}
17463
17464impl ::serde::ser::Serialize for MembersGetInfoV2Result {
17465    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17466        // struct serializer
17467        use serde::ser::SerializeStruct;
17468        let mut s = serializer.serialize_struct("MembersGetInfoV2Result", 1)?;
17469        self.internal_serialize::<S>(&mut s)?;
17470        s.end()
17471    }
17472}
17473
17474#[derive(Debug, Clone, PartialEq, Eq)]
17475#[non_exhaustive] // structs may have more fields added in the future.
17476pub struct MembersInfo {
17477    /// Team member IDs of the users under this hold.
17478    pub team_member_ids: Vec<crate::types::team_common::TeamMemberId>,
17479    /// The number of permanently deleted users that were under this hold.
17480    pub permanently_deleted_users: u64,
17481}
17482
17483impl MembersInfo {
17484    pub fn new(
17485        team_member_ids: Vec<crate::types::team_common::TeamMemberId>,
17486        permanently_deleted_users: u64,
17487    ) -> Self {
17488        MembersInfo {
17489            team_member_ids,
17490            permanently_deleted_users,
17491        }
17492    }
17493}
17494
17495const MEMBERS_INFO_FIELDS: &[&str] = &["team_member_ids",
17496                                       "permanently_deleted_users"];
17497impl MembersInfo {
17498    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17499        map: V,
17500    ) -> Result<MembersInfo, V::Error> {
17501        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17502    }
17503
17504    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17505        mut map: V,
17506        optional: bool,
17507    ) -> Result<Option<MembersInfo>, V::Error> {
17508        let mut field_team_member_ids = None;
17509        let mut field_permanently_deleted_users = None;
17510        let mut nothing = true;
17511        while let Some(key) = map.next_key::<&str>()? {
17512            nothing = false;
17513            match key {
17514                "team_member_ids" => {
17515                    if field_team_member_ids.is_some() {
17516                        return Err(::serde::de::Error::duplicate_field("team_member_ids"));
17517                    }
17518                    field_team_member_ids = Some(map.next_value()?);
17519                }
17520                "permanently_deleted_users" => {
17521                    if field_permanently_deleted_users.is_some() {
17522                        return Err(::serde::de::Error::duplicate_field("permanently_deleted_users"));
17523                    }
17524                    field_permanently_deleted_users = Some(map.next_value()?);
17525                }
17526                _ => {
17527                    // unknown field allowed and ignored
17528                    map.next_value::<::serde_json::Value>()?;
17529                }
17530            }
17531        }
17532        if optional && nothing {
17533            return Ok(None);
17534        }
17535        let result = MembersInfo {
17536            team_member_ids: field_team_member_ids.ok_or_else(|| ::serde::de::Error::missing_field("team_member_ids"))?,
17537            permanently_deleted_users: field_permanently_deleted_users.ok_or_else(|| ::serde::de::Error::missing_field("permanently_deleted_users"))?,
17538        };
17539        Ok(Some(result))
17540    }
17541
17542    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17543        &self,
17544        s: &mut S::SerializeStruct,
17545    ) -> Result<(), S::Error> {
17546        use serde::ser::SerializeStruct;
17547        s.serialize_field("team_member_ids", &self.team_member_ids)?;
17548        s.serialize_field("permanently_deleted_users", &self.permanently_deleted_users)?;
17549        Ok(())
17550    }
17551}
17552
17553impl<'de> ::serde::de::Deserialize<'de> for MembersInfo {
17554    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17555        // struct deserializer
17556        use serde::de::{MapAccess, Visitor};
17557        struct StructVisitor;
17558        impl<'de> Visitor<'de> for StructVisitor {
17559            type Value = MembersInfo;
17560            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17561                f.write_str("a MembersInfo struct")
17562            }
17563            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17564                MembersInfo::internal_deserialize(map)
17565            }
17566        }
17567        deserializer.deserialize_struct("MembersInfo", MEMBERS_INFO_FIELDS, StructVisitor)
17568    }
17569}
17570
17571impl ::serde::ser::Serialize for MembersInfo {
17572    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17573        // struct serializer
17574        use serde::ser::SerializeStruct;
17575        let mut s = serializer.serialize_struct("MembersInfo", 2)?;
17576        self.internal_serialize::<S>(&mut s)?;
17577        s.end()
17578    }
17579}
17580
17581#[derive(Debug, Clone, PartialEq, Eq)]
17582#[non_exhaustive] // structs may have more fields added in the future.
17583pub struct MembersListArg {
17584    /// Number of results to return per call.
17585    pub limit: u32,
17586    /// Whether to return removed members.
17587    pub include_removed: bool,
17588}
17589
17590impl Default for MembersListArg {
17591    fn default() -> Self {
17592        MembersListArg {
17593            limit: 1000,
17594            include_removed: false,
17595        }
17596    }
17597}
17598
17599impl MembersListArg {
17600    pub fn with_limit(mut self, value: u32) -> Self {
17601        self.limit = value;
17602        self
17603    }
17604
17605    pub fn with_include_removed(mut self, value: bool) -> Self {
17606        self.include_removed = value;
17607        self
17608    }
17609}
17610
17611const MEMBERS_LIST_ARG_FIELDS: &[&str] = &["limit",
17612                                           "include_removed"];
17613impl MembersListArg {
17614    // no _opt deserializer
17615    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17616        mut map: V,
17617    ) -> Result<MembersListArg, V::Error> {
17618        let mut field_limit = None;
17619        let mut field_include_removed = None;
17620        while let Some(key) = map.next_key::<&str>()? {
17621            match key {
17622                "limit" => {
17623                    if field_limit.is_some() {
17624                        return Err(::serde::de::Error::duplicate_field("limit"));
17625                    }
17626                    field_limit = Some(map.next_value()?);
17627                }
17628                "include_removed" => {
17629                    if field_include_removed.is_some() {
17630                        return Err(::serde::de::Error::duplicate_field("include_removed"));
17631                    }
17632                    field_include_removed = Some(map.next_value()?);
17633                }
17634                _ => {
17635                    // unknown field allowed and ignored
17636                    map.next_value::<::serde_json::Value>()?;
17637                }
17638            }
17639        }
17640        let result = MembersListArg {
17641            limit: field_limit.unwrap_or(1000),
17642            include_removed: field_include_removed.unwrap_or(false),
17643        };
17644        Ok(result)
17645    }
17646
17647    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17648        &self,
17649        s: &mut S::SerializeStruct,
17650    ) -> Result<(), S::Error> {
17651        use serde::ser::SerializeStruct;
17652        if self.limit != 1000 {
17653            s.serialize_field("limit", &self.limit)?;
17654        }
17655        if self.include_removed {
17656            s.serialize_field("include_removed", &self.include_removed)?;
17657        }
17658        Ok(())
17659    }
17660}
17661
17662impl<'de> ::serde::de::Deserialize<'de> for MembersListArg {
17663    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17664        // struct deserializer
17665        use serde::de::{MapAccess, Visitor};
17666        struct StructVisitor;
17667        impl<'de> Visitor<'de> for StructVisitor {
17668            type Value = MembersListArg;
17669            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17670                f.write_str("a MembersListArg struct")
17671            }
17672            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17673                MembersListArg::internal_deserialize(map)
17674            }
17675        }
17676        deserializer.deserialize_struct("MembersListArg", MEMBERS_LIST_ARG_FIELDS, StructVisitor)
17677    }
17678}
17679
17680impl ::serde::ser::Serialize for MembersListArg {
17681    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17682        // struct serializer
17683        use serde::ser::SerializeStruct;
17684        let mut s = serializer.serialize_struct("MembersListArg", 2)?;
17685        self.internal_serialize::<S>(&mut s)?;
17686        s.end()
17687    }
17688}
17689
17690#[derive(Debug, Clone, PartialEq, Eq)]
17691#[non_exhaustive] // structs may have more fields added in the future.
17692pub struct MembersListContinueArg {
17693    /// Indicates from what point to get the next set of members.
17694    pub cursor: String,
17695}
17696
17697impl MembersListContinueArg {
17698    pub fn new(cursor: String) -> Self {
17699        MembersListContinueArg {
17700            cursor,
17701        }
17702    }
17703}
17704
17705const MEMBERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
17706impl MembersListContinueArg {
17707    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17708        map: V,
17709    ) -> Result<MembersListContinueArg, V::Error> {
17710        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17711    }
17712
17713    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17714        mut map: V,
17715        optional: bool,
17716    ) -> Result<Option<MembersListContinueArg>, V::Error> {
17717        let mut field_cursor = None;
17718        let mut nothing = true;
17719        while let Some(key) = map.next_key::<&str>()? {
17720            nothing = false;
17721            match key {
17722                "cursor" => {
17723                    if field_cursor.is_some() {
17724                        return Err(::serde::de::Error::duplicate_field("cursor"));
17725                    }
17726                    field_cursor = Some(map.next_value()?);
17727                }
17728                _ => {
17729                    // unknown field allowed and ignored
17730                    map.next_value::<::serde_json::Value>()?;
17731                }
17732            }
17733        }
17734        if optional && nothing {
17735            return Ok(None);
17736        }
17737        let result = MembersListContinueArg {
17738            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
17739        };
17740        Ok(Some(result))
17741    }
17742
17743    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17744        &self,
17745        s: &mut S::SerializeStruct,
17746    ) -> Result<(), S::Error> {
17747        use serde::ser::SerializeStruct;
17748        s.serialize_field("cursor", &self.cursor)?;
17749        Ok(())
17750    }
17751}
17752
17753impl<'de> ::serde::de::Deserialize<'de> for MembersListContinueArg {
17754    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17755        // struct deserializer
17756        use serde::de::{MapAccess, Visitor};
17757        struct StructVisitor;
17758        impl<'de> Visitor<'de> for StructVisitor {
17759            type Value = MembersListContinueArg;
17760            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17761                f.write_str("a MembersListContinueArg struct")
17762            }
17763            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17764                MembersListContinueArg::internal_deserialize(map)
17765            }
17766        }
17767        deserializer.deserialize_struct("MembersListContinueArg", MEMBERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
17768    }
17769}
17770
17771impl ::serde::ser::Serialize for MembersListContinueArg {
17772    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17773        // struct serializer
17774        use serde::ser::SerializeStruct;
17775        let mut s = serializer.serialize_struct("MembersListContinueArg", 1)?;
17776        self.internal_serialize::<S>(&mut s)?;
17777        s.end()
17778    }
17779}
17780
17781#[derive(Debug, Clone, PartialEq, Eq)]
17782#[non_exhaustive] // variants may be added in the future
17783pub enum MembersListContinueError {
17784    /// The cursor is invalid.
17785    InvalidCursor,
17786    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17787    /// typically indicates that this SDK version is out of date.
17788    Other,
17789}
17790
17791impl<'de> ::serde::de::Deserialize<'de> for MembersListContinueError {
17792    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17793        // union deserializer
17794        use serde::de::{self, MapAccess, Visitor};
17795        struct EnumVisitor;
17796        impl<'de> Visitor<'de> for EnumVisitor {
17797            type Value = MembersListContinueError;
17798            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17799                f.write_str("a MembersListContinueError structure")
17800            }
17801            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17802                let tag: &str = match map.next_key()? {
17803                    Some(".tag") => map.next_value()?,
17804                    _ => return Err(de::Error::missing_field(".tag"))
17805                };
17806                let value = match tag {
17807                    "invalid_cursor" => MembersListContinueError::InvalidCursor,
17808                    _ => MembersListContinueError::Other,
17809                };
17810                crate::eat_json_fields(&mut map)?;
17811                Ok(value)
17812            }
17813        }
17814        const VARIANTS: &[&str] = &["invalid_cursor",
17815                                    "other"];
17816        deserializer.deserialize_struct("MembersListContinueError", VARIANTS, EnumVisitor)
17817    }
17818}
17819
17820impl ::serde::ser::Serialize for MembersListContinueError {
17821    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17822        // union serializer
17823        use serde::ser::SerializeStruct;
17824        match self {
17825            MembersListContinueError::InvalidCursor => {
17826                // unit
17827                let mut s = serializer.serialize_struct("MembersListContinueError", 1)?;
17828                s.serialize_field(".tag", "invalid_cursor")?;
17829                s.end()
17830            }
17831            MembersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17832        }
17833    }
17834}
17835
17836impl ::std::error::Error for MembersListContinueError {
17837}
17838
17839impl ::std::fmt::Display for MembersListContinueError {
17840    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17841        match self {
17842            MembersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
17843            _ => write!(f, "{:?}", *self),
17844        }
17845    }
17846}
17847
17848
17849#[derive(Debug, Clone, PartialEq, Eq)]
17850#[non_exhaustive] // variants may be added in the future
17851pub enum MembersListError {
17852    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17853    /// typically indicates that this SDK version is out of date.
17854    Other,
17855}
17856
17857impl<'de> ::serde::de::Deserialize<'de> for MembersListError {
17858    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17859        // union deserializer
17860        use serde::de::{self, MapAccess, Visitor};
17861        struct EnumVisitor;
17862        impl<'de> Visitor<'de> for EnumVisitor {
17863            type Value = MembersListError;
17864            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17865                f.write_str("a MembersListError structure")
17866            }
17867            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17868                let tag: &str = match map.next_key()? {
17869                    Some(".tag") => map.next_value()?,
17870                    _ => return Err(de::Error::missing_field(".tag"))
17871                };
17872                // open enum with no defined variants
17873                let _ = tag;
17874                crate::eat_json_fields(&mut map)?;
17875                Ok(MembersListError::Other)
17876            }
17877        }
17878        const VARIANTS: &[&str] = &["other"];
17879        deserializer.deserialize_struct("MembersListError", VARIANTS, EnumVisitor)
17880    }
17881}
17882
17883impl ::serde::ser::Serialize for MembersListError {
17884    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17885        // union serializer
17886        #![allow(unused_variables)]
17887        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
17888    }
17889}
17890
17891impl ::std::error::Error for MembersListError {
17892}
17893
17894impl ::std::fmt::Display for MembersListError {
17895    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17896        write!(f, "{:?}", *self)
17897    }
17898}
17899
17900#[derive(Debug, Clone, PartialEq, Eq)]
17901#[non_exhaustive] // structs may have more fields added in the future.
17902pub struct MembersListResult {
17903    /// List of team members.
17904    pub members: Vec<TeamMemberInfo>,
17905    /// Pass the cursor into [`members_list_continue()`](crate::team::members_list_continue) to
17906    /// obtain the additional members.
17907    pub cursor: String,
17908    /// Is true if there are additional team members that have not been returned yet. An additional
17909    /// call to [`members_list_continue()`](crate::team::members_list_continue) can retrieve them.
17910    pub has_more: bool,
17911}
17912
17913impl MembersListResult {
17914    pub fn new(members: Vec<TeamMemberInfo>, cursor: String, has_more: bool) -> Self {
17915        MembersListResult {
17916            members,
17917            cursor,
17918            has_more,
17919        }
17920    }
17921}
17922
17923const MEMBERS_LIST_RESULT_FIELDS: &[&str] = &["members",
17924                                              "cursor",
17925                                              "has_more"];
17926impl MembersListResult {
17927    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17928        map: V,
17929    ) -> Result<MembersListResult, V::Error> {
17930        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17931    }
17932
17933    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17934        mut map: V,
17935        optional: bool,
17936    ) -> Result<Option<MembersListResult>, V::Error> {
17937        let mut field_members = None;
17938        let mut field_cursor = None;
17939        let mut field_has_more = None;
17940        let mut nothing = true;
17941        while let Some(key) = map.next_key::<&str>()? {
17942            nothing = false;
17943            match key {
17944                "members" => {
17945                    if field_members.is_some() {
17946                        return Err(::serde::de::Error::duplicate_field("members"));
17947                    }
17948                    field_members = Some(map.next_value()?);
17949                }
17950                "cursor" => {
17951                    if field_cursor.is_some() {
17952                        return Err(::serde::de::Error::duplicate_field("cursor"));
17953                    }
17954                    field_cursor = Some(map.next_value()?);
17955                }
17956                "has_more" => {
17957                    if field_has_more.is_some() {
17958                        return Err(::serde::de::Error::duplicate_field("has_more"));
17959                    }
17960                    field_has_more = Some(map.next_value()?);
17961                }
17962                _ => {
17963                    // unknown field allowed and ignored
17964                    map.next_value::<::serde_json::Value>()?;
17965                }
17966            }
17967        }
17968        if optional && nothing {
17969            return Ok(None);
17970        }
17971        let result = MembersListResult {
17972            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
17973            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
17974            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
17975        };
17976        Ok(Some(result))
17977    }
17978
17979    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17980        &self,
17981        s: &mut S::SerializeStruct,
17982    ) -> Result<(), S::Error> {
17983        use serde::ser::SerializeStruct;
17984        s.serialize_field("members", &self.members)?;
17985        s.serialize_field("cursor", &self.cursor)?;
17986        s.serialize_field("has_more", &self.has_more)?;
17987        Ok(())
17988    }
17989}
17990
17991impl<'de> ::serde::de::Deserialize<'de> for MembersListResult {
17992    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17993        // struct deserializer
17994        use serde::de::{MapAccess, Visitor};
17995        struct StructVisitor;
17996        impl<'de> Visitor<'de> for StructVisitor {
17997            type Value = MembersListResult;
17998            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17999                f.write_str("a MembersListResult struct")
18000            }
18001            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18002                MembersListResult::internal_deserialize(map)
18003            }
18004        }
18005        deserializer.deserialize_struct("MembersListResult", MEMBERS_LIST_RESULT_FIELDS, StructVisitor)
18006    }
18007}
18008
18009impl ::serde::ser::Serialize for MembersListResult {
18010    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18011        // struct serializer
18012        use serde::ser::SerializeStruct;
18013        let mut s = serializer.serialize_struct("MembersListResult", 3)?;
18014        self.internal_serialize::<S>(&mut s)?;
18015        s.end()
18016    }
18017}
18018
18019#[derive(Debug, Clone, PartialEq, Eq)]
18020#[non_exhaustive] // structs may have more fields added in the future.
18021pub struct MembersListV2Result {
18022    /// List of team members.
18023    pub members: Vec<TeamMemberInfoV2>,
18024    /// Pass the cursor into [`members_list_continue_v2()`](crate::team::members_list_continue_v2)
18025    /// to obtain the additional members.
18026    pub cursor: String,
18027    /// Is true if there are additional team members that have not been returned yet. An additional
18028    /// call to [`members_list_continue_v2()`](crate::team::members_list_continue_v2) can retrieve
18029    /// them.
18030    pub has_more: bool,
18031}
18032
18033impl MembersListV2Result {
18034    pub fn new(members: Vec<TeamMemberInfoV2>, cursor: String, has_more: bool) -> Self {
18035        MembersListV2Result {
18036            members,
18037            cursor,
18038            has_more,
18039        }
18040    }
18041}
18042
18043const MEMBERS_LIST_V2_RESULT_FIELDS: &[&str] = &["members",
18044                                                 "cursor",
18045                                                 "has_more"];
18046impl MembersListV2Result {
18047    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18048        map: V,
18049    ) -> Result<MembersListV2Result, V::Error> {
18050        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18051    }
18052
18053    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18054        mut map: V,
18055        optional: bool,
18056    ) -> Result<Option<MembersListV2Result>, V::Error> {
18057        let mut field_members = None;
18058        let mut field_cursor = None;
18059        let mut field_has_more = None;
18060        let mut nothing = true;
18061        while let Some(key) = map.next_key::<&str>()? {
18062            nothing = false;
18063            match key {
18064                "members" => {
18065                    if field_members.is_some() {
18066                        return Err(::serde::de::Error::duplicate_field("members"));
18067                    }
18068                    field_members = Some(map.next_value()?);
18069                }
18070                "cursor" => {
18071                    if field_cursor.is_some() {
18072                        return Err(::serde::de::Error::duplicate_field("cursor"));
18073                    }
18074                    field_cursor = Some(map.next_value()?);
18075                }
18076                "has_more" => {
18077                    if field_has_more.is_some() {
18078                        return Err(::serde::de::Error::duplicate_field("has_more"));
18079                    }
18080                    field_has_more = Some(map.next_value()?);
18081                }
18082                _ => {
18083                    // unknown field allowed and ignored
18084                    map.next_value::<::serde_json::Value>()?;
18085                }
18086            }
18087        }
18088        if optional && nothing {
18089            return Ok(None);
18090        }
18091        let result = MembersListV2Result {
18092            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
18093            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
18094            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
18095        };
18096        Ok(Some(result))
18097    }
18098
18099    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18100        &self,
18101        s: &mut S::SerializeStruct,
18102    ) -> Result<(), S::Error> {
18103        use serde::ser::SerializeStruct;
18104        s.serialize_field("members", &self.members)?;
18105        s.serialize_field("cursor", &self.cursor)?;
18106        s.serialize_field("has_more", &self.has_more)?;
18107        Ok(())
18108    }
18109}
18110
18111impl<'de> ::serde::de::Deserialize<'de> for MembersListV2Result {
18112    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18113        // struct deserializer
18114        use serde::de::{MapAccess, Visitor};
18115        struct StructVisitor;
18116        impl<'de> Visitor<'de> for StructVisitor {
18117            type Value = MembersListV2Result;
18118            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18119                f.write_str("a MembersListV2Result struct")
18120            }
18121            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18122                MembersListV2Result::internal_deserialize(map)
18123            }
18124        }
18125        deserializer.deserialize_struct("MembersListV2Result", MEMBERS_LIST_V2_RESULT_FIELDS, StructVisitor)
18126    }
18127}
18128
18129impl ::serde::ser::Serialize for MembersListV2Result {
18130    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18131        // struct serializer
18132        use serde::ser::SerializeStruct;
18133        let mut s = serializer.serialize_struct("MembersListV2Result", 3)?;
18134        self.internal_serialize::<S>(&mut s)?;
18135        s.end()
18136    }
18137}
18138
18139#[derive(Debug, Clone, PartialEq, Eq)]
18140#[non_exhaustive] // variants may be added in the future
18141pub enum MembersPermanentlyDeleteFilesError {
18142    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18143    /// this team.
18144    UserNotFound,
18145    /// The user is not a member of the team.
18146    UserNotInTeam,
18147    /// Cannot permanently delete files while it's being transferred.
18148    TransferInProgress,
18149    /// Cannot permanently delete files that have already been transferred.
18150    AlreadyTransferred,
18151    /// Cannot permanently delete files that have already been transferred or deleted.
18152    AlreadyTransferredOrDeleted,
18153    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18154    /// typically indicates that this SDK version is out of date.
18155    Other,
18156}
18157
18158impl<'de> ::serde::de::Deserialize<'de> for MembersPermanentlyDeleteFilesError {
18159    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18160        // union deserializer
18161        use serde::de::{self, MapAccess, Visitor};
18162        struct EnumVisitor;
18163        impl<'de> Visitor<'de> for EnumVisitor {
18164            type Value = MembersPermanentlyDeleteFilesError;
18165            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18166                f.write_str("a MembersPermanentlyDeleteFilesError structure")
18167            }
18168            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18169                let tag: &str = match map.next_key()? {
18170                    Some(".tag") => map.next_value()?,
18171                    _ => return Err(de::Error::missing_field(".tag"))
18172                };
18173                let value = match tag {
18174                    "user_not_found" => MembersPermanentlyDeleteFilesError::UserNotFound,
18175                    "user_not_in_team" => MembersPermanentlyDeleteFilesError::UserNotInTeam,
18176                    "transfer_in_progress" => MembersPermanentlyDeleteFilesError::TransferInProgress,
18177                    "already_transferred" => MembersPermanentlyDeleteFilesError::AlreadyTransferred,
18178                    "already_transferred_or_deleted" => MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted,
18179                    _ => MembersPermanentlyDeleteFilesError::Other,
18180                };
18181                crate::eat_json_fields(&mut map)?;
18182                Ok(value)
18183            }
18184        }
18185        const VARIANTS: &[&str] = &["user_not_found",
18186                                    "user_not_in_team",
18187                                    "other",
18188                                    "transfer_in_progress",
18189                                    "already_transferred",
18190                                    "already_transferred_or_deleted"];
18191        deserializer.deserialize_struct("MembersPermanentlyDeleteFilesError", VARIANTS, EnumVisitor)
18192    }
18193}
18194
18195impl ::serde::ser::Serialize for MembersPermanentlyDeleteFilesError {
18196    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18197        // union serializer
18198        use serde::ser::SerializeStruct;
18199        match self {
18200            MembersPermanentlyDeleteFilesError::UserNotFound => {
18201                // unit
18202                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18203                s.serialize_field(".tag", "user_not_found")?;
18204                s.end()
18205            }
18206            MembersPermanentlyDeleteFilesError::UserNotInTeam => {
18207                // unit
18208                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18209                s.serialize_field(".tag", "user_not_in_team")?;
18210                s.end()
18211            }
18212            MembersPermanentlyDeleteFilesError::TransferInProgress => {
18213                // unit
18214                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18215                s.serialize_field(".tag", "transfer_in_progress")?;
18216                s.end()
18217            }
18218            MembersPermanentlyDeleteFilesError::AlreadyTransferred => {
18219                // unit
18220                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18221                s.serialize_field(".tag", "already_transferred")?;
18222                s.end()
18223            }
18224            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => {
18225                // unit
18226                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18227                s.serialize_field(".tag", "already_transferred_or_deleted")?;
18228                s.end()
18229            }
18230            MembersPermanentlyDeleteFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18231        }
18232    }
18233}
18234
18235impl ::std::error::Error for MembersPermanentlyDeleteFilesError {
18236}
18237
18238impl ::std::fmt::Display for MembersPermanentlyDeleteFilesError {
18239    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18240        match self {
18241            MembersPermanentlyDeleteFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
18242            MembersPermanentlyDeleteFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
18243            MembersPermanentlyDeleteFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
18244            MembersPermanentlyDeleteFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
18245            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
18246            _ => write!(f, "{:?}", *self),
18247        }
18248    }
18249}
18250
18251// union extends MembersDeactivateError
18252impl From<MembersDeactivateError> for MembersPermanentlyDeleteFilesError {
18253    fn from(parent: MembersDeactivateError) -> Self {
18254        match parent {
18255            MembersDeactivateError::UserNotFound => MembersPermanentlyDeleteFilesError::UserNotFound,
18256            MembersDeactivateError::UserNotInTeam => MembersPermanentlyDeleteFilesError::UserNotInTeam,
18257            MembersDeactivateError::Other => MembersPermanentlyDeleteFilesError::Other,
18258        }
18259    }
18260}
18261/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
18262/// account.
18263#[derive(Debug, Clone, PartialEq, Eq)]
18264#[non_exhaustive] // structs may have more fields added in the future.
18265pub struct MembersRecoverArg {
18266    /// Identity of user to recover.
18267    pub user: UserSelectorArg,
18268}
18269
18270impl MembersRecoverArg {
18271    pub fn new(user: UserSelectorArg) -> Self {
18272        MembersRecoverArg {
18273            user,
18274        }
18275    }
18276}
18277
18278const MEMBERS_RECOVER_ARG_FIELDS: &[&str] = &["user"];
18279impl MembersRecoverArg {
18280    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18281        map: V,
18282    ) -> Result<MembersRecoverArg, V::Error> {
18283        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18284    }
18285
18286    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18287        mut map: V,
18288        optional: bool,
18289    ) -> Result<Option<MembersRecoverArg>, V::Error> {
18290        let mut field_user = None;
18291        let mut nothing = true;
18292        while let Some(key) = map.next_key::<&str>()? {
18293            nothing = false;
18294            match key {
18295                "user" => {
18296                    if field_user.is_some() {
18297                        return Err(::serde::de::Error::duplicate_field("user"));
18298                    }
18299                    field_user = Some(map.next_value()?);
18300                }
18301                _ => {
18302                    // unknown field allowed and ignored
18303                    map.next_value::<::serde_json::Value>()?;
18304                }
18305            }
18306        }
18307        if optional && nothing {
18308            return Ok(None);
18309        }
18310        let result = MembersRecoverArg {
18311            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
18312        };
18313        Ok(Some(result))
18314    }
18315
18316    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18317        &self,
18318        s: &mut S::SerializeStruct,
18319    ) -> Result<(), S::Error> {
18320        use serde::ser::SerializeStruct;
18321        s.serialize_field("user", &self.user)?;
18322        Ok(())
18323    }
18324}
18325
18326impl<'de> ::serde::de::Deserialize<'de> for MembersRecoverArg {
18327    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18328        // struct deserializer
18329        use serde::de::{MapAccess, Visitor};
18330        struct StructVisitor;
18331        impl<'de> Visitor<'de> for StructVisitor {
18332            type Value = MembersRecoverArg;
18333            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18334                f.write_str("a MembersRecoverArg struct")
18335            }
18336            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18337                MembersRecoverArg::internal_deserialize(map)
18338            }
18339        }
18340        deserializer.deserialize_struct("MembersRecoverArg", MEMBERS_RECOVER_ARG_FIELDS, StructVisitor)
18341    }
18342}
18343
18344impl ::serde::ser::Serialize for MembersRecoverArg {
18345    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18346        // struct serializer
18347        use serde::ser::SerializeStruct;
18348        let mut s = serializer.serialize_struct("MembersRecoverArg", 1)?;
18349        self.internal_serialize::<S>(&mut s)?;
18350        s.end()
18351    }
18352}
18353
18354#[derive(Debug, Clone, PartialEq, Eq)]
18355#[non_exhaustive] // variants may be added in the future
18356pub enum MembersRecoverError {
18357    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18358    /// this team.
18359    UserNotFound,
18360    /// The user is not recoverable.
18361    UserUnrecoverable,
18362    /// The user is not a member of the team.
18363    UserNotInTeam,
18364    /// Team is full. The organization has no available licenses.
18365    TeamLicenseLimit,
18366    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18367    /// typically indicates that this SDK version is out of date.
18368    Other,
18369}
18370
18371impl<'de> ::serde::de::Deserialize<'de> for MembersRecoverError {
18372    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18373        // union deserializer
18374        use serde::de::{self, MapAccess, Visitor};
18375        struct EnumVisitor;
18376        impl<'de> Visitor<'de> for EnumVisitor {
18377            type Value = MembersRecoverError;
18378            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18379                f.write_str("a MembersRecoverError structure")
18380            }
18381            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18382                let tag: &str = match map.next_key()? {
18383                    Some(".tag") => map.next_value()?,
18384                    _ => return Err(de::Error::missing_field(".tag"))
18385                };
18386                let value = match tag {
18387                    "user_not_found" => MembersRecoverError::UserNotFound,
18388                    "user_unrecoverable" => MembersRecoverError::UserUnrecoverable,
18389                    "user_not_in_team" => MembersRecoverError::UserNotInTeam,
18390                    "team_license_limit" => MembersRecoverError::TeamLicenseLimit,
18391                    _ => MembersRecoverError::Other,
18392                };
18393                crate::eat_json_fields(&mut map)?;
18394                Ok(value)
18395            }
18396        }
18397        const VARIANTS: &[&str] = &["user_not_found",
18398                                    "user_unrecoverable",
18399                                    "user_not_in_team",
18400                                    "team_license_limit",
18401                                    "other"];
18402        deserializer.deserialize_struct("MembersRecoverError", VARIANTS, EnumVisitor)
18403    }
18404}
18405
18406impl ::serde::ser::Serialize for MembersRecoverError {
18407    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18408        // union serializer
18409        use serde::ser::SerializeStruct;
18410        match self {
18411            MembersRecoverError::UserNotFound => {
18412                // unit
18413                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
18414                s.serialize_field(".tag", "user_not_found")?;
18415                s.end()
18416            }
18417            MembersRecoverError::UserUnrecoverable => {
18418                // unit
18419                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
18420                s.serialize_field(".tag", "user_unrecoverable")?;
18421                s.end()
18422            }
18423            MembersRecoverError::UserNotInTeam => {
18424                // unit
18425                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
18426                s.serialize_field(".tag", "user_not_in_team")?;
18427                s.end()
18428            }
18429            MembersRecoverError::TeamLicenseLimit => {
18430                // unit
18431                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
18432                s.serialize_field(".tag", "team_license_limit")?;
18433                s.end()
18434            }
18435            MembersRecoverError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18436        }
18437    }
18438}
18439
18440impl ::std::error::Error for MembersRecoverError {
18441}
18442
18443impl ::std::fmt::Display for MembersRecoverError {
18444    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18445        match self {
18446            MembersRecoverError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
18447            MembersRecoverError::UserUnrecoverable => f.write_str("The user is not recoverable."),
18448            MembersRecoverError::UserNotInTeam => f.write_str("The user is not a member of the team."),
18449            MembersRecoverError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
18450            _ => write!(f, "{:?}", *self),
18451        }
18452    }
18453}
18454
18455// union extends UserSelectorError
18456impl From<UserSelectorError> for MembersRecoverError {
18457    fn from(parent: UserSelectorError) -> Self {
18458        match parent {
18459            UserSelectorError::UserNotFound => MembersRecoverError::UserNotFound,
18460        }
18461    }
18462}
18463#[derive(Debug, Clone, PartialEq, Eq)]
18464#[non_exhaustive] // structs may have more fields added in the future.
18465pub struct MembersRemoveArg {
18466    /// Identity of user to remove/suspend/have their files moved.
18467    pub user: UserSelectorArg,
18468    /// If provided, controls if the user's data will be deleted on their linked devices.
18469    pub wipe_data: bool,
18470    /// If provided, files from the deleted member account will be transferred to this user.
18471    pub transfer_dest_id: Option<UserSelectorArg>,
18472    /// If provided, errors during the transfer process will be sent via email to this user. If the
18473    /// transfer_dest_id argument was provided, then this argument must be provided as well.
18474    pub transfer_admin_id: Option<UserSelectorArg>,
18475    /// Downgrade the member to a Basic account. The user will retain the email address associated
18476    /// with their Dropbox account and data in their account that is not restricted to team members.
18477    /// In order to keep the account the argument `wipe_data` should be set to `false`.
18478    pub keep_account: bool,
18479    /// If provided, allows removed users to keep access to Dropbox folders (not Dropbox Paper
18480    /// folders) already explicitly shared with them (not via a group) when they are downgraded to a
18481    /// Basic account. Users will not retain access to folders that do not allow external sharing.
18482    /// In order to keep the sharing relationships, the arguments `wipe_data` should be set to
18483    /// `false` and `keep_account` should be set to `true`.
18484    pub retain_team_shares: bool,
18485    /// Permanently delete the data in the deleted member's account. After permanent deletion, the
18486    /// data is no longer available to be transferred to a different user.
18487    pub permanently_delete_files: bool,
18488}
18489
18490impl MembersRemoveArg {
18491    pub fn new(user: UserSelectorArg) -> Self {
18492        MembersRemoveArg {
18493            user,
18494            wipe_data: true,
18495            transfer_dest_id: None,
18496            transfer_admin_id: None,
18497            keep_account: false,
18498            retain_team_shares: false,
18499            permanently_delete_files: false,
18500        }
18501    }
18502
18503    pub fn with_wipe_data(mut self, value: bool) -> Self {
18504        self.wipe_data = value;
18505        self
18506    }
18507
18508    pub fn with_transfer_dest_id(mut self, value: UserSelectorArg) -> Self {
18509        self.transfer_dest_id = Some(value);
18510        self
18511    }
18512
18513    pub fn with_transfer_admin_id(mut self, value: UserSelectorArg) -> Self {
18514        self.transfer_admin_id = Some(value);
18515        self
18516    }
18517
18518    pub fn with_keep_account(mut self, value: bool) -> Self {
18519        self.keep_account = value;
18520        self
18521    }
18522
18523    pub fn with_retain_team_shares(mut self, value: bool) -> Self {
18524        self.retain_team_shares = value;
18525        self
18526    }
18527
18528    pub fn with_permanently_delete_files(mut self, value: bool) -> Self {
18529        self.permanently_delete_files = value;
18530        self
18531    }
18532}
18533
18534const MEMBERS_REMOVE_ARG_FIELDS: &[&str] = &["user",
18535                                             "wipe_data",
18536                                             "transfer_dest_id",
18537                                             "transfer_admin_id",
18538                                             "keep_account",
18539                                             "retain_team_shares",
18540                                             "permanently_delete_files"];
18541impl MembersRemoveArg {
18542    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18543        map: V,
18544    ) -> Result<MembersRemoveArg, V::Error> {
18545        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18546    }
18547
18548    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18549        mut map: V,
18550        optional: bool,
18551    ) -> Result<Option<MembersRemoveArg>, V::Error> {
18552        let mut field_user = None;
18553        let mut field_wipe_data = None;
18554        let mut field_transfer_dest_id = None;
18555        let mut field_transfer_admin_id = None;
18556        let mut field_keep_account = None;
18557        let mut field_retain_team_shares = None;
18558        let mut field_permanently_delete_files = None;
18559        let mut nothing = true;
18560        while let Some(key) = map.next_key::<&str>()? {
18561            nothing = false;
18562            match key {
18563                "user" => {
18564                    if field_user.is_some() {
18565                        return Err(::serde::de::Error::duplicate_field("user"));
18566                    }
18567                    field_user = Some(map.next_value()?);
18568                }
18569                "wipe_data" => {
18570                    if field_wipe_data.is_some() {
18571                        return Err(::serde::de::Error::duplicate_field("wipe_data"));
18572                    }
18573                    field_wipe_data = Some(map.next_value()?);
18574                }
18575                "transfer_dest_id" => {
18576                    if field_transfer_dest_id.is_some() {
18577                        return Err(::serde::de::Error::duplicate_field("transfer_dest_id"));
18578                    }
18579                    field_transfer_dest_id = Some(map.next_value()?);
18580                }
18581                "transfer_admin_id" => {
18582                    if field_transfer_admin_id.is_some() {
18583                        return Err(::serde::de::Error::duplicate_field("transfer_admin_id"));
18584                    }
18585                    field_transfer_admin_id = Some(map.next_value()?);
18586                }
18587                "keep_account" => {
18588                    if field_keep_account.is_some() {
18589                        return Err(::serde::de::Error::duplicate_field("keep_account"));
18590                    }
18591                    field_keep_account = Some(map.next_value()?);
18592                }
18593                "retain_team_shares" => {
18594                    if field_retain_team_shares.is_some() {
18595                        return Err(::serde::de::Error::duplicate_field("retain_team_shares"));
18596                    }
18597                    field_retain_team_shares = Some(map.next_value()?);
18598                }
18599                "permanently_delete_files" => {
18600                    if field_permanently_delete_files.is_some() {
18601                        return Err(::serde::de::Error::duplicate_field("permanently_delete_files"));
18602                    }
18603                    field_permanently_delete_files = Some(map.next_value()?);
18604                }
18605                _ => {
18606                    // unknown field allowed and ignored
18607                    map.next_value::<::serde_json::Value>()?;
18608                }
18609            }
18610        }
18611        if optional && nothing {
18612            return Ok(None);
18613        }
18614        let result = MembersRemoveArg {
18615            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
18616            wipe_data: field_wipe_data.unwrap_or(true),
18617            transfer_dest_id: field_transfer_dest_id.and_then(Option::flatten),
18618            transfer_admin_id: field_transfer_admin_id.and_then(Option::flatten),
18619            keep_account: field_keep_account.unwrap_or(false),
18620            retain_team_shares: field_retain_team_shares.unwrap_or(false),
18621            permanently_delete_files: field_permanently_delete_files.unwrap_or(false),
18622        };
18623        Ok(Some(result))
18624    }
18625
18626    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18627        &self,
18628        s: &mut S::SerializeStruct,
18629    ) -> Result<(), S::Error> {
18630        use serde::ser::SerializeStruct;
18631        s.serialize_field("user", &self.user)?;
18632        if !self.wipe_data {
18633            s.serialize_field("wipe_data", &self.wipe_data)?;
18634        }
18635        if let Some(val) = &self.transfer_dest_id {
18636            s.serialize_field("transfer_dest_id", val)?;
18637        }
18638        if let Some(val) = &self.transfer_admin_id {
18639            s.serialize_field("transfer_admin_id", val)?;
18640        }
18641        if self.keep_account {
18642            s.serialize_field("keep_account", &self.keep_account)?;
18643        }
18644        if self.retain_team_shares {
18645            s.serialize_field("retain_team_shares", &self.retain_team_shares)?;
18646        }
18647        if self.permanently_delete_files {
18648            s.serialize_field("permanently_delete_files", &self.permanently_delete_files)?;
18649        }
18650        Ok(())
18651    }
18652}
18653
18654impl<'de> ::serde::de::Deserialize<'de> for MembersRemoveArg {
18655    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18656        // struct deserializer
18657        use serde::de::{MapAccess, Visitor};
18658        struct StructVisitor;
18659        impl<'de> Visitor<'de> for StructVisitor {
18660            type Value = MembersRemoveArg;
18661            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18662                f.write_str("a MembersRemoveArg struct")
18663            }
18664            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18665                MembersRemoveArg::internal_deserialize(map)
18666            }
18667        }
18668        deserializer.deserialize_struct("MembersRemoveArg", MEMBERS_REMOVE_ARG_FIELDS, StructVisitor)
18669    }
18670}
18671
18672impl ::serde::ser::Serialize for MembersRemoveArg {
18673    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18674        // struct serializer
18675        use serde::ser::SerializeStruct;
18676        let mut s = serializer.serialize_struct("MembersRemoveArg", 7)?;
18677        self.internal_serialize::<S>(&mut s)?;
18678        s.end()
18679    }
18680}
18681
18682// struct extends MembersDeactivateArg
18683impl From<MembersRemoveArg> for MembersDeactivateArg {
18684    fn from(subtype: MembersRemoveArg) -> Self {
18685        Self {
18686            user: subtype.user,
18687            wipe_data: subtype.wipe_data,
18688        }
18689    }
18690}
18691#[derive(Debug, Clone, PartialEq, Eq)]
18692#[non_exhaustive] // variants may be added in the future
18693pub enum MembersRemoveError {
18694    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18695    /// this team.
18696    UserNotFound,
18697    /// The user is not a member of the team.
18698    UserNotInTeam,
18699    /// Cannot permanently delete files while it's being transferred.
18700    TransferInProgress,
18701    /// Cannot permanently delete files that have already been transferred.
18702    AlreadyTransferred,
18703    /// Cannot permanently delete files that have already been transferred or deleted.
18704    AlreadyTransferredOrDeleted,
18705    /// Expected removed user and transfer_dest user to be different.
18706    RemovedAndTransferDestShouldDiffer,
18707    /// Expected removed user and transfer_admin user to be different.
18708    RemovedAndTransferAdminShouldDiffer,
18709    /// No matching user found for the argument transfer_dest_id.
18710    TransferDestUserNotFound,
18711    /// The provided transfer_dest_id does not exist on this team.
18712    TransferDestUserNotInTeam,
18713    /// The provided transfer_admin_id does not exist on this team.
18714    TransferAdminUserNotInTeam,
18715    /// No matching user found for the argument transfer_admin_id.
18716    TransferAdminUserNotFound,
18717    /// The transfer_admin_id argument must be provided when file transfer is requested.
18718    UnspecifiedTransferAdminId,
18719    /// Specified transfer_admin user is not a team admin.
18720    TransferAdminIsNotAdmin,
18721    /// The recipient user's email is not verified.
18722    RecipientNotVerified,
18723    /// The user is the last admin of the team, so it cannot be removed from it.
18724    RemoveLastAdmin,
18725    /// Cannot keep account and transfer the data to another user at the same time.
18726    CannotKeepAccountAndTransfer,
18727    /// Cannot keep account and delete the data at the same time. To keep the account the argument
18728    /// wipe_data should be set to `false`.
18729    CannotKeepAccountAndDeleteData,
18730    /// Cannot keep account and permanently delete the data at the same time. To keep the account
18731    /// the argument permanently_delete_files should be set to `false`.
18732    CannotKeepAccountAndPermanentlyDelete,
18733    /// The email address of the user is too long to be disabled.
18734    EmailAddressTooLongToBeDisabled,
18735    /// Cannot keep account of an invited user.
18736    CannotKeepInvitedUserAccount,
18737    /// Cannot retain team shares when the user's data is marked for deletion on their linked
18738    /// devices. The argument wipe_data should be set to `false`.
18739    CannotRetainSharesWhenDataWiped,
18740    /// The user's account must be kept in order to retain team shares. The argument keep_account
18741    /// should be set to `true`.
18742    CannotRetainSharesWhenNoAccountKept,
18743    /// Externally sharing files, folders, and links must be enabled in team settings in order to
18744    /// retain team shares for the user.
18745    CannotRetainSharesWhenTeamExternalSharingOff,
18746    /// Only a team admin, can convert this account to a Basic account.
18747    CannotKeepAccount,
18748    /// This user content is currently being held. To convert this member's account to a Basic
18749    /// account, you'll first need to remove them from the hold.
18750    CannotKeepAccountUnderLegalHold,
18751    /// To convert this member to a Basic account, they'll first need to sign in to Dropbox and
18752    /// agree to the terms of service.
18753    CannotKeepAccountRequiredToSignTos,
18754    /// Cannot permanently delete files and transfer the data to another user at the same time.
18755    CannotPermanentlyDeleteAndTransfer,
18756    /// This user is the active destination of an in-progress file transfer. Wait for the transfer
18757    /// to complete before removing this member.
18758    MemberIsTransferDestination,
18759    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18760    /// typically indicates that this SDK version is out of date.
18761    Other,
18762}
18763
18764impl<'de> ::serde::de::Deserialize<'de> for MembersRemoveError {
18765    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18766        // union deserializer
18767        use serde::de::{self, MapAccess, Visitor};
18768        struct EnumVisitor;
18769        impl<'de> Visitor<'de> for EnumVisitor {
18770            type Value = MembersRemoveError;
18771            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18772                f.write_str("a MembersRemoveError structure")
18773            }
18774            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18775                let tag: &str = match map.next_key()? {
18776                    Some(".tag") => map.next_value()?,
18777                    _ => return Err(de::Error::missing_field(".tag"))
18778                };
18779                let value = match tag {
18780                    "user_not_found" => MembersRemoveError::UserNotFound,
18781                    "user_not_in_team" => MembersRemoveError::UserNotInTeam,
18782                    "transfer_in_progress" => MembersRemoveError::TransferInProgress,
18783                    "already_transferred" => MembersRemoveError::AlreadyTransferred,
18784                    "already_transferred_or_deleted" => MembersRemoveError::AlreadyTransferredOrDeleted,
18785                    "removed_and_transfer_dest_should_differ" => MembersRemoveError::RemovedAndTransferDestShouldDiffer,
18786                    "removed_and_transfer_admin_should_differ" => MembersRemoveError::RemovedAndTransferAdminShouldDiffer,
18787                    "transfer_dest_user_not_found" => MembersRemoveError::TransferDestUserNotFound,
18788                    "transfer_dest_user_not_in_team" => MembersRemoveError::TransferDestUserNotInTeam,
18789                    "transfer_admin_user_not_in_team" => MembersRemoveError::TransferAdminUserNotInTeam,
18790                    "transfer_admin_user_not_found" => MembersRemoveError::TransferAdminUserNotFound,
18791                    "unspecified_transfer_admin_id" => MembersRemoveError::UnspecifiedTransferAdminId,
18792                    "transfer_admin_is_not_admin" => MembersRemoveError::TransferAdminIsNotAdmin,
18793                    "recipient_not_verified" => MembersRemoveError::RecipientNotVerified,
18794                    "remove_last_admin" => MembersRemoveError::RemoveLastAdmin,
18795                    "cannot_keep_account_and_transfer" => MembersRemoveError::CannotKeepAccountAndTransfer,
18796                    "cannot_keep_account_and_delete_data" => MembersRemoveError::CannotKeepAccountAndDeleteData,
18797                    "cannot_keep_account_and_permanently_delete" => MembersRemoveError::CannotKeepAccountAndPermanentlyDelete,
18798                    "email_address_too_long_to_be_disabled" => MembersRemoveError::EmailAddressTooLongToBeDisabled,
18799                    "cannot_keep_invited_user_account" => MembersRemoveError::CannotKeepInvitedUserAccount,
18800                    "cannot_retain_shares_when_data_wiped" => MembersRemoveError::CannotRetainSharesWhenDataWiped,
18801                    "cannot_retain_shares_when_no_account_kept" => MembersRemoveError::CannotRetainSharesWhenNoAccountKept,
18802                    "cannot_retain_shares_when_team_external_sharing_off" => MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff,
18803                    "cannot_keep_account" => MembersRemoveError::CannotKeepAccount,
18804                    "cannot_keep_account_under_legal_hold" => MembersRemoveError::CannotKeepAccountUnderLegalHold,
18805                    "cannot_keep_account_required_to_sign_tos" => MembersRemoveError::CannotKeepAccountRequiredToSignTos,
18806                    "cannot_permanently_delete_and_transfer" => MembersRemoveError::CannotPermanentlyDeleteAndTransfer,
18807                    "member_is_transfer_destination" => MembersRemoveError::MemberIsTransferDestination,
18808                    _ => MembersRemoveError::Other,
18809                };
18810                crate::eat_json_fields(&mut map)?;
18811                Ok(value)
18812            }
18813        }
18814        const VARIANTS: &[&str] = &["user_not_found",
18815                                    "user_not_in_team",
18816                                    "other",
18817                                    "transfer_in_progress",
18818                                    "already_transferred",
18819                                    "already_transferred_or_deleted",
18820                                    "removed_and_transfer_dest_should_differ",
18821                                    "removed_and_transfer_admin_should_differ",
18822                                    "transfer_dest_user_not_found",
18823                                    "transfer_dest_user_not_in_team",
18824                                    "transfer_admin_user_not_in_team",
18825                                    "transfer_admin_user_not_found",
18826                                    "unspecified_transfer_admin_id",
18827                                    "transfer_admin_is_not_admin",
18828                                    "recipient_not_verified",
18829                                    "remove_last_admin",
18830                                    "cannot_keep_account_and_transfer",
18831                                    "cannot_keep_account_and_delete_data",
18832                                    "cannot_keep_account_and_permanently_delete",
18833                                    "email_address_too_long_to_be_disabled",
18834                                    "cannot_keep_invited_user_account",
18835                                    "cannot_retain_shares_when_data_wiped",
18836                                    "cannot_retain_shares_when_no_account_kept",
18837                                    "cannot_retain_shares_when_team_external_sharing_off",
18838                                    "cannot_keep_account",
18839                                    "cannot_keep_account_under_legal_hold",
18840                                    "cannot_keep_account_required_to_sign_tos",
18841                                    "cannot_permanently_delete_and_transfer",
18842                                    "member_is_transfer_destination"];
18843        deserializer.deserialize_struct("MembersRemoveError", VARIANTS, EnumVisitor)
18844    }
18845}
18846
18847impl ::serde::ser::Serialize for MembersRemoveError {
18848    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18849        // union serializer
18850        use serde::ser::SerializeStruct;
18851        match self {
18852            MembersRemoveError::UserNotFound => {
18853                // unit
18854                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18855                s.serialize_field(".tag", "user_not_found")?;
18856                s.end()
18857            }
18858            MembersRemoveError::UserNotInTeam => {
18859                // unit
18860                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18861                s.serialize_field(".tag", "user_not_in_team")?;
18862                s.end()
18863            }
18864            MembersRemoveError::TransferInProgress => {
18865                // unit
18866                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18867                s.serialize_field(".tag", "transfer_in_progress")?;
18868                s.end()
18869            }
18870            MembersRemoveError::AlreadyTransferred => {
18871                // unit
18872                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18873                s.serialize_field(".tag", "already_transferred")?;
18874                s.end()
18875            }
18876            MembersRemoveError::AlreadyTransferredOrDeleted => {
18877                // unit
18878                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18879                s.serialize_field(".tag", "already_transferred_or_deleted")?;
18880                s.end()
18881            }
18882            MembersRemoveError::RemovedAndTransferDestShouldDiffer => {
18883                // unit
18884                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18885                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
18886                s.end()
18887            }
18888            MembersRemoveError::RemovedAndTransferAdminShouldDiffer => {
18889                // unit
18890                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18891                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
18892                s.end()
18893            }
18894            MembersRemoveError::TransferDestUserNotFound => {
18895                // unit
18896                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18897                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
18898                s.end()
18899            }
18900            MembersRemoveError::TransferDestUserNotInTeam => {
18901                // unit
18902                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18903                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
18904                s.end()
18905            }
18906            MembersRemoveError::TransferAdminUserNotInTeam => {
18907                // unit
18908                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18909                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
18910                s.end()
18911            }
18912            MembersRemoveError::TransferAdminUserNotFound => {
18913                // unit
18914                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18915                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
18916                s.end()
18917            }
18918            MembersRemoveError::UnspecifiedTransferAdminId => {
18919                // unit
18920                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18921                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
18922                s.end()
18923            }
18924            MembersRemoveError::TransferAdminIsNotAdmin => {
18925                // unit
18926                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18927                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
18928                s.end()
18929            }
18930            MembersRemoveError::RecipientNotVerified => {
18931                // unit
18932                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18933                s.serialize_field(".tag", "recipient_not_verified")?;
18934                s.end()
18935            }
18936            MembersRemoveError::RemoveLastAdmin => {
18937                // unit
18938                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18939                s.serialize_field(".tag", "remove_last_admin")?;
18940                s.end()
18941            }
18942            MembersRemoveError::CannotKeepAccountAndTransfer => {
18943                // unit
18944                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18945                s.serialize_field(".tag", "cannot_keep_account_and_transfer")?;
18946                s.end()
18947            }
18948            MembersRemoveError::CannotKeepAccountAndDeleteData => {
18949                // unit
18950                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18951                s.serialize_field(".tag", "cannot_keep_account_and_delete_data")?;
18952                s.end()
18953            }
18954            MembersRemoveError::CannotKeepAccountAndPermanentlyDelete => {
18955                // unit
18956                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18957                s.serialize_field(".tag", "cannot_keep_account_and_permanently_delete")?;
18958                s.end()
18959            }
18960            MembersRemoveError::EmailAddressTooLongToBeDisabled => {
18961                // unit
18962                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18963                s.serialize_field(".tag", "email_address_too_long_to_be_disabled")?;
18964                s.end()
18965            }
18966            MembersRemoveError::CannotKeepInvitedUserAccount => {
18967                // unit
18968                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18969                s.serialize_field(".tag", "cannot_keep_invited_user_account")?;
18970                s.end()
18971            }
18972            MembersRemoveError::CannotRetainSharesWhenDataWiped => {
18973                // unit
18974                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18975                s.serialize_field(".tag", "cannot_retain_shares_when_data_wiped")?;
18976                s.end()
18977            }
18978            MembersRemoveError::CannotRetainSharesWhenNoAccountKept => {
18979                // unit
18980                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18981                s.serialize_field(".tag", "cannot_retain_shares_when_no_account_kept")?;
18982                s.end()
18983            }
18984            MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff => {
18985                // unit
18986                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18987                s.serialize_field(".tag", "cannot_retain_shares_when_team_external_sharing_off")?;
18988                s.end()
18989            }
18990            MembersRemoveError::CannotKeepAccount => {
18991                // unit
18992                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18993                s.serialize_field(".tag", "cannot_keep_account")?;
18994                s.end()
18995            }
18996            MembersRemoveError::CannotKeepAccountUnderLegalHold => {
18997                // unit
18998                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18999                s.serialize_field(".tag", "cannot_keep_account_under_legal_hold")?;
19000                s.end()
19001            }
19002            MembersRemoveError::CannotKeepAccountRequiredToSignTos => {
19003                // unit
19004                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19005                s.serialize_field(".tag", "cannot_keep_account_required_to_sign_tos")?;
19006                s.end()
19007            }
19008            MembersRemoveError::CannotPermanentlyDeleteAndTransfer => {
19009                // unit
19010                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19011                s.serialize_field(".tag", "cannot_permanently_delete_and_transfer")?;
19012                s.end()
19013            }
19014            MembersRemoveError::MemberIsTransferDestination => {
19015                // unit
19016                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19017                s.serialize_field(".tag", "member_is_transfer_destination")?;
19018                s.end()
19019            }
19020            MembersRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19021        }
19022    }
19023}
19024
19025impl ::std::error::Error for MembersRemoveError {
19026}
19027
19028impl ::std::fmt::Display for MembersRemoveError {
19029    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19030        match self {
19031            MembersRemoveError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19032            MembersRemoveError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19033            MembersRemoveError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
19034            MembersRemoveError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
19035            MembersRemoveError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
19036            MembersRemoveError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
19037            MembersRemoveError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
19038            MembersRemoveError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
19039            MembersRemoveError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
19040            MembersRemoveError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
19041            MembersRemoveError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
19042            MembersRemoveError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
19043            MembersRemoveError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
19044            MembersRemoveError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
19045            MembersRemoveError::RemoveLastAdmin => f.write_str("The user is the last admin of the team, so it cannot be removed from it."),
19046            MembersRemoveError::CannotKeepAccountAndTransfer => f.write_str("Cannot keep account and transfer the data to another user at the same time."),
19047            MembersRemoveError::EmailAddressTooLongToBeDisabled => f.write_str("The email address of the user is too long to be disabled."),
19048            MembersRemoveError::CannotKeepInvitedUserAccount => f.write_str("Cannot keep account of an invited user."),
19049            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."),
19050            MembersRemoveError::CannotKeepAccount => f.write_str("Only a team admin, can convert this account to a Basic account."),
19051            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."),
19052            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."),
19053            MembersRemoveError::CannotPermanentlyDeleteAndTransfer => f.write_str("Cannot permanently delete files and transfer the data to another user at the same time."),
19054            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."),
19055            _ => write!(f, "{:?}", *self),
19056        }
19057    }
19058}
19059
19060// union extends MembersTransferFilesError
19061impl From<MembersTransferFilesError> for MembersRemoveError {
19062    fn from(parent: MembersTransferFilesError) -> Self {
19063        match parent {
19064            MembersTransferFilesError::UserNotFound => MembersRemoveError::UserNotFound,
19065            MembersTransferFilesError::UserNotInTeam => MembersRemoveError::UserNotInTeam,
19066            MembersTransferFilesError::Other => MembersRemoveError::Other,
19067            MembersTransferFilesError::TransferInProgress => MembersRemoveError::TransferInProgress,
19068            MembersTransferFilesError::AlreadyTransferred => MembersRemoveError::AlreadyTransferred,
19069            MembersTransferFilesError::AlreadyTransferredOrDeleted => MembersRemoveError::AlreadyTransferredOrDeleted,
19070            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => MembersRemoveError::RemovedAndTransferDestShouldDiffer,
19071            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => MembersRemoveError::RemovedAndTransferAdminShouldDiffer,
19072            MembersTransferFilesError::TransferDestUserNotFound => MembersRemoveError::TransferDestUserNotFound,
19073            MembersTransferFilesError::TransferDestUserNotInTeam => MembersRemoveError::TransferDestUserNotInTeam,
19074            MembersTransferFilesError::TransferAdminUserNotInTeam => MembersRemoveError::TransferAdminUserNotInTeam,
19075            MembersTransferFilesError::TransferAdminUserNotFound => MembersRemoveError::TransferAdminUserNotFound,
19076            MembersTransferFilesError::UnspecifiedTransferAdminId => MembersRemoveError::UnspecifiedTransferAdminId,
19077            MembersTransferFilesError::TransferAdminIsNotAdmin => MembersRemoveError::TransferAdminIsNotAdmin,
19078            MembersTransferFilesError::RecipientNotVerified => MembersRemoveError::RecipientNotVerified,
19079        }
19080    }
19081}
19082
19083#[derive(Debug, Clone, PartialEq, Eq)]
19084#[non_exhaustive] // variants may be added in the future
19085pub enum MembersSendWelcomeError {
19086    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19087    /// this team.
19088    UserNotFound,
19089    /// The user is not a member of the team.
19090    UserNotInTeam,
19091    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19092    /// typically indicates that this SDK version is out of date.
19093    Other,
19094}
19095
19096impl<'de> ::serde::de::Deserialize<'de> for MembersSendWelcomeError {
19097    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19098        // union deserializer
19099        use serde::de::{self, MapAccess, Visitor};
19100        struct EnumVisitor;
19101        impl<'de> Visitor<'de> for EnumVisitor {
19102            type Value = MembersSendWelcomeError;
19103            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19104                f.write_str("a MembersSendWelcomeError structure")
19105            }
19106            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19107                let tag: &str = match map.next_key()? {
19108                    Some(".tag") => map.next_value()?,
19109                    _ => return Err(de::Error::missing_field(".tag"))
19110                };
19111                let value = match tag {
19112                    "user_not_found" => MembersSendWelcomeError::UserNotFound,
19113                    "user_not_in_team" => MembersSendWelcomeError::UserNotInTeam,
19114                    _ => MembersSendWelcomeError::Other,
19115                };
19116                crate::eat_json_fields(&mut map)?;
19117                Ok(value)
19118            }
19119        }
19120        const VARIANTS: &[&str] = &["user_not_found",
19121                                    "user_not_in_team",
19122                                    "other"];
19123        deserializer.deserialize_struct("MembersSendWelcomeError", VARIANTS, EnumVisitor)
19124    }
19125}
19126
19127impl ::serde::ser::Serialize for MembersSendWelcomeError {
19128    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19129        // union serializer
19130        use serde::ser::SerializeStruct;
19131        match self {
19132            MembersSendWelcomeError::UserNotFound => {
19133                // unit
19134                let mut s = serializer.serialize_struct("MembersSendWelcomeError", 1)?;
19135                s.serialize_field(".tag", "user_not_found")?;
19136                s.end()
19137            }
19138            MembersSendWelcomeError::UserNotInTeam => {
19139                // unit
19140                let mut s = serializer.serialize_struct("MembersSendWelcomeError", 1)?;
19141                s.serialize_field(".tag", "user_not_in_team")?;
19142                s.end()
19143            }
19144            MembersSendWelcomeError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19145        }
19146    }
19147}
19148
19149impl ::std::error::Error for MembersSendWelcomeError {
19150}
19151
19152impl ::std::fmt::Display for MembersSendWelcomeError {
19153    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19154        match self {
19155            MembersSendWelcomeError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19156            MembersSendWelcomeError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19157            _ => write!(f, "{:?}", *self),
19158        }
19159    }
19160}
19161
19162// union extends MemberSelectorError
19163impl From<MemberSelectorError> for MembersSendWelcomeError {
19164    fn from(parent: MemberSelectorError) -> Self {
19165        match parent {
19166            MemberSelectorError::UserNotFound => MembersSendWelcomeError::UserNotFound,
19167            MemberSelectorError::UserNotInTeam => MembersSendWelcomeError::UserNotInTeam,
19168        }
19169    }
19170}
19171/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
19172/// account.
19173#[derive(Debug, Clone, PartialEq, Eq)]
19174#[non_exhaustive] // structs may have more fields added in the future.
19175pub struct MembersSetPermissions2Arg {
19176    /// Identity of user whose role will be set.
19177    pub user: UserSelectorArg,
19178    /// The new roles for the member. Send empty list to make user member only. For now, only up to
19179    /// one role is allowed.
19180    pub new_roles: Option<Vec<TeamMemberRoleId>>,
19181}
19182
19183impl MembersSetPermissions2Arg {
19184    pub fn new(user: UserSelectorArg) -> Self {
19185        MembersSetPermissions2Arg {
19186            user,
19187            new_roles: None,
19188        }
19189    }
19190
19191    pub fn with_new_roles(mut self, value: Vec<TeamMemberRoleId>) -> Self {
19192        self.new_roles = Some(value);
19193        self
19194    }
19195}
19196
19197const MEMBERS_SET_PERMISSIONS2_ARG_FIELDS: &[&str] = &["user",
19198                                                       "new_roles"];
19199impl MembersSetPermissions2Arg {
19200    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19201        map: V,
19202    ) -> Result<MembersSetPermissions2Arg, V::Error> {
19203        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19204    }
19205
19206    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19207        mut map: V,
19208        optional: bool,
19209    ) -> Result<Option<MembersSetPermissions2Arg>, V::Error> {
19210        let mut field_user = None;
19211        let mut field_new_roles = None;
19212        let mut nothing = true;
19213        while let Some(key) = map.next_key::<&str>()? {
19214            nothing = false;
19215            match key {
19216                "user" => {
19217                    if field_user.is_some() {
19218                        return Err(::serde::de::Error::duplicate_field("user"));
19219                    }
19220                    field_user = Some(map.next_value()?);
19221                }
19222                "new_roles" => {
19223                    if field_new_roles.is_some() {
19224                        return Err(::serde::de::Error::duplicate_field("new_roles"));
19225                    }
19226                    field_new_roles = Some(map.next_value()?);
19227                }
19228                _ => {
19229                    // unknown field allowed and ignored
19230                    map.next_value::<::serde_json::Value>()?;
19231                }
19232            }
19233        }
19234        if optional && nothing {
19235            return Ok(None);
19236        }
19237        let result = MembersSetPermissions2Arg {
19238            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19239            new_roles: field_new_roles.and_then(Option::flatten),
19240        };
19241        Ok(Some(result))
19242    }
19243
19244    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19245        &self,
19246        s: &mut S::SerializeStruct,
19247    ) -> Result<(), S::Error> {
19248        use serde::ser::SerializeStruct;
19249        s.serialize_field("user", &self.user)?;
19250        if let Some(val) = &self.new_roles {
19251            s.serialize_field("new_roles", val)?;
19252        }
19253        Ok(())
19254    }
19255}
19256
19257impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Arg {
19258    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19259        // struct deserializer
19260        use serde::de::{MapAccess, Visitor};
19261        struct StructVisitor;
19262        impl<'de> Visitor<'de> for StructVisitor {
19263            type Value = MembersSetPermissions2Arg;
19264            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19265                f.write_str("a MembersSetPermissions2Arg struct")
19266            }
19267            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19268                MembersSetPermissions2Arg::internal_deserialize(map)
19269            }
19270        }
19271        deserializer.deserialize_struct("MembersSetPermissions2Arg", MEMBERS_SET_PERMISSIONS2_ARG_FIELDS, StructVisitor)
19272    }
19273}
19274
19275impl ::serde::ser::Serialize for MembersSetPermissions2Arg {
19276    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19277        // struct serializer
19278        use serde::ser::SerializeStruct;
19279        let mut s = serializer.serialize_struct("MembersSetPermissions2Arg", 2)?;
19280        self.internal_serialize::<S>(&mut s)?;
19281        s.end()
19282    }
19283}
19284
19285#[derive(Debug, Clone, PartialEq, Eq)]
19286#[non_exhaustive] // variants may be added in the future
19287pub enum MembersSetPermissions2Error {
19288    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19289    /// this team.
19290    UserNotFound,
19291    /// Cannot remove the admin setting of the last admin.
19292    LastAdmin,
19293    /// The user is not a member of the team.
19294    UserNotInTeam,
19295    /// Cannot remove/grant permissions. This can happen if the team member is suspended.
19296    CannotSetPermissions,
19297    /// No matching role found. At least one of the provided new_roles does not exist on this team.
19298    RoleNotFound,
19299    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19300    /// typically indicates that this SDK version is out of date.
19301    Other,
19302}
19303
19304impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Error {
19305    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19306        // union deserializer
19307        use serde::de::{self, MapAccess, Visitor};
19308        struct EnumVisitor;
19309        impl<'de> Visitor<'de> for EnumVisitor {
19310            type Value = MembersSetPermissions2Error;
19311            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19312                f.write_str("a MembersSetPermissions2Error structure")
19313            }
19314            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19315                let tag: &str = match map.next_key()? {
19316                    Some(".tag") => map.next_value()?,
19317                    _ => return Err(de::Error::missing_field(".tag"))
19318                };
19319                let value = match tag {
19320                    "user_not_found" => MembersSetPermissions2Error::UserNotFound,
19321                    "last_admin" => MembersSetPermissions2Error::LastAdmin,
19322                    "user_not_in_team" => MembersSetPermissions2Error::UserNotInTeam,
19323                    "cannot_set_permissions" => MembersSetPermissions2Error::CannotSetPermissions,
19324                    "role_not_found" => MembersSetPermissions2Error::RoleNotFound,
19325                    _ => MembersSetPermissions2Error::Other,
19326                };
19327                crate::eat_json_fields(&mut map)?;
19328                Ok(value)
19329            }
19330        }
19331        const VARIANTS: &[&str] = &["user_not_found",
19332                                    "last_admin",
19333                                    "user_not_in_team",
19334                                    "cannot_set_permissions",
19335                                    "role_not_found",
19336                                    "other"];
19337        deserializer.deserialize_struct("MembersSetPermissions2Error", VARIANTS, EnumVisitor)
19338    }
19339}
19340
19341impl ::serde::ser::Serialize for MembersSetPermissions2Error {
19342    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19343        // union serializer
19344        use serde::ser::SerializeStruct;
19345        match self {
19346            MembersSetPermissions2Error::UserNotFound => {
19347                // unit
19348                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19349                s.serialize_field(".tag", "user_not_found")?;
19350                s.end()
19351            }
19352            MembersSetPermissions2Error::LastAdmin => {
19353                // unit
19354                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19355                s.serialize_field(".tag", "last_admin")?;
19356                s.end()
19357            }
19358            MembersSetPermissions2Error::UserNotInTeam => {
19359                // unit
19360                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19361                s.serialize_field(".tag", "user_not_in_team")?;
19362                s.end()
19363            }
19364            MembersSetPermissions2Error::CannotSetPermissions => {
19365                // unit
19366                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19367                s.serialize_field(".tag", "cannot_set_permissions")?;
19368                s.end()
19369            }
19370            MembersSetPermissions2Error::RoleNotFound => {
19371                // unit
19372                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19373                s.serialize_field(".tag", "role_not_found")?;
19374                s.end()
19375            }
19376            MembersSetPermissions2Error::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19377        }
19378    }
19379}
19380
19381impl ::std::error::Error for MembersSetPermissions2Error {
19382}
19383
19384impl ::std::fmt::Display for MembersSetPermissions2Error {
19385    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19386        match self {
19387            MembersSetPermissions2Error::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19388            MembersSetPermissions2Error::LastAdmin => f.write_str("Cannot remove the admin setting of the last admin."),
19389            MembersSetPermissions2Error::UserNotInTeam => f.write_str("The user is not a member of the team."),
19390            MembersSetPermissions2Error::CannotSetPermissions => f.write_str("Cannot remove/grant permissions. This can happen if the team member is suspended."),
19391            MembersSetPermissions2Error::RoleNotFound => f.write_str("No matching role found. At least one of the provided new_roles does not exist on this team."),
19392            _ => write!(f, "{:?}", *self),
19393        }
19394    }
19395}
19396
19397// union extends UserSelectorError
19398impl From<UserSelectorError> for MembersSetPermissions2Error {
19399    fn from(parent: UserSelectorError) -> Self {
19400        match parent {
19401            UserSelectorError::UserNotFound => MembersSetPermissions2Error::UserNotFound,
19402        }
19403    }
19404}
19405#[derive(Debug, Clone, PartialEq, Eq)]
19406#[non_exhaustive] // structs may have more fields added in the future.
19407pub struct MembersSetPermissions2Result {
19408    /// The member ID of the user to which the change was applied.
19409    pub team_member_id: crate::types::team_common::TeamMemberId,
19410    /// The roles after the change. Empty in case the user become a non-admin.
19411    pub roles: Option<Vec<TeamMemberRole>>,
19412}
19413
19414impl MembersSetPermissions2Result {
19415    pub fn new(team_member_id: crate::types::team_common::TeamMemberId) -> Self {
19416        MembersSetPermissions2Result {
19417            team_member_id,
19418            roles: None,
19419        }
19420    }
19421
19422    pub fn with_roles(mut self, value: Vec<TeamMemberRole>) -> Self {
19423        self.roles = Some(value);
19424        self
19425    }
19426}
19427
19428const MEMBERS_SET_PERMISSIONS2_RESULT_FIELDS: &[&str] = &["team_member_id",
19429                                                          "roles"];
19430impl MembersSetPermissions2Result {
19431    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19432        map: V,
19433    ) -> Result<MembersSetPermissions2Result, V::Error> {
19434        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19435    }
19436
19437    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19438        mut map: V,
19439        optional: bool,
19440    ) -> Result<Option<MembersSetPermissions2Result>, V::Error> {
19441        let mut field_team_member_id = None;
19442        let mut field_roles = None;
19443        let mut nothing = true;
19444        while let Some(key) = map.next_key::<&str>()? {
19445            nothing = false;
19446            match key {
19447                "team_member_id" => {
19448                    if field_team_member_id.is_some() {
19449                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
19450                    }
19451                    field_team_member_id = Some(map.next_value()?);
19452                }
19453                "roles" => {
19454                    if field_roles.is_some() {
19455                        return Err(::serde::de::Error::duplicate_field("roles"));
19456                    }
19457                    field_roles = Some(map.next_value()?);
19458                }
19459                _ => {
19460                    // unknown field allowed and ignored
19461                    map.next_value::<::serde_json::Value>()?;
19462                }
19463            }
19464        }
19465        if optional && nothing {
19466            return Ok(None);
19467        }
19468        let result = MembersSetPermissions2Result {
19469            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
19470            roles: field_roles.and_then(Option::flatten),
19471        };
19472        Ok(Some(result))
19473    }
19474
19475    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19476        &self,
19477        s: &mut S::SerializeStruct,
19478    ) -> Result<(), S::Error> {
19479        use serde::ser::SerializeStruct;
19480        s.serialize_field("team_member_id", &self.team_member_id)?;
19481        if let Some(val) = &self.roles {
19482            s.serialize_field("roles", val)?;
19483        }
19484        Ok(())
19485    }
19486}
19487
19488impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Result {
19489    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19490        // struct deserializer
19491        use serde::de::{MapAccess, Visitor};
19492        struct StructVisitor;
19493        impl<'de> Visitor<'de> for StructVisitor {
19494            type Value = MembersSetPermissions2Result;
19495            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19496                f.write_str("a MembersSetPermissions2Result struct")
19497            }
19498            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19499                MembersSetPermissions2Result::internal_deserialize(map)
19500            }
19501        }
19502        deserializer.deserialize_struct("MembersSetPermissions2Result", MEMBERS_SET_PERMISSIONS2_RESULT_FIELDS, StructVisitor)
19503    }
19504}
19505
19506impl ::serde::ser::Serialize for MembersSetPermissions2Result {
19507    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19508        // struct serializer
19509        use serde::ser::SerializeStruct;
19510        let mut s = serializer.serialize_struct("MembersSetPermissions2Result", 2)?;
19511        self.internal_serialize::<S>(&mut s)?;
19512        s.end()
19513    }
19514}
19515
19516/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
19517/// account.
19518#[derive(Debug, Clone, PartialEq, Eq)]
19519#[non_exhaustive] // structs may have more fields added in the future.
19520pub struct MembersSetPermissionsArg {
19521    /// Identity of user whose role will be set.
19522    pub user: UserSelectorArg,
19523    /// The new role of the member.
19524    pub new_role: AdminTier,
19525}
19526
19527impl MembersSetPermissionsArg {
19528    pub fn new(user: UserSelectorArg, new_role: AdminTier) -> Self {
19529        MembersSetPermissionsArg {
19530            user,
19531            new_role,
19532        }
19533    }
19534}
19535
19536const MEMBERS_SET_PERMISSIONS_ARG_FIELDS: &[&str] = &["user",
19537                                                      "new_role"];
19538impl MembersSetPermissionsArg {
19539    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19540        map: V,
19541    ) -> Result<MembersSetPermissionsArg, V::Error> {
19542        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19543    }
19544
19545    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19546        mut map: V,
19547        optional: bool,
19548    ) -> Result<Option<MembersSetPermissionsArg>, V::Error> {
19549        let mut field_user = None;
19550        let mut field_new_role = None;
19551        let mut nothing = true;
19552        while let Some(key) = map.next_key::<&str>()? {
19553            nothing = false;
19554            match key {
19555                "user" => {
19556                    if field_user.is_some() {
19557                        return Err(::serde::de::Error::duplicate_field("user"));
19558                    }
19559                    field_user = Some(map.next_value()?);
19560                }
19561                "new_role" => {
19562                    if field_new_role.is_some() {
19563                        return Err(::serde::de::Error::duplicate_field("new_role"));
19564                    }
19565                    field_new_role = Some(map.next_value()?);
19566                }
19567                _ => {
19568                    // unknown field allowed and ignored
19569                    map.next_value::<::serde_json::Value>()?;
19570                }
19571            }
19572        }
19573        if optional && nothing {
19574            return Ok(None);
19575        }
19576        let result = MembersSetPermissionsArg {
19577            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19578            new_role: field_new_role.ok_or_else(|| ::serde::de::Error::missing_field("new_role"))?,
19579        };
19580        Ok(Some(result))
19581    }
19582
19583    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19584        &self,
19585        s: &mut S::SerializeStruct,
19586    ) -> Result<(), S::Error> {
19587        use serde::ser::SerializeStruct;
19588        s.serialize_field("user", &self.user)?;
19589        s.serialize_field("new_role", &self.new_role)?;
19590        Ok(())
19591    }
19592}
19593
19594impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsArg {
19595    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19596        // struct deserializer
19597        use serde::de::{MapAccess, Visitor};
19598        struct StructVisitor;
19599        impl<'de> Visitor<'de> for StructVisitor {
19600            type Value = MembersSetPermissionsArg;
19601            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19602                f.write_str("a MembersSetPermissionsArg struct")
19603            }
19604            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19605                MembersSetPermissionsArg::internal_deserialize(map)
19606            }
19607        }
19608        deserializer.deserialize_struct("MembersSetPermissionsArg", MEMBERS_SET_PERMISSIONS_ARG_FIELDS, StructVisitor)
19609    }
19610}
19611
19612impl ::serde::ser::Serialize for MembersSetPermissionsArg {
19613    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19614        // struct serializer
19615        use serde::ser::SerializeStruct;
19616        let mut s = serializer.serialize_struct("MembersSetPermissionsArg", 2)?;
19617        self.internal_serialize::<S>(&mut s)?;
19618        s.end()
19619    }
19620}
19621
19622#[derive(Debug, Clone, PartialEq, Eq)]
19623#[non_exhaustive] // variants may be added in the future
19624pub enum MembersSetPermissionsError {
19625    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19626    /// this team.
19627    UserNotFound,
19628    /// Cannot remove the admin setting of the last admin.
19629    LastAdmin,
19630    /// The user is not a member of the team.
19631    UserNotInTeam,
19632    /// Cannot remove/grant permissions.
19633    CannotSetPermissions,
19634    /// Team is full. The organization has no available licenses.
19635    TeamLicenseLimit,
19636    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19637    /// typically indicates that this SDK version is out of date.
19638    Other,
19639}
19640
19641impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsError {
19642    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19643        // union deserializer
19644        use serde::de::{self, MapAccess, Visitor};
19645        struct EnumVisitor;
19646        impl<'de> Visitor<'de> for EnumVisitor {
19647            type Value = MembersSetPermissionsError;
19648            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19649                f.write_str("a MembersSetPermissionsError structure")
19650            }
19651            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19652                let tag: &str = match map.next_key()? {
19653                    Some(".tag") => map.next_value()?,
19654                    _ => return Err(de::Error::missing_field(".tag"))
19655                };
19656                let value = match tag {
19657                    "user_not_found" => MembersSetPermissionsError::UserNotFound,
19658                    "last_admin" => MembersSetPermissionsError::LastAdmin,
19659                    "user_not_in_team" => MembersSetPermissionsError::UserNotInTeam,
19660                    "cannot_set_permissions" => MembersSetPermissionsError::CannotSetPermissions,
19661                    "team_license_limit" => MembersSetPermissionsError::TeamLicenseLimit,
19662                    _ => MembersSetPermissionsError::Other,
19663                };
19664                crate::eat_json_fields(&mut map)?;
19665                Ok(value)
19666            }
19667        }
19668        const VARIANTS: &[&str] = &["user_not_found",
19669                                    "last_admin",
19670                                    "user_not_in_team",
19671                                    "cannot_set_permissions",
19672                                    "team_license_limit",
19673                                    "other"];
19674        deserializer.deserialize_struct("MembersSetPermissionsError", VARIANTS, EnumVisitor)
19675    }
19676}
19677
19678impl ::serde::ser::Serialize for MembersSetPermissionsError {
19679    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19680        // union serializer
19681        use serde::ser::SerializeStruct;
19682        match self {
19683            MembersSetPermissionsError::UserNotFound => {
19684                // unit
19685                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19686                s.serialize_field(".tag", "user_not_found")?;
19687                s.end()
19688            }
19689            MembersSetPermissionsError::LastAdmin => {
19690                // unit
19691                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19692                s.serialize_field(".tag", "last_admin")?;
19693                s.end()
19694            }
19695            MembersSetPermissionsError::UserNotInTeam => {
19696                // unit
19697                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19698                s.serialize_field(".tag", "user_not_in_team")?;
19699                s.end()
19700            }
19701            MembersSetPermissionsError::CannotSetPermissions => {
19702                // unit
19703                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19704                s.serialize_field(".tag", "cannot_set_permissions")?;
19705                s.end()
19706            }
19707            MembersSetPermissionsError::TeamLicenseLimit => {
19708                // unit
19709                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19710                s.serialize_field(".tag", "team_license_limit")?;
19711                s.end()
19712            }
19713            MembersSetPermissionsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19714        }
19715    }
19716}
19717
19718impl ::std::error::Error for MembersSetPermissionsError {
19719}
19720
19721impl ::std::fmt::Display for MembersSetPermissionsError {
19722    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19723        match self {
19724            MembersSetPermissionsError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19725            MembersSetPermissionsError::LastAdmin => f.write_str("Cannot remove the admin setting of the last admin."),
19726            MembersSetPermissionsError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19727            MembersSetPermissionsError::CannotSetPermissions => f.write_str("Cannot remove/grant permissions."),
19728            MembersSetPermissionsError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
19729            _ => write!(f, "{:?}", *self),
19730        }
19731    }
19732}
19733
19734// union extends UserSelectorError
19735impl From<UserSelectorError> for MembersSetPermissionsError {
19736    fn from(parent: UserSelectorError) -> Self {
19737        match parent {
19738            UserSelectorError::UserNotFound => MembersSetPermissionsError::UserNotFound,
19739        }
19740    }
19741}
19742#[derive(Debug, Clone, PartialEq, Eq)]
19743#[non_exhaustive] // structs may have more fields added in the future.
19744pub struct MembersSetPermissionsResult {
19745    /// The member ID of the user to which the change was applied.
19746    pub team_member_id: crate::types::team_common::TeamMemberId,
19747    /// The role after the change.
19748    pub role: AdminTier,
19749}
19750
19751impl MembersSetPermissionsResult {
19752    pub fn new(team_member_id: crate::types::team_common::TeamMemberId, role: AdminTier) -> Self {
19753        MembersSetPermissionsResult {
19754            team_member_id,
19755            role,
19756        }
19757    }
19758}
19759
19760const MEMBERS_SET_PERMISSIONS_RESULT_FIELDS: &[&str] = &["team_member_id",
19761                                                         "role"];
19762impl MembersSetPermissionsResult {
19763    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19764        map: V,
19765    ) -> Result<MembersSetPermissionsResult, V::Error> {
19766        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19767    }
19768
19769    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19770        mut map: V,
19771        optional: bool,
19772    ) -> Result<Option<MembersSetPermissionsResult>, V::Error> {
19773        let mut field_team_member_id = None;
19774        let mut field_role = None;
19775        let mut nothing = true;
19776        while let Some(key) = map.next_key::<&str>()? {
19777            nothing = false;
19778            match key {
19779                "team_member_id" => {
19780                    if field_team_member_id.is_some() {
19781                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
19782                    }
19783                    field_team_member_id = Some(map.next_value()?);
19784                }
19785                "role" => {
19786                    if field_role.is_some() {
19787                        return Err(::serde::de::Error::duplicate_field("role"));
19788                    }
19789                    field_role = Some(map.next_value()?);
19790                }
19791                _ => {
19792                    // unknown field allowed and ignored
19793                    map.next_value::<::serde_json::Value>()?;
19794                }
19795            }
19796        }
19797        if optional && nothing {
19798            return Ok(None);
19799        }
19800        let result = MembersSetPermissionsResult {
19801            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
19802            role: field_role.ok_or_else(|| ::serde::de::Error::missing_field("role"))?,
19803        };
19804        Ok(Some(result))
19805    }
19806
19807    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19808        &self,
19809        s: &mut S::SerializeStruct,
19810    ) -> Result<(), S::Error> {
19811        use serde::ser::SerializeStruct;
19812        s.serialize_field("team_member_id", &self.team_member_id)?;
19813        s.serialize_field("role", &self.role)?;
19814        Ok(())
19815    }
19816}
19817
19818impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsResult {
19819    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19820        // struct deserializer
19821        use serde::de::{MapAccess, Visitor};
19822        struct StructVisitor;
19823        impl<'de> Visitor<'de> for StructVisitor {
19824            type Value = MembersSetPermissionsResult;
19825            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19826                f.write_str("a MembersSetPermissionsResult struct")
19827            }
19828            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19829                MembersSetPermissionsResult::internal_deserialize(map)
19830            }
19831        }
19832        deserializer.deserialize_struct("MembersSetPermissionsResult", MEMBERS_SET_PERMISSIONS_RESULT_FIELDS, StructVisitor)
19833    }
19834}
19835
19836impl ::serde::ser::Serialize for MembersSetPermissionsResult {
19837    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19838        // struct serializer
19839        use serde::ser::SerializeStruct;
19840        let mut s = serializer.serialize_struct("MembersSetPermissionsResult", 2)?;
19841        self.internal_serialize::<S>(&mut s)?;
19842        s.end()
19843    }
19844}
19845
19846/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
19847/// account. At least one of new_email, new_external_id, new_given_name, and/or new_surname must be
19848/// provided.
19849#[derive(Debug, Clone, PartialEq, Eq)]
19850#[non_exhaustive] // structs may have more fields added in the future.
19851pub struct MembersSetProfileArg {
19852    /// Identity of user whose profile will be set.
19853    pub user: UserSelectorArg,
19854    /// New email for member.
19855    pub new_email: Option<crate::types::common::EmailAddress>,
19856    /// New external ID for member.
19857    pub new_external_id: Option<crate::types::team_common::MemberExternalId>,
19858    /// New given name for member.
19859    pub new_given_name: Option<crate::types::common::OptionalNamePart>,
19860    /// New surname for member.
19861    pub new_surname: Option<crate::types::common::OptionalNamePart>,
19862    /// New persistent ID. This field only available to teams using persistent ID SAML
19863    /// configuration.
19864    pub new_persistent_id: Option<String>,
19865    /// New value for whether the user is a directory restricted user.
19866    pub new_is_directory_restricted: Option<bool>,
19867}
19868
19869impl MembersSetProfileArg {
19870    pub fn new(user: UserSelectorArg) -> Self {
19871        MembersSetProfileArg {
19872            user,
19873            new_email: None,
19874            new_external_id: None,
19875            new_given_name: None,
19876            new_surname: None,
19877            new_persistent_id: None,
19878            new_is_directory_restricted: None,
19879        }
19880    }
19881
19882    pub fn with_new_email(mut self, value: crate::types::common::EmailAddress) -> Self {
19883        self.new_email = Some(value);
19884        self
19885    }
19886
19887    pub fn with_new_external_id(
19888        mut self,
19889        value: crate::types::team_common::MemberExternalId,
19890    ) -> Self {
19891        self.new_external_id = Some(value);
19892        self
19893    }
19894
19895    pub fn with_new_given_name(mut self, value: crate::types::common::OptionalNamePart) -> Self {
19896        self.new_given_name = Some(value);
19897        self
19898    }
19899
19900    pub fn with_new_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
19901        self.new_surname = Some(value);
19902        self
19903    }
19904
19905    pub fn with_new_persistent_id(mut self, value: String) -> Self {
19906        self.new_persistent_id = Some(value);
19907        self
19908    }
19909
19910    pub fn with_new_is_directory_restricted(mut self, value: bool) -> Self {
19911        self.new_is_directory_restricted = Some(value);
19912        self
19913    }
19914}
19915
19916const MEMBERS_SET_PROFILE_ARG_FIELDS: &[&str] = &["user",
19917                                                  "new_email",
19918                                                  "new_external_id",
19919                                                  "new_given_name",
19920                                                  "new_surname",
19921                                                  "new_persistent_id",
19922                                                  "new_is_directory_restricted"];
19923impl MembersSetProfileArg {
19924    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19925        map: V,
19926    ) -> Result<MembersSetProfileArg, V::Error> {
19927        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19928    }
19929
19930    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19931        mut map: V,
19932        optional: bool,
19933    ) -> Result<Option<MembersSetProfileArg>, V::Error> {
19934        let mut field_user = None;
19935        let mut field_new_email = None;
19936        let mut field_new_external_id = None;
19937        let mut field_new_given_name = None;
19938        let mut field_new_surname = None;
19939        let mut field_new_persistent_id = None;
19940        let mut field_new_is_directory_restricted = None;
19941        let mut nothing = true;
19942        while let Some(key) = map.next_key::<&str>()? {
19943            nothing = false;
19944            match key {
19945                "user" => {
19946                    if field_user.is_some() {
19947                        return Err(::serde::de::Error::duplicate_field("user"));
19948                    }
19949                    field_user = Some(map.next_value()?);
19950                }
19951                "new_email" => {
19952                    if field_new_email.is_some() {
19953                        return Err(::serde::de::Error::duplicate_field("new_email"));
19954                    }
19955                    field_new_email = Some(map.next_value()?);
19956                }
19957                "new_external_id" => {
19958                    if field_new_external_id.is_some() {
19959                        return Err(::serde::de::Error::duplicate_field("new_external_id"));
19960                    }
19961                    field_new_external_id = Some(map.next_value()?);
19962                }
19963                "new_given_name" => {
19964                    if field_new_given_name.is_some() {
19965                        return Err(::serde::de::Error::duplicate_field("new_given_name"));
19966                    }
19967                    field_new_given_name = Some(map.next_value()?);
19968                }
19969                "new_surname" => {
19970                    if field_new_surname.is_some() {
19971                        return Err(::serde::de::Error::duplicate_field("new_surname"));
19972                    }
19973                    field_new_surname = Some(map.next_value()?);
19974                }
19975                "new_persistent_id" => {
19976                    if field_new_persistent_id.is_some() {
19977                        return Err(::serde::de::Error::duplicate_field("new_persistent_id"));
19978                    }
19979                    field_new_persistent_id = Some(map.next_value()?);
19980                }
19981                "new_is_directory_restricted" => {
19982                    if field_new_is_directory_restricted.is_some() {
19983                        return Err(::serde::de::Error::duplicate_field("new_is_directory_restricted"));
19984                    }
19985                    field_new_is_directory_restricted = Some(map.next_value()?);
19986                }
19987                _ => {
19988                    // unknown field allowed and ignored
19989                    map.next_value::<::serde_json::Value>()?;
19990                }
19991            }
19992        }
19993        if optional && nothing {
19994            return Ok(None);
19995        }
19996        let result = MembersSetProfileArg {
19997            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19998            new_email: field_new_email.and_then(Option::flatten),
19999            new_external_id: field_new_external_id.and_then(Option::flatten),
20000            new_given_name: field_new_given_name.and_then(Option::flatten),
20001            new_surname: field_new_surname.and_then(Option::flatten),
20002            new_persistent_id: field_new_persistent_id.and_then(Option::flatten),
20003            new_is_directory_restricted: field_new_is_directory_restricted.and_then(Option::flatten),
20004        };
20005        Ok(Some(result))
20006    }
20007
20008    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20009        &self,
20010        s: &mut S::SerializeStruct,
20011    ) -> Result<(), S::Error> {
20012        use serde::ser::SerializeStruct;
20013        s.serialize_field("user", &self.user)?;
20014        if let Some(val) = &self.new_email {
20015            s.serialize_field("new_email", val)?;
20016        }
20017        if let Some(val) = &self.new_external_id {
20018            s.serialize_field("new_external_id", val)?;
20019        }
20020        if let Some(val) = &self.new_given_name {
20021            s.serialize_field("new_given_name", val)?;
20022        }
20023        if let Some(val) = &self.new_surname {
20024            s.serialize_field("new_surname", val)?;
20025        }
20026        if let Some(val) = &self.new_persistent_id {
20027            s.serialize_field("new_persistent_id", val)?;
20028        }
20029        if let Some(val) = &self.new_is_directory_restricted {
20030            s.serialize_field("new_is_directory_restricted", val)?;
20031        }
20032        Ok(())
20033    }
20034}
20035
20036impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfileArg {
20037    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20038        // struct deserializer
20039        use serde::de::{MapAccess, Visitor};
20040        struct StructVisitor;
20041        impl<'de> Visitor<'de> for StructVisitor {
20042            type Value = MembersSetProfileArg;
20043            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20044                f.write_str("a MembersSetProfileArg struct")
20045            }
20046            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20047                MembersSetProfileArg::internal_deserialize(map)
20048            }
20049        }
20050        deserializer.deserialize_struct("MembersSetProfileArg", MEMBERS_SET_PROFILE_ARG_FIELDS, StructVisitor)
20051    }
20052}
20053
20054impl ::serde::ser::Serialize for MembersSetProfileArg {
20055    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20056        // struct serializer
20057        use serde::ser::SerializeStruct;
20058        let mut s = serializer.serialize_struct("MembersSetProfileArg", 7)?;
20059        self.internal_serialize::<S>(&mut s)?;
20060        s.end()
20061    }
20062}
20063
20064#[derive(Debug, Clone, PartialEq, Eq)]
20065#[non_exhaustive] // variants may be added in the future
20066pub enum MembersSetProfileError {
20067    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20068    /// this team.
20069    UserNotFound,
20070    /// The user is not a member of the team.
20071    UserNotInTeam,
20072    /// It is unsafe to use both external_id and new_external_id.
20073    ExternalIdAndNewExternalIdUnsafe,
20074    /// None of new_email, new_given_name, new_surname, or new_external_id are specified.
20075    NoNewDataSpecified,
20076    /// Email is already reserved for another user.
20077    EmailReservedForOtherUser,
20078    /// The external ID is already in use by another team member.
20079    ExternalIdUsedByOtherUser,
20080    /// Modifying deleted users is not allowed.
20081    SetProfileDisallowed,
20082    /// Parameter new_email cannot be empty.
20083    ParamCannotBeEmpty,
20084    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
20085    /// contact Dropbox for more information.
20086    PersistentIdDisabled,
20087    /// The persistent ID is already in use by another team member.
20088    PersistentIdUsedByOtherUser,
20089    /// Directory Restrictions option is not available.
20090    DirectoryRestrictedOff,
20091    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20092    /// typically indicates that this SDK version is out of date.
20093    Other,
20094}
20095
20096impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfileError {
20097    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20098        // union deserializer
20099        use serde::de::{self, MapAccess, Visitor};
20100        struct EnumVisitor;
20101        impl<'de> Visitor<'de> for EnumVisitor {
20102            type Value = MembersSetProfileError;
20103            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20104                f.write_str("a MembersSetProfileError structure")
20105            }
20106            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20107                let tag: &str = match map.next_key()? {
20108                    Some(".tag") => map.next_value()?,
20109                    _ => return Err(de::Error::missing_field(".tag"))
20110                };
20111                let value = match tag {
20112                    "user_not_found" => MembersSetProfileError::UserNotFound,
20113                    "user_not_in_team" => MembersSetProfileError::UserNotInTeam,
20114                    "external_id_and_new_external_id_unsafe" => MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe,
20115                    "no_new_data_specified" => MembersSetProfileError::NoNewDataSpecified,
20116                    "email_reserved_for_other_user" => MembersSetProfileError::EmailReservedForOtherUser,
20117                    "external_id_used_by_other_user" => MembersSetProfileError::ExternalIdUsedByOtherUser,
20118                    "set_profile_disallowed" => MembersSetProfileError::SetProfileDisallowed,
20119                    "param_cannot_be_empty" => MembersSetProfileError::ParamCannotBeEmpty,
20120                    "persistent_id_disabled" => MembersSetProfileError::PersistentIdDisabled,
20121                    "persistent_id_used_by_other_user" => MembersSetProfileError::PersistentIdUsedByOtherUser,
20122                    "directory_restricted_off" => MembersSetProfileError::DirectoryRestrictedOff,
20123                    _ => MembersSetProfileError::Other,
20124                };
20125                crate::eat_json_fields(&mut map)?;
20126                Ok(value)
20127            }
20128        }
20129        const VARIANTS: &[&str] = &["user_not_found",
20130                                    "user_not_in_team",
20131                                    "external_id_and_new_external_id_unsafe",
20132                                    "no_new_data_specified",
20133                                    "email_reserved_for_other_user",
20134                                    "external_id_used_by_other_user",
20135                                    "set_profile_disallowed",
20136                                    "param_cannot_be_empty",
20137                                    "persistent_id_disabled",
20138                                    "persistent_id_used_by_other_user",
20139                                    "directory_restricted_off",
20140                                    "other"];
20141        deserializer.deserialize_struct("MembersSetProfileError", VARIANTS, EnumVisitor)
20142    }
20143}
20144
20145impl ::serde::ser::Serialize for MembersSetProfileError {
20146    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20147        // union serializer
20148        use serde::ser::SerializeStruct;
20149        match self {
20150            MembersSetProfileError::UserNotFound => {
20151                // unit
20152                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20153                s.serialize_field(".tag", "user_not_found")?;
20154                s.end()
20155            }
20156            MembersSetProfileError::UserNotInTeam => {
20157                // unit
20158                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20159                s.serialize_field(".tag", "user_not_in_team")?;
20160                s.end()
20161            }
20162            MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe => {
20163                // unit
20164                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20165                s.serialize_field(".tag", "external_id_and_new_external_id_unsafe")?;
20166                s.end()
20167            }
20168            MembersSetProfileError::NoNewDataSpecified => {
20169                // unit
20170                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20171                s.serialize_field(".tag", "no_new_data_specified")?;
20172                s.end()
20173            }
20174            MembersSetProfileError::EmailReservedForOtherUser => {
20175                // unit
20176                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20177                s.serialize_field(".tag", "email_reserved_for_other_user")?;
20178                s.end()
20179            }
20180            MembersSetProfileError::ExternalIdUsedByOtherUser => {
20181                // unit
20182                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20183                s.serialize_field(".tag", "external_id_used_by_other_user")?;
20184                s.end()
20185            }
20186            MembersSetProfileError::SetProfileDisallowed => {
20187                // unit
20188                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20189                s.serialize_field(".tag", "set_profile_disallowed")?;
20190                s.end()
20191            }
20192            MembersSetProfileError::ParamCannotBeEmpty => {
20193                // unit
20194                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20195                s.serialize_field(".tag", "param_cannot_be_empty")?;
20196                s.end()
20197            }
20198            MembersSetProfileError::PersistentIdDisabled => {
20199                // unit
20200                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20201                s.serialize_field(".tag", "persistent_id_disabled")?;
20202                s.end()
20203            }
20204            MembersSetProfileError::PersistentIdUsedByOtherUser => {
20205                // unit
20206                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20207                s.serialize_field(".tag", "persistent_id_used_by_other_user")?;
20208                s.end()
20209            }
20210            MembersSetProfileError::DirectoryRestrictedOff => {
20211                // unit
20212                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20213                s.serialize_field(".tag", "directory_restricted_off")?;
20214                s.end()
20215            }
20216            MembersSetProfileError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20217        }
20218    }
20219}
20220
20221impl ::std::error::Error for MembersSetProfileError {
20222}
20223
20224impl ::std::fmt::Display for MembersSetProfileError {
20225    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20226        match self {
20227            MembersSetProfileError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20228            MembersSetProfileError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20229            MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe => f.write_str("It is unsafe to use both external_id and new_external_id."),
20230            MembersSetProfileError::NoNewDataSpecified => f.write_str("None of new_email, new_given_name, new_surname, or new_external_id are specified."),
20231            MembersSetProfileError::EmailReservedForOtherUser => f.write_str("Email is already reserved for another user."),
20232            MembersSetProfileError::ExternalIdUsedByOtherUser => f.write_str("The external ID is already in use by another team member."),
20233            MembersSetProfileError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
20234            MembersSetProfileError::ParamCannotBeEmpty => f.write_str("Parameter new_email cannot be empty."),
20235            MembersSetProfileError::PersistentIdDisabled => f.write_str("Persistent ID is only available to teams with persistent ID SAML configuration. Please contact Dropbox for more information."),
20236            MembersSetProfileError::PersistentIdUsedByOtherUser => f.write_str("The persistent ID is already in use by another team member."),
20237            MembersSetProfileError::DirectoryRestrictedOff => f.write_str("Directory Restrictions option is not available."),
20238            _ => write!(f, "{:?}", *self),
20239        }
20240    }
20241}
20242
20243// union extends MemberSelectorError
20244impl From<MemberSelectorError> for MembersSetProfileError {
20245    fn from(parent: MemberSelectorError) -> Self {
20246        match parent {
20247            MemberSelectorError::UserNotFound => MembersSetProfileError::UserNotFound,
20248            MemberSelectorError::UserNotInTeam => MembersSetProfileError::UserNotInTeam,
20249        }
20250    }
20251}
20252#[derive(Debug, Clone, PartialEq, Eq)]
20253#[non_exhaustive] // structs may have more fields added in the future.
20254pub struct MembersSetProfilePhotoArg {
20255    /// Identity of the user whose profile photo will be set.
20256    pub user: UserSelectorArg,
20257    /// Image to set as the member's new profile photo.
20258    pub photo: crate::types::account::PhotoSourceArg,
20259}
20260
20261impl MembersSetProfilePhotoArg {
20262    pub fn new(user: UserSelectorArg, photo: crate::types::account::PhotoSourceArg) -> Self {
20263        MembersSetProfilePhotoArg {
20264            user,
20265            photo,
20266        }
20267    }
20268}
20269
20270const MEMBERS_SET_PROFILE_PHOTO_ARG_FIELDS: &[&str] = &["user",
20271                                                        "photo"];
20272impl MembersSetProfilePhotoArg {
20273    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20274        map: V,
20275    ) -> Result<MembersSetProfilePhotoArg, V::Error> {
20276        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20277    }
20278
20279    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20280        mut map: V,
20281        optional: bool,
20282    ) -> Result<Option<MembersSetProfilePhotoArg>, V::Error> {
20283        let mut field_user = None;
20284        let mut field_photo = None;
20285        let mut nothing = true;
20286        while let Some(key) = map.next_key::<&str>()? {
20287            nothing = false;
20288            match key {
20289                "user" => {
20290                    if field_user.is_some() {
20291                        return Err(::serde::de::Error::duplicate_field("user"));
20292                    }
20293                    field_user = Some(map.next_value()?);
20294                }
20295                "photo" => {
20296                    if field_photo.is_some() {
20297                        return Err(::serde::de::Error::duplicate_field("photo"));
20298                    }
20299                    field_photo = Some(map.next_value()?);
20300                }
20301                _ => {
20302                    // unknown field allowed and ignored
20303                    map.next_value::<::serde_json::Value>()?;
20304                }
20305            }
20306        }
20307        if optional && nothing {
20308            return Ok(None);
20309        }
20310        let result = MembersSetProfilePhotoArg {
20311            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
20312            photo: field_photo.ok_or_else(|| ::serde::de::Error::missing_field("photo"))?,
20313        };
20314        Ok(Some(result))
20315    }
20316
20317    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20318        &self,
20319        s: &mut S::SerializeStruct,
20320    ) -> Result<(), S::Error> {
20321        use serde::ser::SerializeStruct;
20322        s.serialize_field("user", &self.user)?;
20323        s.serialize_field("photo", &self.photo)?;
20324        Ok(())
20325    }
20326}
20327
20328impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfilePhotoArg {
20329    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20330        // struct deserializer
20331        use serde::de::{MapAccess, Visitor};
20332        struct StructVisitor;
20333        impl<'de> Visitor<'de> for StructVisitor {
20334            type Value = MembersSetProfilePhotoArg;
20335            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20336                f.write_str("a MembersSetProfilePhotoArg struct")
20337            }
20338            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20339                MembersSetProfilePhotoArg::internal_deserialize(map)
20340            }
20341        }
20342        deserializer.deserialize_struct("MembersSetProfilePhotoArg", MEMBERS_SET_PROFILE_PHOTO_ARG_FIELDS, StructVisitor)
20343    }
20344}
20345
20346impl ::serde::ser::Serialize for MembersSetProfilePhotoArg {
20347    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20348        // struct serializer
20349        use serde::ser::SerializeStruct;
20350        let mut s = serializer.serialize_struct("MembersSetProfilePhotoArg", 2)?;
20351        self.internal_serialize::<S>(&mut s)?;
20352        s.end()
20353    }
20354}
20355
20356#[derive(Debug, Clone, PartialEq, Eq)]
20357#[non_exhaustive] // variants may be added in the future
20358pub enum MembersSetProfilePhotoError {
20359    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20360    /// this team.
20361    UserNotFound,
20362    /// The user is not a member of the team.
20363    UserNotInTeam,
20364    /// Modifying deleted users is not allowed.
20365    SetProfileDisallowed,
20366    PhotoError(crate::types::account::SetProfilePhotoError),
20367    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20368    /// typically indicates that this SDK version is out of date.
20369    Other,
20370}
20371
20372impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfilePhotoError {
20373    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20374        // union deserializer
20375        use serde::de::{self, MapAccess, Visitor};
20376        struct EnumVisitor;
20377        impl<'de> Visitor<'de> for EnumVisitor {
20378            type Value = MembersSetProfilePhotoError;
20379            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20380                f.write_str("a MembersSetProfilePhotoError structure")
20381            }
20382            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20383                let tag: &str = match map.next_key()? {
20384                    Some(".tag") => map.next_value()?,
20385                    _ => return Err(de::Error::missing_field(".tag"))
20386                };
20387                let value = match tag {
20388                    "user_not_found" => MembersSetProfilePhotoError::UserNotFound,
20389                    "user_not_in_team" => MembersSetProfilePhotoError::UserNotInTeam,
20390                    "set_profile_disallowed" => MembersSetProfilePhotoError::SetProfileDisallowed,
20391                    "photo_error" => {
20392                        match map.next_key()? {
20393                            Some("photo_error") => MembersSetProfilePhotoError::PhotoError(map.next_value()?),
20394                            None => return Err(de::Error::missing_field("photo_error")),
20395                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
20396                        }
20397                    }
20398                    _ => MembersSetProfilePhotoError::Other,
20399                };
20400                crate::eat_json_fields(&mut map)?;
20401                Ok(value)
20402            }
20403        }
20404        const VARIANTS: &[&str] = &["user_not_found",
20405                                    "user_not_in_team",
20406                                    "set_profile_disallowed",
20407                                    "photo_error",
20408                                    "other"];
20409        deserializer.deserialize_struct("MembersSetProfilePhotoError", VARIANTS, EnumVisitor)
20410    }
20411}
20412
20413impl ::serde::ser::Serialize for MembersSetProfilePhotoError {
20414    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20415        // union serializer
20416        use serde::ser::SerializeStruct;
20417        match self {
20418            MembersSetProfilePhotoError::UserNotFound => {
20419                // unit
20420                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
20421                s.serialize_field(".tag", "user_not_found")?;
20422                s.end()
20423            }
20424            MembersSetProfilePhotoError::UserNotInTeam => {
20425                // unit
20426                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
20427                s.serialize_field(".tag", "user_not_in_team")?;
20428                s.end()
20429            }
20430            MembersSetProfilePhotoError::SetProfileDisallowed => {
20431                // unit
20432                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
20433                s.serialize_field(".tag", "set_profile_disallowed")?;
20434                s.end()
20435            }
20436            MembersSetProfilePhotoError::PhotoError(x) => {
20437                // union or polymporphic struct
20438                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 2)?;
20439                s.serialize_field(".tag", "photo_error")?;
20440                s.serialize_field("photo_error", x)?;
20441                s.end()
20442            }
20443            MembersSetProfilePhotoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20444        }
20445    }
20446}
20447
20448impl ::std::error::Error for MembersSetProfilePhotoError {
20449    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
20450        match self {
20451            MembersSetProfilePhotoError::PhotoError(inner) => Some(inner),
20452            _ => None,
20453        }
20454    }
20455}
20456
20457impl ::std::fmt::Display for MembersSetProfilePhotoError {
20458    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20459        match self {
20460            MembersSetProfilePhotoError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20461            MembersSetProfilePhotoError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20462            MembersSetProfilePhotoError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
20463            MembersSetProfilePhotoError::PhotoError(inner) => write!(f, "MembersSetProfilePhotoError: {}", inner),
20464            _ => write!(f, "{:?}", *self),
20465        }
20466    }
20467}
20468
20469// union extends MemberSelectorError
20470impl From<MemberSelectorError> for MembersSetProfilePhotoError {
20471    fn from(parent: MemberSelectorError) -> Self {
20472        match parent {
20473            MemberSelectorError::UserNotFound => MembersSetProfilePhotoError::UserNotFound,
20474            MemberSelectorError::UserNotInTeam => MembersSetProfilePhotoError::UserNotInTeam,
20475        }
20476    }
20477}
20478#[derive(Debug, Clone, PartialEq, Eq)]
20479#[non_exhaustive] // variants may be added in the future
20480pub enum MembersSuspendError {
20481    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20482    /// this team.
20483    UserNotFound,
20484    /// The user is not a member of the team.
20485    UserNotInTeam,
20486    /// The user is not active, so it cannot be suspended.
20487    SuspendInactiveUser,
20488    /// The user is the last admin of the team, so it cannot be suspended.
20489    SuspendLastAdmin,
20490    /// Team is full. The organization has no available licenses.
20491    TeamLicenseLimit,
20492    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20493    /// typically indicates that this SDK version is out of date.
20494    Other,
20495}
20496
20497impl<'de> ::serde::de::Deserialize<'de> for MembersSuspendError {
20498    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20499        // union deserializer
20500        use serde::de::{self, MapAccess, Visitor};
20501        struct EnumVisitor;
20502        impl<'de> Visitor<'de> for EnumVisitor {
20503            type Value = MembersSuspendError;
20504            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20505                f.write_str("a MembersSuspendError structure")
20506            }
20507            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20508                let tag: &str = match map.next_key()? {
20509                    Some(".tag") => map.next_value()?,
20510                    _ => return Err(de::Error::missing_field(".tag"))
20511                };
20512                let value = match tag {
20513                    "user_not_found" => MembersSuspendError::UserNotFound,
20514                    "user_not_in_team" => MembersSuspendError::UserNotInTeam,
20515                    "suspend_inactive_user" => MembersSuspendError::SuspendInactiveUser,
20516                    "suspend_last_admin" => MembersSuspendError::SuspendLastAdmin,
20517                    "team_license_limit" => MembersSuspendError::TeamLicenseLimit,
20518                    _ => MembersSuspendError::Other,
20519                };
20520                crate::eat_json_fields(&mut map)?;
20521                Ok(value)
20522            }
20523        }
20524        const VARIANTS: &[&str] = &["user_not_found",
20525                                    "user_not_in_team",
20526                                    "other",
20527                                    "suspend_inactive_user",
20528                                    "suspend_last_admin",
20529                                    "team_license_limit"];
20530        deserializer.deserialize_struct("MembersSuspendError", VARIANTS, EnumVisitor)
20531    }
20532}
20533
20534impl ::serde::ser::Serialize for MembersSuspendError {
20535    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20536        // union serializer
20537        use serde::ser::SerializeStruct;
20538        match self {
20539            MembersSuspendError::UserNotFound => {
20540                // unit
20541                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20542                s.serialize_field(".tag", "user_not_found")?;
20543                s.end()
20544            }
20545            MembersSuspendError::UserNotInTeam => {
20546                // unit
20547                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20548                s.serialize_field(".tag", "user_not_in_team")?;
20549                s.end()
20550            }
20551            MembersSuspendError::SuspendInactiveUser => {
20552                // unit
20553                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20554                s.serialize_field(".tag", "suspend_inactive_user")?;
20555                s.end()
20556            }
20557            MembersSuspendError::SuspendLastAdmin => {
20558                // unit
20559                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20560                s.serialize_field(".tag", "suspend_last_admin")?;
20561                s.end()
20562            }
20563            MembersSuspendError::TeamLicenseLimit => {
20564                // unit
20565                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20566                s.serialize_field(".tag", "team_license_limit")?;
20567                s.end()
20568            }
20569            MembersSuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20570        }
20571    }
20572}
20573
20574impl ::std::error::Error for MembersSuspendError {
20575}
20576
20577impl ::std::fmt::Display for MembersSuspendError {
20578    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20579        match self {
20580            MembersSuspendError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20581            MembersSuspendError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20582            MembersSuspendError::SuspendInactiveUser => f.write_str("The user is not active, so it cannot be suspended."),
20583            MembersSuspendError::SuspendLastAdmin => f.write_str("The user is the last admin of the team, so it cannot be suspended."),
20584            MembersSuspendError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
20585            _ => write!(f, "{:?}", *self),
20586        }
20587    }
20588}
20589
20590// union extends MembersDeactivateError
20591impl From<MembersDeactivateError> for MembersSuspendError {
20592    fn from(parent: MembersDeactivateError) -> Self {
20593        match parent {
20594            MembersDeactivateError::UserNotFound => MembersSuspendError::UserNotFound,
20595            MembersDeactivateError::UserNotInTeam => MembersSuspendError::UserNotInTeam,
20596            MembersDeactivateError::Other => MembersSuspendError::Other,
20597        }
20598    }
20599}
20600#[derive(Debug, Clone, PartialEq, Eq)]
20601#[non_exhaustive] // variants may be added in the future
20602pub enum MembersTransferFilesError {
20603    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20604    /// this team.
20605    UserNotFound,
20606    /// The user is not a member of the team.
20607    UserNotInTeam,
20608    /// Cannot permanently delete files while it's being transferred.
20609    TransferInProgress,
20610    /// Cannot permanently delete files that have already been transferred.
20611    AlreadyTransferred,
20612    /// Cannot permanently delete files that have already been transferred or deleted.
20613    AlreadyTransferredOrDeleted,
20614    /// Expected removed user and transfer_dest user to be different.
20615    RemovedAndTransferDestShouldDiffer,
20616    /// Expected removed user and transfer_admin user to be different.
20617    RemovedAndTransferAdminShouldDiffer,
20618    /// No matching user found for the argument transfer_dest_id.
20619    TransferDestUserNotFound,
20620    /// The provided transfer_dest_id does not exist on this team.
20621    TransferDestUserNotInTeam,
20622    /// The provided transfer_admin_id does not exist on this team.
20623    TransferAdminUserNotInTeam,
20624    /// No matching user found for the argument transfer_admin_id.
20625    TransferAdminUserNotFound,
20626    /// The transfer_admin_id argument must be provided when file transfer is requested.
20627    UnspecifiedTransferAdminId,
20628    /// Specified transfer_admin user is not a team admin.
20629    TransferAdminIsNotAdmin,
20630    /// The recipient user's email is not verified.
20631    RecipientNotVerified,
20632    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20633    /// typically indicates that this SDK version is out of date.
20634    Other,
20635}
20636
20637impl<'de> ::serde::de::Deserialize<'de> for MembersTransferFilesError {
20638    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20639        // union deserializer
20640        use serde::de::{self, MapAccess, Visitor};
20641        struct EnumVisitor;
20642        impl<'de> Visitor<'de> for EnumVisitor {
20643            type Value = MembersTransferFilesError;
20644            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20645                f.write_str("a MembersTransferFilesError structure")
20646            }
20647            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20648                let tag: &str = match map.next_key()? {
20649                    Some(".tag") => map.next_value()?,
20650                    _ => return Err(de::Error::missing_field(".tag"))
20651                };
20652                let value = match tag {
20653                    "user_not_found" => MembersTransferFilesError::UserNotFound,
20654                    "user_not_in_team" => MembersTransferFilesError::UserNotInTeam,
20655                    "transfer_in_progress" => MembersTransferFilesError::TransferInProgress,
20656                    "already_transferred" => MembersTransferFilesError::AlreadyTransferred,
20657                    "already_transferred_or_deleted" => MembersTransferFilesError::AlreadyTransferredOrDeleted,
20658                    "removed_and_transfer_dest_should_differ" => MembersTransferFilesError::RemovedAndTransferDestShouldDiffer,
20659                    "removed_and_transfer_admin_should_differ" => MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer,
20660                    "transfer_dest_user_not_found" => MembersTransferFilesError::TransferDestUserNotFound,
20661                    "transfer_dest_user_not_in_team" => MembersTransferFilesError::TransferDestUserNotInTeam,
20662                    "transfer_admin_user_not_in_team" => MembersTransferFilesError::TransferAdminUserNotInTeam,
20663                    "transfer_admin_user_not_found" => MembersTransferFilesError::TransferAdminUserNotFound,
20664                    "unspecified_transfer_admin_id" => MembersTransferFilesError::UnspecifiedTransferAdminId,
20665                    "transfer_admin_is_not_admin" => MembersTransferFilesError::TransferAdminIsNotAdmin,
20666                    "recipient_not_verified" => MembersTransferFilesError::RecipientNotVerified,
20667                    _ => MembersTransferFilesError::Other,
20668                };
20669                crate::eat_json_fields(&mut map)?;
20670                Ok(value)
20671            }
20672        }
20673        const VARIANTS: &[&str] = &["user_not_found",
20674                                    "user_not_in_team",
20675                                    "other",
20676                                    "transfer_in_progress",
20677                                    "already_transferred",
20678                                    "already_transferred_or_deleted",
20679                                    "removed_and_transfer_dest_should_differ",
20680                                    "removed_and_transfer_admin_should_differ",
20681                                    "transfer_dest_user_not_found",
20682                                    "transfer_dest_user_not_in_team",
20683                                    "transfer_admin_user_not_in_team",
20684                                    "transfer_admin_user_not_found",
20685                                    "unspecified_transfer_admin_id",
20686                                    "transfer_admin_is_not_admin",
20687                                    "recipient_not_verified"];
20688        deserializer.deserialize_struct("MembersTransferFilesError", VARIANTS, EnumVisitor)
20689    }
20690}
20691
20692impl ::serde::ser::Serialize for MembersTransferFilesError {
20693    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20694        // union serializer
20695        use serde::ser::SerializeStruct;
20696        match self {
20697            MembersTransferFilesError::UserNotFound => {
20698                // unit
20699                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20700                s.serialize_field(".tag", "user_not_found")?;
20701                s.end()
20702            }
20703            MembersTransferFilesError::UserNotInTeam => {
20704                // unit
20705                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20706                s.serialize_field(".tag", "user_not_in_team")?;
20707                s.end()
20708            }
20709            MembersTransferFilesError::TransferInProgress => {
20710                // unit
20711                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20712                s.serialize_field(".tag", "transfer_in_progress")?;
20713                s.end()
20714            }
20715            MembersTransferFilesError::AlreadyTransferred => {
20716                // unit
20717                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20718                s.serialize_field(".tag", "already_transferred")?;
20719                s.end()
20720            }
20721            MembersTransferFilesError::AlreadyTransferredOrDeleted => {
20722                // unit
20723                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20724                s.serialize_field(".tag", "already_transferred_or_deleted")?;
20725                s.end()
20726            }
20727            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => {
20728                // unit
20729                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20730                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
20731                s.end()
20732            }
20733            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => {
20734                // unit
20735                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20736                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
20737                s.end()
20738            }
20739            MembersTransferFilesError::TransferDestUserNotFound => {
20740                // unit
20741                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20742                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
20743                s.end()
20744            }
20745            MembersTransferFilesError::TransferDestUserNotInTeam => {
20746                // unit
20747                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20748                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
20749                s.end()
20750            }
20751            MembersTransferFilesError::TransferAdminUserNotInTeam => {
20752                // unit
20753                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20754                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
20755                s.end()
20756            }
20757            MembersTransferFilesError::TransferAdminUserNotFound => {
20758                // unit
20759                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20760                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
20761                s.end()
20762            }
20763            MembersTransferFilesError::UnspecifiedTransferAdminId => {
20764                // unit
20765                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20766                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
20767                s.end()
20768            }
20769            MembersTransferFilesError::TransferAdminIsNotAdmin => {
20770                // unit
20771                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20772                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
20773                s.end()
20774            }
20775            MembersTransferFilesError::RecipientNotVerified => {
20776                // unit
20777                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20778                s.serialize_field(".tag", "recipient_not_verified")?;
20779                s.end()
20780            }
20781            MembersTransferFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20782        }
20783    }
20784}
20785
20786impl ::std::error::Error for MembersTransferFilesError {
20787}
20788
20789impl ::std::fmt::Display for MembersTransferFilesError {
20790    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20791        match self {
20792            MembersTransferFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20793            MembersTransferFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20794            MembersTransferFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
20795            MembersTransferFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
20796            MembersTransferFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
20797            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
20798            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
20799            MembersTransferFilesError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
20800            MembersTransferFilesError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
20801            MembersTransferFilesError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
20802            MembersTransferFilesError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
20803            MembersTransferFilesError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
20804            MembersTransferFilesError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
20805            MembersTransferFilesError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
20806            _ => write!(f, "{:?}", *self),
20807        }
20808    }
20809}
20810
20811// union extends MembersPermanentlyDeleteFilesError
20812impl From<MembersPermanentlyDeleteFilesError> for MembersTransferFilesError {
20813    fn from(parent: MembersPermanentlyDeleteFilesError) -> Self {
20814        match parent {
20815            MembersPermanentlyDeleteFilesError::UserNotFound => MembersTransferFilesError::UserNotFound,
20816            MembersPermanentlyDeleteFilesError::UserNotInTeam => MembersTransferFilesError::UserNotInTeam,
20817            MembersPermanentlyDeleteFilesError::Other => MembersTransferFilesError::Other,
20818            MembersPermanentlyDeleteFilesError::TransferInProgress => MembersTransferFilesError::TransferInProgress,
20819            MembersPermanentlyDeleteFilesError::AlreadyTransferred => MembersTransferFilesError::AlreadyTransferred,
20820            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => MembersTransferFilesError::AlreadyTransferredOrDeleted,
20821        }
20822    }
20823}
20824#[derive(Debug, Clone, PartialEq, Eq)]
20825#[non_exhaustive] // variants may be added in the future
20826pub enum MembersTransferFormerMembersFilesError {
20827    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20828    /// this team.
20829    UserNotFound,
20830    /// The user is not a member of the team.
20831    UserNotInTeam,
20832    /// Cannot permanently delete files while it's being transferred.
20833    TransferInProgress,
20834    /// Cannot permanently delete files that have already been transferred.
20835    AlreadyTransferred,
20836    /// Cannot permanently delete files that have already been transferred or deleted.
20837    AlreadyTransferredOrDeleted,
20838    /// Expected removed user and transfer_dest user to be different.
20839    RemovedAndTransferDestShouldDiffer,
20840    /// Expected removed user and transfer_admin user to be different.
20841    RemovedAndTransferAdminShouldDiffer,
20842    /// No matching user found for the argument transfer_dest_id.
20843    TransferDestUserNotFound,
20844    /// The provided transfer_dest_id does not exist on this team.
20845    TransferDestUserNotInTeam,
20846    /// The provided transfer_admin_id does not exist on this team.
20847    TransferAdminUserNotInTeam,
20848    /// No matching user found for the argument transfer_admin_id.
20849    TransferAdminUserNotFound,
20850    /// The transfer_admin_id argument must be provided when file transfer is requested.
20851    UnspecifiedTransferAdminId,
20852    /// Specified transfer_admin user is not a team admin.
20853    TransferAdminIsNotAdmin,
20854    /// The recipient user's email is not verified.
20855    RecipientNotVerified,
20856    /// The user's data is being transferred. Please wait some time before retrying.
20857    UserDataIsBeingTransferred,
20858    /// No matching removed user found for the argument user.
20859    UserNotRemoved,
20860    /// User files aren't transferable anymore.
20861    UserDataCannotBeTransferred,
20862    /// User's data has already been transferred to another user.
20863    UserDataAlreadyTransferred,
20864    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20865    /// typically indicates that this SDK version is out of date.
20866    Other,
20867}
20868
20869impl<'de> ::serde::de::Deserialize<'de> for MembersTransferFormerMembersFilesError {
20870    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20871        // union deserializer
20872        use serde::de::{self, MapAccess, Visitor};
20873        struct EnumVisitor;
20874        impl<'de> Visitor<'de> for EnumVisitor {
20875            type Value = MembersTransferFormerMembersFilesError;
20876            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20877                f.write_str("a MembersTransferFormerMembersFilesError structure")
20878            }
20879            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20880                let tag: &str = match map.next_key()? {
20881                    Some(".tag") => map.next_value()?,
20882                    _ => return Err(de::Error::missing_field(".tag"))
20883                };
20884                let value = match tag {
20885                    "user_not_found" => MembersTransferFormerMembersFilesError::UserNotFound,
20886                    "user_not_in_team" => MembersTransferFormerMembersFilesError::UserNotInTeam,
20887                    "transfer_in_progress" => MembersTransferFormerMembersFilesError::TransferInProgress,
20888                    "already_transferred" => MembersTransferFormerMembersFilesError::AlreadyTransferred,
20889                    "already_transferred_or_deleted" => MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted,
20890                    "removed_and_transfer_dest_should_differ" => MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer,
20891                    "removed_and_transfer_admin_should_differ" => MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer,
20892                    "transfer_dest_user_not_found" => MembersTransferFormerMembersFilesError::TransferDestUserNotFound,
20893                    "transfer_dest_user_not_in_team" => MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam,
20894                    "transfer_admin_user_not_in_team" => MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam,
20895                    "transfer_admin_user_not_found" => MembersTransferFormerMembersFilesError::TransferAdminUserNotFound,
20896                    "unspecified_transfer_admin_id" => MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId,
20897                    "transfer_admin_is_not_admin" => MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin,
20898                    "recipient_not_verified" => MembersTransferFormerMembersFilesError::RecipientNotVerified,
20899                    "user_data_is_being_transferred" => MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred,
20900                    "user_not_removed" => MembersTransferFormerMembersFilesError::UserNotRemoved,
20901                    "user_data_cannot_be_transferred" => MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred,
20902                    "user_data_already_transferred" => MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred,
20903                    _ => MembersTransferFormerMembersFilesError::Other,
20904                };
20905                crate::eat_json_fields(&mut map)?;
20906                Ok(value)
20907            }
20908        }
20909        const VARIANTS: &[&str] = &["user_not_found",
20910                                    "user_not_in_team",
20911                                    "other",
20912                                    "transfer_in_progress",
20913                                    "already_transferred",
20914                                    "already_transferred_or_deleted",
20915                                    "removed_and_transfer_dest_should_differ",
20916                                    "removed_and_transfer_admin_should_differ",
20917                                    "transfer_dest_user_not_found",
20918                                    "transfer_dest_user_not_in_team",
20919                                    "transfer_admin_user_not_in_team",
20920                                    "transfer_admin_user_not_found",
20921                                    "unspecified_transfer_admin_id",
20922                                    "transfer_admin_is_not_admin",
20923                                    "recipient_not_verified",
20924                                    "user_data_is_being_transferred",
20925                                    "user_not_removed",
20926                                    "user_data_cannot_be_transferred",
20927                                    "user_data_already_transferred"];
20928        deserializer.deserialize_struct("MembersTransferFormerMembersFilesError", VARIANTS, EnumVisitor)
20929    }
20930}
20931
20932impl ::serde::ser::Serialize for MembersTransferFormerMembersFilesError {
20933    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20934        // union serializer
20935        use serde::ser::SerializeStruct;
20936        match self {
20937            MembersTransferFormerMembersFilesError::UserNotFound => {
20938                // unit
20939                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20940                s.serialize_field(".tag", "user_not_found")?;
20941                s.end()
20942            }
20943            MembersTransferFormerMembersFilesError::UserNotInTeam => {
20944                // unit
20945                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20946                s.serialize_field(".tag", "user_not_in_team")?;
20947                s.end()
20948            }
20949            MembersTransferFormerMembersFilesError::TransferInProgress => {
20950                // unit
20951                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20952                s.serialize_field(".tag", "transfer_in_progress")?;
20953                s.end()
20954            }
20955            MembersTransferFormerMembersFilesError::AlreadyTransferred => {
20956                // unit
20957                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20958                s.serialize_field(".tag", "already_transferred")?;
20959                s.end()
20960            }
20961            MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted => {
20962                // unit
20963                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20964                s.serialize_field(".tag", "already_transferred_or_deleted")?;
20965                s.end()
20966            }
20967            MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer => {
20968                // unit
20969                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20970                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
20971                s.end()
20972            }
20973            MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer => {
20974                // unit
20975                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20976                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
20977                s.end()
20978            }
20979            MembersTransferFormerMembersFilesError::TransferDestUserNotFound => {
20980                // unit
20981                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20982                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
20983                s.end()
20984            }
20985            MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam => {
20986                // unit
20987                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20988                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
20989                s.end()
20990            }
20991            MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam => {
20992                // unit
20993                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20994                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
20995                s.end()
20996            }
20997            MembersTransferFormerMembersFilesError::TransferAdminUserNotFound => {
20998                // unit
20999                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21000                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
21001                s.end()
21002            }
21003            MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId => {
21004                // unit
21005                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21006                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
21007                s.end()
21008            }
21009            MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin => {
21010                // unit
21011                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21012                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
21013                s.end()
21014            }
21015            MembersTransferFormerMembersFilesError::RecipientNotVerified => {
21016                // unit
21017                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21018                s.serialize_field(".tag", "recipient_not_verified")?;
21019                s.end()
21020            }
21021            MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred => {
21022                // unit
21023                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21024                s.serialize_field(".tag", "user_data_is_being_transferred")?;
21025                s.end()
21026            }
21027            MembersTransferFormerMembersFilesError::UserNotRemoved => {
21028                // unit
21029                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21030                s.serialize_field(".tag", "user_not_removed")?;
21031                s.end()
21032            }
21033            MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred => {
21034                // unit
21035                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21036                s.serialize_field(".tag", "user_data_cannot_be_transferred")?;
21037                s.end()
21038            }
21039            MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred => {
21040                // unit
21041                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21042                s.serialize_field(".tag", "user_data_already_transferred")?;
21043                s.end()
21044            }
21045            MembersTransferFormerMembersFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21046        }
21047    }
21048}
21049
21050impl ::std::error::Error for MembersTransferFormerMembersFilesError {
21051}
21052
21053impl ::std::fmt::Display for MembersTransferFormerMembersFilesError {
21054    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21055        match self {
21056            MembersTransferFormerMembersFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21057            MembersTransferFormerMembersFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21058            MembersTransferFormerMembersFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
21059            MembersTransferFormerMembersFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
21060            MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
21061            MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
21062            MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
21063            MembersTransferFormerMembersFilesError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
21064            MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
21065            MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
21066            MembersTransferFormerMembersFilesError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
21067            MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
21068            MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
21069            MembersTransferFormerMembersFilesError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
21070            MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred => f.write_str("The user's data is being transferred. Please wait some time before retrying."),
21071            MembersTransferFormerMembersFilesError::UserNotRemoved => f.write_str("No matching removed user found for the argument user."),
21072            MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred => f.write_str("User files aren't transferable anymore."),
21073            MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred => f.write_str("User's data has already been transferred to another user."),
21074            _ => write!(f, "{:?}", *self),
21075        }
21076    }
21077}
21078
21079// union extends MembersTransferFilesError
21080impl From<MembersTransferFilesError> for MembersTransferFormerMembersFilesError {
21081    fn from(parent: MembersTransferFilesError) -> Self {
21082        match parent {
21083            MembersTransferFilesError::UserNotFound => MembersTransferFormerMembersFilesError::UserNotFound,
21084            MembersTransferFilesError::UserNotInTeam => MembersTransferFormerMembersFilesError::UserNotInTeam,
21085            MembersTransferFilesError::Other => MembersTransferFormerMembersFilesError::Other,
21086            MembersTransferFilesError::TransferInProgress => MembersTransferFormerMembersFilesError::TransferInProgress,
21087            MembersTransferFilesError::AlreadyTransferred => MembersTransferFormerMembersFilesError::AlreadyTransferred,
21088            MembersTransferFilesError::AlreadyTransferredOrDeleted => MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted,
21089            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer,
21090            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer,
21091            MembersTransferFilesError::TransferDestUserNotFound => MembersTransferFormerMembersFilesError::TransferDestUserNotFound,
21092            MembersTransferFilesError::TransferDestUserNotInTeam => MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam,
21093            MembersTransferFilesError::TransferAdminUserNotInTeam => MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam,
21094            MembersTransferFilesError::TransferAdminUserNotFound => MembersTransferFormerMembersFilesError::TransferAdminUserNotFound,
21095            MembersTransferFilesError::UnspecifiedTransferAdminId => MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId,
21096            MembersTransferFilesError::TransferAdminIsNotAdmin => MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin,
21097            MembersTransferFilesError::RecipientNotVerified => MembersTransferFormerMembersFilesError::RecipientNotVerified,
21098        }
21099    }
21100}
21101/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
21102/// account.
21103#[derive(Debug, Clone, PartialEq, Eq)]
21104#[non_exhaustive] // structs may have more fields added in the future.
21105pub struct MembersUnsuspendArg {
21106    /// Identity of user to unsuspend.
21107    pub user: UserSelectorArg,
21108}
21109
21110impl MembersUnsuspendArg {
21111    pub fn new(user: UserSelectorArg) -> Self {
21112        MembersUnsuspendArg {
21113            user,
21114        }
21115    }
21116}
21117
21118const MEMBERS_UNSUSPEND_ARG_FIELDS: &[&str] = &["user"];
21119impl MembersUnsuspendArg {
21120    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21121        map: V,
21122    ) -> Result<MembersUnsuspendArg, V::Error> {
21123        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21124    }
21125
21126    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21127        mut map: V,
21128        optional: bool,
21129    ) -> Result<Option<MembersUnsuspendArg>, V::Error> {
21130        let mut field_user = None;
21131        let mut nothing = true;
21132        while let Some(key) = map.next_key::<&str>()? {
21133            nothing = false;
21134            match key {
21135                "user" => {
21136                    if field_user.is_some() {
21137                        return Err(::serde::de::Error::duplicate_field("user"));
21138                    }
21139                    field_user = Some(map.next_value()?);
21140                }
21141                _ => {
21142                    // unknown field allowed and ignored
21143                    map.next_value::<::serde_json::Value>()?;
21144                }
21145            }
21146        }
21147        if optional && nothing {
21148            return Ok(None);
21149        }
21150        let result = MembersUnsuspendArg {
21151            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
21152        };
21153        Ok(Some(result))
21154    }
21155
21156    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21157        &self,
21158        s: &mut S::SerializeStruct,
21159    ) -> Result<(), S::Error> {
21160        use serde::ser::SerializeStruct;
21161        s.serialize_field("user", &self.user)?;
21162        Ok(())
21163    }
21164}
21165
21166impl<'de> ::serde::de::Deserialize<'de> for MembersUnsuspendArg {
21167    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21168        // struct deserializer
21169        use serde::de::{MapAccess, Visitor};
21170        struct StructVisitor;
21171        impl<'de> Visitor<'de> for StructVisitor {
21172            type Value = MembersUnsuspendArg;
21173            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21174                f.write_str("a MembersUnsuspendArg struct")
21175            }
21176            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21177                MembersUnsuspendArg::internal_deserialize(map)
21178            }
21179        }
21180        deserializer.deserialize_struct("MembersUnsuspendArg", MEMBERS_UNSUSPEND_ARG_FIELDS, StructVisitor)
21181    }
21182}
21183
21184impl ::serde::ser::Serialize for MembersUnsuspendArg {
21185    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21186        // struct serializer
21187        use serde::ser::SerializeStruct;
21188        let mut s = serializer.serialize_struct("MembersUnsuspendArg", 1)?;
21189        self.internal_serialize::<S>(&mut s)?;
21190        s.end()
21191    }
21192}
21193
21194#[derive(Debug, Clone, PartialEq, Eq)]
21195#[non_exhaustive] // variants may be added in the future
21196pub enum MembersUnsuspendError {
21197    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
21198    /// this team.
21199    UserNotFound,
21200    /// The user is not a member of the team.
21201    UserNotInTeam,
21202    /// The user is unsuspended, so it cannot be unsuspended again.
21203    UnsuspendNonSuspendedMember,
21204    /// Team is full. The organization has no available licenses.
21205    TeamLicenseLimit,
21206    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21207    /// typically indicates that this SDK version is out of date.
21208    Other,
21209}
21210
21211impl<'de> ::serde::de::Deserialize<'de> for MembersUnsuspendError {
21212    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21213        // union deserializer
21214        use serde::de::{self, MapAccess, Visitor};
21215        struct EnumVisitor;
21216        impl<'de> Visitor<'de> for EnumVisitor {
21217            type Value = MembersUnsuspendError;
21218            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21219                f.write_str("a MembersUnsuspendError structure")
21220            }
21221            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21222                let tag: &str = match map.next_key()? {
21223                    Some(".tag") => map.next_value()?,
21224                    _ => return Err(de::Error::missing_field(".tag"))
21225                };
21226                let value = match tag {
21227                    "user_not_found" => MembersUnsuspendError::UserNotFound,
21228                    "user_not_in_team" => MembersUnsuspendError::UserNotInTeam,
21229                    "unsuspend_non_suspended_member" => MembersUnsuspendError::UnsuspendNonSuspendedMember,
21230                    "team_license_limit" => MembersUnsuspendError::TeamLicenseLimit,
21231                    _ => MembersUnsuspendError::Other,
21232                };
21233                crate::eat_json_fields(&mut map)?;
21234                Ok(value)
21235            }
21236        }
21237        const VARIANTS: &[&str] = &["user_not_found",
21238                                    "user_not_in_team",
21239                                    "other",
21240                                    "unsuspend_non_suspended_member",
21241                                    "team_license_limit"];
21242        deserializer.deserialize_struct("MembersUnsuspendError", VARIANTS, EnumVisitor)
21243    }
21244}
21245
21246impl ::serde::ser::Serialize for MembersUnsuspendError {
21247    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21248        // union serializer
21249        use serde::ser::SerializeStruct;
21250        match self {
21251            MembersUnsuspendError::UserNotFound => {
21252                // unit
21253                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
21254                s.serialize_field(".tag", "user_not_found")?;
21255                s.end()
21256            }
21257            MembersUnsuspendError::UserNotInTeam => {
21258                // unit
21259                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
21260                s.serialize_field(".tag", "user_not_in_team")?;
21261                s.end()
21262            }
21263            MembersUnsuspendError::UnsuspendNonSuspendedMember => {
21264                // unit
21265                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
21266                s.serialize_field(".tag", "unsuspend_non_suspended_member")?;
21267                s.end()
21268            }
21269            MembersUnsuspendError::TeamLicenseLimit => {
21270                // unit
21271                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
21272                s.serialize_field(".tag", "team_license_limit")?;
21273                s.end()
21274            }
21275            MembersUnsuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21276        }
21277    }
21278}
21279
21280impl ::std::error::Error for MembersUnsuspendError {
21281}
21282
21283impl ::std::fmt::Display for MembersUnsuspendError {
21284    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21285        match self {
21286            MembersUnsuspendError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21287            MembersUnsuspendError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21288            MembersUnsuspendError::UnsuspendNonSuspendedMember => f.write_str("The user is unsuspended, so it cannot be unsuspended again."),
21289            MembersUnsuspendError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
21290            _ => write!(f, "{:?}", *self),
21291        }
21292    }
21293}
21294
21295// union extends MembersDeactivateError
21296impl From<MembersDeactivateError> for MembersUnsuspendError {
21297    fn from(parent: MembersDeactivateError) -> Self {
21298        match parent {
21299            MembersDeactivateError::UserNotFound => MembersUnsuspendError::UserNotFound,
21300            MembersDeactivateError::UserNotInTeam => MembersUnsuspendError::UserNotInTeam,
21301            MembersDeactivateError::Other => MembersUnsuspendError::Other,
21302        }
21303    }
21304}
21305#[derive(Debug, Clone, PartialEq, Eq)]
21306#[non_exhaustive] // variants may be added in the future
21307pub enum MobileClientPlatform {
21308    /// Official Dropbox iPhone client.
21309    Iphone,
21310    /// Official Dropbox iPad client.
21311    Ipad,
21312    /// Official Dropbox Android client.
21313    Android,
21314    /// Official Dropbox Windows phone client.
21315    WindowsPhone,
21316    /// Official Dropbox Blackberry client.
21317    Blackberry,
21318    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21319    /// typically indicates that this SDK version is out of date.
21320    Other,
21321}
21322
21323impl<'de> ::serde::de::Deserialize<'de> for MobileClientPlatform {
21324    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21325        // union deserializer
21326        use serde::de::{self, MapAccess, Visitor};
21327        struct EnumVisitor;
21328        impl<'de> Visitor<'de> for EnumVisitor {
21329            type Value = MobileClientPlatform;
21330            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21331                f.write_str("a MobileClientPlatform structure")
21332            }
21333            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21334                let tag: &str = match map.next_key()? {
21335                    Some(".tag") => map.next_value()?,
21336                    _ => return Err(de::Error::missing_field(".tag"))
21337                };
21338                let value = match tag {
21339                    "iphone" => MobileClientPlatform::Iphone,
21340                    "ipad" => MobileClientPlatform::Ipad,
21341                    "android" => MobileClientPlatform::Android,
21342                    "windows_phone" => MobileClientPlatform::WindowsPhone,
21343                    "blackberry" => MobileClientPlatform::Blackberry,
21344                    _ => MobileClientPlatform::Other,
21345                };
21346                crate::eat_json_fields(&mut map)?;
21347                Ok(value)
21348            }
21349        }
21350        const VARIANTS: &[&str] = &["iphone",
21351                                    "ipad",
21352                                    "android",
21353                                    "windows_phone",
21354                                    "blackberry",
21355                                    "other"];
21356        deserializer.deserialize_struct("MobileClientPlatform", VARIANTS, EnumVisitor)
21357    }
21358}
21359
21360impl ::serde::ser::Serialize for MobileClientPlatform {
21361    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21362        // union serializer
21363        use serde::ser::SerializeStruct;
21364        match self {
21365            MobileClientPlatform::Iphone => {
21366                // unit
21367                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21368                s.serialize_field(".tag", "iphone")?;
21369                s.end()
21370            }
21371            MobileClientPlatform::Ipad => {
21372                // unit
21373                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21374                s.serialize_field(".tag", "ipad")?;
21375                s.end()
21376            }
21377            MobileClientPlatform::Android => {
21378                // unit
21379                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21380                s.serialize_field(".tag", "android")?;
21381                s.end()
21382            }
21383            MobileClientPlatform::WindowsPhone => {
21384                // unit
21385                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21386                s.serialize_field(".tag", "windows_phone")?;
21387                s.end()
21388            }
21389            MobileClientPlatform::Blackberry => {
21390                // unit
21391                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21392                s.serialize_field(".tag", "blackberry")?;
21393                s.end()
21394            }
21395            MobileClientPlatform::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21396        }
21397    }
21398}
21399
21400/// Information about linked Dropbox mobile client sessions.
21401#[derive(Debug, Clone, PartialEq, Eq)]
21402#[non_exhaustive] // structs may have more fields added in the future.
21403pub struct MobileClientSession {
21404    /// The session id.
21405    pub session_id: String,
21406    /// The device name.
21407    pub device_name: String,
21408    /// The mobile application type.
21409    pub client_type: MobileClientPlatform,
21410    /// The IP address of the last activity from this session.
21411    pub ip_address: Option<String>,
21412    /// The country from which the last activity from this session was made.
21413    pub country: Option<String>,
21414    /// The time this session was created.
21415    pub created: Option<crate::types::common::DropboxTimestamp>,
21416    /// The time of the last activity from this session.
21417    pub updated: Option<crate::types::common::DropboxTimestamp>,
21418    /// The dropbox client version.
21419    pub client_version: Option<String>,
21420    /// The hosting OS version.
21421    pub os_version: Option<String>,
21422    /// last carrier used by the device.
21423    pub last_carrier: Option<String>,
21424}
21425
21426impl MobileClientSession {
21427    pub fn new(
21428        session_id: String,
21429        device_name: String,
21430        client_type: MobileClientPlatform,
21431    ) -> Self {
21432        MobileClientSession {
21433            session_id,
21434            device_name,
21435            client_type,
21436            ip_address: None,
21437            country: None,
21438            created: None,
21439            updated: None,
21440            client_version: None,
21441            os_version: None,
21442            last_carrier: None,
21443        }
21444    }
21445
21446    pub fn with_ip_address(mut self, value: String) -> Self {
21447        self.ip_address = Some(value);
21448        self
21449    }
21450
21451    pub fn with_country(mut self, value: String) -> Self {
21452        self.country = Some(value);
21453        self
21454    }
21455
21456    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
21457        self.created = Some(value);
21458        self
21459    }
21460
21461    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
21462        self.updated = Some(value);
21463        self
21464    }
21465
21466    pub fn with_client_version(mut self, value: String) -> Self {
21467        self.client_version = Some(value);
21468        self
21469    }
21470
21471    pub fn with_os_version(mut self, value: String) -> Self {
21472        self.os_version = Some(value);
21473        self
21474    }
21475
21476    pub fn with_last_carrier(mut self, value: String) -> Self {
21477        self.last_carrier = Some(value);
21478        self
21479    }
21480}
21481
21482const MOBILE_CLIENT_SESSION_FIELDS: &[&str] = &["session_id",
21483                                                "device_name",
21484                                                "client_type",
21485                                                "ip_address",
21486                                                "country",
21487                                                "created",
21488                                                "updated",
21489                                                "client_version",
21490                                                "os_version",
21491                                                "last_carrier"];
21492impl MobileClientSession {
21493    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21494        map: V,
21495    ) -> Result<MobileClientSession, V::Error> {
21496        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21497    }
21498
21499    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21500        mut map: V,
21501        optional: bool,
21502    ) -> Result<Option<MobileClientSession>, V::Error> {
21503        let mut field_session_id = None;
21504        let mut field_device_name = None;
21505        let mut field_client_type = None;
21506        let mut field_ip_address = None;
21507        let mut field_country = None;
21508        let mut field_created = None;
21509        let mut field_updated = None;
21510        let mut field_client_version = None;
21511        let mut field_os_version = None;
21512        let mut field_last_carrier = None;
21513        let mut nothing = true;
21514        while let Some(key) = map.next_key::<&str>()? {
21515            nothing = false;
21516            match key {
21517                "session_id" => {
21518                    if field_session_id.is_some() {
21519                        return Err(::serde::de::Error::duplicate_field("session_id"));
21520                    }
21521                    field_session_id = Some(map.next_value()?);
21522                }
21523                "device_name" => {
21524                    if field_device_name.is_some() {
21525                        return Err(::serde::de::Error::duplicate_field("device_name"));
21526                    }
21527                    field_device_name = Some(map.next_value()?);
21528                }
21529                "client_type" => {
21530                    if field_client_type.is_some() {
21531                        return Err(::serde::de::Error::duplicate_field("client_type"));
21532                    }
21533                    field_client_type = Some(map.next_value()?);
21534                }
21535                "ip_address" => {
21536                    if field_ip_address.is_some() {
21537                        return Err(::serde::de::Error::duplicate_field("ip_address"));
21538                    }
21539                    field_ip_address = Some(map.next_value()?);
21540                }
21541                "country" => {
21542                    if field_country.is_some() {
21543                        return Err(::serde::de::Error::duplicate_field("country"));
21544                    }
21545                    field_country = Some(map.next_value()?);
21546                }
21547                "created" => {
21548                    if field_created.is_some() {
21549                        return Err(::serde::de::Error::duplicate_field("created"));
21550                    }
21551                    field_created = Some(map.next_value()?);
21552                }
21553                "updated" => {
21554                    if field_updated.is_some() {
21555                        return Err(::serde::de::Error::duplicate_field("updated"));
21556                    }
21557                    field_updated = Some(map.next_value()?);
21558                }
21559                "client_version" => {
21560                    if field_client_version.is_some() {
21561                        return Err(::serde::de::Error::duplicate_field("client_version"));
21562                    }
21563                    field_client_version = Some(map.next_value()?);
21564                }
21565                "os_version" => {
21566                    if field_os_version.is_some() {
21567                        return Err(::serde::de::Error::duplicate_field("os_version"));
21568                    }
21569                    field_os_version = Some(map.next_value()?);
21570                }
21571                "last_carrier" => {
21572                    if field_last_carrier.is_some() {
21573                        return Err(::serde::de::Error::duplicate_field("last_carrier"));
21574                    }
21575                    field_last_carrier = Some(map.next_value()?);
21576                }
21577                _ => {
21578                    // unknown field allowed and ignored
21579                    map.next_value::<::serde_json::Value>()?;
21580                }
21581            }
21582        }
21583        if optional && nothing {
21584            return Ok(None);
21585        }
21586        let result = MobileClientSession {
21587            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
21588            device_name: field_device_name.ok_or_else(|| ::serde::de::Error::missing_field("device_name"))?,
21589            client_type: field_client_type.ok_or_else(|| ::serde::de::Error::missing_field("client_type"))?,
21590            ip_address: field_ip_address.and_then(Option::flatten),
21591            country: field_country.and_then(Option::flatten),
21592            created: field_created.and_then(Option::flatten),
21593            updated: field_updated.and_then(Option::flatten),
21594            client_version: field_client_version.and_then(Option::flatten),
21595            os_version: field_os_version.and_then(Option::flatten),
21596            last_carrier: field_last_carrier.and_then(Option::flatten),
21597        };
21598        Ok(Some(result))
21599    }
21600
21601    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21602        &self,
21603        s: &mut S::SerializeStruct,
21604    ) -> Result<(), S::Error> {
21605        use serde::ser::SerializeStruct;
21606        s.serialize_field("session_id", &self.session_id)?;
21607        s.serialize_field("device_name", &self.device_name)?;
21608        s.serialize_field("client_type", &self.client_type)?;
21609        if let Some(val) = &self.ip_address {
21610            s.serialize_field("ip_address", val)?;
21611        }
21612        if let Some(val) = &self.country {
21613            s.serialize_field("country", val)?;
21614        }
21615        if let Some(val) = &self.created {
21616            s.serialize_field("created", val)?;
21617        }
21618        if let Some(val) = &self.updated {
21619            s.serialize_field("updated", val)?;
21620        }
21621        if let Some(val) = &self.client_version {
21622            s.serialize_field("client_version", val)?;
21623        }
21624        if let Some(val) = &self.os_version {
21625            s.serialize_field("os_version", val)?;
21626        }
21627        if let Some(val) = &self.last_carrier {
21628            s.serialize_field("last_carrier", val)?;
21629        }
21630        Ok(())
21631    }
21632}
21633
21634impl<'de> ::serde::de::Deserialize<'de> for MobileClientSession {
21635    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21636        // struct deserializer
21637        use serde::de::{MapAccess, Visitor};
21638        struct StructVisitor;
21639        impl<'de> Visitor<'de> for StructVisitor {
21640            type Value = MobileClientSession;
21641            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21642                f.write_str("a MobileClientSession struct")
21643            }
21644            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21645                MobileClientSession::internal_deserialize(map)
21646            }
21647        }
21648        deserializer.deserialize_struct("MobileClientSession", MOBILE_CLIENT_SESSION_FIELDS, StructVisitor)
21649    }
21650}
21651
21652impl ::serde::ser::Serialize for MobileClientSession {
21653    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21654        // struct serializer
21655        use serde::ser::SerializeStruct;
21656        let mut s = serializer.serialize_struct("MobileClientSession", 10)?;
21657        self.internal_serialize::<S>(&mut s)?;
21658        s.end()
21659    }
21660}
21661
21662// struct extends DeviceSession
21663impl From<MobileClientSession> for DeviceSession {
21664    fn from(subtype: MobileClientSession) -> Self {
21665        Self {
21666            session_id: subtype.session_id,
21667            ip_address: subtype.ip_address,
21668            country: subtype.country,
21669            created: subtype.created,
21670            updated: subtype.updated,
21671        }
21672    }
21673}
21674/// Properties of a namespace.
21675#[derive(Debug, Clone, PartialEq, Eq)]
21676#[non_exhaustive] // structs may have more fields added in the future.
21677pub struct NamespaceMetadata {
21678    /// The name of this namespace.
21679    pub name: String,
21680    /// The ID of this namespace.
21681    pub namespace_id: crate::types::common::SharedFolderId,
21682    /// The type of this namespace.
21683    pub namespace_type: NamespaceType,
21684    /// If this is a team member or app folder, the ID of the owning team member. Otherwise, this
21685    /// field is not present.
21686    pub team_member_id: Option<crate::types::team_common::TeamMemberId>,
21687    /// The quota limit in bytes for this namespace tree. Only applicable to team folders.
21688    pub quota_limit: i64,
21689}
21690
21691impl NamespaceMetadata {
21692    pub fn new(
21693        name: String,
21694        namespace_id: crate::types::common::SharedFolderId,
21695        namespace_type: NamespaceType,
21696    ) -> Self {
21697        NamespaceMetadata {
21698            name,
21699            namespace_id,
21700            namespace_type,
21701            team_member_id: None,
21702            quota_limit: 0,
21703        }
21704    }
21705
21706    pub fn with_team_member_id(mut self, value: crate::types::team_common::TeamMemberId) -> Self {
21707        self.team_member_id = Some(value);
21708        self
21709    }
21710
21711    pub fn with_quota_limit(mut self, value: i64) -> Self {
21712        self.quota_limit = value;
21713        self
21714    }
21715}
21716
21717const NAMESPACE_METADATA_FIELDS: &[&str] = &["name",
21718                                             "namespace_id",
21719                                             "namespace_type",
21720                                             "team_member_id",
21721                                             "quota_limit"];
21722impl NamespaceMetadata {
21723    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21724        map: V,
21725    ) -> Result<NamespaceMetadata, V::Error> {
21726        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21727    }
21728
21729    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21730        mut map: V,
21731        optional: bool,
21732    ) -> Result<Option<NamespaceMetadata>, V::Error> {
21733        let mut field_name = None;
21734        let mut field_namespace_id = None;
21735        let mut field_namespace_type = None;
21736        let mut field_team_member_id = None;
21737        let mut field_quota_limit = None;
21738        let mut nothing = true;
21739        while let Some(key) = map.next_key::<&str>()? {
21740            nothing = false;
21741            match key {
21742                "name" => {
21743                    if field_name.is_some() {
21744                        return Err(::serde::de::Error::duplicate_field("name"));
21745                    }
21746                    field_name = Some(map.next_value()?);
21747                }
21748                "namespace_id" => {
21749                    if field_namespace_id.is_some() {
21750                        return Err(::serde::de::Error::duplicate_field("namespace_id"));
21751                    }
21752                    field_namespace_id = Some(map.next_value()?);
21753                }
21754                "namespace_type" => {
21755                    if field_namespace_type.is_some() {
21756                        return Err(::serde::de::Error::duplicate_field("namespace_type"));
21757                    }
21758                    field_namespace_type = Some(map.next_value()?);
21759                }
21760                "team_member_id" => {
21761                    if field_team_member_id.is_some() {
21762                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
21763                    }
21764                    field_team_member_id = Some(map.next_value()?);
21765                }
21766                "quota_limit" => {
21767                    if field_quota_limit.is_some() {
21768                        return Err(::serde::de::Error::duplicate_field("quota_limit"));
21769                    }
21770                    field_quota_limit = Some(map.next_value()?);
21771                }
21772                _ => {
21773                    // unknown field allowed and ignored
21774                    map.next_value::<::serde_json::Value>()?;
21775                }
21776            }
21777        }
21778        if optional && nothing {
21779            return Ok(None);
21780        }
21781        let result = NamespaceMetadata {
21782            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
21783            namespace_id: field_namespace_id.ok_or_else(|| ::serde::de::Error::missing_field("namespace_id"))?,
21784            namespace_type: field_namespace_type.ok_or_else(|| ::serde::de::Error::missing_field("namespace_type"))?,
21785            team_member_id: field_team_member_id.and_then(Option::flatten),
21786            quota_limit: field_quota_limit.unwrap_or(0),
21787        };
21788        Ok(Some(result))
21789    }
21790
21791    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21792        &self,
21793        s: &mut S::SerializeStruct,
21794    ) -> Result<(), S::Error> {
21795        use serde::ser::SerializeStruct;
21796        s.serialize_field("name", &self.name)?;
21797        s.serialize_field("namespace_id", &self.namespace_id)?;
21798        s.serialize_field("namespace_type", &self.namespace_type)?;
21799        if let Some(val) = &self.team_member_id {
21800            s.serialize_field("team_member_id", val)?;
21801        }
21802        if self.quota_limit != 0 {
21803            s.serialize_field("quota_limit", &self.quota_limit)?;
21804        }
21805        Ok(())
21806    }
21807}
21808
21809impl<'de> ::serde::de::Deserialize<'de> for NamespaceMetadata {
21810    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21811        // struct deserializer
21812        use serde::de::{MapAccess, Visitor};
21813        struct StructVisitor;
21814        impl<'de> Visitor<'de> for StructVisitor {
21815            type Value = NamespaceMetadata;
21816            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21817                f.write_str("a NamespaceMetadata struct")
21818            }
21819            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21820                NamespaceMetadata::internal_deserialize(map)
21821            }
21822        }
21823        deserializer.deserialize_struct("NamespaceMetadata", NAMESPACE_METADATA_FIELDS, StructVisitor)
21824    }
21825}
21826
21827impl ::serde::ser::Serialize for NamespaceMetadata {
21828    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21829        // struct serializer
21830        use serde::ser::SerializeStruct;
21831        let mut s = serializer.serialize_struct("NamespaceMetadata", 5)?;
21832        self.internal_serialize::<S>(&mut s)?;
21833        s.end()
21834    }
21835}
21836
21837#[derive(Debug, Clone, PartialEq, Eq)]
21838#[non_exhaustive] // variants may be added in the future
21839pub enum NamespaceType {
21840    /// App sandbox folder.
21841    AppFolder,
21842    /// Shared folder.
21843    SharedFolder,
21844    /// Top-level team-owned folder.
21845    TeamFolder,
21846    /// Team member's home folder.
21847    TeamMemberFolder,
21848    /// Team member's root folder.
21849    TeamMemberRoot,
21850    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21851    /// typically indicates that this SDK version is out of date.
21852    Other,
21853}
21854
21855impl<'de> ::serde::de::Deserialize<'de> for NamespaceType {
21856    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21857        // union deserializer
21858        use serde::de::{self, MapAccess, Visitor};
21859        struct EnumVisitor;
21860        impl<'de> Visitor<'de> for EnumVisitor {
21861            type Value = NamespaceType;
21862            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21863                f.write_str("a NamespaceType structure")
21864            }
21865            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21866                let tag: &str = match map.next_key()? {
21867                    Some(".tag") => map.next_value()?,
21868                    _ => return Err(de::Error::missing_field(".tag"))
21869                };
21870                let value = match tag {
21871                    "app_folder" => NamespaceType::AppFolder,
21872                    "shared_folder" => NamespaceType::SharedFolder,
21873                    "team_folder" => NamespaceType::TeamFolder,
21874                    "team_member_folder" => NamespaceType::TeamMemberFolder,
21875                    "team_member_root" => NamespaceType::TeamMemberRoot,
21876                    _ => NamespaceType::Other,
21877                };
21878                crate::eat_json_fields(&mut map)?;
21879                Ok(value)
21880            }
21881        }
21882        const VARIANTS: &[&str] = &["app_folder",
21883                                    "shared_folder",
21884                                    "team_folder",
21885                                    "team_member_folder",
21886                                    "team_member_root",
21887                                    "other"];
21888        deserializer.deserialize_struct("NamespaceType", VARIANTS, EnumVisitor)
21889    }
21890}
21891
21892impl ::serde::ser::Serialize for NamespaceType {
21893    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21894        // union serializer
21895        use serde::ser::SerializeStruct;
21896        match self {
21897            NamespaceType::AppFolder => {
21898                // unit
21899                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21900                s.serialize_field(".tag", "app_folder")?;
21901                s.end()
21902            }
21903            NamespaceType::SharedFolder => {
21904                // unit
21905                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21906                s.serialize_field(".tag", "shared_folder")?;
21907                s.end()
21908            }
21909            NamespaceType::TeamFolder => {
21910                // unit
21911                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21912                s.serialize_field(".tag", "team_folder")?;
21913                s.end()
21914            }
21915            NamespaceType::TeamMemberFolder => {
21916                // unit
21917                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21918                s.serialize_field(".tag", "team_member_folder")?;
21919                s.end()
21920            }
21921            NamespaceType::TeamMemberRoot => {
21922                // unit
21923                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21924                s.serialize_field(".tag", "team_member_root")?;
21925                s.end()
21926            }
21927            NamespaceType::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21928        }
21929    }
21930}
21931
21932/// User result for setting member custom quota.
21933#[derive(Debug, Clone, PartialEq, Eq)]
21934#[non_exhaustive] // variants may be added in the future
21935pub enum RemoveCustomQuotaResult {
21936    /// Successfully removed user.
21937    Success(UserSelectorArg),
21938    /// Invalid user (not in team).
21939    InvalidUser(UserSelectorArg),
21940    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21941    /// typically indicates that this SDK version is out of date.
21942    Other,
21943}
21944
21945impl<'de> ::serde::de::Deserialize<'de> for RemoveCustomQuotaResult {
21946    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21947        // union deserializer
21948        use serde::de::{self, MapAccess, Visitor};
21949        struct EnumVisitor;
21950        impl<'de> Visitor<'de> for EnumVisitor {
21951            type Value = RemoveCustomQuotaResult;
21952            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21953                f.write_str("a RemoveCustomQuotaResult structure")
21954            }
21955            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21956                let tag: &str = match map.next_key()? {
21957                    Some(".tag") => map.next_value()?,
21958                    _ => return Err(de::Error::missing_field(".tag"))
21959                };
21960                let value = match tag {
21961                    "success" => {
21962                        match map.next_key()? {
21963                            Some("success") => RemoveCustomQuotaResult::Success(map.next_value()?),
21964                            None => return Err(de::Error::missing_field("success")),
21965                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21966                        }
21967                    }
21968                    "invalid_user" => {
21969                        match map.next_key()? {
21970                            Some("invalid_user") => RemoveCustomQuotaResult::InvalidUser(map.next_value()?),
21971                            None => return Err(de::Error::missing_field("invalid_user")),
21972                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21973                        }
21974                    }
21975                    _ => RemoveCustomQuotaResult::Other,
21976                };
21977                crate::eat_json_fields(&mut map)?;
21978                Ok(value)
21979            }
21980        }
21981        const VARIANTS: &[&str] = &["success",
21982                                    "invalid_user",
21983                                    "other"];
21984        deserializer.deserialize_struct("RemoveCustomQuotaResult", VARIANTS, EnumVisitor)
21985    }
21986}
21987
21988impl ::serde::ser::Serialize for RemoveCustomQuotaResult {
21989    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21990        // union serializer
21991        use serde::ser::SerializeStruct;
21992        match self {
21993            RemoveCustomQuotaResult::Success(x) => {
21994                // union or polymporphic struct
21995                let mut s = serializer.serialize_struct("RemoveCustomQuotaResult", 2)?;
21996                s.serialize_field(".tag", "success")?;
21997                s.serialize_field("success", x)?;
21998                s.end()
21999            }
22000            RemoveCustomQuotaResult::InvalidUser(x) => {
22001                // union or polymporphic struct
22002                let mut s = serializer.serialize_struct("RemoveCustomQuotaResult", 2)?;
22003                s.serialize_field(".tag", "invalid_user")?;
22004                s.serialize_field("invalid_user", x)?;
22005                s.end()
22006            }
22007            RemoveCustomQuotaResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22008        }
22009    }
22010}
22011
22012#[derive(Debug, Clone, PartialEq, Eq)]
22013#[non_exhaustive] // structs may have more fields added in the future.
22014pub struct RemovedStatus {
22015    /// True if the removed team member is recoverable.
22016    pub is_recoverable: bool,
22017    /// True if the team member's account was converted to individual account.
22018    pub is_disconnected: bool,
22019}
22020
22021impl RemovedStatus {
22022    pub fn new(is_recoverable: bool, is_disconnected: bool) -> Self {
22023        RemovedStatus {
22024            is_recoverable,
22025            is_disconnected,
22026        }
22027    }
22028}
22029
22030const REMOVED_STATUS_FIELDS: &[&str] = &["is_recoverable",
22031                                         "is_disconnected"];
22032impl RemovedStatus {
22033    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22034        map: V,
22035    ) -> Result<RemovedStatus, V::Error> {
22036        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22037    }
22038
22039    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22040        mut map: V,
22041        optional: bool,
22042    ) -> Result<Option<RemovedStatus>, V::Error> {
22043        let mut field_is_recoverable = None;
22044        let mut field_is_disconnected = None;
22045        let mut nothing = true;
22046        while let Some(key) = map.next_key::<&str>()? {
22047            nothing = false;
22048            match key {
22049                "is_recoverable" => {
22050                    if field_is_recoverable.is_some() {
22051                        return Err(::serde::de::Error::duplicate_field("is_recoverable"));
22052                    }
22053                    field_is_recoverable = Some(map.next_value()?);
22054                }
22055                "is_disconnected" => {
22056                    if field_is_disconnected.is_some() {
22057                        return Err(::serde::de::Error::duplicate_field("is_disconnected"));
22058                    }
22059                    field_is_disconnected = Some(map.next_value()?);
22060                }
22061                _ => {
22062                    // unknown field allowed and ignored
22063                    map.next_value::<::serde_json::Value>()?;
22064                }
22065            }
22066        }
22067        if optional && nothing {
22068            return Ok(None);
22069        }
22070        let result = RemovedStatus {
22071            is_recoverable: field_is_recoverable.ok_or_else(|| ::serde::de::Error::missing_field("is_recoverable"))?,
22072            is_disconnected: field_is_disconnected.ok_or_else(|| ::serde::de::Error::missing_field("is_disconnected"))?,
22073        };
22074        Ok(Some(result))
22075    }
22076
22077    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22078        &self,
22079        s: &mut S::SerializeStruct,
22080    ) -> Result<(), S::Error> {
22081        use serde::ser::SerializeStruct;
22082        s.serialize_field("is_recoverable", &self.is_recoverable)?;
22083        s.serialize_field("is_disconnected", &self.is_disconnected)?;
22084        Ok(())
22085    }
22086}
22087
22088impl<'de> ::serde::de::Deserialize<'de> for RemovedStatus {
22089    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22090        // struct deserializer
22091        use serde::de::{MapAccess, Visitor};
22092        struct StructVisitor;
22093        impl<'de> Visitor<'de> for StructVisitor {
22094            type Value = RemovedStatus;
22095            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22096                f.write_str("a RemovedStatus struct")
22097            }
22098            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22099                RemovedStatus::internal_deserialize(map)
22100            }
22101        }
22102        deserializer.deserialize_struct("RemovedStatus", REMOVED_STATUS_FIELDS, StructVisitor)
22103    }
22104}
22105
22106impl ::serde::ser::Serialize for RemovedStatus {
22107    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22108        // struct serializer
22109        use serde::ser::SerializeStruct;
22110        let mut s = serializer.serialize_struct("RemovedStatus", 2)?;
22111        self.internal_serialize::<S>(&mut s)?;
22112        s.end()
22113    }
22114}
22115
22116/// Result of trying to resend verification email to a secondary email address. 'success' is the
22117/// only value indicating that a verification email was successfully sent. The other values explain
22118/// the type of error that occurred, and include the email for which the error occurred.
22119#[derive(Debug, Clone, PartialEq, Eq)]
22120#[non_exhaustive] // variants may be added in the future
22121pub enum ResendSecondaryEmailResult {
22122    /// A verification email was successfully sent to the secondary email address.
22123    Success(crate::types::common::EmailAddress),
22124    /// This secondary email address is not pending for the user.
22125    NotPending(crate::types::common::EmailAddress),
22126    /// Too many emails are being sent to this email address. Please try again later.
22127    RateLimited(crate::types::common::EmailAddress),
22128    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22129    /// typically indicates that this SDK version is out of date.
22130    Other,
22131}
22132
22133impl<'de> ::serde::de::Deserialize<'de> for ResendSecondaryEmailResult {
22134    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22135        // union deserializer
22136        use serde::de::{self, MapAccess, Visitor};
22137        struct EnumVisitor;
22138        impl<'de> Visitor<'de> for EnumVisitor {
22139            type Value = ResendSecondaryEmailResult;
22140            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22141                f.write_str("a ResendSecondaryEmailResult structure")
22142            }
22143            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22144                let tag: &str = match map.next_key()? {
22145                    Some(".tag") => map.next_value()?,
22146                    _ => return Err(de::Error::missing_field(".tag"))
22147                };
22148                let value = match tag {
22149                    "success" => {
22150                        match map.next_key()? {
22151                            Some("success") => ResendSecondaryEmailResult::Success(map.next_value()?),
22152                            None => return Err(de::Error::missing_field("success")),
22153                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
22154                        }
22155                    }
22156                    "not_pending" => {
22157                        match map.next_key()? {
22158                            Some("not_pending") => ResendSecondaryEmailResult::NotPending(map.next_value()?),
22159                            None => return Err(de::Error::missing_field("not_pending")),
22160                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
22161                        }
22162                    }
22163                    "rate_limited" => {
22164                        match map.next_key()? {
22165                            Some("rate_limited") => ResendSecondaryEmailResult::RateLimited(map.next_value()?),
22166                            None => return Err(de::Error::missing_field("rate_limited")),
22167                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
22168                        }
22169                    }
22170                    _ => ResendSecondaryEmailResult::Other,
22171                };
22172                crate::eat_json_fields(&mut map)?;
22173                Ok(value)
22174            }
22175        }
22176        const VARIANTS: &[&str] = &["success",
22177                                    "not_pending",
22178                                    "rate_limited",
22179                                    "other"];
22180        deserializer.deserialize_struct("ResendSecondaryEmailResult", VARIANTS, EnumVisitor)
22181    }
22182}
22183
22184impl ::serde::ser::Serialize for ResendSecondaryEmailResult {
22185    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22186        // union serializer
22187        use serde::ser::SerializeStruct;
22188        match self {
22189            ResendSecondaryEmailResult::Success(x) => {
22190                // primitive
22191                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
22192                s.serialize_field(".tag", "success")?;
22193                s.serialize_field("success", x)?;
22194                s.end()
22195            }
22196            ResendSecondaryEmailResult::NotPending(x) => {
22197                // primitive
22198                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
22199                s.serialize_field(".tag", "not_pending")?;
22200                s.serialize_field("not_pending", x)?;
22201                s.end()
22202            }
22203            ResendSecondaryEmailResult::RateLimited(x) => {
22204                // primitive
22205                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
22206                s.serialize_field(".tag", "rate_limited")?;
22207                s.serialize_field("rate_limited", x)?;
22208                s.end()
22209            }
22210            ResendSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22211        }
22212    }
22213}
22214
22215#[derive(Debug, Clone, PartialEq, Eq)]
22216#[non_exhaustive] // structs may have more fields added in the future.
22217pub struct ResendVerificationEmailArg {
22218    /// List of users and secondary emails to resend verification emails to.
22219    pub emails_to_resend: Vec<UserSecondaryEmailsArg>,
22220}
22221
22222impl ResendVerificationEmailArg {
22223    pub fn new(emails_to_resend: Vec<UserSecondaryEmailsArg>) -> Self {
22224        ResendVerificationEmailArg {
22225            emails_to_resend,
22226        }
22227    }
22228}
22229
22230const RESEND_VERIFICATION_EMAIL_ARG_FIELDS: &[&str] = &["emails_to_resend"];
22231impl ResendVerificationEmailArg {
22232    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22233        map: V,
22234    ) -> Result<ResendVerificationEmailArg, V::Error> {
22235        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22236    }
22237
22238    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22239        mut map: V,
22240        optional: bool,
22241    ) -> Result<Option<ResendVerificationEmailArg>, V::Error> {
22242        let mut field_emails_to_resend = None;
22243        let mut nothing = true;
22244        while let Some(key) = map.next_key::<&str>()? {
22245            nothing = false;
22246            match key {
22247                "emails_to_resend" => {
22248                    if field_emails_to_resend.is_some() {
22249                        return Err(::serde::de::Error::duplicate_field("emails_to_resend"));
22250                    }
22251                    field_emails_to_resend = Some(map.next_value()?);
22252                }
22253                _ => {
22254                    // unknown field allowed and ignored
22255                    map.next_value::<::serde_json::Value>()?;
22256                }
22257            }
22258        }
22259        if optional && nothing {
22260            return Ok(None);
22261        }
22262        let result = ResendVerificationEmailArg {
22263            emails_to_resend: field_emails_to_resend.ok_or_else(|| ::serde::de::Error::missing_field("emails_to_resend"))?,
22264        };
22265        Ok(Some(result))
22266    }
22267
22268    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22269        &self,
22270        s: &mut S::SerializeStruct,
22271    ) -> Result<(), S::Error> {
22272        use serde::ser::SerializeStruct;
22273        s.serialize_field("emails_to_resend", &self.emails_to_resend)?;
22274        Ok(())
22275    }
22276}
22277
22278impl<'de> ::serde::de::Deserialize<'de> for ResendVerificationEmailArg {
22279    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22280        // struct deserializer
22281        use serde::de::{MapAccess, Visitor};
22282        struct StructVisitor;
22283        impl<'de> Visitor<'de> for StructVisitor {
22284            type Value = ResendVerificationEmailArg;
22285            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22286                f.write_str("a ResendVerificationEmailArg struct")
22287            }
22288            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22289                ResendVerificationEmailArg::internal_deserialize(map)
22290            }
22291        }
22292        deserializer.deserialize_struct("ResendVerificationEmailArg", RESEND_VERIFICATION_EMAIL_ARG_FIELDS, StructVisitor)
22293    }
22294}
22295
22296impl ::serde::ser::Serialize for ResendVerificationEmailArg {
22297    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22298        // struct serializer
22299        use serde::ser::SerializeStruct;
22300        let mut s = serializer.serialize_struct("ResendVerificationEmailArg", 1)?;
22301        self.internal_serialize::<S>(&mut s)?;
22302        s.end()
22303    }
22304}
22305
22306/// List of users and resend results.
22307#[derive(Debug, Clone, PartialEq, Eq)]
22308#[non_exhaustive] // structs may have more fields added in the future.
22309pub struct ResendVerificationEmailResult {
22310    pub results: Vec<UserResendResult>,
22311}
22312
22313impl ResendVerificationEmailResult {
22314    pub fn new(results: Vec<UserResendResult>) -> Self {
22315        ResendVerificationEmailResult {
22316            results,
22317        }
22318    }
22319}
22320
22321const RESEND_VERIFICATION_EMAIL_RESULT_FIELDS: &[&str] = &["results"];
22322impl ResendVerificationEmailResult {
22323    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22324        map: V,
22325    ) -> Result<ResendVerificationEmailResult, V::Error> {
22326        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22327    }
22328
22329    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22330        mut map: V,
22331        optional: bool,
22332    ) -> Result<Option<ResendVerificationEmailResult>, V::Error> {
22333        let mut field_results = None;
22334        let mut nothing = true;
22335        while let Some(key) = map.next_key::<&str>()? {
22336            nothing = false;
22337            match key {
22338                "results" => {
22339                    if field_results.is_some() {
22340                        return Err(::serde::de::Error::duplicate_field("results"));
22341                    }
22342                    field_results = Some(map.next_value()?);
22343                }
22344                _ => {
22345                    // unknown field allowed and ignored
22346                    map.next_value::<::serde_json::Value>()?;
22347                }
22348            }
22349        }
22350        if optional && nothing {
22351            return Ok(None);
22352        }
22353        let result = ResendVerificationEmailResult {
22354            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
22355        };
22356        Ok(Some(result))
22357    }
22358
22359    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22360        &self,
22361        s: &mut S::SerializeStruct,
22362    ) -> Result<(), S::Error> {
22363        use serde::ser::SerializeStruct;
22364        s.serialize_field("results", &self.results)?;
22365        Ok(())
22366    }
22367}
22368
22369impl<'de> ::serde::de::Deserialize<'de> for ResendVerificationEmailResult {
22370    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22371        // struct deserializer
22372        use serde::de::{MapAccess, Visitor};
22373        struct StructVisitor;
22374        impl<'de> Visitor<'de> for StructVisitor {
22375            type Value = ResendVerificationEmailResult;
22376            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22377                f.write_str("a ResendVerificationEmailResult struct")
22378            }
22379            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22380                ResendVerificationEmailResult::internal_deserialize(map)
22381            }
22382        }
22383        deserializer.deserialize_struct("ResendVerificationEmailResult", RESEND_VERIFICATION_EMAIL_RESULT_FIELDS, StructVisitor)
22384    }
22385}
22386
22387impl ::serde::ser::Serialize for ResendVerificationEmailResult {
22388    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22389        // struct serializer
22390        use serde::ser::SerializeStruct;
22391        let mut s = serializer.serialize_struct("ResendVerificationEmailResult", 1)?;
22392        self.internal_serialize::<S>(&mut s)?;
22393        s.end()
22394    }
22395}
22396
22397#[derive(Debug, Clone, PartialEq, Eq)]
22398#[non_exhaustive] // structs may have more fields added in the future.
22399pub struct RevokeDesktopClientArg {
22400    /// The session id.
22401    pub session_id: String,
22402    /// The unique id of the member owning the device.
22403    pub team_member_id: String,
22404    /// Whether to delete all files of the account (this is possible only if supported by the
22405    /// desktop client and  will be made the next time the client access the account).
22406    pub delete_on_unlink: bool,
22407}
22408
22409impl RevokeDesktopClientArg {
22410    pub fn new(session_id: String, team_member_id: String) -> Self {
22411        RevokeDesktopClientArg {
22412            session_id,
22413            team_member_id,
22414            delete_on_unlink: false,
22415        }
22416    }
22417
22418    pub fn with_delete_on_unlink(mut self, value: bool) -> Self {
22419        self.delete_on_unlink = value;
22420        self
22421    }
22422}
22423
22424const REVOKE_DESKTOP_CLIENT_ARG_FIELDS: &[&str] = &["session_id",
22425                                                    "team_member_id",
22426                                                    "delete_on_unlink"];
22427impl RevokeDesktopClientArg {
22428    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22429        map: V,
22430    ) -> Result<RevokeDesktopClientArg, V::Error> {
22431        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22432    }
22433
22434    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22435        mut map: V,
22436        optional: bool,
22437    ) -> Result<Option<RevokeDesktopClientArg>, V::Error> {
22438        let mut field_session_id = None;
22439        let mut field_team_member_id = None;
22440        let mut field_delete_on_unlink = None;
22441        let mut nothing = true;
22442        while let Some(key) = map.next_key::<&str>()? {
22443            nothing = false;
22444            match key {
22445                "session_id" => {
22446                    if field_session_id.is_some() {
22447                        return Err(::serde::de::Error::duplicate_field("session_id"));
22448                    }
22449                    field_session_id = Some(map.next_value()?);
22450                }
22451                "team_member_id" => {
22452                    if field_team_member_id.is_some() {
22453                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
22454                    }
22455                    field_team_member_id = Some(map.next_value()?);
22456                }
22457                "delete_on_unlink" => {
22458                    if field_delete_on_unlink.is_some() {
22459                        return Err(::serde::de::Error::duplicate_field("delete_on_unlink"));
22460                    }
22461                    field_delete_on_unlink = Some(map.next_value()?);
22462                }
22463                _ => {
22464                    // unknown field allowed and ignored
22465                    map.next_value::<::serde_json::Value>()?;
22466                }
22467            }
22468        }
22469        if optional && nothing {
22470            return Ok(None);
22471        }
22472        let result = RevokeDesktopClientArg {
22473            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
22474            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
22475            delete_on_unlink: field_delete_on_unlink.unwrap_or(false),
22476        };
22477        Ok(Some(result))
22478    }
22479
22480    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22481        &self,
22482        s: &mut S::SerializeStruct,
22483    ) -> Result<(), S::Error> {
22484        use serde::ser::SerializeStruct;
22485        s.serialize_field("session_id", &self.session_id)?;
22486        s.serialize_field("team_member_id", &self.team_member_id)?;
22487        if self.delete_on_unlink {
22488            s.serialize_field("delete_on_unlink", &self.delete_on_unlink)?;
22489        }
22490        Ok(())
22491    }
22492}
22493
22494impl<'de> ::serde::de::Deserialize<'de> for RevokeDesktopClientArg {
22495    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22496        // struct deserializer
22497        use serde::de::{MapAccess, Visitor};
22498        struct StructVisitor;
22499        impl<'de> Visitor<'de> for StructVisitor {
22500            type Value = RevokeDesktopClientArg;
22501            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22502                f.write_str("a RevokeDesktopClientArg struct")
22503            }
22504            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22505                RevokeDesktopClientArg::internal_deserialize(map)
22506            }
22507        }
22508        deserializer.deserialize_struct("RevokeDesktopClientArg", REVOKE_DESKTOP_CLIENT_ARG_FIELDS, StructVisitor)
22509    }
22510}
22511
22512impl ::serde::ser::Serialize for RevokeDesktopClientArg {
22513    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22514        // struct serializer
22515        use serde::ser::SerializeStruct;
22516        let mut s = serializer.serialize_struct("RevokeDesktopClientArg", 3)?;
22517        self.internal_serialize::<S>(&mut s)?;
22518        s.end()
22519    }
22520}
22521
22522// struct extends DeviceSessionArg
22523impl From<RevokeDesktopClientArg> for DeviceSessionArg {
22524    fn from(subtype: RevokeDesktopClientArg) -> Self {
22525        Self {
22526            session_id: subtype.session_id,
22527            team_member_id: subtype.team_member_id,
22528        }
22529    }
22530}
22531#[derive(Debug, Clone, PartialEq, Eq)]
22532pub enum RevokeDeviceSessionArg {
22533    /// End an active session.
22534    WebSession(DeviceSessionArg),
22535    /// Unlink a linked desktop device.
22536    DesktopClient(RevokeDesktopClientArg),
22537    /// Unlink a linked mobile device.
22538    MobileClient(DeviceSessionArg),
22539}
22540
22541impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionArg {
22542    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22543        // union deserializer
22544        use serde::de::{self, MapAccess, Visitor};
22545        struct EnumVisitor;
22546        impl<'de> Visitor<'de> for EnumVisitor {
22547            type Value = RevokeDeviceSessionArg;
22548            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22549                f.write_str("a RevokeDeviceSessionArg structure")
22550            }
22551            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22552                let tag: &str = match map.next_key()? {
22553                    Some(".tag") => map.next_value()?,
22554                    _ => return Err(de::Error::missing_field(".tag"))
22555                };
22556                let value = match tag {
22557                    "web_session" => RevokeDeviceSessionArg::WebSession(DeviceSessionArg::internal_deserialize(&mut map)?),
22558                    "desktop_client" => RevokeDeviceSessionArg::DesktopClient(RevokeDesktopClientArg::internal_deserialize(&mut map)?),
22559                    "mobile_client" => RevokeDeviceSessionArg::MobileClient(DeviceSessionArg::internal_deserialize(&mut map)?),
22560                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
22561                };
22562                crate::eat_json_fields(&mut map)?;
22563                Ok(value)
22564            }
22565        }
22566        const VARIANTS: &[&str] = &["web_session",
22567                                    "desktop_client",
22568                                    "mobile_client"];
22569        deserializer.deserialize_struct("RevokeDeviceSessionArg", VARIANTS, EnumVisitor)
22570    }
22571}
22572
22573impl ::serde::ser::Serialize for RevokeDeviceSessionArg {
22574    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22575        // union serializer
22576        use serde::ser::SerializeStruct;
22577        match self {
22578            RevokeDeviceSessionArg::WebSession(x) => {
22579                // struct
22580                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 3)?;
22581                s.serialize_field(".tag", "web_session")?;
22582                x.internal_serialize::<S>(&mut s)?;
22583                s.end()
22584            }
22585            RevokeDeviceSessionArg::DesktopClient(x) => {
22586                // struct
22587                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 4)?;
22588                s.serialize_field(".tag", "desktop_client")?;
22589                x.internal_serialize::<S>(&mut s)?;
22590                s.end()
22591            }
22592            RevokeDeviceSessionArg::MobileClient(x) => {
22593                // struct
22594                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 3)?;
22595                s.serialize_field(".tag", "mobile_client")?;
22596                x.internal_serialize::<S>(&mut s)?;
22597                s.end()
22598            }
22599        }
22600    }
22601}
22602
22603#[derive(Debug, Clone, PartialEq, Eq)]
22604#[non_exhaustive] // structs may have more fields added in the future.
22605pub struct RevokeDeviceSessionBatchArg {
22606    pub revoke_devices: Vec<RevokeDeviceSessionArg>,
22607}
22608
22609impl RevokeDeviceSessionBatchArg {
22610    pub fn new(revoke_devices: Vec<RevokeDeviceSessionArg>) -> Self {
22611        RevokeDeviceSessionBatchArg {
22612            revoke_devices,
22613        }
22614    }
22615}
22616
22617const REVOKE_DEVICE_SESSION_BATCH_ARG_FIELDS: &[&str] = &["revoke_devices"];
22618impl RevokeDeviceSessionBatchArg {
22619    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22620        map: V,
22621    ) -> Result<RevokeDeviceSessionBatchArg, V::Error> {
22622        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22623    }
22624
22625    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22626        mut map: V,
22627        optional: bool,
22628    ) -> Result<Option<RevokeDeviceSessionBatchArg>, V::Error> {
22629        let mut field_revoke_devices = None;
22630        let mut nothing = true;
22631        while let Some(key) = map.next_key::<&str>()? {
22632            nothing = false;
22633            match key {
22634                "revoke_devices" => {
22635                    if field_revoke_devices.is_some() {
22636                        return Err(::serde::de::Error::duplicate_field("revoke_devices"));
22637                    }
22638                    field_revoke_devices = Some(map.next_value()?);
22639                }
22640                _ => {
22641                    // unknown field allowed and ignored
22642                    map.next_value::<::serde_json::Value>()?;
22643                }
22644            }
22645        }
22646        if optional && nothing {
22647            return Ok(None);
22648        }
22649        let result = RevokeDeviceSessionBatchArg {
22650            revoke_devices: field_revoke_devices.ok_or_else(|| ::serde::de::Error::missing_field("revoke_devices"))?,
22651        };
22652        Ok(Some(result))
22653    }
22654
22655    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22656        &self,
22657        s: &mut S::SerializeStruct,
22658    ) -> Result<(), S::Error> {
22659        use serde::ser::SerializeStruct;
22660        s.serialize_field("revoke_devices", &self.revoke_devices)?;
22661        Ok(())
22662    }
22663}
22664
22665impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchArg {
22666    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22667        // struct deserializer
22668        use serde::de::{MapAccess, Visitor};
22669        struct StructVisitor;
22670        impl<'de> Visitor<'de> for StructVisitor {
22671            type Value = RevokeDeviceSessionBatchArg;
22672            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22673                f.write_str("a RevokeDeviceSessionBatchArg struct")
22674            }
22675            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22676                RevokeDeviceSessionBatchArg::internal_deserialize(map)
22677            }
22678        }
22679        deserializer.deserialize_struct("RevokeDeviceSessionBatchArg", REVOKE_DEVICE_SESSION_BATCH_ARG_FIELDS, StructVisitor)
22680    }
22681}
22682
22683impl ::serde::ser::Serialize for RevokeDeviceSessionBatchArg {
22684    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22685        // struct serializer
22686        use serde::ser::SerializeStruct;
22687        let mut s = serializer.serialize_struct("RevokeDeviceSessionBatchArg", 1)?;
22688        self.internal_serialize::<S>(&mut s)?;
22689        s.end()
22690    }
22691}
22692
22693
22694#[derive(Debug, Clone, PartialEq, Eq)]
22695#[non_exhaustive] // variants may be added in the future
22696pub enum RevokeDeviceSessionBatchError {
22697    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22698    /// typically indicates that this SDK version is out of date.
22699    Other,
22700}
22701
22702impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchError {
22703    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22704        // union deserializer
22705        use serde::de::{self, MapAccess, Visitor};
22706        struct EnumVisitor;
22707        impl<'de> Visitor<'de> for EnumVisitor {
22708            type Value = RevokeDeviceSessionBatchError;
22709            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22710                f.write_str("a RevokeDeviceSessionBatchError structure")
22711            }
22712            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22713                let tag: &str = match map.next_key()? {
22714                    Some(".tag") => map.next_value()?,
22715                    _ => return Err(de::Error::missing_field(".tag"))
22716                };
22717                // open enum with no defined variants
22718                let _ = tag;
22719                crate::eat_json_fields(&mut map)?;
22720                Ok(RevokeDeviceSessionBatchError::Other)
22721            }
22722        }
22723        const VARIANTS: &[&str] = &["other"];
22724        deserializer.deserialize_struct("RevokeDeviceSessionBatchError", VARIANTS, EnumVisitor)
22725    }
22726}
22727
22728impl ::serde::ser::Serialize for RevokeDeviceSessionBatchError {
22729    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22730        // union serializer
22731        #![allow(unused_variables)]
22732        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
22733    }
22734}
22735
22736impl ::std::error::Error for RevokeDeviceSessionBatchError {
22737}
22738
22739impl ::std::fmt::Display for RevokeDeviceSessionBatchError {
22740    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22741        write!(f, "{:?}", *self)
22742    }
22743}
22744
22745#[derive(Debug, Clone, PartialEq, Eq)]
22746#[non_exhaustive] // structs may have more fields added in the future.
22747pub struct RevokeDeviceSessionBatchResult {
22748    pub revoke_devices_status: Vec<RevokeDeviceSessionStatus>,
22749}
22750
22751impl RevokeDeviceSessionBatchResult {
22752    pub fn new(revoke_devices_status: Vec<RevokeDeviceSessionStatus>) -> Self {
22753        RevokeDeviceSessionBatchResult {
22754            revoke_devices_status,
22755        }
22756    }
22757}
22758
22759const REVOKE_DEVICE_SESSION_BATCH_RESULT_FIELDS: &[&str] = &["revoke_devices_status"];
22760impl RevokeDeviceSessionBatchResult {
22761    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22762        map: V,
22763    ) -> Result<RevokeDeviceSessionBatchResult, V::Error> {
22764        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22765    }
22766
22767    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22768        mut map: V,
22769        optional: bool,
22770    ) -> Result<Option<RevokeDeviceSessionBatchResult>, V::Error> {
22771        let mut field_revoke_devices_status = None;
22772        let mut nothing = true;
22773        while let Some(key) = map.next_key::<&str>()? {
22774            nothing = false;
22775            match key {
22776                "revoke_devices_status" => {
22777                    if field_revoke_devices_status.is_some() {
22778                        return Err(::serde::de::Error::duplicate_field("revoke_devices_status"));
22779                    }
22780                    field_revoke_devices_status = Some(map.next_value()?);
22781                }
22782                _ => {
22783                    // unknown field allowed and ignored
22784                    map.next_value::<::serde_json::Value>()?;
22785                }
22786            }
22787        }
22788        if optional && nothing {
22789            return Ok(None);
22790        }
22791        let result = RevokeDeviceSessionBatchResult {
22792            revoke_devices_status: field_revoke_devices_status.ok_or_else(|| ::serde::de::Error::missing_field("revoke_devices_status"))?,
22793        };
22794        Ok(Some(result))
22795    }
22796
22797    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22798        &self,
22799        s: &mut S::SerializeStruct,
22800    ) -> Result<(), S::Error> {
22801        use serde::ser::SerializeStruct;
22802        s.serialize_field("revoke_devices_status", &self.revoke_devices_status)?;
22803        Ok(())
22804    }
22805}
22806
22807impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchResult {
22808    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22809        // struct deserializer
22810        use serde::de::{MapAccess, Visitor};
22811        struct StructVisitor;
22812        impl<'de> Visitor<'de> for StructVisitor {
22813            type Value = RevokeDeviceSessionBatchResult;
22814            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22815                f.write_str("a RevokeDeviceSessionBatchResult struct")
22816            }
22817            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22818                RevokeDeviceSessionBatchResult::internal_deserialize(map)
22819            }
22820        }
22821        deserializer.deserialize_struct("RevokeDeviceSessionBatchResult", REVOKE_DEVICE_SESSION_BATCH_RESULT_FIELDS, StructVisitor)
22822    }
22823}
22824
22825impl ::serde::ser::Serialize for RevokeDeviceSessionBatchResult {
22826    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22827        // struct serializer
22828        use serde::ser::SerializeStruct;
22829        let mut s = serializer.serialize_struct("RevokeDeviceSessionBatchResult", 1)?;
22830        self.internal_serialize::<S>(&mut s)?;
22831        s.end()
22832    }
22833}
22834
22835#[derive(Debug, Clone, PartialEq, Eq)]
22836#[non_exhaustive] // variants may be added in the future
22837pub enum RevokeDeviceSessionError {
22838    /// Device session not found.
22839    DeviceSessionNotFound,
22840    /// Member not found.
22841    MemberNotFound,
22842    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22843    /// typically indicates that this SDK version is out of date.
22844    Other,
22845}
22846
22847impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionError {
22848    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22849        // union deserializer
22850        use serde::de::{self, MapAccess, Visitor};
22851        struct EnumVisitor;
22852        impl<'de> Visitor<'de> for EnumVisitor {
22853            type Value = RevokeDeviceSessionError;
22854            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22855                f.write_str("a RevokeDeviceSessionError structure")
22856            }
22857            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22858                let tag: &str = match map.next_key()? {
22859                    Some(".tag") => map.next_value()?,
22860                    _ => return Err(de::Error::missing_field(".tag"))
22861                };
22862                let value = match tag {
22863                    "device_session_not_found" => RevokeDeviceSessionError::DeviceSessionNotFound,
22864                    "member_not_found" => RevokeDeviceSessionError::MemberNotFound,
22865                    _ => RevokeDeviceSessionError::Other,
22866                };
22867                crate::eat_json_fields(&mut map)?;
22868                Ok(value)
22869            }
22870        }
22871        const VARIANTS: &[&str] = &["device_session_not_found",
22872                                    "member_not_found",
22873                                    "other"];
22874        deserializer.deserialize_struct("RevokeDeviceSessionError", VARIANTS, EnumVisitor)
22875    }
22876}
22877
22878impl ::serde::ser::Serialize for RevokeDeviceSessionError {
22879    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22880        // union serializer
22881        use serde::ser::SerializeStruct;
22882        match self {
22883            RevokeDeviceSessionError::DeviceSessionNotFound => {
22884                // unit
22885                let mut s = serializer.serialize_struct("RevokeDeviceSessionError", 1)?;
22886                s.serialize_field(".tag", "device_session_not_found")?;
22887                s.end()
22888            }
22889            RevokeDeviceSessionError::MemberNotFound => {
22890                // unit
22891                let mut s = serializer.serialize_struct("RevokeDeviceSessionError", 1)?;
22892                s.serialize_field(".tag", "member_not_found")?;
22893                s.end()
22894            }
22895            RevokeDeviceSessionError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22896        }
22897    }
22898}
22899
22900impl ::std::error::Error for RevokeDeviceSessionError {
22901}
22902
22903impl ::std::fmt::Display for RevokeDeviceSessionError {
22904    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22905        match self {
22906            RevokeDeviceSessionError::DeviceSessionNotFound => f.write_str("Device session not found."),
22907            RevokeDeviceSessionError::MemberNotFound => f.write_str("Member not found."),
22908            _ => write!(f, "{:?}", *self),
22909        }
22910    }
22911}
22912
22913#[derive(Debug, Clone, PartialEq, Eq)]
22914#[non_exhaustive] // structs may have more fields added in the future.
22915pub struct RevokeDeviceSessionStatus {
22916    /// Result of the revoking request.
22917    pub success: bool,
22918    /// The error cause in case of a failure.
22919    pub error_type: Option<RevokeDeviceSessionError>,
22920}
22921
22922impl RevokeDeviceSessionStatus {
22923    pub fn new(success: bool) -> Self {
22924        RevokeDeviceSessionStatus {
22925            success,
22926            error_type: None,
22927        }
22928    }
22929
22930    pub fn with_error_type(mut self, value: RevokeDeviceSessionError) -> Self {
22931        self.error_type = Some(value);
22932        self
22933    }
22934}
22935
22936const REVOKE_DEVICE_SESSION_STATUS_FIELDS: &[&str] = &["success",
22937                                                       "error_type"];
22938impl RevokeDeviceSessionStatus {
22939    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22940        map: V,
22941    ) -> Result<RevokeDeviceSessionStatus, V::Error> {
22942        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22943    }
22944
22945    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22946        mut map: V,
22947        optional: bool,
22948    ) -> Result<Option<RevokeDeviceSessionStatus>, V::Error> {
22949        let mut field_success = None;
22950        let mut field_error_type = None;
22951        let mut nothing = true;
22952        while let Some(key) = map.next_key::<&str>()? {
22953            nothing = false;
22954            match key {
22955                "success" => {
22956                    if field_success.is_some() {
22957                        return Err(::serde::de::Error::duplicate_field("success"));
22958                    }
22959                    field_success = Some(map.next_value()?);
22960                }
22961                "error_type" => {
22962                    if field_error_type.is_some() {
22963                        return Err(::serde::de::Error::duplicate_field("error_type"));
22964                    }
22965                    field_error_type = Some(map.next_value()?);
22966                }
22967                _ => {
22968                    // unknown field allowed and ignored
22969                    map.next_value::<::serde_json::Value>()?;
22970                }
22971            }
22972        }
22973        if optional && nothing {
22974            return Ok(None);
22975        }
22976        let result = RevokeDeviceSessionStatus {
22977            success: field_success.ok_or_else(|| ::serde::de::Error::missing_field("success"))?,
22978            error_type: field_error_type.and_then(Option::flatten),
22979        };
22980        Ok(Some(result))
22981    }
22982
22983    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22984        &self,
22985        s: &mut S::SerializeStruct,
22986    ) -> Result<(), S::Error> {
22987        use serde::ser::SerializeStruct;
22988        s.serialize_field("success", &self.success)?;
22989        if let Some(val) = &self.error_type {
22990            s.serialize_field("error_type", val)?;
22991        }
22992        Ok(())
22993    }
22994}
22995
22996impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionStatus {
22997    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22998        // struct deserializer
22999        use serde::de::{MapAccess, Visitor};
23000        struct StructVisitor;
23001        impl<'de> Visitor<'de> for StructVisitor {
23002            type Value = RevokeDeviceSessionStatus;
23003            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23004                f.write_str("a RevokeDeviceSessionStatus struct")
23005            }
23006            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23007                RevokeDeviceSessionStatus::internal_deserialize(map)
23008            }
23009        }
23010        deserializer.deserialize_struct("RevokeDeviceSessionStatus", REVOKE_DEVICE_SESSION_STATUS_FIELDS, StructVisitor)
23011    }
23012}
23013
23014impl ::serde::ser::Serialize for RevokeDeviceSessionStatus {
23015    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23016        // struct serializer
23017        use serde::ser::SerializeStruct;
23018        let mut s = serializer.serialize_struct("RevokeDeviceSessionStatus", 2)?;
23019        self.internal_serialize::<S>(&mut s)?;
23020        s.end()
23021    }
23022}
23023
23024#[derive(Debug, Clone, PartialEq, Eq)]
23025#[non_exhaustive] // structs may have more fields added in the future.
23026pub struct RevokeLinkedApiAppArg {
23027    /// The application's unique id.
23028    pub app_id: String,
23029    /// The unique id of the member owning the device.
23030    pub team_member_id: String,
23031    /// Field is deprecated. This flag is not longer supported, the application dedicated folder (in
23032    /// case the application uses one) will be kept.
23033    #[deprecated]
23034    pub keep_app_folder: bool,
23035}
23036
23037impl RevokeLinkedApiAppArg {
23038    pub fn new(app_id: String, team_member_id: String) -> Self {
23039        RevokeLinkedApiAppArg {
23040            app_id,
23041            team_member_id,
23042            #[allow(deprecated)] keep_app_folder: true,
23043        }
23044    }
23045
23046    #[deprecated]
23047    #[allow(deprecated)]
23048    pub fn with_keep_app_folder(mut self, value: bool) -> Self {
23049        self.keep_app_folder = value;
23050        self
23051    }
23052}
23053
23054const REVOKE_LINKED_API_APP_ARG_FIELDS: &[&str] = &["app_id",
23055                                                    "team_member_id",
23056                                                    "keep_app_folder"];
23057impl RevokeLinkedApiAppArg {
23058    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23059        map: V,
23060    ) -> Result<RevokeLinkedApiAppArg, V::Error> {
23061        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23062    }
23063
23064    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23065        mut map: V,
23066        optional: bool,
23067    ) -> Result<Option<RevokeLinkedApiAppArg>, V::Error> {
23068        let mut field_app_id = None;
23069        let mut field_team_member_id = None;
23070        let mut field_keep_app_folder = None;
23071        let mut nothing = true;
23072        while let Some(key) = map.next_key::<&str>()? {
23073            nothing = false;
23074            match key {
23075                "app_id" => {
23076                    if field_app_id.is_some() {
23077                        return Err(::serde::de::Error::duplicate_field("app_id"));
23078                    }
23079                    field_app_id = Some(map.next_value()?);
23080                }
23081                "team_member_id" => {
23082                    if field_team_member_id.is_some() {
23083                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
23084                    }
23085                    field_team_member_id = Some(map.next_value()?);
23086                }
23087                "keep_app_folder" => {
23088                    if field_keep_app_folder.is_some() {
23089                        return Err(::serde::de::Error::duplicate_field("keep_app_folder"));
23090                    }
23091                    field_keep_app_folder = Some(map.next_value()?);
23092                }
23093                _ => {
23094                    // unknown field allowed and ignored
23095                    map.next_value::<::serde_json::Value>()?;
23096                }
23097            }
23098        }
23099        if optional && nothing {
23100            return Ok(None);
23101        }
23102        let result = RevokeLinkedApiAppArg {
23103            app_id: field_app_id.ok_or_else(|| ::serde::de::Error::missing_field("app_id"))?,
23104            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
23105            #[allow(deprecated)] keep_app_folder: field_keep_app_folder.unwrap_or(true),
23106        };
23107        Ok(Some(result))
23108    }
23109
23110    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23111        &self,
23112        s: &mut S::SerializeStruct,
23113    ) -> Result<(), S::Error> {
23114        use serde::ser::SerializeStruct;
23115        s.serialize_field("app_id", &self.app_id)?;
23116        s.serialize_field("team_member_id", &self.team_member_id)?;
23117        #[allow(deprecated)]
23118        if !self.keep_app_folder {
23119            s.serialize_field("keep_app_folder", &self.keep_app_folder)?;
23120        }
23121        Ok(())
23122    }
23123}
23124
23125impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedApiAppArg {
23126    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23127        // struct deserializer
23128        use serde::de::{MapAccess, Visitor};
23129        struct StructVisitor;
23130        impl<'de> Visitor<'de> for StructVisitor {
23131            type Value = RevokeLinkedApiAppArg;
23132            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23133                f.write_str("a RevokeLinkedApiAppArg struct")
23134            }
23135            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23136                RevokeLinkedApiAppArg::internal_deserialize(map)
23137            }
23138        }
23139        deserializer.deserialize_struct("RevokeLinkedApiAppArg", REVOKE_LINKED_API_APP_ARG_FIELDS, StructVisitor)
23140    }
23141}
23142
23143impl ::serde::ser::Serialize for RevokeLinkedApiAppArg {
23144    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23145        // struct serializer
23146        use serde::ser::SerializeStruct;
23147        let mut s = serializer.serialize_struct("RevokeLinkedApiAppArg", 3)?;
23148        self.internal_serialize::<S>(&mut s)?;
23149        s.end()
23150    }
23151}
23152
23153#[derive(Debug, Clone, PartialEq, Eq)]
23154#[non_exhaustive] // structs may have more fields added in the future.
23155pub struct RevokeLinkedApiAppBatchArg {
23156    pub revoke_linked_app: Vec<RevokeLinkedApiAppArg>,
23157}
23158
23159impl RevokeLinkedApiAppBatchArg {
23160    pub fn new(revoke_linked_app: Vec<RevokeLinkedApiAppArg>) -> Self {
23161        RevokeLinkedApiAppBatchArg {
23162            revoke_linked_app,
23163        }
23164    }
23165}
23166
23167const REVOKE_LINKED_API_APP_BATCH_ARG_FIELDS: &[&str] = &["revoke_linked_app"];
23168impl RevokeLinkedApiAppBatchArg {
23169    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23170        map: V,
23171    ) -> Result<RevokeLinkedApiAppBatchArg, V::Error> {
23172        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23173    }
23174
23175    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23176        mut map: V,
23177        optional: bool,
23178    ) -> Result<Option<RevokeLinkedApiAppBatchArg>, V::Error> {
23179        let mut field_revoke_linked_app = None;
23180        let mut nothing = true;
23181        while let Some(key) = map.next_key::<&str>()? {
23182            nothing = false;
23183            match key {
23184                "revoke_linked_app" => {
23185                    if field_revoke_linked_app.is_some() {
23186                        return Err(::serde::de::Error::duplicate_field("revoke_linked_app"));
23187                    }
23188                    field_revoke_linked_app = Some(map.next_value()?);
23189                }
23190                _ => {
23191                    // unknown field allowed and ignored
23192                    map.next_value::<::serde_json::Value>()?;
23193                }
23194            }
23195        }
23196        if optional && nothing {
23197            return Ok(None);
23198        }
23199        let result = RevokeLinkedApiAppBatchArg {
23200            revoke_linked_app: field_revoke_linked_app.ok_or_else(|| ::serde::de::Error::missing_field("revoke_linked_app"))?,
23201        };
23202        Ok(Some(result))
23203    }
23204
23205    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23206        &self,
23207        s: &mut S::SerializeStruct,
23208    ) -> Result<(), S::Error> {
23209        use serde::ser::SerializeStruct;
23210        s.serialize_field("revoke_linked_app", &self.revoke_linked_app)?;
23211        Ok(())
23212    }
23213}
23214
23215impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedApiAppBatchArg {
23216    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23217        // struct deserializer
23218        use serde::de::{MapAccess, Visitor};
23219        struct StructVisitor;
23220        impl<'de> Visitor<'de> for StructVisitor {
23221            type Value = RevokeLinkedApiAppBatchArg;
23222            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23223                f.write_str("a RevokeLinkedApiAppBatchArg struct")
23224            }
23225            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23226                RevokeLinkedApiAppBatchArg::internal_deserialize(map)
23227            }
23228        }
23229        deserializer.deserialize_struct("RevokeLinkedApiAppBatchArg", REVOKE_LINKED_API_APP_BATCH_ARG_FIELDS, StructVisitor)
23230    }
23231}
23232
23233impl ::serde::ser::Serialize for RevokeLinkedApiAppBatchArg {
23234    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23235        // struct serializer
23236        use serde::ser::SerializeStruct;
23237        let mut s = serializer.serialize_struct("RevokeLinkedApiAppBatchArg", 1)?;
23238        self.internal_serialize::<S>(&mut s)?;
23239        s.end()
23240    }
23241}
23242
23243/// Error returned by
23244/// [`linked_apps_revoke_linked_app_batch()`](crate::team::linked_apps_revoke_linked_app_batch).
23245#[derive(Debug, Clone, PartialEq, Eq)]
23246#[non_exhaustive] // variants may be added in the future
23247pub enum RevokeLinkedAppBatchError {
23248    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23249    /// typically indicates that this SDK version is out of date.
23250    Other,
23251}
23252
23253impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppBatchError {
23254    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23255        // union deserializer
23256        use serde::de::{self, MapAccess, Visitor};
23257        struct EnumVisitor;
23258        impl<'de> Visitor<'de> for EnumVisitor {
23259            type Value = RevokeLinkedAppBatchError;
23260            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23261                f.write_str("a RevokeLinkedAppBatchError structure")
23262            }
23263            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23264                let tag: &str = match map.next_key()? {
23265                    Some(".tag") => map.next_value()?,
23266                    _ => return Err(de::Error::missing_field(".tag"))
23267                };
23268                // open enum with no defined variants
23269                let _ = tag;
23270                crate::eat_json_fields(&mut map)?;
23271                Ok(RevokeLinkedAppBatchError::Other)
23272            }
23273        }
23274        const VARIANTS: &[&str] = &["other"];
23275        deserializer.deserialize_struct("RevokeLinkedAppBatchError", VARIANTS, EnumVisitor)
23276    }
23277}
23278
23279impl ::serde::ser::Serialize for RevokeLinkedAppBatchError {
23280    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23281        // union serializer
23282        #![allow(unused_variables)]
23283        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
23284    }
23285}
23286
23287impl ::std::error::Error for RevokeLinkedAppBatchError {
23288}
23289
23290impl ::std::fmt::Display for RevokeLinkedAppBatchError {
23291    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23292        write!(f, "{:?}", *self)
23293    }
23294}
23295
23296#[derive(Debug, Clone, PartialEq, Eq)]
23297#[non_exhaustive] // structs may have more fields added in the future.
23298pub struct RevokeLinkedAppBatchResult {
23299    pub revoke_linked_app_status: Vec<RevokeLinkedAppStatus>,
23300}
23301
23302impl RevokeLinkedAppBatchResult {
23303    pub fn new(revoke_linked_app_status: Vec<RevokeLinkedAppStatus>) -> Self {
23304        RevokeLinkedAppBatchResult {
23305            revoke_linked_app_status,
23306        }
23307    }
23308}
23309
23310const REVOKE_LINKED_APP_BATCH_RESULT_FIELDS: &[&str] = &["revoke_linked_app_status"];
23311impl RevokeLinkedAppBatchResult {
23312    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23313        map: V,
23314    ) -> Result<RevokeLinkedAppBatchResult, V::Error> {
23315        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23316    }
23317
23318    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23319        mut map: V,
23320        optional: bool,
23321    ) -> Result<Option<RevokeLinkedAppBatchResult>, V::Error> {
23322        let mut field_revoke_linked_app_status = None;
23323        let mut nothing = true;
23324        while let Some(key) = map.next_key::<&str>()? {
23325            nothing = false;
23326            match key {
23327                "revoke_linked_app_status" => {
23328                    if field_revoke_linked_app_status.is_some() {
23329                        return Err(::serde::de::Error::duplicate_field("revoke_linked_app_status"));
23330                    }
23331                    field_revoke_linked_app_status = Some(map.next_value()?);
23332                }
23333                _ => {
23334                    // unknown field allowed and ignored
23335                    map.next_value::<::serde_json::Value>()?;
23336                }
23337            }
23338        }
23339        if optional && nothing {
23340            return Ok(None);
23341        }
23342        let result = RevokeLinkedAppBatchResult {
23343            revoke_linked_app_status: field_revoke_linked_app_status.ok_or_else(|| ::serde::de::Error::missing_field("revoke_linked_app_status"))?,
23344        };
23345        Ok(Some(result))
23346    }
23347
23348    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23349        &self,
23350        s: &mut S::SerializeStruct,
23351    ) -> Result<(), S::Error> {
23352        use serde::ser::SerializeStruct;
23353        s.serialize_field("revoke_linked_app_status", &self.revoke_linked_app_status)?;
23354        Ok(())
23355    }
23356}
23357
23358impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppBatchResult {
23359    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23360        // struct deserializer
23361        use serde::de::{MapAccess, Visitor};
23362        struct StructVisitor;
23363        impl<'de> Visitor<'de> for StructVisitor {
23364            type Value = RevokeLinkedAppBatchResult;
23365            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23366                f.write_str("a RevokeLinkedAppBatchResult struct")
23367            }
23368            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23369                RevokeLinkedAppBatchResult::internal_deserialize(map)
23370            }
23371        }
23372        deserializer.deserialize_struct("RevokeLinkedAppBatchResult", REVOKE_LINKED_APP_BATCH_RESULT_FIELDS, StructVisitor)
23373    }
23374}
23375
23376impl ::serde::ser::Serialize for RevokeLinkedAppBatchResult {
23377    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23378        // struct serializer
23379        use serde::ser::SerializeStruct;
23380        let mut s = serializer.serialize_struct("RevokeLinkedAppBatchResult", 1)?;
23381        self.internal_serialize::<S>(&mut s)?;
23382        s.end()
23383    }
23384}
23385
23386/// Error returned by
23387/// [`linked_apps_revoke_linked_app()`](crate::team::linked_apps_revoke_linked_app).
23388#[derive(Debug, Clone, PartialEq, Eq)]
23389#[non_exhaustive] // variants may be added in the future
23390pub enum RevokeLinkedAppError {
23391    /// Application not found.
23392    AppNotFound,
23393    /// Member not found.
23394    MemberNotFound,
23395    /// App folder removal is not supported.
23396    AppFolderRemovalNotSupported,
23397    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23398    /// typically indicates that this SDK version is out of date.
23399    Other,
23400}
23401
23402impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppError {
23403    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23404        // union deserializer
23405        use serde::de::{self, MapAccess, Visitor};
23406        struct EnumVisitor;
23407        impl<'de> Visitor<'de> for EnumVisitor {
23408            type Value = RevokeLinkedAppError;
23409            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23410                f.write_str("a RevokeLinkedAppError structure")
23411            }
23412            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23413                let tag: &str = match map.next_key()? {
23414                    Some(".tag") => map.next_value()?,
23415                    _ => return Err(de::Error::missing_field(".tag"))
23416                };
23417                let value = match tag {
23418                    "app_not_found" => RevokeLinkedAppError::AppNotFound,
23419                    "member_not_found" => RevokeLinkedAppError::MemberNotFound,
23420                    "app_folder_removal_not_supported" => RevokeLinkedAppError::AppFolderRemovalNotSupported,
23421                    _ => RevokeLinkedAppError::Other,
23422                };
23423                crate::eat_json_fields(&mut map)?;
23424                Ok(value)
23425            }
23426        }
23427        const VARIANTS: &[&str] = &["app_not_found",
23428                                    "member_not_found",
23429                                    "app_folder_removal_not_supported",
23430                                    "other"];
23431        deserializer.deserialize_struct("RevokeLinkedAppError", VARIANTS, EnumVisitor)
23432    }
23433}
23434
23435impl ::serde::ser::Serialize for RevokeLinkedAppError {
23436    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23437        // union serializer
23438        use serde::ser::SerializeStruct;
23439        match self {
23440            RevokeLinkedAppError::AppNotFound => {
23441                // unit
23442                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
23443                s.serialize_field(".tag", "app_not_found")?;
23444                s.end()
23445            }
23446            RevokeLinkedAppError::MemberNotFound => {
23447                // unit
23448                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
23449                s.serialize_field(".tag", "member_not_found")?;
23450                s.end()
23451            }
23452            RevokeLinkedAppError::AppFolderRemovalNotSupported => {
23453                // unit
23454                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
23455                s.serialize_field(".tag", "app_folder_removal_not_supported")?;
23456                s.end()
23457            }
23458            RevokeLinkedAppError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23459        }
23460    }
23461}
23462
23463impl ::std::error::Error for RevokeLinkedAppError {
23464}
23465
23466impl ::std::fmt::Display for RevokeLinkedAppError {
23467    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23468        match self {
23469            RevokeLinkedAppError::AppNotFound => f.write_str("Application not found."),
23470            RevokeLinkedAppError::MemberNotFound => f.write_str("Member not found."),
23471            RevokeLinkedAppError::AppFolderRemovalNotSupported => f.write_str("App folder removal is not supported."),
23472            _ => write!(f, "{:?}", *self),
23473        }
23474    }
23475}
23476
23477#[derive(Debug, Clone, PartialEq, Eq)]
23478#[non_exhaustive] // structs may have more fields added in the future.
23479pub struct RevokeLinkedAppStatus {
23480    /// Result of the revoking request.
23481    pub success: bool,
23482    /// The error cause in case of a failure.
23483    pub error_type: Option<RevokeLinkedAppError>,
23484}
23485
23486impl RevokeLinkedAppStatus {
23487    pub fn new(success: bool) -> Self {
23488        RevokeLinkedAppStatus {
23489            success,
23490            error_type: None,
23491        }
23492    }
23493
23494    pub fn with_error_type(mut self, value: RevokeLinkedAppError) -> Self {
23495        self.error_type = Some(value);
23496        self
23497    }
23498}
23499
23500const REVOKE_LINKED_APP_STATUS_FIELDS: &[&str] = &["success",
23501                                                   "error_type"];
23502impl RevokeLinkedAppStatus {
23503    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23504        map: V,
23505    ) -> Result<RevokeLinkedAppStatus, V::Error> {
23506        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23507    }
23508
23509    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23510        mut map: V,
23511        optional: bool,
23512    ) -> Result<Option<RevokeLinkedAppStatus>, V::Error> {
23513        let mut field_success = None;
23514        let mut field_error_type = None;
23515        let mut nothing = true;
23516        while let Some(key) = map.next_key::<&str>()? {
23517            nothing = false;
23518            match key {
23519                "success" => {
23520                    if field_success.is_some() {
23521                        return Err(::serde::de::Error::duplicate_field("success"));
23522                    }
23523                    field_success = Some(map.next_value()?);
23524                }
23525                "error_type" => {
23526                    if field_error_type.is_some() {
23527                        return Err(::serde::de::Error::duplicate_field("error_type"));
23528                    }
23529                    field_error_type = Some(map.next_value()?);
23530                }
23531                _ => {
23532                    // unknown field allowed and ignored
23533                    map.next_value::<::serde_json::Value>()?;
23534                }
23535            }
23536        }
23537        if optional && nothing {
23538            return Ok(None);
23539        }
23540        let result = RevokeLinkedAppStatus {
23541            success: field_success.ok_or_else(|| ::serde::de::Error::missing_field("success"))?,
23542            error_type: field_error_type.and_then(Option::flatten),
23543        };
23544        Ok(Some(result))
23545    }
23546
23547    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23548        &self,
23549        s: &mut S::SerializeStruct,
23550    ) -> Result<(), S::Error> {
23551        use serde::ser::SerializeStruct;
23552        s.serialize_field("success", &self.success)?;
23553        if let Some(val) = &self.error_type {
23554            s.serialize_field("error_type", val)?;
23555        }
23556        Ok(())
23557    }
23558}
23559
23560impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppStatus {
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 = RevokeLinkedAppStatus;
23567            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23568                f.write_str("a RevokeLinkedAppStatus struct")
23569            }
23570            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23571                RevokeLinkedAppStatus::internal_deserialize(map)
23572            }
23573        }
23574        deserializer.deserialize_struct("RevokeLinkedAppStatus", REVOKE_LINKED_APP_STATUS_FIELDS, StructVisitor)
23575    }
23576}
23577
23578impl ::serde::ser::Serialize for RevokeLinkedAppStatus {
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("RevokeLinkedAppStatus", 2)?;
23583        self.internal_serialize::<S>(&mut s)?;
23584        s.end()
23585    }
23586}
23587
23588#[derive(Debug, Clone, PartialEq, Eq)]
23589#[non_exhaustive] // structs may have more fields added in the future.
23590pub struct SetCustomQuotaArg {
23591    /// List of users and their custom quotas.
23592    pub users_and_quotas: Vec<UserCustomQuotaArg>,
23593}
23594
23595impl SetCustomQuotaArg {
23596    pub fn new(users_and_quotas: Vec<UserCustomQuotaArg>) -> Self {
23597        SetCustomQuotaArg {
23598            users_and_quotas,
23599        }
23600    }
23601}
23602
23603const SET_CUSTOM_QUOTA_ARG_FIELDS: &[&str] = &["users_and_quotas"];
23604impl SetCustomQuotaArg {
23605    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23606        map: V,
23607    ) -> Result<SetCustomQuotaArg, V::Error> {
23608        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23609    }
23610
23611    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23612        mut map: V,
23613        optional: bool,
23614    ) -> Result<Option<SetCustomQuotaArg>, V::Error> {
23615        let mut field_users_and_quotas = None;
23616        let mut nothing = true;
23617        while let Some(key) = map.next_key::<&str>()? {
23618            nothing = false;
23619            match key {
23620                "users_and_quotas" => {
23621                    if field_users_and_quotas.is_some() {
23622                        return Err(::serde::de::Error::duplicate_field("users_and_quotas"));
23623                    }
23624                    field_users_and_quotas = Some(map.next_value()?);
23625                }
23626                _ => {
23627                    // unknown field allowed and ignored
23628                    map.next_value::<::serde_json::Value>()?;
23629                }
23630            }
23631        }
23632        if optional && nothing {
23633            return Ok(None);
23634        }
23635        let result = SetCustomQuotaArg {
23636            users_and_quotas: field_users_and_quotas.ok_or_else(|| ::serde::de::Error::missing_field("users_and_quotas"))?,
23637        };
23638        Ok(Some(result))
23639    }
23640
23641    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23642        &self,
23643        s: &mut S::SerializeStruct,
23644    ) -> Result<(), S::Error> {
23645        use serde::ser::SerializeStruct;
23646        s.serialize_field("users_and_quotas", &self.users_and_quotas)?;
23647        Ok(())
23648    }
23649}
23650
23651impl<'de> ::serde::de::Deserialize<'de> for SetCustomQuotaArg {
23652    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23653        // struct deserializer
23654        use serde::de::{MapAccess, Visitor};
23655        struct StructVisitor;
23656        impl<'de> Visitor<'de> for StructVisitor {
23657            type Value = SetCustomQuotaArg;
23658            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23659                f.write_str("a SetCustomQuotaArg struct")
23660            }
23661            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23662                SetCustomQuotaArg::internal_deserialize(map)
23663            }
23664        }
23665        deserializer.deserialize_struct("SetCustomQuotaArg", SET_CUSTOM_QUOTA_ARG_FIELDS, StructVisitor)
23666    }
23667}
23668
23669impl ::serde::ser::Serialize for SetCustomQuotaArg {
23670    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23671        // struct serializer
23672        use serde::ser::SerializeStruct;
23673        let mut s = serializer.serialize_struct("SetCustomQuotaArg", 1)?;
23674        self.internal_serialize::<S>(&mut s)?;
23675        s.end()
23676    }
23677}
23678
23679/// Error returned when setting member custom quota.
23680#[derive(Debug, Clone, PartialEq, Eq)]
23681#[non_exhaustive] // variants may be added in the future
23682pub enum SetCustomQuotaError {
23683    /// A maximum of 1000 users can be set for a single call.
23684    TooManyUsers,
23685    /// Some of the users are on the excluded users list and can't have custom quota set.
23686    SomeUsersAreExcluded,
23687    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23688    /// typically indicates that this SDK version is out of date.
23689    Other,
23690}
23691
23692impl<'de> ::serde::de::Deserialize<'de> for SetCustomQuotaError {
23693    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23694        // union deserializer
23695        use serde::de::{self, MapAccess, Visitor};
23696        struct EnumVisitor;
23697        impl<'de> Visitor<'de> for EnumVisitor {
23698            type Value = SetCustomQuotaError;
23699            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23700                f.write_str("a SetCustomQuotaError structure")
23701            }
23702            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23703                let tag: &str = match map.next_key()? {
23704                    Some(".tag") => map.next_value()?,
23705                    _ => return Err(de::Error::missing_field(".tag"))
23706                };
23707                let value = match tag {
23708                    "too_many_users" => SetCustomQuotaError::TooManyUsers,
23709                    "some_users_are_excluded" => SetCustomQuotaError::SomeUsersAreExcluded,
23710                    _ => SetCustomQuotaError::Other,
23711                };
23712                crate::eat_json_fields(&mut map)?;
23713                Ok(value)
23714            }
23715        }
23716        const VARIANTS: &[&str] = &["too_many_users",
23717                                    "other",
23718                                    "some_users_are_excluded"];
23719        deserializer.deserialize_struct("SetCustomQuotaError", VARIANTS, EnumVisitor)
23720    }
23721}
23722
23723impl ::serde::ser::Serialize for SetCustomQuotaError {
23724    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23725        // union serializer
23726        use serde::ser::SerializeStruct;
23727        match self {
23728            SetCustomQuotaError::TooManyUsers => {
23729                // unit
23730                let mut s = serializer.serialize_struct("SetCustomQuotaError", 1)?;
23731                s.serialize_field(".tag", "too_many_users")?;
23732                s.end()
23733            }
23734            SetCustomQuotaError::SomeUsersAreExcluded => {
23735                // unit
23736                let mut s = serializer.serialize_struct("SetCustomQuotaError", 1)?;
23737                s.serialize_field(".tag", "some_users_are_excluded")?;
23738                s.end()
23739            }
23740            SetCustomQuotaError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23741        }
23742    }
23743}
23744
23745impl ::std::error::Error for SetCustomQuotaError {
23746}
23747
23748impl ::std::fmt::Display for SetCustomQuotaError {
23749    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23750        match self {
23751            SetCustomQuotaError::TooManyUsers => f.write_str("A maximum of 1000 users can be set for a single call."),
23752            SetCustomQuotaError::SomeUsersAreExcluded => f.write_str("Some of the users are on the excluded users list and can't have custom quota set."),
23753            _ => write!(f, "{:?}", *self),
23754        }
23755    }
23756}
23757
23758// union extends CustomQuotaError
23759impl From<CustomQuotaError> for SetCustomQuotaError {
23760    fn from(parent: CustomQuotaError) -> Self {
23761        match parent {
23762            CustomQuotaError::TooManyUsers => SetCustomQuotaError::TooManyUsers,
23763            CustomQuotaError::Other => SetCustomQuotaError::Other,
23764        }
23765    }
23766}
23767/// Structure representing Approve List entries. Domain and emails are supported. At least one entry
23768/// of any supported type is required.
23769#[derive(Debug, Clone, PartialEq, Eq, Default)]
23770#[non_exhaustive] // structs may have more fields added in the future.
23771pub struct SharingAllowlistAddArgs {
23772    /// List of domains represented by valid string representation (RFC-1034/5).
23773    pub domains: Option<Vec<String>>,
23774    /// List of emails represented by valid string representation (RFC-5322/822).
23775    pub emails: Option<Vec<String>>,
23776}
23777
23778impl SharingAllowlistAddArgs {
23779    pub fn with_domains(mut self, value: Vec<String>) -> Self {
23780        self.domains = Some(value);
23781        self
23782    }
23783
23784    pub fn with_emails(mut self, value: Vec<String>) -> Self {
23785        self.emails = Some(value);
23786        self
23787    }
23788}
23789
23790const SHARING_ALLOWLIST_ADD_ARGS_FIELDS: &[&str] = &["domains",
23791                                                     "emails"];
23792impl SharingAllowlistAddArgs {
23793    // no _opt deserializer
23794    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23795        mut map: V,
23796    ) -> Result<SharingAllowlistAddArgs, V::Error> {
23797        let mut field_domains = None;
23798        let mut field_emails = None;
23799        while let Some(key) = map.next_key::<&str>()? {
23800            match key {
23801                "domains" => {
23802                    if field_domains.is_some() {
23803                        return Err(::serde::de::Error::duplicate_field("domains"));
23804                    }
23805                    field_domains = Some(map.next_value()?);
23806                }
23807                "emails" => {
23808                    if field_emails.is_some() {
23809                        return Err(::serde::de::Error::duplicate_field("emails"));
23810                    }
23811                    field_emails = Some(map.next_value()?);
23812                }
23813                _ => {
23814                    // unknown field allowed and ignored
23815                    map.next_value::<::serde_json::Value>()?;
23816                }
23817            }
23818        }
23819        let result = SharingAllowlistAddArgs {
23820            domains: field_domains.and_then(Option::flatten),
23821            emails: field_emails.and_then(Option::flatten),
23822        };
23823        Ok(result)
23824    }
23825
23826    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23827        &self,
23828        s: &mut S::SerializeStruct,
23829    ) -> Result<(), S::Error> {
23830        use serde::ser::SerializeStruct;
23831        if let Some(val) = &self.domains {
23832            s.serialize_field("domains", val)?;
23833        }
23834        if let Some(val) = &self.emails {
23835            s.serialize_field("emails", val)?;
23836        }
23837        Ok(())
23838    }
23839}
23840
23841impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddArgs {
23842    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23843        // struct deserializer
23844        use serde::de::{MapAccess, Visitor};
23845        struct StructVisitor;
23846        impl<'de> Visitor<'de> for StructVisitor {
23847            type Value = SharingAllowlistAddArgs;
23848            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23849                f.write_str("a SharingAllowlistAddArgs struct")
23850            }
23851            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23852                SharingAllowlistAddArgs::internal_deserialize(map)
23853            }
23854        }
23855        deserializer.deserialize_struct("SharingAllowlistAddArgs", SHARING_ALLOWLIST_ADD_ARGS_FIELDS, StructVisitor)
23856    }
23857}
23858
23859impl ::serde::ser::Serialize for SharingAllowlistAddArgs {
23860    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23861        // struct serializer
23862        use serde::ser::SerializeStruct;
23863        let mut s = serializer.serialize_struct("SharingAllowlistAddArgs", 2)?;
23864        self.internal_serialize::<S>(&mut s)?;
23865        s.end()
23866    }
23867}
23868
23869#[derive(Debug, Clone, PartialEq, Eq)]
23870#[non_exhaustive] // variants may be added in the future
23871pub enum SharingAllowlistAddError {
23872    /// One of provided values is not valid.
23873    MalformedEntry(String),
23874    /// Neither single domain nor email provided.
23875    NoEntriesProvided,
23876    /// Too many entries provided within one call.
23877    TooManyEntriesProvided,
23878    /// Team entries limit reached.
23879    TeamLimitReached,
23880    /// Unknown error.
23881    UnknownError,
23882    /// Entries already exists.
23883    EntriesAlreadyExist(String),
23884    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23885    /// typically indicates that this SDK version is out of date.
23886    Other,
23887}
23888
23889impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddError {
23890    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23891        // union deserializer
23892        use serde::de::{self, MapAccess, Visitor};
23893        struct EnumVisitor;
23894        impl<'de> Visitor<'de> for EnumVisitor {
23895            type Value = SharingAllowlistAddError;
23896            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23897                f.write_str("a SharingAllowlistAddError structure")
23898            }
23899            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23900                let tag: &str = match map.next_key()? {
23901                    Some(".tag") => map.next_value()?,
23902                    _ => return Err(de::Error::missing_field(".tag"))
23903                };
23904                let value = match tag {
23905                    "malformed_entry" => {
23906                        match map.next_key()? {
23907                            Some("malformed_entry") => SharingAllowlistAddError::MalformedEntry(map.next_value()?),
23908                            None => return Err(de::Error::missing_field("malformed_entry")),
23909                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23910                        }
23911                    }
23912                    "no_entries_provided" => SharingAllowlistAddError::NoEntriesProvided,
23913                    "too_many_entries_provided" => SharingAllowlistAddError::TooManyEntriesProvided,
23914                    "team_limit_reached" => SharingAllowlistAddError::TeamLimitReached,
23915                    "unknown_error" => SharingAllowlistAddError::UnknownError,
23916                    "entries_already_exist" => {
23917                        match map.next_key()? {
23918                            Some("entries_already_exist") => SharingAllowlistAddError::EntriesAlreadyExist(map.next_value()?),
23919                            None => return Err(de::Error::missing_field("entries_already_exist")),
23920                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23921                        }
23922                    }
23923                    _ => SharingAllowlistAddError::Other,
23924                };
23925                crate::eat_json_fields(&mut map)?;
23926                Ok(value)
23927            }
23928        }
23929        const VARIANTS: &[&str] = &["malformed_entry",
23930                                    "no_entries_provided",
23931                                    "too_many_entries_provided",
23932                                    "team_limit_reached",
23933                                    "unknown_error",
23934                                    "entries_already_exist",
23935                                    "other"];
23936        deserializer.deserialize_struct("SharingAllowlistAddError", VARIANTS, EnumVisitor)
23937    }
23938}
23939
23940impl ::serde::ser::Serialize for SharingAllowlistAddError {
23941    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23942        // union serializer
23943        use serde::ser::SerializeStruct;
23944        match self {
23945            SharingAllowlistAddError::MalformedEntry(x) => {
23946                // primitive
23947                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 2)?;
23948                s.serialize_field(".tag", "malformed_entry")?;
23949                s.serialize_field("malformed_entry", x)?;
23950                s.end()
23951            }
23952            SharingAllowlistAddError::NoEntriesProvided => {
23953                // unit
23954                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23955                s.serialize_field(".tag", "no_entries_provided")?;
23956                s.end()
23957            }
23958            SharingAllowlistAddError::TooManyEntriesProvided => {
23959                // unit
23960                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23961                s.serialize_field(".tag", "too_many_entries_provided")?;
23962                s.end()
23963            }
23964            SharingAllowlistAddError::TeamLimitReached => {
23965                // unit
23966                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23967                s.serialize_field(".tag", "team_limit_reached")?;
23968                s.end()
23969            }
23970            SharingAllowlistAddError::UnknownError => {
23971                // unit
23972                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23973                s.serialize_field(".tag", "unknown_error")?;
23974                s.end()
23975            }
23976            SharingAllowlistAddError::EntriesAlreadyExist(x) => {
23977                // primitive
23978                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 2)?;
23979                s.serialize_field(".tag", "entries_already_exist")?;
23980                s.serialize_field("entries_already_exist", x)?;
23981                s.end()
23982            }
23983            SharingAllowlistAddError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23984        }
23985    }
23986}
23987
23988impl ::std::error::Error for SharingAllowlistAddError {
23989}
23990
23991impl ::std::fmt::Display for SharingAllowlistAddError {
23992    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23993        match self {
23994            SharingAllowlistAddError::MalformedEntry(inner) => write!(f, "One of provided values is not valid: {:?}", inner),
23995            SharingAllowlistAddError::NoEntriesProvided => f.write_str("Neither single domain nor email provided."),
23996            SharingAllowlistAddError::TooManyEntriesProvided => f.write_str("Too many entries provided within one call."),
23997            SharingAllowlistAddError::TeamLimitReached => f.write_str("Team entries limit reached."),
23998            SharingAllowlistAddError::UnknownError => f.write_str("Unknown error."),
23999            SharingAllowlistAddError::EntriesAlreadyExist(inner) => write!(f, "Entries already exists: {:?}", inner),
24000            _ => write!(f, "{:?}", *self),
24001        }
24002    }
24003}
24004
24005/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
24006/// Stone.
24007#[derive(Debug, Clone, PartialEq, Eq, Default)]
24008#[non_exhaustive] // structs may have more fields added in the future.
24009pub struct SharingAllowlistAddResponse {
24010}
24011
24012const SHARING_ALLOWLIST_ADD_RESPONSE_FIELDS: &[&str] = &[];
24013impl SharingAllowlistAddResponse {
24014    // no _opt deserializer
24015    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24016        mut map: V,
24017    ) -> Result<SharingAllowlistAddResponse, V::Error> {
24018        // ignore any fields found; none are presently recognized
24019        crate::eat_json_fields(&mut map)?;
24020        Ok(SharingAllowlistAddResponse {})
24021    }
24022}
24023
24024impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddResponse {
24025    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24026        // struct deserializer
24027        use serde::de::{MapAccess, Visitor};
24028        struct StructVisitor;
24029        impl<'de> Visitor<'de> for StructVisitor {
24030            type Value = SharingAllowlistAddResponse;
24031            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24032                f.write_str("a SharingAllowlistAddResponse struct")
24033            }
24034            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24035                SharingAllowlistAddResponse::internal_deserialize(map)
24036            }
24037        }
24038        deserializer.deserialize_struct("SharingAllowlistAddResponse", SHARING_ALLOWLIST_ADD_RESPONSE_FIELDS, StructVisitor)
24039    }
24040}
24041
24042impl ::serde::ser::Serialize for SharingAllowlistAddResponse {
24043    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24044        // struct serializer
24045        use serde::ser::SerializeStruct;
24046        serializer.serialize_struct("SharingAllowlistAddResponse", 0)?.end()
24047    }
24048}
24049
24050#[derive(Debug, Clone, PartialEq, Eq)]
24051#[non_exhaustive] // structs may have more fields added in the future.
24052pub struct SharingAllowlistListArg {
24053    /// The number of entries to fetch at one time.
24054    pub limit: u32,
24055}
24056
24057impl Default for SharingAllowlistListArg {
24058    fn default() -> Self {
24059        SharingAllowlistListArg {
24060            limit: 1000,
24061        }
24062    }
24063}
24064
24065impl SharingAllowlistListArg {
24066    pub fn with_limit(mut self, value: u32) -> Self {
24067        self.limit = value;
24068        self
24069    }
24070}
24071
24072const SHARING_ALLOWLIST_LIST_ARG_FIELDS: &[&str] = &["limit"];
24073impl SharingAllowlistListArg {
24074    // no _opt deserializer
24075    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24076        mut map: V,
24077    ) -> Result<SharingAllowlistListArg, V::Error> {
24078        let mut field_limit = None;
24079        while let Some(key) = map.next_key::<&str>()? {
24080            match key {
24081                "limit" => {
24082                    if field_limit.is_some() {
24083                        return Err(::serde::de::Error::duplicate_field("limit"));
24084                    }
24085                    field_limit = Some(map.next_value()?);
24086                }
24087                _ => {
24088                    // unknown field allowed and ignored
24089                    map.next_value::<::serde_json::Value>()?;
24090                }
24091            }
24092        }
24093        let result = SharingAllowlistListArg {
24094            limit: field_limit.unwrap_or(1000),
24095        };
24096        Ok(result)
24097    }
24098
24099    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24100        &self,
24101        s: &mut S::SerializeStruct,
24102    ) -> Result<(), S::Error> {
24103        use serde::ser::SerializeStruct;
24104        if self.limit != 1000 {
24105            s.serialize_field("limit", &self.limit)?;
24106        }
24107        Ok(())
24108    }
24109}
24110
24111impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListArg {
24112    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24113        // struct deserializer
24114        use serde::de::{MapAccess, Visitor};
24115        struct StructVisitor;
24116        impl<'de> Visitor<'de> for StructVisitor {
24117            type Value = SharingAllowlistListArg;
24118            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24119                f.write_str("a SharingAllowlistListArg struct")
24120            }
24121            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24122                SharingAllowlistListArg::internal_deserialize(map)
24123            }
24124        }
24125        deserializer.deserialize_struct("SharingAllowlistListArg", SHARING_ALLOWLIST_LIST_ARG_FIELDS, StructVisitor)
24126    }
24127}
24128
24129impl ::serde::ser::Serialize for SharingAllowlistListArg {
24130    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24131        // struct serializer
24132        use serde::ser::SerializeStruct;
24133        let mut s = serializer.serialize_struct("SharingAllowlistListArg", 1)?;
24134        self.internal_serialize::<S>(&mut s)?;
24135        s.end()
24136    }
24137}
24138
24139#[derive(Debug, Clone, PartialEq, Eq)]
24140#[non_exhaustive] // structs may have more fields added in the future.
24141pub struct SharingAllowlistListContinueArg {
24142    /// The cursor returned from a previous call to
24143    /// [`sharing_allowlist_list()`](crate::team::sharing_allowlist_list) or
24144    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
24145    pub cursor: String,
24146}
24147
24148impl SharingAllowlistListContinueArg {
24149    pub fn new(cursor: String) -> Self {
24150        SharingAllowlistListContinueArg {
24151            cursor,
24152        }
24153    }
24154}
24155
24156const SHARING_ALLOWLIST_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
24157impl SharingAllowlistListContinueArg {
24158    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24159        map: V,
24160    ) -> Result<SharingAllowlistListContinueArg, V::Error> {
24161        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24162    }
24163
24164    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24165        mut map: V,
24166        optional: bool,
24167    ) -> Result<Option<SharingAllowlistListContinueArg>, V::Error> {
24168        let mut field_cursor = None;
24169        let mut nothing = true;
24170        while let Some(key) = map.next_key::<&str>()? {
24171            nothing = false;
24172            match key {
24173                "cursor" => {
24174                    if field_cursor.is_some() {
24175                        return Err(::serde::de::Error::duplicate_field("cursor"));
24176                    }
24177                    field_cursor = Some(map.next_value()?);
24178                }
24179                _ => {
24180                    // unknown field allowed and ignored
24181                    map.next_value::<::serde_json::Value>()?;
24182                }
24183            }
24184        }
24185        if optional && nothing {
24186            return Ok(None);
24187        }
24188        let result = SharingAllowlistListContinueArg {
24189            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
24190        };
24191        Ok(Some(result))
24192    }
24193
24194    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24195        &self,
24196        s: &mut S::SerializeStruct,
24197    ) -> Result<(), S::Error> {
24198        use serde::ser::SerializeStruct;
24199        s.serialize_field("cursor", &self.cursor)?;
24200        Ok(())
24201    }
24202}
24203
24204impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListContinueArg {
24205    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24206        // struct deserializer
24207        use serde::de::{MapAccess, Visitor};
24208        struct StructVisitor;
24209        impl<'de> Visitor<'de> for StructVisitor {
24210            type Value = SharingAllowlistListContinueArg;
24211            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24212                f.write_str("a SharingAllowlistListContinueArg struct")
24213            }
24214            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24215                SharingAllowlistListContinueArg::internal_deserialize(map)
24216            }
24217        }
24218        deserializer.deserialize_struct("SharingAllowlistListContinueArg", SHARING_ALLOWLIST_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
24219    }
24220}
24221
24222impl ::serde::ser::Serialize for SharingAllowlistListContinueArg {
24223    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24224        // struct serializer
24225        use serde::ser::SerializeStruct;
24226        let mut s = serializer.serialize_struct("SharingAllowlistListContinueArg", 1)?;
24227        self.internal_serialize::<S>(&mut s)?;
24228        s.end()
24229    }
24230}
24231
24232#[derive(Debug, Clone, PartialEq, Eq)]
24233#[non_exhaustive] // variants may be added in the future
24234pub enum SharingAllowlistListContinueError {
24235    /// Provided cursor is not valid.
24236    InvalidCursor,
24237    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24238    /// typically indicates that this SDK version is out of date.
24239    Other,
24240}
24241
24242impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListContinueError {
24243    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24244        // union deserializer
24245        use serde::de::{self, MapAccess, Visitor};
24246        struct EnumVisitor;
24247        impl<'de> Visitor<'de> for EnumVisitor {
24248            type Value = SharingAllowlistListContinueError;
24249            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24250                f.write_str("a SharingAllowlistListContinueError structure")
24251            }
24252            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24253                let tag: &str = match map.next_key()? {
24254                    Some(".tag") => map.next_value()?,
24255                    _ => return Err(de::Error::missing_field(".tag"))
24256                };
24257                let value = match tag {
24258                    "invalid_cursor" => SharingAllowlistListContinueError::InvalidCursor,
24259                    _ => SharingAllowlistListContinueError::Other,
24260                };
24261                crate::eat_json_fields(&mut map)?;
24262                Ok(value)
24263            }
24264        }
24265        const VARIANTS: &[&str] = &["invalid_cursor",
24266                                    "other"];
24267        deserializer.deserialize_struct("SharingAllowlistListContinueError", VARIANTS, EnumVisitor)
24268    }
24269}
24270
24271impl ::serde::ser::Serialize for SharingAllowlistListContinueError {
24272    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24273        // union serializer
24274        use serde::ser::SerializeStruct;
24275        match self {
24276            SharingAllowlistListContinueError::InvalidCursor => {
24277                // unit
24278                let mut s = serializer.serialize_struct("SharingAllowlistListContinueError", 1)?;
24279                s.serialize_field(".tag", "invalid_cursor")?;
24280                s.end()
24281            }
24282            SharingAllowlistListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24283        }
24284    }
24285}
24286
24287impl ::std::error::Error for SharingAllowlistListContinueError {
24288}
24289
24290impl ::std::fmt::Display for SharingAllowlistListContinueError {
24291    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24292        match self {
24293            SharingAllowlistListContinueError::InvalidCursor => f.write_str("Provided cursor is not valid."),
24294            _ => write!(f, "{:?}", *self),
24295        }
24296    }
24297}
24298
24299/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
24300/// Stone.
24301#[derive(Debug, Clone, PartialEq, Eq, Default)]
24302#[non_exhaustive] // structs may have more fields added in the future.
24303pub struct SharingAllowlistListError {
24304}
24305
24306const SHARING_ALLOWLIST_LIST_ERROR_FIELDS: &[&str] = &[];
24307impl SharingAllowlistListError {
24308    // no _opt deserializer
24309    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24310        mut map: V,
24311    ) -> Result<SharingAllowlistListError, V::Error> {
24312        // ignore any fields found; none are presently recognized
24313        crate::eat_json_fields(&mut map)?;
24314        Ok(SharingAllowlistListError {})
24315    }
24316}
24317
24318impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListError {
24319    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24320        // struct deserializer
24321        use serde::de::{MapAccess, Visitor};
24322        struct StructVisitor;
24323        impl<'de> Visitor<'de> for StructVisitor {
24324            type Value = SharingAllowlistListError;
24325            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24326                f.write_str("a SharingAllowlistListError struct")
24327            }
24328            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24329                SharingAllowlistListError::internal_deserialize(map)
24330            }
24331        }
24332        deserializer.deserialize_struct("SharingAllowlistListError", SHARING_ALLOWLIST_LIST_ERROR_FIELDS, StructVisitor)
24333    }
24334}
24335
24336impl ::serde::ser::Serialize for SharingAllowlistListError {
24337    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24338        // struct serializer
24339        use serde::ser::SerializeStruct;
24340        serializer.serialize_struct("SharingAllowlistListError", 0)?.end()
24341    }
24342}
24343
24344impl ::std::error::Error for SharingAllowlistListError {
24345}
24346
24347impl ::std::fmt::Display for SharingAllowlistListError {
24348    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24349        write!(f, "{:?}", *self)
24350    }
24351}
24352
24353#[derive(Debug, Clone, PartialEq, Eq)]
24354#[non_exhaustive] // structs may have more fields added in the future.
24355pub struct SharingAllowlistListResponse {
24356    /// List of domains represented by valid string representation (RFC-1034/5).
24357    pub domains: Vec<String>,
24358    /// List of emails represented by valid string representation (RFC-5322/822).
24359    pub emails: Vec<String>,
24360    /// If this is nonempty, there are more entries that can be fetched with
24361    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
24362    pub cursor: String,
24363    /// if true indicates that more entries can be fetched with
24364    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
24365    pub has_more: bool,
24366}
24367
24368impl SharingAllowlistListResponse {
24369    pub fn new(domains: Vec<String>, emails: Vec<String>) -> Self {
24370        SharingAllowlistListResponse {
24371            domains,
24372            emails,
24373            cursor: String::new(),
24374            has_more: false,
24375        }
24376    }
24377
24378    pub fn with_cursor(mut self, value: String) -> Self {
24379        self.cursor = value;
24380        self
24381    }
24382
24383    pub fn with_has_more(mut self, value: bool) -> Self {
24384        self.has_more = value;
24385        self
24386    }
24387}
24388
24389const SHARING_ALLOWLIST_LIST_RESPONSE_FIELDS: &[&str] = &["domains",
24390                                                          "emails",
24391                                                          "cursor",
24392                                                          "has_more"];
24393impl SharingAllowlistListResponse {
24394    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24395        map: V,
24396    ) -> Result<SharingAllowlistListResponse, V::Error> {
24397        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24398    }
24399
24400    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24401        mut map: V,
24402        optional: bool,
24403    ) -> Result<Option<SharingAllowlistListResponse>, V::Error> {
24404        let mut field_domains = None;
24405        let mut field_emails = None;
24406        let mut field_cursor = None;
24407        let mut field_has_more = None;
24408        let mut nothing = true;
24409        while let Some(key) = map.next_key::<&str>()? {
24410            nothing = false;
24411            match key {
24412                "domains" => {
24413                    if field_domains.is_some() {
24414                        return Err(::serde::de::Error::duplicate_field("domains"));
24415                    }
24416                    field_domains = Some(map.next_value()?);
24417                }
24418                "emails" => {
24419                    if field_emails.is_some() {
24420                        return Err(::serde::de::Error::duplicate_field("emails"));
24421                    }
24422                    field_emails = Some(map.next_value()?);
24423                }
24424                "cursor" => {
24425                    if field_cursor.is_some() {
24426                        return Err(::serde::de::Error::duplicate_field("cursor"));
24427                    }
24428                    field_cursor = Some(map.next_value()?);
24429                }
24430                "has_more" => {
24431                    if field_has_more.is_some() {
24432                        return Err(::serde::de::Error::duplicate_field("has_more"));
24433                    }
24434                    field_has_more = Some(map.next_value()?);
24435                }
24436                _ => {
24437                    // unknown field allowed and ignored
24438                    map.next_value::<::serde_json::Value>()?;
24439                }
24440            }
24441        }
24442        if optional && nothing {
24443            return Ok(None);
24444        }
24445        let result = SharingAllowlistListResponse {
24446            domains: field_domains.ok_or_else(|| ::serde::de::Error::missing_field("domains"))?,
24447            emails: field_emails.ok_or_else(|| ::serde::de::Error::missing_field("emails"))?,
24448            cursor: field_cursor.unwrap_or_default(),
24449            has_more: field_has_more.unwrap_or(false),
24450        };
24451        Ok(Some(result))
24452    }
24453
24454    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24455        &self,
24456        s: &mut S::SerializeStruct,
24457    ) -> Result<(), S::Error> {
24458        use serde::ser::SerializeStruct;
24459        s.serialize_field("domains", &self.domains)?;
24460        s.serialize_field("emails", &self.emails)?;
24461        if !self.cursor.is_empty() {
24462            s.serialize_field("cursor", &self.cursor)?;
24463        }
24464        if self.has_more {
24465            s.serialize_field("has_more", &self.has_more)?;
24466        }
24467        Ok(())
24468    }
24469}
24470
24471impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListResponse {
24472    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24473        // struct deserializer
24474        use serde::de::{MapAccess, Visitor};
24475        struct StructVisitor;
24476        impl<'de> Visitor<'de> for StructVisitor {
24477            type Value = SharingAllowlistListResponse;
24478            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24479                f.write_str("a SharingAllowlistListResponse struct")
24480            }
24481            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24482                SharingAllowlistListResponse::internal_deserialize(map)
24483            }
24484        }
24485        deserializer.deserialize_struct("SharingAllowlistListResponse", SHARING_ALLOWLIST_LIST_RESPONSE_FIELDS, StructVisitor)
24486    }
24487}
24488
24489impl ::serde::ser::Serialize for SharingAllowlistListResponse {
24490    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24491        // struct serializer
24492        use serde::ser::SerializeStruct;
24493        let mut s = serializer.serialize_struct("SharingAllowlistListResponse", 4)?;
24494        self.internal_serialize::<S>(&mut s)?;
24495        s.end()
24496    }
24497}
24498
24499#[derive(Debug, Clone, PartialEq, Eq, Default)]
24500#[non_exhaustive] // structs may have more fields added in the future.
24501pub struct SharingAllowlistRemoveArgs {
24502    /// List of domains represented by valid string representation (RFC-1034/5).
24503    pub domains: Option<Vec<String>>,
24504    /// List of emails represented by valid string representation (RFC-5322/822).
24505    pub emails: Option<Vec<String>>,
24506}
24507
24508impl SharingAllowlistRemoveArgs {
24509    pub fn with_domains(mut self, value: Vec<String>) -> Self {
24510        self.domains = Some(value);
24511        self
24512    }
24513
24514    pub fn with_emails(mut self, value: Vec<String>) -> Self {
24515        self.emails = Some(value);
24516        self
24517    }
24518}
24519
24520const SHARING_ALLOWLIST_REMOVE_ARGS_FIELDS: &[&str] = &["domains",
24521                                                        "emails"];
24522impl SharingAllowlistRemoveArgs {
24523    // no _opt deserializer
24524    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24525        mut map: V,
24526    ) -> Result<SharingAllowlistRemoveArgs, V::Error> {
24527        let mut field_domains = None;
24528        let mut field_emails = None;
24529        while let Some(key) = map.next_key::<&str>()? {
24530            match key {
24531                "domains" => {
24532                    if field_domains.is_some() {
24533                        return Err(::serde::de::Error::duplicate_field("domains"));
24534                    }
24535                    field_domains = Some(map.next_value()?);
24536                }
24537                "emails" => {
24538                    if field_emails.is_some() {
24539                        return Err(::serde::de::Error::duplicate_field("emails"));
24540                    }
24541                    field_emails = Some(map.next_value()?);
24542                }
24543                _ => {
24544                    // unknown field allowed and ignored
24545                    map.next_value::<::serde_json::Value>()?;
24546                }
24547            }
24548        }
24549        let result = SharingAllowlistRemoveArgs {
24550            domains: field_domains.and_then(Option::flatten),
24551            emails: field_emails.and_then(Option::flatten),
24552        };
24553        Ok(result)
24554    }
24555
24556    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24557        &self,
24558        s: &mut S::SerializeStruct,
24559    ) -> Result<(), S::Error> {
24560        use serde::ser::SerializeStruct;
24561        if let Some(val) = &self.domains {
24562            s.serialize_field("domains", val)?;
24563        }
24564        if let Some(val) = &self.emails {
24565            s.serialize_field("emails", val)?;
24566        }
24567        Ok(())
24568    }
24569}
24570
24571impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveArgs {
24572    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24573        // struct deserializer
24574        use serde::de::{MapAccess, Visitor};
24575        struct StructVisitor;
24576        impl<'de> Visitor<'de> for StructVisitor {
24577            type Value = SharingAllowlistRemoveArgs;
24578            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24579                f.write_str("a SharingAllowlistRemoveArgs struct")
24580            }
24581            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24582                SharingAllowlistRemoveArgs::internal_deserialize(map)
24583            }
24584        }
24585        deserializer.deserialize_struct("SharingAllowlistRemoveArgs", SHARING_ALLOWLIST_REMOVE_ARGS_FIELDS, StructVisitor)
24586    }
24587}
24588
24589impl ::serde::ser::Serialize for SharingAllowlistRemoveArgs {
24590    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24591        // struct serializer
24592        use serde::ser::SerializeStruct;
24593        let mut s = serializer.serialize_struct("SharingAllowlistRemoveArgs", 2)?;
24594        self.internal_serialize::<S>(&mut s)?;
24595        s.end()
24596    }
24597}
24598
24599#[derive(Debug, Clone, PartialEq, Eq)]
24600#[non_exhaustive] // variants may be added in the future
24601pub enum SharingAllowlistRemoveError {
24602    /// One of provided values is not valid.
24603    MalformedEntry(String),
24604    /// One or more provided values do not exist.
24605    EntriesDoNotExist(String),
24606    /// Neither single domain nor email provided.
24607    NoEntriesProvided,
24608    /// Too many entries provided within one call.
24609    TooManyEntriesProvided,
24610    /// Unknown error.
24611    UnknownError,
24612    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24613    /// typically indicates that this SDK version is out of date.
24614    Other,
24615}
24616
24617impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveError {
24618    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24619        // union deserializer
24620        use serde::de::{self, MapAccess, Visitor};
24621        struct EnumVisitor;
24622        impl<'de> Visitor<'de> for EnumVisitor {
24623            type Value = SharingAllowlistRemoveError;
24624            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24625                f.write_str("a SharingAllowlistRemoveError structure")
24626            }
24627            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24628                let tag: &str = match map.next_key()? {
24629                    Some(".tag") => map.next_value()?,
24630                    _ => return Err(de::Error::missing_field(".tag"))
24631                };
24632                let value = match tag {
24633                    "malformed_entry" => {
24634                        match map.next_key()? {
24635                            Some("malformed_entry") => SharingAllowlistRemoveError::MalformedEntry(map.next_value()?),
24636                            None => return Err(de::Error::missing_field("malformed_entry")),
24637                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24638                        }
24639                    }
24640                    "entries_do_not_exist" => {
24641                        match map.next_key()? {
24642                            Some("entries_do_not_exist") => SharingAllowlistRemoveError::EntriesDoNotExist(map.next_value()?),
24643                            None => return Err(de::Error::missing_field("entries_do_not_exist")),
24644                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24645                        }
24646                    }
24647                    "no_entries_provided" => SharingAllowlistRemoveError::NoEntriesProvided,
24648                    "too_many_entries_provided" => SharingAllowlistRemoveError::TooManyEntriesProvided,
24649                    "unknown_error" => SharingAllowlistRemoveError::UnknownError,
24650                    _ => SharingAllowlistRemoveError::Other,
24651                };
24652                crate::eat_json_fields(&mut map)?;
24653                Ok(value)
24654            }
24655        }
24656        const VARIANTS: &[&str] = &["malformed_entry",
24657                                    "entries_do_not_exist",
24658                                    "no_entries_provided",
24659                                    "too_many_entries_provided",
24660                                    "unknown_error",
24661                                    "other"];
24662        deserializer.deserialize_struct("SharingAllowlistRemoveError", VARIANTS, EnumVisitor)
24663    }
24664}
24665
24666impl ::serde::ser::Serialize for SharingAllowlistRemoveError {
24667    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24668        // union serializer
24669        use serde::ser::SerializeStruct;
24670        match self {
24671            SharingAllowlistRemoveError::MalformedEntry(x) => {
24672                // primitive
24673                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 2)?;
24674                s.serialize_field(".tag", "malformed_entry")?;
24675                s.serialize_field("malformed_entry", x)?;
24676                s.end()
24677            }
24678            SharingAllowlistRemoveError::EntriesDoNotExist(x) => {
24679                // primitive
24680                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 2)?;
24681                s.serialize_field(".tag", "entries_do_not_exist")?;
24682                s.serialize_field("entries_do_not_exist", x)?;
24683                s.end()
24684            }
24685            SharingAllowlistRemoveError::NoEntriesProvided => {
24686                // unit
24687                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24688                s.serialize_field(".tag", "no_entries_provided")?;
24689                s.end()
24690            }
24691            SharingAllowlistRemoveError::TooManyEntriesProvided => {
24692                // unit
24693                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24694                s.serialize_field(".tag", "too_many_entries_provided")?;
24695                s.end()
24696            }
24697            SharingAllowlistRemoveError::UnknownError => {
24698                // unit
24699                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24700                s.serialize_field(".tag", "unknown_error")?;
24701                s.end()
24702            }
24703            SharingAllowlistRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24704        }
24705    }
24706}
24707
24708impl ::std::error::Error for SharingAllowlistRemoveError {
24709}
24710
24711impl ::std::fmt::Display for SharingAllowlistRemoveError {
24712    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24713        match self {
24714            SharingAllowlistRemoveError::MalformedEntry(inner) => write!(f, "One of provided values is not valid: {:?}", inner),
24715            SharingAllowlistRemoveError::EntriesDoNotExist(inner) => write!(f, "One or more provided values do not exist: {:?}", inner),
24716            SharingAllowlistRemoveError::NoEntriesProvided => f.write_str("Neither single domain nor email provided."),
24717            SharingAllowlistRemoveError::TooManyEntriesProvided => f.write_str("Too many entries provided within one call."),
24718            SharingAllowlistRemoveError::UnknownError => f.write_str("Unknown error."),
24719            _ => write!(f, "{:?}", *self),
24720        }
24721    }
24722}
24723
24724/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
24725/// Stone.
24726#[derive(Debug, Clone, PartialEq, Eq, Default)]
24727#[non_exhaustive] // structs may have more fields added in the future.
24728pub struct SharingAllowlistRemoveResponse {
24729}
24730
24731const SHARING_ALLOWLIST_REMOVE_RESPONSE_FIELDS: &[&str] = &[];
24732impl SharingAllowlistRemoveResponse {
24733    // no _opt deserializer
24734    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24735        mut map: V,
24736    ) -> Result<SharingAllowlistRemoveResponse, V::Error> {
24737        // ignore any fields found; none are presently recognized
24738        crate::eat_json_fields(&mut map)?;
24739        Ok(SharingAllowlistRemoveResponse {})
24740    }
24741}
24742
24743impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveResponse {
24744    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24745        // struct deserializer
24746        use serde::de::{MapAccess, Visitor};
24747        struct StructVisitor;
24748        impl<'de> Visitor<'de> for StructVisitor {
24749            type Value = SharingAllowlistRemoveResponse;
24750            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24751                f.write_str("a SharingAllowlistRemoveResponse struct")
24752            }
24753            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24754                SharingAllowlistRemoveResponse::internal_deserialize(map)
24755            }
24756        }
24757        deserializer.deserialize_struct("SharingAllowlistRemoveResponse", SHARING_ALLOWLIST_REMOVE_RESPONSE_FIELDS, StructVisitor)
24758    }
24759}
24760
24761impl ::serde::ser::Serialize for SharingAllowlistRemoveResponse {
24762    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24763        // struct serializer
24764        use serde::ser::SerializeStruct;
24765        serializer.serialize_struct("SharingAllowlistRemoveResponse", 0)?.end()
24766    }
24767}
24768
24769/// Describes the number of users in a specific storage bucket.
24770#[derive(Debug, Clone, PartialEq, Eq)]
24771#[non_exhaustive] // structs may have more fields added in the future.
24772pub struct StorageBucket {
24773    /// The name of the storage bucket. For example, '1G' is a bucket of users with storage size up
24774    /// to 1 Giga.
24775    pub bucket: String,
24776    /// The number of people whose storage is in the range of this storage bucket.
24777    pub users: u64,
24778}
24779
24780impl StorageBucket {
24781    pub fn new(bucket: String, users: u64) -> Self {
24782        StorageBucket {
24783            bucket,
24784            users,
24785        }
24786    }
24787}
24788
24789const STORAGE_BUCKET_FIELDS: &[&str] = &["bucket",
24790                                         "users"];
24791impl StorageBucket {
24792    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24793        map: V,
24794    ) -> Result<StorageBucket, V::Error> {
24795        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24796    }
24797
24798    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24799        mut map: V,
24800        optional: bool,
24801    ) -> Result<Option<StorageBucket>, V::Error> {
24802        let mut field_bucket = None;
24803        let mut field_users = None;
24804        let mut nothing = true;
24805        while let Some(key) = map.next_key::<&str>()? {
24806            nothing = false;
24807            match key {
24808                "bucket" => {
24809                    if field_bucket.is_some() {
24810                        return Err(::serde::de::Error::duplicate_field("bucket"));
24811                    }
24812                    field_bucket = Some(map.next_value()?);
24813                }
24814                "users" => {
24815                    if field_users.is_some() {
24816                        return Err(::serde::de::Error::duplicate_field("users"));
24817                    }
24818                    field_users = Some(map.next_value()?);
24819                }
24820                _ => {
24821                    // unknown field allowed and ignored
24822                    map.next_value::<::serde_json::Value>()?;
24823                }
24824            }
24825        }
24826        if optional && nothing {
24827            return Ok(None);
24828        }
24829        let result = StorageBucket {
24830            bucket: field_bucket.ok_or_else(|| ::serde::de::Error::missing_field("bucket"))?,
24831            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
24832        };
24833        Ok(Some(result))
24834    }
24835
24836    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24837        &self,
24838        s: &mut S::SerializeStruct,
24839    ) -> Result<(), S::Error> {
24840        use serde::ser::SerializeStruct;
24841        s.serialize_field("bucket", &self.bucket)?;
24842        s.serialize_field("users", &self.users)?;
24843        Ok(())
24844    }
24845}
24846
24847impl<'de> ::serde::de::Deserialize<'de> for StorageBucket {
24848    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24849        // struct deserializer
24850        use serde::de::{MapAccess, Visitor};
24851        struct StructVisitor;
24852        impl<'de> Visitor<'de> for StructVisitor {
24853            type Value = StorageBucket;
24854            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24855                f.write_str("a StorageBucket struct")
24856            }
24857            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24858                StorageBucket::internal_deserialize(map)
24859            }
24860        }
24861        deserializer.deserialize_struct("StorageBucket", STORAGE_BUCKET_FIELDS, StructVisitor)
24862    }
24863}
24864
24865impl ::serde::ser::Serialize for StorageBucket {
24866    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24867        // struct serializer
24868        use serde::ser::SerializeStruct;
24869        let mut s = serializer.serialize_struct("StorageBucket", 2)?;
24870        self.internal_serialize::<S>(&mut s)?;
24871        s.end()
24872    }
24873}
24874
24875#[derive(Debug, Clone, PartialEq, Eq)]
24876#[non_exhaustive] // variants may be added in the future
24877pub enum TeamFolderAccessError {
24878    /// The team folder ID is invalid.
24879    InvalidTeamFolderId,
24880    /// The authenticated app does not have permission to manage that team folder.
24881    NoAccess,
24882    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24883    /// typically indicates that this SDK version is out of date.
24884    Other,
24885}
24886
24887impl<'de> ::serde::de::Deserialize<'de> for TeamFolderAccessError {
24888    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24889        // union deserializer
24890        use serde::de::{self, MapAccess, Visitor};
24891        struct EnumVisitor;
24892        impl<'de> Visitor<'de> for EnumVisitor {
24893            type Value = TeamFolderAccessError;
24894            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24895                f.write_str("a TeamFolderAccessError structure")
24896            }
24897            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24898                let tag: &str = match map.next_key()? {
24899                    Some(".tag") => map.next_value()?,
24900                    _ => return Err(de::Error::missing_field(".tag"))
24901                };
24902                let value = match tag {
24903                    "invalid_team_folder_id" => TeamFolderAccessError::InvalidTeamFolderId,
24904                    "no_access" => TeamFolderAccessError::NoAccess,
24905                    _ => TeamFolderAccessError::Other,
24906                };
24907                crate::eat_json_fields(&mut map)?;
24908                Ok(value)
24909            }
24910        }
24911        const VARIANTS: &[&str] = &["invalid_team_folder_id",
24912                                    "no_access",
24913                                    "other"];
24914        deserializer.deserialize_struct("TeamFolderAccessError", VARIANTS, EnumVisitor)
24915    }
24916}
24917
24918impl ::serde::ser::Serialize for TeamFolderAccessError {
24919    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24920        // union serializer
24921        use serde::ser::SerializeStruct;
24922        match self {
24923            TeamFolderAccessError::InvalidTeamFolderId => {
24924                // unit
24925                let mut s = serializer.serialize_struct("TeamFolderAccessError", 1)?;
24926                s.serialize_field(".tag", "invalid_team_folder_id")?;
24927                s.end()
24928            }
24929            TeamFolderAccessError::NoAccess => {
24930                // unit
24931                let mut s = serializer.serialize_struct("TeamFolderAccessError", 1)?;
24932                s.serialize_field(".tag", "no_access")?;
24933                s.end()
24934            }
24935            TeamFolderAccessError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24936        }
24937    }
24938}
24939
24940impl ::std::error::Error for TeamFolderAccessError {
24941}
24942
24943impl ::std::fmt::Display for TeamFolderAccessError {
24944    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24945        match self {
24946            TeamFolderAccessError::InvalidTeamFolderId => f.write_str("The team folder ID is invalid."),
24947            TeamFolderAccessError::NoAccess => f.write_str("The authenticated app does not have permission to manage that team folder."),
24948            _ => write!(f, "{:?}", *self),
24949        }
24950    }
24951}
24952
24953
24954#[derive(Debug, Clone, PartialEq, Eq)]
24955#[non_exhaustive] // variants may be added in the future
24956pub enum TeamFolderActivateError {
24957    AccessError(TeamFolderAccessError),
24958    StatusError(TeamFolderInvalidStatusError),
24959    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
24960    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24961    /// typically indicates that this SDK version is out of date.
24962    Other,
24963}
24964
24965impl<'de> ::serde::de::Deserialize<'de> for TeamFolderActivateError {
24966    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24967        // union deserializer
24968        use serde::de::{self, MapAccess, Visitor};
24969        struct EnumVisitor;
24970        impl<'de> Visitor<'de> for EnumVisitor {
24971            type Value = TeamFolderActivateError;
24972            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24973                f.write_str("a TeamFolderActivateError structure")
24974            }
24975            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24976                let tag: &str = match map.next_key()? {
24977                    Some(".tag") => map.next_value()?,
24978                    _ => return Err(de::Error::missing_field(".tag"))
24979                };
24980                let value = match tag {
24981                    "access_error" => {
24982                        match map.next_key()? {
24983                            Some("access_error") => TeamFolderActivateError::AccessError(map.next_value()?),
24984                            None => return Err(de::Error::missing_field("access_error")),
24985                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24986                        }
24987                    }
24988                    "status_error" => {
24989                        match map.next_key()? {
24990                            Some("status_error") => TeamFolderActivateError::StatusError(map.next_value()?),
24991                            None => return Err(de::Error::missing_field("status_error")),
24992                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24993                        }
24994                    }
24995                    "team_shared_dropbox_error" => {
24996                        match map.next_key()? {
24997                            Some("team_shared_dropbox_error") => TeamFolderActivateError::TeamSharedDropboxError(map.next_value()?),
24998                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
24999                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25000                        }
25001                    }
25002                    _ => TeamFolderActivateError::Other,
25003                };
25004                crate::eat_json_fields(&mut map)?;
25005                Ok(value)
25006            }
25007        }
25008        const VARIANTS: &[&str] = &["access_error",
25009                                    "status_error",
25010                                    "team_shared_dropbox_error",
25011                                    "other"];
25012        deserializer.deserialize_struct("TeamFolderActivateError", VARIANTS, EnumVisitor)
25013    }
25014}
25015
25016impl ::serde::ser::Serialize for TeamFolderActivateError {
25017    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25018        // union serializer
25019        use serde::ser::SerializeStruct;
25020        match self {
25021            TeamFolderActivateError::AccessError(x) => {
25022                // union or polymporphic struct
25023                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
25024                s.serialize_field(".tag", "access_error")?;
25025                s.serialize_field("access_error", x)?;
25026                s.end()
25027            }
25028            TeamFolderActivateError::StatusError(x) => {
25029                // union or polymporphic struct
25030                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
25031                s.serialize_field(".tag", "status_error")?;
25032                s.serialize_field("status_error", x)?;
25033                s.end()
25034            }
25035            TeamFolderActivateError::TeamSharedDropboxError(x) => {
25036                // union or polymporphic struct
25037                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
25038                s.serialize_field(".tag", "team_shared_dropbox_error")?;
25039                s.serialize_field("team_shared_dropbox_error", x)?;
25040                s.end()
25041            }
25042            TeamFolderActivateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25043        }
25044    }
25045}
25046
25047impl ::std::error::Error for TeamFolderActivateError {
25048    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
25049        match self {
25050            TeamFolderActivateError::AccessError(inner) => Some(inner),
25051            TeamFolderActivateError::StatusError(inner) => Some(inner),
25052            TeamFolderActivateError::TeamSharedDropboxError(inner) => Some(inner),
25053            _ => None,
25054        }
25055    }
25056}
25057
25058impl ::std::fmt::Display for TeamFolderActivateError {
25059    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25060        match self {
25061            TeamFolderActivateError::AccessError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25062            TeamFolderActivateError::StatusError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25063            TeamFolderActivateError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25064            _ => write!(f, "{:?}", *self),
25065        }
25066    }
25067}
25068
25069// union extends BaseTeamFolderError
25070impl From<BaseTeamFolderError> for TeamFolderActivateError {
25071    fn from(parent: BaseTeamFolderError) -> Self {
25072        match parent {
25073            BaseTeamFolderError::AccessError(x) => TeamFolderActivateError::AccessError(x),
25074            BaseTeamFolderError::StatusError(x) => TeamFolderActivateError::StatusError(x),
25075            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderActivateError::TeamSharedDropboxError(x),
25076            BaseTeamFolderError::Other => TeamFolderActivateError::Other,
25077        }
25078    }
25079}
25080#[derive(Debug, Clone, PartialEq, Eq)]
25081#[non_exhaustive] // structs may have more fields added in the future.
25082pub struct TeamFolderArchiveArg {
25083    /// The ID of the team folder.
25084    pub team_folder_id: crate::types::common::SharedFolderId,
25085    /// Whether to force the archive to happen synchronously.
25086    pub force_async_off: bool,
25087}
25088
25089impl TeamFolderArchiveArg {
25090    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
25091        TeamFolderArchiveArg {
25092            team_folder_id,
25093            force_async_off: false,
25094        }
25095    }
25096
25097    pub fn with_force_async_off(mut self, value: bool) -> Self {
25098        self.force_async_off = value;
25099        self
25100    }
25101}
25102
25103const TEAM_FOLDER_ARCHIVE_ARG_FIELDS: &[&str] = &["team_folder_id",
25104                                                  "force_async_off"];
25105impl TeamFolderArchiveArg {
25106    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25107        map: V,
25108    ) -> Result<TeamFolderArchiveArg, V::Error> {
25109        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25110    }
25111
25112    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25113        mut map: V,
25114        optional: bool,
25115    ) -> Result<Option<TeamFolderArchiveArg>, V::Error> {
25116        let mut field_team_folder_id = None;
25117        let mut field_force_async_off = None;
25118        let mut nothing = true;
25119        while let Some(key) = map.next_key::<&str>()? {
25120            nothing = false;
25121            match key {
25122                "team_folder_id" => {
25123                    if field_team_folder_id.is_some() {
25124                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
25125                    }
25126                    field_team_folder_id = Some(map.next_value()?);
25127                }
25128                "force_async_off" => {
25129                    if field_force_async_off.is_some() {
25130                        return Err(::serde::de::Error::duplicate_field("force_async_off"));
25131                    }
25132                    field_force_async_off = Some(map.next_value()?);
25133                }
25134                _ => {
25135                    // unknown field allowed and ignored
25136                    map.next_value::<::serde_json::Value>()?;
25137                }
25138            }
25139        }
25140        if optional && nothing {
25141            return Ok(None);
25142        }
25143        let result = TeamFolderArchiveArg {
25144            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
25145            force_async_off: field_force_async_off.unwrap_or(false),
25146        };
25147        Ok(Some(result))
25148    }
25149
25150    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25151        &self,
25152        s: &mut S::SerializeStruct,
25153    ) -> Result<(), S::Error> {
25154        use serde::ser::SerializeStruct;
25155        s.serialize_field("team_folder_id", &self.team_folder_id)?;
25156        if self.force_async_off {
25157            s.serialize_field("force_async_off", &self.force_async_off)?;
25158        }
25159        Ok(())
25160    }
25161}
25162
25163impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveArg {
25164    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25165        // struct deserializer
25166        use serde::de::{MapAccess, Visitor};
25167        struct StructVisitor;
25168        impl<'de> Visitor<'de> for StructVisitor {
25169            type Value = TeamFolderArchiveArg;
25170            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25171                f.write_str("a TeamFolderArchiveArg struct")
25172            }
25173            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25174                TeamFolderArchiveArg::internal_deserialize(map)
25175            }
25176        }
25177        deserializer.deserialize_struct("TeamFolderArchiveArg", TEAM_FOLDER_ARCHIVE_ARG_FIELDS, StructVisitor)
25178    }
25179}
25180
25181impl ::serde::ser::Serialize for TeamFolderArchiveArg {
25182    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25183        // struct serializer
25184        use serde::ser::SerializeStruct;
25185        let mut s = serializer.serialize_struct("TeamFolderArchiveArg", 2)?;
25186        self.internal_serialize::<S>(&mut s)?;
25187        s.end()
25188    }
25189}
25190
25191// struct extends TeamFolderIdArg
25192impl From<TeamFolderArchiveArg> for TeamFolderIdArg {
25193    fn from(subtype: TeamFolderArchiveArg) -> Self {
25194        Self {
25195            team_folder_id: subtype.team_folder_id,
25196        }
25197    }
25198}
25199
25200#[derive(Debug, Clone, PartialEq, Eq)]
25201#[non_exhaustive] // variants may be added in the future
25202pub enum TeamFolderArchiveError {
25203    AccessError(TeamFolderAccessError),
25204    StatusError(TeamFolderInvalidStatusError),
25205    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
25206    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25207    /// typically indicates that this SDK version is out of date.
25208    Other,
25209}
25210
25211impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveError {
25212    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25213        // union deserializer
25214        use serde::de::{self, MapAccess, Visitor};
25215        struct EnumVisitor;
25216        impl<'de> Visitor<'de> for EnumVisitor {
25217            type Value = TeamFolderArchiveError;
25218            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25219                f.write_str("a TeamFolderArchiveError structure")
25220            }
25221            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25222                let tag: &str = match map.next_key()? {
25223                    Some(".tag") => map.next_value()?,
25224                    _ => return Err(de::Error::missing_field(".tag"))
25225                };
25226                let value = match tag {
25227                    "access_error" => {
25228                        match map.next_key()? {
25229                            Some("access_error") => TeamFolderArchiveError::AccessError(map.next_value()?),
25230                            None => return Err(de::Error::missing_field("access_error")),
25231                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25232                        }
25233                    }
25234                    "status_error" => {
25235                        match map.next_key()? {
25236                            Some("status_error") => TeamFolderArchiveError::StatusError(map.next_value()?),
25237                            None => return Err(de::Error::missing_field("status_error")),
25238                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25239                        }
25240                    }
25241                    "team_shared_dropbox_error" => {
25242                        match map.next_key()? {
25243                            Some("team_shared_dropbox_error") => TeamFolderArchiveError::TeamSharedDropboxError(map.next_value()?),
25244                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
25245                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25246                        }
25247                    }
25248                    _ => TeamFolderArchiveError::Other,
25249                };
25250                crate::eat_json_fields(&mut map)?;
25251                Ok(value)
25252            }
25253        }
25254        const VARIANTS: &[&str] = &["access_error",
25255                                    "status_error",
25256                                    "team_shared_dropbox_error",
25257                                    "other"];
25258        deserializer.deserialize_struct("TeamFolderArchiveError", VARIANTS, EnumVisitor)
25259    }
25260}
25261
25262impl ::serde::ser::Serialize for TeamFolderArchiveError {
25263    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25264        // union serializer
25265        use serde::ser::SerializeStruct;
25266        match self {
25267            TeamFolderArchiveError::AccessError(x) => {
25268                // union or polymporphic struct
25269                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
25270                s.serialize_field(".tag", "access_error")?;
25271                s.serialize_field("access_error", x)?;
25272                s.end()
25273            }
25274            TeamFolderArchiveError::StatusError(x) => {
25275                // union or polymporphic struct
25276                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
25277                s.serialize_field(".tag", "status_error")?;
25278                s.serialize_field("status_error", x)?;
25279                s.end()
25280            }
25281            TeamFolderArchiveError::TeamSharedDropboxError(x) => {
25282                // union or polymporphic struct
25283                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
25284                s.serialize_field(".tag", "team_shared_dropbox_error")?;
25285                s.serialize_field("team_shared_dropbox_error", x)?;
25286                s.end()
25287            }
25288            TeamFolderArchiveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25289        }
25290    }
25291}
25292
25293impl ::std::error::Error for TeamFolderArchiveError {
25294    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
25295        match self {
25296            TeamFolderArchiveError::AccessError(inner) => Some(inner),
25297            TeamFolderArchiveError::StatusError(inner) => Some(inner),
25298            TeamFolderArchiveError::TeamSharedDropboxError(inner) => Some(inner),
25299            _ => None,
25300        }
25301    }
25302}
25303
25304impl ::std::fmt::Display for TeamFolderArchiveError {
25305    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25306        match self {
25307            TeamFolderArchiveError::AccessError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
25308            TeamFolderArchiveError::StatusError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
25309            TeamFolderArchiveError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
25310            _ => write!(f, "{:?}", *self),
25311        }
25312    }
25313}
25314
25315// union extends BaseTeamFolderError
25316impl From<BaseTeamFolderError> for TeamFolderArchiveError {
25317    fn from(parent: BaseTeamFolderError) -> Self {
25318        match parent {
25319            BaseTeamFolderError::AccessError(x) => TeamFolderArchiveError::AccessError(x),
25320            BaseTeamFolderError::StatusError(x) => TeamFolderArchiveError::StatusError(x),
25321            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderArchiveError::TeamSharedDropboxError(x),
25322            BaseTeamFolderError::Other => TeamFolderArchiveError::Other,
25323        }
25324    }
25325}
25326#[derive(Debug, Clone, PartialEq, Eq)]
25327pub enum TeamFolderArchiveJobStatus {
25328    /// The asynchronous job is still in progress.
25329    InProgress,
25330    /// The archive job has finished. The value is the metadata for the resulting team folder.
25331    Complete(TeamFolderMetadata),
25332    /// Error occurred while performing an asynchronous job from
25333    /// [`team_folder_archive()`](crate::team::team_folder_archive).
25334    Failed(TeamFolderArchiveError),
25335}
25336
25337impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveJobStatus {
25338    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25339        // union deserializer
25340        use serde::de::{self, MapAccess, Visitor};
25341        struct EnumVisitor;
25342        impl<'de> Visitor<'de> for EnumVisitor {
25343            type Value = TeamFolderArchiveJobStatus;
25344            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25345                f.write_str("a TeamFolderArchiveJobStatus structure")
25346            }
25347            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25348                let tag: &str = match map.next_key()? {
25349                    Some(".tag") => map.next_value()?,
25350                    _ => return Err(de::Error::missing_field(".tag"))
25351                };
25352                let value = match tag {
25353                    "in_progress" => TeamFolderArchiveJobStatus::InProgress,
25354                    "complete" => TeamFolderArchiveJobStatus::Complete(TeamFolderMetadata::internal_deserialize(&mut map)?),
25355                    "failed" => {
25356                        match map.next_key()? {
25357                            Some("failed") => TeamFolderArchiveJobStatus::Failed(map.next_value()?),
25358                            None => return Err(de::Error::missing_field("failed")),
25359                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25360                        }
25361                    }
25362                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
25363                };
25364                crate::eat_json_fields(&mut map)?;
25365                Ok(value)
25366            }
25367        }
25368        const VARIANTS: &[&str] = &["in_progress",
25369                                    "complete",
25370                                    "failed"];
25371        deserializer.deserialize_struct("TeamFolderArchiveJobStatus", VARIANTS, EnumVisitor)
25372    }
25373}
25374
25375impl ::serde::ser::Serialize for TeamFolderArchiveJobStatus {
25376    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25377        // union serializer
25378        use serde::ser::SerializeStruct;
25379        match self {
25380            TeamFolderArchiveJobStatus::InProgress => {
25381                // unit
25382                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 1)?;
25383                s.serialize_field(".tag", "in_progress")?;
25384                s.end()
25385            }
25386            TeamFolderArchiveJobStatus::Complete(x) => {
25387                // struct
25388                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 8)?;
25389                s.serialize_field(".tag", "complete")?;
25390                x.internal_serialize::<S>(&mut s)?;
25391                s.end()
25392            }
25393            TeamFolderArchiveJobStatus::Failed(x) => {
25394                // union or polymporphic struct
25395                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 2)?;
25396                s.serialize_field(".tag", "failed")?;
25397                s.serialize_field("failed", x)?;
25398                s.end()
25399            }
25400        }
25401    }
25402}
25403
25404// union extends crate::types::dbx_async::PollResultBase
25405impl From<crate::types::dbx_async::PollResultBase> for TeamFolderArchiveJobStatus {
25406    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
25407        match parent {
25408            crate::types::dbx_async::PollResultBase::InProgress => TeamFolderArchiveJobStatus::InProgress,
25409        }
25410    }
25411}
25412#[derive(Debug, Clone, PartialEq, Eq)]
25413pub enum TeamFolderArchiveLaunch {
25414    /// This response indicates that the processing is asynchronous. The string is an id that can be
25415    /// used to obtain the status of the asynchronous job.
25416    AsyncJobId(crate::types::dbx_async::AsyncJobId),
25417    Complete(TeamFolderMetadata),
25418}
25419
25420impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveLaunch {
25421    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25422        // union deserializer
25423        use serde::de::{self, MapAccess, Visitor};
25424        struct EnumVisitor;
25425        impl<'de> Visitor<'de> for EnumVisitor {
25426            type Value = TeamFolderArchiveLaunch;
25427            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25428                f.write_str("a TeamFolderArchiveLaunch structure")
25429            }
25430            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25431                let tag: &str = match map.next_key()? {
25432                    Some(".tag") => map.next_value()?,
25433                    _ => return Err(de::Error::missing_field(".tag"))
25434                };
25435                let value = match tag {
25436                    "async_job_id" => {
25437                        match map.next_key()? {
25438                            Some("async_job_id") => TeamFolderArchiveLaunch::AsyncJobId(map.next_value()?),
25439                            None => return Err(de::Error::missing_field("async_job_id")),
25440                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25441                        }
25442                    }
25443                    "complete" => TeamFolderArchiveLaunch::Complete(TeamFolderMetadata::internal_deserialize(&mut map)?),
25444                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
25445                };
25446                crate::eat_json_fields(&mut map)?;
25447                Ok(value)
25448            }
25449        }
25450        const VARIANTS: &[&str] = &["async_job_id",
25451                                    "complete"];
25452        deserializer.deserialize_struct("TeamFolderArchiveLaunch", VARIANTS, EnumVisitor)
25453    }
25454}
25455
25456impl ::serde::ser::Serialize for TeamFolderArchiveLaunch {
25457    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25458        // union serializer
25459        use serde::ser::SerializeStruct;
25460        match self {
25461            TeamFolderArchiveLaunch::AsyncJobId(x) => {
25462                // primitive
25463                let mut s = serializer.serialize_struct("TeamFolderArchiveLaunch", 2)?;
25464                s.serialize_field(".tag", "async_job_id")?;
25465                s.serialize_field("async_job_id", x)?;
25466                s.end()
25467            }
25468            TeamFolderArchiveLaunch::Complete(x) => {
25469                // struct
25470                let mut s = serializer.serialize_struct("TeamFolderArchiveLaunch", 8)?;
25471                s.serialize_field(".tag", "complete")?;
25472                x.internal_serialize::<S>(&mut s)?;
25473                s.end()
25474            }
25475        }
25476    }
25477}
25478
25479// union extends crate::types::dbx_async::LaunchResultBase
25480impl From<crate::types::dbx_async::LaunchResultBase> for TeamFolderArchiveLaunch {
25481    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
25482        match parent {
25483            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => TeamFolderArchiveLaunch::AsyncJobId(x),
25484        }
25485    }
25486}
25487#[derive(Debug, Clone, PartialEq, Eq)]
25488#[non_exhaustive] // structs may have more fields added in the future.
25489pub struct TeamFolderCreateArg {
25490    /// Name for the new team folder.
25491    pub name: String,
25492    /// The sync setting to apply to this team folder. Only permitted if the team has team selective
25493    /// sync enabled.
25494    pub sync_setting: Option<crate::types::files::SyncSettingArg>,
25495}
25496
25497impl TeamFolderCreateArg {
25498    pub fn new(name: String) -> Self {
25499        TeamFolderCreateArg {
25500            name,
25501            sync_setting: None,
25502        }
25503    }
25504
25505    pub fn with_sync_setting(mut self, value: crate::types::files::SyncSettingArg) -> Self {
25506        self.sync_setting = Some(value);
25507        self
25508    }
25509}
25510
25511const TEAM_FOLDER_CREATE_ARG_FIELDS: &[&str] = &["name",
25512                                                 "sync_setting"];
25513impl TeamFolderCreateArg {
25514    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25515        map: V,
25516    ) -> Result<TeamFolderCreateArg, V::Error> {
25517        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25518    }
25519
25520    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25521        mut map: V,
25522        optional: bool,
25523    ) -> Result<Option<TeamFolderCreateArg>, V::Error> {
25524        let mut field_name = None;
25525        let mut field_sync_setting = None;
25526        let mut nothing = true;
25527        while let Some(key) = map.next_key::<&str>()? {
25528            nothing = false;
25529            match key {
25530                "name" => {
25531                    if field_name.is_some() {
25532                        return Err(::serde::de::Error::duplicate_field("name"));
25533                    }
25534                    field_name = Some(map.next_value()?);
25535                }
25536                "sync_setting" => {
25537                    if field_sync_setting.is_some() {
25538                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
25539                    }
25540                    field_sync_setting = Some(map.next_value()?);
25541                }
25542                _ => {
25543                    // unknown field allowed and ignored
25544                    map.next_value::<::serde_json::Value>()?;
25545                }
25546            }
25547        }
25548        if optional && nothing {
25549            return Ok(None);
25550        }
25551        let result = TeamFolderCreateArg {
25552            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
25553            sync_setting: field_sync_setting.and_then(Option::flatten),
25554        };
25555        Ok(Some(result))
25556    }
25557
25558    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25559        &self,
25560        s: &mut S::SerializeStruct,
25561    ) -> Result<(), S::Error> {
25562        use serde::ser::SerializeStruct;
25563        s.serialize_field("name", &self.name)?;
25564        if let Some(val) = &self.sync_setting {
25565            s.serialize_field("sync_setting", val)?;
25566        }
25567        Ok(())
25568    }
25569}
25570
25571impl<'de> ::serde::de::Deserialize<'de> for TeamFolderCreateArg {
25572    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25573        // struct deserializer
25574        use serde::de::{MapAccess, Visitor};
25575        struct StructVisitor;
25576        impl<'de> Visitor<'de> for StructVisitor {
25577            type Value = TeamFolderCreateArg;
25578            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25579                f.write_str("a TeamFolderCreateArg struct")
25580            }
25581            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25582                TeamFolderCreateArg::internal_deserialize(map)
25583            }
25584        }
25585        deserializer.deserialize_struct("TeamFolderCreateArg", TEAM_FOLDER_CREATE_ARG_FIELDS, StructVisitor)
25586    }
25587}
25588
25589impl ::serde::ser::Serialize for TeamFolderCreateArg {
25590    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25591        // struct serializer
25592        use serde::ser::SerializeStruct;
25593        let mut s = serializer.serialize_struct("TeamFolderCreateArg", 2)?;
25594        self.internal_serialize::<S>(&mut s)?;
25595        s.end()
25596    }
25597}
25598
25599#[derive(Debug, Clone, PartialEq, Eq)]
25600#[non_exhaustive] // variants may be added in the future
25601pub enum TeamFolderCreateError {
25602    /// The provided name cannot be used.
25603    InvalidFolderName,
25604    /// There is already a team folder with the provided name.
25605    FolderNameAlreadyUsed,
25606    /// The provided name cannot be used because it is reserved.
25607    FolderNameReserved,
25608    /// An error occurred setting the sync settings.
25609    SyncSettingsError(crate::types::files::SyncSettingsError),
25610    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25611    /// typically indicates that this SDK version is out of date.
25612    Other,
25613}
25614
25615impl<'de> ::serde::de::Deserialize<'de> for TeamFolderCreateError {
25616    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25617        // union deserializer
25618        use serde::de::{self, MapAccess, Visitor};
25619        struct EnumVisitor;
25620        impl<'de> Visitor<'de> for EnumVisitor {
25621            type Value = TeamFolderCreateError;
25622            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25623                f.write_str("a TeamFolderCreateError structure")
25624            }
25625            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25626                let tag: &str = match map.next_key()? {
25627                    Some(".tag") => map.next_value()?,
25628                    _ => return Err(de::Error::missing_field(".tag"))
25629                };
25630                let value = match tag {
25631                    "invalid_folder_name" => TeamFolderCreateError::InvalidFolderName,
25632                    "folder_name_already_used" => TeamFolderCreateError::FolderNameAlreadyUsed,
25633                    "folder_name_reserved" => TeamFolderCreateError::FolderNameReserved,
25634                    "sync_settings_error" => {
25635                        match map.next_key()? {
25636                            Some("sync_settings_error") => TeamFolderCreateError::SyncSettingsError(map.next_value()?),
25637                            None => return Err(de::Error::missing_field("sync_settings_error")),
25638                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25639                        }
25640                    }
25641                    _ => TeamFolderCreateError::Other,
25642                };
25643                crate::eat_json_fields(&mut map)?;
25644                Ok(value)
25645            }
25646        }
25647        const VARIANTS: &[&str] = &["invalid_folder_name",
25648                                    "folder_name_already_used",
25649                                    "folder_name_reserved",
25650                                    "sync_settings_error",
25651                                    "other"];
25652        deserializer.deserialize_struct("TeamFolderCreateError", VARIANTS, EnumVisitor)
25653    }
25654}
25655
25656impl ::serde::ser::Serialize for TeamFolderCreateError {
25657    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25658        // union serializer
25659        use serde::ser::SerializeStruct;
25660        match self {
25661            TeamFolderCreateError::InvalidFolderName => {
25662                // unit
25663                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25664                s.serialize_field(".tag", "invalid_folder_name")?;
25665                s.end()
25666            }
25667            TeamFolderCreateError::FolderNameAlreadyUsed => {
25668                // unit
25669                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25670                s.serialize_field(".tag", "folder_name_already_used")?;
25671                s.end()
25672            }
25673            TeamFolderCreateError::FolderNameReserved => {
25674                // unit
25675                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25676                s.serialize_field(".tag", "folder_name_reserved")?;
25677                s.end()
25678            }
25679            TeamFolderCreateError::SyncSettingsError(x) => {
25680                // union or polymporphic struct
25681                let mut s = serializer.serialize_struct("TeamFolderCreateError", 2)?;
25682                s.serialize_field(".tag", "sync_settings_error")?;
25683                s.serialize_field("sync_settings_error", x)?;
25684                s.end()
25685            }
25686            TeamFolderCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25687        }
25688    }
25689}
25690
25691impl ::std::error::Error for TeamFolderCreateError {
25692    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
25693        match self {
25694            TeamFolderCreateError::SyncSettingsError(inner) => Some(inner),
25695            _ => None,
25696        }
25697    }
25698}
25699
25700impl ::std::fmt::Display for TeamFolderCreateError {
25701    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25702        match self {
25703            TeamFolderCreateError::InvalidFolderName => f.write_str("The provided name cannot be used."),
25704            TeamFolderCreateError::FolderNameAlreadyUsed => f.write_str("There is already a team folder with the provided name."),
25705            TeamFolderCreateError::FolderNameReserved => f.write_str("The provided name cannot be used because it is reserved."),
25706            TeamFolderCreateError::SyncSettingsError(inner) => write!(f, "An error occurred setting the sync settings: {}", inner),
25707            _ => write!(f, "{:?}", *self),
25708        }
25709    }
25710}
25711
25712#[derive(Debug, Clone, PartialEq, Eq)]
25713pub enum TeamFolderGetInfoItem {
25714    /// An ID that was provided as a parameter to
25715    /// [`team_folder_get_info()`](crate::team::team_folder_get_info) did not match any of the
25716    /// team's team folders.
25717    IdNotFound(String),
25718    /// Properties of a team folder.
25719    TeamFolderMetadata(TeamFolderMetadata),
25720}
25721
25722impl<'de> ::serde::de::Deserialize<'de> for TeamFolderGetInfoItem {
25723    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25724        // union deserializer
25725        use serde::de::{self, MapAccess, Visitor};
25726        struct EnumVisitor;
25727        impl<'de> Visitor<'de> for EnumVisitor {
25728            type Value = TeamFolderGetInfoItem;
25729            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25730                f.write_str("a TeamFolderGetInfoItem structure")
25731            }
25732            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25733                let tag: &str = match map.next_key()? {
25734                    Some(".tag") => map.next_value()?,
25735                    _ => return Err(de::Error::missing_field(".tag"))
25736                };
25737                let value = match tag {
25738                    "id_not_found" => {
25739                        match map.next_key()? {
25740                            Some("id_not_found") => TeamFolderGetInfoItem::IdNotFound(map.next_value()?),
25741                            None => return Err(de::Error::missing_field("id_not_found")),
25742                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25743                        }
25744                    }
25745                    "team_folder_metadata" => TeamFolderGetInfoItem::TeamFolderMetadata(TeamFolderMetadata::internal_deserialize(&mut map)?),
25746                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
25747                };
25748                crate::eat_json_fields(&mut map)?;
25749                Ok(value)
25750            }
25751        }
25752        const VARIANTS: &[&str] = &["id_not_found",
25753                                    "team_folder_metadata"];
25754        deserializer.deserialize_struct("TeamFolderGetInfoItem", VARIANTS, EnumVisitor)
25755    }
25756}
25757
25758impl ::serde::ser::Serialize for TeamFolderGetInfoItem {
25759    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25760        // union serializer
25761        use serde::ser::SerializeStruct;
25762        match self {
25763            TeamFolderGetInfoItem::IdNotFound(x) => {
25764                // primitive
25765                let mut s = serializer.serialize_struct("TeamFolderGetInfoItem", 2)?;
25766                s.serialize_field(".tag", "id_not_found")?;
25767                s.serialize_field("id_not_found", x)?;
25768                s.end()
25769            }
25770            TeamFolderGetInfoItem::TeamFolderMetadata(x) => {
25771                // struct
25772                let mut s = serializer.serialize_struct("TeamFolderGetInfoItem", 8)?;
25773                s.serialize_field(".tag", "team_folder_metadata")?;
25774                x.internal_serialize::<S>(&mut s)?;
25775                s.end()
25776            }
25777        }
25778    }
25779}
25780
25781#[derive(Debug, Clone, PartialEq, Eq)]
25782#[non_exhaustive] // structs may have more fields added in the future.
25783pub struct TeamFolderIdArg {
25784    /// The ID of the team folder.
25785    pub team_folder_id: crate::types::common::SharedFolderId,
25786}
25787
25788impl TeamFolderIdArg {
25789    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
25790        TeamFolderIdArg {
25791            team_folder_id,
25792        }
25793    }
25794}
25795
25796const TEAM_FOLDER_ID_ARG_FIELDS: &[&str] = &["team_folder_id"];
25797impl TeamFolderIdArg {
25798    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25799        map: V,
25800    ) -> Result<TeamFolderIdArg, V::Error> {
25801        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25802    }
25803
25804    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25805        mut map: V,
25806        optional: bool,
25807    ) -> Result<Option<TeamFolderIdArg>, V::Error> {
25808        let mut field_team_folder_id = None;
25809        let mut nothing = true;
25810        while let Some(key) = map.next_key::<&str>()? {
25811            nothing = false;
25812            match key {
25813                "team_folder_id" => {
25814                    if field_team_folder_id.is_some() {
25815                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
25816                    }
25817                    field_team_folder_id = Some(map.next_value()?);
25818                }
25819                _ => {
25820                    // unknown field allowed and ignored
25821                    map.next_value::<::serde_json::Value>()?;
25822                }
25823            }
25824        }
25825        if optional && nothing {
25826            return Ok(None);
25827        }
25828        let result = TeamFolderIdArg {
25829            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
25830        };
25831        Ok(Some(result))
25832    }
25833
25834    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25835        &self,
25836        s: &mut S::SerializeStruct,
25837    ) -> Result<(), S::Error> {
25838        use serde::ser::SerializeStruct;
25839        s.serialize_field("team_folder_id", &self.team_folder_id)?;
25840        Ok(())
25841    }
25842}
25843
25844impl<'de> ::serde::de::Deserialize<'de> for TeamFolderIdArg {
25845    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25846        // struct deserializer
25847        use serde::de::{MapAccess, Visitor};
25848        struct StructVisitor;
25849        impl<'de> Visitor<'de> for StructVisitor {
25850            type Value = TeamFolderIdArg;
25851            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25852                f.write_str("a TeamFolderIdArg struct")
25853            }
25854            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25855                TeamFolderIdArg::internal_deserialize(map)
25856            }
25857        }
25858        deserializer.deserialize_struct("TeamFolderIdArg", TEAM_FOLDER_ID_ARG_FIELDS, StructVisitor)
25859    }
25860}
25861
25862impl ::serde::ser::Serialize for TeamFolderIdArg {
25863    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25864        // struct serializer
25865        use serde::ser::SerializeStruct;
25866        let mut s = serializer.serialize_struct("TeamFolderIdArg", 1)?;
25867        self.internal_serialize::<S>(&mut s)?;
25868        s.end()
25869    }
25870}
25871
25872#[derive(Debug, Clone, PartialEq, Eq)]
25873#[non_exhaustive] // structs may have more fields added in the future.
25874pub struct TeamFolderIdListArg {
25875    /// The list of team folder IDs.
25876    pub team_folder_ids: Vec<crate::types::common::SharedFolderId>,
25877}
25878
25879impl TeamFolderIdListArg {
25880    pub fn new(team_folder_ids: Vec<crate::types::common::SharedFolderId>) -> Self {
25881        TeamFolderIdListArg {
25882            team_folder_ids,
25883        }
25884    }
25885}
25886
25887const TEAM_FOLDER_ID_LIST_ARG_FIELDS: &[&str] = &["team_folder_ids"];
25888impl TeamFolderIdListArg {
25889    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25890        map: V,
25891    ) -> Result<TeamFolderIdListArg, V::Error> {
25892        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25893    }
25894
25895    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25896        mut map: V,
25897        optional: bool,
25898    ) -> Result<Option<TeamFolderIdListArg>, V::Error> {
25899        let mut field_team_folder_ids = None;
25900        let mut nothing = true;
25901        while let Some(key) = map.next_key::<&str>()? {
25902            nothing = false;
25903            match key {
25904                "team_folder_ids" => {
25905                    if field_team_folder_ids.is_some() {
25906                        return Err(::serde::de::Error::duplicate_field("team_folder_ids"));
25907                    }
25908                    field_team_folder_ids = Some(map.next_value()?);
25909                }
25910                _ => {
25911                    // unknown field allowed and ignored
25912                    map.next_value::<::serde_json::Value>()?;
25913                }
25914            }
25915        }
25916        if optional && nothing {
25917            return Ok(None);
25918        }
25919        let result = TeamFolderIdListArg {
25920            team_folder_ids: field_team_folder_ids.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_ids"))?,
25921        };
25922        Ok(Some(result))
25923    }
25924
25925    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25926        &self,
25927        s: &mut S::SerializeStruct,
25928    ) -> Result<(), S::Error> {
25929        use serde::ser::SerializeStruct;
25930        s.serialize_field("team_folder_ids", &self.team_folder_ids)?;
25931        Ok(())
25932    }
25933}
25934
25935impl<'de> ::serde::de::Deserialize<'de> for TeamFolderIdListArg {
25936    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25937        // struct deserializer
25938        use serde::de::{MapAccess, Visitor};
25939        struct StructVisitor;
25940        impl<'de> Visitor<'de> for StructVisitor {
25941            type Value = TeamFolderIdListArg;
25942            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25943                f.write_str("a TeamFolderIdListArg struct")
25944            }
25945            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25946                TeamFolderIdListArg::internal_deserialize(map)
25947            }
25948        }
25949        deserializer.deserialize_struct("TeamFolderIdListArg", TEAM_FOLDER_ID_LIST_ARG_FIELDS, StructVisitor)
25950    }
25951}
25952
25953impl ::serde::ser::Serialize for TeamFolderIdListArg {
25954    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25955        // struct serializer
25956        use serde::ser::SerializeStruct;
25957        let mut s = serializer.serialize_struct("TeamFolderIdListArg", 1)?;
25958        self.internal_serialize::<S>(&mut s)?;
25959        s.end()
25960    }
25961}
25962
25963#[derive(Debug, Clone, PartialEq, Eq)]
25964#[non_exhaustive] // variants may be added in the future
25965pub enum TeamFolderInvalidStatusError {
25966    /// The folder is active and the operation did not succeed.
25967    Active,
25968    /// The folder is archived and the operation did not succeed.
25969    Archived,
25970    /// The folder is being archived and the operation did not succeed.
25971    ArchiveInProgress,
25972    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25973    /// typically indicates that this SDK version is out of date.
25974    Other,
25975}
25976
25977impl<'de> ::serde::de::Deserialize<'de> for TeamFolderInvalidStatusError {
25978    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25979        // union deserializer
25980        use serde::de::{self, MapAccess, Visitor};
25981        struct EnumVisitor;
25982        impl<'de> Visitor<'de> for EnumVisitor {
25983            type Value = TeamFolderInvalidStatusError;
25984            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25985                f.write_str("a TeamFolderInvalidStatusError structure")
25986            }
25987            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25988                let tag: &str = match map.next_key()? {
25989                    Some(".tag") => map.next_value()?,
25990                    _ => return Err(de::Error::missing_field(".tag"))
25991                };
25992                let value = match tag {
25993                    "active" => TeamFolderInvalidStatusError::Active,
25994                    "archived" => TeamFolderInvalidStatusError::Archived,
25995                    "archive_in_progress" => TeamFolderInvalidStatusError::ArchiveInProgress,
25996                    _ => TeamFolderInvalidStatusError::Other,
25997                };
25998                crate::eat_json_fields(&mut map)?;
25999                Ok(value)
26000            }
26001        }
26002        const VARIANTS: &[&str] = &["active",
26003                                    "archived",
26004                                    "archive_in_progress",
26005                                    "other"];
26006        deserializer.deserialize_struct("TeamFolderInvalidStatusError", VARIANTS, EnumVisitor)
26007    }
26008}
26009
26010impl ::serde::ser::Serialize for TeamFolderInvalidStatusError {
26011    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26012        // union serializer
26013        use serde::ser::SerializeStruct;
26014        match self {
26015            TeamFolderInvalidStatusError::Active => {
26016                // unit
26017                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
26018                s.serialize_field(".tag", "active")?;
26019                s.end()
26020            }
26021            TeamFolderInvalidStatusError::Archived => {
26022                // unit
26023                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
26024                s.serialize_field(".tag", "archived")?;
26025                s.end()
26026            }
26027            TeamFolderInvalidStatusError::ArchiveInProgress => {
26028                // unit
26029                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
26030                s.serialize_field(".tag", "archive_in_progress")?;
26031                s.end()
26032            }
26033            TeamFolderInvalidStatusError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26034        }
26035    }
26036}
26037
26038impl ::std::error::Error for TeamFolderInvalidStatusError {
26039}
26040
26041impl ::std::fmt::Display for TeamFolderInvalidStatusError {
26042    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26043        match self {
26044            TeamFolderInvalidStatusError::Active => f.write_str("The folder is active and the operation did not succeed."),
26045            TeamFolderInvalidStatusError::Archived => f.write_str("The folder is archived and the operation did not succeed."),
26046            TeamFolderInvalidStatusError::ArchiveInProgress => f.write_str("The folder is being archived and the operation did not succeed."),
26047            _ => write!(f, "{:?}", *self),
26048        }
26049    }
26050}
26051
26052#[derive(Debug, Clone, PartialEq, Eq)]
26053#[non_exhaustive] // structs may have more fields added in the future.
26054pub struct TeamFolderListArg {
26055    /// The maximum number of results to return per request.
26056    pub limit: u32,
26057}
26058
26059impl Default for TeamFolderListArg {
26060    fn default() -> Self {
26061        TeamFolderListArg {
26062            limit: 1000,
26063        }
26064    }
26065}
26066
26067impl TeamFolderListArg {
26068    pub fn with_limit(mut self, value: u32) -> Self {
26069        self.limit = value;
26070        self
26071    }
26072}
26073
26074const TEAM_FOLDER_LIST_ARG_FIELDS: &[&str] = &["limit"];
26075impl TeamFolderListArg {
26076    // no _opt deserializer
26077    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26078        mut map: V,
26079    ) -> Result<TeamFolderListArg, V::Error> {
26080        let mut field_limit = None;
26081        while let Some(key) = map.next_key::<&str>()? {
26082            match key {
26083                "limit" => {
26084                    if field_limit.is_some() {
26085                        return Err(::serde::de::Error::duplicate_field("limit"));
26086                    }
26087                    field_limit = Some(map.next_value()?);
26088                }
26089                _ => {
26090                    // unknown field allowed and ignored
26091                    map.next_value::<::serde_json::Value>()?;
26092                }
26093            }
26094        }
26095        let result = TeamFolderListArg {
26096            limit: field_limit.unwrap_or(1000),
26097        };
26098        Ok(result)
26099    }
26100
26101    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26102        &self,
26103        s: &mut S::SerializeStruct,
26104    ) -> Result<(), S::Error> {
26105        use serde::ser::SerializeStruct;
26106        if self.limit != 1000 {
26107            s.serialize_field("limit", &self.limit)?;
26108        }
26109        Ok(())
26110    }
26111}
26112
26113impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListArg {
26114    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26115        // struct deserializer
26116        use serde::de::{MapAccess, Visitor};
26117        struct StructVisitor;
26118        impl<'de> Visitor<'de> for StructVisitor {
26119            type Value = TeamFolderListArg;
26120            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26121                f.write_str("a TeamFolderListArg struct")
26122            }
26123            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26124                TeamFolderListArg::internal_deserialize(map)
26125            }
26126        }
26127        deserializer.deserialize_struct("TeamFolderListArg", TEAM_FOLDER_LIST_ARG_FIELDS, StructVisitor)
26128    }
26129}
26130
26131impl ::serde::ser::Serialize for TeamFolderListArg {
26132    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26133        // struct serializer
26134        use serde::ser::SerializeStruct;
26135        let mut s = serializer.serialize_struct("TeamFolderListArg", 1)?;
26136        self.internal_serialize::<S>(&mut s)?;
26137        s.end()
26138    }
26139}
26140
26141#[derive(Debug, Clone, PartialEq, Eq)]
26142#[non_exhaustive] // structs may have more fields added in the future.
26143pub struct TeamFolderListContinueArg {
26144    /// Indicates from what point to get the next set of team folders.
26145    pub cursor: String,
26146}
26147
26148impl TeamFolderListContinueArg {
26149    pub fn new(cursor: String) -> Self {
26150        TeamFolderListContinueArg {
26151            cursor,
26152        }
26153    }
26154}
26155
26156const TEAM_FOLDER_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
26157impl TeamFolderListContinueArg {
26158    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26159        map: V,
26160    ) -> Result<TeamFolderListContinueArg, V::Error> {
26161        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26162    }
26163
26164    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26165        mut map: V,
26166        optional: bool,
26167    ) -> Result<Option<TeamFolderListContinueArg>, V::Error> {
26168        let mut field_cursor = None;
26169        let mut nothing = true;
26170        while let Some(key) = map.next_key::<&str>()? {
26171            nothing = false;
26172            match key {
26173                "cursor" => {
26174                    if field_cursor.is_some() {
26175                        return Err(::serde::de::Error::duplicate_field("cursor"));
26176                    }
26177                    field_cursor = Some(map.next_value()?);
26178                }
26179                _ => {
26180                    // unknown field allowed and ignored
26181                    map.next_value::<::serde_json::Value>()?;
26182                }
26183            }
26184        }
26185        if optional && nothing {
26186            return Ok(None);
26187        }
26188        let result = TeamFolderListContinueArg {
26189            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
26190        };
26191        Ok(Some(result))
26192    }
26193
26194    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26195        &self,
26196        s: &mut S::SerializeStruct,
26197    ) -> Result<(), S::Error> {
26198        use serde::ser::SerializeStruct;
26199        s.serialize_field("cursor", &self.cursor)?;
26200        Ok(())
26201    }
26202}
26203
26204impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListContinueArg {
26205    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26206        // struct deserializer
26207        use serde::de::{MapAccess, Visitor};
26208        struct StructVisitor;
26209        impl<'de> Visitor<'de> for StructVisitor {
26210            type Value = TeamFolderListContinueArg;
26211            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26212                f.write_str("a TeamFolderListContinueArg struct")
26213            }
26214            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26215                TeamFolderListContinueArg::internal_deserialize(map)
26216            }
26217        }
26218        deserializer.deserialize_struct("TeamFolderListContinueArg", TEAM_FOLDER_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
26219    }
26220}
26221
26222impl ::serde::ser::Serialize for TeamFolderListContinueArg {
26223    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26224        // struct serializer
26225        use serde::ser::SerializeStruct;
26226        let mut s = serializer.serialize_struct("TeamFolderListContinueArg", 1)?;
26227        self.internal_serialize::<S>(&mut s)?;
26228        s.end()
26229    }
26230}
26231
26232#[derive(Debug, Clone, PartialEq, Eq)]
26233#[non_exhaustive] // variants may be added in the future
26234pub enum TeamFolderListContinueError {
26235    /// The cursor is invalid.
26236    InvalidCursor,
26237    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26238    /// typically indicates that this SDK version is out of date.
26239    Other,
26240}
26241
26242impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListContinueError {
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 = TeamFolderListContinueError;
26249            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26250                f.write_str("a TeamFolderListContinueError 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                    "invalid_cursor" => TeamFolderListContinueError::InvalidCursor,
26259                    _ => TeamFolderListContinueError::Other,
26260                };
26261                crate::eat_json_fields(&mut map)?;
26262                Ok(value)
26263            }
26264        }
26265        const VARIANTS: &[&str] = &["invalid_cursor",
26266                                    "other"];
26267        deserializer.deserialize_struct("TeamFolderListContinueError", VARIANTS, EnumVisitor)
26268    }
26269}
26270
26271impl ::serde::ser::Serialize for TeamFolderListContinueError {
26272    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26273        // union serializer
26274        use serde::ser::SerializeStruct;
26275        match self {
26276            TeamFolderListContinueError::InvalidCursor => {
26277                // unit
26278                let mut s = serializer.serialize_struct("TeamFolderListContinueError", 1)?;
26279                s.serialize_field(".tag", "invalid_cursor")?;
26280                s.end()
26281            }
26282            TeamFolderListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26283        }
26284    }
26285}
26286
26287impl ::std::error::Error for TeamFolderListContinueError {
26288}
26289
26290impl ::std::fmt::Display for TeamFolderListContinueError {
26291    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26292        match self {
26293            TeamFolderListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
26294            _ => write!(f, "{:?}", *self),
26295        }
26296    }
26297}
26298
26299#[derive(Debug, Clone, PartialEq, Eq)]
26300#[non_exhaustive] // structs may have more fields added in the future.
26301pub struct TeamFolderListError {
26302    pub access_error: TeamFolderAccessError,
26303}
26304
26305impl TeamFolderListError {
26306    pub fn new(access_error: TeamFolderAccessError) -> Self {
26307        TeamFolderListError {
26308            access_error,
26309        }
26310    }
26311}
26312
26313const TEAM_FOLDER_LIST_ERROR_FIELDS: &[&str] = &["access_error"];
26314impl TeamFolderListError {
26315    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26316        map: V,
26317    ) -> Result<TeamFolderListError, V::Error> {
26318        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26319    }
26320
26321    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26322        mut map: V,
26323        optional: bool,
26324    ) -> Result<Option<TeamFolderListError>, V::Error> {
26325        let mut field_access_error = None;
26326        let mut nothing = true;
26327        while let Some(key) = map.next_key::<&str>()? {
26328            nothing = false;
26329            match key {
26330                "access_error" => {
26331                    if field_access_error.is_some() {
26332                        return Err(::serde::de::Error::duplicate_field("access_error"));
26333                    }
26334                    field_access_error = Some(map.next_value()?);
26335                }
26336                _ => {
26337                    // unknown field allowed and ignored
26338                    map.next_value::<::serde_json::Value>()?;
26339                }
26340            }
26341        }
26342        if optional && nothing {
26343            return Ok(None);
26344        }
26345        let result = TeamFolderListError {
26346            access_error: field_access_error.ok_or_else(|| ::serde::de::Error::missing_field("access_error"))?,
26347        };
26348        Ok(Some(result))
26349    }
26350
26351    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26352        &self,
26353        s: &mut S::SerializeStruct,
26354    ) -> Result<(), S::Error> {
26355        use serde::ser::SerializeStruct;
26356        s.serialize_field("access_error", &self.access_error)?;
26357        Ok(())
26358    }
26359}
26360
26361impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListError {
26362    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26363        // struct deserializer
26364        use serde::de::{MapAccess, Visitor};
26365        struct StructVisitor;
26366        impl<'de> Visitor<'de> for StructVisitor {
26367            type Value = TeamFolderListError;
26368            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26369                f.write_str("a TeamFolderListError struct")
26370            }
26371            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26372                TeamFolderListError::internal_deserialize(map)
26373            }
26374        }
26375        deserializer.deserialize_struct("TeamFolderListError", TEAM_FOLDER_LIST_ERROR_FIELDS, StructVisitor)
26376    }
26377}
26378
26379impl ::serde::ser::Serialize for TeamFolderListError {
26380    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26381        // struct serializer
26382        use serde::ser::SerializeStruct;
26383        let mut s = serializer.serialize_struct("TeamFolderListError", 1)?;
26384        self.internal_serialize::<S>(&mut s)?;
26385        s.end()
26386    }
26387}
26388
26389impl ::std::error::Error for TeamFolderListError {
26390}
26391
26392impl ::std::fmt::Display for TeamFolderListError {
26393    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26394        write!(f, "{:?}", *self)
26395    }
26396}
26397
26398/// Result for [`team_folder_list()`](crate::team::team_folder_list) and
26399/// [`team_folder_list_continue()`](crate::team::team_folder_list_continue).
26400#[derive(Debug, Clone, PartialEq, Eq)]
26401#[non_exhaustive] // structs may have more fields added in the future.
26402pub struct TeamFolderListResult {
26403    /// List of all team folders in the authenticated team.
26404    pub team_folders: Vec<TeamFolderMetadata>,
26405    /// Pass the cursor into [`team_folder_list_continue()`](crate::team::team_folder_list_continue)
26406    /// to obtain additional team folders.
26407    pub cursor: String,
26408    /// Is true if there are additional team folders that have not been returned yet. An additional
26409    /// call to [`team_folder_list_continue()`](crate::team::team_folder_list_continue) can retrieve
26410    /// them.
26411    pub has_more: bool,
26412}
26413
26414impl TeamFolderListResult {
26415    pub fn new(team_folders: Vec<TeamFolderMetadata>, cursor: String, has_more: bool) -> Self {
26416        TeamFolderListResult {
26417            team_folders,
26418            cursor,
26419            has_more,
26420        }
26421    }
26422}
26423
26424const TEAM_FOLDER_LIST_RESULT_FIELDS: &[&str] = &["team_folders",
26425                                                  "cursor",
26426                                                  "has_more"];
26427impl TeamFolderListResult {
26428    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26429        map: V,
26430    ) -> Result<TeamFolderListResult, V::Error> {
26431        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26432    }
26433
26434    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26435        mut map: V,
26436        optional: bool,
26437    ) -> Result<Option<TeamFolderListResult>, V::Error> {
26438        let mut field_team_folders = None;
26439        let mut field_cursor = None;
26440        let mut field_has_more = None;
26441        let mut nothing = true;
26442        while let Some(key) = map.next_key::<&str>()? {
26443            nothing = false;
26444            match key {
26445                "team_folders" => {
26446                    if field_team_folders.is_some() {
26447                        return Err(::serde::de::Error::duplicate_field("team_folders"));
26448                    }
26449                    field_team_folders = Some(map.next_value()?);
26450                }
26451                "cursor" => {
26452                    if field_cursor.is_some() {
26453                        return Err(::serde::de::Error::duplicate_field("cursor"));
26454                    }
26455                    field_cursor = Some(map.next_value()?);
26456                }
26457                "has_more" => {
26458                    if field_has_more.is_some() {
26459                        return Err(::serde::de::Error::duplicate_field("has_more"));
26460                    }
26461                    field_has_more = Some(map.next_value()?);
26462                }
26463                _ => {
26464                    // unknown field allowed and ignored
26465                    map.next_value::<::serde_json::Value>()?;
26466                }
26467            }
26468        }
26469        if optional && nothing {
26470            return Ok(None);
26471        }
26472        let result = TeamFolderListResult {
26473            team_folders: field_team_folders.ok_or_else(|| ::serde::de::Error::missing_field("team_folders"))?,
26474            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
26475            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
26476        };
26477        Ok(Some(result))
26478    }
26479
26480    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26481        &self,
26482        s: &mut S::SerializeStruct,
26483    ) -> Result<(), S::Error> {
26484        use serde::ser::SerializeStruct;
26485        s.serialize_field("team_folders", &self.team_folders)?;
26486        s.serialize_field("cursor", &self.cursor)?;
26487        s.serialize_field("has_more", &self.has_more)?;
26488        Ok(())
26489    }
26490}
26491
26492impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListResult {
26493    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26494        // struct deserializer
26495        use serde::de::{MapAccess, Visitor};
26496        struct StructVisitor;
26497        impl<'de> Visitor<'de> for StructVisitor {
26498            type Value = TeamFolderListResult;
26499            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26500                f.write_str("a TeamFolderListResult struct")
26501            }
26502            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26503                TeamFolderListResult::internal_deserialize(map)
26504            }
26505        }
26506        deserializer.deserialize_struct("TeamFolderListResult", TEAM_FOLDER_LIST_RESULT_FIELDS, StructVisitor)
26507    }
26508}
26509
26510impl ::serde::ser::Serialize for TeamFolderListResult {
26511    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26512        // struct serializer
26513        use serde::ser::SerializeStruct;
26514        let mut s = serializer.serialize_struct("TeamFolderListResult", 3)?;
26515        self.internal_serialize::<S>(&mut s)?;
26516        s.end()
26517    }
26518}
26519
26520/// Properties of a team folder.
26521#[derive(Debug, Clone, PartialEq, Eq)]
26522#[non_exhaustive] // structs may have more fields added in the future.
26523pub struct TeamFolderMetadata {
26524    /// The ID of the team folder.
26525    pub team_folder_id: crate::types::common::SharedFolderId,
26526    /// The name of the team folder.
26527    pub name: String,
26528    /// The status of the team folder.
26529    pub status: TeamFolderStatus,
26530    /// True if this team folder is a shared team root.
26531    pub is_team_shared_dropbox: bool,
26532    /// The sync setting applied to this team folder.
26533    pub sync_setting: crate::types::files::SyncSetting,
26534    /// Sync settings applied to contents of this team folder.
26535    pub content_sync_settings: Vec<crate::types::files::ContentSyncSetting>,
26536    /// The quota limit in bytes for this team folder namespace tree.
26537    pub quota_limit: i64,
26538}
26539
26540impl TeamFolderMetadata {
26541    pub fn new(
26542        team_folder_id: crate::types::common::SharedFolderId,
26543        name: String,
26544        status: TeamFolderStatus,
26545        is_team_shared_dropbox: bool,
26546        sync_setting: crate::types::files::SyncSetting,
26547        content_sync_settings: Vec<crate::types::files::ContentSyncSetting>,
26548    ) -> Self {
26549        TeamFolderMetadata {
26550            team_folder_id,
26551            name,
26552            status,
26553            is_team_shared_dropbox,
26554            sync_setting,
26555            content_sync_settings,
26556            quota_limit: 0,
26557        }
26558    }
26559
26560    pub fn with_quota_limit(mut self, value: i64) -> Self {
26561        self.quota_limit = value;
26562        self
26563    }
26564}
26565
26566const TEAM_FOLDER_METADATA_FIELDS: &[&str] = &["team_folder_id",
26567                                               "name",
26568                                               "status",
26569                                               "is_team_shared_dropbox",
26570                                               "sync_setting",
26571                                               "content_sync_settings",
26572                                               "quota_limit"];
26573impl TeamFolderMetadata {
26574    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26575        map: V,
26576    ) -> Result<TeamFolderMetadata, V::Error> {
26577        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26578    }
26579
26580    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26581        mut map: V,
26582        optional: bool,
26583    ) -> Result<Option<TeamFolderMetadata>, V::Error> {
26584        let mut field_team_folder_id = None;
26585        let mut field_name = None;
26586        let mut field_status = None;
26587        let mut field_is_team_shared_dropbox = None;
26588        let mut field_sync_setting = None;
26589        let mut field_content_sync_settings = None;
26590        let mut field_quota_limit = None;
26591        let mut nothing = true;
26592        while let Some(key) = map.next_key::<&str>()? {
26593            nothing = false;
26594            match key {
26595                "team_folder_id" => {
26596                    if field_team_folder_id.is_some() {
26597                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
26598                    }
26599                    field_team_folder_id = Some(map.next_value()?);
26600                }
26601                "name" => {
26602                    if field_name.is_some() {
26603                        return Err(::serde::de::Error::duplicate_field("name"));
26604                    }
26605                    field_name = Some(map.next_value()?);
26606                }
26607                "status" => {
26608                    if field_status.is_some() {
26609                        return Err(::serde::de::Error::duplicate_field("status"));
26610                    }
26611                    field_status = Some(map.next_value()?);
26612                }
26613                "is_team_shared_dropbox" => {
26614                    if field_is_team_shared_dropbox.is_some() {
26615                        return Err(::serde::de::Error::duplicate_field("is_team_shared_dropbox"));
26616                    }
26617                    field_is_team_shared_dropbox = Some(map.next_value()?);
26618                }
26619                "sync_setting" => {
26620                    if field_sync_setting.is_some() {
26621                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
26622                    }
26623                    field_sync_setting = Some(map.next_value()?);
26624                }
26625                "content_sync_settings" => {
26626                    if field_content_sync_settings.is_some() {
26627                        return Err(::serde::de::Error::duplicate_field("content_sync_settings"));
26628                    }
26629                    field_content_sync_settings = Some(map.next_value()?);
26630                }
26631                "quota_limit" => {
26632                    if field_quota_limit.is_some() {
26633                        return Err(::serde::de::Error::duplicate_field("quota_limit"));
26634                    }
26635                    field_quota_limit = Some(map.next_value()?);
26636                }
26637                _ => {
26638                    // unknown field allowed and ignored
26639                    map.next_value::<::serde_json::Value>()?;
26640                }
26641            }
26642        }
26643        if optional && nothing {
26644            return Ok(None);
26645        }
26646        let result = TeamFolderMetadata {
26647            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
26648            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
26649            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
26650            is_team_shared_dropbox: field_is_team_shared_dropbox.ok_or_else(|| ::serde::de::Error::missing_field("is_team_shared_dropbox"))?,
26651            sync_setting: field_sync_setting.ok_or_else(|| ::serde::de::Error::missing_field("sync_setting"))?,
26652            content_sync_settings: field_content_sync_settings.ok_or_else(|| ::serde::de::Error::missing_field("content_sync_settings"))?,
26653            quota_limit: field_quota_limit.unwrap_or(0),
26654        };
26655        Ok(Some(result))
26656    }
26657
26658    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26659        &self,
26660        s: &mut S::SerializeStruct,
26661    ) -> Result<(), S::Error> {
26662        use serde::ser::SerializeStruct;
26663        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26664        s.serialize_field("name", &self.name)?;
26665        s.serialize_field("status", &self.status)?;
26666        s.serialize_field("is_team_shared_dropbox", &self.is_team_shared_dropbox)?;
26667        s.serialize_field("sync_setting", &self.sync_setting)?;
26668        s.serialize_field("content_sync_settings", &self.content_sync_settings)?;
26669        if self.quota_limit != 0 {
26670            s.serialize_field("quota_limit", &self.quota_limit)?;
26671        }
26672        Ok(())
26673    }
26674}
26675
26676impl<'de> ::serde::de::Deserialize<'de> for TeamFolderMetadata {
26677    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26678        // struct deserializer
26679        use serde::de::{MapAccess, Visitor};
26680        struct StructVisitor;
26681        impl<'de> Visitor<'de> for StructVisitor {
26682            type Value = TeamFolderMetadata;
26683            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26684                f.write_str("a TeamFolderMetadata struct")
26685            }
26686            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26687                TeamFolderMetadata::internal_deserialize(map)
26688            }
26689        }
26690        deserializer.deserialize_struct("TeamFolderMetadata", TEAM_FOLDER_METADATA_FIELDS, StructVisitor)
26691    }
26692}
26693
26694impl ::serde::ser::Serialize for TeamFolderMetadata {
26695    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26696        // struct serializer
26697        use serde::ser::SerializeStruct;
26698        let mut s = serializer.serialize_struct("TeamFolderMetadata", 7)?;
26699        self.internal_serialize::<S>(&mut s)?;
26700        s.end()
26701    }
26702}
26703
26704
26705#[derive(Debug, Clone, PartialEq, Eq)]
26706#[non_exhaustive] // variants may be added in the future
26707pub enum TeamFolderPermanentlyDeleteError {
26708    AccessError(TeamFolderAccessError),
26709    StatusError(TeamFolderInvalidStatusError),
26710    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
26711    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26712    /// typically indicates that this SDK version is out of date.
26713    Other,
26714}
26715
26716impl<'de> ::serde::de::Deserialize<'de> for TeamFolderPermanentlyDeleteError {
26717    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26718        // union deserializer
26719        use serde::de::{self, MapAccess, Visitor};
26720        struct EnumVisitor;
26721        impl<'de> Visitor<'de> for EnumVisitor {
26722            type Value = TeamFolderPermanentlyDeleteError;
26723            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26724                f.write_str("a TeamFolderPermanentlyDeleteError structure")
26725            }
26726            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26727                let tag: &str = match map.next_key()? {
26728                    Some(".tag") => map.next_value()?,
26729                    _ => return Err(de::Error::missing_field(".tag"))
26730                };
26731                let value = match tag {
26732                    "access_error" => {
26733                        match map.next_key()? {
26734                            Some("access_error") => TeamFolderPermanentlyDeleteError::AccessError(map.next_value()?),
26735                            None => return Err(de::Error::missing_field("access_error")),
26736                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26737                        }
26738                    }
26739                    "status_error" => {
26740                        match map.next_key()? {
26741                            Some("status_error") => TeamFolderPermanentlyDeleteError::StatusError(map.next_value()?),
26742                            None => return Err(de::Error::missing_field("status_error")),
26743                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26744                        }
26745                    }
26746                    "team_shared_dropbox_error" => {
26747                        match map.next_key()? {
26748                            Some("team_shared_dropbox_error") => TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(map.next_value()?),
26749                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
26750                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26751                        }
26752                    }
26753                    _ => TeamFolderPermanentlyDeleteError::Other,
26754                };
26755                crate::eat_json_fields(&mut map)?;
26756                Ok(value)
26757            }
26758        }
26759        const VARIANTS: &[&str] = &["access_error",
26760                                    "status_error",
26761                                    "team_shared_dropbox_error",
26762                                    "other"];
26763        deserializer.deserialize_struct("TeamFolderPermanentlyDeleteError", VARIANTS, EnumVisitor)
26764    }
26765}
26766
26767impl ::serde::ser::Serialize for TeamFolderPermanentlyDeleteError {
26768    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26769        // union serializer
26770        use serde::ser::SerializeStruct;
26771        match self {
26772            TeamFolderPermanentlyDeleteError::AccessError(x) => {
26773                // union or polymporphic struct
26774                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26775                s.serialize_field(".tag", "access_error")?;
26776                s.serialize_field("access_error", x)?;
26777                s.end()
26778            }
26779            TeamFolderPermanentlyDeleteError::StatusError(x) => {
26780                // union or polymporphic struct
26781                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26782                s.serialize_field(".tag", "status_error")?;
26783                s.serialize_field("status_error", x)?;
26784                s.end()
26785            }
26786            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(x) => {
26787                // union or polymporphic struct
26788                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26789                s.serialize_field(".tag", "team_shared_dropbox_error")?;
26790                s.serialize_field("team_shared_dropbox_error", x)?;
26791                s.end()
26792            }
26793            TeamFolderPermanentlyDeleteError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26794        }
26795    }
26796}
26797
26798impl ::std::error::Error for TeamFolderPermanentlyDeleteError {
26799    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
26800        match self {
26801            TeamFolderPermanentlyDeleteError::AccessError(inner) => Some(inner),
26802            TeamFolderPermanentlyDeleteError::StatusError(inner) => Some(inner),
26803            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(inner) => Some(inner),
26804            _ => None,
26805        }
26806    }
26807}
26808
26809impl ::std::fmt::Display for TeamFolderPermanentlyDeleteError {
26810    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26811        match self {
26812            TeamFolderPermanentlyDeleteError::AccessError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26813            TeamFolderPermanentlyDeleteError::StatusError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26814            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26815            _ => write!(f, "{:?}", *self),
26816        }
26817    }
26818}
26819
26820// union extends BaseTeamFolderError
26821impl From<BaseTeamFolderError> for TeamFolderPermanentlyDeleteError {
26822    fn from(parent: BaseTeamFolderError) -> Self {
26823        match parent {
26824            BaseTeamFolderError::AccessError(x) => TeamFolderPermanentlyDeleteError::AccessError(x),
26825            BaseTeamFolderError::StatusError(x) => TeamFolderPermanentlyDeleteError::StatusError(x),
26826            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(x),
26827            BaseTeamFolderError::Other => TeamFolderPermanentlyDeleteError::Other,
26828        }
26829    }
26830}
26831#[derive(Debug, Clone, PartialEq, Eq)]
26832#[non_exhaustive] // structs may have more fields added in the future.
26833pub struct TeamFolderRenameArg {
26834    /// The ID of the team folder.
26835    pub team_folder_id: crate::types::common::SharedFolderId,
26836    /// New team folder name.
26837    pub name: String,
26838}
26839
26840impl TeamFolderRenameArg {
26841    pub fn new(team_folder_id: crate::types::common::SharedFolderId, name: String) -> Self {
26842        TeamFolderRenameArg {
26843            team_folder_id,
26844            name,
26845        }
26846    }
26847}
26848
26849const TEAM_FOLDER_RENAME_ARG_FIELDS: &[&str] = &["team_folder_id",
26850                                                 "name"];
26851impl TeamFolderRenameArg {
26852    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26853        map: V,
26854    ) -> Result<TeamFolderRenameArg, V::Error> {
26855        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26856    }
26857
26858    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26859        mut map: V,
26860        optional: bool,
26861    ) -> Result<Option<TeamFolderRenameArg>, V::Error> {
26862        let mut field_team_folder_id = None;
26863        let mut field_name = None;
26864        let mut nothing = true;
26865        while let Some(key) = map.next_key::<&str>()? {
26866            nothing = false;
26867            match key {
26868                "team_folder_id" => {
26869                    if field_team_folder_id.is_some() {
26870                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
26871                    }
26872                    field_team_folder_id = Some(map.next_value()?);
26873                }
26874                "name" => {
26875                    if field_name.is_some() {
26876                        return Err(::serde::de::Error::duplicate_field("name"));
26877                    }
26878                    field_name = Some(map.next_value()?);
26879                }
26880                _ => {
26881                    // unknown field allowed and ignored
26882                    map.next_value::<::serde_json::Value>()?;
26883                }
26884            }
26885        }
26886        if optional && nothing {
26887            return Ok(None);
26888        }
26889        let result = TeamFolderRenameArg {
26890            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
26891            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
26892        };
26893        Ok(Some(result))
26894    }
26895
26896    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26897        &self,
26898        s: &mut S::SerializeStruct,
26899    ) -> Result<(), S::Error> {
26900        use serde::ser::SerializeStruct;
26901        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26902        s.serialize_field("name", &self.name)?;
26903        Ok(())
26904    }
26905}
26906
26907impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRenameArg {
26908    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26909        // struct deserializer
26910        use serde::de::{MapAccess, Visitor};
26911        struct StructVisitor;
26912        impl<'de> Visitor<'de> for StructVisitor {
26913            type Value = TeamFolderRenameArg;
26914            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26915                f.write_str("a TeamFolderRenameArg struct")
26916            }
26917            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26918                TeamFolderRenameArg::internal_deserialize(map)
26919            }
26920        }
26921        deserializer.deserialize_struct("TeamFolderRenameArg", TEAM_FOLDER_RENAME_ARG_FIELDS, StructVisitor)
26922    }
26923}
26924
26925impl ::serde::ser::Serialize for TeamFolderRenameArg {
26926    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26927        // struct serializer
26928        use serde::ser::SerializeStruct;
26929        let mut s = serializer.serialize_struct("TeamFolderRenameArg", 2)?;
26930        self.internal_serialize::<S>(&mut s)?;
26931        s.end()
26932    }
26933}
26934
26935// struct extends TeamFolderIdArg
26936impl From<TeamFolderRenameArg> for TeamFolderIdArg {
26937    fn from(subtype: TeamFolderRenameArg) -> Self {
26938        Self {
26939            team_folder_id: subtype.team_folder_id,
26940        }
26941    }
26942}
26943#[derive(Debug, Clone, PartialEq, Eq)]
26944#[non_exhaustive] // variants may be added in the future
26945pub enum TeamFolderRenameError {
26946    AccessError(TeamFolderAccessError),
26947    StatusError(TeamFolderInvalidStatusError),
26948    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
26949    /// The provided folder name cannot be used.
26950    InvalidFolderName,
26951    /// There is already a team folder with the same name.
26952    FolderNameAlreadyUsed,
26953    /// The provided name cannot be used because it is reserved.
26954    FolderNameReserved,
26955    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26956    /// typically indicates that this SDK version is out of date.
26957    Other,
26958}
26959
26960impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRenameError {
26961    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26962        // union deserializer
26963        use serde::de::{self, MapAccess, Visitor};
26964        struct EnumVisitor;
26965        impl<'de> Visitor<'de> for EnumVisitor {
26966            type Value = TeamFolderRenameError;
26967            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26968                f.write_str("a TeamFolderRenameError structure")
26969            }
26970            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26971                let tag: &str = match map.next_key()? {
26972                    Some(".tag") => map.next_value()?,
26973                    _ => return Err(de::Error::missing_field(".tag"))
26974                };
26975                let value = match tag {
26976                    "access_error" => {
26977                        match map.next_key()? {
26978                            Some("access_error") => TeamFolderRenameError::AccessError(map.next_value()?),
26979                            None => return Err(de::Error::missing_field("access_error")),
26980                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26981                        }
26982                    }
26983                    "status_error" => {
26984                        match map.next_key()? {
26985                            Some("status_error") => TeamFolderRenameError::StatusError(map.next_value()?),
26986                            None => return Err(de::Error::missing_field("status_error")),
26987                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26988                        }
26989                    }
26990                    "team_shared_dropbox_error" => {
26991                        match map.next_key()? {
26992                            Some("team_shared_dropbox_error") => TeamFolderRenameError::TeamSharedDropboxError(map.next_value()?),
26993                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
26994                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26995                        }
26996                    }
26997                    "invalid_folder_name" => TeamFolderRenameError::InvalidFolderName,
26998                    "folder_name_already_used" => TeamFolderRenameError::FolderNameAlreadyUsed,
26999                    "folder_name_reserved" => TeamFolderRenameError::FolderNameReserved,
27000                    _ => TeamFolderRenameError::Other,
27001                };
27002                crate::eat_json_fields(&mut map)?;
27003                Ok(value)
27004            }
27005        }
27006        const VARIANTS: &[&str] = &["access_error",
27007                                    "status_error",
27008                                    "team_shared_dropbox_error",
27009                                    "other",
27010                                    "invalid_folder_name",
27011                                    "folder_name_already_used",
27012                                    "folder_name_reserved"];
27013        deserializer.deserialize_struct("TeamFolderRenameError", VARIANTS, EnumVisitor)
27014    }
27015}
27016
27017impl ::serde::ser::Serialize for TeamFolderRenameError {
27018    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27019        // union serializer
27020        use serde::ser::SerializeStruct;
27021        match self {
27022            TeamFolderRenameError::AccessError(x) => {
27023                // union or polymporphic struct
27024                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
27025                s.serialize_field(".tag", "access_error")?;
27026                s.serialize_field("access_error", x)?;
27027                s.end()
27028            }
27029            TeamFolderRenameError::StatusError(x) => {
27030                // union or polymporphic struct
27031                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
27032                s.serialize_field(".tag", "status_error")?;
27033                s.serialize_field("status_error", x)?;
27034                s.end()
27035            }
27036            TeamFolderRenameError::TeamSharedDropboxError(x) => {
27037                // union or polymporphic struct
27038                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
27039                s.serialize_field(".tag", "team_shared_dropbox_error")?;
27040                s.serialize_field("team_shared_dropbox_error", x)?;
27041                s.end()
27042            }
27043            TeamFolderRenameError::InvalidFolderName => {
27044                // unit
27045                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27046                s.serialize_field(".tag", "invalid_folder_name")?;
27047                s.end()
27048            }
27049            TeamFolderRenameError::FolderNameAlreadyUsed => {
27050                // unit
27051                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27052                s.serialize_field(".tag", "folder_name_already_used")?;
27053                s.end()
27054            }
27055            TeamFolderRenameError::FolderNameReserved => {
27056                // unit
27057                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27058                s.serialize_field(".tag", "folder_name_reserved")?;
27059                s.end()
27060            }
27061            TeamFolderRenameError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27062        }
27063    }
27064}
27065
27066impl ::std::error::Error for TeamFolderRenameError {
27067    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
27068        match self {
27069            TeamFolderRenameError::AccessError(inner) => Some(inner),
27070            TeamFolderRenameError::StatusError(inner) => Some(inner),
27071            TeamFolderRenameError::TeamSharedDropboxError(inner) => Some(inner),
27072            _ => None,
27073        }
27074    }
27075}
27076
27077impl ::std::fmt::Display for TeamFolderRenameError {
27078    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27079        match self {
27080            TeamFolderRenameError::AccessError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27081            TeamFolderRenameError::StatusError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27082            TeamFolderRenameError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27083            TeamFolderRenameError::InvalidFolderName => f.write_str("The provided folder name cannot be used."),
27084            TeamFolderRenameError::FolderNameAlreadyUsed => f.write_str("There is already a team folder with the same name."),
27085            TeamFolderRenameError::FolderNameReserved => f.write_str("The provided name cannot be used because it is reserved."),
27086            _ => write!(f, "{:?}", *self),
27087        }
27088    }
27089}
27090
27091// union extends BaseTeamFolderError
27092impl From<BaseTeamFolderError> for TeamFolderRenameError {
27093    fn from(parent: BaseTeamFolderError) -> Self {
27094        match parent {
27095            BaseTeamFolderError::AccessError(x) => TeamFolderRenameError::AccessError(x),
27096            BaseTeamFolderError::StatusError(x) => TeamFolderRenameError::StatusError(x),
27097            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderRenameError::TeamSharedDropboxError(x),
27098            BaseTeamFolderError::Other => TeamFolderRenameError::Other,
27099        }
27100    }
27101}
27102
27103#[derive(Debug, Clone, PartialEq, Eq)]
27104#[non_exhaustive] // variants may be added in the future
27105pub enum TeamFolderRestoreError {
27106    AccessError(TeamFolderAccessError),
27107    StatusError(TeamFolderInvalidStatusError),
27108    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
27109    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27110    /// typically indicates that this SDK version is out of date.
27111    Other,
27112}
27113
27114impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRestoreError {
27115    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27116        // union deserializer
27117        use serde::de::{self, MapAccess, Visitor};
27118        struct EnumVisitor;
27119        impl<'de> Visitor<'de> for EnumVisitor {
27120            type Value = TeamFolderRestoreError;
27121            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27122                f.write_str("a TeamFolderRestoreError structure")
27123            }
27124            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27125                let tag: &str = match map.next_key()? {
27126                    Some(".tag") => map.next_value()?,
27127                    _ => return Err(de::Error::missing_field(".tag"))
27128                };
27129                let value = match tag {
27130                    "access_error" => {
27131                        match map.next_key()? {
27132                            Some("access_error") => TeamFolderRestoreError::AccessError(map.next_value()?),
27133                            None => return Err(de::Error::missing_field("access_error")),
27134                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27135                        }
27136                    }
27137                    "status_error" => {
27138                        match map.next_key()? {
27139                            Some("status_error") => TeamFolderRestoreError::StatusError(map.next_value()?),
27140                            None => return Err(de::Error::missing_field("status_error")),
27141                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27142                        }
27143                    }
27144                    "team_shared_dropbox_error" => {
27145                        match map.next_key()? {
27146                            Some("team_shared_dropbox_error") => TeamFolderRestoreError::TeamSharedDropboxError(map.next_value()?),
27147                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
27148                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27149                        }
27150                    }
27151                    _ => TeamFolderRestoreError::Other,
27152                };
27153                crate::eat_json_fields(&mut map)?;
27154                Ok(value)
27155            }
27156        }
27157        const VARIANTS: &[&str] = &["access_error",
27158                                    "status_error",
27159                                    "team_shared_dropbox_error",
27160                                    "other"];
27161        deserializer.deserialize_struct("TeamFolderRestoreError", VARIANTS, EnumVisitor)
27162    }
27163}
27164
27165impl ::serde::ser::Serialize for TeamFolderRestoreError {
27166    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27167        // union serializer
27168        use serde::ser::SerializeStruct;
27169        match self {
27170            TeamFolderRestoreError::AccessError(x) => {
27171                // union or polymporphic struct
27172                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
27173                s.serialize_field(".tag", "access_error")?;
27174                s.serialize_field("access_error", x)?;
27175                s.end()
27176            }
27177            TeamFolderRestoreError::StatusError(x) => {
27178                // union or polymporphic struct
27179                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
27180                s.serialize_field(".tag", "status_error")?;
27181                s.serialize_field("status_error", x)?;
27182                s.end()
27183            }
27184            TeamFolderRestoreError::TeamSharedDropboxError(x) => {
27185                // union or polymporphic struct
27186                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
27187                s.serialize_field(".tag", "team_shared_dropbox_error")?;
27188                s.serialize_field("team_shared_dropbox_error", x)?;
27189                s.end()
27190            }
27191            TeamFolderRestoreError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27192        }
27193    }
27194}
27195
27196impl ::std::error::Error for TeamFolderRestoreError {
27197    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
27198        match self {
27199            TeamFolderRestoreError::AccessError(inner) => Some(inner),
27200            TeamFolderRestoreError::StatusError(inner) => Some(inner),
27201            TeamFolderRestoreError::TeamSharedDropboxError(inner) => Some(inner),
27202            _ => None,
27203        }
27204    }
27205}
27206
27207impl ::std::fmt::Display for TeamFolderRestoreError {
27208    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27209        match self {
27210            TeamFolderRestoreError::AccessError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
27211            TeamFolderRestoreError::StatusError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
27212            TeamFolderRestoreError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
27213            _ => write!(f, "{:?}", *self),
27214        }
27215    }
27216}
27217
27218// union extends BaseTeamFolderError
27219impl From<BaseTeamFolderError> for TeamFolderRestoreError {
27220    fn from(parent: BaseTeamFolderError) -> Self {
27221        match parent {
27222            BaseTeamFolderError::AccessError(x) => TeamFolderRestoreError::AccessError(x),
27223            BaseTeamFolderError::StatusError(x) => TeamFolderRestoreError::StatusError(x),
27224            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderRestoreError::TeamSharedDropboxError(x),
27225            BaseTeamFolderError::Other => TeamFolderRestoreError::Other,
27226        }
27227    }
27228}
27229#[derive(Debug, Clone, PartialEq, Eq)]
27230#[non_exhaustive] // variants may be added in the future
27231pub enum TeamFolderStatus {
27232    /// The team folder and sub-folders are available to all members.
27233    Active,
27234    /// The team folder is archived and is not accessible outside of the team folder manager.
27235    Archived,
27236    /// The team folder is in the process of being archived and is not accessible outside of the
27237    /// team folder manager.
27238    ArchiveInProgress,
27239    /// The team folder is unmounted and can be restored.
27240    Inactive,
27241    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27242    /// typically indicates that this SDK version is out of date.
27243    Other,
27244}
27245
27246impl<'de> ::serde::de::Deserialize<'de> for TeamFolderStatus {
27247    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27248        // union deserializer
27249        use serde::de::{self, MapAccess, Visitor};
27250        struct EnumVisitor;
27251        impl<'de> Visitor<'de> for EnumVisitor {
27252            type Value = TeamFolderStatus;
27253            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27254                f.write_str("a TeamFolderStatus structure")
27255            }
27256            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27257                let tag: &str = match map.next_key()? {
27258                    Some(".tag") => map.next_value()?,
27259                    _ => return Err(de::Error::missing_field(".tag"))
27260                };
27261                let value = match tag {
27262                    "active" => TeamFolderStatus::Active,
27263                    "archived" => TeamFolderStatus::Archived,
27264                    "archive_in_progress" => TeamFolderStatus::ArchiveInProgress,
27265                    "inactive" => TeamFolderStatus::Inactive,
27266                    _ => TeamFolderStatus::Other,
27267                };
27268                crate::eat_json_fields(&mut map)?;
27269                Ok(value)
27270            }
27271        }
27272        const VARIANTS: &[&str] = &["active",
27273                                    "archived",
27274                                    "archive_in_progress",
27275                                    "inactive",
27276                                    "other"];
27277        deserializer.deserialize_struct("TeamFolderStatus", VARIANTS, EnumVisitor)
27278    }
27279}
27280
27281impl ::serde::ser::Serialize for TeamFolderStatus {
27282    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27283        // union serializer
27284        use serde::ser::SerializeStruct;
27285        match self {
27286            TeamFolderStatus::Active => {
27287                // unit
27288                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
27289                s.serialize_field(".tag", "active")?;
27290                s.end()
27291            }
27292            TeamFolderStatus::Archived => {
27293                // unit
27294                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
27295                s.serialize_field(".tag", "archived")?;
27296                s.end()
27297            }
27298            TeamFolderStatus::ArchiveInProgress => {
27299                // unit
27300                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
27301                s.serialize_field(".tag", "archive_in_progress")?;
27302                s.end()
27303            }
27304            TeamFolderStatus::Inactive => {
27305                // unit
27306                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
27307                s.serialize_field(".tag", "inactive")?;
27308                s.end()
27309            }
27310            TeamFolderStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27311        }
27312    }
27313}
27314
27315#[derive(Debug, Clone, PartialEq, Eq)]
27316#[non_exhaustive] // variants may be added in the future
27317pub enum TeamFolderTeamSharedDropboxError {
27318    /// This action is not allowed for a shared team root.
27319    Disallowed,
27320    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27321    /// typically indicates that this SDK version is out of date.
27322    Other,
27323}
27324
27325impl<'de> ::serde::de::Deserialize<'de> for TeamFolderTeamSharedDropboxError {
27326    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27327        // union deserializer
27328        use serde::de::{self, MapAccess, Visitor};
27329        struct EnumVisitor;
27330        impl<'de> Visitor<'de> for EnumVisitor {
27331            type Value = TeamFolderTeamSharedDropboxError;
27332            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27333                f.write_str("a TeamFolderTeamSharedDropboxError structure")
27334            }
27335            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27336                let tag: &str = match map.next_key()? {
27337                    Some(".tag") => map.next_value()?,
27338                    _ => return Err(de::Error::missing_field(".tag"))
27339                };
27340                let value = match tag {
27341                    "disallowed" => TeamFolderTeamSharedDropboxError::Disallowed,
27342                    _ => TeamFolderTeamSharedDropboxError::Other,
27343                };
27344                crate::eat_json_fields(&mut map)?;
27345                Ok(value)
27346            }
27347        }
27348        const VARIANTS: &[&str] = &["disallowed",
27349                                    "other"];
27350        deserializer.deserialize_struct("TeamFolderTeamSharedDropboxError", VARIANTS, EnumVisitor)
27351    }
27352}
27353
27354impl ::serde::ser::Serialize for TeamFolderTeamSharedDropboxError {
27355    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27356        // union serializer
27357        use serde::ser::SerializeStruct;
27358        match self {
27359            TeamFolderTeamSharedDropboxError::Disallowed => {
27360                // unit
27361                let mut s = serializer.serialize_struct("TeamFolderTeamSharedDropboxError", 1)?;
27362                s.serialize_field(".tag", "disallowed")?;
27363                s.end()
27364            }
27365            TeamFolderTeamSharedDropboxError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27366        }
27367    }
27368}
27369
27370impl ::std::error::Error for TeamFolderTeamSharedDropboxError {
27371}
27372
27373impl ::std::fmt::Display for TeamFolderTeamSharedDropboxError {
27374    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27375        match self {
27376            TeamFolderTeamSharedDropboxError::Disallowed => f.write_str("This action is not allowed for a shared team root."),
27377            _ => write!(f, "{:?}", *self),
27378        }
27379    }
27380}
27381
27382#[derive(Debug, Clone, PartialEq, Eq)]
27383#[non_exhaustive] // structs may have more fields added in the future.
27384pub struct TeamFolderUpdateSyncSettingsArg {
27385    /// The ID of the team folder.
27386    pub team_folder_id: crate::types::common::SharedFolderId,
27387    /// Sync setting to apply to the team folder itself. Only meaningful if the team folder is not a
27388    /// shared team root.
27389    pub sync_setting: Option<crate::types::files::SyncSettingArg>,
27390    /// Sync settings to apply to contents of this team folder.
27391    pub content_sync_settings: Option<Vec<crate::types::files::ContentSyncSettingArg>>,
27392}
27393
27394impl TeamFolderUpdateSyncSettingsArg {
27395    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
27396        TeamFolderUpdateSyncSettingsArg {
27397            team_folder_id,
27398            sync_setting: None,
27399            content_sync_settings: None,
27400        }
27401    }
27402
27403    pub fn with_sync_setting(mut self, value: crate::types::files::SyncSettingArg) -> Self {
27404        self.sync_setting = Some(value);
27405        self
27406    }
27407
27408    pub fn with_content_sync_settings(
27409        mut self,
27410        value: Vec<crate::types::files::ContentSyncSettingArg>,
27411    ) -> Self {
27412        self.content_sync_settings = Some(value);
27413        self
27414    }
27415}
27416
27417const TEAM_FOLDER_UPDATE_SYNC_SETTINGS_ARG_FIELDS: &[&str] = &["team_folder_id",
27418                                                               "sync_setting",
27419                                                               "content_sync_settings"];
27420impl TeamFolderUpdateSyncSettingsArg {
27421    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27422        map: V,
27423    ) -> Result<TeamFolderUpdateSyncSettingsArg, V::Error> {
27424        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27425    }
27426
27427    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27428        mut map: V,
27429        optional: bool,
27430    ) -> Result<Option<TeamFolderUpdateSyncSettingsArg>, V::Error> {
27431        let mut field_team_folder_id = None;
27432        let mut field_sync_setting = None;
27433        let mut field_content_sync_settings = None;
27434        let mut nothing = true;
27435        while let Some(key) = map.next_key::<&str>()? {
27436            nothing = false;
27437            match key {
27438                "team_folder_id" => {
27439                    if field_team_folder_id.is_some() {
27440                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
27441                    }
27442                    field_team_folder_id = Some(map.next_value()?);
27443                }
27444                "sync_setting" => {
27445                    if field_sync_setting.is_some() {
27446                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
27447                    }
27448                    field_sync_setting = Some(map.next_value()?);
27449                }
27450                "content_sync_settings" => {
27451                    if field_content_sync_settings.is_some() {
27452                        return Err(::serde::de::Error::duplicate_field("content_sync_settings"));
27453                    }
27454                    field_content_sync_settings = Some(map.next_value()?);
27455                }
27456                _ => {
27457                    // unknown field allowed and ignored
27458                    map.next_value::<::serde_json::Value>()?;
27459                }
27460            }
27461        }
27462        if optional && nothing {
27463            return Ok(None);
27464        }
27465        let result = TeamFolderUpdateSyncSettingsArg {
27466            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
27467            sync_setting: field_sync_setting.and_then(Option::flatten),
27468            content_sync_settings: field_content_sync_settings.and_then(Option::flatten),
27469        };
27470        Ok(Some(result))
27471    }
27472
27473    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27474        &self,
27475        s: &mut S::SerializeStruct,
27476    ) -> Result<(), S::Error> {
27477        use serde::ser::SerializeStruct;
27478        s.serialize_field("team_folder_id", &self.team_folder_id)?;
27479        if let Some(val) = &self.sync_setting {
27480            s.serialize_field("sync_setting", val)?;
27481        }
27482        if let Some(val) = &self.content_sync_settings {
27483            s.serialize_field("content_sync_settings", val)?;
27484        }
27485        Ok(())
27486    }
27487}
27488
27489impl<'de> ::serde::de::Deserialize<'de> for TeamFolderUpdateSyncSettingsArg {
27490    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27491        // struct deserializer
27492        use serde::de::{MapAccess, Visitor};
27493        struct StructVisitor;
27494        impl<'de> Visitor<'de> for StructVisitor {
27495            type Value = TeamFolderUpdateSyncSettingsArg;
27496            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27497                f.write_str("a TeamFolderUpdateSyncSettingsArg struct")
27498            }
27499            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27500                TeamFolderUpdateSyncSettingsArg::internal_deserialize(map)
27501            }
27502        }
27503        deserializer.deserialize_struct("TeamFolderUpdateSyncSettingsArg", TEAM_FOLDER_UPDATE_SYNC_SETTINGS_ARG_FIELDS, StructVisitor)
27504    }
27505}
27506
27507impl ::serde::ser::Serialize for TeamFolderUpdateSyncSettingsArg {
27508    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27509        // struct serializer
27510        use serde::ser::SerializeStruct;
27511        let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsArg", 3)?;
27512        self.internal_serialize::<S>(&mut s)?;
27513        s.end()
27514    }
27515}
27516
27517// struct extends TeamFolderIdArg
27518impl From<TeamFolderUpdateSyncSettingsArg> for TeamFolderIdArg {
27519    fn from(subtype: TeamFolderUpdateSyncSettingsArg) -> Self {
27520        Self {
27521            team_folder_id: subtype.team_folder_id,
27522        }
27523    }
27524}
27525#[derive(Debug, Clone, PartialEq, Eq)]
27526#[non_exhaustive] // variants may be added in the future
27527pub enum TeamFolderUpdateSyncSettingsError {
27528    AccessError(TeamFolderAccessError),
27529    StatusError(TeamFolderInvalidStatusError),
27530    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
27531    /// An error occurred setting the sync settings.
27532    SyncSettingsError(crate::types::files::SyncSettingsError),
27533    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27534    /// typically indicates that this SDK version is out of date.
27535    Other,
27536}
27537
27538impl<'de> ::serde::de::Deserialize<'de> for TeamFolderUpdateSyncSettingsError {
27539    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27540        // union deserializer
27541        use serde::de::{self, MapAccess, Visitor};
27542        struct EnumVisitor;
27543        impl<'de> Visitor<'de> for EnumVisitor {
27544            type Value = TeamFolderUpdateSyncSettingsError;
27545            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27546                f.write_str("a TeamFolderUpdateSyncSettingsError structure")
27547            }
27548            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27549                let tag: &str = match map.next_key()? {
27550                    Some(".tag") => map.next_value()?,
27551                    _ => return Err(de::Error::missing_field(".tag"))
27552                };
27553                let value = match tag {
27554                    "access_error" => {
27555                        match map.next_key()? {
27556                            Some("access_error") => TeamFolderUpdateSyncSettingsError::AccessError(map.next_value()?),
27557                            None => return Err(de::Error::missing_field("access_error")),
27558                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27559                        }
27560                    }
27561                    "status_error" => {
27562                        match map.next_key()? {
27563                            Some("status_error") => TeamFolderUpdateSyncSettingsError::StatusError(map.next_value()?),
27564                            None => return Err(de::Error::missing_field("status_error")),
27565                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27566                        }
27567                    }
27568                    "team_shared_dropbox_error" => {
27569                        match map.next_key()? {
27570                            Some("team_shared_dropbox_error") => TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(map.next_value()?),
27571                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
27572                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27573                        }
27574                    }
27575                    "sync_settings_error" => {
27576                        match map.next_key()? {
27577                            Some("sync_settings_error") => TeamFolderUpdateSyncSettingsError::SyncSettingsError(map.next_value()?),
27578                            None => return Err(de::Error::missing_field("sync_settings_error")),
27579                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27580                        }
27581                    }
27582                    _ => TeamFolderUpdateSyncSettingsError::Other,
27583                };
27584                crate::eat_json_fields(&mut map)?;
27585                Ok(value)
27586            }
27587        }
27588        const VARIANTS: &[&str] = &["access_error",
27589                                    "status_error",
27590                                    "team_shared_dropbox_error",
27591                                    "other",
27592                                    "sync_settings_error"];
27593        deserializer.deserialize_struct("TeamFolderUpdateSyncSettingsError", VARIANTS, EnumVisitor)
27594    }
27595}
27596
27597impl ::serde::ser::Serialize for TeamFolderUpdateSyncSettingsError {
27598    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27599        // union serializer
27600        use serde::ser::SerializeStruct;
27601        match self {
27602            TeamFolderUpdateSyncSettingsError::AccessError(x) => {
27603                // union or polymporphic struct
27604                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
27605                s.serialize_field(".tag", "access_error")?;
27606                s.serialize_field("access_error", x)?;
27607                s.end()
27608            }
27609            TeamFolderUpdateSyncSettingsError::StatusError(x) => {
27610                // union or polymporphic struct
27611                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
27612                s.serialize_field(".tag", "status_error")?;
27613                s.serialize_field("status_error", x)?;
27614                s.end()
27615            }
27616            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(x) => {
27617                // union or polymporphic struct
27618                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
27619                s.serialize_field(".tag", "team_shared_dropbox_error")?;
27620                s.serialize_field("team_shared_dropbox_error", x)?;
27621                s.end()
27622            }
27623            TeamFolderUpdateSyncSettingsError::SyncSettingsError(x) => {
27624                // union or polymporphic struct
27625                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
27626                s.serialize_field(".tag", "sync_settings_error")?;
27627                s.serialize_field("sync_settings_error", x)?;
27628                s.end()
27629            }
27630            TeamFolderUpdateSyncSettingsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27631        }
27632    }
27633}
27634
27635impl ::std::error::Error for TeamFolderUpdateSyncSettingsError {
27636    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
27637        match self {
27638            TeamFolderUpdateSyncSettingsError::AccessError(inner) => Some(inner),
27639            TeamFolderUpdateSyncSettingsError::StatusError(inner) => Some(inner),
27640            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(inner) => Some(inner),
27641            TeamFolderUpdateSyncSettingsError::SyncSettingsError(inner) => Some(inner),
27642            _ => None,
27643        }
27644    }
27645}
27646
27647impl ::std::fmt::Display for TeamFolderUpdateSyncSettingsError {
27648    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27649        match self {
27650            TeamFolderUpdateSyncSettingsError::AccessError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
27651            TeamFolderUpdateSyncSettingsError::StatusError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
27652            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
27653            TeamFolderUpdateSyncSettingsError::SyncSettingsError(inner) => write!(f, "An error occurred setting the sync settings: {}", inner),
27654            _ => write!(f, "{:?}", *self),
27655        }
27656    }
27657}
27658
27659// union extends BaseTeamFolderError
27660impl From<BaseTeamFolderError> for TeamFolderUpdateSyncSettingsError {
27661    fn from(parent: BaseTeamFolderError) -> Self {
27662        match parent {
27663            BaseTeamFolderError::AccessError(x) => TeamFolderUpdateSyncSettingsError::AccessError(x),
27664            BaseTeamFolderError::StatusError(x) => TeamFolderUpdateSyncSettingsError::StatusError(x),
27665            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(x),
27666            BaseTeamFolderError::Other => TeamFolderUpdateSyncSettingsError::Other,
27667        }
27668    }
27669}
27670#[derive(Debug, Clone, PartialEq, Eq)]
27671#[non_exhaustive] // structs may have more fields added in the future.
27672pub struct TeamGetInfoResult {
27673    /// The name of the team.
27674    pub name: String,
27675    /// The ID of the team.
27676    pub team_id: String,
27677    /// The number of licenses available to the team.
27678    pub num_licensed_users: u32,
27679    /// The number of accounts that have been invited or are already active members of the team.
27680    pub num_provisioned_users: u32,
27681    pub policies: crate::types::team_policies::TeamMemberPolicies,
27682    /// The number of licenses used on the team.
27683    pub num_used_licenses: u32,
27684}
27685
27686impl TeamGetInfoResult {
27687    pub fn new(
27688        name: String,
27689        team_id: String,
27690        num_licensed_users: u32,
27691        num_provisioned_users: u32,
27692        policies: crate::types::team_policies::TeamMemberPolicies,
27693    ) -> Self {
27694        TeamGetInfoResult {
27695            name,
27696            team_id,
27697            num_licensed_users,
27698            num_provisioned_users,
27699            policies,
27700            num_used_licenses: 0,
27701        }
27702    }
27703
27704    pub fn with_num_used_licenses(mut self, value: u32) -> Self {
27705        self.num_used_licenses = value;
27706        self
27707    }
27708}
27709
27710const TEAM_GET_INFO_RESULT_FIELDS: &[&str] = &["name",
27711                                               "team_id",
27712                                               "num_licensed_users",
27713                                               "num_provisioned_users",
27714                                               "policies",
27715                                               "num_used_licenses"];
27716impl TeamGetInfoResult {
27717    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27718        map: V,
27719    ) -> Result<TeamGetInfoResult, V::Error> {
27720        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27721    }
27722
27723    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27724        mut map: V,
27725        optional: bool,
27726    ) -> Result<Option<TeamGetInfoResult>, V::Error> {
27727        let mut field_name = None;
27728        let mut field_team_id = None;
27729        let mut field_num_licensed_users = None;
27730        let mut field_num_provisioned_users = None;
27731        let mut field_policies = None;
27732        let mut field_num_used_licenses = None;
27733        let mut nothing = true;
27734        while let Some(key) = map.next_key::<&str>()? {
27735            nothing = false;
27736            match key {
27737                "name" => {
27738                    if field_name.is_some() {
27739                        return Err(::serde::de::Error::duplicate_field("name"));
27740                    }
27741                    field_name = Some(map.next_value()?);
27742                }
27743                "team_id" => {
27744                    if field_team_id.is_some() {
27745                        return Err(::serde::de::Error::duplicate_field("team_id"));
27746                    }
27747                    field_team_id = Some(map.next_value()?);
27748                }
27749                "num_licensed_users" => {
27750                    if field_num_licensed_users.is_some() {
27751                        return Err(::serde::de::Error::duplicate_field("num_licensed_users"));
27752                    }
27753                    field_num_licensed_users = Some(map.next_value()?);
27754                }
27755                "num_provisioned_users" => {
27756                    if field_num_provisioned_users.is_some() {
27757                        return Err(::serde::de::Error::duplicate_field("num_provisioned_users"));
27758                    }
27759                    field_num_provisioned_users = Some(map.next_value()?);
27760                }
27761                "policies" => {
27762                    if field_policies.is_some() {
27763                        return Err(::serde::de::Error::duplicate_field("policies"));
27764                    }
27765                    field_policies = Some(map.next_value()?);
27766                }
27767                "num_used_licenses" => {
27768                    if field_num_used_licenses.is_some() {
27769                        return Err(::serde::de::Error::duplicate_field("num_used_licenses"));
27770                    }
27771                    field_num_used_licenses = Some(map.next_value()?);
27772                }
27773                _ => {
27774                    // unknown field allowed and ignored
27775                    map.next_value::<::serde_json::Value>()?;
27776                }
27777            }
27778        }
27779        if optional && nothing {
27780            return Ok(None);
27781        }
27782        let result = TeamGetInfoResult {
27783            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
27784            team_id: field_team_id.ok_or_else(|| ::serde::de::Error::missing_field("team_id"))?,
27785            num_licensed_users: field_num_licensed_users.ok_or_else(|| ::serde::de::Error::missing_field("num_licensed_users"))?,
27786            num_provisioned_users: field_num_provisioned_users.ok_or_else(|| ::serde::de::Error::missing_field("num_provisioned_users"))?,
27787            policies: field_policies.ok_or_else(|| ::serde::de::Error::missing_field("policies"))?,
27788            num_used_licenses: field_num_used_licenses.unwrap_or(0),
27789        };
27790        Ok(Some(result))
27791    }
27792
27793    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27794        &self,
27795        s: &mut S::SerializeStruct,
27796    ) -> Result<(), S::Error> {
27797        use serde::ser::SerializeStruct;
27798        s.serialize_field("name", &self.name)?;
27799        s.serialize_field("team_id", &self.team_id)?;
27800        s.serialize_field("num_licensed_users", &self.num_licensed_users)?;
27801        s.serialize_field("num_provisioned_users", &self.num_provisioned_users)?;
27802        s.serialize_field("policies", &self.policies)?;
27803        if self.num_used_licenses != 0 {
27804            s.serialize_field("num_used_licenses", &self.num_used_licenses)?;
27805        }
27806        Ok(())
27807    }
27808}
27809
27810impl<'de> ::serde::de::Deserialize<'de> for TeamGetInfoResult {
27811    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27812        // struct deserializer
27813        use serde::de::{MapAccess, Visitor};
27814        struct StructVisitor;
27815        impl<'de> Visitor<'de> for StructVisitor {
27816            type Value = TeamGetInfoResult;
27817            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27818                f.write_str("a TeamGetInfoResult struct")
27819            }
27820            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27821                TeamGetInfoResult::internal_deserialize(map)
27822            }
27823        }
27824        deserializer.deserialize_struct("TeamGetInfoResult", TEAM_GET_INFO_RESULT_FIELDS, StructVisitor)
27825    }
27826}
27827
27828impl ::serde::ser::Serialize for TeamGetInfoResult {
27829    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27830        // struct serializer
27831        use serde::ser::SerializeStruct;
27832        let mut s = serializer.serialize_struct("TeamGetInfoResult", 6)?;
27833        self.internal_serialize::<S>(&mut s)?;
27834        s.end()
27835    }
27836}
27837
27838/// Information about a team member.
27839#[derive(Debug, Clone, PartialEq, Eq)]
27840#[non_exhaustive] // structs may have more fields added in the future.
27841pub struct TeamMemberInfo {
27842    /// Profile of a user as a member of a team.
27843    pub profile: TeamMemberProfile,
27844    /// The user's role in the team.
27845    pub role: AdminTier,
27846}
27847
27848impl TeamMemberInfo {
27849    pub fn new(profile: TeamMemberProfile, role: AdminTier) -> Self {
27850        TeamMemberInfo {
27851            profile,
27852            role,
27853        }
27854    }
27855}
27856
27857const TEAM_MEMBER_INFO_FIELDS: &[&str] = &["profile",
27858                                           "role"];
27859impl TeamMemberInfo {
27860    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27861        map: V,
27862    ) -> Result<TeamMemberInfo, V::Error> {
27863        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27864    }
27865
27866    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27867        mut map: V,
27868        optional: bool,
27869    ) -> Result<Option<TeamMemberInfo>, V::Error> {
27870        let mut field_profile = None;
27871        let mut field_role = None;
27872        let mut nothing = true;
27873        while let Some(key) = map.next_key::<&str>()? {
27874            nothing = false;
27875            match key {
27876                "profile" => {
27877                    if field_profile.is_some() {
27878                        return Err(::serde::de::Error::duplicate_field("profile"));
27879                    }
27880                    field_profile = Some(map.next_value()?);
27881                }
27882                "role" => {
27883                    if field_role.is_some() {
27884                        return Err(::serde::de::Error::duplicate_field("role"));
27885                    }
27886                    field_role = Some(map.next_value()?);
27887                }
27888                _ => {
27889                    // unknown field allowed and ignored
27890                    map.next_value::<::serde_json::Value>()?;
27891                }
27892            }
27893        }
27894        if optional && nothing {
27895            return Ok(None);
27896        }
27897        let result = TeamMemberInfo {
27898            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
27899            role: field_role.ok_or_else(|| ::serde::de::Error::missing_field("role"))?,
27900        };
27901        Ok(Some(result))
27902    }
27903
27904    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27905        &self,
27906        s: &mut S::SerializeStruct,
27907    ) -> Result<(), S::Error> {
27908        use serde::ser::SerializeStruct;
27909        s.serialize_field("profile", &self.profile)?;
27910        s.serialize_field("role", &self.role)?;
27911        Ok(())
27912    }
27913}
27914
27915impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfo {
27916    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27917        // struct deserializer
27918        use serde::de::{MapAccess, Visitor};
27919        struct StructVisitor;
27920        impl<'de> Visitor<'de> for StructVisitor {
27921            type Value = TeamMemberInfo;
27922            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27923                f.write_str("a TeamMemberInfo struct")
27924            }
27925            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27926                TeamMemberInfo::internal_deserialize(map)
27927            }
27928        }
27929        deserializer.deserialize_struct("TeamMemberInfo", TEAM_MEMBER_INFO_FIELDS, StructVisitor)
27930    }
27931}
27932
27933impl ::serde::ser::Serialize for TeamMemberInfo {
27934    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27935        // struct serializer
27936        use serde::ser::SerializeStruct;
27937        let mut s = serializer.serialize_struct("TeamMemberInfo", 2)?;
27938        self.internal_serialize::<S>(&mut s)?;
27939        s.end()
27940    }
27941}
27942
27943/// Information about a team member.
27944#[derive(Debug, Clone, PartialEq, Eq)]
27945#[non_exhaustive] // structs may have more fields added in the future.
27946pub struct TeamMemberInfoV2 {
27947    /// Profile of a user as a member of a team.
27948    pub profile: TeamMemberProfile,
27949    /// The user's roles in the team.
27950    pub roles: Option<Vec<TeamMemberRole>>,
27951}
27952
27953impl TeamMemberInfoV2 {
27954    pub fn new(profile: TeamMemberProfile) -> Self {
27955        TeamMemberInfoV2 {
27956            profile,
27957            roles: None,
27958        }
27959    }
27960
27961    pub fn with_roles(mut self, value: Vec<TeamMemberRole>) -> Self {
27962        self.roles = Some(value);
27963        self
27964    }
27965}
27966
27967const TEAM_MEMBER_INFO_V2_FIELDS: &[&str] = &["profile",
27968                                              "roles"];
27969impl TeamMemberInfoV2 {
27970    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27971        map: V,
27972    ) -> Result<TeamMemberInfoV2, V::Error> {
27973        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27974    }
27975
27976    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27977        mut map: V,
27978        optional: bool,
27979    ) -> Result<Option<TeamMemberInfoV2>, V::Error> {
27980        let mut field_profile = None;
27981        let mut field_roles = None;
27982        let mut nothing = true;
27983        while let Some(key) = map.next_key::<&str>()? {
27984            nothing = false;
27985            match key {
27986                "profile" => {
27987                    if field_profile.is_some() {
27988                        return Err(::serde::de::Error::duplicate_field("profile"));
27989                    }
27990                    field_profile = Some(map.next_value()?);
27991                }
27992                "roles" => {
27993                    if field_roles.is_some() {
27994                        return Err(::serde::de::Error::duplicate_field("roles"));
27995                    }
27996                    field_roles = Some(map.next_value()?);
27997                }
27998                _ => {
27999                    // unknown field allowed and ignored
28000                    map.next_value::<::serde_json::Value>()?;
28001                }
28002            }
28003        }
28004        if optional && nothing {
28005            return Ok(None);
28006        }
28007        let result = TeamMemberInfoV2 {
28008            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
28009            roles: field_roles.and_then(Option::flatten),
28010        };
28011        Ok(Some(result))
28012    }
28013
28014    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28015        &self,
28016        s: &mut S::SerializeStruct,
28017    ) -> Result<(), S::Error> {
28018        use serde::ser::SerializeStruct;
28019        s.serialize_field("profile", &self.profile)?;
28020        if let Some(val) = &self.roles {
28021            s.serialize_field("roles", val)?;
28022        }
28023        Ok(())
28024    }
28025}
28026
28027impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfoV2 {
28028    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28029        // struct deserializer
28030        use serde::de::{MapAccess, Visitor};
28031        struct StructVisitor;
28032        impl<'de> Visitor<'de> for StructVisitor {
28033            type Value = TeamMemberInfoV2;
28034            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28035                f.write_str("a TeamMemberInfoV2 struct")
28036            }
28037            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28038                TeamMemberInfoV2::internal_deserialize(map)
28039            }
28040        }
28041        deserializer.deserialize_struct("TeamMemberInfoV2", TEAM_MEMBER_INFO_V2_FIELDS, StructVisitor)
28042    }
28043}
28044
28045impl ::serde::ser::Serialize for TeamMemberInfoV2 {
28046    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28047        // struct serializer
28048        use serde::ser::SerializeStruct;
28049        let mut s = serializer.serialize_struct("TeamMemberInfoV2", 2)?;
28050        self.internal_serialize::<S>(&mut s)?;
28051        s.end()
28052    }
28053}
28054
28055/// Information about a team member, after the change, like at
28056/// [`members_set_profile_v2()`](crate::team::members_set_profile_v2).
28057#[derive(Debug, Clone, PartialEq, Eq)]
28058#[non_exhaustive] // structs may have more fields added in the future.
28059pub struct TeamMemberInfoV2Result {
28060    /// Member info, after the change.
28061    pub member_info: TeamMemberInfoV2,
28062}
28063
28064impl TeamMemberInfoV2Result {
28065    pub fn new(member_info: TeamMemberInfoV2) -> Self {
28066        TeamMemberInfoV2Result {
28067            member_info,
28068        }
28069    }
28070}
28071
28072const TEAM_MEMBER_INFO_V2_RESULT_FIELDS: &[&str] = &["member_info"];
28073impl TeamMemberInfoV2Result {
28074    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28075        map: V,
28076    ) -> Result<TeamMemberInfoV2Result, V::Error> {
28077        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28078    }
28079
28080    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28081        mut map: V,
28082        optional: bool,
28083    ) -> Result<Option<TeamMemberInfoV2Result>, V::Error> {
28084        let mut field_member_info = None;
28085        let mut nothing = true;
28086        while let Some(key) = map.next_key::<&str>()? {
28087            nothing = false;
28088            match key {
28089                "member_info" => {
28090                    if field_member_info.is_some() {
28091                        return Err(::serde::de::Error::duplicate_field("member_info"));
28092                    }
28093                    field_member_info = Some(map.next_value()?);
28094                }
28095                _ => {
28096                    // unknown field allowed and ignored
28097                    map.next_value::<::serde_json::Value>()?;
28098                }
28099            }
28100        }
28101        if optional && nothing {
28102            return Ok(None);
28103        }
28104        let result = TeamMemberInfoV2Result {
28105            member_info: field_member_info.ok_or_else(|| ::serde::de::Error::missing_field("member_info"))?,
28106        };
28107        Ok(Some(result))
28108    }
28109
28110    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28111        &self,
28112        s: &mut S::SerializeStruct,
28113    ) -> Result<(), S::Error> {
28114        use serde::ser::SerializeStruct;
28115        s.serialize_field("member_info", &self.member_info)?;
28116        Ok(())
28117    }
28118}
28119
28120impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfoV2Result {
28121    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28122        // struct deserializer
28123        use serde::de::{MapAccess, Visitor};
28124        struct StructVisitor;
28125        impl<'de> Visitor<'de> for StructVisitor {
28126            type Value = TeamMemberInfoV2Result;
28127            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28128                f.write_str("a TeamMemberInfoV2Result struct")
28129            }
28130            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28131                TeamMemberInfoV2Result::internal_deserialize(map)
28132            }
28133        }
28134        deserializer.deserialize_struct("TeamMemberInfoV2Result", TEAM_MEMBER_INFO_V2_RESULT_FIELDS, StructVisitor)
28135    }
28136}
28137
28138impl ::serde::ser::Serialize for TeamMemberInfoV2Result {
28139    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28140        // struct serializer
28141        use serde::ser::SerializeStruct;
28142        let mut s = serializer.serialize_struct("TeamMemberInfoV2Result", 1)?;
28143        self.internal_serialize::<S>(&mut s)?;
28144        s.end()
28145    }
28146}
28147
28148/// Profile of a user as a member of a team.
28149#[derive(Debug, Clone, PartialEq, Eq)]
28150#[non_exhaustive] // structs may have more fields added in the future.
28151pub struct TeamMemberProfile {
28152    /// ID of user as a member of a team.
28153    pub team_member_id: crate::types::team_common::TeamMemberId,
28154    /// Email address of user.
28155    pub email: String,
28156    /// Is true if the user's email is verified to be owned by the user.
28157    pub email_verified: bool,
28158    /// The user's status as a member of a specific team.
28159    pub status: TeamMemberStatus,
28160    /// Representations for a person's name.
28161    pub name: crate::types::users::Name,
28162    /// The user's membership type: full (normal team member) vs limited (does not use a license; no
28163    /// access to the team's shared quota).
28164    pub membership_type: TeamMembershipType,
28165    /// List of group IDs of groups that the user belongs to.
28166    pub groups: Vec<crate::types::team_common::GroupId>,
28167    /// The namespace id of the user's member folder.
28168    pub member_folder_id: crate::types::common::NamespaceId,
28169    /// The namespace id of the user's root folder.
28170    pub root_folder_id: crate::types::common::NamespaceId,
28171    /// External ID that a team can attach to the user. An application using the API may find it
28172    /// easier to use their own IDs instead of Dropbox IDs like account_id or team_member_id.
28173    pub external_id: Option<String>,
28174    /// A user's account identifier.
28175    pub account_id: Option<crate::types::users_common::AccountId>,
28176    /// Secondary emails of a user.
28177    pub secondary_emails: Option<Vec<crate::types::secondary_emails::SecondaryEmail>>,
28178    /// The date and time the user was invited to the team (contains value only when the member's
28179    /// status matches [`TeamMemberStatus::Invited`]).
28180    pub invited_on: Option<crate::types::common::DropboxTimestamp>,
28181    /// The date and time the user joined as a member of a specific team.
28182    pub joined_on: Option<crate::types::common::DropboxTimestamp>,
28183    /// The date and time the user was suspended from the team (contains value only when the
28184    /// member's status matches [`TeamMemberStatus::Suspended`]).
28185    pub suspended_on: Option<crate::types::common::DropboxTimestamp>,
28186    /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used
28187    /// for SAML authentication.
28188    pub persistent_id: Option<String>,
28189    /// Whether the user is a directory restricted user.
28190    pub is_directory_restricted: Option<bool>,
28191    /// URL for the photo representing the user, if one is set.
28192    pub profile_photo_url: Option<String>,
28193}
28194
28195impl TeamMemberProfile {
28196    pub fn new(
28197        team_member_id: crate::types::team_common::TeamMemberId,
28198        email: String,
28199        email_verified: bool,
28200        status: TeamMemberStatus,
28201        name: crate::types::users::Name,
28202        membership_type: TeamMembershipType,
28203        groups: Vec<crate::types::team_common::GroupId>,
28204        member_folder_id: crate::types::common::NamespaceId,
28205        root_folder_id: crate::types::common::NamespaceId,
28206    ) -> Self {
28207        TeamMemberProfile {
28208            team_member_id,
28209            email,
28210            email_verified,
28211            status,
28212            name,
28213            membership_type,
28214            groups,
28215            member_folder_id,
28216            root_folder_id,
28217            external_id: None,
28218            account_id: None,
28219            secondary_emails: None,
28220            invited_on: None,
28221            joined_on: None,
28222            suspended_on: None,
28223            persistent_id: None,
28224            is_directory_restricted: None,
28225            profile_photo_url: None,
28226        }
28227    }
28228
28229    pub fn with_external_id(mut self, value: String) -> Self {
28230        self.external_id = Some(value);
28231        self
28232    }
28233
28234    pub fn with_account_id(mut self, value: crate::types::users_common::AccountId) -> Self {
28235        self.account_id = Some(value);
28236        self
28237    }
28238
28239    pub fn with_secondary_emails(
28240        mut self,
28241        value: Vec<crate::types::secondary_emails::SecondaryEmail>,
28242    ) -> Self {
28243        self.secondary_emails = Some(value);
28244        self
28245    }
28246
28247    pub fn with_invited_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
28248        self.invited_on = Some(value);
28249        self
28250    }
28251
28252    pub fn with_joined_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
28253        self.joined_on = Some(value);
28254        self
28255    }
28256
28257    pub fn with_suspended_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
28258        self.suspended_on = Some(value);
28259        self
28260    }
28261
28262    pub fn with_persistent_id(mut self, value: String) -> Self {
28263        self.persistent_id = Some(value);
28264        self
28265    }
28266
28267    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
28268        self.is_directory_restricted = Some(value);
28269        self
28270    }
28271
28272    pub fn with_profile_photo_url(mut self, value: String) -> Self {
28273        self.profile_photo_url = Some(value);
28274        self
28275    }
28276}
28277
28278const TEAM_MEMBER_PROFILE_FIELDS: &[&str] = &["team_member_id",
28279                                              "email",
28280                                              "email_verified",
28281                                              "status",
28282                                              "name",
28283                                              "membership_type",
28284                                              "groups",
28285                                              "member_folder_id",
28286                                              "root_folder_id",
28287                                              "external_id",
28288                                              "account_id",
28289                                              "secondary_emails",
28290                                              "invited_on",
28291                                              "joined_on",
28292                                              "suspended_on",
28293                                              "persistent_id",
28294                                              "is_directory_restricted",
28295                                              "profile_photo_url"];
28296impl TeamMemberProfile {
28297    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28298        map: V,
28299    ) -> Result<TeamMemberProfile, V::Error> {
28300        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28301    }
28302
28303    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28304        mut map: V,
28305        optional: bool,
28306    ) -> Result<Option<TeamMemberProfile>, V::Error> {
28307        let mut field_team_member_id = None;
28308        let mut field_email = None;
28309        let mut field_email_verified = None;
28310        let mut field_status = None;
28311        let mut field_name = None;
28312        let mut field_membership_type = None;
28313        let mut field_groups = None;
28314        let mut field_member_folder_id = None;
28315        let mut field_root_folder_id = None;
28316        let mut field_external_id = None;
28317        let mut field_account_id = None;
28318        let mut field_secondary_emails = None;
28319        let mut field_invited_on = None;
28320        let mut field_joined_on = None;
28321        let mut field_suspended_on = None;
28322        let mut field_persistent_id = None;
28323        let mut field_is_directory_restricted = None;
28324        let mut field_profile_photo_url = None;
28325        let mut nothing = true;
28326        while let Some(key) = map.next_key::<&str>()? {
28327            nothing = false;
28328            match key {
28329                "team_member_id" => {
28330                    if field_team_member_id.is_some() {
28331                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
28332                    }
28333                    field_team_member_id = Some(map.next_value()?);
28334                }
28335                "email" => {
28336                    if field_email.is_some() {
28337                        return Err(::serde::de::Error::duplicate_field("email"));
28338                    }
28339                    field_email = Some(map.next_value()?);
28340                }
28341                "email_verified" => {
28342                    if field_email_verified.is_some() {
28343                        return Err(::serde::de::Error::duplicate_field("email_verified"));
28344                    }
28345                    field_email_verified = Some(map.next_value()?);
28346                }
28347                "status" => {
28348                    if field_status.is_some() {
28349                        return Err(::serde::de::Error::duplicate_field("status"));
28350                    }
28351                    field_status = Some(map.next_value()?);
28352                }
28353                "name" => {
28354                    if field_name.is_some() {
28355                        return Err(::serde::de::Error::duplicate_field("name"));
28356                    }
28357                    field_name = Some(map.next_value()?);
28358                }
28359                "membership_type" => {
28360                    if field_membership_type.is_some() {
28361                        return Err(::serde::de::Error::duplicate_field("membership_type"));
28362                    }
28363                    field_membership_type = Some(map.next_value()?);
28364                }
28365                "groups" => {
28366                    if field_groups.is_some() {
28367                        return Err(::serde::de::Error::duplicate_field("groups"));
28368                    }
28369                    field_groups = Some(map.next_value()?);
28370                }
28371                "member_folder_id" => {
28372                    if field_member_folder_id.is_some() {
28373                        return Err(::serde::de::Error::duplicate_field("member_folder_id"));
28374                    }
28375                    field_member_folder_id = Some(map.next_value()?);
28376                }
28377                "root_folder_id" => {
28378                    if field_root_folder_id.is_some() {
28379                        return Err(::serde::de::Error::duplicate_field("root_folder_id"));
28380                    }
28381                    field_root_folder_id = Some(map.next_value()?);
28382                }
28383                "external_id" => {
28384                    if field_external_id.is_some() {
28385                        return Err(::serde::de::Error::duplicate_field("external_id"));
28386                    }
28387                    field_external_id = Some(map.next_value()?);
28388                }
28389                "account_id" => {
28390                    if field_account_id.is_some() {
28391                        return Err(::serde::de::Error::duplicate_field("account_id"));
28392                    }
28393                    field_account_id = Some(map.next_value()?);
28394                }
28395                "secondary_emails" => {
28396                    if field_secondary_emails.is_some() {
28397                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
28398                    }
28399                    field_secondary_emails = Some(map.next_value()?);
28400                }
28401                "invited_on" => {
28402                    if field_invited_on.is_some() {
28403                        return Err(::serde::de::Error::duplicate_field("invited_on"));
28404                    }
28405                    field_invited_on = Some(map.next_value()?);
28406                }
28407                "joined_on" => {
28408                    if field_joined_on.is_some() {
28409                        return Err(::serde::de::Error::duplicate_field("joined_on"));
28410                    }
28411                    field_joined_on = Some(map.next_value()?);
28412                }
28413                "suspended_on" => {
28414                    if field_suspended_on.is_some() {
28415                        return Err(::serde::de::Error::duplicate_field("suspended_on"));
28416                    }
28417                    field_suspended_on = Some(map.next_value()?);
28418                }
28419                "persistent_id" => {
28420                    if field_persistent_id.is_some() {
28421                        return Err(::serde::de::Error::duplicate_field("persistent_id"));
28422                    }
28423                    field_persistent_id = Some(map.next_value()?);
28424                }
28425                "is_directory_restricted" => {
28426                    if field_is_directory_restricted.is_some() {
28427                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
28428                    }
28429                    field_is_directory_restricted = Some(map.next_value()?);
28430                }
28431                "profile_photo_url" => {
28432                    if field_profile_photo_url.is_some() {
28433                        return Err(::serde::de::Error::duplicate_field("profile_photo_url"));
28434                    }
28435                    field_profile_photo_url = Some(map.next_value()?);
28436                }
28437                _ => {
28438                    // unknown field allowed and ignored
28439                    map.next_value::<::serde_json::Value>()?;
28440                }
28441            }
28442        }
28443        if optional && nothing {
28444            return Ok(None);
28445        }
28446        let result = TeamMemberProfile {
28447            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
28448            email: field_email.ok_or_else(|| ::serde::de::Error::missing_field("email"))?,
28449            email_verified: field_email_verified.ok_or_else(|| ::serde::de::Error::missing_field("email_verified"))?,
28450            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
28451            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
28452            membership_type: field_membership_type.ok_or_else(|| ::serde::de::Error::missing_field("membership_type"))?,
28453            groups: field_groups.ok_or_else(|| ::serde::de::Error::missing_field("groups"))?,
28454            member_folder_id: field_member_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("member_folder_id"))?,
28455            root_folder_id: field_root_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("root_folder_id"))?,
28456            external_id: field_external_id.and_then(Option::flatten),
28457            account_id: field_account_id.and_then(Option::flatten),
28458            secondary_emails: field_secondary_emails.and_then(Option::flatten),
28459            invited_on: field_invited_on.and_then(Option::flatten),
28460            joined_on: field_joined_on.and_then(Option::flatten),
28461            suspended_on: field_suspended_on.and_then(Option::flatten),
28462            persistent_id: field_persistent_id.and_then(Option::flatten),
28463            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
28464            profile_photo_url: field_profile_photo_url.and_then(Option::flatten),
28465        };
28466        Ok(Some(result))
28467    }
28468
28469    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28470        &self,
28471        s: &mut S::SerializeStruct,
28472    ) -> Result<(), S::Error> {
28473        use serde::ser::SerializeStruct;
28474        s.serialize_field("team_member_id", &self.team_member_id)?;
28475        s.serialize_field("email", &self.email)?;
28476        s.serialize_field("email_verified", &self.email_verified)?;
28477        s.serialize_field("status", &self.status)?;
28478        s.serialize_field("name", &self.name)?;
28479        s.serialize_field("membership_type", &self.membership_type)?;
28480        s.serialize_field("groups", &self.groups)?;
28481        s.serialize_field("member_folder_id", &self.member_folder_id)?;
28482        s.serialize_field("root_folder_id", &self.root_folder_id)?;
28483        if let Some(val) = &self.external_id {
28484            s.serialize_field("external_id", val)?;
28485        }
28486        if let Some(val) = &self.account_id {
28487            s.serialize_field("account_id", val)?;
28488        }
28489        if let Some(val) = &self.secondary_emails {
28490            s.serialize_field("secondary_emails", val)?;
28491        }
28492        if let Some(val) = &self.invited_on {
28493            s.serialize_field("invited_on", val)?;
28494        }
28495        if let Some(val) = &self.joined_on {
28496            s.serialize_field("joined_on", val)?;
28497        }
28498        if let Some(val) = &self.suspended_on {
28499            s.serialize_field("suspended_on", val)?;
28500        }
28501        if let Some(val) = &self.persistent_id {
28502            s.serialize_field("persistent_id", val)?;
28503        }
28504        if let Some(val) = &self.is_directory_restricted {
28505            s.serialize_field("is_directory_restricted", val)?;
28506        }
28507        if let Some(val) = &self.profile_photo_url {
28508            s.serialize_field("profile_photo_url", val)?;
28509        }
28510        Ok(())
28511    }
28512}
28513
28514impl<'de> ::serde::de::Deserialize<'de> for TeamMemberProfile {
28515    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28516        // struct deserializer
28517        use serde::de::{MapAccess, Visitor};
28518        struct StructVisitor;
28519        impl<'de> Visitor<'de> for StructVisitor {
28520            type Value = TeamMemberProfile;
28521            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28522                f.write_str("a TeamMemberProfile struct")
28523            }
28524            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28525                TeamMemberProfile::internal_deserialize(map)
28526            }
28527        }
28528        deserializer.deserialize_struct("TeamMemberProfile", TEAM_MEMBER_PROFILE_FIELDS, StructVisitor)
28529    }
28530}
28531
28532impl ::serde::ser::Serialize for TeamMemberProfile {
28533    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28534        // struct serializer
28535        use serde::ser::SerializeStruct;
28536        let mut s = serializer.serialize_struct("TeamMemberProfile", 18)?;
28537        self.internal_serialize::<S>(&mut s)?;
28538        s.end()
28539    }
28540}
28541
28542// struct extends MemberProfile
28543impl From<TeamMemberProfile> for MemberProfile {
28544    fn from(subtype: TeamMemberProfile) -> Self {
28545        Self {
28546            team_member_id: subtype.team_member_id,
28547            email: subtype.email,
28548            email_verified: subtype.email_verified,
28549            status: subtype.status,
28550            name: subtype.name,
28551            membership_type: subtype.membership_type,
28552            external_id: subtype.external_id,
28553            account_id: subtype.account_id,
28554            secondary_emails: subtype.secondary_emails,
28555            invited_on: subtype.invited_on,
28556            joined_on: subtype.joined_on,
28557            suspended_on: subtype.suspended_on,
28558            persistent_id: subtype.persistent_id,
28559            is_directory_restricted: subtype.is_directory_restricted,
28560            profile_photo_url: subtype.profile_photo_url,
28561        }
28562    }
28563}
28564/// A role which can be attached to a team member. This replaces AdminTier; each AdminTier
28565/// corresponds to a new TeamMemberRole with a matching name.
28566#[derive(Debug, Clone, PartialEq, Eq)]
28567#[non_exhaustive] // structs may have more fields added in the future.
28568pub struct TeamMemberRole {
28569    /// A string containing encoded role ID. For roles defined by Dropbox, this is the same across
28570    /// all teams.
28571    pub role_id: TeamMemberRoleId,
28572    /// The role display name.
28573    pub name: String,
28574    /// Role description. Describes which permissions come with this role.
28575    pub description: String,
28576}
28577
28578impl TeamMemberRole {
28579    pub fn new(role_id: TeamMemberRoleId, name: String, description: String) -> Self {
28580        TeamMemberRole {
28581            role_id,
28582            name,
28583            description,
28584        }
28585    }
28586}
28587
28588const TEAM_MEMBER_ROLE_FIELDS: &[&str] = &["role_id",
28589                                           "name",
28590                                           "description"];
28591impl TeamMemberRole {
28592    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28593        map: V,
28594    ) -> Result<TeamMemberRole, V::Error> {
28595        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28596    }
28597
28598    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28599        mut map: V,
28600        optional: bool,
28601    ) -> Result<Option<TeamMemberRole>, V::Error> {
28602        let mut field_role_id = None;
28603        let mut field_name = None;
28604        let mut field_description = None;
28605        let mut nothing = true;
28606        while let Some(key) = map.next_key::<&str>()? {
28607            nothing = false;
28608            match key {
28609                "role_id" => {
28610                    if field_role_id.is_some() {
28611                        return Err(::serde::de::Error::duplicate_field("role_id"));
28612                    }
28613                    field_role_id = Some(map.next_value()?);
28614                }
28615                "name" => {
28616                    if field_name.is_some() {
28617                        return Err(::serde::de::Error::duplicate_field("name"));
28618                    }
28619                    field_name = Some(map.next_value()?);
28620                }
28621                "description" => {
28622                    if field_description.is_some() {
28623                        return Err(::serde::de::Error::duplicate_field("description"));
28624                    }
28625                    field_description = Some(map.next_value()?);
28626                }
28627                _ => {
28628                    // unknown field allowed and ignored
28629                    map.next_value::<::serde_json::Value>()?;
28630                }
28631            }
28632        }
28633        if optional && nothing {
28634            return Ok(None);
28635        }
28636        let result = TeamMemberRole {
28637            role_id: field_role_id.ok_or_else(|| ::serde::de::Error::missing_field("role_id"))?,
28638            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
28639            description: field_description.ok_or_else(|| ::serde::de::Error::missing_field("description"))?,
28640        };
28641        Ok(Some(result))
28642    }
28643
28644    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28645        &self,
28646        s: &mut S::SerializeStruct,
28647    ) -> Result<(), S::Error> {
28648        use serde::ser::SerializeStruct;
28649        s.serialize_field("role_id", &self.role_id)?;
28650        s.serialize_field("name", &self.name)?;
28651        s.serialize_field("description", &self.description)?;
28652        Ok(())
28653    }
28654}
28655
28656impl<'de> ::serde::de::Deserialize<'de> for TeamMemberRole {
28657    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28658        // struct deserializer
28659        use serde::de::{MapAccess, Visitor};
28660        struct StructVisitor;
28661        impl<'de> Visitor<'de> for StructVisitor {
28662            type Value = TeamMemberRole;
28663            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28664                f.write_str("a TeamMemberRole struct")
28665            }
28666            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28667                TeamMemberRole::internal_deserialize(map)
28668            }
28669        }
28670        deserializer.deserialize_struct("TeamMemberRole", TEAM_MEMBER_ROLE_FIELDS, StructVisitor)
28671    }
28672}
28673
28674impl ::serde::ser::Serialize for TeamMemberRole {
28675    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28676        // struct serializer
28677        use serde::ser::SerializeStruct;
28678        let mut s = serializer.serialize_struct("TeamMemberRole", 3)?;
28679        self.internal_serialize::<S>(&mut s)?;
28680        s.end()
28681    }
28682}
28683
28684/// The user's status as a member of a specific team.
28685#[derive(Debug, Clone, PartialEq, Eq)]
28686pub enum TeamMemberStatus {
28687    /// User has successfully joined the team.
28688    Active,
28689    /// User has been invited to a team, but has not joined the team yet.
28690    Invited,
28691    /// User is no longer a member of the team, but the account can be un-suspended, re-establishing
28692    /// the user as a team member.
28693    Suspended,
28694    /// User is no longer a member of the team. Removed users are only listed when include_removed
28695    /// is true in members/list.
28696    Removed(RemovedStatus),
28697}
28698
28699impl<'de> ::serde::de::Deserialize<'de> for TeamMemberStatus {
28700    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28701        // union deserializer
28702        use serde::de::{self, MapAccess, Visitor};
28703        struct EnumVisitor;
28704        impl<'de> Visitor<'de> for EnumVisitor {
28705            type Value = TeamMemberStatus;
28706            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28707                f.write_str("a TeamMemberStatus structure")
28708            }
28709            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28710                let tag: &str = match map.next_key()? {
28711                    Some(".tag") => map.next_value()?,
28712                    _ => return Err(de::Error::missing_field(".tag"))
28713                };
28714                let value = match tag {
28715                    "active" => TeamMemberStatus::Active,
28716                    "invited" => TeamMemberStatus::Invited,
28717                    "suspended" => TeamMemberStatus::Suspended,
28718                    "removed" => TeamMemberStatus::Removed(RemovedStatus::internal_deserialize(&mut map)?),
28719                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
28720                };
28721                crate::eat_json_fields(&mut map)?;
28722                Ok(value)
28723            }
28724        }
28725        const VARIANTS: &[&str] = &["active",
28726                                    "invited",
28727                                    "suspended",
28728                                    "removed"];
28729        deserializer.deserialize_struct("TeamMemberStatus", VARIANTS, EnumVisitor)
28730    }
28731}
28732
28733impl ::serde::ser::Serialize for TeamMemberStatus {
28734    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28735        // union serializer
28736        use serde::ser::SerializeStruct;
28737        match self {
28738            TeamMemberStatus::Active => {
28739                // unit
28740                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
28741                s.serialize_field(".tag", "active")?;
28742                s.end()
28743            }
28744            TeamMemberStatus::Invited => {
28745                // unit
28746                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
28747                s.serialize_field(".tag", "invited")?;
28748                s.end()
28749            }
28750            TeamMemberStatus::Suspended => {
28751                // unit
28752                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
28753                s.serialize_field(".tag", "suspended")?;
28754                s.end()
28755            }
28756            TeamMemberStatus::Removed(x) => {
28757                // struct
28758                let mut s = serializer.serialize_struct("TeamMemberStatus", 3)?;
28759                s.serialize_field(".tag", "removed")?;
28760                x.internal_serialize::<S>(&mut s)?;
28761                s.end()
28762            }
28763        }
28764    }
28765}
28766
28767#[derive(Debug, Clone, PartialEq, Eq)]
28768pub enum TeamMembershipType {
28769    /// User uses a license and has full access to team resources like the shared quota.
28770    Full,
28771    /// Field is deprecated. User does not have access to the shared quota and team admins have
28772    /// restricted administrative control.
28773    #[deprecated]
28774    Limited,
28775}
28776
28777impl<'de> ::serde::de::Deserialize<'de> for TeamMembershipType {
28778    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28779        // union deserializer
28780        use serde::de::{self, MapAccess, Visitor};
28781        struct EnumVisitor;
28782        impl<'de> Visitor<'de> for EnumVisitor {
28783            type Value = TeamMembershipType;
28784            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28785                f.write_str("a TeamMembershipType structure")
28786            }
28787            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28788                let tag: &str = match map.next_key()? {
28789                    Some(".tag") => map.next_value()?,
28790                    _ => return Err(de::Error::missing_field(".tag"))
28791                };
28792                let value = match tag {
28793                    "full" => TeamMembershipType::Full,
28794                    #[allow(deprecated)]
28795                    "limited" => TeamMembershipType::Limited,
28796                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
28797                };
28798                crate::eat_json_fields(&mut map)?;
28799                Ok(value)
28800            }
28801        }
28802        const VARIANTS: &[&str] = &["full",
28803                                    "limited"];
28804        deserializer.deserialize_struct("TeamMembershipType", VARIANTS, EnumVisitor)
28805    }
28806}
28807
28808impl ::serde::ser::Serialize for TeamMembershipType {
28809    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28810        // union serializer
28811        use serde::ser::SerializeStruct;
28812        match self {
28813            TeamMembershipType::Full => {
28814                // unit
28815                let mut s = serializer.serialize_struct("TeamMembershipType", 1)?;
28816                s.serialize_field(".tag", "full")?;
28817                s.end()
28818            }
28819            #[allow(deprecated)]
28820            TeamMembershipType::Limited => {
28821                // unit
28822                let mut s = serializer.serialize_struct("TeamMembershipType", 1)?;
28823                s.serialize_field(".tag", "limited")?;
28824                s.end()
28825            }
28826        }
28827    }
28828}
28829
28830#[derive(Debug, Clone, PartialEq, Eq)]
28831#[non_exhaustive] // structs may have more fields added in the future.
28832pub struct TeamNamespacesListArg {
28833    /// Field is deprecated. Specifying a value here has no effect.
28834    #[deprecated]
28835    pub limit: u32,
28836}
28837
28838impl Default for TeamNamespacesListArg {
28839    fn default() -> Self {
28840        TeamNamespacesListArg {
28841            #[allow(deprecated)] limit: 1000,
28842        }
28843    }
28844}
28845
28846impl TeamNamespacesListArg {
28847    #[deprecated]
28848    #[allow(deprecated)]
28849    pub fn with_limit(mut self, value: u32) -> Self {
28850        self.limit = value;
28851        self
28852    }
28853}
28854
28855const TEAM_NAMESPACES_LIST_ARG_FIELDS: &[&str] = &["limit"];
28856impl TeamNamespacesListArg {
28857    // no _opt deserializer
28858    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28859        mut map: V,
28860    ) -> Result<TeamNamespacesListArg, V::Error> {
28861        let mut field_limit = None;
28862        while let Some(key) = map.next_key::<&str>()? {
28863            match key {
28864                "limit" => {
28865                    if field_limit.is_some() {
28866                        return Err(::serde::de::Error::duplicate_field("limit"));
28867                    }
28868                    field_limit = Some(map.next_value()?);
28869                }
28870                _ => {
28871                    // unknown field allowed and ignored
28872                    map.next_value::<::serde_json::Value>()?;
28873                }
28874            }
28875        }
28876        let result = TeamNamespacesListArg {
28877            #[allow(deprecated)] limit: field_limit.unwrap_or(1000),
28878        };
28879        Ok(result)
28880    }
28881
28882    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28883        &self,
28884        s: &mut S::SerializeStruct,
28885    ) -> Result<(), S::Error> {
28886        use serde::ser::SerializeStruct;
28887        #[allow(deprecated)]
28888        if self.limit != 1000 {
28889            s.serialize_field("limit", &self.limit)?;
28890        }
28891        Ok(())
28892    }
28893}
28894
28895impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListArg {
28896    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28897        // struct deserializer
28898        use serde::de::{MapAccess, Visitor};
28899        struct StructVisitor;
28900        impl<'de> Visitor<'de> for StructVisitor {
28901            type Value = TeamNamespacesListArg;
28902            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28903                f.write_str("a TeamNamespacesListArg struct")
28904            }
28905            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28906                TeamNamespacesListArg::internal_deserialize(map)
28907            }
28908        }
28909        deserializer.deserialize_struct("TeamNamespacesListArg", TEAM_NAMESPACES_LIST_ARG_FIELDS, StructVisitor)
28910    }
28911}
28912
28913impl ::serde::ser::Serialize for TeamNamespacesListArg {
28914    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28915        // struct serializer
28916        use serde::ser::SerializeStruct;
28917        let mut s = serializer.serialize_struct("TeamNamespacesListArg", 1)?;
28918        self.internal_serialize::<S>(&mut s)?;
28919        s.end()
28920    }
28921}
28922
28923#[derive(Debug, Clone, PartialEq, Eq)]
28924#[non_exhaustive] // structs may have more fields added in the future.
28925pub struct TeamNamespacesListContinueArg {
28926    /// Indicates from what point to get the next set of team-accessible namespaces.
28927    pub cursor: String,
28928}
28929
28930impl TeamNamespacesListContinueArg {
28931    pub fn new(cursor: String) -> Self {
28932        TeamNamespacesListContinueArg {
28933            cursor,
28934        }
28935    }
28936}
28937
28938const TEAM_NAMESPACES_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
28939impl TeamNamespacesListContinueArg {
28940    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28941        map: V,
28942    ) -> Result<TeamNamespacesListContinueArg, V::Error> {
28943        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28944    }
28945
28946    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28947        mut map: V,
28948        optional: bool,
28949    ) -> Result<Option<TeamNamespacesListContinueArg>, V::Error> {
28950        let mut field_cursor = None;
28951        let mut nothing = true;
28952        while let Some(key) = map.next_key::<&str>()? {
28953            nothing = false;
28954            match key {
28955                "cursor" => {
28956                    if field_cursor.is_some() {
28957                        return Err(::serde::de::Error::duplicate_field("cursor"));
28958                    }
28959                    field_cursor = Some(map.next_value()?);
28960                }
28961                _ => {
28962                    // unknown field allowed and ignored
28963                    map.next_value::<::serde_json::Value>()?;
28964                }
28965            }
28966        }
28967        if optional && nothing {
28968            return Ok(None);
28969        }
28970        let result = TeamNamespacesListContinueArg {
28971            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
28972        };
28973        Ok(Some(result))
28974    }
28975
28976    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28977        &self,
28978        s: &mut S::SerializeStruct,
28979    ) -> Result<(), S::Error> {
28980        use serde::ser::SerializeStruct;
28981        s.serialize_field("cursor", &self.cursor)?;
28982        Ok(())
28983    }
28984}
28985
28986impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListContinueArg {
28987    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28988        // struct deserializer
28989        use serde::de::{MapAccess, Visitor};
28990        struct StructVisitor;
28991        impl<'de> Visitor<'de> for StructVisitor {
28992            type Value = TeamNamespacesListContinueArg;
28993            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28994                f.write_str("a TeamNamespacesListContinueArg struct")
28995            }
28996            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28997                TeamNamespacesListContinueArg::internal_deserialize(map)
28998            }
28999        }
29000        deserializer.deserialize_struct("TeamNamespacesListContinueArg", TEAM_NAMESPACES_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
29001    }
29002}
29003
29004impl ::serde::ser::Serialize for TeamNamespacesListContinueArg {
29005    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29006        // struct serializer
29007        use serde::ser::SerializeStruct;
29008        let mut s = serializer.serialize_struct("TeamNamespacesListContinueArg", 1)?;
29009        self.internal_serialize::<S>(&mut s)?;
29010        s.end()
29011    }
29012}
29013
29014#[derive(Debug, Clone, PartialEq, Eq)]
29015#[non_exhaustive] // variants may be added in the future
29016pub enum TeamNamespacesListContinueError {
29017    /// Argument passed in is invalid.
29018    InvalidArg,
29019    /// The cursor is invalid.
29020    InvalidCursor,
29021    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29022    /// typically indicates that this SDK version is out of date.
29023    Other,
29024}
29025
29026impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListContinueError {
29027    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29028        // union deserializer
29029        use serde::de::{self, MapAccess, Visitor};
29030        struct EnumVisitor;
29031        impl<'de> Visitor<'de> for EnumVisitor {
29032            type Value = TeamNamespacesListContinueError;
29033            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29034                f.write_str("a TeamNamespacesListContinueError structure")
29035            }
29036            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29037                let tag: &str = match map.next_key()? {
29038                    Some(".tag") => map.next_value()?,
29039                    _ => return Err(de::Error::missing_field(".tag"))
29040                };
29041                let value = match tag {
29042                    "invalid_arg" => TeamNamespacesListContinueError::InvalidArg,
29043                    "invalid_cursor" => TeamNamespacesListContinueError::InvalidCursor,
29044                    _ => TeamNamespacesListContinueError::Other,
29045                };
29046                crate::eat_json_fields(&mut map)?;
29047                Ok(value)
29048            }
29049        }
29050        const VARIANTS: &[&str] = &["invalid_arg",
29051                                    "other",
29052                                    "invalid_cursor"];
29053        deserializer.deserialize_struct("TeamNamespacesListContinueError", VARIANTS, EnumVisitor)
29054    }
29055}
29056
29057impl ::serde::ser::Serialize for TeamNamespacesListContinueError {
29058    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29059        // union serializer
29060        use serde::ser::SerializeStruct;
29061        match self {
29062            TeamNamespacesListContinueError::InvalidArg => {
29063                // unit
29064                let mut s = serializer.serialize_struct("TeamNamespacesListContinueError", 1)?;
29065                s.serialize_field(".tag", "invalid_arg")?;
29066                s.end()
29067            }
29068            TeamNamespacesListContinueError::InvalidCursor => {
29069                // unit
29070                let mut s = serializer.serialize_struct("TeamNamespacesListContinueError", 1)?;
29071                s.serialize_field(".tag", "invalid_cursor")?;
29072                s.end()
29073            }
29074            TeamNamespacesListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29075        }
29076    }
29077}
29078
29079impl ::std::error::Error for TeamNamespacesListContinueError {
29080}
29081
29082impl ::std::fmt::Display for TeamNamespacesListContinueError {
29083    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29084        match self {
29085            TeamNamespacesListContinueError::InvalidArg => f.write_str("Argument passed in is invalid."),
29086            TeamNamespacesListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
29087            _ => write!(f, "{:?}", *self),
29088        }
29089    }
29090}
29091
29092// union extends TeamNamespacesListError
29093impl From<TeamNamespacesListError> for TeamNamespacesListContinueError {
29094    fn from(parent: TeamNamespacesListError) -> Self {
29095        match parent {
29096            TeamNamespacesListError::InvalidArg => TeamNamespacesListContinueError::InvalidArg,
29097            TeamNamespacesListError::Other => TeamNamespacesListContinueError::Other,
29098        }
29099    }
29100}
29101#[derive(Debug, Clone, PartialEq, Eq)]
29102#[non_exhaustive] // variants may be added in the future
29103pub enum TeamNamespacesListError {
29104    /// Argument passed in is invalid.
29105    InvalidArg,
29106    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29107    /// typically indicates that this SDK version is out of date.
29108    Other,
29109}
29110
29111impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListError {
29112    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29113        // union deserializer
29114        use serde::de::{self, MapAccess, Visitor};
29115        struct EnumVisitor;
29116        impl<'de> Visitor<'de> for EnumVisitor {
29117            type Value = TeamNamespacesListError;
29118            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29119                f.write_str("a TeamNamespacesListError structure")
29120            }
29121            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29122                let tag: &str = match map.next_key()? {
29123                    Some(".tag") => map.next_value()?,
29124                    _ => return Err(de::Error::missing_field(".tag"))
29125                };
29126                let value = match tag {
29127                    "invalid_arg" => TeamNamespacesListError::InvalidArg,
29128                    _ => TeamNamespacesListError::Other,
29129                };
29130                crate::eat_json_fields(&mut map)?;
29131                Ok(value)
29132            }
29133        }
29134        const VARIANTS: &[&str] = &["invalid_arg",
29135                                    "other"];
29136        deserializer.deserialize_struct("TeamNamespacesListError", VARIANTS, EnumVisitor)
29137    }
29138}
29139
29140impl ::serde::ser::Serialize for TeamNamespacesListError {
29141    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29142        // union serializer
29143        use serde::ser::SerializeStruct;
29144        match self {
29145            TeamNamespacesListError::InvalidArg => {
29146                // unit
29147                let mut s = serializer.serialize_struct("TeamNamespacesListError", 1)?;
29148                s.serialize_field(".tag", "invalid_arg")?;
29149                s.end()
29150            }
29151            TeamNamespacesListError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29152        }
29153    }
29154}
29155
29156impl ::std::error::Error for TeamNamespacesListError {
29157}
29158
29159impl ::std::fmt::Display for TeamNamespacesListError {
29160    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29161        match self {
29162            TeamNamespacesListError::InvalidArg => f.write_str("Argument passed in is invalid."),
29163            _ => write!(f, "{:?}", *self),
29164        }
29165    }
29166}
29167
29168/// Result for [`namespaces_list()`](crate::team::namespaces_list).
29169#[derive(Debug, Clone, PartialEq, Eq)]
29170#[non_exhaustive] // structs may have more fields added in the future.
29171pub struct TeamNamespacesListResult {
29172    /// List of all namespaces the team can access.
29173    pub namespaces: Vec<NamespaceMetadata>,
29174    /// Pass the cursor into [`namespaces_list_continue()`](crate::team::namespaces_list_continue)
29175    /// to obtain additional namespaces. Note that duplicate namespaces may be returned.
29176    pub cursor: String,
29177    /// Is true if there are additional namespaces that have not been returned yet.
29178    pub has_more: bool,
29179}
29180
29181impl TeamNamespacesListResult {
29182    pub fn new(namespaces: Vec<NamespaceMetadata>, cursor: String, has_more: bool) -> Self {
29183        TeamNamespacesListResult {
29184            namespaces,
29185            cursor,
29186            has_more,
29187        }
29188    }
29189}
29190
29191const TEAM_NAMESPACES_LIST_RESULT_FIELDS: &[&str] = &["namespaces",
29192                                                      "cursor",
29193                                                      "has_more"];
29194impl TeamNamespacesListResult {
29195    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29196        map: V,
29197    ) -> Result<TeamNamespacesListResult, V::Error> {
29198        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29199    }
29200
29201    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29202        mut map: V,
29203        optional: bool,
29204    ) -> Result<Option<TeamNamespacesListResult>, V::Error> {
29205        let mut field_namespaces = None;
29206        let mut field_cursor = None;
29207        let mut field_has_more = None;
29208        let mut nothing = true;
29209        while let Some(key) = map.next_key::<&str>()? {
29210            nothing = false;
29211            match key {
29212                "namespaces" => {
29213                    if field_namespaces.is_some() {
29214                        return Err(::serde::de::Error::duplicate_field("namespaces"));
29215                    }
29216                    field_namespaces = Some(map.next_value()?);
29217                }
29218                "cursor" => {
29219                    if field_cursor.is_some() {
29220                        return Err(::serde::de::Error::duplicate_field("cursor"));
29221                    }
29222                    field_cursor = Some(map.next_value()?);
29223                }
29224                "has_more" => {
29225                    if field_has_more.is_some() {
29226                        return Err(::serde::de::Error::duplicate_field("has_more"));
29227                    }
29228                    field_has_more = Some(map.next_value()?);
29229                }
29230                _ => {
29231                    // unknown field allowed and ignored
29232                    map.next_value::<::serde_json::Value>()?;
29233                }
29234            }
29235        }
29236        if optional && nothing {
29237            return Ok(None);
29238        }
29239        let result = TeamNamespacesListResult {
29240            namespaces: field_namespaces.ok_or_else(|| ::serde::de::Error::missing_field("namespaces"))?,
29241            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
29242            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
29243        };
29244        Ok(Some(result))
29245    }
29246
29247    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29248        &self,
29249        s: &mut S::SerializeStruct,
29250    ) -> Result<(), S::Error> {
29251        use serde::ser::SerializeStruct;
29252        s.serialize_field("namespaces", &self.namespaces)?;
29253        s.serialize_field("cursor", &self.cursor)?;
29254        s.serialize_field("has_more", &self.has_more)?;
29255        Ok(())
29256    }
29257}
29258
29259impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListResult {
29260    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29261        // struct deserializer
29262        use serde::de::{MapAccess, Visitor};
29263        struct StructVisitor;
29264        impl<'de> Visitor<'de> for StructVisitor {
29265            type Value = TeamNamespacesListResult;
29266            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29267                f.write_str("a TeamNamespacesListResult struct")
29268            }
29269            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29270                TeamNamespacesListResult::internal_deserialize(map)
29271            }
29272        }
29273        deserializer.deserialize_struct("TeamNamespacesListResult", TEAM_NAMESPACES_LIST_RESULT_FIELDS, StructVisitor)
29274    }
29275}
29276
29277impl ::serde::ser::Serialize for TeamNamespacesListResult {
29278    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29279        // struct serializer
29280        use serde::ser::SerializeStruct;
29281        let mut s = serializer.serialize_struct("TeamNamespacesListResult", 3)?;
29282        self.internal_serialize::<S>(&mut s)?;
29283        s.end()
29284    }
29285}
29286
29287#[derive(Debug, Clone, PartialEq, Eq)]
29288#[non_exhaustive] // variants may be added in the future
29289pub enum TeamReportFailureReason {
29290    /// We couldn't create the report, but we think this was a fluke. Everything should work if you
29291    /// try it again.
29292    TemporaryError,
29293    /// Too many other reports are being created right now. Try creating this report again once the
29294    /// others finish.
29295    ManyReportsAtOnce,
29296    /// We couldn't create the report. Try creating the report again with less data.
29297    TooMuchData,
29298    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29299    /// typically indicates that this SDK version is out of date.
29300    Other,
29301}
29302
29303impl<'de> ::serde::de::Deserialize<'de> for TeamReportFailureReason {
29304    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29305        // union deserializer
29306        use serde::de::{self, MapAccess, Visitor};
29307        struct EnumVisitor;
29308        impl<'de> Visitor<'de> for EnumVisitor {
29309            type Value = TeamReportFailureReason;
29310            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29311                f.write_str("a TeamReportFailureReason structure")
29312            }
29313            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29314                let tag: &str = match map.next_key()? {
29315                    Some(".tag") => map.next_value()?,
29316                    _ => return Err(de::Error::missing_field(".tag"))
29317                };
29318                let value = match tag {
29319                    "temporary_error" => TeamReportFailureReason::TemporaryError,
29320                    "many_reports_at_once" => TeamReportFailureReason::ManyReportsAtOnce,
29321                    "too_much_data" => TeamReportFailureReason::TooMuchData,
29322                    _ => TeamReportFailureReason::Other,
29323                };
29324                crate::eat_json_fields(&mut map)?;
29325                Ok(value)
29326            }
29327        }
29328        const VARIANTS: &[&str] = &["temporary_error",
29329                                    "many_reports_at_once",
29330                                    "too_much_data",
29331                                    "other"];
29332        deserializer.deserialize_struct("TeamReportFailureReason", VARIANTS, EnumVisitor)
29333    }
29334}
29335
29336impl ::serde::ser::Serialize for TeamReportFailureReason {
29337    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29338        // union serializer
29339        use serde::ser::SerializeStruct;
29340        match self {
29341            TeamReportFailureReason::TemporaryError => {
29342                // unit
29343                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
29344                s.serialize_field(".tag", "temporary_error")?;
29345                s.end()
29346            }
29347            TeamReportFailureReason::ManyReportsAtOnce => {
29348                // unit
29349                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
29350                s.serialize_field(".tag", "many_reports_at_once")?;
29351                s.end()
29352            }
29353            TeamReportFailureReason::TooMuchData => {
29354                // unit
29355                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
29356                s.serialize_field(".tag", "too_much_data")?;
29357                s.end()
29358            }
29359            TeamReportFailureReason::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29360        }
29361    }
29362}
29363
29364/// Error returned by
29365/// [`token_get_authenticated_admin()`](crate::team::token_get_authenticated_admin).
29366#[derive(Debug, Clone, PartialEq, Eq)]
29367#[non_exhaustive] // variants may be added in the future
29368pub enum TokenGetAuthenticatedAdminError {
29369    /// The current token is not associated with a team admin, because mappings were not recorded
29370    /// when the token was created. Consider re-authorizing a new access token to record its
29371    /// authenticating admin.
29372    MappingNotFound,
29373    /// Either the team admin that authorized this token is no longer an active member of the team
29374    /// or no longer a team admin.
29375    AdminNotActive,
29376    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29377    /// typically indicates that this SDK version is out of date.
29378    Other,
29379}
29380
29381impl<'de> ::serde::de::Deserialize<'de> for TokenGetAuthenticatedAdminError {
29382    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29383        // union deserializer
29384        use serde::de::{self, MapAccess, Visitor};
29385        struct EnumVisitor;
29386        impl<'de> Visitor<'de> for EnumVisitor {
29387            type Value = TokenGetAuthenticatedAdminError;
29388            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29389                f.write_str("a TokenGetAuthenticatedAdminError structure")
29390            }
29391            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29392                let tag: &str = match map.next_key()? {
29393                    Some(".tag") => map.next_value()?,
29394                    _ => return Err(de::Error::missing_field(".tag"))
29395                };
29396                let value = match tag {
29397                    "mapping_not_found" => TokenGetAuthenticatedAdminError::MappingNotFound,
29398                    "admin_not_active" => TokenGetAuthenticatedAdminError::AdminNotActive,
29399                    _ => TokenGetAuthenticatedAdminError::Other,
29400                };
29401                crate::eat_json_fields(&mut map)?;
29402                Ok(value)
29403            }
29404        }
29405        const VARIANTS: &[&str] = &["mapping_not_found",
29406                                    "admin_not_active",
29407                                    "other"];
29408        deserializer.deserialize_struct("TokenGetAuthenticatedAdminError", VARIANTS, EnumVisitor)
29409    }
29410}
29411
29412impl ::serde::ser::Serialize for TokenGetAuthenticatedAdminError {
29413    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29414        // union serializer
29415        use serde::ser::SerializeStruct;
29416        match self {
29417            TokenGetAuthenticatedAdminError::MappingNotFound => {
29418                // unit
29419                let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminError", 1)?;
29420                s.serialize_field(".tag", "mapping_not_found")?;
29421                s.end()
29422            }
29423            TokenGetAuthenticatedAdminError::AdminNotActive => {
29424                // unit
29425                let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminError", 1)?;
29426                s.serialize_field(".tag", "admin_not_active")?;
29427                s.end()
29428            }
29429            TokenGetAuthenticatedAdminError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29430        }
29431    }
29432}
29433
29434impl ::std::error::Error for TokenGetAuthenticatedAdminError {
29435}
29436
29437impl ::std::fmt::Display for TokenGetAuthenticatedAdminError {
29438    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29439        match self {
29440            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."),
29441            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."),
29442            _ => write!(f, "{:?}", *self),
29443        }
29444    }
29445}
29446
29447/// Results for [`token_get_authenticated_admin()`](crate::team::token_get_authenticated_admin).
29448#[derive(Debug, Clone, PartialEq, Eq)]
29449#[non_exhaustive] // structs may have more fields added in the future.
29450pub struct TokenGetAuthenticatedAdminResult {
29451    /// The admin who authorized the token.
29452    pub admin_profile: TeamMemberProfile,
29453}
29454
29455impl TokenGetAuthenticatedAdminResult {
29456    pub fn new(admin_profile: TeamMemberProfile) -> Self {
29457        TokenGetAuthenticatedAdminResult {
29458            admin_profile,
29459        }
29460    }
29461}
29462
29463const TOKEN_GET_AUTHENTICATED_ADMIN_RESULT_FIELDS: &[&str] = &["admin_profile"];
29464impl TokenGetAuthenticatedAdminResult {
29465    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29466        map: V,
29467    ) -> Result<TokenGetAuthenticatedAdminResult, V::Error> {
29468        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29469    }
29470
29471    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29472        mut map: V,
29473        optional: bool,
29474    ) -> Result<Option<TokenGetAuthenticatedAdminResult>, V::Error> {
29475        let mut field_admin_profile = None;
29476        let mut nothing = true;
29477        while let Some(key) = map.next_key::<&str>()? {
29478            nothing = false;
29479            match key {
29480                "admin_profile" => {
29481                    if field_admin_profile.is_some() {
29482                        return Err(::serde::de::Error::duplicate_field("admin_profile"));
29483                    }
29484                    field_admin_profile = Some(map.next_value()?);
29485                }
29486                _ => {
29487                    // unknown field allowed and ignored
29488                    map.next_value::<::serde_json::Value>()?;
29489                }
29490            }
29491        }
29492        if optional && nothing {
29493            return Ok(None);
29494        }
29495        let result = TokenGetAuthenticatedAdminResult {
29496            admin_profile: field_admin_profile.ok_or_else(|| ::serde::de::Error::missing_field("admin_profile"))?,
29497        };
29498        Ok(Some(result))
29499    }
29500
29501    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29502        &self,
29503        s: &mut S::SerializeStruct,
29504    ) -> Result<(), S::Error> {
29505        use serde::ser::SerializeStruct;
29506        s.serialize_field("admin_profile", &self.admin_profile)?;
29507        Ok(())
29508    }
29509}
29510
29511impl<'de> ::serde::de::Deserialize<'de> for TokenGetAuthenticatedAdminResult {
29512    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29513        // struct deserializer
29514        use serde::de::{MapAccess, Visitor};
29515        struct StructVisitor;
29516        impl<'de> Visitor<'de> for StructVisitor {
29517            type Value = TokenGetAuthenticatedAdminResult;
29518            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29519                f.write_str("a TokenGetAuthenticatedAdminResult struct")
29520            }
29521            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29522                TokenGetAuthenticatedAdminResult::internal_deserialize(map)
29523            }
29524        }
29525        deserializer.deserialize_struct("TokenGetAuthenticatedAdminResult", TOKEN_GET_AUTHENTICATED_ADMIN_RESULT_FIELDS, StructVisitor)
29526    }
29527}
29528
29529impl ::serde::ser::Serialize for TokenGetAuthenticatedAdminResult {
29530    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29531        // struct serializer
29532        use serde::ser::SerializeStruct;
29533        let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminResult", 1)?;
29534        self.internal_serialize::<S>(&mut s)?;
29535        s.end()
29536    }
29537}
29538
29539/// The value for [`Feature::UploadApiRateLimit`].
29540#[derive(Debug, Clone, PartialEq, Eq)]
29541#[non_exhaustive] // variants may be added in the future
29542pub enum UploadApiRateLimitValue {
29543    /// This team has unlimited upload API quota. So far both server version account and legacy
29544    /// account type have unlimited monthly upload api quota.
29545    Unlimited,
29546    /// The number of upload API calls allowed per month.
29547    Limit(u32),
29548    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29549    /// typically indicates that this SDK version is out of date.
29550    Other,
29551}
29552
29553impl<'de> ::serde::de::Deserialize<'de> for UploadApiRateLimitValue {
29554    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29555        // union deserializer
29556        use serde::de::{self, MapAccess, Visitor};
29557        struct EnumVisitor;
29558        impl<'de> Visitor<'de> for EnumVisitor {
29559            type Value = UploadApiRateLimitValue;
29560            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29561                f.write_str("a UploadApiRateLimitValue structure")
29562            }
29563            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29564                let tag: &str = match map.next_key()? {
29565                    Some(".tag") => map.next_value()?,
29566                    _ => return Err(de::Error::missing_field(".tag"))
29567                };
29568                let value = match tag {
29569                    "unlimited" => UploadApiRateLimitValue::Unlimited,
29570                    "limit" => {
29571                        match map.next_key()? {
29572                            Some("limit") => UploadApiRateLimitValue::Limit(map.next_value()?),
29573                            None => return Err(de::Error::missing_field("limit")),
29574                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29575                        }
29576                    }
29577                    _ => UploadApiRateLimitValue::Other,
29578                };
29579                crate::eat_json_fields(&mut map)?;
29580                Ok(value)
29581            }
29582        }
29583        const VARIANTS: &[&str] = &["unlimited",
29584                                    "limit",
29585                                    "other"];
29586        deserializer.deserialize_struct("UploadApiRateLimitValue", VARIANTS, EnumVisitor)
29587    }
29588}
29589
29590impl ::serde::ser::Serialize for UploadApiRateLimitValue {
29591    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29592        // union serializer
29593        use serde::ser::SerializeStruct;
29594        match self {
29595            UploadApiRateLimitValue::Unlimited => {
29596                // unit
29597                let mut s = serializer.serialize_struct("UploadApiRateLimitValue", 1)?;
29598                s.serialize_field(".tag", "unlimited")?;
29599                s.end()
29600            }
29601            UploadApiRateLimitValue::Limit(x) => {
29602                // primitive
29603                let mut s = serializer.serialize_struct("UploadApiRateLimitValue", 2)?;
29604                s.serialize_field(".tag", "limit")?;
29605                s.serialize_field("limit", x)?;
29606                s.end()
29607            }
29608            UploadApiRateLimitValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29609        }
29610    }
29611}
29612
29613/// Result of trying to add secondary emails to a user. 'success' is the only value indicating that
29614/// a user was successfully retrieved for adding secondary emails. The other values explain the type
29615/// of error that occurred, and include the user for which the error occurred.
29616#[derive(Debug, Clone, PartialEq, Eq)]
29617#[non_exhaustive] // variants may be added in the future
29618pub enum UserAddResult {
29619    /// Describes a user and the results for each attempt to add a secondary email.
29620    Success(UserSecondaryEmailsResult),
29621    /// Specified user is not a valid target for adding secondary emails.
29622    InvalidUser(UserSelectorArg),
29623    /// Secondary emails can only be added to verified users.
29624    Unverified(UserSelectorArg),
29625    /// Secondary emails cannot be added to placeholder users.
29626    PlaceholderUser(UserSelectorArg),
29627    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29628    /// typically indicates that this SDK version is out of date.
29629    Other,
29630}
29631
29632impl<'de> ::serde::de::Deserialize<'de> for UserAddResult {
29633    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29634        // union deserializer
29635        use serde::de::{self, MapAccess, Visitor};
29636        struct EnumVisitor;
29637        impl<'de> Visitor<'de> for EnumVisitor {
29638            type Value = UserAddResult;
29639            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29640                f.write_str("a UserAddResult structure")
29641            }
29642            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29643                let tag: &str = match map.next_key()? {
29644                    Some(".tag") => map.next_value()?,
29645                    _ => return Err(de::Error::missing_field(".tag"))
29646                };
29647                let value = match tag {
29648                    "success" => UserAddResult::Success(UserSecondaryEmailsResult::internal_deserialize(&mut map)?),
29649                    "invalid_user" => {
29650                        match map.next_key()? {
29651                            Some("invalid_user") => UserAddResult::InvalidUser(map.next_value()?),
29652                            None => return Err(de::Error::missing_field("invalid_user")),
29653                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29654                        }
29655                    }
29656                    "unverified" => {
29657                        match map.next_key()? {
29658                            Some("unverified") => UserAddResult::Unverified(map.next_value()?),
29659                            None => return Err(de::Error::missing_field("unverified")),
29660                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29661                        }
29662                    }
29663                    "placeholder_user" => {
29664                        match map.next_key()? {
29665                            Some("placeholder_user") => UserAddResult::PlaceholderUser(map.next_value()?),
29666                            None => return Err(de::Error::missing_field("placeholder_user")),
29667                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29668                        }
29669                    }
29670                    _ => UserAddResult::Other,
29671                };
29672                crate::eat_json_fields(&mut map)?;
29673                Ok(value)
29674            }
29675        }
29676        const VARIANTS: &[&str] = &["success",
29677                                    "invalid_user",
29678                                    "unverified",
29679                                    "placeholder_user",
29680                                    "other"];
29681        deserializer.deserialize_struct("UserAddResult", VARIANTS, EnumVisitor)
29682    }
29683}
29684
29685impl ::serde::ser::Serialize for UserAddResult {
29686    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29687        // union serializer
29688        use serde::ser::SerializeStruct;
29689        match self {
29690            UserAddResult::Success(x) => {
29691                // struct
29692                let mut s = serializer.serialize_struct("UserAddResult", 3)?;
29693                s.serialize_field(".tag", "success")?;
29694                x.internal_serialize::<S>(&mut s)?;
29695                s.end()
29696            }
29697            UserAddResult::InvalidUser(x) => {
29698                // union or polymporphic struct
29699                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
29700                s.serialize_field(".tag", "invalid_user")?;
29701                s.serialize_field("invalid_user", x)?;
29702                s.end()
29703            }
29704            UserAddResult::Unverified(x) => {
29705                // union or polymporphic struct
29706                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
29707                s.serialize_field(".tag", "unverified")?;
29708                s.serialize_field("unverified", x)?;
29709                s.end()
29710            }
29711            UserAddResult::PlaceholderUser(x) => {
29712                // union or polymporphic struct
29713                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
29714                s.serialize_field(".tag", "placeholder_user")?;
29715                s.serialize_field("placeholder_user", x)?;
29716                s.end()
29717            }
29718            UserAddResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29719        }
29720    }
29721}
29722
29723/// User and their required custom quota in GB (1 TB = 1024 GB).
29724#[derive(Debug, Clone, PartialEq, Eq)]
29725#[non_exhaustive] // structs may have more fields added in the future.
29726pub struct UserCustomQuotaArg {
29727    pub user: UserSelectorArg,
29728    pub quota_gb: UserQuota,
29729}
29730
29731impl UserCustomQuotaArg {
29732    pub fn new(user: UserSelectorArg, quota_gb: UserQuota) -> Self {
29733        UserCustomQuotaArg {
29734            user,
29735            quota_gb,
29736        }
29737    }
29738}
29739
29740const USER_CUSTOM_QUOTA_ARG_FIELDS: &[&str] = &["user",
29741                                                "quota_gb"];
29742impl UserCustomQuotaArg {
29743    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29744        map: V,
29745    ) -> Result<UserCustomQuotaArg, V::Error> {
29746        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29747    }
29748
29749    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29750        mut map: V,
29751        optional: bool,
29752    ) -> Result<Option<UserCustomQuotaArg>, V::Error> {
29753        let mut field_user = None;
29754        let mut field_quota_gb = None;
29755        let mut nothing = true;
29756        while let Some(key) = map.next_key::<&str>()? {
29757            nothing = false;
29758            match key {
29759                "user" => {
29760                    if field_user.is_some() {
29761                        return Err(::serde::de::Error::duplicate_field("user"));
29762                    }
29763                    field_user = Some(map.next_value()?);
29764                }
29765                "quota_gb" => {
29766                    if field_quota_gb.is_some() {
29767                        return Err(::serde::de::Error::duplicate_field("quota_gb"));
29768                    }
29769                    field_quota_gb = Some(map.next_value()?);
29770                }
29771                _ => {
29772                    // unknown field allowed and ignored
29773                    map.next_value::<::serde_json::Value>()?;
29774                }
29775            }
29776        }
29777        if optional && nothing {
29778            return Ok(None);
29779        }
29780        let result = UserCustomQuotaArg {
29781            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29782            quota_gb: field_quota_gb.ok_or_else(|| ::serde::de::Error::missing_field("quota_gb"))?,
29783        };
29784        Ok(Some(result))
29785    }
29786
29787    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29788        &self,
29789        s: &mut S::SerializeStruct,
29790    ) -> Result<(), S::Error> {
29791        use serde::ser::SerializeStruct;
29792        s.serialize_field("user", &self.user)?;
29793        s.serialize_field("quota_gb", &self.quota_gb)?;
29794        Ok(())
29795    }
29796}
29797
29798impl<'de> ::serde::de::Deserialize<'de> for UserCustomQuotaArg {
29799    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29800        // struct deserializer
29801        use serde::de::{MapAccess, Visitor};
29802        struct StructVisitor;
29803        impl<'de> Visitor<'de> for StructVisitor {
29804            type Value = UserCustomQuotaArg;
29805            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29806                f.write_str("a UserCustomQuotaArg struct")
29807            }
29808            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29809                UserCustomQuotaArg::internal_deserialize(map)
29810            }
29811        }
29812        deserializer.deserialize_struct("UserCustomQuotaArg", USER_CUSTOM_QUOTA_ARG_FIELDS, StructVisitor)
29813    }
29814}
29815
29816impl ::serde::ser::Serialize for UserCustomQuotaArg {
29817    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29818        // struct serializer
29819        use serde::ser::SerializeStruct;
29820        let mut s = serializer.serialize_struct("UserCustomQuotaArg", 2)?;
29821        self.internal_serialize::<S>(&mut s)?;
29822        s.end()
29823    }
29824}
29825
29826/// User and their custom quota in GB (1 TB = 1024 GB). No quota returns if the user has no custom
29827/// quota set.
29828#[derive(Debug, Clone, PartialEq, Eq)]
29829#[non_exhaustive] // structs may have more fields added in the future.
29830pub struct UserCustomQuotaResult {
29831    pub user: UserSelectorArg,
29832    pub quota_gb: Option<UserQuota>,
29833}
29834
29835impl UserCustomQuotaResult {
29836    pub fn new(user: UserSelectorArg) -> Self {
29837        UserCustomQuotaResult {
29838            user,
29839            quota_gb: None,
29840        }
29841    }
29842
29843    pub fn with_quota_gb(mut self, value: UserQuota) -> Self {
29844        self.quota_gb = Some(value);
29845        self
29846    }
29847}
29848
29849const USER_CUSTOM_QUOTA_RESULT_FIELDS: &[&str] = &["user",
29850                                                   "quota_gb"];
29851impl UserCustomQuotaResult {
29852    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29853        map: V,
29854    ) -> Result<UserCustomQuotaResult, V::Error> {
29855        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29856    }
29857
29858    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29859        mut map: V,
29860        optional: bool,
29861    ) -> Result<Option<UserCustomQuotaResult>, V::Error> {
29862        let mut field_user = None;
29863        let mut field_quota_gb = None;
29864        let mut nothing = true;
29865        while let Some(key) = map.next_key::<&str>()? {
29866            nothing = false;
29867            match key {
29868                "user" => {
29869                    if field_user.is_some() {
29870                        return Err(::serde::de::Error::duplicate_field("user"));
29871                    }
29872                    field_user = Some(map.next_value()?);
29873                }
29874                "quota_gb" => {
29875                    if field_quota_gb.is_some() {
29876                        return Err(::serde::de::Error::duplicate_field("quota_gb"));
29877                    }
29878                    field_quota_gb = Some(map.next_value()?);
29879                }
29880                _ => {
29881                    // unknown field allowed and ignored
29882                    map.next_value::<::serde_json::Value>()?;
29883                }
29884            }
29885        }
29886        if optional && nothing {
29887            return Ok(None);
29888        }
29889        let result = UserCustomQuotaResult {
29890            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29891            quota_gb: field_quota_gb.and_then(Option::flatten),
29892        };
29893        Ok(Some(result))
29894    }
29895
29896    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29897        &self,
29898        s: &mut S::SerializeStruct,
29899    ) -> Result<(), S::Error> {
29900        use serde::ser::SerializeStruct;
29901        s.serialize_field("user", &self.user)?;
29902        if let Some(val) = &self.quota_gb {
29903            s.serialize_field("quota_gb", val)?;
29904        }
29905        Ok(())
29906    }
29907}
29908
29909impl<'de> ::serde::de::Deserialize<'de> for UserCustomQuotaResult {
29910    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29911        // struct deserializer
29912        use serde::de::{MapAccess, Visitor};
29913        struct StructVisitor;
29914        impl<'de> Visitor<'de> for StructVisitor {
29915            type Value = UserCustomQuotaResult;
29916            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29917                f.write_str("a UserCustomQuotaResult struct")
29918            }
29919            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29920                UserCustomQuotaResult::internal_deserialize(map)
29921            }
29922        }
29923        deserializer.deserialize_struct("UserCustomQuotaResult", USER_CUSTOM_QUOTA_RESULT_FIELDS, StructVisitor)
29924    }
29925}
29926
29927impl ::serde::ser::Serialize for UserCustomQuotaResult {
29928    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29929        // struct serializer
29930        use serde::ser::SerializeStruct;
29931        let mut s = serializer.serialize_struct("UserCustomQuotaResult", 2)?;
29932        self.internal_serialize::<S>(&mut s)?;
29933        s.end()
29934    }
29935}
29936
29937#[derive(Debug, Clone, PartialEq, Eq)]
29938#[non_exhaustive] // structs may have more fields added in the future.
29939pub struct UserDeleteEmailsResult {
29940    pub user: UserSelectorArg,
29941    pub results: Vec<DeleteSecondaryEmailResult>,
29942}
29943
29944impl UserDeleteEmailsResult {
29945    pub fn new(user: UserSelectorArg, results: Vec<DeleteSecondaryEmailResult>) -> Self {
29946        UserDeleteEmailsResult {
29947            user,
29948            results,
29949        }
29950    }
29951}
29952
29953const USER_DELETE_EMAILS_RESULT_FIELDS: &[&str] = &["user",
29954                                                    "results"];
29955impl UserDeleteEmailsResult {
29956    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29957        map: V,
29958    ) -> Result<UserDeleteEmailsResult, V::Error> {
29959        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29960    }
29961
29962    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29963        mut map: V,
29964        optional: bool,
29965    ) -> Result<Option<UserDeleteEmailsResult>, V::Error> {
29966        let mut field_user = None;
29967        let mut field_results = None;
29968        let mut nothing = true;
29969        while let Some(key) = map.next_key::<&str>()? {
29970            nothing = false;
29971            match key {
29972                "user" => {
29973                    if field_user.is_some() {
29974                        return Err(::serde::de::Error::duplicate_field("user"));
29975                    }
29976                    field_user = Some(map.next_value()?);
29977                }
29978                "results" => {
29979                    if field_results.is_some() {
29980                        return Err(::serde::de::Error::duplicate_field("results"));
29981                    }
29982                    field_results = Some(map.next_value()?);
29983                }
29984                _ => {
29985                    // unknown field allowed and ignored
29986                    map.next_value::<::serde_json::Value>()?;
29987                }
29988            }
29989        }
29990        if optional && nothing {
29991            return Ok(None);
29992        }
29993        let result = UserDeleteEmailsResult {
29994            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29995            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
29996        };
29997        Ok(Some(result))
29998    }
29999
30000    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30001        &self,
30002        s: &mut S::SerializeStruct,
30003    ) -> Result<(), S::Error> {
30004        use serde::ser::SerializeStruct;
30005        s.serialize_field("user", &self.user)?;
30006        s.serialize_field("results", &self.results)?;
30007        Ok(())
30008    }
30009}
30010
30011impl<'de> ::serde::de::Deserialize<'de> for UserDeleteEmailsResult {
30012    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30013        // struct deserializer
30014        use serde::de::{MapAccess, Visitor};
30015        struct StructVisitor;
30016        impl<'de> Visitor<'de> for StructVisitor {
30017            type Value = UserDeleteEmailsResult;
30018            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30019                f.write_str("a UserDeleteEmailsResult struct")
30020            }
30021            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30022                UserDeleteEmailsResult::internal_deserialize(map)
30023            }
30024        }
30025        deserializer.deserialize_struct("UserDeleteEmailsResult", USER_DELETE_EMAILS_RESULT_FIELDS, StructVisitor)
30026    }
30027}
30028
30029impl ::serde::ser::Serialize for UserDeleteEmailsResult {
30030    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30031        // struct serializer
30032        use serde::ser::SerializeStruct;
30033        let mut s = serializer.serialize_struct("UserDeleteEmailsResult", 2)?;
30034        self.internal_serialize::<S>(&mut s)?;
30035        s.end()
30036    }
30037}
30038
30039/// Result of trying to delete a user's secondary emails. 'success' is the only value indicating
30040/// that a user was successfully retrieved for deleting secondary emails. The other values explain
30041/// the type of error that occurred, and include the user for which the error occurred.
30042#[derive(Debug, Clone, PartialEq, Eq)]
30043#[non_exhaustive] // variants may be added in the future
30044pub enum UserDeleteResult {
30045    /// Describes a user and the results for each attempt to delete a secondary email.
30046    Success(UserDeleteEmailsResult),
30047    /// Specified user is not a valid target for deleting secondary emails.
30048    InvalidUser(UserSelectorArg),
30049    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30050    /// typically indicates that this SDK version is out of date.
30051    Other,
30052}
30053
30054impl<'de> ::serde::de::Deserialize<'de> for UserDeleteResult {
30055    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30056        // union deserializer
30057        use serde::de::{self, MapAccess, Visitor};
30058        struct EnumVisitor;
30059        impl<'de> Visitor<'de> for EnumVisitor {
30060            type Value = UserDeleteResult;
30061            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30062                f.write_str("a UserDeleteResult structure")
30063            }
30064            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30065                let tag: &str = match map.next_key()? {
30066                    Some(".tag") => map.next_value()?,
30067                    _ => return Err(de::Error::missing_field(".tag"))
30068                };
30069                let value = match tag {
30070                    "success" => UserDeleteResult::Success(UserDeleteEmailsResult::internal_deserialize(&mut map)?),
30071                    "invalid_user" => {
30072                        match map.next_key()? {
30073                            Some("invalid_user") => UserDeleteResult::InvalidUser(map.next_value()?),
30074                            None => return Err(de::Error::missing_field("invalid_user")),
30075                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30076                        }
30077                    }
30078                    _ => UserDeleteResult::Other,
30079                };
30080                crate::eat_json_fields(&mut map)?;
30081                Ok(value)
30082            }
30083        }
30084        const VARIANTS: &[&str] = &["success",
30085                                    "invalid_user",
30086                                    "other"];
30087        deserializer.deserialize_struct("UserDeleteResult", VARIANTS, EnumVisitor)
30088    }
30089}
30090
30091impl ::serde::ser::Serialize for UserDeleteResult {
30092    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30093        // union serializer
30094        use serde::ser::SerializeStruct;
30095        match self {
30096            UserDeleteResult::Success(x) => {
30097                // struct
30098                let mut s = serializer.serialize_struct("UserDeleteResult", 3)?;
30099                s.serialize_field(".tag", "success")?;
30100                x.internal_serialize::<S>(&mut s)?;
30101                s.end()
30102            }
30103            UserDeleteResult::InvalidUser(x) => {
30104                // union or polymporphic struct
30105                let mut s = serializer.serialize_struct("UserDeleteResult", 2)?;
30106                s.serialize_field(".tag", "invalid_user")?;
30107                s.serialize_field("invalid_user", x)?;
30108                s.end()
30109            }
30110            UserDeleteResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30111        }
30112    }
30113}
30114
30115#[derive(Debug, Clone, PartialEq, Eq)]
30116#[non_exhaustive] // structs may have more fields added in the future.
30117pub struct UserResendEmailsResult {
30118    pub user: UserSelectorArg,
30119    pub results: Vec<ResendSecondaryEmailResult>,
30120}
30121
30122impl UserResendEmailsResult {
30123    pub fn new(user: UserSelectorArg, results: Vec<ResendSecondaryEmailResult>) -> Self {
30124        UserResendEmailsResult {
30125            user,
30126            results,
30127        }
30128    }
30129}
30130
30131const USER_RESEND_EMAILS_RESULT_FIELDS: &[&str] = &["user",
30132                                                    "results"];
30133impl UserResendEmailsResult {
30134    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30135        map: V,
30136    ) -> Result<UserResendEmailsResult, V::Error> {
30137        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30138    }
30139
30140    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30141        mut map: V,
30142        optional: bool,
30143    ) -> Result<Option<UserResendEmailsResult>, V::Error> {
30144        let mut field_user = None;
30145        let mut field_results = None;
30146        let mut nothing = true;
30147        while let Some(key) = map.next_key::<&str>()? {
30148            nothing = false;
30149            match key {
30150                "user" => {
30151                    if field_user.is_some() {
30152                        return Err(::serde::de::Error::duplicate_field("user"));
30153                    }
30154                    field_user = Some(map.next_value()?);
30155                }
30156                "results" => {
30157                    if field_results.is_some() {
30158                        return Err(::serde::de::Error::duplicate_field("results"));
30159                    }
30160                    field_results = Some(map.next_value()?);
30161                }
30162                _ => {
30163                    // unknown field allowed and ignored
30164                    map.next_value::<::serde_json::Value>()?;
30165                }
30166            }
30167        }
30168        if optional && nothing {
30169            return Ok(None);
30170        }
30171        let result = UserResendEmailsResult {
30172            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30173            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
30174        };
30175        Ok(Some(result))
30176    }
30177
30178    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30179        &self,
30180        s: &mut S::SerializeStruct,
30181    ) -> Result<(), S::Error> {
30182        use serde::ser::SerializeStruct;
30183        s.serialize_field("user", &self.user)?;
30184        s.serialize_field("results", &self.results)?;
30185        Ok(())
30186    }
30187}
30188
30189impl<'de> ::serde::de::Deserialize<'de> for UserResendEmailsResult {
30190    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30191        // struct deserializer
30192        use serde::de::{MapAccess, Visitor};
30193        struct StructVisitor;
30194        impl<'de> Visitor<'de> for StructVisitor {
30195            type Value = UserResendEmailsResult;
30196            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30197                f.write_str("a UserResendEmailsResult struct")
30198            }
30199            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30200                UserResendEmailsResult::internal_deserialize(map)
30201            }
30202        }
30203        deserializer.deserialize_struct("UserResendEmailsResult", USER_RESEND_EMAILS_RESULT_FIELDS, StructVisitor)
30204    }
30205}
30206
30207impl ::serde::ser::Serialize for UserResendEmailsResult {
30208    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30209        // struct serializer
30210        use serde::ser::SerializeStruct;
30211        let mut s = serializer.serialize_struct("UserResendEmailsResult", 2)?;
30212        self.internal_serialize::<S>(&mut s)?;
30213        s.end()
30214    }
30215}
30216
30217/// Result of trying to resend verification emails to a user. 'success' is the only value indicating
30218/// that a user was successfully retrieved for sending verification emails. The other values explain
30219/// the type of error that occurred, and include the user for which the error occurred.
30220#[derive(Debug, Clone, PartialEq, Eq)]
30221#[non_exhaustive] // variants may be added in the future
30222pub enum UserResendResult {
30223    /// Describes a user and the results for each attempt to resend verification emails.
30224    Success(UserResendEmailsResult),
30225    /// Specified user is not a valid target for resending verification emails.
30226    InvalidUser(UserSelectorArg),
30227    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30228    /// typically indicates that this SDK version is out of date.
30229    Other,
30230}
30231
30232impl<'de> ::serde::de::Deserialize<'de> for UserResendResult {
30233    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30234        // union deserializer
30235        use serde::de::{self, MapAccess, Visitor};
30236        struct EnumVisitor;
30237        impl<'de> Visitor<'de> for EnumVisitor {
30238            type Value = UserResendResult;
30239            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30240                f.write_str("a UserResendResult structure")
30241            }
30242            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30243                let tag: &str = match map.next_key()? {
30244                    Some(".tag") => map.next_value()?,
30245                    _ => return Err(de::Error::missing_field(".tag"))
30246                };
30247                let value = match tag {
30248                    "success" => UserResendResult::Success(UserResendEmailsResult::internal_deserialize(&mut map)?),
30249                    "invalid_user" => {
30250                        match map.next_key()? {
30251                            Some("invalid_user") => UserResendResult::InvalidUser(map.next_value()?),
30252                            None => return Err(de::Error::missing_field("invalid_user")),
30253                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30254                        }
30255                    }
30256                    _ => UserResendResult::Other,
30257                };
30258                crate::eat_json_fields(&mut map)?;
30259                Ok(value)
30260            }
30261        }
30262        const VARIANTS: &[&str] = &["success",
30263                                    "invalid_user",
30264                                    "other"];
30265        deserializer.deserialize_struct("UserResendResult", VARIANTS, EnumVisitor)
30266    }
30267}
30268
30269impl ::serde::ser::Serialize for UserResendResult {
30270    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30271        // union serializer
30272        use serde::ser::SerializeStruct;
30273        match self {
30274            UserResendResult::Success(x) => {
30275                // struct
30276                let mut s = serializer.serialize_struct("UserResendResult", 3)?;
30277                s.serialize_field(".tag", "success")?;
30278                x.internal_serialize::<S>(&mut s)?;
30279                s.end()
30280            }
30281            UserResendResult::InvalidUser(x) => {
30282                // union or polymporphic struct
30283                let mut s = serializer.serialize_struct("UserResendResult", 2)?;
30284                s.serialize_field(".tag", "invalid_user")?;
30285                s.serialize_field("invalid_user", x)?;
30286                s.end()
30287            }
30288            UserResendResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30289        }
30290    }
30291}
30292
30293/// User and a list of secondary emails.
30294#[derive(Debug, Clone, PartialEq, Eq)]
30295#[non_exhaustive] // structs may have more fields added in the future.
30296pub struct UserSecondaryEmailsArg {
30297    pub user: UserSelectorArg,
30298    pub secondary_emails: Vec<crate::types::common::EmailAddress>,
30299}
30300
30301impl UserSecondaryEmailsArg {
30302    pub fn new(
30303        user: UserSelectorArg,
30304        secondary_emails: Vec<crate::types::common::EmailAddress>,
30305    ) -> Self {
30306        UserSecondaryEmailsArg {
30307            user,
30308            secondary_emails,
30309        }
30310    }
30311}
30312
30313const USER_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["user",
30314                                                    "secondary_emails"];
30315impl UserSecondaryEmailsArg {
30316    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30317        map: V,
30318    ) -> Result<UserSecondaryEmailsArg, V::Error> {
30319        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30320    }
30321
30322    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30323        mut map: V,
30324        optional: bool,
30325    ) -> Result<Option<UserSecondaryEmailsArg>, V::Error> {
30326        let mut field_user = None;
30327        let mut field_secondary_emails = None;
30328        let mut nothing = true;
30329        while let Some(key) = map.next_key::<&str>()? {
30330            nothing = false;
30331            match key {
30332                "user" => {
30333                    if field_user.is_some() {
30334                        return Err(::serde::de::Error::duplicate_field("user"));
30335                    }
30336                    field_user = Some(map.next_value()?);
30337                }
30338                "secondary_emails" => {
30339                    if field_secondary_emails.is_some() {
30340                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
30341                    }
30342                    field_secondary_emails = Some(map.next_value()?);
30343                }
30344                _ => {
30345                    // unknown field allowed and ignored
30346                    map.next_value::<::serde_json::Value>()?;
30347                }
30348            }
30349        }
30350        if optional && nothing {
30351            return Ok(None);
30352        }
30353        let result = UserSecondaryEmailsArg {
30354            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30355            secondary_emails: field_secondary_emails.ok_or_else(|| ::serde::de::Error::missing_field("secondary_emails"))?,
30356        };
30357        Ok(Some(result))
30358    }
30359
30360    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30361        &self,
30362        s: &mut S::SerializeStruct,
30363    ) -> Result<(), S::Error> {
30364        use serde::ser::SerializeStruct;
30365        s.serialize_field("user", &self.user)?;
30366        s.serialize_field("secondary_emails", &self.secondary_emails)?;
30367        Ok(())
30368    }
30369}
30370
30371impl<'de> ::serde::de::Deserialize<'de> for UserSecondaryEmailsArg {
30372    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30373        // struct deserializer
30374        use serde::de::{MapAccess, Visitor};
30375        struct StructVisitor;
30376        impl<'de> Visitor<'de> for StructVisitor {
30377            type Value = UserSecondaryEmailsArg;
30378            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30379                f.write_str("a UserSecondaryEmailsArg struct")
30380            }
30381            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30382                UserSecondaryEmailsArg::internal_deserialize(map)
30383            }
30384        }
30385        deserializer.deserialize_struct("UserSecondaryEmailsArg", USER_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
30386    }
30387}
30388
30389impl ::serde::ser::Serialize for UserSecondaryEmailsArg {
30390    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30391        // struct serializer
30392        use serde::ser::SerializeStruct;
30393        let mut s = serializer.serialize_struct("UserSecondaryEmailsArg", 2)?;
30394        self.internal_serialize::<S>(&mut s)?;
30395        s.end()
30396    }
30397}
30398
30399#[derive(Debug, Clone, PartialEq, Eq)]
30400#[non_exhaustive] // structs may have more fields added in the future.
30401pub struct UserSecondaryEmailsResult {
30402    pub user: UserSelectorArg,
30403    pub results: Vec<AddSecondaryEmailResult>,
30404}
30405
30406impl UserSecondaryEmailsResult {
30407    pub fn new(user: UserSelectorArg, results: Vec<AddSecondaryEmailResult>) -> Self {
30408        UserSecondaryEmailsResult {
30409            user,
30410            results,
30411        }
30412    }
30413}
30414
30415const USER_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["user",
30416                                                       "results"];
30417impl UserSecondaryEmailsResult {
30418    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30419        map: V,
30420    ) -> Result<UserSecondaryEmailsResult, V::Error> {
30421        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30422    }
30423
30424    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30425        mut map: V,
30426        optional: bool,
30427    ) -> Result<Option<UserSecondaryEmailsResult>, V::Error> {
30428        let mut field_user = None;
30429        let mut field_results = None;
30430        let mut nothing = true;
30431        while let Some(key) = map.next_key::<&str>()? {
30432            nothing = false;
30433            match key {
30434                "user" => {
30435                    if field_user.is_some() {
30436                        return Err(::serde::de::Error::duplicate_field("user"));
30437                    }
30438                    field_user = Some(map.next_value()?);
30439                }
30440                "results" => {
30441                    if field_results.is_some() {
30442                        return Err(::serde::de::Error::duplicate_field("results"));
30443                    }
30444                    field_results = Some(map.next_value()?);
30445                }
30446                _ => {
30447                    // unknown field allowed and ignored
30448                    map.next_value::<::serde_json::Value>()?;
30449                }
30450            }
30451        }
30452        if optional && nothing {
30453            return Ok(None);
30454        }
30455        let result = UserSecondaryEmailsResult {
30456            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30457            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
30458        };
30459        Ok(Some(result))
30460    }
30461
30462    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30463        &self,
30464        s: &mut S::SerializeStruct,
30465    ) -> Result<(), S::Error> {
30466        use serde::ser::SerializeStruct;
30467        s.serialize_field("user", &self.user)?;
30468        s.serialize_field("results", &self.results)?;
30469        Ok(())
30470    }
30471}
30472
30473impl<'de> ::serde::de::Deserialize<'de> for UserSecondaryEmailsResult {
30474    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30475        // struct deserializer
30476        use serde::de::{MapAccess, Visitor};
30477        struct StructVisitor;
30478        impl<'de> Visitor<'de> for StructVisitor {
30479            type Value = UserSecondaryEmailsResult;
30480            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30481                f.write_str("a UserSecondaryEmailsResult struct")
30482            }
30483            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30484                UserSecondaryEmailsResult::internal_deserialize(map)
30485            }
30486        }
30487        deserializer.deserialize_struct("UserSecondaryEmailsResult", USER_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
30488    }
30489}
30490
30491impl ::serde::ser::Serialize for UserSecondaryEmailsResult {
30492    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30493        // struct serializer
30494        use serde::ser::SerializeStruct;
30495        let mut s = serializer.serialize_struct("UserSecondaryEmailsResult", 2)?;
30496        self.internal_serialize::<S>(&mut s)?;
30497        s.end()
30498    }
30499}
30500
30501/// Argument for selecting a single user, either by team_member_id, external_id or email.
30502#[derive(Debug, Clone, PartialEq, Eq)]
30503pub enum UserSelectorArg {
30504    TeamMemberId(crate::types::team_common::TeamMemberId),
30505    ExternalId(crate::types::team_common::MemberExternalId),
30506    Email(crate::types::common::EmailAddress),
30507}
30508
30509impl<'de> ::serde::de::Deserialize<'de> for UserSelectorArg {
30510    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30511        // union deserializer
30512        use serde::de::{self, MapAccess, Visitor};
30513        struct EnumVisitor;
30514        impl<'de> Visitor<'de> for EnumVisitor {
30515            type Value = UserSelectorArg;
30516            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30517                f.write_str("a UserSelectorArg structure")
30518            }
30519            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30520                let tag: &str = match map.next_key()? {
30521                    Some(".tag") => map.next_value()?,
30522                    _ => return Err(de::Error::missing_field(".tag"))
30523                };
30524                let value = match tag {
30525                    "team_member_id" => {
30526                        match map.next_key()? {
30527                            Some("team_member_id") => UserSelectorArg::TeamMemberId(map.next_value()?),
30528                            None => return Err(de::Error::missing_field("team_member_id")),
30529                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30530                        }
30531                    }
30532                    "external_id" => {
30533                        match map.next_key()? {
30534                            Some("external_id") => UserSelectorArg::ExternalId(map.next_value()?),
30535                            None => return Err(de::Error::missing_field("external_id")),
30536                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30537                        }
30538                    }
30539                    "email" => {
30540                        match map.next_key()? {
30541                            Some("email") => UserSelectorArg::Email(map.next_value()?),
30542                            None => return Err(de::Error::missing_field("email")),
30543                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30544                        }
30545                    }
30546                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
30547                };
30548                crate::eat_json_fields(&mut map)?;
30549                Ok(value)
30550            }
30551        }
30552        const VARIANTS: &[&str] = &["team_member_id",
30553                                    "external_id",
30554                                    "email"];
30555        deserializer.deserialize_struct("UserSelectorArg", VARIANTS, EnumVisitor)
30556    }
30557}
30558
30559impl ::serde::ser::Serialize for UserSelectorArg {
30560    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30561        // union serializer
30562        use serde::ser::SerializeStruct;
30563        match self {
30564            UserSelectorArg::TeamMemberId(x) => {
30565                // primitive
30566                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
30567                s.serialize_field(".tag", "team_member_id")?;
30568                s.serialize_field("team_member_id", x)?;
30569                s.end()
30570            }
30571            UserSelectorArg::ExternalId(x) => {
30572                // primitive
30573                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
30574                s.serialize_field(".tag", "external_id")?;
30575                s.serialize_field("external_id", x)?;
30576                s.end()
30577            }
30578            UserSelectorArg::Email(x) => {
30579                // primitive
30580                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
30581                s.serialize_field(".tag", "email")?;
30582                s.serialize_field("email", x)?;
30583                s.end()
30584            }
30585        }
30586    }
30587}
30588
30589/// Error that can be returned whenever a struct derived from [`UserSelectorArg`] is used.
30590#[derive(Debug, Clone, PartialEq, Eq)]
30591pub enum UserSelectorError {
30592    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
30593    /// this team.
30594    UserNotFound,
30595}
30596
30597impl<'de> ::serde::de::Deserialize<'de> for UserSelectorError {
30598    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30599        // union deserializer
30600        use serde::de::{self, MapAccess, Visitor};
30601        struct EnumVisitor;
30602        impl<'de> Visitor<'de> for EnumVisitor {
30603            type Value = UserSelectorError;
30604            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30605                f.write_str("a UserSelectorError structure")
30606            }
30607            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30608                let tag: &str = match map.next_key()? {
30609                    Some(".tag") => map.next_value()?,
30610                    _ => return Err(de::Error::missing_field(".tag"))
30611                };
30612                let value = match tag {
30613                    "user_not_found" => UserSelectorError::UserNotFound,
30614                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
30615                };
30616                crate::eat_json_fields(&mut map)?;
30617                Ok(value)
30618            }
30619        }
30620        const VARIANTS: &[&str] = &["user_not_found"];
30621        deserializer.deserialize_struct("UserSelectorError", VARIANTS, EnumVisitor)
30622    }
30623}
30624
30625impl ::serde::ser::Serialize for UserSelectorError {
30626    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30627        // union serializer
30628        use serde::ser::SerializeStruct;
30629        match self {
30630            UserSelectorError::UserNotFound => {
30631                // unit
30632                let mut s = serializer.serialize_struct("UserSelectorError", 1)?;
30633                s.serialize_field(".tag", "user_not_found")?;
30634                s.end()
30635            }
30636        }
30637    }
30638}
30639
30640impl ::std::error::Error for UserSelectorError {
30641}
30642
30643impl ::std::fmt::Display for UserSelectorError {
30644    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30645        match self {
30646            UserSelectorError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
30647        }
30648    }
30649}
30650
30651/// Argument for selecting a list of users, either by team_member_ids, external_ids or emails.
30652#[derive(Debug, Clone, PartialEq, Eq)]
30653pub enum UsersSelectorArg {
30654    /// List of member IDs.
30655    TeamMemberIds(Vec<crate::types::team_common::TeamMemberId>),
30656    /// List of external user IDs.
30657    ExternalIds(Vec<crate::types::team_common::MemberExternalId>),
30658    /// List of email addresses.
30659    Emails(Vec<crate::types::common::EmailAddress>),
30660}
30661
30662impl<'de> ::serde::de::Deserialize<'de> for UsersSelectorArg {
30663    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30664        // union deserializer
30665        use serde::de::{self, MapAccess, Visitor};
30666        struct EnumVisitor;
30667        impl<'de> Visitor<'de> for EnumVisitor {
30668            type Value = UsersSelectorArg;
30669            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30670                f.write_str("a UsersSelectorArg structure")
30671            }
30672            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30673                let tag: &str = match map.next_key()? {
30674                    Some(".tag") => map.next_value()?,
30675                    _ => return Err(de::Error::missing_field(".tag"))
30676                };
30677                let value = match tag {
30678                    "team_member_ids" => {
30679                        match map.next_key()? {
30680                            Some("team_member_ids") => UsersSelectorArg::TeamMemberIds(map.next_value()?),
30681                            None => return Err(de::Error::missing_field("team_member_ids")),
30682                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30683                        }
30684                    }
30685                    "external_ids" => {
30686                        match map.next_key()? {
30687                            Some("external_ids") => UsersSelectorArg::ExternalIds(map.next_value()?),
30688                            None => return Err(de::Error::missing_field("external_ids")),
30689                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30690                        }
30691                    }
30692                    "emails" => {
30693                        match map.next_key()? {
30694                            Some("emails") => UsersSelectorArg::Emails(map.next_value()?),
30695                            None => return Err(de::Error::missing_field("emails")),
30696                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30697                        }
30698                    }
30699                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
30700                };
30701                crate::eat_json_fields(&mut map)?;
30702                Ok(value)
30703            }
30704        }
30705        const VARIANTS: &[&str] = &["team_member_ids",
30706                                    "external_ids",
30707                                    "emails"];
30708        deserializer.deserialize_struct("UsersSelectorArg", VARIANTS, EnumVisitor)
30709    }
30710}
30711
30712impl ::serde::ser::Serialize for UsersSelectorArg {
30713    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30714        // union serializer
30715        use serde::ser::SerializeStruct;
30716        match self {
30717            UsersSelectorArg::TeamMemberIds(x) => {
30718                // primitive
30719                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
30720                s.serialize_field(".tag", "team_member_ids")?;
30721                s.serialize_field("team_member_ids", x)?;
30722                s.end()
30723            }
30724            UsersSelectorArg::ExternalIds(x) => {
30725                // primitive
30726                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
30727                s.serialize_field(".tag", "external_ids")?;
30728                s.serialize_field("external_ids", x)?;
30729                s.end()
30730            }
30731            UsersSelectorArg::Emails(x) => {
30732                // primitive
30733                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
30734                s.serialize_field(".tag", "emails")?;
30735                s.serialize_field("emails", x)?;
30736                s.end()
30737            }
30738        }
30739    }
30740}
30741