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    /// A transient error occurred. Please try again later.
286    TransientError(crate::types::common::EmailAddress),
287    /// An error occurred due to conflicting updates. Please try again later.
288    TooManyUpdates(crate::types::common::EmailAddress),
289    /// An unknown error occurred.
290    UnknownError(crate::types::common::EmailAddress),
291    /// Too many emails are being sent to this email address. Please try again later.
292    RateLimited(crate::types::common::EmailAddress),
293    /// Catch-all used for unrecognized values returned from the server. Encountering this value
294    /// typically indicates that this SDK version is out of date.
295    Other,
296}
297
298impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailResult {
299    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
300        // union deserializer
301        use serde::de::{self, MapAccess, Visitor};
302        struct EnumVisitor;
303        impl<'de> Visitor<'de> for EnumVisitor {
304            type Value = AddSecondaryEmailResult;
305            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
306                f.write_str("a AddSecondaryEmailResult structure")
307            }
308            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
309                let tag: &str = match map.next_key()? {
310                    Some(".tag") => map.next_value()?,
311                    _ => return Err(de::Error::missing_field(".tag"))
312                };
313                let value = match tag {
314                    "success" => AddSecondaryEmailResult::Success(crate::types::secondary_emails::SecondaryEmail::internal_deserialize(&mut map)?),
315                    "unavailable" => {
316                        match map.next_key()? {
317                            Some("unavailable") => AddSecondaryEmailResult::Unavailable(map.next_value()?),
318                            None => return Err(de::Error::missing_field("unavailable")),
319                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
320                        }
321                    }
322                    "already_pending" => {
323                        match map.next_key()? {
324                            Some("already_pending") => AddSecondaryEmailResult::AlreadyPending(map.next_value()?),
325                            None => return Err(de::Error::missing_field("already_pending")),
326                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
327                        }
328                    }
329                    "already_owned_by_user" => {
330                        match map.next_key()? {
331                            Some("already_owned_by_user") => AddSecondaryEmailResult::AlreadyOwnedByUser(map.next_value()?),
332                            None => return Err(de::Error::missing_field("already_owned_by_user")),
333                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
334                        }
335                    }
336                    "reached_limit" => {
337                        match map.next_key()? {
338                            Some("reached_limit") => AddSecondaryEmailResult::ReachedLimit(map.next_value()?),
339                            None => return Err(de::Error::missing_field("reached_limit")),
340                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
341                        }
342                    }
343                    "transient_error" => {
344                        match map.next_key()? {
345                            Some("transient_error") => AddSecondaryEmailResult::TransientError(map.next_value()?),
346                            None => return Err(de::Error::missing_field("transient_error")),
347                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
348                        }
349                    }
350                    "too_many_updates" => {
351                        match map.next_key()? {
352                            Some("too_many_updates") => AddSecondaryEmailResult::TooManyUpdates(map.next_value()?),
353                            None => return Err(de::Error::missing_field("too_many_updates")),
354                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
355                        }
356                    }
357                    "unknown_error" => {
358                        match map.next_key()? {
359                            Some("unknown_error") => AddSecondaryEmailResult::UnknownError(map.next_value()?),
360                            None => return Err(de::Error::missing_field("unknown_error")),
361                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
362                        }
363                    }
364                    "rate_limited" => {
365                        match map.next_key()? {
366                            Some("rate_limited") => AddSecondaryEmailResult::RateLimited(map.next_value()?),
367                            None => return Err(de::Error::missing_field("rate_limited")),
368                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
369                        }
370                    }
371                    _ => AddSecondaryEmailResult::Other,
372                };
373                crate::eat_json_fields(&mut map)?;
374                Ok(value)
375            }
376        }
377        const VARIANTS: &[&str] = &["success",
378                                    "unavailable",
379                                    "already_pending",
380                                    "already_owned_by_user",
381                                    "reached_limit",
382                                    "transient_error",
383                                    "too_many_updates",
384                                    "unknown_error",
385                                    "rate_limited",
386                                    "other"];
387        deserializer.deserialize_struct("AddSecondaryEmailResult", VARIANTS, EnumVisitor)
388    }
389}
390
391impl ::serde::ser::Serialize for AddSecondaryEmailResult {
392    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
393        // union serializer
394        use serde::ser::SerializeStruct;
395        match self {
396            AddSecondaryEmailResult::Success(x) => {
397                // struct
398                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 3)?;
399                s.serialize_field(".tag", "success")?;
400                x.internal_serialize::<S>(&mut s)?;
401                s.end()
402            }
403            AddSecondaryEmailResult::Unavailable(x) => {
404                // primitive
405                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
406                s.serialize_field(".tag", "unavailable")?;
407                s.serialize_field("unavailable", x)?;
408                s.end()
409            }
410            AddSecondaryEmailResult::AlreadyPending(x) => {
411                // primitive
412                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
413                s.serialize_field(".tag", "already_pending")?;
414                s.serialize_field("already_pending", x)?;
415                s.end()
416            }
417            AddSecondaryEmailResult::AlreadyOwnedByUser(x) => {
418                // primitive
419                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
420                s.serialize_field(".tag", "already_owned_by_user")?;
421                s.serialize_field("already_owned_by_user", x)?;
422                s.end()
423            }
424            AddSecondaryEmailResult::ReachedLimit(x) => {
425                // primitive
426                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
427                s.serialize_field(".tag", "reached_limit")?;
428                s.serialize_field("reached_limit", x)?;
429                s.end()
430            }
431            AddSecondaryEmailResult::TransientError(x) => {
432                // primitive
433                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
434                s.serialize_field(".tag", "transient_error")?;
435                s.serialize_field("transient_error", x)?;
436                s.end()
437            }
438            AddSecondaryEmailResult::TooManyUpdates(x) => {
439                // primitive
440                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
441                s.serialize_field(".tag", "too_many_updates")?;
442                s.serialize_field("too_many_updates", x)?;
443                s.end()
444            }
445            AddSecondaryEmailResult::UnknownError(x) => {
446                // primitive
447                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
448                s.serialize_field(".tag", "unknown_error")?;
449                s.serialize_field("unknown_error", x)?;
450                s.end()
451            }
452            AddSecondaryEmailResult::RateLimited(x) => {
453                // primitive
454                let mut s = serializer.serialize_struct("AddSecondaryEmailResult", 2)?;
455                s.serialize_field(".tag", "rate_limited")?;
456                s.serialize_field("rate_limited", x)?;
457                s.end()
458            }
459            AddSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
460        }
461    }
462}
463
464#[derive(Debug, Clone, PartialEq, Eq)]
465#[non_exhaustive] // structs may have more fields added in the future.
466pub struct AddSecondaryEmailsArg {
467    /// List of users and secondary emails to add.
468    pub new_secondary_emails: Vec<UserSecondaryEmailsArg>,
469}
470
471impl AddSecondaryEmailsArg {
472    pub fn new(new_secondary_emails: Vec<UserSecondaryEmailsArg>) -> Self {
473        AddSecondaryEmailsArg {
474            new_secondary_emails,
475        }
476    }
477}
478
479const ADD_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["new_secondary_emails"];
480impl AddSecondaryEmailsArg {
481    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
482        map: V,
483    ) -> Result<AddSecondaryEmailsArg, V::Error> {
484        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
485    }
486
487    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
488        mut map: V,
489        optional: bool,
490    ) -> Result<Option<AddSecondaryEmailsArg>, V::Error> {
491        let mut field_new_secondary_emails = None;
492        let mut nothing = true;
493        while let Some(key) = map.next_key::<&str>()? {
494            nothing = false;
495            match key {
496                "new_secondary_emails" => {
497                    if field_new_secondary_emails.is_some() {
498                        return Err(::serde::de::Error::duplicate_field("new_secondary_emails"));
499                    }
500                    field_new_secondary_emails = Some(map.next_value()?);
501                }
502                _ => {
503                    // unknown field allowed and ignored
504                    map.next_value::<::serde_json::Value>()?;
505                }
506            }
507        }
508        if optional && nothing {
509            return Ok(None);
510        }
511        let result = AddSecondaryEmailsArg {
512            new_secondary_emails: field_new_secondary_emails.ok_or_else(|| ::serde::de::Error::missing_field("new_secondary_emails"))?,
513        };
514        Ok(Some(result))
515    }
516
517    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
518        &self,
519        s: &mut S::SerializeStruct,
520    ) -> Result<(), S::Error> {
521        use serde::ser::SerializeStruct;
522        s.serialize_field("new_secondary_emails", &self.new_secondary_emails)?;
523        Ok(())
524    }
525}
526
527impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsArg {
528    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
529        // struct deserializer
530        use serde::de::{MapAccess, Visitor};
531        struct StructVisitor;
532        impl<'de> Visitor<'de> for StructVisitor {
533            type Value = AddSecondaryEmailsArg;
534            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
535                f.write_str("a AddSecondaryEmailsArg struct")
536            }
537            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
538                AddSecondaryEmailsArg::internal_deserialize(map)
539            }
540        }
541        deserializer.deserialize_struct("AddSecondaryEmailsArg", ADD_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
542    }
543}
544
545impl ::serde::ser::Serialize for AddSecondaryEmailsArg {
546    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
547        // struct serializer
548        use serde::ser::SerializeStruct;
549        let mut s = serializer.serialize_struct("AddSecondaryEmailsArg", 1)?;
550        self.internal_serialize::<S>(&mut s)?;
551        s.end()
552    }
553}
554
555/// Error returned when adding secondary emails fails.
556#[derive(Debug, Clone, PartialEq, Eq)]
557#[non_exhaustive] // variants may be added in the future
558pub enum AddSecondaryEmailsError {
559    /// Secondary emails are disabled for the team.
560    SecondaryEmailsDisabled,
561    /// A maximum of 20 secondary emails can be added in a single call.
562    TooManyEmails,
563    /// Catch-all used for unrecognized values returned from the server. Encountering this value
564    /// typically indicates that this SDK version is out of date.
565    Other,
566}
567
568impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsError {
569    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
570        // union deserializer
571        use serde::de::{self, MapAccess, Visitor};
572        struct EnumVisitor;
573        impl<'de> Visitor<'de> for EnumVisitor {
574            type Value = AddSecondaryEmailsError;
575            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
576                f.write_str("a AddSecondaryEmailsError structure")
577            }
578            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
579                let tag: &str = match map.next_key()? {
580                    Some(".tag") => map.next_value()?,
581                    _ => return Err(de::Error::missing_field(".tag"))
582                };
583                let value = match tag {
584                    "secondary_emails_disabled" => AddSecondaryEmailsError::SecondaryEmailsDisabled,
585                    "too_many_emails" => AddSecondaryEmailsError::TooManyEmails,
586                    _ => AddSecondaryEmailsError::Other,
587                };
588                crate::eat_json_fields(&mut map)?;
589                Ok(value)
590            }
591        }
592        const VARIANTS: &[&str] = &["secondary_emails_disabled",
593                                    "too_many_emails",
594                                    "other"];
595        deserializer.deserialize_struct("AddSecondaryEmailsError", VARIANTS, EnumVisitor)
596    }
597}
598
599impl ::serde::ser::Serialize for AddSecondaryEmailsError {
600    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
601        // union serializer
602        use serde::ser::SerializeStruct;
603        match self {
604            AddSecondaryEmailsError::SecondaryEmailsDisabled => {
605                // unit
606                let mut s = serializer.serialize_struct("AddSecondaryEmailsError", 1)?;
607                s.serialize_field(".tag", "secondary_emails_disabled")?;
608                s.end()
609            }
610            AddSecondaryEmailsError::TooManyEmails => {
611                // unit
612                let mut s = serializer.serialize_struct("AddSecondaryEmailsError", 1)?;
613                s.serialize_field(".tag", "too_many_emails")?;
614                s.end()
615            }
616            AddSecondaryEmailsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
617        }
618    }
619}
620
621impl ::std::error::Error for AddSecondaryEmailsError {
622}
623
624impl ::std::fmt::Display for AddSecondaryEmailsError {
625    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
626        match self {
627            AddSecondaryEmailsError::SecondaryEmailsDisabled => f.write_str("Secondary emails are disabled for the team."),
628            AddSecondaryEmailsError::TooManyEmails => f.write_str("A maximum of 20 secondary emails can be added in a single call."),
629            _ => write!(f, "{:?}", *self),
630        }
631    }
632}
633
634#[derive(Debug, Clone, PartialEq, Eq)]
635#[non_exhaustive] // structs may have more fields added in the future.
636pub struct AddSecondaryEmailsResult {
637    /// List of users and secondary email results.
638    pub results: Vec<UserAddResult>,
639}
640
641impl AddSecondaryEmailsResult {
642    pub fn new(results: Vec<UserAddResult>) -> Self {
643        AddSecondaryEmailsResult {
644            results,
645        }
646    }
647}
648
649const ADD_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["results"];
650impl AddSecondaryEmailsResult {
651    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
652        map: V,
653    ) -> Result<AddSecondaryEmailsResult, V::Error> {
654        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
655    }
656
657    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
658        mut map: V,
659        optional: bool,
660    ) -> Result<Option<AddSecondaryEmailsResult>, V::Error> {
661        let mut field_results = None;
662        let mut nothing = true;
663        while let Some(key) = map.next_key::<&str>()? {
664            nothing = false;
665            match key {
666                "results" => {
667                    if field_results.is_some() {
668                        return Err(::serde::de::Error::duplicate_field("results"));
669                    }
670                    field_results = Some(map.next_value()?);
671                }
672                _ => {
673                    // unknown field allowed and ignored
674                    map.next_value::<::serde_json::Value>()?;
675                }
676            }
677        }
678        if optional && nothing {
679            return Ok(None);
680        }
681        let result = AddSecondaryEmailsResult {
682            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
683        };
684        Ok(Some(result))
685    }
686
687    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
688        &self,
689        s: &mut S::SerializeStruct,
690    ) -> Result<(), S::Error> {
691        use serde::ser::SerializeStruct;
692        s.serialize_field("results", &self.results)?;
693        Ok(())
694    }
695}
696
697impl<'de> ::serde::de::Deserialize<'de> for AddSecondaryEmailsResult {
698    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
699        // struct deserializer
700        use serde::de::{MapAccess, Visitor};
701        struct StructVisitor;
702        impl<'de> Visitor<'de> for StructVisitor {
703            type Value = AddSecondaryEmailsResult;
704            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
705                f.write_str("a AddSecondaryEmailsResult struct")
706            }
707            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
708                AddSecondaryEmailsResult::internal_deserialize(map)
709            }
710        }
711        deserializer.deserialize_struct("AddSecondaryEmailsResult", ADD_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
712    }
713}
714
715impl ::serde::ser::Serialize for AddSecondaryEmailsResult {
716    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
717        // struct serializer
718        use serde::ser::SerializeStruct;
719        let mut s = serializer.serialize_struct("AddSecondaryEmailsResult", 1)?;
720        self.internal_serialize::<S>(&mut s)?;
721        s.end()
722    }
723}
724
725/// Describes which team-related admin permissions a user has.
726#[derive(Debug, Clone, PartialEq, Eq)]
727pub enum AdminTier {
728    /// User is an administrator of the team - has all permissions.
729    TeamAdmin,
730    /// User can do most user provisioning, de-provisioning and management.
731    UserManagementAdmin,
732    /// User can do a limited set of common support tasks for existing users. Note: Dropbox is
733    /// adding new types of admin roles; these may display as support_admin.
734    SupportAdmin,
735    /// User is not an admin of the team.
736    MemberOnly,
737}
738
739impl<'de> ::serde::de::Deserialize<'de> for AdminTier {
740    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
741        // union deserializer
742        use serde::de::{self, MapAccess, Visitor};
743        struct EnumVisitor;
744        impl<'de> Visitor<'de> for EnumVisitor {
745            type Value = AdminTier;
746            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
747                f.write_str("a AdminTier structure")
748            }
749            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
750                let tag: &str = match map.next_key()? {
751                    Some(".tag") => map.next_value()?,
752                    _ => return Err(de::Error::missing_field(".tag"))
753                };
754                let value = match tag {
755                    "team_admin" => AdminTier::TeamAdmin,
756                    "user_management_admin" => AdminTier::UserManagementAdmin,
757                    "support_admin" => AdminTier::SupportAdmin,
758                    "member_only" => AdminTier::MemberOnly,
759                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
760                };
761                crate::eat_json_fields(&mut map)?;
762                Ok(value)
763            }
764        }
765        const VARIANTS: &[&str] = &["team_admin",
766                                    "user_management_admin",
767                                    "support_admin",
768                                    "member_only"];
769        deserializer.deserialize_struct("AdminTier", VARIANTS, EnumVisitor)
770    }
771}
772
773impl ::serde::ser::Serialize for AdminTier {
774    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
775        // union serializer
776        use serde::ser::SerializeStruct;
777        match self {
778            AdminTier::TeamAdmin => {
779                // unit
780                let mut s = serializer.serialize_struct("AdminTier", 1)?;
781                s.serialize_field(".tag", "team_admin")?;
782                s.end()
783            }
784            AdminTier::UserManagementAdmin => {
785                // unit
786                let mut s = serializer.serialize_struct("AdminTier", 1)?;
787                s.serialize_field(".tag", "user_management_admin")?;
788                s.end()
789            }
790            AdminTier::SupportAdmin => {
791                // unit
792                let mut s = serializer.serialize_struct("AdminTier", 1)?;
793                s.serialize_field(".tag", "support_admin")?;
794                s.end()
795            }
796            AdminTier::MemberOnly => {
797                // unit
798                let mut s = serializer.serialize_struct("AdminTier", 1)?;
799                s.serialize_field(".tag", "member_only")?;
800                s.end()
801            }
802        }
803    }
804}
805
806/// Information on linked third party applications.
807#[derive(Debug, Clone, PartialEq, Eq)]
808#[non_exhaustive] // structs may have more fields added in the future.
809pub struct ApiApp {
810    /// The application unique id.
811    pub app_id: String,
812    /// The application name.
813    pub app_name: String,
814    /// Whether the linked application uses a dedicated folder.
815    pub is_app_folder: bool,
816    /// The application publisher name.
817    pub publisher: Option<String>,
818    /// The publisher's URL.
819    pub publisher_url: Option<String>,
820    /// The time this application was linked.
821    pub linked: Option<crate::types::common::DropboxTimestamp>,
822}
823
824impl ApiApp {
825    pub fn new(app_id: String, app_name: String, is_app_folder: bool) -> Self {
826        ApiApp {
827            app_id,
828            app_name,
829            is_app_folder,
830            publisher: None,
831            publisher_url: None,
832            linked: None,
833        }
834    }
835
836    pub fn with_publisher(mut self, value: String) -> Self {
837        self.publisher = Some(value);
838        self
839    }
840
841    pub fn with_publisher_url(mut self, value: String) -> Self {
842        self.publisher_url = Some(value);
843        self
844    }
845
846    pub fn with_linked(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
847        self.linked = Some(value);
848        self
849    }
850}
851
852const API_APP_FIELDS: &[&str] = &["app_id",
853                                  "app_name",
854                                  "is_app_folder",
855                                  "publisher",
856                                  "publisher_url",
857                                  "linked"];
858impl ApiApp {
859    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
860        map: V,
861    ) -> Result<ApiApp, V::Error> {
862        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
863    }
864
865    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
866        mut map: V,
867        optional: bool,
868    ) -> Result<Option<ApiApp>, V::Error> {
869        let mut field_app_id = None;
870        let mut field_app_name = None;
871        let mut field_is_app_folder = None;
872        let mut field_publisher = None;
873        let mut field_publisher_url = None;
874        let mut field_linked = None;
875        let mut nothing = true;
876        while let Some(key) = map.next_key::<&str>()? {
877            nothing = false;
878            match key {
879                "app_id" => {
880                    if field_app_id.is_some() {
881                        return Err(::serde::de::Error::duplicate_field("app_id"));
882                    }
883                    field_app_id = Some(map.next_value()?);
884                }
885                "app_name" => {
886                    if field_app_name.is_some() {
887                        return Err(::serde::de::Error::duplicate_field("app_name"));
888                    }
889                    field_app_name = Some(map.next_value()?);
890                }
891                "is_app_folder" => {
892                    if field_is_app_folder.is_some() {
893                        return Err(::serde::de::Error::duplicate_field("is_app_folder"));
894                    }
895                    field_is_app_folder = Some(map.next_value()?);
896                }
897                "publisher" => {
898                    if field_publisher.is_some() {
899                        return Err(::serde::de::Error::duplicate_field("publisher"));
900                    }
901                    field_publisher = Some(map.next_value()?);
902                }
903                "publisher_url" => {
904                    if field_publisher_url.is_some() {
905                        return Err(::serde::de::Error::duplicate_field("publisher_url"));
906                    }
907                    field_publisher_url = Some(map.next_value()?);
908                }
909                "linked" => {
910                    if field_linked.is_some() {
911                        return Err(::serde::de::Error::duplicate_field("linked"));
912                    }
913                    field_linked = Some(map.next_value()?);
914                }
915                _ => {
916                    // unknown field allowed and ignored
917                    map.next_value::<::serde_json::Value>()?;
918                }
919            }
920        }
921        if optional && nothing {
922            return Ok(None);
923        }
924        let result = ApiApp {
925            app_id: field_app_id.ok_or_else(|| ::serde::de::Error::missing_field("app_id"))?,
926            app_name: field_app_name.ok_or_else(|| ::serde::de::Error::missing_field("app_name"))?,
927            is_app_folder: field_is_app_folder.ok_or_else(|| ::serde::de::Error::missing_field("is_app_folder"))?,
928            publisher: field_publisher.and_then(Option::flatten),
929            publisher_url: field_publisher_url.and_then(Option::flatten),
930            linked: field_linked.and_then(Option::flatten),
931        };
932        Ok(Some(result))
933    }
934
935    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
936        &self,
937        s: &mut S::SerializeStruct,
938    ) -> Result<(), S::Error> {
939        use serde::ser::SerializeStruct;
940        s.serialize_field("app_id", &self.app_id)?;
941        s.serialize_field("app_name", &self.app_name)?;
942        s.serialize_field("is_app_folder", &self.is_app_folder)?;
943        if let Some(val) = &self.publisher {
944            s.serialize_field("publisher", val)?;
945        }
946        if let Some(val) = &self.publisher_url {
947            s.serialize_field("publisher_url", val)?;
948        }
949        if let Some(val) = &self.linked {
950            s.serialize_field("linked", val)?;
951        }
952        Ok(())
953    }
954}
955
956impl<'de> ::serde::de::Deserialize<'de> for ApiApp {
957    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
958        // struct deserializer
959        use serde::de::{MapAccess, Visitor};
960        struct StructVisitor;
961        impl<'de> Visitor<'de> for StructVisitor {
962            type Value = ApiApp;
963            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
964                f.write_str("a ApiApp struct")
965            }
966            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
967                ApiApp::internal_deserialize(map)
968            }
969        }
970        deserializer.deserialize_struct("ApiApp", API_APP_FIELDS, StructVisitor)
971    }
972}
973
974impl ::serde::ser::Serialize for ApiApp {
975    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
976        // struct serializer
977        use serde::ser::SerializeStruct;
978        let mut s = serializer.serialize_struct("ApiApp", 6)?;
979        self.internal_serialize::<S>(&mut s)?;
980        s.end()
981    }
982}
983
984/// Base report structure.
985#[derive(Debug, Clone, PartialEq, Eq)]
986#[non_exhaustive] // structs may have more fields added in the future.
987pub struct BaseDfbReport {
988    /// First date present in the results as 'YYYY-MM-DD' or None.
989    pub start_date: String,
990}
991
992impl BaseDfbReport {
993    pub fn new(start_date: String) -> Self {
994        BaseDfbReport {
995            start_date,
996        }
997    }
998}
999
1000const BASE_DFB_REPORT_FIELDS: &[&str] = &["start_date"];
1001impl BaseDfbReport {
1002    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1003        map: V,
1004    ) -> Result<BaseDfbReport, V::Error> {
1005        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1006    }
1007
1008    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1009        mut map: V,
1010        optional: bool,
1011    ) -> Result<Option<BaseDfbReport>, V::Error> {
1012        let mut field_start_date = None;
1013        let mut nothing = true;
1014        while let Some(key) = map.next_key::<&str>()? {
1015            nothing = false;
1016            match key {
1017                "start_date" => {
1018                    if field_start_date.is_some() {
1019                        return Err(::serde::de::Error::duplicate_field("start_date"));
1020                    }
1021                    field_start_date = Some(map.next_value()?);
1022                }
1023                _ => {
1024                    // unknown field allowed and ignored
1025                    map.next_value::<::serde_json::Value>()?;
1026                }
1027            }
1028        }
1029        if optional && nothing {
1030            return Ok(None);
1031        }
1032        let result = BaseDfbReport {
1033            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
1034        };
1035        Ok(Some(result))
1036    }
1037
1038    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1039        &self,
1040        s: &mut S::SerializeStruct,
1041    ) -> Result<(), S::Error> {
1042        use serde::ser::SerializeStruct;
1043        s.serialize_field("start_date", &self.start_date)?;
1044        Ok(())
1045    }
1046}
1047
1048impl<'de> ::serde::de::Deserialize<'de> for BaseDfbReport {
1049    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1050        // struct deserializer
1051        use serde::de::{MapAccess, Visitor};
1052        struct StructVisitor;
1053        impl<'de> Visitor<'de> for StructVisitor {
1054            type Value = BaseDfbReport;
1055            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1056                f.write_str("a BaseDfbReport struct")
1057            }
1058            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1059                BaseDfbReport::internal_deserialize(map)
1060            }
1061        }
1062        deserializer.deserialize_struct("BaseDfbReport", BASE_DFB_REPORT_FIELDS, StructVisitor)
1063    }
1064}
1065
1066impl ::serde::ser::Serialize for BaseDfbReport {
1067    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1068        // struct serializer
1069        use serde::ser::SerializeStruct;
1070        let mut s = serializer.serialize_struct("BaseDfbReport", 1)?;
1071        self.internal_serialize::<S>(&mut s)?;
1072        s.end()
1073    }
1074}
1075
1076/// Base error that all errors for existing team folders should extend.
1077#[derive(Debug, Clone, PartialEq, Eq)]
1078#[non_exhaustive] // variants may be added in the future
1079pub enum BaseTeamFolderError {
1080    AccessError(TeamFolderAccessError),
1081    StatusError(TeamFolderInvalidStatusError),
1082    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
1083    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1084    /// typically indicates that this SDK version is out of date.
1085    Other,
1086}
1087
1088impl<'de> ::serde::de::Deserialize<'de> for BaseTeamFolderError {
1089    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1090        // union deserializer
1091        use serde::de::{self, MapAccess, Visitor};
1092        struct EnumVisitor;
1093        impl<'de> Visitor<'de> for EnumVisitor {
1094            type Value = BaseTeamFolderError;
1095            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1096                f.write_str("a BaseTeamFolderError structure")
1097            }
1098            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1099                let tag: &str = match map.next_key()? {
1100                    Some(".tag") => map.next_value()?,
1101                    _ => return Err(de::Error::missing_field(".tag"))
1102                };
1103                let value = match tag {
1104                    "access_error" => {
1105                        match map.next_key()? {
1106                            Some("access_error") => BaseTeamFolderError::AccessError(map.next_value()?),
1107                            None => return Err(de::Error::missing_field("access_error")),
1108                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1109                        }
1110                    }
1111                    "status_error" => {
1112                        match map.next_key()? {
1113                            Some("status_error") => BaseTeamFolderError::StatusError(map.next_value()?),
1114                            None => return Err(de::Error::missing_field("status_error")),
1115                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1116                        }
1117                    }
1118                    "team_shared_dropbox_error" => {
1119                        match map.next_key()? {
1120                            Some("team_shared_dropbox_error") => BaseTeamFolderError::TeamSharedDropboxError(map.next_value()?),
1121                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
1122                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1123                        }
1124                    }
1125                    _ => BaseTeamFolderError::Other,
1126                };
1127                crate::eat_json_fields(&mut map)?;
1128                Ok(value)
1129            }
1130        }
1131        const VARIANTS: &[&str] = &["access_error",
1132                                    "status_error",
1133                                    "team_shared_dropbox_error",
1134                                    "other"];
1135        deserializer.deserialize_struct("BaseTeamFolderError", VARIANTS, EnumVisitor)
1136    }
1137}
1138
1139impl ::serde::ser::Serialize for BaseTeamFolderError {
1140    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1141        // union serializer
1142        use serde::ser::SerializeStruct;
1143        match self {
1144            BaseTeamFolderError::AccessError(x) => {
1145                // union or polymporphic struct
1146                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1147                s.serialize_field(".tag", "access_error")?;
1148                s.serialize_field("access_error", x)?;
1149                s.end()
1150            }
1151            BaseTeamFolderError::StatusError(x) => {
1152                // union or polymporphic struct
1153                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1154                s.serialize_field(".tag", "status_error")?;
1155                s.serialize_field("status_error", x)?;
1156                s.end()
1157            }
1158            BaseTeamFolderError::TeamSharedDropboxError(x) => {
1159                // union or polymporphic struct
1160                let mut s = serializer.serialize_struct("BaseTeamFolderError", 2)?;
1161                s.serialize_field(".tag", "team_shared_dropbox_error")?;
1162                s.serialize_field("team_shared_dropbox_error", x)?;
1163                s.end()
1164            }
1165            BaseTeamFolderError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1166        }
1167    }
1168}
1169
1170impl ::std::error::Error for BaseTeamFolderError {
1171    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
1172        match self {
1173            BaseTeamFolderError::AccessError(inner) => Some(inner),
1174            BaseTeamFolderError::StatusError(inner) => Some(inner),
1175            BaseTeamFolderError::TeamSharedDropboxError(inner) => Some(inner),
1176            _ => None,
1177        }
1178    }
1179}
1180
1181impl ::std::fmt::Display for BaseTeamFolderError {
1182    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1183        match self {
1184            BaseTeamFolderError::AccessError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1185            BaseTeamFolderError::StatusError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1186            BaseTeamFolderError::TeamSharedDropboxError(inner) => write!(f, "BaseTeamFolderError: {}", inner),
1187            _ => write!(f, "{:?}", *self),
1188        }
1189    }
1190}
1191
1192/// Error returned when getting member custom quota.
1193#[derive(Debug, Clone, PartialEq, Eq)]
1194#[non_exhaustive] // variants may be added in the future
1195pub enum CustomQuotaError {
1196    /// A maximum of 1000 users can be set for a single call.
1197    TooManyUsers,
1198    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1199    /// typically indicates that this SDK version is out of date.
1200    Other,
1201}
1202
1203impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaError {
1204    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1205        // union deserializer
1206        use serde::de::{self, MapAccess, Visitor};
1207        struct EnumVisitor;
1208        impl<'de> Visitor<'de> for EnumVisitor {
1209            type Value = CustomQuotaError;
1210            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1211                f.write_str("a CustomQuotaError structure")
1212            }
1213            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1214                let tag: &str = match map.next_key()? {
1215                    Some(".tag") => map.next_value()?,
1216                    _ => return Err(de::Error::missing_field(".tag"))
1217                };
1218                let value = match tag {
1219                    "too_many_users" => CustomQuotaError::TooManyUsers,
1220                    _ => CustomQuotaError::Other,
1221                };
1222                crate::eat_json_fields(&mut map)?;
1223                Ok(value)
1224            }
1225        }
1226        const VARIANTS: &[&str] = &["too_many_users",
1227                                    "other"];
1228        deserializer.deserialize_struct("CustomQuotaError", VARIANTS, EnumVisitor)
1229    }
1230}
1231
1232impl ::serde::ser::Serialize for CustomQuotaError {
1233    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1234        // union serializer
1235        use serde::ser::SerializeStruct;
1236        match self {
1237            CustomQuotaError::TooManyUsers => {
1238                // unit
1239                let mut s = serializer.serialize_struct("CustomQuotaError", 1)?;
1240                s.serialize_field(".tag", "too_many_users")?;
1241                s.end()
1242            }
1243            CustomQuotaError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1244        }
1245    }
1246}
1247
1248impl ::std::error::Error for CustomQuotaError {
1249}
1250
1251impl ::std::fmt::Display for CustomQuotaError {
1252    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1253        match self {
1254            CustomQuotaError::TooManyUsers => f.write_str("A maximum of 1000 users can be set for a single call."),
1255            _ => write!(f, "{:?}", *self),
1256        }
1257    }
1258}
1259
1260/// User custom quota.
1261#[derive(Debug, Clone, PartialEq, Eq)]
1262#[non_exhaustive] // variants may be added in the future
1263pub enum CustomQuotaResult {
1264    /// User's custom quota.
1265    Success(UserCustomQuotaResult),
1266    /// Invalid user (not in team).
1267    InvalidUser(UserSelectorArg),
1268    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1269    /// typically indicates that this SDK version is out of date.
1270    Other,
1271}
1272
1273impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaResult {
1274    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1275        // union deserializer
1276        use serde::de::{self, MapAccess, Visitor};
1277        struct EnumVisitor;
1278        impl<'de> Visitor<'de> for EnumVisitor {
1279            type Value = CustomQuotaResult;
1280            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1281                f.write_str("a CustomQuotaResult structure")
1282            }
1283            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1284                let tag: &str = match map.next_key()? {
1285                    Some(".tag") => map.next_value()?,
1286                    _ => return Err(de::Error::missing_field(".tag"))
1287                };
1288                let value = match tag {
1289                    "success" => CustomQuotaResult::Success(UserCustomQuotaResult::internal_deserialize(&mut map)?),
1290                    "invalid_user" => {
1291                        match map.next_key()? {
1292                            Some("invalid_user") => CustomQuotaResult::InvalidUser(map.next_value()?),
1293                            None => return Err(de::Error::missing_field("invalid_user")),
1294                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1295                        }
1296                    }
1297                    _ => CustomQuotaResult::Other,
1298                };
1299                crate::eat_json_fields(&mut map)?;
1300                Ok(value)
1301            }
1302        }
1303        const VARIANTS: &[&str] = &["success",
1304                                    "invalid_user",
1305                                    "other"];
1306        deserializer.deserialize_struct("CustomQuotaResult", VARIANTS, EnumVisitor)
1307    }
1308}
1309
1310impl ::serde::ser::Serialize for CustomQuotaResult {
1311    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1312        // union serializer
1313        use serde::ser::SerializeStruct;
1314        match self {
1315            CustomQuotaResult::Success(x) => {
1316                // struct
1317                let mut s = serializer.serialize_struct("CustomQuotaResult", 3)?;
1318                s.serialize_field(".tag", "success")?;
1319                x.internal_serialize::<S>(&mut s)?;
1320                s.end()
1321            }
1322            CustomQuotaResult::InvalidUser(x) => {
1323                // union or polymporphic struct
1324                let mut s = serializer.serialize_struct("CustomQuotaResult", 2)?;
1325                s.serialize_field(".tag", "invalid_user")?;
1326                s.serialize_field("invalid_user", x)?;
1327                s.end()
1328            }
1329            CustomQuotaResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1330        }
1331    }
1332}
1333
1334#[derive(Debug, Clone, PartialEq, Eq)]
1335#[non_exhaustive] // structs may have more fields added in the future.
1336pub struct CustomQuotaUsersArg {
1337    /// List of users.
1338    pub users: Vec<UserSelectorArg>,
1339}
1340
1341impl CustomQuotaUsersArg {
1342    pub fn new(users: Vec<UserSelectorArg>) -> Self {
1343        CustomQuotaUsersArg {
1344            users,
1345        }
1346    }
1347}
1348
1349const CUSTOM_QUOTA_USERS_ARG_FIELDS: &[&str] = &["users"];
1350impl CustomQuotaUsersArg {
1351    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1352        map: V,
1353    ) -> Result<CustomQuotaUsersArg, V::Error> {
1354        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1355    }
1356
1357    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1358        mut map: V,
1359        optional: bool,
1360    ) -> Result<Option<CustomQuotaUsersArg>, V::Error> {
1361        let mut field_users = None;
1362        let mut nothing = true;
1363        while let Some(key) = map.next_key::<&str>()? {
1364            nothing = false;
1365            match key {
1366                "users" => {
1367                    if field_users.is_some() {
1368                        return Err(::serde::de::Error::duplicate_field("users"));
1369                    }
1370                    field_users = Some(map.next_value()?);
1371                }
1372                _ => {
1373                    // unknown field allowed and ignored
1374                    map.next_value::<::serde_json::Value>()?;
1375                }
1376            }
1377        }
1378        if optional && nothing {
1379            return Ok(None);
1380        }
1381        let result = CustomQuotaUsersArg {
1382            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
1383        };
1384        Ok(Some(result))
1385    }
1386
1387    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1388        &self,
1389        s: &mut S::SerializeStruct,
1390    ) -> Result<(), S::Error> {
1391        use serde::ser::SerializeStruct;
1392        s.serialize_field("users", &self.users)?;
1393        Ok(())
1394    }
1395}
1396
1397impl<'de> ::serde::de::Deserialize<'de> for CustomQuotaUsersArg {
1398    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1399        // struct deserializer
1400        use serde::de::{MapAccess, Visitor};
1401        struct StructVisitor;
1402        impl<'de> Visitor<'de> for StructVisitor {
1403            type Value = CustomQuotaUsersArg;
1404            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1405                f.write_str("a CustomQuotaUsersArg struct")
1406            }
1407            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1408                CustomQuotaUsersArg::internal_deserialize(map)
1409            }
1410        }
1411        deserializer.deserialize_struct("CustomQuotaUsersArg", CUSTOM_QUOTA_USERS_ARG_FIELDS, StructVisitor)
1412    }
1413}
1414
1415impl ::serde::ser::Serialize for CustomQuotaUsersArg {
1416    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1417        // struct serializer
1418        use serde::ser::SerializeStruct;
1419        let mut s = serializer.serialize_struct("CustomQuotaUsersArg", 1)?;
1420        self.internal_serialize::<S>(&mut s)?;
1421        s.end()
1422    }
1423}
1424
1425/// Input arguments that can be provided for most reports.
1426#[derive(Debug, Clone, PartialEq, Eq, Default)]
1427#[non_exhaustive] // structs may have more fields added in the future.
1428pub struct DateRange {
1429    /// Optional starting date (inclusive). If start_date is None or too long ago, this field will
1430    /// be set to 6 months ago.
1431    pub start_date: Option<crate::types::common::Date>,
1432    /// Optional ending date (exclusive).
1433    pub end_date: Option<crate::types::common::Date>,
1434}
1435
1436impl DateRange {
1437    pub fn with_start_date(mut self, value: crate::types::common::Date) -> Self {
1438        self.start_date = Some(value);
1439        self
1440    }
1441
1442    pub fn with_end_date(mut self, value: crate::types::common::Date) -> Self {
1443        self.end_date = Some(value);
1444        self
1445    }
1446}
1447
1448const DATE_RANGE_FIELDS: &[&str] = &["start_date",
1449                                     "end_date"];
1450impl DateRange {
1451    // no _opt deserializer
1452    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1453        mut map: V,
1454    ) -> Result<DateRange, V::Error> {
1455        let mut field_start_date = None;
1456        let mut field_end_date = None;
1457        while let Some(key) = map.next_key::<&str>()? {
1458            match key {
1459                "start_date" => {
1460                    if field_start_date.is_some() {
1461                        return Err(::serde::de::Error::duplicate_field("start_date"));
1462                    }
1463                    field_start_date = Some(map.next_value()?);
1464                }
1465                "end_date" => {
1466                    if field_end_date.is_some() {
1467                        return Err(::serde::de::Error::duplicate_field("end_date"));
1468                    }
1469                    field_end_date = Some(map.next_value()?);
1470                }
1471                _ => {
1472                    // unknown field allowed and ignored
1473                    map.next_value::<::serde_json::Value>()?;
1474                }
1475            }
1476        }
1477        let result = DateRange {
1478            start_date: field_start_date.and_then(Option::flatten),
1479            end_date: field_end_date.and_then(Option::flatten),
1480        };
1481        Ok(result)
1482    }
1483
1484    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1485        &self,
1486        s: &mut S::SerializeStruct,
1487    ) -> Result<(), S::Error> {
1488        use serde::ser::SerializeStruct;
1489        if let Some(val) = &self.start_date {
1490            s.serialize_field("start_date", val)?;
1491        }
1492        if let Some(val) = &self.end_date {
1493            s.serialize_field("end_date", val)?;
1494        }
1495        Ok(())
1496    }
1497}
1498
1499impl<'de> ::serde::de::Deserialize<'de> for DateRange {
1500    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1501        // struct deserializer
1502        use serde::de::{MapAccess, Visitor};
1503        struct StructVisitor;
1504        impl<'de> Visitor<'de> for StructVisitor {
1505            type Value = DateRange;
1506            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1507                f.write_str("a DateRange struct")
1508            }
1509            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1510                DateRange::internal_deserialize(map)
1511            }
1512        }
1513        deserializer.deserialize_struct("DateRange", DATE_RANGE_FIELDS, StructVisitor)
1514    }
1515}
1516
1517impl ::serde::ser::Serialize for DateRange {
1518    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1519        // struct serializer
1520        use serde::ser::SerializeStruct;
1521        let mut s = serializer.serialize_struct("DateRange", 2)?;
1522        self.internal_serialize::<S>(&mut s)?;
1523        s.end()
1524    }
1525}
1526
1527/// Errors that can originate from problems in input arguments to reports.
1528#[derive(Debug, Clone, PartialEq, Eq)]
1529#[non_exhaustive] // variants may be added in the future
1530pub enum DateRangeError {
1531    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1532    /// typically indicates that this SDK version is out of date.
1533    Other,
1534}
1535
1536impl<'de> ::serde::de::Deserialize<'de> for DateRangeError {
1537    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1538        // union deserializer
1539        use serde::de::{self, MapAccess, Visitor};
1540        struct EnumVisitor;
1541        impl<'de> Visitor<'de> for EnumVisitor {
1542            type Value = DateRangeError;
1543            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1544                f.write_str("a DateRangeError structure")
1545            }
1546            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1547                let tag: &str = match map.next_key()? {
1548                    Some(".tag") => map.next_value()?,
1549                    _ => return Err(de::Error::missing_field(".tag"))
1550                };
1551                // open enum with no defined variants
1552                let _ = tag;
1553                crate::eat_json_fields(&mut map)?;
1554                Ok(DateRangeError::Other)
1555            }
1556        }
1557        const VARIANTS: &[&str] = &["other"];
1558        deserializer.deserialize_struct("DateRangeError", VARIANTS, EnumVisitor)
1559    }
1560}
1561
1562impl ::serde::ser::Serialize for DateRangeError {
1563    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1564        // union serializer
1565        #![allow(unused_variables)]
1566        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
1567    }
1568}
1569
1570impl ::std::error::Error for DateRangeError {
1571}
1572
1573impl ::std::fmt::Display for DateRangeError {
1574    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1575        write!(f, "{:?}", *self)
1576    }
1577}
1578
1579/// Result of trying to delete a secondary email address. 'success' is the only value indicating
1580/// that a secondary email was successfully deleted. The other values explain the type of error that
1581/// occurred, and include the email for which the error occurred.
1582#[derive(Debug, Clone, PartialEq, Eq)]
1583#[non_exhaustive] // variants may be added in the future
1584pub enum DeleteSecondaryEmailResult {
1585    /// The secondary email was successfully deleted.
1586    Success(crate::types::common::EmailAddress),
1587    /// The email address was not found for the user.
1588    NotFound(crate::types::common::EmailAddress),
1589    /// The email address is the primary email address of the user, and cannot be removed.
1590    CannotRemovePrimary(crate::types::common::EmailAddress),
1591    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1592    /// typically indicates that this SDK version is out of date.
1593    Other,
1594}
1595
1596impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailResult {
1597    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1598        // union deserializer
1599        use serde::de::{self, MapAccess, Visitor};
1600        struct EnumVisitor;
1601        impl<'de> Visitor<'de> for EnumVisitor {
1602            type Value = DeleteSecondaryEmailResult;
1603            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1604                f.write_str("a DeleteSecondaryEmailResult structure")
1605            }
1606            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1607                let tag: &str = match map.next_key()? {
1608                    Some(".tag") => map.next_value()?,
1609                    _ => return Err(de::Error::missing_field(".tag"))
1610                };
1611                let value = match tag {
1612                    "success" => {
1613                        match map.next_key()? {
1614                            Some("success") => DeleteSecondaryEmailResult::Success(map.next_value()?),
1615                            None => return Err(de::Error::missing_field("success")),
1616                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1617                        }
1618                    }
1619                    "not_found" => {
1620                        match map.next_key()? {
1621                            Some("not_found") => DeleteSecondaryEmailResult::NotFound(map.next_value()?),
1622                            None => return Err(de::Error::missing_field("not_found")),
1623                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1624                        }
1625                    }
1626                    "cannot_remove_primary" => {
1627                        match map.next_key()? {
1628                            Some("cannot_remove_primary") => DeleteSecondaryEmailResult::CannotRemovePrimary(map.next_value()?),
1629                            None => return Err(de::Error::missing_field("cannot_remove_primary")),
1630                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1631                        }
1632                    }
1633                    _ => DeleteSecondaryEmailResult::Other,
1634                };
1635                crate::eat_json_fields(&mut map)?;
1636                Ok(value)
1637            }
1638        }
1639        const VARIANTS: &[&str] = &["success",
1640                                    "not_found",
1641                                    "cannot_remove_primary",
1642                                    "other"];
1643        deserializer.deserialize_struct("DeleteSecondaryEmailResult", VARIANTS, EnumVisitor)
1644    }
1645}
1646
1647impl ::serde::ser::Serialize for DeleteSecondaryEmailResult {
1648    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1649        // union serializer
1650        use serde::ser::SerializeStruct;
1651        match self {
1652            DeleteSecondaryEmailResult::Success(x) => {
1653                // primitive
1654                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1655                s.serialize_field(".tag", "success")?;
1656                s.serialize_field("success", x)?;
1657                s.end()
1658            }
1659            DeleteSecondaryEmailResult::NotFound(x) => {
1660                // primitive
1661                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1662                s.serialize_field(".tag", "not_found")?;
1663                s.serialize_field("not_found", x)?;
1664                s.end()
1665            }
1666            DeleteSecondaryEmailResult::CannotRemovePrimary(x) => {
1667                // primitive
1668                let mut s = serializer.serialize_struct("DeleteSecondaryEmailResult", 2)?;
1669                s.serialize_field(".tag", "cannot_remove_primary")?;
1670                s.serialize_field("cannot_remove_primary", x)?;
1671                s.end()
1672            }
1673            DeleteSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1674        }
1675    }
1676}
1677
1678#[derive(Debug, Clone, PartialEq, Eq)]
1679#[non_exhaustive] // structs may have more fields added in the future.
1680pub struct DeleteSecondaryEmailsArg {
1681    /// List of users and their secondary emails to delete.
1682    pub emails_to_delete: Vec<UserSecondaryEmailsArg>,
1683}
1684
1685impl DeleteSecondaryEmailsArg {
1686    pub fn new(emails_to_delete: Vec<UserSecondaryEmailsArg>) -> Self {
1687        DeleteSecondaryEmailsArg {
1688            emails_to_delete,
1689        }
1690    }
1691}
1692
1693const DELETE_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["emails_to_delete"];
1694impl DeleteSecondaryEmailsArg {
1695    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1696        map: V,
1697    ) -> Result<DeleteSecondaryEmailsArg, V::Error> {
1698        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1699    }
1700
1701    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1702        mut map: V,
1703        optional: bool,
1704    ) -> Result<Option<DeleteSecondaryEmailsArg>, V::Error> {
1705        let mut field_emails_to_delete = None;
1706        let mut nothing = true;
1707        while let Some(key) = map.next_key::<&str>()? {
1708            nothing = false;
1709            match key {
1710                "emails_to_delete" => {
1711                    if field_emails_to_delete.is_some() {
1712                        return Err(::serde::de::Error::duplicate_field("emails_to_delete"));
1713                    }
1714                    field_emails_to_delete = Some(map.next_value()?);
1715                }
1716                _ => {
1717                    // unknown field allowed and ignored
1718                    map.next_value::<::serde_json::Value>()?;
1719                }
1720            }
1721        }
1722        if optional && nothing {
1723            return Ok(None);
1724        }
1725        let result = DeleteSecondaryEmailsArg {
1726            emails_to_delete: field_emails_to_delete.ok_or_else(|| ::serde::de::Error::missing_field("emails_to_delete"))?,
1727        };
1728        Ok(Some(result))
1729    }
1730
1731    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1732        &self,
1733        s: &mut S::SerializeStruct,
1734    ) -> Result<(), S::Error> {
1735        use serde::ser::SerializeStruct;
1736        s.serialize_field("emails_to_delete", &self.emails_to_delete)?;
1737        Ok(())
1738    }
1739}
1740
1741impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailsArg {
1742    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1743        // struct deserializer
1744        use serde::de::{MapAccess, Visitor};
1745        struct StructVisitor;
1746        impl<'de> Visitor<'de> for StructVisitor {
1747            type Value = DeleteSecondaryEmailsArg;
1748            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1749                f.write_str("a DeleteSecondaryEmailsArg struct")
1750            }
1751            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1752                DeleteSecondaryEmailsArg::internal_deserialize(map)
1753            }
1754        }
1755        deserializer.deserialize_struct("DeleteSecondaryEmailsArg", DELETE_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
1756    }
1757}
1758
1759impl ::serde::ser::Serialize for DeleteSecondaryEmailsArg {
1760    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1761        // struct serializer
1762        use serde::ser::SerializeStruct;
1763        let mut s = serializer.serialize_struct("DeleteSecondaryEmailsArg", 1)?;
1764        self.internal_serialize::<S>(&mut s)?;
1765        s.end()
1766    }
1767}
1768
1769#[derive(Debug, Clone, PartialEq, Eq)]
1770#[non_exhaustive] // structs may have more fields added in the future.
1771pub struct DeleteSecondaryEmailsResult {
1772    pub results: Vec<UserDeleteResult>,
1773}
1774
1775impl DeleteSecondaryEmailsResult {
1776    pub fn new(results: Vec<UserDeleteResult>) -> Self {
1777        DeleteSecondaryEmailsResult {
1778            results,
1779        }
1780    }
1781}
1782
1783const DELETE_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["results"];
1784impl DeleteSecondaryEmailsResult {
1785    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1786        map: V,
1787    ) -> Result<DeleteSecondaryEmailsResult, V::Error> {
1788        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1789    }
1790
1791    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1792        mut map: V,
1793        optional: bool,
1794    ) -> Result<Option<DeleteSecondaryEmailsResult>, V::Error> {
1795        let mut field_results = None;
1796        let mut nothing = true;
1797        while let Some(key) = map.next_key::<&str>()? {
1798            nothing = false;
1799            match key {
1800                "results" => {
1801                    if field_results.is_some() {
1802                        return Err(::serde::de::Error::duplicate_field("results"));
1803                    }
1804                    field_results = Some(map.next_value()?);
1805                }
1806                _ => {
1807                    // unknown field allowed and ignored
1808                    map.next_value::<::serde_json::Value>()?;
1809                }
1810            }
1811        }
1812        if optional && nothing {
1813            return Ok(None);
1814        }
1815        let result = DeleteSecondaryEmailsResult {
1816            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
1817        };
1818        Ok(Some(result))
1819    }
1820
1821    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1822        &self,
1823        s: &mut S::SerializeStruct,
1824    ) -> Result<(), S::Error> {
1825        use serde::ser::SerializeStruct;
1826        s.serialize_field("results", &self.results)?;
1827        Ok(())
1828    }
1829}
1830
1831impl<'de> ::serde::de::Deserialize<'de> for DeleteSecondaryEmailsResult {
1832    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1833        // struct deserializer
1834        use serde::de::{MapAccess, Visitor};
1835        struct StructVisitor;
1836        impl<'de> Visitor<'de> for StructVisitor {
1837            type Value = DeleteSecondaryEmailsResult;
1838            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1839                f.write_str("a DeleteSecondaryEmailsResult struct")
1840            }
1841            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1842                DeleteSecondaryEmailsResult::internal_deserialize(map)
1843            }
1844        }
1845        deserializer.deserialize_struct("DeleteSecondaryEmailsResult", DELETE_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
1846    }
1847}
1848
1849impl ::serde::ser::Serialize for DeleteSecondaryEmailsResult {
1850    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1851        // struct serializer
1852        use serde::ser::SerializeStruct;
1853        let mut s = serializer.serialize_struct("DeleteSecondaryEmailsResult", 1)?;
1854        self.internal_serialize::<S>(&mut s)?;
1855        s.end()
1856    }
1857}
1858
1859/// Information about linked Dropbox desktop client sessions.
1860#[derive(Debug, Clone, PartialEq, Eq)]
1861#[non_exhaustive] // structs may have more fields added in the future.
1862pub struct DesktopClientSession {
1863    /// The session id.
1864    pub session_id: String,
1865    /// Name of the hosting desktop.
1866    pub host_name: String,
1867    /// The Dropbox desktop client type.
1868    pub client_type: DesktopPlatform,
1869    /// The Dropbox client version.
1870    pub client_version: String,
1871    /// Information on the hosting platform.
1872    pub platform: String,
1873    /// Whether it's possible to delete all of the account files upon unlinking.
1874    pub is_delete_on_unlink_supported: bool,
1875    /// The IP address of the last activity from this session.
1876    pub ip_address: Option<String>,
1877    /// The country from which the last activity from this session was made.
1878    pub country: Option<String>,
1879    /// The time this session was created.
1880    pub created: Option<crate::types::common::DropboxTimestamp>,
1881    /// The time of the last activity from this session.
1882    pub updated: Option<crate::types::common::DropboxTimestamp>,
1883}
1884
1885impl DesktopClientSession {
1886    pub fn new(
1887        session_id: String,
1888        host_name: String,
1889        client_type: DesktopPlatform,
1890        client_version: String,
1891        platform: String,
1892        is_delete_on_unlink_supported: bool,
1893    ) -> Self {
1894        DesktopClientSession {
1895            session_id,
1896            host_name,
1897            client_type,
1898            client_version,
1899            platform,
1900            is_delete_on_unlink_supported,
1901            ip_address: None,
1902            country: None,
1903            created: None,
1904            updated: None,
1905        }
1906    }
1907
1908    pub fn with_ip_address(mut self, value: String) -> Self {
1909        self.ip_address = Some(value);
1910        self
1911    }
1912
1913    pub fn with_country(mut self, value: String) -> Self {
1914        self.country = Some(value);
1915        self
1916    }
1917
1918    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
1919        self.created = Some(value);
1920        self
1921    }
1922
1923    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
1924        self.updated = Some(value);
1925        self
1926    }
1927}
1928
1929const DESKTOP_CLIENT_SESSION_FIELDS: &[&str] = &["session_id",
1930                                                 "host_name",
1931                                                 "client_type",
1932                                                 "client_version",
1933                                                 "platform",
1934                                                 "is_delete_on_unlink_supported",
1935                                                 "ip_address",
1936                                                 "country",
1937                                                 "created",
1938                                                 "updated"];
1939impl DesktopClientSession {
1940    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1941        map: V,
1942    ) -> Result<DesktopClientSession, V::Error> {
1943        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1944    }
1945
1946    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1947        mut map: V,
1948        optional: bool,
1949    ) -> Result<Option<DesktopClientSession>, V::Error> {
1950        let mut field_session_id = None;
1951        let mut field_host_name = None;
1952        let mut field_client_type = None;
1953        let mut field_client_version = None;
1954        let mut field_platform = None;
1955        let mut field_is_delete_on_unlink_supported = None;
1956        let mut field_ip_address = None;
1957        let mut field_country = None;
1958        let mut field_created = None;
1959        let mut field_updated = None;
1960        let mut nothing = true;
1961        while let Some(key) = map.next_key::<&str>()? {
1962            nothing = false;
1963            match key {
1964                "session_id" => {
1965                    if field_session_id.is_some() {
1966                        return Err(::serde::de::Error::duplicate_field("session_id"));
1967                    }
1968                    field_session_id = Some(map.next_value()?);
1969                }
1970                "host_name" => {
1971                    if field_host_name.is_some() {
1972                        return Err(::serde::de::Error::duplicate_field("host_name"));
1973                    }
1974                    field_host_name = Some(map.next_value()?);
1975                }
1976                "client_type" => {
1977                    if field_client_type.is_some() {
1978                        return Err(::serde::de::Error::duplicate_field("client_type"));
1979                    }
1980                    field_client_type = Some(map.next_value()?);
1981                }
1982                "client_version" => {
1983                    if field_client_version.is_some() {
1984                        return Err(::serde::de::Error::duplicate_field("client_version"));
1985                    }
1986                    field_client_version = Some(map.next_value()?);
1987                }
1988                "platform" => {
1989                    if field_platform.is_some() {
1990                        return Err(::serde::de::Error::duplicate_field("platform"));
1991                    }
1992                    field_platform = Some(map.next_value()?);
1993                }
1994                "is_delete_on_unlink_supported" => {
1995                    if field_is_delete_on_unlink_supported.is_some() {
1996                        return Err(::serde::de::Error::duplicate_field("is_delete_on_unlink_supported"));
1997                    }
1998                    field_is_delete_on_unlink_supported = Some(map.next_value()?);
1999                }
2000                "ip_address" => {
2001                    if field_ip_address.is_some() {
2002                        return Err(::serde::de::Error::duplicate_field("ip_address"));
2003                    }
2004                    field_ip_address = Some(map.next_value()?);
2005                }
2006                "country" => {
2007                    if field_country.is_some() {
2008                        return Err(::serde::de::Error::duplicate_field("country"));
2009                    }
2010                    field_country = Some(map.next_value()?);
2011                }
2012                "created" => {
2013                    if field_created.is_some() {
2014                        return Err(::serde::de::Error::duplicate_field("created"));
2015                    }
2016                    field_created = Some(map.next_value()?);
2017                }
2018                "updated" => {
2019                    if field_updated.is_some() {
2020                        return Err(::serde::de::Error::duplicate_field("updated"));
2021                    }
2022                    field_updated = Some(map.next_value()?);
2023                }
2024                _ => {
2025                    // unknown field allowed and ignored
2026                    map.next_value::<::serde_json::Value>()?;
2027                }
2028            }
2029        }
2030        if optional && nothing {
2031            return Ok(None);
2032        }
2033        let result = DesktopClientSession {
2034            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2035            host_name: field_host_name.ok_or_else(|| ::serde::de::Error::missing_field("host_name"))?,
2036            client_type: field_client_type.ok_or_else(|| ::serde::de::Error::missing_field("client_type"))?,
2037            client_version: field_client_version.ok_or_else(|| ::serde::de::Error::missing_field("client_version"))?,
2038            platform: field_platform.ok_or_else(|| ::serde::de::Error::missing_field("platform"))?,
2039            is_delete_on_unlink_supported: field_is_delete_on_unlink_supported.ok_or_else(|| ::serde::de::Error::missing_field("is_delete_on_unlink_supported"))?,
2040            ip_address: field_ip_address.and_then(Option::flatten),
2041            country: field_country.and_then(Option::flatten),
2042            created: field_created.and_then(Option::flatten),
2043            updated: field_updated.and_then(Option::flatten),
2044        };
2045        Ok(Some(result))
2046    }
2047
2048    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2049        &self,
2050        s: &mut S::SerializeStruct,
2051    ) -> Result<(), S::Error> {
2052        use serde::ser::SerializeStruct;
2053        s.serialize_field("session_id", &self.session_id)?;
2054        s.serialize_field("host_name", &self.host_name)?;
2055        s.serialize_field("client_type", &self.client_type)?;
2056        s.serialize_field("client_version", &self.client_version)?;
2057        s.serialize_field("platform", &self.platform)?;
2058        s.serialize_field("is_delete_on_unlink_supported", &self.is_delete_on_unlink_supported)?;
2059        if let Some(val) = &self.ip_address {
2060            s.serialize_field("ip_address", val)?;
2061        }
2062        if let Some(val) = &self.country {
2063            s.serialize_field("country", val)?;
2064        }
2065        if let Some(val) = &self.created {
2066            s.serialize_field("created", val)?;
2067        }
2068        if let Some(val) = &self.updated {
2069            s.serialize_field("updated", val)?;
2070        }
2071        Ok(())
2072    }
2073}
2074
2075impl<'de> ::serde::de::Deserialize<'de> for DesktopClientSession {
2076    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2077        // struct deserializer
2078        use serde::de::{MapAccess, Visitor};
2079        struct StructVisitor;
2080        impl<'de> Visitor<'de> for StructVisitor {
2081            type Value = DesktopClientSession;
2082            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2083                f.write_str("a DesktopClientSession struct")
2084            }
2085            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2086                DesktopClientSession::internal_deserialize(map)
2087            }
2088        }
2089        deserializer.deserialize_struct("DesktopClientSession", DESKTOP_CLIENT_SESSION_FIELDS, StructVisitor)
2090    }
2091}
2092
2093impl ::serde::ser::Serialize for DesktopClientSession {
2094    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2095        // struct serializer
2096        use serde::ser::SerializeStruct;
2097        let mut s = serializer.serialize_struct("DesktopClientSession", 10)?;
2098        self.internal_serialize::<S>(&mut s)?;
2099        s.end()
2100    }
2101}
2102
2103// struct extends DeviceSession
2104impl From<DesktopClientSession> for DeviceSession {
2105    fn from(subtype: DesktopClientSession) -> Self {
2106        Self {
2107            session_id: subtype.session_id,
2108            ip_address: subtype.ip_address,
2109            country: subtype.country,
2110            created: subtype.created,
2111            updated: subtype.updated,
2112        }
2113    }
2114}
2115#[derive(Debug, Clone, PartialEq, Eq)]
2116#[non_exhaustive] // variants may be added in the future
2117pub enum DesktopPlatform {
2118    /// Official Windows Dropbox desktop client.
2119    Windows,
2120    /// Official Mac Dropbox desktop client.
2121    Mac,
2122    /// Official Linux Dropbox desktop client.
2123    Linux,
2124    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2125    /// typically indicates that this SDK version is out of date.
2126    Other,
2127}
2128
2129impl<'de> ::serde::de::Deserialize<'de> for DesktopPlatform {
2130    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2131        // union deserializer
2132        use serde::de::{self, MapAccess, Visitor};
2133        struct EnumVisitor;
2134        impl<'de> Visitor<'de> for EnumVisitor {
2135            type Value = DesktopPlatform;
2136            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2137                f.write_str("a DesktopPlatform structure")
2138            }
2139            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2140                let tag: &str = match map.next_key()? {
2141                    Some(".tag") => map.next_value()?,
2142                    _ => return Err(de::Error::missing_field(".tag"))
2143                };
2144                let value = match tag {
2145                    "windows" => DesktopPlatform::Windows,
2146                    "mac" => DesktopPlatform::Mac,
2147                    "linux" => DesktopPlatform::Linux,
2148                    _ => DesktopPlatform::Other,
2149                };
2150                crate::eat_json_fields(&mut map)?;
2151                Ok(value)
2152            }
2153        }
2154        const VARIANTS: &[&str] = &["windows",
2155                                    "mac",
2156                                    "linux",
2157                                    "other"];
2158        deserializer.deserialize_struct("DesktopPlatform", VARIANTS, EnumVisitor)
2159    }
2160}
2161
2162impl ::serde::ser::Serialize for DesktopPlatform {
2163    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2164        // union serializer
2165        use serde::ser::SerializeStruct;
2166        match self {
2167            DesktopPlatform::Windows => {
2168                // unit
2169                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2170                s.serialize_field(".tag", "windows")?;
2171                s.end()
2172            }
2173            DesktopPlatform::Mac => {
2174                // unit
2175                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2176                s.serialize_field(".tag", "mac")?;
2177                s.end()
2178            }
2179            DesktopPlatform::Linux => {
2180                // unit
2181                let mut s = serializer.serialize_struct("DesktopPlatform", 1)?;
2182                s.serialize_field(".tag", "linux")?;
2183                s.end()
2184            }
2185            DesktopPlatform::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2186        }
2187    }
2188}
2189
2190#[derive(Debug, Clone, PartialEq, Eq)]
2191#[non_exhaustive] // structs may have more fields added in the future.
2192pub struct DeviceSession {
2193    /// The session id.
2194    pub session_id: String,
2195    /// The IP address of the last activity from this session.
2196    pub ip_address: Option<String>,
2197    /// The country from which the last activity from this session was made.
2198    pub country: Option<String>,
2199    /// The time this session was created.
2200    pub created: Option<crate::types::common::DropboxTimestamp>,
2201    /// The time of the last activity from this session.
2202    pub updated: Option<crate::types::common::DropboxTimestamp>,
2203}
2204
2205impl DeviceSession {
2206    pub fn new(session_id: String) -> Self {
2207        DeviceSession {
2208            session_id,
2209            ip_address: None,
2210            country: None,
2211            created: None,
2212            updated: None,
2213        }
2214    }
2215
2216    pub fn with_ip_address(mut self, value: String) -> Self {
2217        self.ip_address = Some(value);
2218        self
2219    }
2220
2221    pub fn with_country(mut self, value: String) -> Self {
2222        self.country = Some(value);
2223        self
2224    }
2225
2226    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
2227        self.created = Some(value);
2228        self
2229    }
2230
2231    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
2232        self.updated = Some(value);
2233        self
2234    }
2235}
2236
2237const DEVICE_SESSION_FIELDS: &[&str] = &["session_id",
2238                                         "ip_address",
2239                                         "country",
2240                                         "created",
2241                                         "updated"];
2242impl DeviceSession {
2243    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2244        map: V,
2245    ) -> Result<DeviceSession, V::Error> {
2246        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2247    }
2248
2249    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2250        mut map: V,
2251        optional: bool,
2252    ) -> Result<Option<DeviceSession>, V::Error> {
2253        let mut field_session_id = None;
2254        let mut field_ip_address = None;
2255        let mut field_country = None;
2256        let mut field_created = None;
2257        let mut field_updated = None;
2258        let mut nothing = true;
2259        while let Some(key) = map.next_key::<&str>()? {
2260            nothing = false;
2261            match key {
2262                "session_id" => {
2263                    if field_session_id.is_some() {
2264                        return Err(::serde::de::Error::duplicate_field("session_id"));
2265                    }
2266                    field_session_id = Some(map.next_value()?);
2267                }
2268                "ip_address" => {
2269                    if field_ip_address.is_some() {
2270                        return Err(::serde::de::Error::duplicate_field("ip_address"));
2271                    }
2272                    field_ip_address = Some(map.next_value()?);
2273                }
2274                "country" => {
2275                    if field_country.is_some() {
2276                        return Err(::serde::de::Error::duplicate_field("country"));
2277                    }
2278                    field_country = Some(map.next_value()?);
2279                }
2280                "created" => {
2281                    if field_created.is_some() {
2282                        return Err(::serde::de::Error::duplicate_field("created"));
2283                    }
2284                    field_created = Some(map.next_value()?);
2285                }
2286                "updated" => {
2287                    if field_updated.is_some() {
2288                        return Err(::serde::de::Error::duplicate_field("updated"));
2289                    }
2290                    field_updated = Some(map.next_value()?);
2291                }
2292                _ => {
2293                    // unknown field allowed and ignored
2294                    map.next_value::<::serde_json::Value>()?;
2295                }
2296            }
2297        }
2298        if optional && nothing {
2299            return Ok(None);
2300        }
2301        let result = DeviceSession {
2302            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2303            ip_address: field_ip_address.and_then(Option::flatten),
2304            country: field_country.and_then(Option::flatten),
2305            created: field_created.and_then(Option::flatten),
2306            updated: field_updated.and_then(Option::flatten),
2307        };
2308        Ok(Some(result))
2309    }
2310
2311    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2312        &self,
2313        s: &mut S::SerializeStruct,
2314    ) -> Result<(), S::Error> {
2315        use serde::ser::SerializeStruct;
2316        s.serialize_field("session_id", &self.session_id)?;
2317        if let Some(val) = &self.ip_address {
2318            s.serialize_field("ip_address", val)?;
2319        }
2320        if let Some(val) = &self.country {
2321            s.serialize_field("country", val)?;
2322        }
2323        if let Some(val) = &self.created {
2324            s.serialize_field("created", val)?;
2325        }
2326        if let Some(val) = &self.updated {
2327            s.serialize_field("updated", val)?;
2328        }
2329        Ok(())
2330    }
2331}
2332
2333impl<'de> ::serde::de::Deserialize<'de> for DeviceSession {
2334    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2335        // struct deserializer
2336        use serde::de::{MapAccess, Visitor};
2337        struct StructVisitor;
2338        impl<'de> Visitor<'de> for StructVisitor {
2339            type Value = DeviceSession;
2340            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2341                f.write_str("a DeviceSession struct")
2342            }
2343            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2344                DeviceSession::internal_deserialize(map)
2345            }
2346        }
2347        deserializer.deserialize_struct("DeviceSession", DEVICE_SESSION_FIELDS, StructVisitor)
2348    }
2349}
2350
2351impl ::serde::ser::Serialize for DeviceSession {
2352    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2353        // struct serializer
2354        use serde::ser::SerializeStruct;
2355        let mut s = serializer.serialize_struct("DeviceSession", 5)?;
2356        self.internal_serialize::<S>(&mut s)?;
2357        s.end()
2358    }
2359}
2360
2361#[derive(Debug, Clone, PartialEq, Eq)]
2362#[non_exhaustive] // structs may have more fields added in the future.
2363pub struct DeviceSessionArg {
2364    /// The session id.
2365    pub session_id: String,
2366    /// The unique id of the member owning the device.
2367    pub team_member_id: String,
2368}
2369
2370impl DeviceSessionArg {
2371    pub fn new(session_id: String, team_member_id: String) -> Self {
2372        DeviceSessionArg {
2373            session_id,
2374            team_member_id,
2375        }
2376    }
2377}
2378
2379const DEVICE_SESSION_ARG_FIELDS: &[&str] = &["session_id",
2380                                             "team_member_id"];
2381impl DeviceSessionArg {
2382    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2383        map: V,
2384    ) -> Result<DeviceSessionArg, V::Error> {
2385        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2386    }
2387
2388    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2389        mut map: V,
2390        optional: bool,
2391    ) -> Result<Option<DeviceSessionArg>, V::Error> {
2392        let mut field_session_id = None;
2393        let mut field_team_member_id = None;
2394        let mut nothing = true;
2395        while let Some(key) = map.next_key::<&str>()? {
2396            nothing = false;
2397            match key {
2398                "session_id" => {
2399                    if field_session_id.is_some() {
2400                        return Err(::serde::de::Error::duplicate_field("session_id"));
2401                    }
2402                    field_session_id = Some(map.next_value()?);
2403                }
2404                "team_member_id" => {
2405                    if field_team_member_id.is_some() {
2406                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
2407                    }
2408                    field_team_member_id = Some(map.next_value()?);
2409                }
2410                _ => {
2411                    // unknown field allowed and ignored
2412                    map.next_value::<::serde_json::Value>()?;
2413                }
2414            }
2415        }
2416        if optional && nothing {
2417            return Ok(None);
2418        }
2419        let result = DeviceSessionArg {
2420            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
2421            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
2422        };
2423        Ok(Some(result))
2424    }
2425
2426    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2427        &self,
2428        s: &mut S::SerializeStruct,
2429    ) -> Result<(), S::Error> {
2430        use serde::ser::SerializeStruct;
2431        s.serialize_field("session_id", &self.session_id)?;
2432        s.serialize_field("team_member_id", &self.team_member_id)?;
2433        Ok(())
2434    }
2435}
2436
2437impl<'de> ::serde::de::Deserialize<'de> for DeviceSessionArg {
2438    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2439        // struct deserializer
2440        use serde::de::{MapAccess, Visitor};
2441        struct StructVisitor;
2442        impl<'de> Visitor<'de> for StructVisitor {
2443            type Value = DeviceSessionArg;
2444            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2445                f.write_str("a DeviceSessionArg struct")
2446            }
2447            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2448                DeviceSessionArg::internal_deserialize(map)
2449            }
2450        }
2451        deserializer.deserialize_struct("DeviceSessionArg", DEVICE_SESSION_ARG_FIELDS, StructVisitor)
2452    }
2453}
2454
2455impl ::serde::ser::Serialize for DeviceSessionArg {
2456    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2457        // struct serializer
2458        use serde::ser::SerializeStruct;
2459        let mut s = serializer.serialize_struct("DeviceSessionArg", 2)?;
2460        self.internal_serialize::<S>(&mut s)?;
2461        s.end()
2462    }
2463}
2464
2465/// Each of the items is an array of values, one value per day. The value is the number of devices
2466/// active within a time window, ending with that day. If there is no data for a day, then the value
2467/// will be None.
2468#[derive(Debug, Clone, PartialEq, Eq)]
2469#[non_exhaustive] // structs may have more fields added in the future.
2470pub struct DevicesActive {
2471    /// Array of number of linked windows (desktop) clients with activity.
2472    pub windows: NumberPerDay,
2473    /// Array of number of linked mac (desktop) clients with activity.
2474    pub macos: NumberPerDay,
2475    /// Array of number of linked linus (desktop) clients with activity.
2476    pub linux: NumberPerDay,
2477    /// Array of number of linked ios devices with activity.
2478    pub ios: NumberPerDay,
2479    /// Array of number of linked android devices with activity.
2480    pub android: NumberPerDay,
2481    /// Array of number of other linked devices (blackberry, windows phone, etc) with activity.
2482    pub other: NumberPerDay,
2483    /// Array of total number of linked clients with activity.
2484    pub total: NumberPerDay,
2485}
2486
2487impl DevicesActive {
2488    pub fn new(
2489        windows: NumberPerDay,
2490        macos: NumberPerDay,
2491        linux: NumberPerDay,
2492        ios: NumberPerDay,
2493        android: NumberPerDay,
2494        other: NumberPerDay,
2495        total: NumberPerDay,
2496    ) -> Self {
2497        DevicesActive {
2498            windows,
2499            macos,
2500            linux,
2501            ios,
2502            android,
2503            other,
2504            total,
2505        }
2506    }
2507}
2508
2509const DEVICES_ACTIVE_FIELDS: &[&str] = &["windows",
2510                                         "macos",
2511                                         "linux",
2512                                         "ios",
2513                                         "android",
2514                                         "other",
2515                                         "total"];
2516impl DevicesActive {
2517    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2518        map: V,
2519    ) -> Result<DevicesActive, V::Error> {
2520        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2521    }
2522
2523    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2524        mut map: V,
2525        optional: bool,
2526    ) -> Result<Option<DevicesActive>, V::Error> {
2527        let mut field_windows = None;
2528        let mut field_macos = None;
2529        let mut field_linux = None;
2530        let mut field_ios = None;
2531        let mut field_android = None;
2532        let mut field_other = None;
2533        let mut field_total = None;
2534        let mut nothing = true;
2535        while let Some(key) = map.next_key::<&str>()? {
2536            nothing = false;
2537            match key {
2538                "windows" => {
2539                    if field_windows.is_some() {
2540                        return Err(::serde::de::Error::duplicate_field("windows"));
2541                    }
2542                    field_windows = Some(map.next_value()?);
2543                }
2544                "macos" => {
2545                    if field_macos.is_some() {
2546                        return Err(::serde::de::Error::duplicate_field("macos"));
2547                    }
2548                    field_macos = Some(map.next_value()?);
2549                }
2550                "linux" => {
2551                    if field_linux.is_some() {
2552                        return Err(::serde::de::Error::duplicate_field("linux"));
2553                    }
2554                    field_linux = Some(map.next_value()?);
2555                }
2556                "ios" => {
2557                    if field_ios.is_some() {
2558                        return Err(::serde::de::Error::duplicate_field("ios"));
2559                    }
2560                    field_ios = Some(map.next_value()?);
2561                }
2562                "android" => {
2563                    if field_android.is_some() {
2564                        return Err(::serde::de::Error::duplicate_field("android"));
2565                    }
2566                    field_android = Some(map.next_value()?);
2567                }
2568                "other" => {
2569                    if field_other.is_some() {
2570                        return Err(::serde::de::Error::duplicate_field("other"));
2571                    }
2572                    field_other = Some(map.next_value()?);
2573                }
2574                "total" => {
2575                    if field_total.is_some() {
2576                        return Err(::serde::de::Error::duplicate_field("total"));
2577                    }
2578                    field_total = Some(map.next_value()?);
2579                }
2580                _ => {
2581                    // unknown field allowed and ignored
2582                    map.next_value::<::serde_json::Value>()?;
2583                }
2584            }
2585        }
2586        if optional && nothing {
2587            return Ok(None);
2588        }
2589        let result = DevicesActive {
2590            windows: field_windows.ok_or_else(|| ::serde::de::Error::missing_field("windows"))?,
2591            macos: field_macos.ok_or_else(|| ::serde::de::Error::missing_field("macos"))?,
2592            linux: field_linux.ok_or_else(|| ::serde::de::Error::missing_field("linux"))?,
2593            ios: field_ios.ok_or_else(|| ::serde::de::Error::missing_field("ios"))?,
2594            android: field_android.ok_or_else(|| ::serde::de::Error::missing_field("android"))?,
2595            other: field_other.ok_or_else(|| ::serde::de::Error::missing_field("other"))?,
2596            total: field_total.ok_or_else(|| ::serde::de::Error::missing_field("total"))?,
2597        };
2598        Ok(Some(result))
2599    }
2600
2601    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2602        &self,
2603        s: &mut S::SerializeStruct,
2604    ) -> Result<(), S::Error> {
2605        use serde::ser::SerializeStruct;
2606        s.serialize_field("windows", &self.windows)?;
2607        s.serialize_field("macos", &self.macos)?;
2608        s.serialize_field("linux", &self.linux)?;
2609        s.serialize_field("ios", &self.ios)?;
2610        s.serialize_field("android", &self.android)?;
2611        s.serialize_field("other", &self.other)?;
2612        s.serialize_field("total", &self.total)?;
2613        Ok(())
2614    }
2615}
2616
2617impl<'de> ::serde::de::Deserialize<'de> for DevicesActive {
2618    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2619        // struct deserializer
2620        use serde::de::{MapAccess, Visitor};
2621        struct StructVisitor;
2622        impl<'de> Visitor<'de> for StructVisitor {
2623            type Value = DevicesActive;
2624            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2625                f.write_str("a DevicesActive struct")
2626            }
2627            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2628                DevicesActive::internal_deserialize(map)
2629            }
2630        }
2631        deserializer.deserialize_struct("DevicesActive", DEVICES_ACTIVE_FIELDS, StructVisitor)
2632    }
2633}
2634
2635impl ::serde::ser::Serialize for DevicesActive {
2636    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2637        // struct serializer
2638        use serde::ser::SerializeStruct;
2639        let mut s = serializer.serialize_struct("DevicesActive", 7)?;
2640        self.internal_serialize::<S>(&mut s)?;
2641        s.end()
2642    }
2643}
2644
2645/// Excluded users list argument.
2646#[derive(Debug, Clone, PartialEq, Eq)]
2647#[non_exhaustive] // structs may have more fields added in the future.
2648pub struct ExcludedUsersListArg {
2649    /// Number of results to return per call.
2650    pub limit: u32,
2651}
2652
2653impl Default for ExcludedUsersListArg {
2654    fn default() -> Self {
2655        ExcludedUsersListArg {
2656            limit: 1000,
2657        }
2658    }
2659}
2660
2661impl ExcludedUsersListArg {
2662    pub fn with_limit(mut self, value: u32) -> Self {
2663        self.limit = value;
2664        self
2665    }
2666}
2667
2668const EXCLUDED_USERS_LIST_ARG_FIELDS: &[&str] = &["limit"];
2669impl ExcludedUsersListArg {
2670    // no _opt deserializer
2671    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2672        mut map: V,
2673    ) -> Result<ExcludedUsersListArg, V::Error> {
2674        let mut field_limit = None;
2675        while let Some(key) = map.next_key::<&str>()? {
2676            match key {
2677                "limit" => {
2678                    if field_limit.is_some() {
2679                        return Err(::serde::de::Error::duplicate_field("limit"));
2680                    }
2681                    field_limit = Some(map.next_value()?);
2682                }
2683                _ => {
2684                    // unknown field allowed and ignored
2685                    map.next_value::<::serde_json::Value>()?;
2686                }
2687            }
2688        }
2689        let result = ExcludedUsersListArg {
2690            limit: field_limit.unwrap_or(1000),
2691        };
2692        Ok(result)
2693    }
2694
2695    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2696        &self,
2697        s: &mut S::SerializeStruct,
2698    ) -> Result<(), S::Error> {
2699        use serde::ser::SerializeStruct;
2700        if self.limit != 1000 {
2701            s.serialize_field("limit", &self.limit)?;
2702        }
2703        Ok(())
2704    }
2705}
2706
2707impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListArg {
2708    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2709        // struct deserializer
2710        use serde::de::{MapAccess, Visitor};
2711        struct StructVisitor;
2712        impl<'de> Visitor<'de> for StructVisitor {
2713            type Value = ExcludedUsersListArg;
2714            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2715                f.write_str("a ExcludedUsersListArg struct")
2716            }
2717            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2718                ExcludedUsersListArg::internal_deserialize(map)
2719            }
2720        }
2721        deserializer.deserialize_struct("ExcludedUsersListArg", EXCLUDED_USERS_LIST_ARG_FIELDS, StructVisitor)
2722    }
2723}
2724
2725impl ::serde::ser::Serialize for ExcludedUsersListArg {
2726    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2727        // struct serializer
2728        use serde::ser::SerializeStruct;
2729        let mut s = serializer.serialize_struct("ExcludedUsersListArg", 1)?;
2730        self.internal_serialize::<S>(&mut s)?;
2731        s.end()
2732    }
2733}
2734
2735/// Excluded users list continue argument.
2736#[derive(Debug, Clone, PartialEq, Eq)]
2737#[non_exhaustive] // structs may have more fields added in the future.
2738pub struct ExcludedUsersListContinueArg {
2739    /// Indicates from what point to get the next set of users.
2740    pub cursor: String,
2741}
2742
2743impl ExcludedUsersListContinueArg {
2744    pub fn new(cursor: String) -> Self {
2745        ExcludedUsersListContinueArg {
2746            cursor,
2747        }
2748    }
2749}
2750
2751const EXCLUDED_USERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
2752impl ExcludedUsersListContinueArg {
2753    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2754        map: V,
2755    ) -> Result<ExcludedUsersListContinueArg, V::Error> {
2756        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2757    }
2758
2759    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2760        mut map: V,
2761        optional: bool,
2762    ) -> Result<Option<ExcludedUsersListContinueArg>, V::Error> {
2763        let mut field_cursor = None;
2764        let mut nothing = true;
2765        while let Some(key) = map.next_key::<&str>()? {
2766            nothing = false;
2767            match key {
2768                "cursor" => {
2769                    if field_cursor.is_some() {
2770                        return Err(::serde::de::Error::duplicate_field("cursor"));
2771                    }
2772                    field_cursor = Some(map.next_value()?);
2773                }
2774                _ => {
2775                    // unknown field allowed and ignored
2776                    map.next_value::<::serde_json::Value>()?;
2777                }
2778            }
2779        }
2780        if optional && nothing {
2781            return Ok(None);
2782        }
2783        let result = ExcludedUsersListContinueArg {
2784            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2785        };
2786        Ok(Some(result))
2787    }
2788
2789    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2790        &self,
2791        s: &mut S::SerializeStruct,
2792    ) -> Result<(), S::Error> {
2793        use serde::ser::SerializeStruct;
2794        s.serialize_field("cursor", &self.cursor)?;
2795        Ok(())
2796    }
2797}
2798
2799impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListContinueArg {
2800    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2801        // struct deserializer
2802        use serde::de::{MapAccess, Visitor};
2803        struct StructVisitor;
2804        impl<'de> Visitor<'de> for StructVisitor {
2805            type Value = ExcludedUsersListContinueArg;
2806            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2807                f.write_str("a ExcludedUsersListContinueArg struct")
2808            }
2809            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2810                ExcludedUsersListContinueArg::internal_deserialize(map)
2811            }
2812        }
2813        deserializer.deserialize_struct("ExcludedUsersListContinueArg", EXCLUDED_USERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
2814    }
2815}
2816
2817impl ::serde::ser::Serialize for ExcludedUsersListContinueArg {
2818    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2819        // struct serializer
2820        use serde::ser::SerializeStruct;
2821        let mut s = serializer.serialize_struct("ExcludedUsersListContinueArg", 1)?;
2822        self.internal_serialize::<S>(&mut s)?;
2823        s.end()
2824    }
2825}
2826
2827/// Excluded users list continue error.
2828#[derive(Debug, Clone, PartialEq, Eq)]
2829#[non_exhaustive] // variants may be added in the future
2830pub enum ExcludedUsersListContinueError {
2831    /// The cursor is invalid.
2832    InvalidCursor,
2833    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2834    /// typically indicates that this SDK version is out of date.
2835    Other,
2836}
2837
2838impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListContinueError {
2839    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2840        // union deserializer
2841        use serde::de::{self, MapAccess, Visitor};
2842        struct EnumVisitor;
2843        impl<'de> Visitor<'de> for EnumVisitor {
2844            type Value = ExcludedUsersListContinueError;
2845            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2846                f.write_str("a ExcludedUsersListContinueError structure")
2847            }
2848            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2849                let tag: &str = match map.next_key()? {
2850                    Some(".tag") => map.next_value()?,
2851                    _ => return Err(de::Error::missing_field(".tag"))
2852                };
2853                let value = match tag {
2854                    "invalid_cursor" => ExcludedUsersListContinueError::InvalidCursor,
2855                    _ => ExcludedUsersListContinueError::Other,
2856                };
2857                crate::eat_json_fields(&mut map)?;
2858                Ok(value)
2859            }
2860        }
2861        const VARIANTS: &[&str] = &["invalid_cursor",
2862                                    "other"];
2863        deserializer.deserialize_struct("ExcludedUsersListContinueError", VARIANTS, EnumVisitor)
2864    }
2865}
2866
2867impl ::serde::ser::Serialize for ExcludedUsersListContinueError {
2868    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2869        // union serializer
2870        use serde::ser::SerializeStruct;
2871        match self {
2872            ExcludedUsersListContinueError::InvalidCursor => {
2873                // unit
2874                let mut s = serializer.serialize_struct("ExcludedUsersListContinueError", 1)?;
2875                s.serialize_field(".tag", "invalid_cursor")?;
2876                s.end()
2877            }
2878            ExcludedUsersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2879        }
2880    }
2881}
2882
2883impl ::std::error::Error for ExcludedUsersListContinueError {
2884}
2885
2886impl ::std::fmt::Display for ExcludedUsersListContinueError {
2887    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2888        match self {
2889            ExcludedUsersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
2890            _ => write!(f, "{:?}", *self),
2891        }
2892    }
2893}
2894
2895/// Excluded users list error.
2896#[derive(Debug, Clone, PartialEq, Eq)]
2897#[non_exhaustive] // variants may be added in the future
2898pub enum ExcludedUsersListError {
2899    /// An error occurred.
2900    ListError,
2901    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2902    /// typically indicates that this SDK version is out of date.
2903    Other,
2904}
2905
2906impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListError {
2907    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2908        // union deserializer
2909        use serde::de::{self, MapAccess, Visitor};
2910        struct EnumVisitor;
2911        impl<'de> Visitor<'de> for EnumVisitor {
2912            type Value = ExcludedUsersListError;
2913            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2914                f.write_str("a ExcludedUsersListError structure")
2915            }
2916            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2917                let tag: &str = match map.next_key()? {
2918                    Some(".tag") => map.next_value()?,
2919                    _ => return Err(de::Error::missing_field(".tag"))
2920                };
2921                let value = match tag {
2922                    "list_error" => ExcludedUsersListError::ListError,
2923                    _ => ExcludedUsersListError::Other,
2924                };
2925                crate::eat_json_fields(&mut map)?;
2926                Ok(value)
2927            }
2928        }
2929        const VARIANTS: &[&str] = &["list_error",
2930                                    "other"];
2931        deserializer.deserialize_struct("ExcludedUsersListError", VARIANTS, EnumVisitor)
2932    }
2933}
2934
2935impl ::serde::ser::Serialize for ExcludedUsersListError {
2936    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2937        // union serializer
2938        use serde::ser::SerializeStruct;
2939        match self {
2940            ExcludedUsersListError::ListError => {
2941                // unit
2942                let mut s = serializer.serialize_struct("ExcludedUsersListError", 1)?;
2943                s.serialize_field(".tag", "list_error")?;
2944                s.end()
2945            }
2946            ExcludedUsersListError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2947        }
2948    }
2949}
2950
2951impl ::std::error::Error for ExcludedUsersListError {
2952}
2953
2954impl ::std::fmt::Display for ExcludedUsersListError {
2955    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2956        match self {
2957            ExcludedUsersListError::ListError => f.write_str("An error occurred."),
2958            _ => write!(f, "{:?}", *self),
2959        }
2960    }
2961}
2962
2963/// Excluded users list result.
2964#[derive(Debug, Clone, PartialEq, Eq)]
2965#[non_exhaustive] // structs may have more fields added in the future.
2966pub struct ExcludedUsersListResult {
2967    pub users: Vec<MemberProfile>,
2968    /// Is true if there are additional excluded users that have not been returned yet. An
2969    /// additional call to
2970    /// [`member_space_limits_excluded_users_list_continue()`](crate::team::member_space_limits_excluded_users_list_continue)
2971    /// can retrieve them.
2972    pub has_more: bool,
2973    /// Pass the cursor into
2974    /// [`member_space_limits_excluded_users_list_continue()`](crate::team::member_space_limits_excluded_users_list_continue)
2975    /// to obtain additional excluded users.
2976    pub cursor: Option<String>,
2977}
2978
2979impl ExcludedUsersListResult {
2980    pub fn new(users: Vec<MemberProfile>, has_more: bool) -> Self {
2981        ExcludedUsersListResult {
2982            users,
2983            has_more,
2984            cursor: None,
2985        }
2986    }
2987
2988    pub fn with_cursor(mut self, value: String) -> Self {
2989        self.cursor = Some(value);
2990        self
2991    }
2992}
2993
2994const EXCLUDED_USERS_LIST_RESULT_FIELDS: &[&str] = &["users",
2995                                                     "has_more",
2996                                                     "cursor"];
2997impl ExcludedUsersListResult {
2998    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2999        map: V,
3000    ) -> Result<ExcludedUsersListResult, V::Error> {
3001        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3002    }
3003
3004    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3005        mut map: V,
3006        optional: bool,
3007    ) -> Result<Option<ExcludedUsersListResult>, V::Error> {
3008        let mut field_users = None;
3009        let mut field_has_more = None;
3010        let mut field_cursor = None;
3011        let mut nothing = true;
3012        while let Some(key) = map.next_key::<&str>()? {
3013            nothing = false;
3014            match key {
3015                "users" => {
3016                    if field_users.is_some() {
3017                        return Err(::serde::de::Error::duplicate_field("users"));
3018                    }
3019                    field_users = Some(map.next_value()?);
3020                }
3021                "has_more" => {
3022                    if field_has_more.is_some() {
3023                        return Err(::serde::de::Error::duplicate_field("has_more"));
3024                    }
3025                    field_has_more = Some(map.next_value()?);
3026                }
3027                "cursor" => {
3028                    if field_cursor.is_some() {
3029                        return Err(::serde::de::Error::duplicate_field("cursor"));
3030                    }
3031                    field_cursor = Some(map.next_value()?);
3032                }
3033                _ => {
3034                    // unknown field allowed and ignored
3035                    map.next_value::<::serde_json::Value>()?;
3036                }
3037            }
3038        }
3039        if optional && nothing {
3040            return Ok(None);
3041        }
3042        let result = ExcludedUsersListResult {
3043            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
3044            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
3045            cursor: field_cursor.and_then(Option::flatten),
3046        };
3047        Ok(Some(result))
3048    }
3049
3050    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3051        &self,
3052        s: &mut S::SerializeStruct,
3053    ) -> Result<(), S::Error> {
3054        use serde::ser::SerializeStruct;
3055        s.serialize_field("users", &self.users)?;
3056        s.serialize_field("has_more", &self.has_more)?;
3057        if let Some(val) = &self.cursor {
3058            s.serialize_field("cursor", val)?;
3059        }
3060        Ok(())
3061    }
3062}
3063
3064impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersListResult {
3065    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3066        // struct deserializer
3067        use serde::de::{MapAccess, Visitor};
3068        struct StructVisitor;
3069        impl<'de> Visitor<'de> for StructVisitor {
3070            type Value = ExcludedUsersListResult;
3071            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3072                f.write_str("a ExcludedUsersListResult struct")
3073            }
3074            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3075                ExcludedUsersListResult::internal_deserialize(map)
3076            }
3077        }
3078        deserializer.deserialize_struct("ExcludedUsersListResult", EXCLUDED_USERS_LIST_RESULT_FIELDS, StructVisitor)
3079    }
3080}
3081
3082impl ::serde::ser::Serialize for ExcludedUsersListResult {
3083    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3084        // struct serializer
3085        use serde::ser::SerializeStruct;
3086        let mut s = serializer.serialize_struct("ExcludedUsersListResult", 3)?;
3087        self.internal_serialize::<S>(&mut s)?;
3088        s.end()
3089    }
3090}
3091
3092/// Argument of excluded users update operation. Should include a list of users to add/remove
3093/// (according to endpoint), Maximum size of the list is 1000 users.
3094#[derive(Debug, Clone, PartialEq, Eq, Default)]
3095#[non_exhaustive] // structs may have more fields added in the future.
3096pub struct ExcludedUsersUpdateArg {
3097    /// List of users to be added/removed.
3098    pub users: Option<Vec<UserSelectorArg>>,
3099}
3100
3101impl ExcludedUsersUpdateArg {
3102    pub fn with_users(mut self, value: Vec<UserSelectorArg>) -> Self {
3103        self.users = Some(value);
3104        self
3105    }
3106}
3107
3108const EXCLUDED_USERS_UPDATE_ARG_FIELDS: &[&str] = &["users"];
3109impl ExcludedUsersUpdateArg {
3110    // no _opt deserializer
3111    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3112        mut map: V,
3113    ) -> Result<ExcludedUsersUpdateArg, V::Error> {
3114        let mut field_users = None;
3115        while let Some(key) = map.next_key::<&str>()? {
3116            match key {
3117                "users" => {
3118                    if field_users.is_some() {
3119                        return Err(::serde::de::Error::duplicate_field("users"));
3120                    }
3121                    field_users = Some(map.next_value()?);
3122                }
3123                _ => {
3124                    // unknown field allowed and ignored
3125                    map.next_value::<::serde_json::Value>()?;
3126                }
3127            }
3128        }
3129        let result = ExcludedUsersUpdateArg {
3130            users: field_users.and_then(Option::flatten),
3131        };
3132        Ok(result)
3133    }
3134
3135    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3136        &self,
3137        s: &mut S::SerializeStruct,
3138    ) -> Result<(), S::Error> {
3139        use serde::ser::SerializeStruct;
3140        if let Some(val) = &self.users {
3141            s.serialize_field("users", val)?;
3142        }
3143        Ok(())
3144    }
3145}
3146
3147impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateArg {
3148    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3149        // struct deserializer
3150        use serde::de::{MapAccess, Visitor};
3151        struct StructVisitor;
3152        impl<'de> Visitor<'de> for StructVisitor {
3153            type Value = ExcludedUsersUpdateArg;
3154            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3155                f.write_str("a ExcludedUsersUpdateArg struct")
3156            }
3157            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3158                ExcludedUsersUpdateArg::internal_deserialize(map)
3159            }
3160        }
3161        deserializer.deserialize_struct("ExcludedUsersUpdateArg", EXCLUDED_USERS_UPDATE_ARG_FIELDS, StructVisitor)
3162    }
3163}
3164
3165impl ::serde::ser::Serialize for ExcludedUsersUpdateArg {
3166    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3167        // struct serializer
3168        use serde::ser::SerializeStruct;
3169        let mut s = serializer.serialize_struct("ExcludedUsersUpdateArg", 1)?;
3170        self.internal_serialize::<S>(&mut s)?;
3171        s.end()
3172    }
3173}
3174
3175/// Excluded users update error.
3176#[derive(Debug, Clone, PartialEq, Eq)]
3177#[non_exhaustive] // variants may be added in the future
3178pub enum ExcludedUsersUpdateError {
3179    /// At least one of the users is not part of your team.
3180    UsersNotInTeam,
3181    /// A maximum of 1000 users for each of addition/removal can be supplied.
3182    TooManyUsers,
3183    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3184    /// typically indicates that this SDK version is out of date.
3185    Other,
3186}
3187
3188impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateError {
3189    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3190        // union deserializer
3191        use serde::de::{self, MapAccess, Visitor};
3192        struct EnumVisitor;
3193        impl<'de> Visitor<'de> for EnumVisitor {
3194            type Value = ExcludedUsersUpdateError;
3195            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3196                f.write_str("a ExcludedUsersUpdateError structure")
3197            }
3198            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3199                let tag: &str = match map.next_key()? {
3200                    Some(".tag") => map.next_value()?,
3201                    _ => return Err(de::Error::missing_field(".tag"))
3202                };
3203                let value = match tag {
3204                    "users_not_in_team" => ExcludedUsersUpdateError::UsersNotInTeam,
3205                    "too_many_users" => ExcludedUsersUpdateError::TooManyUsers,
3206                    _ => ExcludedUsersUpdateError::Other,
3207                };
3208                crate::eat_json_fields(&mut map)?;
3209                Ok(value)
3210            }
3211        }
3212        const VARIANTS: &[&str] = &["users_not_in_team",
3213                                    "too_many_users",
3214                                    "other"];
3215        deserializer.deserialize_struct("ExcludedUsersUpdateError", VARIANTS, EnumVisitor)
3216    }
3217}
3218
3219impl ::serde::ser::Serialize for ExcludedUsersUpdateError {
3220    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3221        // union serializer
3222        use serde::ser::SerializeStruct;
3223        match self {
3224            ExcludedUsersUpdateError::UsersNotInTeam => {
3225                // unit
3226                let mut s = serializer.serialize_struct("ExcludedUsersUpdateError", 1)?;
3227                s.serialize_field(".tag", "users_not_in_team")?;
3228                s.end()
3229            }
3230            ExcludedUsersUpdateError::TooManyUsers => {
3231                // unit
3232                let mut s = serializer.serialize_struct("ExcludedUsersUpdateError", 1)?;
3233                s.serialize_field(".tag", "too_many_users")?;
3234                s.end()
3235            }
3236            ExcludedUsersUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3237        }
3238    }
3239}
3240
3241impl ::std::error::Error for ExcludedUsersUpdateError {
3242}
3243
3244impl ::std::fmt::Display for ExcludedUsersUpdateError {
3245    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3246        match self {
3247            ExcludedUsersUpdateError::UsersNotInTeam => f.write_str("At least one of the users is not part of your team."),
3248            ExcludedUsersUpdateError::TooManyUsers => f.write_str("A maximum of 1000 users for each of addition/removal can be supplied."),
3249            _ => write!(f, "{:?}", *self),
3250        }
3251    }
3252}
3253
3254/// Excluded users update result.
3255#[derive(Debug, Clone, PartialEq, Eq)]
3256#[non_exhaustive] // structs may have more fields added in the future.
3257pub struct ExcludedUsersUpdateResult {
3258    /// Update status.
3259    pub status: ExcludedUsersUpdateStatus,
3260}
3261
3262impl ExcludedUsersUpdateResult {
3263    pub fn new(status: ExcludedUsersUpdateStatus) -> Self {
3264        ExcludedUsersUpdateResult {
3265            status,
3266        }
3267    }
3268}
3269
3270const EXCLUDED_USERS_UPDATE_RESULT_FIELDS: &[&str] = &["status"];
3271impl ExcludedUsersUpdateResult {
3272    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3273        map: V,
3274    ) -> Result<ExcludedUsersUpdateResult, V::Error> {
3275        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3276    }
3277
3278    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3279        mut map: V,
3280        optional: bool,
3281    ) -> Result<Option<ExcludedUsersUpdateResult>, V::Error> {
3282        let mut field_status = None;
3283        let mut nothing = true;
3284        while let Some(key) = map.next_key::<&str>()? {
3285            nothing = false;
3286            match key {
3287                "status" => {
3288                    if field_status.is_some() {
3289                        return Err(::serde::de::Error::duplicate_field("status"));
3290                    }
3291                    field_status = Some(map.next_value()?);
3292                }
3293                _ => {
3294                    // unknown field allowed and ignored
3295                    map.next_value::<::serde_json::Value>()?;
3296                }
3297            }
3298        }
3299        if optional && nothing {
3300            return Ok(None);
3301        }
3302        let result = ExcludedUsersUpdateResult {
3303            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
3304        };
3305        Ok(Some(result))
3306    }
3307
3308    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3309        &self,
3310        s: &mut S::SerializeStruct,
3311    ) -> Result<(), S::Error> {
3312        use serde::ser::SerializeStruct;
3313        s.serialize_field("status", &self.status)?;
3314        Ok(())
3315    }
3316}
3317
3318impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateResult {
3319    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3320        // struct deserializer
3321        use serde::de::{MapAccess, Visitor};
3322        struct StructVisitor;
3323        impl<'de> Visitor<'de> for StructVisitor {
3324            type Value = ExcludedUsersUpdateResult;
3325            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3326                f.write_str("a ExcludedUsersUpdateResult struct")
3327            }
3328            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3329                ExcludedUsersUpdateResult::internal_deserialize(map)
3330            }
3331        }
3332        deserializer.deserialize_struct("ExcludedUsersUpdateResult", EXCLUDED_USERS_UPDATE_RESULT_FIELDS, StructVisitor)
3333    }
3334}
3335
3336impl ::serde::ser::Serialize for ExcludedUsersUpdateResult {
3337    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3338        // struct serializer
3339        use serde::ser::SerializeStruct;
3340        let mut s = serializer.serialize_struct("ExcludedUsersUpdateResult", 1)?;
3341        self.internal_serialize::<S>(&mut s)?;
3342        s.end()
3343    }
3344}
3345
3346/// Excluded users update operation status.
3347#[derive(Debug, Clone, PartialEq, Eq)]
3348#[non_exhaustive] // variants may be added in the future
3349pub enum ExcludedUsersUpdateStatus {
3350    /// Update successful.
3351    Success,
3352    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3353    /// typically indicates that this SDK version is out of date.
3354    Other,
3355}
3356
3357impl<'de> ::serde::de::Deserialize<'de> for ExcludedUsersUpdateStatus {
3358    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3359        // union deserializer
3360        use serde::de::{self, MapAccess, Visitor};
3361        struct EnumVisitor;
3362        impl<'de> Visitor<'de> for EnumVisitor {
3363            type Value = ExcludedUsersUpdateStatus;
3364            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3365                f.write_str("a ExcludedUsersUpdateStatus structure")
3366            }
3367            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3368                let tag: &str = match map.next_key()? {
3369                    Some(".tag") => map.next_value()?,
3370                    _ => return Err(de::Error::missing_field(".tag"))
3371                };
3372                let value = match tag {
3373                    "success" => ExcludedUsersUpdateStatus::Success,
3374                    _ => ExcludedUsersUpdateStatus::Other,
3375                };
3376                crate::eat_json_fields(&mut map)?;
3377                Ok(value)
3378            }
3379        }
3380        const VARIANTS: &[&str] = &["success",
3381                                    "other"];
3382        deserializer.deserialize_struct("ExcludedUsersUpdateStatus", VARIANTS, EnumVisitor)
3383    }
3384}
3385
3386impl ::serde::ser::Serialize for ExcludedUsersUpdateStatus {
3387    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3388        // union serializer
3389        use serde::ser::SerializeStruct;
3390        match self {
3391            ExcludedUsersUpdateStatus::Success => {
3392                // unit
3393                let mut s = serializer.serialize_struct("ExcludedUsersUpdateStatus", 1)?;
3394                s.serialize_field(".tag", "success")?;
3395                s.end()
3396            }
3397            ExcludedUsersUpdateStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3398        }
3399    }
3400}
3401
3402/// A set of features that a Dropbox Business account may support.
3403#[derive(Debug, Clone, PartialEq, Eq)]
3404#[non_exhaustive] // variants may be added in the future
3405pub enum Feature {
3406    /// The number of upload API calls allowed per month.
3407    UploadApiRateLimit,
3408    /// Does this team have a shared team root.
3409    HasTeamSharedDropbox,
3410    /// Does this team have file events.
3411    HasTeamFileEvents,
3412    /// Does this team have team selective sync enabled.
3413    HasTeamSelectiveSync,
3414    /// Does this team have team member folder.
3415    HasDistinctMemberHomes,
3416    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3417    /// typically indicates that this SDK version is out of date.
3418    Other,
3419}
3420
3421impl<'de> ::serde::de::Deserialize<'de> for Feature {
3422    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3423        // union deserializer
3424        use serde::de::{self, MapAccess, Visitor};
3425        struct EnumVisitor;
3426        impl<'de> Visitor<'de> for EnumVisitor {
3427            type Value = Feature;
3428            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3429                f.write_str("a Feature structure")
3430            }
3431            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3432                let tag: &str = match map.next_key()? {
3433                    Some(".tag") => map.next_value()?,
3434                    _ => return Err(de::Error::missing_field(".tag"))
3435                };
3436                let value = match tag {
3437                    "upload_api_rate_limit" => Feature::UploadApiRateLimit,
3438                    "has_team_shared_dropbox" => Feature::HasTeamSharedDropbox,
3439                    "has_team_file_events" => Feature::HasTeamFileEvents,
3440                    "has_team_selective_sync" => Feature::HasTeamSelectiveSync,
3441                    "has_distinct_member_homes" => Feature::HasDistinctMemberHomes,
3442                    _ => Feature::Other,
3443                };
3444                crate::eat_json_fields(&mut map)?;
3445                Ok(value)
3446            }
3447        }
3448        const VARIANTS: &[&str] = &["upload_api_rate_limit",
3449                                    "has_team_shared_dropbox",
3450                                    "has_team_file_events",
3451                                    "has_team_selective_sync",
3452                                    "has_distinct_member_homes",
3453                                    "other"];
3454        deserializer.deserialize_struct("Feature", VARIANTS, EnumVisitor)
3455    }
3456}
3457
3458impl ::serde::ser::Serialize for Feature {
3459    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3460        // union serializer
3461        use serde::ser::SerializeStruct;
3462        match self {
3463            Feature::UploadApiRateLimit => {
3464                // unit
3465                let mut s = serializer.serialize_struct("Feature", 1)?;
3466                s.serialize_field(".tag", "upload_api_rate_limit")?;
3467                s.end()
3468            }
3469            Feature::HasTeamSharedDropbox => {
3470                // unit
3471                let mut s = serializer.serialize_struct("Feature", 1)?;
3472                s.serialize_field(".tag", "has_team_shared_dropbox")?;
3473                s.end()
3474            }
3475            Feature::HasTeamFileEvents => {
3476                // unit
3477                let mut s = serializer.serialize_struct("Feature", 1)?;
3478                s.serialize_field(".tag", "has_team_file_events")?;
3479                s.end()
3480            }
3481            Feature::HasTeamSelectiveSync => {
3482                // unit
3483                let mut s = serializer.serialize_struct("Feature", 1)?;
3484                s.serialize_field(".tag", "has_team_selective_sync")?;
3485                s.end()
3486            }
3487            Feature::HasDistinctMemberHomes => {
3488                // unit
3489                let mut s = serializer.serialize_struct("Feature", 1)?;
3490                s.serialize_field(".tag", "has_distinct_member_homes")?;
3491                s.end()
3492            }
3493            Feature::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3494        }
3495    }
3496}
3497
3498/// The values correspond to entries in [`Feature`]. You may get different value according to your
3499/// Dropbox Business plan.
3500#[derive(Debug, Clone, PartialEq, Eq)]
3501#[non_exhaustive] // variants may be added in the future
3502pub enum FeatureValue {
3503    UploadApiRateLimit(UploadApiRateLimitValue),
3504    HasTeamSharedDropbox(HasTeamSharedDropboxValue),
3505    HasTeamFileEvents(HasTeamFileEventsValue),
3506    HasTeamSelectiveSync(HasTeamSelectiveSyncValue),
3507    HasDistinctMemberHomes(HasDistinctMemberHomesValue),
3508    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3509    /// typically indicates that this SDK version is out of date.
3510    Other,
3511}
3512
3513impl<'de> ::serde::de::Deserialize<'de> for FeatureValue {
3514    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3515        // union deserializer
3516        use serde::de::{self, MapAccess, Visitor};
3517        struct EnumVisitor;
3518        impl<'de> Visitor<'de> for EnumVisitor {
3519            type Value = FeatureValue;
3520            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3521                f.write_str("a FeatureValue structure")
3522            }
3523            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3524                let tag: &str = match map.next_key()? {
3525                    Some(".tag") => map.next_value()?,
3526                    _ => return Err(de::Error::missing_field(".tag"))
3527                };
3528                let value = match tag {
3529                    "upload_api_rate_limit" => {
3530                        match map.next_key()? {
3531                            Some("upload_api_rate_limit") => FeatureValue::UploadApiRateLimit(map.next_value()?),
3532                            None => return Err(de::Error::missing_field("upload_api_rate_limit")),
3533                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3534                        }
3535                    }
3536                    "has_team_shared_dropbox" => {
3537                        match map.next_key()? {
3538                            Some("has_team_shared_dropbox") => FeatureValue::HasTeamSharedDropbox(map.next_value()?),
3539                            None => return Err(de::Error::missing_field("has_team_shared_dropbox")),
3540                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3541                        }
3542                    }
3543                    "has_team_file_events" => {
3544                        match map.next_key()? {
3545                            Some("has_team_file_events") => FeatureValue::HasTeamFileEvents(map.next_value()?),
3546                            None => return Err(de::Error::missing_field("has_team_file_events")),
3547                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3548                        }
3549                    }
3550                    "has_team_selective_sync" => {
3551                        match map.next_key()? {
3552                            Some("has_team_selective_sync") => FeatureValue::HasTeamSelectiveSync(map.next_value()?),
3553                            None => return Err(de::Error::missing_field("has_team_selective_sync")),
3554                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3555                        }
3556                    }
3557                    "has_distinct_member_homes" => {
3558                        match map.next_key()? {
3559                            Some("has_distinct_member_homes") => FeatureValue::HasDistinctMemberHomes(map.next_value()?),
3560                            None => return Err(de::Error::missing_field("has_distinct_member_homes")),
3561                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
3562                        }
3563                    }
3564                    _ => FeatureValue::Other,
3565                };
3566                crate::eat_json_fields(&mut map)?;
3567                Ok(value)
3568            }
3569        }
3570        const VARIANTS: &[&str] = &["upload_api_rate_limit",
3571                                    "has_team_shared_dropbox",
3572                                    "has_team_file_events",
3573                                    "has_team_selective_sync",
3574                                    "has_distinct_member_homes",
3575                                    "other"];
3576        deserializer.deserialize_struct("FeatureValue", VARIANTS, EnumVisitor)
3577    }
3578}
3579
3580impl ::serde::ser::Serialize for FeatureValue {
3581    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3582        // union serializer
3583        use serde::ser::SerializeStruct;
3584        match self {
3585            FeatureValue::UploadApiRateLimit(x) => {
3586                // union or polymporphic struct
3587                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3588                s.serialize_field(".tag", "upload_api_rate_limit")?;
3589                s.serialize_field("upload_api_rate_limit", x)?;
3590                s.end()
3591            }
3592            FeatureValue::HasTeamSharedDropbox(x) => {
3593                // union or polymporphic struct
3594                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3595                s.serialize_field(".tag", "has_team_shared_dropbox")?;
3596                s.serialize_field("has_team_shared_dropbox", x)?;
3597                s.end()
3598            }
3599            FeatureValue::HasTeamFileEvents(x) => {
3600                // union or polymporphic struct
3601                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3602                s.serialize_field(".tag", "has_team_file_events")?;
3603                s.serialize_field("has_team_file_events", x)?;
3604                s.end()
3605            }
3606            FeatureValue::HasTeamSelectiveSync(x) => {
3607                // union or polymporphic struct
3608                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3609                s.serialize_field(".tag", "has_team_selective_sync")?;
3610                s.serialize_field("has_team_selective_sync", x)?;
3611                s.end()
3612            }
3613            FeatureValue::HasDistinctMemberHomes(x) => {
3614                // union or polymporphic struct
3615                let mut s = serializer.serialize_struct("FeatureValue", 2)?;
3616                s.serialize_field(".tag", "has_distinct_member_homes")?;
3617                s.serialize_field("has_distinct_member_homes", x)?;
3618                s.end()
3619            }
3620            FeatureValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3621        }
3622    }
3623}
3624
3625#[derive(Debug, Clone, PartialEq, Eq)]
3626#[non_exhaustive] // structs may have more fields added in the future.
3627pub struct FeaturesGetValuesBatchArg {
3628    /// A list of features in [`Feature`]. If the list is empty, this route will return
3629    /// [`FeaturesGetValuesBatchError`].
3630    pub features: Vec<Feature>,
3631}
3632
3633impl FeaturesGetValuesBatchArg {
3634    pub fn new(features: Vec<Feature>) -> Self {
3635        FeaturesGetValuesBatchArg {
3636            features,
3637        }
3638    }
3639}
3640
3641const FEATURES_GET_VALUES_BATCH_ARG_FIELDS: &[&str] = &["features"];
3642impl FeaturesGetValuesBatchArg {
3643    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3644        map: V,
3645    ) -> Result<FeaturesGetValuesBatchArg, V::Error> {
3646        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3647    }
3648
3649    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3650        mut map: V,
3651        optional: bool,
3652    ) -> Result<Option<FeaturesGetValuesBatchArg>, V::Error> {
3653        let mut field_features = None;
3654        let mut nothing = true;
3655        while let Some(key) = map.next_key::<&str>()? {
3656            nothing = false;
3657            match key {
3658                "features" => {
3659                    if field_features.is_some() {
3660                        return Err(::serde::de::Error::duplicate_field("features"));
3661                    }
3662                    field_features = Some(map.next_value()?);
3663                }
3664                _ => {
3665                    // unknown field allowed and ignored
3666                    map.next_value::<::serde_json::Value>()?;
3667                }
3668            }
3669        }
3670        if optional && nothing {
3671            return Ok(None);
3672        }
3673        let result = FeaturesGetValuesBatchArg {
3674            features: field_features.ok_or_else(|| ::serde::de::Error::missing_field("features"))?,
3675        };
3676        Ok(Some(result))
3677    }
3678
3679    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3680        &self,
3681        s: &mut S::SerializeStruct,
3682    ) -> Result<(), S::Error> {
3683        use serde::ser::SerializeStruct;
3684        s.serialize_field("features", &self.features)?;
3685        Ok(())
3686    }
3687}
3688
3689impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchArg {
3690    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3691        // struct deserializer
3692        use serde::de::{MapAccess, Visitor};
3693        struct StructVisitor;
3694        impl<'de> Visitor<'de> for StructVisitor {
3695            type Value = FeaturesGetValuesBatchArg;
3696            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3697                f.write_str("a FeaturesGetValuesBatchArg struct")
3698            }
3699            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3700                FeaturesGetValuesBatchArg::internal_deserialize(map)
3701            }
3702        }
3703        deserializer.deserialize_struct("FeaturesGetValuesBatchArg", FEATURES_GET_VALUES_BATCH_ARG_FIELDS, StructVisitor)
3704    }
3705}
3706
3707impl ::serde::ser::Serialize for FeaturesGetValuesBatchArg {
3708    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3709        // struct serializer
3710        use serde::ser::SerializeStruct;
3711        let mut s = serializer.serialize_struct("FeaturesGetValuesBatchArg", 1)?;
3712        self.internal_serialize::<S>(&mut s)?;
3713        s.end()
3714    }
3715}
3716
3717#[derive(Debug, Clone, PartialEq, Eq)]
3718#[non_exhaustive] // variants may be added in the future
3719pub enum FeaturesGetValuesBatchError {
3720    /// At least one [`Feature`] must be included in the [`FeaturesGetValuesBatchArg`].features
3721    /// list.
3722    EmptyFeaturesList,
3723    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3724    /// typically indicates that this SDK version is out of date.
3725    Other,
3726}
3727
3728impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchError {
3729    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3730        // union deserializer
3731        use serde::de::{self, MapAccess, Visitor};
3732        struct EnumVisitor;
3733        impl<'de> Visitor<'de> for EnumVisitor {
3734            type Value = FeaturesGetValuesBatchError;
3735            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3736                f.write_str("a FeaturesGetValuesBatchError structure")
3737            }
3738            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3739                let tag: &str = match map.next_key()? {
3740                    Some(".tag") => map.next_value()?,
3741                    _ => return Err(de::Error::missing_field(".tag"))
3742                };
3743                let value = match tag {
3744                    "empty_features_list" => FeaturesGetValuesBatchError::EmptyFeaturesList,
3745                    _ => FeaturesGetValuesBatchError::Other,
3746                };
3747                crate::eat_json_fields(&mut map)?;
3748                Ok(value)
3749            }
3750        }
3751        const VARIANTS: &[&str] = &["empty_features_list",
3752                                    "other"];
3753        deserializer.deserialize_struct("FeaturesGetValuesBatchError", VARIANTS, EnumVisitor)
3754    }
3755}
3756
3757impl ::serde::ser::Serialize for FeaturesGetValuesBatchError {
3758    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3759        // union serializer
3760        use serde::ser::SerializeStruct;
3761        match self {
3762            FeaturesGetValuesBatchError::EmptyFeaturesList => {
3763                // unit
3764                let mut s = serializer.serialize_struct("FeaturesGetValuesBatchError", 1)?;
3765                s.serialize_field(".tag", "empty_features_list")?;
3766                s.end()
3767            }
3768            FeaturesGetValuesBatchError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3769        }
3770    }
3771}
3772
3773impl ::std::error::Error for FeaturesGetValuesBatchError {
3774}
3775
3776impl ::std::fmt::Display for FeaturesGetValuesBatchError {
3777    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3778        write!(f, "{:?}", *self)
3779    }
3780}
3781
3782#[derive(Debug, Clone, PartialEq, Eq)]
3783#[non_exhaustive] // structs may have more fields added in the future.
3784pub struct FeaturesGetValuesBatchResult {
3785    pub values: Vec<FeatureValue>,
3786}
3787
3788impl FeaturesGetValuesBatchResult {
3789    pub fn new(values: Vec<FeatureValue>) -> Self {
3790        FeaturesGetValuesBatchResult {
3791            values,
3792        }
3793    }
3794}
3795
3796const FEATURES_GET_VALUES_BATCH_RESULT_FIELDS: &[&str] = &["values"];
3797impl FeaturesGetValuesBatchResult {
3798    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3799        map: V,
3800    ) -> Result<FeaturesGetValuesBatchResult, V::Error> {
3801        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3802    }
3803
3804    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3805        mut map: V,
3806        optional: bool,
3807    ) -> Result<Option<FeaturesGetValuesBatchResult>, V::Error> {
3808        let mut field_values = None;
3809        let mut nothing = true;
3810        while let Some(key) = map.next_key::<&str>()? {
3811            nothing = false;
3812            match key {
3813                "values" => {
3814                    if field_values.is_some() {
3815                        return Err(::serde::de::Error::duplicate_field("values"));
3816                    }
3817                    field_values = Some(map.next_value()?);
3818                }
3819                _ => {
3820                    // unknown field allowed and ignored
3821                    map.next_value::<::serde_json::Value>()?;
3822                }
3823            }
3824        }
3825        if optional && nothing {
3826            return Ok(None);
3827        }
3828        let result = FeaturesGetValuesBatchResult {
3829            values: field_values.ok_or_else(|| ::serde::de::Error::missing_field("values"))?,
3830        };
3831        Ok(Some(result))
3832    }
3833
3834    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3835        &self,
3836        s: &mut S::SerializeStruct,
3837    ) -> Result<(), S::Error> {
3838        use serde::ser::SerializeStruct;
3839        s.serialize_field("values", &self.values)?;
3840        Ok(())
3841    }
3842}
3843
3844impl<'de> ::serde::de::Deserialize<'de> for FeaturesGetValuesBatchResult {
3845    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3846        // struct deserializer
3847        use serde::de::{MapAccess, Visitor};
3848        struct StructVisitor;
3849        impl<'de> Visitor<'de> for StructVisitor {
3850            type Value = FeaturesGetValuesBatchResult;
3851            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3852                f.write_str("a FeaturesGetValuesBatchResult struct")
3853            }
3854            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3855                FeaturesGetValuesBatchResult::internal_deserialize(map)
3856            }
3857        }
3858        deserializer.deserialize_struct("FeaturesGetValuesBatchResult", FEATURES_GET_VALUES_BATCH_RESULT_FIELDS, StructVisitor)
3859    }
3860}
3861
3862impl ::serde::ser::Serialize for FeaturesGetValuesBatchResult {
3863    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3864        // struct serializer
3865        use serde::ser::SerializeStruct;
3866        let mut s = serializer.serialize_struct("FeaturesGetValuesBatchResult", 1)?;
3867        self.internal_serialize::<S>(&mut s)?;
3868        s.end()
3869    }
3870}
3871
3872/// Activity Report Result. Each of the items in the storage report is an array of values, one value
3873/// per day. If there is no data for a day, then the value will be None.
3874#[derive(Debug, Clone, PartialEq, Eq)]
3875#[non_exhaustive] // structs may have more fields added in the future.
3876pub struct GetActivityReport {
3877    /// First date present in the results as 'YYYY-MM-DD' or None.
3878    pub start_date: String,
3879    /// Array of total number of adds by team members.
3880    pub adds: NumberPerDay,
3881    /// Array of number of edits by team members. If the same user edits the same file multiple
3882    /// times this is counted as a single edit.
3883    pub edits: NumberPerDay,
3884    /// Array of total number of deletes by team members.
3885    pub deletes: NumberPerDay,
3886    /// Array of the number of users who have been active in the last 28 days.
3887    pub active_users_28_day: NumberPerDay,
3888    /// Array of the number of users who have been active in the last week.
3889    pub active_users_7_day: NumberPerDay,
3890    /// Array of the number of users who have been active in the last day.
3891    pub active_users_1_day: NumberPerDay,
3892    /// Array of the number of shared folders with some activity in the last 28 days.
3893    pub active_shared_folders_28_day: NumberPerDay,
3894    /// Array of the number of shared folders with some activity in the last week.
3895    pub active_shared_folders_7_day: NumberPerDay,
3896    /// Array of the number of shared folders with some activity in the last day.
3897    pub active_shared_folders_1_day: NumberPerDay,
3898    /// Array of the number of shared links created.
3899    pub shared_links_created: NumberPerDay,
3900    /// Array of the number of views by team users to shared links created by the team.
3901    pub shared_links_viewed_by_team: NumberPerDay,
3902    /// Array of the number of views by users outside of the team to shared links created by the
3903    /// team.
3904    pub shared_links_viewed_by_outside_user: NumberPerDay,
3905    /// Array of the number of views by non-logged-in users to shared links created by the team.
3906    pub shared_links_viewed_by_not_logged_in: NumberPerDay,
3907    /// Array of the total number of views to shared links created by the team.
3908    pub shared_links_viewed_total: NumberPerDay,
3909}
3910
3911impl GetActivityReport {
3912    pub fn new(
3913        start_date: String,
3914        adds: NumberPerDay,
3915        edits: NumberPerDay,
3916        deletes: NumberPerDay,
3917        active_users_28_day: NumberPerDay,
3918        active_users_7_day: NumberPerDay,
3919        active_users_1_day: NumberPerDay,
3920        active_shared_folders_28_day: NumberPerDay,
3921        active_shared_folders_7_day: NumberPerDay,
3922        active_shared_folders_1_day: NumberPerDay,
3923        shared_links_created: NumberPerDay,
3924        shared_links_viewed_by_team: NumberPerDay,
3925        shared_links_viewed_by_outside_user: NumberPerDay,
3926        shared_links_viewed_by_not_logged_in: NumberPerDay,
3927        shared_links_viewed_total: NumberPerDay,
3928    ) -> Self {
3929        GetActivityReport {
3930            start_date,
3931            adds,
3932            edits,
3933            deletes,
3934            active_users_28_day,
3935            active_users_7_day,
3936            active_users_1_day,
3937            active_shared_folders_28_day,
3938            active_shared_folders_7_day,
3939            active_shared_folders_1_day,
3940            shared_links_created,
3941            shared_links_viewed_by_team,
3942            shared_links_viewed_by_outside_user,
3943            shared_links_viewed_by_not_logged_in,
3944            shared_links_viewed_total,
3945        }
3946    }
3947}
3948
3949const GET_ACTIVITY_REPORT_FIELDS: &[&str] = &["start_date",
3950                                              "adds",
3951                                              "edits",
3952                                              "deletes",
3953                                              "active_users_28_day",
3954                                              "active_users_7_day",
3955                                              "active_users_1_day",
3956                                              "active_shared_folders_28_day",
3957                                              "active_shared_folders_7_day",
3958                                              "active_shared_folders_1_day",
3959                                              "shared_links_created",
3960                                              "shared_links_viewed_by_team",
3961                                              "shared_links_viewed_by_outside_user",
3962                                              "shared_links_viewed_by_not_logged_in",
3963                                              "shared_links_viewed_total"];
3964impl GetActivityReport {
3965    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3966        map: V,
3967    ) -> Result<GetActivityReport, V::Error> {
3968        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3969    }
3970
3971    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3972        mut map: V,
3973        optional: bool,
3974    ) -> Result<Option<GetActivityReport>, V::Error> {
3975        let mut field_start_date = None;
3976        let mut field_adds = None;
3977        let mut field_edits = None;
3978        let mut field_deletes = None;
3979        let mut field_active_users_28_day = None;
3980        let mut field_active_users_7_day = None;
3981        let mut field_active_users_1_day = None;
3982        let mut field_active_shared_folders_28_day = None;
3983        let mut field_active_shared_folders_7_day = None;
3984        let mut field_active_shared_folders_1_day = None;
3985        let mut field_shared_links_created = None;
3986        let mut field_shared_links_viewed_by_team = None;
3987        let mut field_shared_links_viewed_by_outside_user = None;
3988        let mut field_shared_links_viewed_by_not_logged_in = None;
3989        let mut field_shared_links_viewed_total = None;
3990        let mut nothing = true;
3991        while let Some(key) = map.next_key::<&str>()? {
3992            nothing = false;
3993            match key {
3994                "start_date" => {
3995                    if field_start_date.is_some() {
3996                        return Err(::serde::de::Error::duplicate_field("start_date"));
3997                    }
3998                    field_start_date = Some(map.next_value()?);
3999                }
4000                "adds" => {
4001                    if field_adds.is_some() {
4002                        return Err(::serde::de::Error::duplicate_field("adds"));
4003                    }
4004                    field_adds = Some(map.next_value()?);
4005                }
4006                "edits" => {
4007                    if field_edits.is_some() {
4008                        return Err(::serde::de::Error::duplicate_field("edits"));
4009                    }
4010                    field_edits = Some(map.next_value()?);
4011                }
4012                "deletes" => {
4013                    if field_deletes.is_some() {
4014                        return Err(::serde::de::Error::duplicate_field("deletes"));
4015                    }
4016                    field_deletes = Some(map.next_value()?);
4017                }
4018                "active_users_28_day" => {
4019                    if field_active_users_28_day.is_some() {
4020                        return Err(::serde::de::Error::duplicate_field("active_users_28_day"));
4021                    }
4022                    field_active_users_28_day = Some(map.next_value()?);
4023                }
4024                "active_users_7_day" => {
4025                    if field_active_users_7_day.is_some() {
4026                        return Err(::serde::de::Error::duplicate_field("active_users_7_day"));
4027                    }
4028                    field_active_users_7_day = Some(map.next_value()?);
4029                }
4030                "active_users_1_day" => {
4031                    if field_active_users_1_day.is_some() {
4032                        return Err(::serde::de::Error::duplicate_field("active_users_1_day"));
4033                    }
4034                    field_active_users_1_day = Some(map.next_value()?);
4035                }
4036                "active_shared_folders_28_day" => {
4037                    if field_active_shared_folders_28_day.is_some() {
4038                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_28_day"));
4039                    }
4040                    field_active_shared_folders_28_day = Some(map.next_value()?);
4041                }
4042                "active_shared_folders_7_day" => {
4043                    if field_active_shared_folders_7_day.is_some() {
4044                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_7_day"));
4045                    }
4046                    field_active_shared_folders_7_day = Some(map.next_value()?);
4047                }
4048                "active_shared_folders_1_day" => {
4049                    if field_active_shared_folders_1_day.is_some() {
4050                        return Err(::serde::de::Error::duplicate_field("active_shared_folders_1_day"));
4051                    }
4052                    field_active_shared_folders_1_day = Some(map.next_value()?);
4053                }
4054                "shared_links_created" => {
4055                    if field_shared_links_created.is_some() {
4056                        return Err(::serde::de::Error::duplicate_field("shared_links_created"));
4057                    }
4058                    field_shared_links_created = Some(map.next_value()?);
4059                }
4060                "shared_links_viewed_by_team" => {
4061                    if field_shared_links_viewed_by_team.is_some() {
4062                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_team"));
4063                    }
4064                    field_shared_links_viewed_by_team = Some(map.next_value()?);
4065                }
4066                "shared_links_viewed_by_outside_user" => {
4067                    if field_shared_links_viewed_by_outside_user.is_some() {
4068                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_outside_user"));
4069                    }
4070                    field_shared_links_viewed_by_outside_user = Some(map.next_value()?);
4071                }
4072                "shared_links_viewed_by_not_logged_in" => {
4073                    if field_shared_links_viewed_by_not_logged_in.is_some() {
4074                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_by_not_logged_in"));
4075                    }
4076                    field_shared_links_viewed_by_not_logged_in = Some(map.next_value()?);
4077                }
4078                "shared_links_viewed_total" => {
4079                    if field_shared_links_viewed_total.is_some() {
4080                        return Err(::serde::de::Error::duplicate_field("shared_links_viewed_total"));
4081                    }
4082                    field_shared_links_viewed_total = Some(map.next_value()?);
4083                }
4084                _ => {
4085                    // unknown field allowed and ignored
4086                    map.next_value::<::serde_json::Value>()?;
4087                }
4088            }
4089        }
4090        if optional && nothing {
4091            return Ok(None);
4092        }
4093        let result = GetActivityReport {
4094            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4095            adds: field_adds.ok_or_else(|| ::serde::de::Error::missing_field("adds"))?,
4096            edits: field_edits.ok_or_else(|| ::serde::de::Error::missing_field("edits"))?,
4097            deletes: field_deletes.ok_or_else(|| ::serde::de::Error::missing_field("deletes"))?,
4098            active_users_28_day: field_active_users_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_28_day"))?,
4099            active_users_7_day: field_active_users_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_7_day"))?,
4100            active_users_1_day: field_active_users_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_users_1_day"))?,
4101            active_shared_folders_28_day: field_active_shared_folders_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_28_day"))?,
4102            active_shared_folders_7_day: field_active_shared_folders_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_7_day"))?,
4103            active_shared_folders_1_day: field_active_shared_folders_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_shared_folders_1_day"))?,
4104            shared_links_created: field_shared_links_created.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_created"))?,
4105            shared_links_viewed_by_team: field_shared_links_viewed_by_team.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_by_team"))?,
4106            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"))?,
4107            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"))?,
4108            shared_links_viewed_total: field_shared_links_viewed_total.ok_or_else(|| ::serde::de::Error::missing_field("shared_links_viewed_total"))?,
4109        };
4110        Ok(Some(result))
4111    }
4112
4113    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4114        &self,
4115        s: &mut S::SerializeStruct,
4116    ) -> Result<(), S::Error> {
4117        use serde::ser::SerializeStruct;
4118        s.serialize_field("start_date", &self.start_date)?;
4119        s.serialize_field("adds", &self.adds)?;
4120        s.serialize_field("edits", &self.edits)?;
4121        s.serialize_field("deletes", &self.deletes)?;
4122        s.serialize_field("active_users_28_day", &self.active_users_28_day)?;
4123        s.serialize_field("active_users_7_day", &self.active_users_7_day)?;
4124        s.serialize_field("active_users_1_day", &self.active_users_1_day)?;
4125        s.serialize_field("active_shared_folders_28_day", &self.active_shared_folders_28_day)?;
4126        s.serialize_field("active_shared_folders_7_day", &self.active_shared_folders_7_day)?;
4127        s.serialize_field("active_shared_folders_1_day", &self.active_shared_folders_1_day)?;
4128        s.serialize_field("shared_links_created", &self.shared_links_created)?;
4129        s.serialize_field("shared_links_viewed_by_team", &self.shared_links_viewed_by_team)?;
4130        s.serialize_field("shared_links_viewed_by_outside_user", &self.shared_links_viewed_by_outside_user)?;
4131        s.serialize_field("shared_links_viewed_by_not_logged_in", &self.shared_links_viewed_by_not_logged_in)?;
4132        s.serialize_field("shared_links_viewed_total", &self.shared_links_viewed_total)?;
4133        Ok(())
4134    }
4135}
4136
4137impl<'de> ::serde::de::Deserialize<'de> for GetActivityReport {
4138    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4139        // struct deserializer
4140        use serde::de::{MapAccess, Visitor};
4141        struct StructVisitor;
4142        impl<'de> Visitor<'de> for StructVisitor {
4143            type Value = GetActivityReport;
4144            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4145                f.write_str("a GetActivityReport struct")
4146            }
4147            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4148                GetActivityReport::internal_deserialize(map)
4149            }
4150        }
4151        deserializer.deserialize_struct("GetActivityReport", GET_ACTIVITY_REPORT_FIELDS, StructVisitor)
4152    }
4153}
4154
4155impl ::serde::ser::Serialize for GetActivityReport {
4156    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4157        // struct serializer
4158        use serde::ser::SerializeStruct;
4159        let mut s = serializer.serialize_struct("GetActivityReport", 15)?;
4160        self.internal_serialize::<S>(&mut s)?;
4161        s.end()
4162    }
4163}
4164
4165// struct extends BaseDfbReport
4166impl From<GetActivityReport> for BaseDfbReport {
4167    fn from(subtype: GetActivityReport) -> Self {
4168        Self {
4169            start_date: subtype.start_date,
4170        }
4171    }
4172}
4173/// Devices Report Result. Contains subsections for different time ranges of activity. Each of the
4174/// items in each subsection of the storage report is an array of values, one value per day. If
4175/// there is no data for a day, then the value will be None.
4176#[derive(Debug, Clone, PartialEq, Eq)]
4177#[non_exhaustive] // structs may have more fields added in the future.
4178pub struct GetDevicesReport {
4179    /// First date present in the results as 'YYYY-MM-DD' or None.
4180    pub start_date: String,
4181    /// Report of the number of devices active in the last day.
4182    pub active_1_day: DevicesActive,
4183    /// Report of the number of devices active in the last 7 days.
4184    pub active_7_day: DevicesActive,
4185    /// Report of the number of devices active in the last 28 days.
4186    pub active_28_day: DevicesActive,
4187}
4188
4189impl GetDevicesReport {
4190    pub fn new(
4191        start_date: String,
4192        active_1_day: DevicesActive,
4193        active_7_day: DevicesActive,
4194        active_28_day: DevicesActive,
4195    ) -> Self {
4196        GetDevicesReport {
4197            start_date,
4198            active_1_day,
4199            active_7_day,
4200            active_28_day,
4201        }
4202    }
4203}
4204
4205const GET_DEVICES_REPORT_FIELDS: &[&str] = &["start_date",
4206                                             "active_1_day",
4207                                             "active_7_day",
4208                                             "active_28_day"];
4209impl GetDevicesReport {
4210    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4211        map: V,
4212    ) -> Result<GetDevicesReport, V::Error> {
4213        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4214    }
4215
4216    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4217        mut map: V,
4218        optional: bool,
4219    ) -> Result<Option<GetDevicesReport>, V::Error> {
4220        let mut field_start_date = None;
4221        let mut field_active_1_day = None;
4222        let mut field_active_7_day = None;
4223        let mut field_active_28_day = None;
4224        let mut nothing = true;
4225        while let Some(key) = map.next_key::<&str>()? {
4226            nothing = false;
4227            match key {
4228                "start_date" => {
4229                    if field_start_date.is_some() {
4230                        return Err(::serde::de::Error::duplicate_field("start_date"));
4231                    }
4232                    field_start_date = Some(map.next_value()?);
4233                }
4234                "active_1_day" => {
4235                    if field_active_1_day.is_some() {
4236                        return Err(::serde::de::Error::duplicate_field("active_1_day"));
4237                    }
4238                    field_active_1_day = Some(map.next_value()?);
4239                }
4240                "active_7_day" => {
4241                    if field_active_7_day.is_some() {
4242                        return Err(::serde::de::Error::duplicate_field("active_7_day"));
4243                    }
4244                    field_active_7_day = Some(map.next_value()?);
4245                }
4246                "active_28_day" => {
4247                    if field_active_28_day.is_some() {
4248                        return Err(::serde::de::Error::duplicate_field("active_28_day"));
4249                    }
4250                    field_active_28_day = Some(map.next_value()?);
4251                }
4252                _ => {
4253                    // unknown field allowed and ignored
4254                    map.next_value::<::serde_json::Value>()?;
4255                }
4256            }
4257        }
4258        if optional && nothing {
4259            return Ok(None);
4260        }
4261        let result = GetDevicesReport {
4262            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4263            active_1_day: field_active_1_day.ok_or_else(|| ::serde::de::Error::missing_field("active_1_day"))?,
4264            active_7_day: field_active_7_day.ok_or_else(|| ::serde::de::Error::missing_field("active_7_day"))?,
4265            active_28_day: field_active_28_day.ok_or_else(|| ::serde::de::Error::missing_field("active_28_day"))?,
4266        };
4267        Ok(Some(result))
4268    }
4269
4270    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4271        &self,
4272        s: &mut S::SerializeStruct,
4273    ) -> Result<(), S::Error> {
4274        use serde::ser::SerializeStruct;
4275        s.serialize_field("start_date", &self.start_date)?;
4276        s.serialize_field("active_1_day", &self.active_1_day)?;
4277        s.serialize_field("active_7_day", &self.active_7_day)?;
4278        s.serialize_field("active_28_day", &self.active_28_day)?;
4279        Ok(())
4280    }
4281}
4282
4283impl<'de> ::serde::de::Deserialize<'de> for GetDevicesReport {
4284    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4285        // struct deserializer
4286        use serde::de::{MapAccess, Visitor};
4287        struct StructVisitor;
4288        impl<'de> Visitor<'de> for StructVisitor {
4289            type Value = GetDevicesReport;
4290            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4291                f.write_str("a GetDevicesReport struct")
4292            }
4293            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4294                GetDevicesReport::internal_deserialize(map)
4295            }
4296        }
4297        deserializer.deserialize_struct("GetDevicesReport", GET_DEVICES_REPORT_FIELDS, StructVisitor)
4298    }
4299}
4300
4301impl ::serde::ser::Serialize for GetDevicesReport {
4302    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4303        // struct serializer
4304        use serde::ser::SerializeStruct;
4305        let mut s = serializer.serialize_struct("GetDevicesReport", 4)?;
4306        self.internal_serialize::<S>(&mut s)?;
4307        s.end()
4308    }
4309}
4310
4311// struct extends BaseDfbReport
4312impl From<GetDevicesReport> for BaseDfbReport {
4313    fn from(subtype: GetDevicesReport) -> Self {
4314        Self {
4315            start_date: subtype.start_date,
4316        }
4317    }
4318}
4319/// Membership Report Result. Each of the items in the storage report is an array of values, one
4320/// value per day. If there is no data for a day, then the value will be None.
4321#[derive(Debug, Clone, PartialEq, Eq)]
4322#[non_exhaustive] // structs may have more fields added in the future.
4323pub struct GetMembershipReport {
4324    /// First date present in the results as 'YYYY-MM-DD' or None.
4325    pub start_date: String,
4326    /// Team size, for each day.
4327    pub team_size: NumberPerDay,
4328    /// The number of pending invites to the team, for each day.
4329    pub pending_invites: NumberPerDay,
4330    /// The number of members that joined the team, for each day.
4331    pub members_joined: NumberPerDay,
4332    /// The number of suspended team members, for each day.
4333    pub suspended_members: NumberPerDay,
4334    /// The total number of licenses the team has, for each day.
4335    pub licenses: NumberPerDay,
4336}
4337
4338impl GetMembershipReport {
4339    pub fn new(
4340        start_date: String,
4341        team_size: NumberPerDay,
4342        pending_invites: NumberPerDay,
4343        members_joined: NumberPerDay,
4344        suspended_members: NumberPerDay,
4345        licenses: NumberPerDay,
4346    ) -> Self {
4347        GetMembershipReport {
4348            start_date,
4349            team_size,
4350            pending_invites,
4351            members_joined,
4352            suspended_members,
4353            licenses,
4354        }
4355    }
4356}
4357
4358const GET_MEMBERSHIP_REPORT_FIELDS: &[&str] = &["start_date",
4359                                                "team_size",
4360                                                "pending_invites",
4361                                                "members_joined",
4362                                                "suspended_members",
4363                                                "licenses"];
4364impl GetMembershipReport {
4365    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4366        map: V,
4367    ) -> Result<GetMembershipReport, V::Error> {
4368        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4369    }
4370
4371    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4372        mut map: V,
4373        optional: bool,
4374    ) -> Result<Option<GetMembershipReport>, V::Error> {
4375        let mut field_start_date = None;
4376        let mut field_team_size = None;
4377        let mut field_pending_invites = None;
4378        let mut field_members_joined = None;
4379        let mut field_suspended_members = None;
4380        let mut field_licenses = None;
4381        let mut nothing = true;
4382        while let Some(key) = map.next_key::<&str>()? {
4383            nothing = false;
4384            match key {
4385                "start_date" => {
4386                    if field_start_date.is_some() {
4387                        return Err(::serde::de::Error::duplicate_field("start_date"));
4388                    }
4389                    field_start_date = Some(map.next_value()?);
4390                }
4391                "team_size" => {
4392                    if field_team_size.is_some() {
4393                        return Err(::serde::de::Error::duplicate_field("team_size"));
4394                    }
4395                    field_team_size = Some(map.next_value()?);
4396                }
4397                "pending_invites" => {
4398                    if field_pending_invites.is_some() {
4399                        return Err(::serde::de::Error::duplicate_field("pending_invites"));
4400                    }
4401                    field_pending_invites = Some(map.next_value()?);
4402                }
4403                "members_joined" => {
4404                    if field_members_joined.is_some() {
4405                        return Err(::serde::de::Error::duplicate_field("members_joined"));
4406                    }
4407                    field_members_joined = Some(map.next_value()?);
4408                }
4409                "suspended_members" => {
4410                    if field_suspended_members.is_some() {
4411                        return Err(::serde::de::Error::duplicate_field("suspended_members"));
4412                    }
4413                    field_suspended_members = Some(map.next_value()?);
4414                }
4415                "licenses" => {
4416                    if field_licenses.is_some() {
4417                        return Err(::serde::de::Error::duplicate_field("licenses"));
4418                    }
4419                    field_licenses = Some(map.next_value()?);
4420                }
4421                _ => {
4422                    // unknown field allowed and ignored
4423                    map.next_value::<::serde_json::Value>()?;
4424                }
4425            }
4426        }
4427        if optional && nothing {
4428            return Ok(None);
4429        }
4430        let result = GetMembershipReport {
4431            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4432            team_size: field_team_size.ok_or_else(|| ::serde::de::Error::missing_field("team_size"))?,
4433            pending_invites: field_pending_invites.ok_or_else(|| ::serde::de::Error::missing_field("pending_invites"))?,
4434            members_joined: field_members_joined.ok_or_else(|| ::serde::de::Error::missing_field("members_joined"))?,
4435            suspended_members: field_suspended_members.ok_or_else(|| ::serde::de::Error::missing_field("suspended_members"))?,
4436            licenses: field_licenses.ok_or_else(|| ::serde::de::Error::missing_field("licenses"))?,
4437        };
4438        Ok(Some(result))
4439    }
4440
4441    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4442        &self,
4443        s: &mut S::SerializeStruct,
4444    ) -> Result<(), S::Error> {
4445        use serde::ser::SerializeStruct;
4446        s.serialize_field("start_date", &self.start_date)?;
4447        s.serialize_field("team_size", &self.team_size)?;
4448        s.serialize_field("pending_invites", &self.pending_invites)?;
4449        s.serialize_field("members_joined", &self.members_joined)?;
4450        s.serialize_field("suspended_members", &self.suspended_members)?;
4451        s.serialize_field("licenses", &self.licenses)?;
4452        Ok(())
4453    }
4454}
4455
4456impl<'de> ::serde::de::Deserialize<'de> for GetMembershipReport {
4457    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4458        // struct deserializer
4459        use serde::de::{MapAccess, Visitor};
4460        struct StructVisitor;
4461        impl<'de> Visitor<'de> for StructVisitor {
4462            type Value = GetMembershipReport;
4463            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4464                f.write_str("a GetMembershipReport struct")
4465            }
4466            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4467                GetMembershipReport::internal_deserialize(map)
4468            }
4469        }
4470        deserializer.deserialize_struct("GetMembershipReport", GET_MEMBERSHIP_REPORT_FIELDS, StructVisitor)
4471    }
4472}
4473
4474impl ::serde::ser::Serialize for GetMembershipReport {
4475    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4476        // struct serializer
4477        use serde::ser::SerializeStruct;
4478        let mut s = serializer.serialize_struct("GetMembershipReport", 6)?;
4479        self.internal_serialize::<S>(&mut s)?;
4480        s.end()
4481    }
4482}
4483
4484// struct extends BaseDfbReport
4485impl From<GetMembershipReport> for BaseDfbReport {
4486    fn from(subtype: GetMembershipReport) -> Self {
4487        Self {
4488            start_date: subtype.start_date,
4489        }
4490    }
4491}
4492/// Storage Report Result. Each of the items in the storage report is an array of values, one value
4493/// per day. If there is no data for a day, then the value will be None.
4494#[derive(Debug, Clone, PartialEq, Eq)]
4495#[non_exhaustive] // structs may have more fields added in the future.
4496pub struct GetStorageReport {
4497    /// First date present in the results as 'YYYY-MM-DD' or None.
4498    pub start_date: String,
4499    /// Sum of the shared, unshared, and datastore usages, for each day.
4500    pub total_usage: NumberPerDay,
4501    /// Array of the combined size (bytes) of team members' shared folders, for each day.
4502    pub shared_usage: NumberPerDay,
4503    /// Array of the combined size (bytes) of team members' root namespaces, for each day.
4504    pub unshared_usage: NumberPerDay,
4505    /// Array of the number of shared folders owned by team members, for each day.
4506    pub shared_folders: NumberPerDay,
4507    /// Array of storage summaries of team members' account sizes. Each storage summary is an array
4508    /// of key, value pairs, where each pair describes a storage bucket. The key indicates the upper
4509    /// bound of the bucket and the value is the number of users in that bucket. There is one such
4510    /// summary per day. If there is no data for a day, the storage summary will be empty.
4511    pub member_storage_map: Vec<Vec<StorageBucket>>,
4512}
4513
4514impl GetStorageReport {
4515    pub fn new(
4516        start_date: String,
4517        total_usage: NumberPerDay,
4518        shared_usage: NumberPerDay,
4519        unshared_usage: NumberPerDay,
4520        shared_folders: NumberPerDay,
4521        member_storage_map: Vec<Vec<StorageBucket>>,
4522    ) -> Self {
4523        GetStorageReport {
4524            start_date,
4525            total_usage,
4526            shared_usage,
4527            unshared_usage,
4528            shared_folders,
4529            member_storage_map,
4530        }
4531    }
4532}
4533
4534const GET_STORAGE_REPORT_FIELDS: &[&str] = &["start_date",
4535                                             "total_usage",
4536                                             "shared_usage",
4537                                             "unshared_usage",
4538                                             "shared_folders",
4539                                             "member_storage_map"];
4540impl GetStorageReport {
4541    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4542        map: V,
4543    ) -> Result<GetStorageReport, V::Error> {
4544        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4545    }
4546
4547    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4548        mut map: V,
4549        optional: bool,
4550    ) -> Result<Option<GetStorageReport>, V::Error> {
4551        let mut field_start_date = None;
4552        let mut field_total_usage = None;
4553        let mut field_shared_usage = None;
4554        let mut field_unshared_usage = None;
4555        let mut field_shared_folders = None;
4556        let mut field_member_storage_map = None;
4557        let mut nothing = true;
4558        while let Some(key) = map.next_key::<&str>()? {
4559            nothing = false;
4560            match key {
4561                "start_date" => {
4562                    if field_start_date.is_some() {
4563                        return Err(::serde::de::Error::duplicate_field("start_date"));
4564                    }
4565                    field_start_date = Some(map.next_value()?);
4566                }
4567                "total_usage" => {
4568                    if field_total_usage.is_some() {
4569                        return Err(::serde::de::Error::duplicate_field("total_usage"));
4570                    }
4571                    field_total_usage = Some(map.next_value()?);
4572                }
4573                "shared_usage" => {
4574                    if field_shared_usage.is_some() {
4575                        return Err(::serde::de::Error::duplicate_field("shared_usage"));
4576                    }
4577                    field_shared_usage = Some(map.next_value()?);
4578                }
4579                "unshared_usage" => {
4580                    if field_unshared_usage.is_some() {
4581                        return Err(::serde::de::Error::duplicate_field("unshared_usage"));
4582                    }
4583                    field_unshared_usage = Some(map.next_value()?);
4584                }
4585                "shared_folders" => {
4586                    if field_shared_folders.is_some() {
4587                        return Err(::serde::de::Error::duplicate_field("shared_folders"));
4588                    }
4589                    field_shared_folders = Some(map.next_value()?);
4590                }
4591                "member_storage_map" => {
4592                    if field_member_storage_map.is_some() {
4593                        return Err(::serde::de::Error::duplicate_field("member_storage_map"));
4594                    }
4595                    field_member_storage_map = Some(map.next_value()?);
4596                }
4597                _ => {
4598                    // unknown field allowed and ignored
4599                    map.next_value::<::serde_json::Value>()?;
4600                }
4601            }
4602        }
4603        if optional && nothing {
4604            return Ok(None);
4605        }
4606        let result = GetStorageReport {
4607            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
4608            total_usage: field_total_usage.ok_or_else(|| ::serde::de::Error::missing_field("total_usage"))?,
4609            shared_usage: field_shared_usage.ok_or_else(|| ::serde::de::Error::missing_field("shared_usage"))?,
4610            unshared_usage: field_unshared_usage.ok_or_else(|| ::serde::de::Error::missing_field("unshared_usage"))?,
4611            shared_folders: field_shared_folders.ok_or_else(|| ::serde::de::Error::missing_field("shared_folders"))?,
4612            member_storage_map: field_member_storage_map.ok_or_else(|| ::serde::de::Error::missing_field("member_storage_map"))?,
4613        };
4614        Ok(Some(result))
4615    }
4616
4617    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4618        &self,
4619        s: &mut S::SerializeStruct,
4620    ) -> Result<(), S::Error> {
4621        use serde::ser::SerializeStruct;
4622        s.serialize_field("start_date", &self.start_date)?;
4623        s.serialize_field("total_usage", &self.total_usage)?;
4624        s.serialize_field("shared_usage", &self.shared_usage)?;
4625        s.serialize_field("unshared_usage", &self.unshared_usage)?;
4626        s.serialize_field("shared_folders", &self.shared_folders)?;
4627        s.serialize_field("member_storage_map", &self.member_storage_map)?;
4628        Ok(())
4629    }
4630}
4631
4632impl<'de> ::serde::de::Deserialize<'de> for GetStorageReport {
4633    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4634        // struct deserializer
4635        use serde::de::{MapAccess, Visitor};
4636        struct StructVisitor;
4637        impl<'de> Visitor<'de> for StructVisitor {
4638            type Value = GetStorageReport;
4639            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4640                f.write_str("a GetStorageReport struct")
4641            }
4642            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4643                GetStorageReport::internal_deserialize(map)
4644            }
4645        }
4646        deserializer.deserialize_struct("GetStorageReport", GET_STORAGE_REPORT_FIELDS, StructVisitor)
4647    }
4648}
4649
4650impl ::serde::ser::Serialize for GetStorageReport {
4651    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4652        // struct serializer
4653        use serde::ser::SerializeStruct;
4654        let mut s = serializer.serialize_struct("GetStorageReport", 6)?;
4655        self.internal_serialize::<S>(&mut s)?;
4656        s.end()
4657    }
4658}
4659
4660// struct extends BaseDfbReport
4661impl From<GetStorageReport> for BaseDfbReport {
4662    fn from(subtype: GetStorageReport) -> Self {
4663        Self {
4664            start_date: subtype.start_date,
4665        }
4666    }
4667}
4668/// Role of a user in group.
4669#[derive(Debug, Clone, PartialEq, Eq)]
4670pub enum GroupAccessType {
4671    /// User is a member of the group, but has no special permissions.
4672    Member,
4673    /// User can rename the group, and add/remove members.
4674    Owner,
4675}
4676
4677impl<'de> ::serde::de::Deserialize<'de> for GroupAccessType {
4678    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4679        // union deserializer
4680        use serde::de::{self, MapAccess, Visitor};
4681        struct EnumVisitor;
4682        impl<'de> Visitor<'de> for EnumVisitor {
4683            type Value = GroupAccessType;
4684            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4685                f.write_str("a GroupAccessType structure")
4686            }
4687            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4688                let tag: &str = match map.next_key()? {
4689                    Some(".tag") => map.next_value()?,
4690                    _ => return Err(de::Error::missing_field(".tag"))
4691                };
4692                let value = match tag {
4693                    "member" => GroupAccessType::Member,
4694                    "owner" => GroupAccessType::Owner,
4695                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
4696                };
4697                crate::eat_json_fields(&mut map)?;
4698                Ok(value)
4699            }
4700        }
4701        const VARIANTS: &[&str] = &["member",
4702                                    "owner"];
4703        deserializer.deserialize_struct("GroupAccessType", VARIANTS, EnumVisitor)
4704    }
4705}
4706
4707impl ::serde::ser::Serialize for GroupAccessType {
4708    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4709        // union serializer
4710        use serde::ser::SerializeStruct;
4711        match self {
4712            GroupAccessType::Member => {
4713                // unit
4714                let mut s = serializer.serialize_struct("GroupAccessType", 1)?;
4715                s.serialize_field(".tag", "member")?;
4716                s.end()
4717            }
4718            GroupAccessType::Owner => {
4719                // unit
4720                let mut s = serializer.serialize_struct("GroupAccessType", 1)?;
4721                s.serialize_field(".tag", "owner")?;
4722                s.end()
4723            }
4724        }
4725    }
4726}
4727
4728#[derive(Debug, Clone, PartialEq, Eq)]
4729#[non_exhaustive] // structs may have more fields added in the future.
4730pub struct GroupCreateArg {
4731    /// Group name.
4732    pub group_name: String,
4733    /// Automatically add the creator of the group.
4734    pub add_creator_as_owner: bool,
4735    /// The creator of a team can associate an arbitrary external ID to the group.
4736    pub group_external_id: Option<crate::types::team_common::GroupExternalId>,
4737    /// Whether the team can be managed by selected users, or only by team admins.
4738    pub group_management_type: Option<crate::types::team_common::GroupManagementType>,
4739}
4740
4741impl GroupCreateArg {
4742    pub fn new(group_name: String) -> Self {
4743        GroupCreateArg {
4744            group_name,
4745            add_creator_as_owner: false,
4746            group_external_id: None,
4747            group_management_type: None,
4748        }
4749    }
4750
4751    pub fn with_add_creator_as_owner(mut self, value: bool) -> Self {
4752        self.add_creator_as_owner = value;
4753        self
4754    }
4755
4756    pub fn with_group_external_id(
4757        mut self,
4758        value: crate::types::team_common::GroupExternalId,
4759    ) -> Self {
4760        self.group_external_id = Some(value);
4761        self
4762    }
4763
4764    pub fn with_group_management_type(
4765        mut self,
4766        value: crate::types::team_common::GroupManagementType,
4767    ) -> Self {
4768        self.group_management_type = Some(value);
4769        self
4770    }
4771}
4772
4773const GROUP_CREATE_ARG_FIELDS: &[&str] = &["group_name",
4774                                           "add_creator_as_owner",
4775                                           "group_external_id",
4776                                           "group_management_type"];
4777impl GroupCreateArg {
4778    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4779        map: V,
4780    ) -> Result<GroupCreateArg, V::Error> {
4781        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4782    }
4783
4784    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4785        mut map: V,
4786        optional: bool,
4787    ) -> Result<Option<GroupCreateArg>, V::Error> {
4788        let mut field_group_name = None;
4789        let mut field_add_creator_as_owner = None;
4790        let mut field_group_external_id = None;
4791        let mut field_group_management_type = None;
4792        let mut nothing = true;
4793        while let Some(key) = map.next_key::<&str>()? {
4794            nothing = false;
4795            match key {
4796                "group_name" => {
4797                    if field_group_name.is_some() {
4798                        return Err(::serde::de::Error::duplicate_field("group_name"));
4799                    }
4800                    field_group_name = Some(map.next_value()?);
4801                }
4802                "add_creator_as_owner" => {
4803                    if field_add_creator_as_owner.is_some() {
4804                        return Err(::serde::de::Error::duplicate_field("add_creator_as_owner"));
4805                    }
4806                    field_add_creator_as_owner = Some(map.next_value()?);
4807                }
4808                "group_external_id" => {
4809                    if field_group_external_id.is_some() {
4810                        return Err(::serde::de::Error::duplicate_field("group_external_id"));
4811                    }
4812                    field_group_external_id = Some(map.next_value()?);
4813                }
4814                "group_management_type" => {
4815                    if field_group_management_type.is_some() {
4816                        return Err(::serde::de::Error::duplicate_field("group_management_type"));
4817                    }
4818                    field_group_management_type = Some(map.next_value()?);
4819                }
4820                _ => {
4821                    // unknown field allowed and ignored
4822                    map.next_value::<::serde_json::Value>()?;
4823                }
4824            }
4825        }
4826        if optional && nothing {
4827            return Ok(None);
4828        }
4829        let result = GroupCreateArg {
4830            group_name: field_group_name.ok_or_else(|| ::serde::de::Error::missing_field("group_name"))?,
4831            add_creator_as_owner: field_add_creator_as_owner.unwrap_or(false),
4832            group_external_id: field_group_external_id.and_then(Option::flatten),
4833            group_management_type: field_group_management_type.and_then(Option::flatten),
4834        };
4835        Ok(Some(result))
4836    }
4837
4838    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4839        &self,
4840        s: &mut S::SerializeStruct,
4841    ) -> Result<(), S::Error> {
4842        use serde::ser::SerializeStruct;
4843        s.serialize_field("group_name", &self.group_name)?;
4844        if self.add_creator_as_owner {
4845            s.serialize_field("add_creator_as_owner", &self.add_creator_as_owner)?;
4846        }
4847        if let Some(val) = &self.group_external_id {
4848            s.serialize_field("group_external_id", val)?;
4849        }
4850        if let Some(val) = &self.group_management_type {
4851            s.serialize_field("group_management_type", val)?;
4852        }
4853        Ok(())
4854    }
4855}
4856
4857impl<'de> ::serde::de::Deserialize<'de> for GroupCreateArg {
4858    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4859        // struct deserializer
4860        use serde::de::{MapAccess, Visitor};
4861        struct StructVisitor;
4862        impl<'de> Visitor<'de> for StructVisitor {
4863            type Value = GroupCreateArg;
4864            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4865                f.write_str("a GroupCreateArg struct")
4866            }
4867            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4868                GroupCreateArg::internal_deserialize(map)
4869            }
4870        }
4871        deserializer.deserialize_struct("GroupCreateArg", GROUP_CREATE_ARG_FIELDS, StructVisitor)
4872    }
4873}
4874
4875impl ::serde::ser::Serialize for GroupCreateArg {
4876    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4877        // struct serializer
4878        use serde::ser::SerializeStruct;
4879        let mut s = serializer.serialize_struct("GroupCreateArg", 4)?;
4880        self.internal_serialize::<S>(&mut s)?;
4881        s.end()
4882    }
4883}
4884
4885#[derive(Debug, Clone, PartialEq, Eq)]
4886#[non_exhaustive] // variants may be added in the future
4887pub enum GroupCreateError {
4888    /// The requested group name is already being used by another group.
4889    GroupNameAlreadyUsed,
4890    /// Group name is empty or has invalid characters.
4891    GroupNameInvalid,
4892    /// The requested external ID is already being used by another group.
4893    ExternalIdAlreadyInUse,
4894    /// System-managed group cannot be manually created.
4895    SystemManagedGroupDisallowed,
4896    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4897    /// typically indicates that this SDK version is out of date.
4898    Other,
4899}
4900
4901impl<'de> ::serde::de::Deserialize<'de> for GroupCreateError {
4902    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4903        // union deserializer
4904        use serde::de::{self, MapAccess, Visitor};
4905        struct EnumVisitor;
4906        impl<'de> Visitor<'de> for EnumVisitor {
4907            type Value = GroupCreateError;
4908            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4909                f.write_str("a GroupCreateError structure")
4910            }
4911            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4912                let tag: &str = match map.next_key()? {
4913                    Some(".tag") => map.next_value()?,
4914                    _ => return Err(de::Error::missing_field(".tag"))
4915                };
4916                let value = match tag {
4917                    "group_name_already_used" => GroupCreateError::GroupNameAlreadyUsed,
4918                    "group_name_invalid" => GroupCreateError::GroupNameInvalid,
4919                    "external_id_already_in_use" => GroupCreateError::ExternalIdAlreadyInUse,
4920                    "system_managed_group_disallowed" => GroupCreateError::SystemManagedGroupDisallowed,
4921                    _ => GroupCreateError::Other,
4922                };
4923                crate::eat_json_fields(&mut map)?;
4924                Ok(value)
4925            }
4926        }
4927        const VARIANTS: &[&str] = &["group_name_already_used",
4928                                    "group_name_invalid",
4929                                    "external_id_already_in_use",
4930                                    "system_managed_group_disallowed",
4931                                    "other"];
4932        deserializer.deserialize_struct("GroupCreateError", VARIANTS, EnumVisitor)
4933    }
4934}
4935
4936impl ::serde::ser::Serialize for GroupCreateError {
4937    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4938        // union serializer
4939        use serde::ser::SerializeStruct;
4940        match self {
4941            GroupCreateError::GroupNameAlreadyUsed => {
4942                // unit
4943                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4944                s.serialize_field(".tag", "group_name_already_used")?;
4945                s.end()
4946            }
4947            GroupCreateError::GroupNameInvalid => {
4948                // unit
4949                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4950                s.serialize_field(".tag", "group_name_invalid")?;
4951                s.end()
4952            }
4953            GroupCreateError::ExternalIdAlreadyInUse => {
4954                // unit
4955                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4956                s.serialize_field(".tag", "external_id_already_in_use")?;
4957                s.end()
4958            }
4959            GroupCreateError::SystemManagedGroupDisallowed => {
4960                // unit
4961                let mut s = serializer.serialize_struct("GroupCreateError", 1)?;
4962                s.serialize_field(".tag", "system_managed_group_disallowed")?;
4963                s.end()
4964            }
4965            GroupCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4966        }
4967    }
4968}
4969
4970impl ::std::error::Error for GroupCreateError {
4971}
4972
4973impl ::std::fmt::Display for GroupCreateError {
4974    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4975        match self {
4976            GroupCreateError::GroupNameAlreadyUsed => f.write_str("The requested group name is already being used by another group."),
4977            GroupCreateError::GroupNameInvalid => f.write_str("Group name is empty or has invalid characters."),
4978            GroupCreateError::ExternalIdAlreadyInUse => f.write_str("The requested external ID is already being used by another group."),
4979            GroupCreateError::SystemManagedGroupDisallowed => f.write_str("System-managed group cannot be manually created."),
4980            _ => write!(f, "{:?}", *self),
4981        }
4982    }
4983}
4984
4985#[derive(Debug, Clone, PartialEq, Eq)]
4986#[non_exhaustive] // variants may be added in the future
4987pub enum GroupDeleteError {
4988    /// No matching group found. No groups match the specified group ID.
4989    GroupNotFound,
4990    /// This operation is not supported on system-managed groups.
4991    SystemManagedGroupDisallowed,
4992    /// This group has already been deleted.
4993    GroupAlreadyDeleted,
4994    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4995    /// typically indicates that this SDK version is out of date.
4996    Other,
4997}
4998
4999impl<'de> ::serde::de::Deserialize<'de> for GroupDeleteError {
5000    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5001        // union deserializer
5002        use serde::de::{self, MapAccess, Visitor};
5003        struct EnumVisitor;
5004        impl<'de> Visitor<'de> for EnumVisitor {
5005            type Value = GroupDeleteError;
5006            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5007                f.write_str("a GroupDeleteError structure")
5008            }
5009            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5010                let tag: &str = match map.next_key()? {
5011                    Some(".tag") => map.next_value()?,
5012                    _ => return Err(de::Error::missing_field(".tag"))
5013                };
5014                let value = match tag {
5015                    "group_not_found" => GroupDeleteError::GroupNotFound,
5016                    "system_managed_group_disallowed" => GroupDeleteError::SystemManagedGroupDisallowed,
5017                    "group_already_deleted" => GroupDeleteError::GroupAlreadyDeleted,
5018                    _ => GroupDeleteError::Other,
5019                };
5020                crate::eat_json_fields(&mut map)?;
5021                Ok(value)
5022            }
5023        }
5024        const VARIANTS: &[&str] = &["group_not_found",
5025                                    "other",
5026                                    "system_managed_group_disallowed",
5027                                    "group_already_deleted"];
5028        deserializer.deserialize_struct("GroupDeleteError", VARIANTS, EnumVisitor)
5029    }
5030}
5031
5032impl ::serde::ser::Serialize for GroupDeleteError {
5033    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5034        // union serializer
5035        use serde::ser::SerializeStruct;
5036        match self {
5037            GroupDeleteError::GroupNotFound => {
5038                // unit
5039                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5040                s.serialize_field(".tag", "group_not_found")?;
5041                s.end()
5042            }
5043            GroupDeleteError::SystemManagedGroupDisallowed => {
5044                // unit
5045                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5046                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5047                s.end()
5048            }
5049            GroupDeleteError::GroupAlreadyDeleted => {
5050                // unit
5051                let mut s = serializer.serialize_struct("GroupDeleteError", 1)?;
5052                s.serialize_field(".tag", "group_already_deleted")?;
5053                s.end()
5054            }
5055            GroupDeleteError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5056        }
5057    }
5058}
5059
5060impl ::std::error::Error for GroupDeleteError {
5061}
5062
5063impl ::std::fmt::Display for GroupDeleteError {
5064    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5065        match self {
5066            GroupDeleteError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5067            GroupDeleteError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5068            GroupDeleteError::GroupAlreadyDeleted => f.write_str("This group has already been deleted."),
5069            _ => write!(f, "{:?}", *self),
5070        }
5071    }
5072}
5073
5074// union extends GroupSelectorWithTeamGroupError
5075impl From<GroupSelectorWithTeamGroupError> for GroupDeleteError {
5076    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
5077        match parent {
5078            GroupSelectorWithTeamGroupError::GroupNotFound => GroupDeleteError::GroupNotFound,
5079            GroupSelectorWithTeamGroupError::Other => GroupDeleteError::Other,
5080            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupDeleteError::SystemManagedGroupDisallowed,
5081        }
5082    }
5083}
5084/// Full description of a group.
5085#[derive(Debug, Clone, PartialEq, Eq)]
5086#[non_exhaustive] // structs may have more fields added in the future.
5087pub struct GroupFullInfo {
5088    pub group_name: String,
5089    pub group_id: crate::types::team_common::GroupId,
5090    /// Who is allowed to manage the group.
5091    pub group_management_type: crate::types::team_common::GroupManagementType,
5092    /// The group creation time as a UTC timestamp in milliseconds since the Unix epoch.
5093    pub created: u64,
5094    /// External ID of group. This is an arbitrary ID that an admin can attach to a group.
5095    pub group_external_id: Option<crate::types::team_common::GroupExternalId>,
5096    /// The number of members in the group.
5097    pub member_count: Option<u32>,
5098    /// List of group members.
5099    pub members: Option<Vec<GroupMemberInfo>>,
5100}
5101
5102impl GroupFullInfo {
5103    pub fn new(
5104        group_name: String,
5105        group_id: crate::types::team_common::GroupId,
5106        group_management_type: crate::types::team_common::GroupManagementType,
5107        created: u64,
5108    ) -> Self {
5109        GroupFullInfo {
5110            group_name,
5111            group_id,
5112            group_management_type,
5113            created,
5114            group_external_id: None,
5115            member_count: None,
5116            members: None,
5117        }
5118    }
5119
5120    pub fn with_group_external_id(
5121        mut self,
5122        value: crate::types::team_common::GroupExternalId,
5123    ) -> Self {
5124        self.group_external_id = Some(value);
5125        self
5126    }
5127
5128    pub fn with_member_count(mut self, value: u32) -> Self {
5129        self.member_count = Some(value);
5130        self
5131    }
5132
5133    pub fn with_members(mut self, value: Vec<GroupMemberInfo>) -> Self {
5134        self.members = Some(value);
5135        self
5136    }
5137}
5138
5139const GROUP_FULL_INFO_FIELDS: &[&str] = &["group_name",
5140                                          "group_id",
5141                                          "group_management_type",
5142                                          "created",
5143                                          "group_external_id",
5144                                          "member_count",
5145                                          "members"];
5146impl GroupFullInfo {
5147    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5148        map: V,
5149    ) -> Result<GroupFullInfo, V::Error> {
5150        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5151    }
5152
5153    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5154        mut map: V,
5155        optional: bool,
5156    ) -> Result<Option<GroupFullInfo>, V::Error> {
5157        let mut field_group_name = None;
5158        let mut field_group_id = None;
5159        let mut field_group_management_type = None;
5160        let mut field_created = None;
5161        let mut field_group_external_id = None;
5162        let mut field_member_count = None;
5163        let mut field_members = None;
5164        let mut nothing = true;
5165        while let Some(key) = map.next_key::<&str>()? {
5166            nothing = false;
5167            match key {
5168                "group_name" => {
5169                    if field_group_name.is_some() {
5170                        return Err(::serde::de::Error::duplicate_field("group_name"));
5171                    }
5172                    field_group_name = Some(map.next_value()?);
5173                }
5174                "group_id" => {
5175                    if field_group_id.is_some() {
5176                        return Err(::serde::de::Error::duplicate_field("group_id"));
5177                    }
5178                    field_group_id = Some(map.next_value()?);
5179                }
5180                "group_management_type" => {
5181                    if field_group_management_type.is_some() {
5182                        return Err(::serde::de::Error::duplicate_field("group_management_type"));
5183                    }
5184                    field_group_management_type = Some(map.next_value()?);
5185                }
5186                "created" => {
5187                    if field_created.is_some() {
5188                        return Err(::serde::de::Error::duplicate_field("created"));
5189                    }
5190                    field_created = Some(map.next_value()?);
5191                }
5192                "group_external_id" => {
5193                    if field_group_external_id.is_some() {
5194                        return Err(::serde::de::Error::duplicate_field("group_external_id"));
5195                    }
5196                    field_group_external_id = Some(map.next_value()?);
5197                }
5198                "member_count" => {
5199                    if field_member_count.is_some() {
5200                        return Err(::serde::de::Error::duplicate_field("member_count"));
5201                    }
5202                    field_member_count = Some(map.next_value()?);
5203                }
5204                "members" => {
5205                    if field_members.is_some() {
5206                        return Err(::serde::de::Error::duplicate_field("members"));
5207                    }
5208                    field_members = Some(map.next_value()?);
5209                }
5210                _ => {
5211                    // unknown field allowed and ignored
5212                    map.next_value::<::serde_json::Value>()?;
5213                }
5214            }
5215        }
5216        if optional && nothing {
5217            return Ok(None);
5218        }
5219        let result = GroupFullInfo {
5220            group_name: field_group_name.ok_or_else(|| ::serde::de::Error::missing_field("group_name"))?,
5221            group_id: field_group_id.ok_or_else(|| ::serde::de::Error::missing_field("group_id"))?,
5222            group_management_type: field_group_management_type.ok_or_else(|| ::serde::de::Error::missing_field("group_management_type"))?,
5223            created: field_created.ok_or_else(|| ::serde::de::Error::missing_field("created"))?,
5224            group_external_id: field_group_external_id.and_then(Option::flatten),
5225            member_count: field_member_count.and_then(Option::flatten),
5226            members: field_members.and_then(Option::flatten),
5227        };
5228        Ok(Some(result))
5229    }
5230
5231    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5232        &self,
5233        s: &mut S::SerializeStruct,
5234    ) -> Result<(), S::Error> {
5235        use serde::ser::SerializeStruct;
5236        s.serialize_field("group_name", &self.group_name)?;
5237        s.serialize_field("group_id", &self.group_id)?;
5238        s.serialize_field("group_management_type", &self.group_management_type)?;
5239        s.serialize_field("created", &self.created)?;
5240        if let Some(val) = &self.group_external_id {
5241            s.serialize_field("group_external_id", val)?;
5242        }
5243        if let Some(val) = &self.member_count {
5244            s.serialize_field("member_count", val)?;
5245        }
5246        if let Some(val) = &self.members {
5247            s.serialize_field("members", val)?;
5248        }
5249        Ok(())
5250    }
5251}
5252
5253impl<'de> ::serde::de::Deserialize<'de> for GroupFullInfo {
5254    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5255        // struct deserializer
5256        use serde::de::{MapAccess, Visitor};
5257        struct StructVisitor;
5258        impl<'de> Visitor<'de> for StructVisitor {
5259            type Value = GroupFullInfo;
5260            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5261                f.write_str("a GroupFullInfo struct")
5262            }
5263            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5264                GroupFullInfo::internal_deserialize(map)
5265            }
5266        }
5267        deserializer.deserialize_struct("GroupFullInfo", GROUP_FULL_INFO_FIELDS, StructVisitor)
5268    }
5269}
5270
5271impl ::serde::ser::Serialize for GroupFullInfo {
5272    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5273        // struct serializer
5274        use serde::ser::SerializeStruct;
5275        let mut s = serializer.serialize_struct("GroupFullInfo", 7)?;
5276        self.internal_serialize::<S>(&mut s)?;
5277        s.end()
5278    }
5279}
5280
5281// struct extends crate::types::team_common::GroupSummary
5282impl From<GroupFullInfo> for crate::types::team_common::GroupSummary {
5283    fn from(subtype: GroupFullInfo) -> Self {
5284        Self {
5285            group_name: subtype.group_name,
5286            group_id: subtype.group_id,
5287            group_management_type: subtype.group_management_type,
5288            group_external_id: subtype.group_external_id,
5289            member_count: subtype.member_count,
5290        }
5291    }
5292}
5293/// Profile of group member, and role in group.
5294#[derive(Debug, Clone, PartialEq, Eq)]
5295#[non_exhaustive] // structs may have more fields added in the future.
5296pub struct GroupMemberInfo {
5297    /// Profile of group member.
5298    pub profile: MemberProfile,
5299    /// The role that the user has in the group.
5300    pub access_type: GroupAccessType,
5301}
5302
5303impl GroupMemberInfo {
5304    pub fn new(profile: MemberProfile, access_type: GroupAccessType) -> Self {
5305        GroupMemberInfo {
5306            profile,
5307            access_type,
5308        }
5309    }
5310}
5311
5312const GROUP_MEMBER_INFO_FIELDS: &[&str] = &["profile",
5313                                            "access_type"];
5314impl GroupMemberInfo {
5315    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5316        map: V,
5317    ) -> Result<GroupMemberInfo, V::Error> {
5318        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5319    }
5320
5321    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5322        mut map: V,
5323        optional: bool,
5324    ) -> Result<Option<GroupMemberInfo>, V::Error> {
5325        let mut field_profile = None;
5326        let mut field_access_type = None;
5327        let mut nothing = true;
5328        while let Some(key) = map.next_key::<&str>()? {
5329            nothing = false;
5330            match key {
5331                "profile" => {
5332                    if field_profile.is_some() {
5333                        return Err(::serde::de::Error::duplicate_field("profile"));
5334                    }
5335                    field_profile = Some(map.next_value()?);
5336                }
5337                "access_type" => {
5338                    if field_access_type.is_some() {
5339                        return Err(::serde::de::Error::duplicate_field("access_type"));
5340                    }
5341                    field_access_type = Some(map.next_value()?);
5342                }
5343                _ => {
5344                    // unknown field allowed and ignored
5345                    map.next_value::<::serde_json::Value>()?;
5346                }
5347            }
5348        }
5349        if optional && nothing {
5350            return Ok(None);
5351        }
5352        let result = GroupMemberInfo {
5353            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
5354            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
5355        };
5356        Ok(Some(result))
5357    }
5358
5359    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5360        &self,
5361        s: &mut S::SerializeStruct,
5362    ) -> Result<(), S::Error> {
5363        use serde::ser::SerializeStruct;
5364        s.serialize_field("profile", &self.profile)?;
5365        s.serialize_field("access_type", &self.access_type)?;
5366        Ok(())
5367    }
5368}
5369
5370impl<'de> ::serde::de::Deserialize<'de> for GroupMemberInfo {
5371    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5372        // struct deserializer
5373        use serde::de::{MapAccess, Visitor};
5374        struct StructVisitor;
5375        impl<'de> Visitor<'de> for StructVisitor {
5376            type Value = GroupMemberInfo;
5377            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5378                f.write_str("a GroupMemberInfo struct")
5379            }
5380            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5381                GroupMemberInfo::internal_deserialize(map)
5382            }
5383        }
5384        deserializer.deserialize_struct("GroupMemberInfo", GROUP_MEMBER_INFO_FIELDS, StructVisitor)
5385    }
5386}
5387
5388impl ::serde::ser::Serialize for GroupMemberInfo {
5389    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5390        // struct serializer
5391        use serde::ser::SerializeStruct;
5392        let mut s = serializer.serialize_struct("GroupMemberInfo", 2)?;
5393        self.internal_serialize::<S>(&mut s)?;
5394        s.end()
5395    }
5396}
5397
5398/// Argument for selecting a group and a single user.
5399#[derive(Debug, Clone, PartialEq, Eq)]
5400#[non_exhaustive] // structs may have more fields added in the future.
5401pub struct GroupMemberSelector {
5402    /// Specify a group.
5403    pub group: GroupSelector,
5404    /// Identity of a user that is a member of `group`.
5405    pub user: UserSelectorArg,
5406}
5407
5408impl GroupMemberSelector {
5409    pub fn new(group: GroupSelector, user: UserSelectorArg) -> Self {
5410        GroupMemberSelector {
5411            group,
5412            user,
5413        }
5414    }
5415}
5416
5417const GROUP_MEMBER_SELECTOR_FIELDS: &[&str] = &["group",
5418                                                "user"];
5419impl GroupMemberSelector {
5420    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5421        map: V,
5422    ) -> Result<GroupMemberSelector, V::Error> {
5423        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5424    }
5425
5426    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5427        mut map: V,
5428        optional: bool,
5429    ) -> Result<Option<GroupMemberSelector>, V::Error> {
5430        let mut field_group = None;
5431        let mut field_user = None;
5432        let mut nothing = true;
5433        while let Some(key) = map.next_key::<&str>()? {
5434            nothing = false;
5435            match key {
5436                "group" => {
5437                    if field_group.is_some() {
5438                        return Err(::serde::de::Error::duplicate_field("group"));
5439                    }
5440                    field_group = Some(map.next_value()?);
5441                }
5442                "user" => {
5443                    if field_user.is_some() {
5444                        return Err(::serde::de::Error::duplicate_field("user"));
5445                    }
5446                    field_user = Some(map.next_value()?);
5447                }
5448                _ => {
5449                    // unknown field allowed and ignored
5450                    map.next_value::<::serde_json::Value>()?;
5451                }
5452            }
5453        }
5454        if optional && nothing {
5455            return Ok(None);
5456        }
5457        let result = GroupMemberSelector {
5458            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
5459            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
5460        };
5461        Ok(Some(result))
5462    }
5463
5464    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5465        &self,
5466        s: &mut S::SerializeStruct,
5467    ) -> Result<(), S::Error> {
5468        use serde::ser::SerializeStruct;
5469        s.serialize_field("group", &self.group)?;
5470        s.serialize_field("user", &self.user)?;
5471        Ok(())
5472    }
5473}
5474
5475impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSelector {
5476    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5477        // struct deserializer
5478        use serde::de::{MapAccess, Visitor};
5479        struct StructVisitor;
5480        impl<'de> Visitor<'de> for StructVisitor {
5481            type Value = GroupMemberSelector;
5482            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5483                f.write_str("a GroupMemberSelector struct")
5484            }
5485            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5486                GroupMemberSelector::internal_deserialize(map)
5487            }
5488        }
5489        deserializer.deserialize_struct("GroupMemberSelector", GROUP_MEMBER_SELECTOR_FIELDS, StructVisitor)
5490    }
5491}
5492
5493impl ::serde::ser::Serialize for GroupMemberSelector {
5494    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5495        // struct serializer
5496        use serde::ser::SerializeStruct;
5497        let mut s = serializer.serialize_struct("GroupMemberSelector", 2)?;
5498        self.internal_serialize::<S>(&mut s)?;
5499        s.end()
5500    }
5501}
5502
5503/// Error that can be raised when [`GroupMemberSelector`] is used, and the user is required to be a
5504/// member of the specified group.
5505#[derive(Debug, Clone, PartialEq, Eq)]
5506#[non_exhaustive] // variants may be added in the future
5507pub enum GroupMemberSelectorError {
5508    /// No matching group found. No groups match the specified group ID.
5509    GroupNotFound,
5510    /// This operation is not supported on system-managed groups.
5511    SystemManagedGroupDisallowed,
5512    /// The specified user is not a member of this group.
5513    MemberNotInGroup,
5514    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5515    /// typically indicates that this SDK version is out of date.
5516    Other,
5517}
5518
5519impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSelectorError {
5520    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5521        // union deserializer
5522        use serde::de::{self, MapAccess, Visitor};
5523        struct EnumVisitor;
5524        impl<'de> Visitor<'de> for EnumVisitor {
5525            type Value = GroupMemberSelectorError;
5526            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5527                f.write_str("a GroupMemberSelectorError structure")
5528            }
5529            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5530                let tag: &str = match map.next_key()? {
5531                    Some(".tag") => map.next_value()?,
5532                    _ => return Err(de::Error::missing_field(".tag"))
5533                };
5534                let value = match tag {
5535                    "group_not_found" => GroupMemberSelectorError::GroupNotFound,
5536                    "system_managed_group_disallowed" => GroupMemberSelectorError::SystemManagedGroupDisallowed,
5537                    "member_not_in_group" => GroupMemberSelectorError::MemberNotInGroup,
5538                    _ => GroupMemberSelectorError::Other,
5539                };
5540                crate::eat_json_fields(&mut map)?;
5541                Ok(value)
5542            }
5543        }
5544        const VARIANTS: &[&str] = &["group_not_found",
5545                                    "other",
5546                                    "system_managed_group_disallowed",
5547                                    "member_not_in_group"];
5548        deserializer.deserialize_struct("GroupMemberSelectorError", VARIANTS, EnumVisitor)
5549    }
5550}
5551
5552impl ::serde::ser::Serialize for GroupMemberSelectorError {
5553    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5554        // union serializer
5555        use serde::ser::SerializeStruct;
5556        match self {
5557            GroupMemberSelectorError::GroupNotFound => {
5558                // unit
5559                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5560                s.serialize_field(".tag", "group_not_found")?;
5561                s.end()
5562            }
5563            GroupMemberSelectorError::SystemManagedGroupDisallowed => {
5564                // unit
5565                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5566                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5567                s.end()
5568            }
5569            GroupMemberSelectorError::MemberNotInGroup => {
5570                // unit
5571                let mut s = serializer.serialize_struct("GroupMemberSelectorError", 1)?;
5572                s.serialize_field(".tag", "member_not_in_group")?;
5573                s.end()
5574            }
5575            GroupMemberSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5576        }
5577    }
5578}
5579
5580impl ::std::error::Error for GroupMemberSelectorError {
5581}
5582
5583impl ::std::fmt::Display for GroupMemberSelectorError {
5584    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5585        match self {
5586            GroupMemberSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5587            GroupMemberSelectorError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5588            GroupMemberSelectorError::MemberNotInGroup => f.write_str("The specified user is not a member of this group."),
5589            _ => write!(f, "{:?}", *self),
5590        }
5591    }
5592}
5593
5594// union extends GroupSelectorWithTeamGroupError
5595impl From<GroupSelectorWithTeamGroupError> for GroupMemberSelectorError {
5596    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
5597        match parent {
5598            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMemberSelectorError::GroupNotFound,
5599            GroupSelectorWithTeamGroupError::Other => GroupMemberSelectorError::Other,
5600            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMemberSelectorError::SystemManagedGroupDisallowed,
5601        }
5602    }
5603}
5604#[derive(Debug, Clone, PartialEq, Eq)]
5605#[non_exhaustive] // variants may be added in the future
5606pub enum GroupMemberSetAccessTypeError {
5607    /// No matching group found. No groups match the specified group ID.
5608    GroupNotFound,
5609    /// This operation is not supported on system-managed groups.
5610    SystemManagedGroupDisallowed,
5611    /// The specified user is not a member of this group.
5612    MemberNotInGroup,
5613    /// A company managed group cannot be managed by a user.
5614    UserCannotBeManagerOfCompanyManagedGroup,
5615    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5616    /// typically indicates that this SDK version is out of date.
5617    Other,
5618}
5619
5620impl<'de> ::serde::de::Deserialize<'de> for GroupMemberSetAccessTypeError {
5621    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5622        // union deserializer
5623        use serde::de::{self, MapAccess, Visitor};
5624        struct EnumVisitor;
5625        impl<'de> Visitor<'de> for EnumVisitor {
5626            type Value = GroupMemberSetAccessTypeError;
5627            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5628                f.write_str("a GroupMemberSetAccessTypeError structure")
5629            }
5630            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5631                let tag: &str = match map.next_key()? {
5632                    Some(".tag") => map.next_value()?,
5633                    _ => return Err(de::Error::missing_field(".tag"))
5634                };
5635                let value = match tag {
5636                    "group_not_found" => GroupMemberSetAccessTypeError::GroupNotFound,
5637                    "system_managed_group_disallowed" => GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed,
5638                    "member_not_in_group" => GroupMemberSetAccessTypeError::MemberNotInGroup,
5639                    "user_cannot_be_manager_of_company_managed_group" => GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup,
5640                    _ => GroupMemberSetAccessTypeError::Other,
5641                };
5642                crate::eat_json_fields(&mut map)?;
5643                Ok(value)
5644            }
5645        }
5646        const VARIANTS: &[&str] = &["group_not_found",
5647                                    "other",
5648                                    "system_managed_group_disallowed",
5649                                    "member_not_in_group",
5650                                    "user_cannot_be_manager_of_company_managed_group"];
5651        deserializer.deserialize_struct("GroupMemberSetAccessTypeError", VARIANTS, EnumVisitor)
5652    }
5653}
5654
5655impl ::serde::ser::Serialize for GroupMemberSetAccessTypeError {
5656    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5657        // union serializer
5658        use serde::ser::SerializeStruct;
5659        match self {
5660            GroupMemberSetAccessTypeError::GroupNotFound => {
5661                // unit
5662                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5663                s.serialize_field(".tag", "group_not_found")?;
5664                s.end()
5665            }
5666            GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed => {
5667                // unit
5668                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5669                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5670                s.end()
5671            }
5672            GroupMemberSetAccessTypeError::MemberNotInGroup => {
5673                // unit
5674                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5675                s.serialize_field(".tag", "member_not_in_group")?;
5676                s.end()
5677            }
5678            GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup => {
5679                // unit
5680                let mut s = serializer.serialize_struct("GroupMemberSetAccessTypeError", 1)?;
5681                s.serialize_field(".tag", "user_cannot_be_manager_of_company_managed_group")?;
5682                s.end()
5683            }
5684            GroupMemberSetAccessTypeError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5685        }
5686    }
5687}
5688
5689impl ::std::error::Error for GroupMemberSetAccessTypeError {
5690}
5691
5692impl ::std::fmt::Display for GroupMemberSetAccessTypeError {
5693    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5694        match self {
5695            GroupMemberSetAccessTypeError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
5696            GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
5697            GroupMemberSetAccessTypeError::MemberNotInGroup => f.write_str("The specified user is not a member of this group."),
5698            GroupMemberSetAccessTypeError::UserCannotBeManagerOfCompanyManagedGroup => f.write_str("A company managed group cannot be managed by a user."),
5699            _ => write!(f, "{:?}", *self),
5700        }
5701    }
5702}
5703
5704// union extends GroupMemberSelectorError
5705impl From<GroupMemberSelectorError> for GroupMemberSetAccessTypeError {
5706    fn from(parent: GroupMemberSelectorError) -> Self {
5707        match parent {
5708            GroupMemberSelectorError::GroupNotFound => GroupMemberSetAccessTypeError::GroupNotFound,
5709            GroupMemberSelectorError::Other => GroupMemberSetAccessTypeError::Other,
5710            GroupMemberSelectorError::SystemManagedGroupDisallowed => GroupMemberSetAccessTypeError::SystemManagedGroupDisallowed,
5711            GroupMemberSelectorError::MemberNotInGroup => GroupMemberSetAccessTypeError::MemberNotInGroup,
5712        }
5713    }
5714}
5715#[derive(Debug, Clone, PartialEq, Eq)]
5716#[non_exhaustive] // structs may have more fields added in the future.
5717pub struct GroupMembersAddArg {
5718    /// Group to which users will be added.
5719    pub group: GroupSelector,
5720    /// List of users to be added to the group.
5721    pub members: Vec<MemberAccess>,
5722    /// Whether to return the list of members in the group. Note that the default value will cause
5723    /// all the group members to be returned in the response. This may take a long time for large
5724    /// groups.
5725    pub return_members: bool,
5726}
5727
5728impl GroupMembersAddArg {
5729    pub fn new(group: GroupSelector, members: Vec<MemberAccess>) -> Self {
5730        GroupMembersAddArg {
5731            group,
5732            members,
5733            return_members: true,
5734        }
5735    }
5736
5737    pub fn with_return_members(mut self, value: bool) -> Self {
5738        self.return_members = value;
5739        self
5740    }
5741}
5742
5743const GROUP_MEMBERS_ADD_ARG_FIELDS: &[&str] = &["group",
5744                                                "members",
5745                                                "return_members"];
5746impl GroupMembersAddArg {
5747    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5748        map: V,
5749    ) -> Result<GroupMembersAddArg, V::Error> {
5750        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5751    }
5752
5753    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5754        mut map: V,
5755        optional: bool,
5756    ) -> Result<Option<GroupMembersAddArg>, V::Error> {
5757        let mut field_group = None;
5758        let mut field_members = None;
5759        let mut field_return_members = None;
5760        let mut nothing = true;
5761        while let Some(key) = map.next_key::<&str>()? {
5762            nothing = false;
5763            match key {
5764                "group" => {
5765                    if field_group.is_some() {
5766                        return Err(::serde::de::Error::duplicate_field("group"));
5767                    }
5768                    field_group = Some(map.next_value()?);
5769                }
5770                "members" => {
5771                    if field_members.is_some() {
5772                        return Err(::serde::de::Error::duplicate_field("members"));
5773                    }
5774                    field_members = Some(map.next_value()?);
5775                }
5776                "return_members" => {
5777                    if field_return_members.is_some() {
5778                        return Err(::serde::de::Error::duplicate_field("return_members"));
5779                    }
5780                    field_return_members = Some(map.next_value()?);
5781                }
5782                _ => {
5783                    // unknown field allowed and ignored
5784                    map.next_value::<::serde_json::Value>()?;
5785                }
5786            }
5787        }
5788        if optional && nothing {
5789            return Ok(None);
5790        }
5791        let result = GroupMembersAddArg {
5792            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
5793            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
5794            return_members: field_return_members.unwrap_or(true),
5795        };
5796        Ok(Some(result))
5797    }
5798
5799    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5800        &self,
5801        s: &mut S::SerializeStruct,
5802    ) -> Result<(), S::Error> {
5803        use serde::ser::SerializeStruct;
5804        s.serialize_field("group", &self.group)?;
5805        s.serialize_field("members", &self.members)?;
5806        if !self.return_members {
5807            s.serialize_field("return_members", &self.return_members)?;
5808        }
5809        Ok(())
5810    }
5811}
5812
5813impl<'de> ::serde::de::Deserialize<'de> for GroupMembersAddArg {
5814    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5815        // struct deserializer
5816        use serde::de::{MapAccess, Visitor};
5817        struct StructVisitor;
5818        impl<'de> Visitor<'de> for StructVisitor {
5819            type Value = GroupMembersAddArg;
5820            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5821                f.write_str("a GroupMembersAddArg struct")
5822            }
5823            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5824                GroupMembersAddArg::internal_deserialize(map)
5825            }
5826        }
5827        deserializer.deserialize_struct("GroupMembersAddArg", GROUP_MEMBERS_ADD_ARG_FIELDS, StructVisitor)
5828    }
5829}
5830
5831impl ::serde::ser::Serialize for GroupMembersAddArg {
5832    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5833        // struct serializer
5834        use serde::ser::SerializeStruct;
5835        let mut s = serializer.serialize_struct("GroupMembersAddArg", 3)?;
5836        self.internal_serialize::<S>(&mut s)?;
5837        s.end()
5838    }
5839}
5840
5841// struct extends IncludeMembersArg
5842impl From<GroupMembersAddArg> for IncludeMembersArg {
5843    fn from(subtype: GroupMembersAddArg) -> Self {
5844        Self {
5845            return_members: subtype.return_members,
5846        }
5847    }
5848}
5849#[derive(Debug, Clone, PartialEq, Eq)]
5850#[non_exhaustive] // variants may be added in the future
5851pub enum GroupMembersAddError {
5852    /// No matching group found. No groups match the specified group ID.
5853    GroupNotFound,
5854    /// This operation is not supported on system-managed groups.
5855    SystemManagedGroupDisallowed,
5856    /// You cannot add duplicate users. One or more of the members you are trying to add is already
5857    /// a member of the group.
5858    DuplicateUser,
5859    /// Group is not in this team. You cannot add members to a group that is outside of your team.
5860    GroupNotInTeam,
5861    /// These members are not part of your team. Currently, you cannot add members to a group if
5862    /// they are not part of your team, though this may change in a subsequent version. To add new
5863    /// members to your Dropbox Business team, use the [`members_add()`](crate::team::members_add)
5864    /// endpoint.
5865    MembersNotInTeam(Vec<String>),
5866    /// These users were not found in Dropbox.
5867    UsersNotFound(Vec<String>),
5868    /// A suspended user cannot be added to a group as [`GroupAccessType::Owner`].
5869    UserMustBeActiveToBeOwner,
5870    /// A company-managed group cannot be managed by a user.
5871    UserCannotBeManagerOfCompanyManagedGroup(Vec<String>),
5872    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5873    /// typically indicates that this SDK version is out of date.
5874    Other,
5875}
5876
5877impl<'de> ::serde::de::Deserialize<'de> for GroupMembersAddError {
5878    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5879        // union deserializer
5880        use serde::de::{self, MapAccess, Visitor};
5881        struct EnumVisitor;
5882        impl<'de> Visitor<'de> for EnumVisitor {
5883            type Value = GroupMembersAddError;
5884            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5885                f.write_str("a GroupMembersAddError structure")
5886            }
5887            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5888                let tag: &str = match map.next_key()? {
5889                    Some(".tag") => map.next_value()?,
5890                    _ => return Err(de::Error::missing_field(".tag"))
5891                };
5892                let value = match tag {
5893                    "group_not_found" => GroupMembersAddError::GroupNotFound,
5894                    "system_managed_group_disallowed" => GroupMembersAddError::SystemManagedGroupDisallowed,
5895                    "duplicate_user" => GroupMembersAddError::DuplicateUser,
5896                    "group_not_in_team" => GroupMembersAddError::GroupNotInTeam,
5897                    "members_not_in_team" => {
5898                        match map.next_key()? {
5899                            Some("members_not_in_team") => GroupMembersAddError::MembersNotInTeam(map.next_value()?),
5900                            None => return Err(de::Error::missing_field("members_not_in_team")),
5901                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5902                        }
5903                    }
5904                    "users_not_found" => {
5905                        match map.next_key()? {
5906                            Some("users_not_found") => GroupMembersAddError::UsersNotFound(map.next_value()?),
5907                            None => return Err(de::Error::missing_field("users_not_found")),
5908                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5909                        }
5910                    }
5911                    "user_must_be_active_to_be_owner" => GroupMembersAddError::UserMustBeActiveToBeOwner,
5912                    "user_cannot_be_manager_of_company_managed_group" => {
5913                        match map.next_key()? {
5914                            Some("user_cannot_be_manager_of_company_managed_group") => GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(map.next_value()?),
5915                            None => return Err(de::Error::missing_field("user_cannot_be_manager_of_company_managed_group")),
5916                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
5917                        }
5918                    }
5919                    _ => GroupMembersAddError::Other,
5920                };
5921                crate::eat_json_fields(&mut map)?;
5922                Ok(value)
5923            }
5924        }
5925        const VARIANTS: &[&str] = &["group_not_found",
5926                                    "other",
5927                                    "system_managed_group_disallowed",
5928                                    "duplicate_user",
5929                                    "group_not_in_team",
5930                                    "members_not_in_team",
5931                                    "users_not_found",
5932                                    "user_must_be_active_to_be_owner",
5933                                    "user_cannot_be_manager_of_company_managed_group"];
5934        deserializer.deserialize_struct("GroupMembersAddError", VARIANTS, EnumVisitor)
5935    }
5936}
5937
5938impl ::serde::ser::Serialize for GroupMembersAddError {
5939    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5940        // union serializer
5941        use serde::ser::SerializeStruct;
5942        match self {
5943            GroupMembersAddError::GroupNotFound => {
5944                // unit
5945                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5946                s.serialize_field(".tag", "group_not_found")?;
5947                s.end()
5948            }
5949            GroupMembersAddError::SystemManagedGroupDisallowed => {
5950                // unit
5951                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5952                s.serialize_field(".tag", "system_managed_group_disallowed")?;
5953                s.end()
5954            }
5955            GroupMembersAddError::DuplicateUser => {
5956                // unit
5957                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5958                s.serialize_field(".tag", "duplicate_user")?;
5959                s.end()
5960            }
5961            GroupMembersAddError::GroupNotInTeam => {
5962                // unit
5963                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5964                s.serialize_field(".tag", "group_not_in_team")?;
5965                s.end()
5966            }
5967            GroupMembersAddError::MembersNotInTeam(x) => {
5968                // primitive
5969                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5970                s.serialize_field(".tag", "members_not_in_team")?;
5971                s.serialize_field("members_not_in_team", x)?;
5972                s.end()
5973            }
5974            GroupMembersAddError::UsersNotFound(x) => {
5975                // primitive
5976                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5977                s.serialize_field(".tag", "users_not_found")?;
5978                s.serialize_field("users_not_found", x)?;
5979                s.end()
5980            }
5981            GroupMembersAddError::UserMustBeActiveToBeOwner => {
5982                // unit
5983                let mut s = serializer.serialize_struct("GroupMembersAddError", 1)?;
5984                s.serialize_field(".tag", "user_must_be_active_to_be_owner")?;
5985                s.end()
5986            }
5987            GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(x) => {
5988                // primitive
5989                let mut s = serializer.serialize_struct("GroupMembersAddError", 2)?;
5990                s.serialize_field(".tag", "user_cannot_be_manager_of_company_managed_group")?;
5991                s.serialize_field("user_cannot_be_manager_of_company_managed_group", x)?;
5992                s.end()
5993            }
5994            GroupMembersAddError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5995        }
5996    }
5997}
5998
5999impl ::std::error::Error for GroupMembersAddError {
6000}
6001
6002impl ::std::fmt::Display for GroupMembersAddError {
6003    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6004        match self {
6005            GroupMembersAddError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6006            GroupMembersAddError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6007            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."),
6008            GroupMembersAddError::GroupNotInTeam => f.write_str("Group is not in this team. You cannot add members to a group that is outside of your team."),
6009            GroupMembersAddError::MembersNotInTeam(inner) => write!(f, "members_not_in_team: {:?}", inner),
6010            GroupMembersAddError::UsersNotFound(inner) => write!(f, "These users were not found in Dropbox: {:?}", inner),
6011            GroupMembersAddError::UserCannotBeManagerOfCompanyManagedGroup(inner) => write!(f, "A company-managed group cannot be managed by a user: {:?}", inner),
6012            _ => write!(f, "{:?}", *self),
6013        }
6014    }
6015}
6016
6017// union extends GroupSelectorWithTeamGroupError
6018impl From<GroupSelectorWithTeamGroupError> for GroupMembersAddError {
6019    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
6020        match parent {
6021            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMembersAddError::GroupNotFound,
6022            GroupSelectorWithTeamGroupError::Other => GroupMembersAddError::Other,
6023            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMembersAddError::SystemManagedGroupDisallowed,
6024        }
6025    }
6026}
6027/// Result returned by [`groups_members_add()`](crate::team::groups_members_add) and
6028/// [`groups_members_remove()`](crate::team::groups_members_remove).
6029#[derive(Debug, Clone, PartialEq, Eq)]
6030#[non_exhaustive] // structs may have more fields added in the future.
6031pub struct GroupMembersChangeResult {
6032    /// The group info after member change operation has been performed.
6033    pub group_info: GroupFullInfo,
6034    /// For legacy purposes async_job_id will always return one space ' '. Formerly, it was an ID
6035    /// that was used to obtain the status of granting/revoking group-owned resources. It's no
6036    /// longer necessary because the async processing now happens automatically.
6037    pub async_job_id: crate::types::dbx_async::AsyncJobId,
6038}
6039
6040impl GroupMembersChangeResult {
6041    pub fn new(
6042        group_info: GroupFullInfo,
6043        async_job_id: crate::types::dbx_async::AsyncJobId,
6044    ) -> Self {
6045        GroupMembersChangeResult {
6046            group_info,
6047            async_job_id,
6048        }
6049    }
6050}
6051
6052const GROUP_MEMBERS_CHANGE_RESULT_FIELDS: &[&str] = &["group_info",
6053                                                      "async_job_id"];
6054impl GroupMembersChangeResult {
6055    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6056        map: V,
6057    ) -> Result<GroupMembersChangeResult, V::Error> {
6058        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6059    }
6060
6061    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6062        mut map: V,
6063        optional: bool,
6064    ) -> Result<Option<GroupMembersChangeResult>, V::Error> {
6065        let mut field_group_info = None;
6066        let mut field_async_job_id = None;
6067        let mut nothing = true;
6068        while let Some(key) = map.next_key::<&str>()? {
6069            nothing = false;
6070            match key {
6071                "group_info" => {
6072                    if field_group_info.is_some() {
6073                        return Err(::serde::de::Error::duplicate_field("group_info"));
6074                    }
6075                    field_group_info = Some(map.next_value()?);
6076                }
6077                "async_job_id" => {
6078                    if field_async_job_id.is_some() {
6079                        return Err(::serde::de::Error::duplicate_field("async_job_id"));
6080                    }
6081                    field_async_job_id = Some(map.next_value()?);
6082                }
6083                _ => {
6084                    // unknown field allowed and ignored
6085                    map.next_value::<::serde_json::Value>()?;
6086                }
6087            }
6088        }
6089        if optional && nothing {
6090            return Ok(None);
6091        }
6092        let result = GroupMembersChangeResult {
6093            group_info: field_group_info.ok_or_else(|| ::serde::de::Error::missing_field("group_info"))?,
6094            async_job_id: field_async_job_id.ok_or_else(|| ::serde::de::Error::missing_field("async_job_id"))?,
6095        };
6096        Ok(Some(result))
6097    }
6098
6099    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6100        &self,
6101        s: &mut S::SerializeStruct,
6102    ) -> Result<(), S::Error> {
6103        use serde::ser::SerializeStruct;
6104        s.serialize_field("group_info", &self.group_info)?;
6105        s.serialize_field("async_job_id", &self.async_job_id)?;
6106        Ok(())
6107    }
6108}
6109
6110impl<'de> ::serde::de::Deserialize<'de> for GroupMembersChangeResult {
6111    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6112        // struct deserializer
6113        use serde::de::{MapAccess, Visitor};
6114        struct StructVisitor;
6115        impl<'de> Visitor<'de> for StructVisitor {
6116            type Value = GroupMembersChangeResult;
6117            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6118                f.write_str("a GroupMembersChangeResult struct")
6119            }
6120            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6121                GroupMembersChangeResult::internal_deserialize(map)
6122            }
6123        }
6124        deserializer.deserialize_struct("GroupMembersChangeResult", GROUP_MEMBERS_CHANGE_RESULT_FIELDS, StructVisitor)
6125    }
6126}
6127
6128impl ::serde::ser::Serialize for GroupMembersChangeResult {
6129    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6130        // struct serializer
6131        use serde::ser::SerializeStruct;
6132        let mut s = serializer.serialize_struct("GroupMembersChangeResult", 2)?;
6133        self.internal_serialize::<S>(&mut s)?;
6134        s.end()
6135    }
6136}
6137
6138#[derive(Debug, Clone, PartialEq, Eq)]
6139#[non_exhaustive] // structs may have more fields added in the future.
6140pub struct GroupMembersRemoveArg {
6141    /// Group from which users will be removed.
6142    pub group: GroupSelector,
6143    /// List of users to be removed from the group.
6144    pub users: Vec<UserSelectorArg>,
6145    /// Whether to return the list of members in the group. Note that the default value will cause
6146    /// all the group members to be returned in the response. This may take a long time for large
6147    /// groups.
6148    pub return_members: bool,
6149}
6150
6151impl GroupMembersRemoveArg {
6152    pub fn new(group: GroupSelector, users: Vec<UserSelectorArg>) -> Self {
6153        GroupMembersRemoveArg {
6154            group,
6155            users,
6156            return_members: true,
6157        }
6158    }
6159
6160    pub fn with_return_members(mut self, value: bool) -> Self {
6161        self.return_members = value;
6162        self
6163    }
6164}
6165
6166const GROUP_MEMBERS_REMOVE_ARG_FIELDS: &[&str] = &["group",
6167                                                   "users",
6168                                                   "return_members"];
6169impl GroupMembersRemoveArg {
6170    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6171        map: V,
6172    ) -> Result<GroupMembersRemoveArg, V::Error> {
6173        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6174    }
6175
6176    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6177        mut map: V,
6178        optional: bool,
6179    ) -> Result<Option<GroupMembersRemoveArg>, V::Error> {
6180        let mut field_group = None;
6181        let mut field_users = None;
6182        let mut field_return_members = None;
6183        let mut nothing = true;
6184        while let Some(key) = map.next_key::<&str>()? {
6185            nothing = false;
6186            match key {
6187                "group" => {
6188                    if field_group.is_some() {
6189                        return Err(::serde::de::Error::duplicate_field("group"));
6190                    }
6191                    field_group = Some(map.next_value()?);
6192                }
6193                "users" => {
6194                    if field_users.is_some() {
6195                        return Err(::serde::de::Error::duplicate_field("users"));
6196                    }
6197                    field_users = Some(map.next_value()?);
6198                }
6199                "return_members" => {
6200                    if field_return_members.is_some() {
6201                        return Err(::serde::de::Error::duplicate_field("return_members"));
6202                    }
6203                    field_return_members = Some(map.next_value()?);
6204                }
6205                _ => {
6206                    // unknown field allowed and ignored
6207                    map.next_value::<::serde_json::Value>()?;
6208                }
6209            }
6210        }
6211        if optional && nothing {
6212            return Ok(None);
6213        }
6214        let result = GroupMembersRemoveArg {
6215            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6216            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
6217            return_members: field_return_members.unwrap_or(true),
6218        };
6219        Ok(Some(result))
6220    }
6221
6222    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6223        &self,
6224        s: &mut S::SerializeStruct,
6225    ) -> Result<(), S::Error> {
6226        use serde::ser::SerializeStruct;
6227        s.serialize_field("group", &self.group)?;
6228        s.serialize_field("users", &self.users)?;
6229        if !self.return_members {
6230            s.serialize_field("return_members", &self.return_members)?;
6231        }
6232        Ok(())
6233    }
6234}
6235
6236impl<'de> ::serde::de::Deserialize<'de> for GroupMembersRemoveArg {
6237    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6238        // struct deserializer
6239        use serde::de::{MapAccess, Visitor};
6240        struct StructVisitor;
6241        impl<'de> Visitor<'de> for StructVisitor {
6242            type Value = GroupMembersRemoveArg;
6243            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6244                f.write_str("a GroupMembersRemoveArg struct")
6245            }
6246            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6247                GroupMembersRemoveArg::internal_deserialize(map)
6248            }
6249        }
6250        deserializer.deserialize_struct("GroupMembersRemoveArg", GROUP_MEMBERS_REMOVE_ARG_FIELDS, StructVisitor)
6251    }
6252}
6253
6254impl ::serde::ser::Serialize for GroupMembersRemoveArg {
6255    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6256        // struct serializer
6257        use serde::ser::SerializeStruct;
6258        let mut s = serializer.serialize_struct("GroupMembersRemoveArg", 3)?;
6259        self.internal_serialize::<S>(&mut s)?;
6260        s.end()
6261    }
6262}
6263
6264// struct extends IncludeMembersArg
6265impl From<GroupMembersRemoveArg> for IncludeMembersArg {
6266    fn from(subtype: GroupMembersRemoveArg) -> Self {
6267        Self {
6268            return_members: subtype.return_members,
6269        }
6270    }
6271}
6272#[derive(Debug, Clone, PartialEq, Eq)]
6273#[non_exhaustive] // variants may be added in the future
6274pub enum GroupMembersRemoveError {
6275    /// No matching group found. No groups match the specified group ID.
6276    GroupNotFound,
6277    /// This operation is not supported on system-managed groups.
6278    SystemManagedGroupDisallowed,
6279    /// At least one of the specified users is not a member of the group.
6280    MemberNotInGroup,
6281    /// Group is not in this team. You cannot remove members from a group that is outside of your
6282    /// team.
6283    GroupNotInTeam,
6284    /// These members are not part of your team.
6285    MembersNotInTeam(Vec<String>),
6286    /// These users were not found in Dropbox.
6287    UsersNotFound(Vec<String>),
6288    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6289    /// typically indicates that this SDK version is out of date.
6290    Other,
6291}
6292
6293impl<'de> ::serde::de::Deserialize<'de> for GroupMembersRemoveError {
6294    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6295        // union deserializer
6296        use serde::de::{self, MapAccess, Visitor};
6297        struct EnumVisitor;
6298        impl<'de> Visitor<'de> for EnumVisitor {
6299            type Value = GroupMembersRemoveError;
6300            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6301                f.write_str("a GroupMembersRemoveError structure")
6302            }
6303            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6304                let tag: &str = match map.next_key()? {
6305                    Some(".tag") => map.next_value()?,
6306                    _ => return Err(de::Error::missing_field(".tag"))
6307                };
6308                let value = match tag {
6309                    "group_not_found" => GroupMembersRemoveError::GroupNotFound,
6310                    "system_managed_group_disallowed" => GroupMembersRemoveError::SystemManagedGroupDisallowed,
6311                    "member_not_in_group" => GroupMembersRemoveError::MemberNotInGroup,
6312                    "group_not_in_team" => GroupMembersRemoveError::GroupNotInTeam,
6313                    "members_not_in_team" => {
6314                        match map.next_key()? {
6315                            Some("members_not_in_team") => GroupMembersRemoveError::MembersNotInTeam(map.next_value()?),
6316                            None => return Err(de::Error::missing_field("members_not_in_team")),
6317                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6318                        }
6319                    }
6320                    "users_not_found" => {
6321                        match map.next_key()? {
6322                            Some("users_not_found") => GroupMembersRemoveError::UsersNotFound(map.next_value()?),
6323                            None => return Err(de::Error::missing_field("users_not_found")),
6324                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6325                        }
6326                    }
6327                    _ => GroupMembersRemoveError::Other,
6328                };
6329                crate::eat_json_fields(&mut map)?;
6330                Ok(value)
6331            }
6332        }
6333        const VARIANTS: &[&str] = &["group_not_found",
6334                                    "other",
6335                                    "system_managed_group_disallowed",
6336                                    "member_not_in_group",
6337                                    "group_not_in_team",
6338                                    "members_not_in_team",
6339                                    "users_not_found"];
6340        deserializer.deserialize_struct("GroupMembersRemoveError", VARIANTS, EnumVisitor)
6341    }
6342}
6343
6344impl ::serde::ser::Serialize for GroupMembersRemoveError {
6345    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6346        // union serializer
6347        use serde::ser::SerializeStruct;
6348        match self {
6349            GroupMembersRemoveError::GroupNotFound => {
6350                // unit
6351                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6352                s.serialize_field(".tag", "group_not_found")?;
6353                s.end()
6354            }
6355            GroupMembersRemoveError::SystemManagedGroupDisallowed => {
6356                // unit
6357                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6358                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6359                s.end()
6360            }
6361            GroupMembersRemoveError::MemberNotInGroup => {
6362                // unit
6363                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6364                s.serialize_field(".tag", "member_not_in_group")?;
6365                s.end()
6366            }
6367            GroupMembersRemoveError::GroupNotInTeam => {
6368                // unit
6369                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 1)?;
6370                s.serialize_field(".tag", "group_not_in_team")?;
6371                s.end()
6372            }
6373            GroupMembersRemoveError::MembersNotInTeam(x) => {
6374                // primitive
6375                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 2)?;
6376                s.serialize_field(".tag", "members_not_in_team")?;
6377                s.serialize_field("members_not_in_team", x)?;
6378                s.end()
6379            }
6380            GroupMembersRemoveError::UsersNotFound(x) => {
6381                // primitive
6382                let mut s = serializer.serialize_struct("GroupMembersRemoveError", 2)?;
6383                s.serialize_field(".tag", "users_not_found")?;
6384                s.serialize_field("users_not_found", x)?;
6385                s.end()
6386            }
6387            GroupMembersRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6388        }
6389    }
6390}
6391
6392impl ::std::error::Error for GroupMembersRemoveError {
6393}
6394
6395impl ::std::fmt::Display for GroupMembersRemoveError {
6396    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6397        match self {
6398            GroupMembersRemoveError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6399            GroupMembersRemoveError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6400            GroupMembersRemoveError::MemberNotInGroup => f.write_str("At least one of the specified users is not a member of the group."),
6401            GroupMembersRemoveError::GroupNotInTeam => f.write_str("Group is not in this team. You cannot remove members from a group that is outside of your team."),
6402            GroupMembersRemoveError::MembersNotInTeam(inner) => write!(f, "These members are not part of your team: {:?}", inner),
6403            GroupMembersRemoveError::UsersNotFound(inner) => write!(f, "These users were not found in Dropbox: {:?}", inner),
6404            _ => write!(f, "{:?}", *self),
6405        }
6406    }
6407}
6408
6409// union extends GroupMembersSelectorError
6410impl From<GroupMembersSelectorError> for GroupMembersRemoveError {
6411    fn from(parent: GroupMembersSelectorError) -> Self {
6412        match parent {
6413            GroupMembersSelectorError::GroupNotFound => GroupMembersRemoveError::GroupNotFound,
6414            GroupMembersSelectorError::Other => GroupMembersRemoveError::Other,
6415            GroupMembersSelectorError::SystemManagedGroupDisallowed => GroupMembersRemoveError::SystemManagedGroupDisallowed,
6416            GroupMembersSelectorError::MemberNotInGroup => GroupMembersRemoveError::MemberNotInGroup,
6417        }
6418    }
6419}
6420/// Argument for selecting a group and a list of users.
6421#[derive(Debug, Clone, PartialEq, Eq)]
6422#[non_exhaustive] // structs may have more fields added in the future.
6423pub struct GroupMembersSelector {
6424    /// Specify a group.
6425    pub group: GroupSelector,
6426    /// A list of users that are members of `group`.
6427    pub users: UsersSelectorArg,
6428}
6429
6430impl GroupMembersSelector {
6431    pub fn new(group: GroupSelector, users: UsersSelectorArg) -> Self {
6432        GroupMembersSelector {
6433            group,
6434            users,
6435        }
6436    }
6437}
6438
6439const GROUP_MEMBERS_SELECTOR_FIELDS: &[&str] = &["group",
6440                                                 "users"];
6441impl GroupMembersSelector {
6442    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6443        map: V,
6444    ) -> Result<GroupMembersSelector, V::Error> {
6445        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6446    }
6447
6448    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6449        mut map: V,
6450        optional: bool,
6451    ) -> Result<Option<GroupMembersSelector>, V::Error> {
6452        let mut field_group = None;
6453        let mut field_users = None;
6454        let mut nothing = true;
6455        while let Some(key) = map.next_key::<&str>()? {
6456            nothing = false;
6457            match key {
6458                "group" => {
6459                    if field_group.is_some() {
6460                        return Err(::serde::de::Error::duplicate_field("group"));
6461                    }
6462                    field_group = Some(map.next_value()?);
6463                }
6464                "users" => {
6465                    if field_users.is_some() {
6466                        return Err(::serde::de::Error::duplicate_field("users"));
6467                    }
6468                    field_users = Some(map.next_value()?);
6469                }
6470                _ => {
6471                    // unknown field allowed and ignored
6472                    map.next_value::<::serde_json::Value>()?;
6473                }
6474            }
6475        }
6476        if optional && nothing {
6477            return Ok(None);
6478        }
6479        let result = GroupMembersSelector {
6480            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6481            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
6482        };
6483        Ok(Some(result))
6484    }
6485
6486    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6487        &self,
6488        s: &mut S::SerializeStruct,
6489    ) -> Result<(), S::Error> {
6490        use serde::ser::SerializeStruct;
6491        s.serialize_field("group", &self.group)?;
6492        s.serialize_field("users", &self.users)?;
6493        Ok(())
6494    }
6495}
6496
6497impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSelector {
6498    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6499        // struct deserializer
6500        use serde::de::{MapAccess, Visitor};
6501        struct StructVisitor;
6502        impl<'de> Visitor<'de> for StructVisitor {
6503            type Value = GroupMembersSelector;
6504            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6505                f.write_str("a GroupMembersSelector struct")
6506            }
6507            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6508                GroupMembersSelector::internal_deserialize(map)
6509            }
6510        }
6511        deserializer.deserialize_struct("GroupMembersSelector", GROUP_MEMBERS_SELECTOR_FIELDS, StructVisitor)
6512    }
6513}
6514
6515impl ::serde::ser::Serialize for GroupMembersSelector {
6516    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6517        // struct serializer
6518        use serde::ser::SerializeStruct;
6519        let mut s = serializer.serialize_struct("GroupMembersSelector", 2)?;
6520        self.internal_serialize::<S>(&mut s)?;
6521        s.end()
6522    }
6523}
6524
6525/// Error that can be raised when [`GroupMembersSelector`] is used, and the users are required to be
6526/// members of the specified group.
6527#[derive(Debug, Clone, PartialEq, Eq)]
6528#[non_exhaustive] // variants may be added in the future
6529pub enum GroupMembersSelectorError {
6530    /// No matching group found. No groups match the specified group ID.
6531    GroupNotFound,
6532    /// This operation is not supported on system-managed groups.
6533    SystemManagedGroupDisallowed,
6534    /// At least one of the specified users is not a member of the group.
6535    MemberNotInGroup,
6536    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6537    /// typically indicates that this SDK version is out of date.
6538    Other,
6539}
6540
6541impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSelectorError {
6542    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6543        // union deserializer
6544        use serde::de::{self, MapAccess, Visitor};
6545        struct EnumVisitor;
6546        impl<'de> Visitor<'de> for EnumVisitor {
6547            type Value = GroupMembersSelectorError;
6548            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6549                f.write_str("a GroupMembersSelectorError structure")
6550            }
6551            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6552                let tag: &str = match map.next_key()? {
6553                    Some(".tag") => map.next_value()?,
6554                    _ => return Err(de::Error::missing_field(".tag"))
6555                };
6556                let value = match tag {
6557                    "group_not_found" => GroupMembersSelectorError::GroupNotFound,
6558                    "system_managed_group_disallowed" => GroupMembersSelectorError::SystemManagedGroupDisallowed,
6559                    "member_not_in_group" => GroupMembersSelectorError::MemberNotInGroup,
6560                    _ => GroupMembersSelectorError::Other,
6561                };
6562                crate::eat_json_fields(&mut map)?;
6563                Ok(value)
6564            }
6565        }
6566        const VARIANTS: &[&str] = &["group_not_found",
6567                                    "other",
6568                                    "system_managed_group_disallowed",
6569                                    "member_not_in_group"];
6570        deserializer.deserialize_struct("GroupMembersSelectorError", VARIANTS, EnumVisitor)
6571    }
6572}
6573
6574impl ::serde::ser::Serialize for GroupMembersSelectorError {
6575    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6576        // union serializer
6577        use serde::ser::SerializeStruct;
6578        match self {
6579            GroupMembersSelectorError::GroupNotFound => {
6580                // unit
6581                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6582                s.serialize_field(".tag", "group_not_found")?;
6583                s.end()
6584            }
6585            GroupMembersSelectorError::SystemManagedGroupDisallowed => {
6586                // unit
6587                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6588                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6589                s.end()
6590            }
6591            GroupMembersSelectorError::MemberNotInGroup => {
6592                // unit
6593                let mut s = serializer.serialize_struct("GroupMembersSelectorError", 1)?;
6594                s.serialize_field(".tag", "member_not_in_group")?;
6595                s.end()
6596            }
6597            GroupMembersSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6598        }
6599    }
6600}
6601
6602impl ::std::error::Error for GroupMembersSelectorError {
6603}
6604
6605impl ::std::fmt::Display for GroupMembersSelectorError {
6606    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6607        match self {
6608            GroupMembersSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6609            GroupMembersSelectorError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6610            GroupMembersSelectorError::MemberNotInGroup => f.write_str("At least one of the specified users is not a member of the group."),
6611            _ => write!(f, "{:?}", *self),
6612        }
6613    }
6614}
6615
6616// union extends GroupSelectorWithTeamGroupError
6617impl From<GroupSelectorWithTeamGroupError> for GroupMembersSelectorError {
6618    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
6619        match parent {
6620            GroupSelectorWithTeamGroupError::GroupNotFound => GroupMembersSelectorError::GroupNotFound,
6621            GroupSelectorWithTeamGroupError::Other => GroupMembersSelectorError::Other,
6622            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupMembersSelectorError::SystemManagedGroupDisallowed,
6623        }
6624    }
6625}
6626#[derive(Debug, Clone, PartialEq, Eq)]
6627#[non_exhaustive] // structs may have more fields added in the future.
6628pub struct GroupMembersSetAccessTypeArg {
6629    /// Specify a group.
6630    pub group: GroupSelector,
6631    /// Identity of a user that is a member of `group`.
6632    pub user: UserSelectorArg,
6633    /// New group access type the user will have.
6634    pub access_type: GroupAccessType,
6635    /// Whether to return the list of members in the group. Note that the default value will cause
6636    /// all the group members to be returned in the response. This may take a long time for large
6637    /// groups.
6638    pub return_members: bool,
6639}
6640
6641impl GroupMembersSetAccessTypeArg {
6642    pub fn new(group: GroupSelector, user: UserSelectorArg, access_type: GroupAccessType) -> Self {
6643        GroupMembersSetAccessTypeArg {
6644            group,
6645            user,
6646            access_type,
6647            return_members: true,
6648        }
6649    }
6650
6651    pub fn with_return_members(mut self, value: bool) -> Self {
6652        self.return_members = value;
6653        self
6654    }
6655}
6656
6657const GROUP_MEMBERS_SET_ACCESS_TYPE_ARG_FIELDS: &[&str] = &["group",
6658                                                            "user",
6659                                                            "access_type",
6660                                                            "return_members"];
6661impl GroupMembersSetAccessTypeArg {
6662    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
6663        map: V,
6664    ) -> Result<GroupMembersSetAccessTypeArg, V::Error> {
6665        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
6666    }
6667
6668    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
6669        mut map: V,
6670        optional: bool,
6671    ) -> Result<Option<GroupMembersSetAccessTypeArg>, V::Error> {
6672        let mut field_group = None;
6673        let mut field_user = None;
6674        let mut field_access_type = None;
6675        let mut field_return_members = None;
6676        let mut nothing = true;
6677        while let Some(key) = map.next_key::<&str>()? {
6678            nothing = false;
6679            match key {
6680                "group" => {
6681                    if field_group.is_some() {
6682                        return Err(::serde::de::Error::duplicate_field("group"));
6683                    }
6684                    field_group = Some(map.next_value()?);
6685                }
6686                "user" => {
6687                    if field_user.is_some() {
6688                        return Err(::serde::de::Error::duplicate_field("user"));
6689                    }
6690                    field_user = Some(map.next_value()?);
6691                }
6692                "access_type" => {
6693                    if field_access_type.is_some() {
6694                        return Err(::serde::de::Error::duplicate_field("access_type"));
6695                    }
6696                    field_access_type = Some(map.next_value()?);
6697                }
6698                "return_members" => {
6699                    if field_return_members.is_some() {
6700                        return Err(::serde::de::Error::duplicate_field("return_members"));
6701                    }
6702                    field_return_members = Some(map.next_value()?);
6703                }
6704                _ => {
6705                    // unknown field allowed and ignored
6706                    map.next_value::<::serde_json::Value>()?;
6707                }
6708            }
6709        }
6710        if optional && nothing {
6711            return Ok(None);
6712        }
6713        let result = GroupMembersSetAccessTypeArg {
6714            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
6715            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
6716            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
6717            return_members: field_return_members.unwrap_or(true),
6718        };
6719        Ok(Some(result))
6720    }
6721
6722    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
6723        &self,
6724        s: &mut S::SerializeStruct,
6725    ) -> Result<(), S::Error> {
6726        use serde::ser::SerializeStruct;
6727        s.serialize_field("group", &self.group)?;
6728        s.serialize_field("user", &self.user)?;
6729        s.serialize_field("access_type", &self.access_type)?;
6730        if !self.return_members {
6731            s.serialize_field("return_members", &self.return_members)?;
6732        }
6733        Ok(())
6734    }
6735}
6736
6737impl<'de> ::serde::de::Deserialize<'de> for GroupMembersSetAccessTypeArg {
6738    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6739        // struct deserializer
6740        use serde::de::{MapAccess, Visitor};
6741        struct StructVisitor;
6742        impl<'de> Visitor<'de> for StructVisitor {
6743            type Value = GroupMembersSetAccessTypeArg;
6744            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6745                f.write_str("a GroupMembersSetAccessTypeArg struct")
6746            }
6747            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
6748                GroupMembersSetAccessTypeArg::internal_deserialize(map)
6749            }
6750        }
6751        deserializer.deserialize_struct("GroupMembersSetAccessTypeArg", GROUP_MEMBERS_SET_ACCESS_TYPE_ARG_FIELDS, StructVisitor)
6752    }
6753}
6754
6755impl ::serde::ser::Serialize for GroupMembersSetAccessTypeArg {
6756    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6757        // struct serializer
6758        use serde::ser::SerializeStruct;
6759        let mut s = serializer.serialize_struct("GroupMembersSetAccessTypeArg", 4)?;
6760        self.internal_serialize::<S>(&mut s)?;
6761        s.end()
6762    }
6763}
6764
6765// struct extends GroupMemberSelector
6766impl From<GroupMembersSetAccessTypeArg> for GroupMemberSelector {
6767    fn from(subtype: GroupMembersSetAccessTypeArg) -> Self {
6768        Self {
6769            group: subtype.group,
6770            user: subtype.user,
6771        }
6772    }
6773}
6774/// Argument for selecting a single group, either by group_id or by external group ID.
6775#[derive(Debug, Clone, PartialEq, Eq)]
6776pub enum GroupSelector {
6777    /// Group ID.
6778    GroupId(crate::types::team_common::GroupId),
6779    /// External ID of the group.
6780    GroupExternalId(crate::types::team_common::GroupExternalId),
6781}
6782
6783impl<'de> ::serde::de::Deserialize<'de> for GroupSelector {
6784    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6785        // union deserializer
6786        use serde::de::{self, MapAccess, Visitor};
6787        struct EnumVisitor;
6788        impl<'de> Visitor<'de> for EnumVisitor {
6789            type Value = GroupSelector;
6790            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6791                f.write_str("a GroupSelector structure")
6792            }
6793            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6794                let tag: &str = match map.next_key()? {
6795                    Some(".tag") => map.next_value()?,
6796                    _ => return Err(de::Error::missing_field(".tag"))
6797                };
6798                let value = match tag {
6799                    "group_id" => {
6800                        match map.next_key()? {
6801                            Some("group_id") => GroupSelector::GroupId(map.next_value()?),
6802                            None => return Err(de::Error::missing_field("group_id")),
6803                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6804                        }
6805                    }
6806                    "group_external_id" => {
6807                        match map.next_key()? {
6808                            Some("group_external_id") => GroupSelector::GroupExternalId(map.next_value()?),
6809                            None => return Err(de::Error::missing_field("group_external_id")),
6810                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
6811                        }
6812                    }
6813                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
6814                };
6815                crate::eat_json_fields(&mut map)?;
6816                Ok(value)
6817            }
6818        }
6819        const VARIANTS: &[&str] = &["group_id",
6820                                    "group_external_id"];
6821        deserializer.deserialize_struct("GroupSelector", VARIANTS, EnumVisitor)
6822    }
6823}
6824
6825impl ::serde::ser::Serialize for GroupSelector {
6826    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6827        // union serializer
6828        use serde::ser::SerializeStruct;
6829        match self {
6830            GroupSelector::GroupId(x) => {
6831                // primitive
6832                let mut s = serializer.serialize_struct("GroupSelector", 2)?;
6833                s.serialize_field(".tag", "group_id")?;
6834                s.serialize_field("group_id", x)?;
6835                s.end()
6836            }
6837            GroupSelector::GroupExternalId(x) => {
6838                // primitive
6839                let mut s = serializer.serialize_struct("GroupSelector", 2)?;
6840                s.serialize_field(".tag", "group_external_id")?;
6841                s.serialize_field("group_external_id", x)?;
6842                s.end()
6843            }
6844        }
6845    }
6846}
6847
6848/// Error that can be raised when [`GroupSelector`] is used.
6849#[derive(Debug, Clone, PartialEq, Eq)]
6850#[non_exhaustive] // variants may be added in the future
6851pub enum GroupSelectorError {
6852    /// No matching group found. No groups match the specified group ID.
6853    GroupNotFound,
6854    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6855    /// typically indicates that this SDK version is out of date.
6856    Other,
6857}
6858
6859impl<'de> ::serde::de::Deserialize<'de> for GroupSelectorError {
6860    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6861        // union deserializer
6862        use serde::de::{self, MapAccess, Visitor};
6863        struct EnumVisitor;
6864        impl<'de> Visitor<'de> for EnumVisitor {
6865            type Value = GroupSelectorError;
6866            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6867                f.write_str("a GroupSelectorError structure")
6868            }
6869            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6870                let tag: &str = match map.next_key()? {
6871                    Some(".tag") => map.next_value()?,
6872                    _ => return Err(de::Error::missing_field(".tag"))
6873                };
6874                let value = match tag {
6875                    "group_not_found" => GroupSelectorError::GroupNotFound,
6876                    _ => GroupSelectorError::Other,
6877                };
6878                crate::eat_json_fields(&mut map)?;
6879                Ok(value)
6880            }
6881        }
6882        const VARIANTS: &[&str] = &["group_not_found",
6883                                    "other"];
6884        deserializer.deserialize_struct("GroupSelectorError", VARIANTS, EnumVisitor)
6885    }
6886}
6887
6888impl ::serde::ser::Serialize for GroupSelectorError {
6889    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6890        // union serializer
6891        use serde::ser::SerializeStruct;
6892        match self {
6893            GroupSelectorError::GroupNotFound => {
6894                // unit
6895                let mut s = serializer.serialize_struct("GroupSelectorError", 1)?;
6896                s.serialize_field(".tag", "group_not_found")?;
6897                s.end()
6898            }
6899            GroupSelectorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6900        }
6901    }
6902}
6903
6904impl ::std::error::Error for GroupSelectorError {
6905}
6906
6907impl ::std::fmt::Display for GroupSelectorError {
6908    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6909        match self {
6910            GroupSelectorError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6911            _ => write!(f, "{:?}", *self),
6912        }
6913    }
6914}
6915
6916/// Error that can be raised when [`GroupSelector`] is used and team groups are disallowed from
6917/// being used.
6918#[derive(Debug, Clone, PartialEq, Eq)]
6919#[non_exhaustive] // variants may be added in the future
6920pub enum GroupSelectorWithTeamGroupError {
6921    /// No matching group found. No groups match the specified group ID.
6922    GroupNotFound,
6923    /// This operation is not supported on system-managed groups.
6924    SystemManagedGroupDisallowed,
6925    /// Catch-all used for unrecognized values returned from the server. Encountering this value
6926    /// typically indicates that this SDK version is out of date.
6927    Other,
6928}
6929
6930impl<'de> ::serde::de::Deserialize<'de> for GroupSelectorWithTeamGroupError {
6931    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
6932        // union deserializer
6933        use serde::de::{self, MapAccess, Visitor};
6934        struct EnumVisitor;
6935        impl<'de> Visitor<'de> for EnumVisitor {
6936            type Value = GroupSelectorWithTeamGroupError;
6937            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6938                f.write_str("a GroupSelectorWithTeamGroupError structure")
6939            }
6940            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
6941                let tag: &str = match map.next_key()? {
6942                    Some(".tag") => map.next_value()?,
6943                    _ => return Err(de::Error::missing_field(".tag"))
6944                };
6945                let value = match tag {
6946                    "group_not_found" => GroupSelectorWithTeamGroupError::GroupNotFound,
6947                    "system_managed_group_disallowed" => GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed,
6948                    _ => GroupSelectorWithTeamGroupError::Other,
6949                };
6950                crate::eat_json_fields(&mut map)?;
6951                Ok(value)
6952            }
6953        }
6954        const VARIANTS: &[&str] = &["group_not_found",
6955                                    "other",
6956                                    "system_managed_group_disallowed"];
6957        deserializer.deserialize_struct("GroupSelectorWithTeamGroupError", VARIANTS, EnumVisitor)
6958    }
6959}
6960
6961impl ::serde::ser::Serialize for GroupSelectorWithTeamGroupError {
6962    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
6963        // union serializer
6964        use serde::ser::SerializeStruct;
6965        match self {
6966            GroupSelectorWithTeamGroupError::GroupNotFound => {
6967                // unit
6968                let mut s = serializer.serialize_struct("GroupSelectorWithTeamGroupError", 1)?;
6969                s.serialize_field(".tag", "group_not_found")?;
6970                s.end()
6971            }
6972            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => {
6973                // unit
6974                let mut s = serializer.serialize_struct("GroupSelectorWithTeamGroupError", 1)?;
6975                s.serialize_field(".tag", "system_managed_group_disallowed")?;
6976                s.end()
6977            }
6978            GroupSelectorWithTeamGroupError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
6979        }
6980    }
6981}
6982
6983impl ::std::error::Error for GroupSelectorWithTeamGroupError {
6984}
6985
6986impl ::std::fmt::Display for GroupSelectorWithTeamGroupError {
6987    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
6988        match self {
6989            GroupSelectorWithTeamGroupError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
6990            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
6991            _ => write!(f, "{:?}", *self),
6992        }
6993    }
6994}
6995
6996// union extends GroupSelectorError
6997impl From<GroupSelectorError> for GroupSelectorWithTeamGroupError {
6998    fn from(parent: GroupSelectorError) -> Self {
6999        match parent {
7000            GroupSelectorError::GroupNotFound => GroupSelectorWithTeamGroupError::GroupNotFound,
7001            GroupSelectorError::Other => GroupSelectorWithTeamGroupError::Other,
7002        }
7003    }
7004}
7005#[derive(Debug, Clone, PartialEq, Eq)]
7006#[non_exhaustive] // structs may have more fields added in the future.
7007pub struct GroupUpdateArgs {
7008    /// Specify a group.
7009    pub group: GroupSelector,
7010    /// Whether to return the list of members in the group. Note that the default value will cause
7011    /// all the group members to be returned in the response. This may take a long time for large
7012    /// groups.
7013    pub return_members: bool,
7014    /// Optional argument. Set group name to this if provided.
7015    pub new_group_name: Option<String>,
7016    /// Optional argument. New group external ID. If the argument is None, the group's external_id
7017    /// won't be updated. If the argument is empty string, the group's external id will be cleared.
7018    pub new_group_external_id: Option<crate::types::team_common::GroupExternalId>,
7019    /// Set new group management type, if provided.
7020    pub new_group_management_type: Option<crate::types::team_common::GroupManagementType>,
7021}
7022
7023impl GroupUpdateArgs {
7024    pub fn new(group: GroupSelector) -> Self {
7025        GroupUpdateArgs {
7026            group,
7027            return_members: true,
7028            new_group_name: None,
7029            new_group_external_id: None,
7030            new_group_management_type: None,
7031        }
7032    }
7033
7034    pub fn with_return_members(mut self, value: bool) -> Self {
7035        self.return_members = value;
7036        self
7037    }
7038
7039    pub fn with_new_group_name(mut self, value: String) -> Self {
7040        self.new_group_name = Some(value);
7041        self
7042    }
7043
7044    pub fn with_new_group_external_id(
7045        mut self,
7046        value: crate::types::team_common::GroupExternalId,
7047    ) -> Self {
7048        self.new_group_external_id = Some(value);
7049        self
7050    }
7051
7052    pub fn with_new_group_management_type(
7053        mut self,
7054        value: crate::types::team_common::GroupManagementType,
7055    ) -> Self {
7056        self.new_group_management_type = Some(value);
7057        self
7058    }
7059}
7060
7061const GROUP_UPDATE_ARGS_FIELDS: &[&str] = &["group",
7062                                            "return_members",
7063                                            "new_group_name",
7064                                            "new_group_external_id",
7065                                            "new_group_management_type"];
7066impl GroupUpdateArgs {
7067    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7068        map: V,
7069    ) -> Result<GroupUpdateArgs, V::Error> {
7070        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7071    }
7072
7073    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7074        mut map: V,
7075        optional: bool,
7076    ) -> Result<Option<GroupUpdateArgs>, V::Error> {
7077        let mut field_group = None;
7078        let mut field_return_members = None;
7079        let mut field_new_group_name = None;
7080        let mut field_new_group_external_id = None;
7081        let mut field_new_group_management_type = None;
7082        let mut nothing = true;
7083        while let Some(key) = map.next_key::<&str>()? {
7084            nothing = false;
7085            match key {
7086                "group" => {
7087                    if field_group.is_some() {
7088                        return Err(::serde::de::Error::duplicate_field("group"));
7089                    }
7090                    field_group = Some(map.next_value()?);
7091                }
7092                "return_members" => {
7093                    if field_return_members.is_some() {
7094                        return Err(::serde::de::Error::duplicate_field("return_members"));
7095                    }
7096                    field_return_members = Some(map.next_value()?);
7097                }
7098                "new_group_name" => {
7099                    if field_new_group_name.is_some() {
7100                        return Err(::serde::de::Error::duplicate_field("new_group_name"));
7101                    }
7102                    field_new_group_name = Some(map.next_value()?);
7103                }
7104                "new_group_external_id" => {
7105                    if field_new_group_external_id.is_some() {
7106                        return Err(::serde::de::Error::duplicate_field("new_group_external_id"));
7107                    }
7108                    field_new_group_external_id = Some(map.next_value()?);
7109                }
7110                "new_group_management_type" => {
7111                    if field_new_group_management_type.is_some() {
7112                        return Err(::serde::de::Error::duplicate_field("new_group_management_type"));
7113                    }
7114                    field_new_group_management_type = Some(map.next_value()?);
7115                }
7116                _ => {
7117                    // unknown field allowed and ignored
7118                    map.next_value::<::serde_json::Value>()?;
7119                }
7120            }
7121        }
7122        if optional && nothing {
7123            return Ok(None);
7124        }
7125        let result = GroupUpdateArgs {
7126            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7127            return_members: field_return_members.unwrap_or(true),
7128            new_group_name: field_new_group_name.and_then(Option::flatten),
7129            new_group_external_id: field_new_group_external_id.and_then(Option::flatten),
7130            new_group_management_type: field_new_group_management_type.and_then(Option::flatten),
7131        };
7132        Ok(Some(result))
7133    }
7134
7135    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7136        &self,
7137        s: &mut S::SerializeStruct,
7138    ) -> Result<(), S::Error> {
7139        use serde::ser::SerializeStruct;
7140        s.serialize_field("group", &self.group)?;
7141        if !self.return_members {
7142            s.serialize_field("return_members", &self.return_members)?;
7143        }
7144        if let Some(val) = &self.new_group_name {
7145            s.serialize_field("new_group_name", val)?;
7146        }
7147        if let Some(val) = &self.new_group_external_id {
7148            s.serialize_field("new_group_external_id", val)?;
7149        }
7150        if let Some(val) = &self.new_group_management_type {
7151            s.serialize_field("new_group_management_type", val)?;
7152        }
7153        Ok(())
7154    }
7155}
7156
7157impl<'de> ::serde::de::Deserialize<'de> for GroupUpdateArgs {
7158    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7159        // struct deserializer
7160        use serde::de::{MapAccess, Visitor};
7161        struct StructVisitor;
7162        impl<'de> Visitor<'de> for StructVisitor {
7163            type Value = GroupUpdateArgs;
7164            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7165                f.write_str("a GroupUpdateArgs struct")
7166            }
7167            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7168                GroupUpdateArgs::internal_deserialize(map)
7169            }
7170        }
7171        deserializer.deserialize_struct("GroupUpdateArgs", GROUP_UPDATE_ARGS_FIELDS, StructVisitor)
7172    }
7173}
7174
7175impl ::serde::ser::Serialize for GroupUpdateArgs {
7176    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7177        // struct serializer
7178        use serde::ser::SerializeStruct;
7179        let mut s = serializer.serialize_struct("GroupUpdateArgs", 5)?;
7180        self.internal_serialize::<S>(&mut s)?;
7181        s.end()
7182    }
7183}
7184
7185// struct extends IncludeMembersArg
7186impl From<GroupUpdateArgs> for IncludeMembersArg {
7187    fn from(subtype: GroupUpdateArgs) -> Self {
7188        Self {
7189            return_members: subtype.return_members,
7190        }
7191    }
7192}
7193#[derive(Debug, Clone, PartialEq, Eq)]
7194#[non_exhaustive] // variants may be added in the future
7195pub enum GroupUpdateError {
7196    /// No matching group found. No groups match the specified group ID.
7197    GroupNotFound,
7198    /// This operation is not supported on system-managed groups.
7199    SystemManagedGroupDisallowed,
7200    /// The requested group name is already being used by another group.
7201    GroupNameAlreadyUsed,
7202    /// Group name is empty or has invalid characters.
7203    GroupNameInvalid,
7204    /// The requested external ID is already being used by another group.
7205    ExternalIdAlreadyInUse,
7206    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7207    /// typically indicates that this SDK version is out of date.
7208    Other,
7209}
7210
7211impl<'de> ::serde::de::Deserialize<'de> for GroupUpdateError {
7212    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7213        // union deserializer
7214        use serde::de::{self, MapAccess, Visitor};
7215        struct EnumVisitor;
7216        impl<'de> Visitor<'de> for EnumVisitor {
7217            type Value = GroupUpdateError;
7218            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7219                f.write_str("a GroupUpdateError structure")
7220            }
7221            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7222                let tag: &str = match map.next_key()? {
7223                    Some(".tag") => map.next_value()?,
7224                    _ => return Err(de::Error::missing_field(".tag"))
7225                };
7226                let value = match tag {
7227                    "group_not_found" => GroupUpdateError::GroupNotFound,
7228                    "system_managed_group_disallowed" => GroupUpdateError::SystemManagedGroupDisallowed,
7229                    "group_name_already_used" => GroupUpdateError::GroupNameAlreadyUsed,
7230                    "group_name_invalid" => GroupUpdateError::GroupNameInvalid,
7231                    "external_id_already_in_use" => GroupUpdateError::ExternalIdAlreadyInUse,
7232                    _ => GroupUpdateError::Other,
7233                };
7234                crate::eat_json_fields(&mut map)?;
7235                Ok(value)
7236            }
7237        }
7238        const VARIANTS: &[&str] = &["group_not_found",
7239                                    "other",
7240                                    "system_managed_group_disallowed",
7241                                    "group_name_already_used",
7242                                    "group_name_invalid",
7243                                    "external_id_already_in_use"];
7244        deserializer.deserialize_struct("GroupUpdateError", VARIANTS, EnumVisitor)
7245    }
7246}
7247
7248impl ::serde::ser::Serialize for GroupUpdateError {
7249    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7250        // union serializer
7251        use serde::ser::SerializeStruct;
7252        match self {
7253            GroupUpdateError::GroupNotFound => {
7254                // unit
7255                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7256                s.serialize_field(".tag", "group_not_found")?;
7257                s.end()
7258            }
7259            GroupUpdateError::SystemManagedGroupDisallowed => {
7260                // unit
7261                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7262                s.serialize_field(".tag", "system_managed_group_disallowed")?;
7263                s.end()
7264            }
7265            GroupUpdateError::GroupNameAlreadyUsed => {
7266                // unit
7267                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7268                s.serialize_field(".tag", "group_name_already_used")?;
7269                s.end()
7270            }
7271            GroupUpdateError::GroupNameInvalid => {
7272                // unit
7273                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7274                s.serialize_field(".tag", "group_name_invalid")?;
7275                s.end()
7276            }
7277            GroupUpdateError::ExternalIdAlreadyInUse => {
7278                // unit
7279                let mut s = serializer.serialize_struct("GroupUpdateError", 1)?;
7280                s.serialize_field(".tag", "external_id_already_in_use")?;
7281                s.end()
7282            }
7283            GroupUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7284        }
7285    }
7286}
7287
7288impl ::std::error::Error for GroupUpdateError {
7289}
7290
7291impl ::std::fmt::Display for GroupUpdateError {
7292    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7293        match self {
7294            GroupUpdateError::GroupNotFound => f.write_str("No matching group found. No groups match the specified group ID."),
7295            GroupUpdateError::SystemManagedGroupDisallowed => f.write_str("This operation is not supported on system-managed groups."),
7296            GroupUpdateError::GroupNameAlreadyUsed => f.write_str("The requested group name is already being used by another group."),
7297            GroupUpdateError::GroupNameInvalid => f.write_str("Group name is empty or has invalid characters."),
7298            GroupUpdateError::ExternalIdAlreadyInUse => f.write_str("The requested external ID is already being used by another group."),
7299            _ => write!(f, "{:?}", *self),
7300        }
7301    }
7302}
7303
7304// union extends GroupSelectorWithTeamGroupError
7305impl From<GroupSelectorWithTeamGroupError> for GroupUpdateError {
7306    fn from(parent: GroupSelectorWithTeamGroupError) -> Self {
7307        match parent {
7308            GroupSelectorWithTeamGroupError::GroupNotFound => GroupUpdateError::GroupNotFound,
7309            GroupSelectorWithTeamGroupError::Other => GroupUpdateError::Other,
7310            GroupSelectorWithTeamGroupError::SystemManagedGroupDisallowed => GroupUpdateError::SystemManagedGroupDisallowed,
7311        }
7312    }
7313}
7314#[derive(Debug, Clone, PartialEq, Eq)]
7315#[non_exhaustive] // variants may be added in the future
7316pub enum GroupsGetInfoError {
7317    /// The group is not on your team.
7318    GroupNotOnTeam,
7319    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7320    /// typically indicates that this SDK version is out of date.
7321    Other,
7322}
7323
7324impl<'de> ::serde::de::Deserialize<'de> for GroupsGetInfoError {
7325    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7326        // union deserializer
7327        use serde::de::{self, MapAccess, Visitor};
7328        struct EnumVisitor;
7329        impl<'de> Visitor<'de> for EnumVisitor {
7330            type Value = GroupsGetInfoError;
7331            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7332                f.write_str("a GroupsGetInfoError structure")
7333            }
7334            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7335                let tag: &str = match map.next_key()? {
7336                    Some(".tag") => map.next_value()?,
7337                    _ => return Err(de::Error::missing_field(".tag"))
7338                };
7339                let value = match tag {
7340                    "group_not_on_team" => GroupsGetInfoError::GroupNotOnTeam,
7341                    _ => GroupsGetInfoError::Other,
7342                };
7343                crate::eat_json_fields(&mut map)?;
7344                Ok(value)
7345            }
7346        }
7347        const VARIANTS: &[&str] = &["group_not_on_team",
7348                                    "other"];
7349        deserializer.deserialize_struct("GroupsGetInfoError", VARIANTS, EnumVisitor)
7350    }
7351}
7352
7353impl ::serde::ser::Serialize for GroupsGetInfoError {
7354    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7355        // union serializer
7356        use serde::ser::SerializeStruct;
7357        match self {
7358            GroupsGetInfoError::GroupNotOnTeam => {
7359                // unit
7360                let mut s = serializer.serialize_struct("GroupsGetInfoError", 1)?;
7361                s.serialize_field(".tag", "group_not_on_team")?;
7362                s.end()
7363            }
7364            GroupsGetInfoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7365        }
7366    }
7367}
7368
7369impl ::std::error::Error for GroupsGetInfoError {
7370}
7371
7372impl ::std::fmt::Display for GroupsGetInfoError {
7373    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7374        match self {
7375            GroupsGetInfoError::GroupNotOnTeam => f.write_str("The group is not on your team."),
7376            _ => write!(f, "{:?}", *self),
7377        }
7378    }
7379}
7380
7381#[derive(Debug, Clone, PartialEq, Eq)]
7382pub enum GroupsGetInfoItem {
7383    /// An ID that was provided as a parameter to
7384    /// [`groups_get_info()`](crate::team::groups_get_info), and did not match a corresponding
7385    /// group. The ID can be a group ID, or an external ID, depending on how the method was called.
7386    IdNotFound(String),
7387    /// Info about a group.
7388    GroupInfo(GroupFullInfo),
7389}
7390
7391impl<'de> ::serde::de::Deserialize<'de> for GroupsGetInfoItem {
7392    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7393        // union deserializer
7394        use serde::de::{self, MapAccess, Visitor};
7395        struct EnumVisitor;
7396        impl<'de> Visitor<'de> for EnumVisitor {
7397            type Value = GroupsGetInfoItem;
7398            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7399                f.write_str("a GroupsGetInfoItem structure")
7400            }
7401            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7402                let tag: &str = match map.next_key()? {
7403                    Some(".tag") => map.next_value()?,
7404                    _ => return Err(de::Error::missing_field(".tag"))
7405                };
7406                let value = match tag {
7407                    "id_not_found" => {
7408                        match map.next_key()? {
7409                            Some("id_not_found") => GroupsGetInfoItem::IdNotFound(map.next_value()?),
7410                            None => return Err(de::Error::missing_field("id_not_found")),
7411                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
7412                        }
7413                    }
7414                    "group_info" => GroupsGetInfoItem::GroupInfo(GroupFullInfo::internal_deserialize(&mut map)?),
7415                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
7416                };
7417                crate::eat_json_fields(&mut map)?;
7418                Ok(value)
7419            }
7420        }
7421        const VARIANTS: &[&str] = &["id_not_found",
7422                                    "group_info"];
7423        deserializer.deserialize_struct("GroupsGetInfoItem", VARIANTS, EnumVisitor)
7424    }
7425}
7426
7427impl ::serde::ser::Serialize for GroupsGetInfoItem {
7428    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7429        // union serializer
7430        use serde::ser::SerializeStruct;
7431        match self {
7432            GroupsGetInfoItem::IdNotFound(x) => {
7433                // primitive
7434                let mut s = serializer.serialize_struct("GroupsGetInfoItem", 2)?;
7435                s.serialize_field(".tag", "id_not_found")?;
7436                s.serialize_field("id_not_found", x)?;
7437                s.end()
7438            }
7439            GroupsGetInfoItem::GroupInfo(x) => {
7440                // struct
7441                let mut s = serializer.serialize_struct("GroupsGetInfoItem", 8)?;
7442                s.serialize_field(".tag", "group_info")?;
7443                x.internal_serialize::<S>(&mut s)?;
7444                s.end()
7445            }
7446        }
7447    }
7448}
7449
7450#[derive(Debug, Clone, PartialEq, Eq)]
7451#[non_exhaustive] // structs may have more fields added in the future.
7452pub struct GroupsListArg {
7453    /// Number of results to return per call.
7454    pub limit: u32,
7455}
7456
7457impl Default for GroupsListArg {
7458    fn default() -> Self {
7459        GroupsListArg {
7460            limit: 1000,
7461        }
7462    }
7463}
7464
7465impl GroupsListArg {
7466    pub fn with_limit(mut self, value: u32) -> Self {
7467        self.limit = value;
7468        self
7469    }
7470}
7471
7472const GROUPS_LIST_ARG_FIELDS: &[&str] = &["limit"];
7473impl GroupsListArg {
7474    // no _opt deserializer
7475    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7476        mut map: V,
7477    ) -> Result<GroupsListArg, V::Error> {
7478        let mut field_limit = None;
7479        while let Some(key) = map.next_key::<&str>()? {
7480            match key {
7481                "limit" => {
7482                    if field_limit.is_some() {
7483                        return Err(::serde::de::Error::duplicate_field("limit"));
7484                    }
7485                    field_limit = Some(map.next_value()?);
7486                }
7487                _ => {
7488                    // unknown field allowed and ignored
7489                    map.next_value::<::serde_json::Value>()?;
7490                }
7491            }
7492        }
7493        let result = GroupsListArg {
7494            limit: field_limit.unwrap_or(1000),
7495        };
7496        Ok(result)
7497    }
7498
7499    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7500        &self,
7501        s: &mut S::SerializeStruct,
7502    ) -> Result<(), S::Error> {
7503        use serde::ser::SerializeStruct;
7504        if self.limit != 1000 {
7505            s.serialize_field("limit", &self.limit)?;
7506        }
7507        Ok(())
7508    }
7509}
7510
7511impl<'de> ::serde::de::Deserialize<'de> for GroupsListArg {
7512    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7513        // struct deserializer
7514        use serde::de::{MapAccess, Visitor};
7515        struct StructVisitor;
7516        impl<'de> Visitor<'de> for StructVisitor {
7517            type Value = GroupsListArg;
7518            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7519                f.write_str("a GroupsListArg struct")
7520            }
7521            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7522                GroupsListArg::internal_deserialize(map)
7523            }
7524        }
7525        deserializer.deserialize_struct("GroupsListArg", GROUPS_LIST_ARG_FIELDS, StructVisitor)
7526    }
7527}
7528
7529impl ::serde::ser::Serialize for GroupsListArg {
7530    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7531        // struct serializer
7532        use serde::ser::SerializeStruct;
7533        let mut s = serializer.serialize_struct("GroupsListArg", 1)?;
7534        self.internal_serialize::<S>(&mut s)?;
7535        s.end()
7536    }
7537}
7538
7539#[derive(Debug, Clone, PartialEq, Eq)]
7540#[non_exhaustive] // structs may have more fields added in the future.
7541pub struct GroupsListContinueArg {
7542    /// Indicates from what point to get the next set of groups.
7543    pub cursor: String,
7544}
7545
7546impl GroupsListContinueArg {
7547    pub fn new(cursor: String) -> Self {
7548        GroupsListContinueArg {
7549            cursor,
7550        }
7551    }
7552}
7553
7554const GROUPS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
7555impl GroupsListContinueArg {
7556    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7557        map: V,
7558    ) -> Result<GroupsListContinueArg, V::Error> {
7559        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7560    }
7561
7562    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7563        mut map: V,
7564        optional: bool,
7565    ) -> Result<Option<GroupsListContinueArg>, V::Error> {
7566        let mut field_cursor = None;
7567        let mut nothing = true;
7568        while let Some(key) = map.next_key::<&str>()? {
7569            nothing = false;
7570            match key {
7571                "cursor" => {
7572                    if field_cursor.is_some() {
7573                        return Err(::serde::de::Error::duplicate_field("cursor"));
7574                    }
7575                    field_cursor = Some(map.next_value()?);
7576                }
7577                _ => {
7578                    // unknown field allowed and ignored
7579                    map.next_value::<::serde_json::Value>()?;
7580                }
7581            }
7582        }
7583        if optional && nothing {
7584            return Ok(None);
7585        }
7586        let result = GroupsListContinueArg {
7587            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7588        };
7589        Ok(Some(result))
7590    }
7591
7592    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7593        &self,
7594        s: &mut S::SerializeStruct,
7595    ) -> Result<(), S::Error> {
7596        use serde::ser::SerializeStruct;
7597        s.serialize_field("cursor", &self.cursor)?;
7598        Ok(())
7599    }
7600}
7601
7602impl<'de> ::serde::de::Deserialize<'de> for GroupsListContinueArg {
7603    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7604        // struct deserializer
7605        use serde::de::{MapAccess, Visitor};
7606        struct StructVisitor;
7607        impl<'de> Visitor<'de> for StructVisitor {
7608            type Value = GroupsListContinueArg;
7609            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7610                f.write_str("a GroupsListContinueArg struct")
7611            }
7612            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7613                GroupsListContinueArg::internal_deserialize(map)
7614            }
7615        }
7616        deserializer.deserialize_struct("GroupsListContinueArg", GROUPS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
7617    }
7618}
7619
7620impl ::serde::ser::Serialize for GroupsListContinueArg {
7621    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7622        // struct serializer
7623        use serde::ser::SerializeStruct;
7624        let mut s = serializer.serialize_struct("GroupsListContinueArg", 1)?;
7625        self.internal_serialize::<S>(&mut s)?;
7626        s.end()
7627    }
7628}
7629
7630#[derive(Debug, Clone, PartialEq, Eq)]
7631#[non_exhaustive] // variants may be added in the future
7632pub enum GroupsListContinueError {
7633    /// The cursor is invalid.
7634    InvalidCursor,
7635    /// Catch-all used for unrecognized values returned from the server. Encountering this value
7636    /// typically indicates that this SDK version is out of date.
7637    Other,
7638}
7639
7640impl<'de> ::serde::de::Deserialize<'de> for GroupsListContinueError {
7641    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7642        // union deserializer
7643        use serde::de::{self, MapAccess, Visitor};
7644        struct EnumVisitor;
7645        impl<'de> Visitor<'de> for EnumVisitor {
7646            type Value = GroupsListContinueError;
7647            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7648                f.write_str("a GroupsListContinueError structure")
7649            }
7650            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
7651                let tag: &str = match map.next_key()? {
7652                    Some(".tag") => map.next_value()?,
7653                    _ => return Err(de::Error::missing_field(".tag"))
7654                };
7655                let value = match tag {
7656                    "invalid_cursor" => GroupsListContinueError::InvalidCursor,
7657                    _ => GroupsListContinueError::Other,
7658                };
7659                crate::eat_json_fields(&mut map)?;
7660                Ok(value)
7661            }
7662        }
7663        const VARIANTS: &[&str] = &["invalid_cursor",
7664                                    "other"];
7665        deserializer.deserialize_struct("GroupsListContinueError", VARIANTS, EnumVisitor)
7666    }
7667}
7668
7669impl ::serde::ser::Serialize for GroupsListContinueError {
7670    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7671        // union serializer
7672        use serde::ser::SerializeStruct;
7673        match self {
7674            GroupsListContinueError::InvalidCursor => {
7675                // unit
7676                let mut s = serializer.serialize_struct("GroupsListContinueError", 1)?;
7677                s.serialize_field(".tag", "invalid_cursor")?;
7678                s.end()
7679            }
7680            GroupsListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
7681        }
7682    }
7683}
7684
7685impl ::std::error::Error for GroupsListContinueError {
7686}
7687
7688impl ::std::fmt::Display for GroupsListContinueError {
7689    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7690        match self {
7691            GroupsListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
7692            _ => write!(f, "{:?}", *self),
7693        }
7694    }
7695}
7696
7697#[derive(Debug, Clone, PartialEq, Eq)]
7698#[non_exhaustive] // structs may have more fields added in the future.
7699pub struct GroupsListResult {
7700    pub groups: Vec<crate::types::team_common::GroupSummary>,
7701    /// Pass the cursor into [`groups_list_continue()`](crate::team::groups_list_continue) to obtain
7702    /// the additional groups.
7703    pub cursor: String,
7704    /// Is true if there are additional groups that have not been returned yet. An additional call
7705    /// to [`groups_list_continue()`](crate::team::groups_list_continue) can retrieve them.
7706    pub has_more: bool,
7707}
7708
7709impl GroupsListResult {
7710    pub fn new(
7711        groups: Vec<crate::types::team_common::GroupSummary>,
7712        cursor: String,
7713        has_more: bool,
7714    ) -> Self {
7715        GroupsListResult {
7716            groups,
7717            cursor,
7718            has_more,
7719        }
7720    }
7721}
7722
7723const GROUPS_LIST_RESULT_FIELDS: &[&str] = &["groups",
7724                                             "cursor",
7725                                             "has_more"];
7726impl GroupsListResult {
7727    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7728        map: V,
7729    ) -> Result<GroupsListResult, V::Error> {
7730        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7731    }
7732
7733    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7734        mut map: V,
7735        optional: bool,
7736    ) -> Result<Option<GroupsListResult>, V::Error> {
7737        let mut field_groups = None;
7738        let mut field_cursor = None;
7739        let mut field_has_more = None;
7740        let mut nothing = true;
7741        while let Some(key) = map.next_key::<&str>()? {
7742            nothing = false;
7743            match key {
7744                "groups" => {
7745                    if field_groups.is_some() {
7746                        return Err(::serde::de::Error::duplicate_field("groups"));
7747                    }
7748                    field_groups = Some(map.next_value()?);
7749                }
7750                "cursor" => {
7751                    if field_cursor.is_some() {
7752                        return Err(::serde::de::Error::duplicate_field("cursor"));
7753                    }
7754                    field_cursor = Some(map.next_value()?);
7755                }
7756                "has_more" => {
7757                    if field_has_more.is_some() {
7758                        return Err(::serde::de::Error::duplicate_field("has_more"));
7759                    }
7760                    field_has_more = Some(map.next_value()?);
7761                }
7762                _ => {
7763                    // unknown field allowed and ignored
7764                    map.next_value::<::serde_json::Value>()?;
7765                }
7766            }
7767        }
7768        if optional && nothing {
7769            return Ok(None);
7770        }
7771        let result = GroupsListResult {
7772            groups: field_groups.ok_or_else(|| ::serde::de::Error::missing_field("groups"))?,
7773            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7774            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
7775        };
7776        Ok(Some(result))
7777    }
7778
7779    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7780        &self,
7781        s: &mut S::SerializeStruct,
7782    ) -> Result<(), S::Error> {
7783        use serde::ser::SerializeStruct;
7784        s.serialize_field("groups", &self.groups)?;
7785        s.serialize_field("cursor", &self.cursor)?;
7786        s.serialize_field("has_more", &self.has_more)?;
7787        Ok(())
7788    }
7789}
7790
7791impl<'de> ::serde::de::Deserialize<'de> for GroupsListResult {
7792    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7793        // struct deserializer
7794        use serde::de::{MapAccess, Visitor};
7795        struct StructVisitor;
7796        impl<'de> Visitor<'de> for StructVisitor {
7797            type Value = GroupsListResult;
7798            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7799                f.write_str("a GroupsListResult struct")
7800            }
7801            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7802                GroupsListResult::internal_deserialize(map)
7803            }
7804        }
7805        deserializer.deserialize_struct("GroupsListResult", GROUPS_LIST_RESULT_FIELDS, StructVisitor)
7806    }
7807}
7808
7809impl ::serde::ser::Serialize for GroupsListResult {
7810    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7811        // struct serializer
7812        use serde::ser::SerializeStruct;
7813        let mut s = serializer.serialize_struct("GroupsListResult", 3)?;
7814        self.internal_serialize::<S>(&mut s)?;
7815        s.end()
7816    }
7817}
7818
7819#[derive(Debug, Clone, PartialEq, Eq)]
7820#[non_exhaustive] // structs may have more fields added in the future.
7821pub struct GroupsMembersListArg {
7822    /// The group whose members are to be listed.
7823    pub group: GroupSelector,
7824    /// Number of results to return per call.
7825    pub limit: u32,
7826}
7827
7828impl GroupsMembersListArg {
7829    pub fn new(group: GroupSelector) -> Self {
7830        GroupsMembersListArg {
7831            group,
7832            limit: 1000,
7833        }
7834    }
7835
7836    pub fn with_limit(mut self, value: u32) -> Self {
7837        self.limit = value;
7838        self
7839    }
7840}
7841
7842const GROUPS_MEMBERS_LIST_ARG_FIELDS: &[&str] = &["group",
7843                                                  "limit"];
7844impl GroupsMembersListArg {
7845    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7846        map: V,
7847    ) -> Result<GroupsMembersListArg, V::Error> {
7848        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7849    }
7850
7851    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7852        mut map: V,
7853        optional: bool,
7854    ) -> Result<Option<GroupsMembersListArg>, V::Error> {
7855        let mut field_group = None;
7856        let mut field_limit = None;
7857        let mut nothing = true;
7858        while let Some(key) = map.next_key::<&str>()? {
7859            nothing = false;
7860            match key {
7861                "group" => {
7862                    if field_group.is_some() {
7863                        return Err(::serde::de::Error::duplicate_field("group"));
7864                    }
7865                    field_group = Some(map.next_value()?);
7866                }
7867                "limit" => {
7868                    if field_limit.is_some() {
7869                        return Err(::serde::de::Error::duplicate_field("limit"));
7870                    }
7871                    field_limit = Some(map.next_value()?);
7872                }
7873                _ => {
7874                    // unknown field allowed and ignored
7875                    map.next_value::<::serde_json::Value>()?;
7876                }
7877            }
7878        }
7879        if optional && nothing {
7880            return Ok(None);
7881        }
7882        let result = GroupsMembersListArg {
7883            group: field_group.ok_or_else(|| ::serde::de::Error::missing_field("group"))?,
7884            limit: field_limit.unwrap_or(1000),
7885        };
7886        Ok(Some(result))
7887    }
7888
7889    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7890        &self,
7891        s: &mut S::SerializeStruct,
7892    ) -> Result<(), S::Error> {
7893        use serde::ser::SerializeStruct;
7894        s.serialize_field("group", &self.group)?;
7895        if self.limit != 1000 {
7896            s.serialize_field("limit", &self.limit)?;
7897        }
7898        Ok(())
7899    }
7900}
7901
7902impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListArg {
7903    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7904        // struct deserializer
7905        use serde::de::{MapAccess, Visitor};
7906        struct StructVisitor;
7907        impl<'de> Visitor<'de> for StructVisitor {
7908            type Value = GroupsMembersListArg;
7909            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
7910                f.write_str("a GroupsMembersListArg struct")
7911            }
7912            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
7913                GroupsMembersListArg::internal_deserialize(map)
7914            }
7915        }
7916        deserializer.deserialize_struct("GroupsMembersListArg", GROUPS_MEMBERS_LIST_ARG_FIELDS, StructVisitor)
7917    }
7918}
7919
7920impl ::serde::ser::Serialize for GroupsMembersListArg {
7921    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
7922        // struct serializer
7923        use serde::ser::SerializeStruct;
7924        let mut s = serializer.serialize_struct("GroupsMembersListArg", 2)?;
7925        self.internal_serialize::<S>(&mut s)?;
7926        s.end()
7927    }
7928}
7929
7930#[derive(Debug, Clone, PartialEq, Eq)]
7931#[non_exhaustive] // structs may have more fields added in the future.
7932pub struct GroupsMembersListContinueArg {
7933    /// Indicates from what point to get the next set of groups.
7934    pub cursor: String,
7935}
7936
7937impl GroupsMembersListContinueArg {
7938    pub fn new(cursor: String) -> Self {
7939        GroupsMembersListContinueArg {
7940            cursor,
7941        }
7942    }
7943}
7944
7945const GROUPS_MEMBERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
7946impl GroupsMembersListContinueArg {
7947    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
7948        map: V,
7949    ) -> Result<GroupsMembersListContinueArg, V::Error> {
7950        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
7951    }
7952
7953    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
7954        mut map: V,
7955        optional: bool,
7956    ) -> Result<Option<GroupsMembersListContinueArg>, V::Error> {
7957        let mut field_cursor = None;
7958        let mut nothing = true;
7959        while let Some(key) = map.next_key::<&str>()? {
7960            nothing = false;
7961            match key {
7962                "cursor" => {
7963                    if field_cursor.is_some() {
7964                        return Err(::serde::de::Error::duplicate_field("cursor"));
7965                    }
7966                    field_cursor = Some(map.next_value()?);
7967                }
7968                _ => {
7969                    // unknown field allowed and ignored
7970                    map.next_value::<::serde_json::Value>()?;
7971                }
7972            }
7973        }
7974        if optional && nothing {
7975            return Ok(None);
7976        }
7977        let result = GroupsMembersListContinueArg {
7978            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
7979        };
7980        Ok(Some(result))
7981    }
7982
7983    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
7984        &self,
7985        s: &mut S::SerializeStruct,
7986    ) -> Result<(), S::Error> {
7987        use serde::ser::SerializeStruct;
7988        s.serialize_field("cursor", &self.cursor)?;
7989        Ok(())
7990    }
7991}
7992
7993impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListContinueArg {
7994    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
7995        // struct deserializer
7996        use serde::de::{MapAccess, Visitor};
7997        struct StructVisitor;
7998        impl<'de> Visitor<'de> for StructVisitor {
7999            type Value = GroupsMembersListContinueArg;
8000            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8001                f.write_str("a GroupsMembersListContinueArg struct")
8002            }
8003            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8004                GroupsMembersListContinueArg::internal_deserialize(map)
8005            }
8006        }
8007        deserializer.deserialize_struct("GroupsMembersListContinueArg", GROUPS_MEMBERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
8008    }
8009}
8010
8011impl ::serde::ser::Serialize for GroupsMembersListContinueArg {
8012    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8013        // struct serializer
8014        use serde::ser::SerializeStruct;
8015        let mut s = serializer.serialize_struct("GroupsMembersListContinueArg", 1)?;
8016        self.internal_serialize::<S>(&mut s)?;
8017        s.end()
8018    }
8019}
8020
8021#[derive(Debug, Clone, PartialEq, Eq)]
8022#[non_exhaustive] // variants may be added in the future
8023pub enum GroupsMembersListContinueError {
8024    /// The cursor is invalid.
8025    InvalidCursor,
8026    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8027    /// typically indicates that this SDK version is out of date.
8028    Other,
8029}
8030
8031impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListContinueError {
8032    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8033        // union deserializer
8034        use serde::de::{self, MapAccess, Visitor};
8035        struct EnumVisitor;
8036        impl<'de> Visitor<'de> for EnumVisitor {
8037            type Value = GroupsMembersListContinueError;
8038            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8039                f.write_str("a GroupsMembersListContinueError structure")
8040            }
8041            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8042                let tag: &str = match map.next_key()? {
8043                    Some(".tag") => map.next_value()?,
8044                    _ => return Err(de::Error::missing_field(".tag"))
8045                };
8046                let value = match tag {
8047                    "invalid_cursor" => GroupsMembersListContinueError::InvalidCursor,
8048                    _ => GroupsMembersListContinueError::Other,
8049                };
8050                crate::eat_json_fields(&mut map)?;
8051                Ok(value)
8052            }
8053        }
8054        const VARIANTS: &[&str] = &["invalid_cursor",
8055                                    "other"];
8056        deserializer.deserialize_struct("GroupsMembersListContinueError", VARIANTS, EnumVisitor)
8057    }
8058}
8059
8060impl ::serde::ser::Serialize for GroupsMembersListContinueError {
8061    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8062        // union serializer
8063        use serde::ser::SerializeStruct;
8064        match self {
8065            GroupsMembersListContinueError::InvalidCursor => {
8066                // unit
8067                let mut s = serializer.serialize_struct("GroupsMembersListContinueError", 1)?;
8068                s.serialize_field(".tag", "invalid_cursor")?;
8069                s.end()
8070            }
8071            GroupsMembersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8072        }
8073    }
8074}
8075
8076impl ::std::error::Error for GroupsMembersListContinueError {
8077}
8078
8079impl ::std::fmt::Display for GroupsMembersListContinueError {
8080    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8081        match self {
8082            GroupsMembersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
8083            _ => write!(f, "{:?}", *self),
8084        }
8085    }
8086}
8087
8088#[derive(Debug, Clone, PartialEq, Eq)]
8089#[non_exhaustive] // structs may have more fields added in the future.
8090pub struct GroupsMembersListResult {
8091    pub members: Vec<GroupMemberInfo>,
8092    /// Pass the cursor into
8093    /// [`groups_members_list_continue()`](crate::team::groups_members_list_continue) to obtain
8094    /// additional group members.
8095    pub cursor: String,
8096    /// Is true if there are additional group members that have not been returned yet. An additional
8097    /// call to [`groups_members_list_continue()`](crate::team::groups_members_list_continue) can
8098    /// retrieve them.
8099    pub has_more: bool,
8100}
8101
8102impl GroupsMembersListResult {
8103    pub fn new(members: Vec<GroupMemberInfo>, cursor: String, has_more: bool) -> Self {
8104        GroupsMembersListResult {
8105            members,
8106            cursor,
8107            has_more,
8108        }
8109    }
8110}
8111
8112const GROUPS_MEMBERS_LIST_RESULT_FIELDS: &[&str] = &["members",
8113                                                     "cursor",
8114                                                     "has_more"];
8115impl GroupsMembersListResult {
8116    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8117        map: V,
8118    ) -> Result<GroupsMembersListResult, V::Error> {
8119        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8120    }
8121
8122    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8123        mut map: V,
8124        optional: bool,
8125    ) -> Result<Option<GroupsMembersListResult>, V::Error> {
8126        let mut field_members = None;
8127        let mut field_cursor = None;
8128        let mut field_has_more = None;
8129        let mut nothing = true;
8130        while let Some(key) = map.next_key::<&str>()? {
8131            nothing = false;
8132            match key {
8133                "members" => {
8134                    if field_members.is_some() {
8135                        return Err(::serde::de::Error::duplicate_field("members"));
8136                    }
8137                    field_members = Some(map.next_value()?);
8138                }
8139                "cursor" => {
8140                    if field_cursor.is_some() {
8141                        return Err(::serde::de::Error::duplicate_field("cursor"));
8142                    }
8143                    field_cursor = Some(map.next_value()?);
8144                }
8145                "has_more" => {
8146                    if field_has_more.is_some() {
8147                        return Err(::serde::de::Error::duplicate_field("has_more"));
8148                    }
8149                    field_has_more = Some(map.next_value()?);
8150                }
8151                _ => {
8152                    // unknown field allowed and ignored
8153                    map.next_value::<::serde_json::Value>()?;
8154                }
8155            }
8156        }
8157        if optional && nothing {
8158            return Ok(None);
8159        }
8160        let result = GroupsMembersListResult {
8161            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
8162            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
8163            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
8164        };
8165        Ok(Some(result))
8166    }
8167
8168    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8169        &self,
8170        s: &mut S::SerializeStruct,
8171    ) -> Result<(), S::Error> {
8172        use serde::ser::SerializeStruct;
8173        s.serialize_field("members", &self.members)?;
8174        s.serialize_field("cursor", &self.cursor)?;
8175        s.serialize_field("has_more", &self.has_more)?;
8176        Ok(())
8177    }
8178}
8179
8180impl<'de> ::serde::de::Deserialize<'de> for GroupsMembersListResult {
8181    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8182        // struct deserializer
8183        use serde::de::{MapAccess, Visitor};
8184        struct StructVisitor;
8185        impl<'de> Visitor<'de> for StructVisitor {
8186            type Value = GroupsMembersListResult;
8187            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8188                f.write_str("a GroupsMembersListResult struct")
8189            }
8190            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8191                GroupsMembersListResult::internal_deserialize(map)
8192            }
8193        }
8194        deserializer.deserialize_struct("GroupsMembersListResult", GROUPS_MEMBERS_LIST_RESULT_FIELDS, StructVisitor)
8195    }
8196}
8197
8198impl ::serde::ser::Serialize for GroupsMembersListResult {
8199    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8200        // struct serializer
8201        use serde::ser::SerializeStruct;
8202        let mut s = serializer.serialize_struct("GroupsMembersListResult", 3)?;
8203        self.internal_serialize::<S>(&mut s)?;
8204        s.end()
8205    }
8206}
8207
8208#[derive(Debug, Clone, PartialEq, Eq)]
8209#[non_exhaustive] // variants may be added in the future
8210pub enum GroupsPollError {
8211    /// The job ID is invalid.
8212    InvalidAsyncJobId,
8213    /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action
8214    /// you were taking succeeded, and if not, try again. This should happen very rarely.
8215    InternalError,
8216    /// You are not allowed to poll this job.
8217    AccessDenied,
8218    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8219    /// typically indicates that this SDK version is out of date.
8220    Other,
8221}
8222
8223impl<'de> ::serde::de::Deserialize<'de> for GroupsPollError {
8224    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8225        // union deserializer
8226        use serde::de::{self, MapAccess, Visitor};
8227        struct EnumVisitor;
8228        impl<'de> Visitor<'de> for EnumVisitor {
8229            type Value = GroupsPollError;
8230            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8231                f.write_str("a GroupsPollError structure")
8232            }
8233            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8234                let tag: &str = match map.next_key()? {
8235                    Some(".tag") => map.next_value()?,
8236                    _ => return Err(de::Error::missing_field(".tag"))
8237                };
8238                let value = match tag {
8239                    "invalid_async_job_id" => GroupsPollError::InvalidAsyncJobId,
8240                    "internal_error" => GroupsPollError::InternalError,
8241                    "access_denied" => GroupsPollError::AccessDenied,
8242                    _ => GroupsPollError::Other,
8243                };
8244                crate::eat_json_fields(&mut map)?;
8245                Ok(value)
8246            }
8247        }
8248        const VARIANTS: &[&str] = &["invalid_async_job_id",
8249                                    "internal_error",
8250                                    "other",
8251                                    "access_denied"];
8252        deserializer.deserialize_struct("GroupsPollError", VARIANTS, EnumVisitor)
8253    }
8254}
8255
8256impl ::serde::ser::Serialize for GroupsPollError {
8257    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8258        // union serializer
8259        use serde::ser::SerializeStruct;
8260        match self {
8261            GroupsPollError::InvalidAsyncJobId => {
8262                // unit
8263                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8264                s.serialize_field(".tag", "invalid_async_job_id")?;
8265                s.end()
8266            }
8267            GroupsPollError::InternalError => {
8268                // unit
8269                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8270                s.serialize_field(".tag", "internal_error")?;
8271                s.end()
8272            }
8273            GroupsPollError::AccessDenied => {
8274                // unit
8275                let mut s = serializer.serialize_struct("GroupsPollError", 1)?;
8276                s.serialize_field(".tag", "access_denied")?;
8277                s.end()
8278            }
8279            GroupsPollError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8280        }
8281    }
8282}
8283
8284impl ::std::error::Error for GroupsPollError {
8285}
8286
8287impl ::std::fmt::Display for GroupsPollError {
8288    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8289        match self {
8290            GroupsPollError::InvalidAsyncJobId => f.write_str("The job ID is invalid."),
8291            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."),
8292            GroupsPollError::AccessDenied => f.write_str("You are not allowed to poll this job."),
8293            _ => write!(f, "{:?}", *self),
8294        }
8295    }
8296}
8297
8298// union extends crate::types::dbx_async::PollError
8299impl From<crate::types::dbx_async::PollError> for GroupsPollError {
8300    fn from(parent: crate::types::dbx_async::PollError) -> Self {
8301        match parent {
8302            crate::types::dbx_async::PollError::InvalidAsyncJobId => GroupsPollError::InvalidAsyncJobId,
8303            crate::types::dbx_async::PollError::InternalError => GroupsPollError::InternalError,
8304            crate::types::dbx_async::PollError::Other => GroupsPollError::Other,
8305        }
8306    }
8307}
8308/// Argument for selecting a list of groups, either by group_ids, or external group IDs.
8309#[derive(Debug, Clone, PartialEq, Eq)]
8310pub enum GroupsSelector {
8311    /// List of group IDs.
8312    GroupIds(Vec<crate::types::team_common::GroupId>),
8313    /// List of external IDs of groups.
8314    GroupExternalIds(Vec<String>),
8315}
8316
8317impl<'de> ::serde::de::Deserialize<'de> for GroupsSelector {
8318    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8319        // union deserializer
8320        use serde::de::{self, MapAccess, Visitor};
8321        struct EnumVisitor;
8322        impl<'de> Visitor<'de> for EnumVisitor {
8323            type Value = GroupsSelector;
8324            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8325                f.write_str("a GroupsSelector structure")
8326            }
8327            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8328                let tag: &str = match map.next_key()? {
8329                    Some(".tag") => map.next_value()?,
8330                    _ => return Err(de::Error::missing_field(".tag"))
8331                };
8332                let value = match tag {
8333                    "group_ids" => {
8334                        match map.next_key()? {
8335                            Some("group_ids") => GroupsSelector::GroupIds(map.next_value()?),
8336                            None => return Err(de::Error::missing_field("group_ids")),
8337                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8338                        }
8339                    }
8340                    "group_external_ids" => {
8341                        match map.next_key()? {
8342                            Some("group_external_ids") => GroupsSelector::GroupExternalIds(map.next_value()?),
8343                            None => return Err(de::Error::missing_field("group_external_ids")),
8344                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8345                        }
8346                    }
8347                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
8348                };
8349                crate::eat_json_fields(&mut map)?;
8350                Ok(value)
8351            }
8352        }
8353        const VARIANTS: &[&str] = &["group_ids",
8354                                    "group_external_ids"];
8355        deserializer.deserialize_struct("GroupsSelector", VARIANTS, EnumVisitor)
8356    }
8357}
8358
8359impl ::serde::ser::Serialize for GroupsSelector {
8360    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8361        // union serializer
8362        use serde::ser::SerializeStruct;
8363        match self {
8364            GroupsSelector::GroupIds(x) => {
8365                // primitive
8366                let mut s = serializer.serialize_struct("GroupsSelector", 2)?;
8367                s.serialize_field(".tag", "group_ids")?;
8368                s.serialize_field("group_ids", x)?;
8369                s.end()
8370            }
8371            GroupsSelector::GroupExternalIds(x) => {
8372                // primitive
8373                let mut s = serializer.serialize_struct("GroupsSelector", 2)?;
8374                s.serialize_field(".tag", "group_external_ids")?;
8375                s.serialize_field("group_external_ids", x)?;
8376                s.end()
8377            }
8378        }
8379    }
8380}
8381
8382/// The value for [`Feature::HasDistinctMemberHomes`].
8383#[derive(Debug, Clone, PartialEq, Eq)]
8384#[non_exhaustive] // variants may be added in the future
8385pub enum HasDistinctMemberHomesValue {
8386    /// Does this team have distinct team member homes.
8387    HasDistinctMemberHomes(bool),
8388    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8389    /// typically indicates that this SDK version is out of date.
8390    Other,
8391}
8392
8393impl<'de> ::serde::de::Deserialize<'de> for HasDistinctMemberHomesValue {
8394    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8395        // union deserializer
8396        use serde::de::{self, MapAccess, Visitor};
8397        struct EnumVisitor;
8398        impl<'de> Visitor<'de> for EnumVisitor {
8399            type Value = HasDistinctMemberHomesValue;
8400            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8401                f.write_str("a HasDistinctMemberHomesValue structure")
8402            }
8403            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8404                let tag: &str = match map.next_key()? {
8405                    Some(".tag") => map.next_value()?,
8406                    _ => return Err(de::Error::missing_field(".tag"))
8407                };
8408                let value = match tag {
8409                    "has_distinct_member_homes" => {
8410                        match map.next_key()? {
8411                            Some("has_distinct_member_homes") => HasDistinctMemberHomesValue::HasDistinctMemberHomes(map.next_value()?),
8412                            None => return Err(de::Error::missing_field("has_distinct_member_homes")),
8413                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8414                        }
8415                    }
8416                    _ => HasDistinctMemberHomesValue::Other,
8417                };
8418                crate::eat_json_fields(&mut map)?;
8419                Ok(value)
8420            }
8421        }
8422        const VARIANTS: &[&str] = &["has_distinct_member_homes",
8423                                    "other"];
8424        deserializer.deserialize_struct("HasDistinctMemberHomesValue", VARIANTS, EnumVisitor)
8425    }
8426}
8427
8428impl ::serde::ser::Serialize for HasDistinctMemberHomesValue {
8429    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8430        // union serializer
8431        use serde::ser::SerializeStruct;
8432        match self {
8433            HasDistinctMemberHomesValue::HasDistinctMemberHomes(x) => {
8434                // primitive
8435                let mut s = serializer.serialize_struct("HasDistinctMemberHomesValue", 2)?;
8436                s.serialize_field(".tag", "has_distinct_member_homes")?;
8437                s.serialize_field("has_distinct_member_homes", x)?;
8438                s.end()
8439            }
8440            HasDistinctMemberHomesValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8441        }
8442    }
8443}
8444
8445/// The value for [`Feature::HasTeamFileEvents`].
8446#[derive(Debug, Clone, PartialEq, Eq)]
8447#[non_exhaustive] // variants may be added in the future
8448pub enum HasTeamFileEventsValue {
8449    /// Does this team have file events.
8450    Enabled(bool),
8451    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8452    /// typically indicates that this SDK version is out of date.
8453    Other,
8454}
8455
8456impl<'de> ::serde::de::Deserialize<'de> for HasTeamFileEventsValue {
8457    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8458        // union deserializer
8459        use serde::de::{self, MapAccess, Visitor};
8460        struct EnumVisitor;
8461        impl<'de> Visitor<'de> for EnumVisitor {
8462            type Value = HasTeamFileEventsValue;
8463            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8464                f.write_str("a HasTeamFileEventsValue structure")
8465            }
8466            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8467                let tag: &str = match map.next_key()? {
8468                    Some(".tag") => map.next_value()?,
8469                    _ => return Err(de::Error::missing_field(".tag"))
8470                };
8471                let value = match tag {
8472                    "enabled" => {
8473                        match map.next_key()? {
8474                            Some("enabled") => HasTeamFileEventsValue::Enabled(map.next_value()?),
8475                            None => return Err(de::Error::missing_field("enabled")),
8476                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8477                        }
8478                    }
8479                    _ => HasTeamFileEventsValue::Other,
8480                };
8481                crate::eat_json_fields(&mut map)?;
8482                Ok(value)
8483            }
8484        }
8485        const VARIANTS: &[&str] = &["enabled",
8486                                    "other"];
8487        deserializer.deserialize_struct("HasTeamFileEventsValue", VARIANTS, EnumVisitor)
8488    }
8489}
8490
8491impl ::serde::ser::Serialize for HasTeamFileEventsValue {
8492    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8493        // union serializer
8494        use serde::ser::SerializeStruct;
8495        match self {
8496            HasTeamFileEventsValue::Enabled(x) => {
8497                // primitive
8498                let mut s = serializer.serialize_struct("HasTeamFileEventsValue", 2)?;
8499                s.serialize_field(".tag", "enabled")?;
8500                s.serialize_field("enabled", x)?;
8501                s.end()
8502            }
8503            HasTeamFileEventsValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8504        }
8505    }
8506}
8507
8508/// The value for [`Feature::HasTeamSelectiveSync`].
8509#[derive(Debug, Clone, PartialEq, Eq)]
8510#[non_exhaustive] // variants may be added in the future
8511pub enum HasTeamSelectiveSyncValue {
8512    /// Does this team have team selective sync enabled.
8513    HasTeamSelectiveSync(bool),
8514    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8515    /// typically indicates that this SDK version is out of date.
8516    Other,
8517}
8518
8519impl<'de> ::serde::de::Deserialize<'de> for HasTeamSelectiveSyncValue {
8520    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8521        // union deserializer
8522        use serde::de::{self, MapAccess, Visitor};
8523        struct EnumVisitor;
8524        impl<'de> Visitor<'de> for EnumVisitor {
8525            type Value = HasTeamSelectiveSyncValue;
8526            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8527                f.write_str("a HasTeamSelectiveSyncValue structure")
8528            }
8529            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8530                let tag: &str = match map.next_key()? {
8531                    Some(".tag") => map.next_value()?,
8532                    _ => return Err(de::Error::missing_field(".tag"))
8533                };
8534                let value = match tag {
8535                    "has_team_selective_sync" => {
8536                        match map.next_key()? {
8537                            Some("has_team_selective_sync") => HasTeamSelectiveSyncValue::HasTeamSelectiveSync(map.next_value()?),
8538                            None => return Err(de::Error::missing_field("has_team_selective_sync")),
8539                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8540                        }
8541                    }
8542                    _ => HasTeamSelectiveSyncValue::Other,
8543                };
8544                crate::eat_json_fields(&mut map)?;
8545                Ok(value)
8546            }
8547        }
8548        const VARIANTS: &[&str] = &["has_team_selective_sync",
8549                                    "other"];
8550        deserializer.deserialize_struct("HasTeamSelectiveSyncValue", VARIANTS, EnumVisitor)
8551    }
8552}
8553
8554impl ::serde::ser::Serialize for HasTeamSelectiveSyncValue {
8555    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8556        // union serializer
8557        use serde::ser::SerializeStruct;
8558        match self {
8559            HasTeamSelectiveSyncValue::HasTeamSelectiveSync(x) => {
8560                // primitive
8561                let mut s = serializer.serialize_struct("HasTeamSelectiveSyncValue", 2)?;
8562                s.serialize_field(".tag", "has_team_selective_sync")?;
8563                s.serialize_field("has_team_selective_sync", x)?;
8564                s.end()
8565            }
8566            HasTeamSelectiveSyncValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8567        }
8568    }
8569}
8570
8571/// The value for [`Feature::HasTeamSharedDropbox`].
8572#[derive(Debug, Clone, PartialEq, Eq)]
8573#[non_exhaustive] // variants may be added in the future
8574pub enum HasTeamSharedDropboxValue {
8575    /// Does this team have a shared team root.
8576    HasTeamSharedDropbox(bool),
8577    /// Catch-all used for unrecognized values returned from the server. Encountering this value
8578    /// typically indicates that this SDK version is out of date.
8579    Other,
8580}
8581
8582impl<'de> ::serde::de::Deserialize<'de> for HasTeamSharedDropboxValue {
8583    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8584        // union deserializer
8585        use serde::de::{self, MapAccess, Visitor};
8586        struct EnumVisitor;
8587        impl<'de> Visitor<'de> for EnumVisitor {
8588            type Value = HasTeamSharedDropboxValue;
8589            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8590                f.write_str("a HasTeamSharedDropboxValue structure")
8591            }
8592            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
8593                let tag: &str = match map.next_key()? {
8594                    Some(".tag") => map.next_value()?,
8595                    _ => return Err(de::Error::missing_field(".tag"))
8596                };
8597                let value = match tag {
8598                    "has_team_shared_dropbox" => {
8599                        match map.next_key()? {
8600                            Some("has_team_shared_dropbox") => HasTeamSharedDropboxValue::HasTeamSharedDropbox(map.next_value()?),
8601                            None => return Err(de::Error::missing_field("has_team_shared_dropbox")),
8602                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
8603                        }
8604                    }
8605                    _ => HasTeamSharedDropboxValue::Other,
8606                };
8607                crate::eat_json_fields(&mut map)?;
8608                Ok(value)
8609            }
8610        }
8611        const VARIANTS: &[&str] = &["has_team_shared_dropbox",
8612                                    "other"];
8613        deserializer.deserialize_struct("HasTeamSharedDropboxValue", VARIANTS, EnumVisitor)
8614    }
8615}
8616
8617impl ::serde::ser::Serialize for HasTeamSharedDropboxValue {
8618    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8619        // union serializer
8620        use serde::ser::SerializeStruct;
8621        match self {
8622            HasTeamSharedDropboxValue::HasTeamSharedDropbox(x) => {
8623                // primitive
8624                let mut s = serializer.serialize_struct("HasTeamSharedDropboxValue", 2)?;
8625                s.serialize_field(".tag", "has_team_shared_dropbox")?;
8626                s.serialize_field("has_team_shared_dropbox", x)?;
8627                s.end()
8628            }
8629            HasTeamSharedDropboxValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
8630        }
8631    }
8632}
8633
8634#[derive(Debug, Clone, PartialEq, Eq)]
8635#[non_exhaustive] // structs may have more fields added in the future.
8636pub struct IncludeMembersArg {
8637    /// Whether to return the list of members in the group. Note that the default value will cause
8638    /// all the group members to be returned in the response. This may take a long time for large
8639    /// groups.
8640    pub return_members: bool,
8641}
8642
8643impl Default for IncludeMembersArg {
8644    fn default() -> Self {
8645        IncludeMembersArg {
8646            return_members: true,
8647        }
8648    }
8649}
8650
8651impl IncludeMembersArg {
8652    pub fn with_return_members(mut self, value: bool) -> Self {
8653        self.return_members = value;
8654        self
8655    }
8656}
8657
8658const INCLUDE_MEMBERS_ARG_FIELDS: &[&str] = &["return_members"];
8659impl IncludeMembersArg {
8660    // no _opt deserializer
8661    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8662        mut map: V,
8663    ) -> Result<IncludeMembersArg, V::Error> {
8664        let mut field_return_members = None;
8665        while let Some(key) = map.next_key::<&str>()? {
8666            match key {
8667                "return_members" => {
8668                    if field_return_members.is_some() {
8669                        return Err(::serde::de::Error::duplicate_field("return_members"));
8670                    }
8671                    field_return_members = Some(map.next_value()?);
8672                }
8673                _ => {
8674                    // unknown field allowed and ignored
8675                    map.next_value::<::serde_json::Value>()?;
8676                }
8677            }
8678        }
8679        let result = IncludeMembersArg {
8680            return_members: field_return_members.unwrap_or(true),
8681        };
8682        Ok(result)
8683    }
8684
8685    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8686        &self,
8687        s: &mut S::SerializeStruct,
8688    ) -> Result<(), S::Error> {
8689        use serde::ser::SerializeStruct;
8690        if !self.return_members {
8691            s.serialize_field("return_members", &self.return_members)?;
8692        }
8693        Ok(())
8694    }
8695}
8696
8697impl<'de> ::serde::de::Deserialize<'de> for IncludeMembersArg {
8698    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8699        // struct deserializer
8700        use serde::de::{MapAccess, Visitor};
8701        struct StructVisitor;
8702        impl<'de> Visitor<'de> for StructVisitor {
8703            type Value = IncludeMembersArg;
8704            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8705                f.write_str("a IncludeMembersArg struct")
8706            }
8707            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8708                IncludeMembersArg::internal_deserialize(map)
8709            }
8710        }
8711        deserializer.deserialize_struct("IncludeMembersArg", INCLUDE_MEMBERS_ARG_FIELDS, StructVisitor)
8712    }
8713}
8714
8715impl ::serde::ser::Serialize for IncludeMembersArg {
8716    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8717        // struct serializer
8718        use serde::ser::SerializeStruct;
8719        let mut s = serializer.serialize_struct("IncludeMembersArg", 1)?;
8720        self.internal_serialize::<S>(&mut s)?;
8721        s.end()
8722    }
8723}
8724
8725#[derive(Debug, Clone, PartialEq, Eq)]
8726#[non_exhaustive] // structs may have more fields added in the future.
8727pub struct LegalHoldHeldRevisionMetadata {
8728    /// The held revision filename.
8729    pub new_filename: String,
8730    /// The id of the held revision.
8731    pub original_revision_id: crate::types::files::Rev,
8732    /// The original path of the held revision.
8733    pub original_file_path: Path,
8734    /// The last time the file was modified on Dropbox.
8735    pub server_modified: crate::types::common::DropboxTimestamp,
8736    /// The member id of the revision's author.
8737    pub author_member_id: crate::types::team_common::TeamMemberId,
8738    /// The member status of the revision's author.
8739    pub author_member_status: TeamMemberStatus,
8740    /// The email address of the held revision author.
8741    pub author_email: crate::types::common::EmailAddress,
8742    /// The type of the held revision's file.
8743    pub file_type: String,
8744    /// The file size in bytes.
8745    pub size: u64,
8746    /// A hash of the file content. This field can be used to verify data integrity. For more
8747    /// information see our [Content
8748    /// hash](https://www.dropbox.com/developers/reference/content-hash) page.
8749    pub content_hash: crate::types::files::Sha256HexHash,
8750}
8751
8752impl LegalHoldHeldRevisionMetadata {
8753    pub fn new(
8754        new_filename: String,
8755        original_revision_id: crate::types::files::Rev,
8756        original_file_path: Path,
8757        server_modified: crate::types::common::DropboxTimestamp,
8758        author_member_id: crate::types::team_common::TeamMemberId,
8759        author_member_status: TeamMemberStatus,
8760        author_email: crate::types::common::EmailAddress,
8761        file_type: String,
8762        size: u64,
8763        content_hash: crate::types::files::Sha256HexHash,
8764    ) -> Self {
8765        LegalHoldHeldRevisionMetadata {
8766            new_filename,
8767            original_revision_id,
8768            original_file_path,
8769            server_modified,
8770            author_member_id,
8771            author_member_status,
8772            author_email,
8773            file_type,
8774            size,
8775            content_hash,
8776        }
8777    }
8778}
8779
8780const LEGAL_HOLD_HELD_REVISION_METADATA_FIELDS: &[&str] = &["new_filename",
8781                                                            "original_revision_id",
8782                                                            "original_file_path",
8783                                                            "server_modified",
8784                                                            "author_member_id",
8785                                                            "author_member_status",
8786                                                            "author_email",
8787                                                            "file_type",
8788                                                            "size",
8789                                                            "content_hash"];
8790impl LegalHoldHeldRevisionMetadata {
8791    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
8792        map: V,
8793    ) -> Result<LegalHoldHeldRevisionMetadata, V::Error> {
8794        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
8795    }
8796
8797    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
8798        mut map: V,
8799        optional: bool,
8800    ) -> Result<Option<LegalHoldHeldRevisionMetadata>, V::Error> {
8801        let mut field_new_filename = None;
8802        let mut field_original_revision_id = None;
8803        let mut field_original_file_path = None;
8804        let mut field_server_modified = None;
8805        let mut field_author_member_id = None;
8806        let mut field_author_member_status = None;
8807        let mut field_author_email = None;
8808        let mut field_file_type = None;
8809        let mut field_size = None;
8810        let mut field_content_hash = None;
8811        let mut nothing = true;
8812        while let Some(key) = map.next_key::<&str>()? {
8813            nothing = false;
8814            match key {
8815                "new_filename" => {
8816                    if field_new_filename.is_some() {
8817                        return Err(::serde::de::Error::duplicate_field("new_filename"));
8818                    }
8819                    field_new_filename = Some(map.next_value()?);
8820                }
8821                "original_revision_id" => {
8822                    if field_original_revision_id.is_some() {
8823                        return Err(::serde::de::Error::duplicate_field("original_revision_id"));
8824                    }
8825                    field_original_revision_id = Some(map.next_value()?);
8826                }
8827                "original_file_path" => {
8828                    if field_original_file_path.is_some() {
8829                        return Err(::serde::de::Error::duplicate_field("original_file_path"));
8830                    }
8831                    field_original_file_path = Some(map.next_value()?);
8832                }
8833                "server_modified" => {
8834                    if field_server_modified.is_some() {
8835                        return Err(::serde::de::Error::duplicate_field("server_modified"));
8836                    }
8837                    field_server_modified = Some(map.next_value()?);
8838                }
8839                "author_member_id" => {
8840                    if field_author_member_id.is_some() {
8841                        return Err(::serde::de::Error::duplicate_field("author_member_id"));
8842                    }
8843                    field_author_member_id = Some(map.next_value()?);
8844                }
8845                "author_member_status" => {
8846                    if field_author_member_status.is_some() {
8847                        return Err(::serde::de::Error::duplicate_field("author_member_status"));
8848                    }
8849                    field_author_member_status = Some(map.next_value()?);
8850                }
8851                "author_email" => {
8852                    if field_author_email.is_some() {
8853                        return Err(::serde::de::Error::duplicate_field("author_email"));
8854                    }
8855                    field_author_email = Some(map.next_value()?);
8856                }
8857                "file_type" => {
8858                    if field_file_type.is_some() {
8859                        return Err(::serde::de::Error::duplicate_field("file_type"));
8860                    }
8861                    field_file_type = Some(map.next_value()?);
8862                }
8863                "size" => {
8864                    if field_size.is_some() {
8865                        return Err(::serde::de::Error::duplicate_field("size"));
8866                    }
8867                    field_size = Some(map.next_value()?);
8868                }
8869                "content_hash" => {
8870                    if field_content_hash.is_some() {
8871                        return Err(::serde::de::Error::duplicate_field("content_hash"));
8872                    }
8873                    field_content_hash = Some(map.next_value()?);
8874                }
8875                _ => {
8876                    // unknown field allowed and ignored
8877                    map.next_value::<::serde_json::Value>()?;
8878                }
8879            }
8880        }
8881        if optional && nothing {
8882            return Ok(None);
8883        }
8884        let result = LegalHoldHeldRevisionMetadata {
8885            new_filename: field_new_filename.ok_or_else(|| ::serde::de::Error::missing_field("new_filename"))?,
8886            original_revision_id: field_original_revision_id.ok_or_else(|| ::serde::de::Error::missing_field("original_revision_id"))?,
8887            original_file_path: field_original_file_path.ok_or_else(|| ::serde::de::Error::missing_field("original_file_path"))?,
8888            server_modified: field_server_modified.ok_or_else(|| ::serde::de::Error::missing_field("server_modified"))?,
8889            author_member_id: field_author_member_id.ok_or_else(|| ::serde::de::Error::missing_field("author_member_id"))?,
8890            author_member_status: field_author_member_status.ok_or_else(|| ::serde::de::Error::missing_field("author_member_status"))?,
8891            author_email: field_author_email.ok_or_else(|| ::serde::de::Error::missing_field("author_email"))?,
8892            file_type: field_file_type.ok_or_else(|| ::serde::de::Error::missing_field("file_type"))?,
8893            size: field_size.ok_or_else(|| ::serde::de::Error::missing_field("size"))?,
8894            content_hash: field_content_hash.ok_or_else(|| ::serde::de::Error::missing_field("content_hash"))?,
8895        };
8896        Ok(Some(result))
8897    }
8898
8899    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
8900        &self,
8901        s: &mut S::SerializeStruct,
8902    ) -> Result<(), S::Error> {
8903        use serde::ser::SerializeStruct;
8904        s.serialize_field("new_filename", &self.new_filename)?;
8905        s.serialize_field("original_revision_id", &self.original_revision_id)?;
8906        s.serialize_field("original_file_path", &self.original_file_path)?;
8907        s.serialize_field("server_modified", &self.server_modified)?;
8908        s.serialize_field("author_member_id", &self.author_member_id)?;
8909        s.serialize_field("author_member_status", &self.author_member_status)?;
8910        s.serialize_field("author_email", &self.author_email)?;
8911        s.serialize_field("file_type", &self.file_type)?;
8912        s.serialize_field("size", &self.size)?;
8913        s.serialize_field("content_hash", &self.content_hash)?;
8914        Ok(())
8915    }
8916}
8917
8918impl<'de> ::serde::de::Deserialize<'de> for LegalHoldHeldRevisionMetadata {
8919    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
8920        // struct deserializer
8921        use serde::de::{MapAccess, Visitor};
8922        struct StructVisitor;
8923        impl<'de> Visitor<'de> for StructVisitor {
8924            type Value = LegalHoldHeldRevisionMetadata;
8925            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
8926                f.write_str("a LegalHoldHeldRevisionMetadata struct")
8927            }
8928            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
8929                LegalHoldHeldRevisionMetadata::internal_deserialize(map)
8930            }
8931        }
8932        deserializer.deserialize_struct("LegalHoldHeldRevisionMetadata", LEGAL_HOLD_HELD_REVISION_METADATA_FIELDS, StructVisitor)
8933    }
8934}
8935
8936impl ::serde::ser::Serialize for LegalHoldHeldRevisionMetadata {
8937    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
8938        // struct serializer
8939        use serde::ser::SerializeStruct;
8940        let mut s = serializer.serialize_struct("LegalHoldHeldRevisionMetadata", 10)?;
8941        self.internal_serialize::<S>(&mut s)?;
8942        s.end()
8943    }
8944}
8945
8946#[derive(Debug, Clone, PartialEq, Eq)]
8947#[non_exhaustive] // structs may have more fields added in the future.
8948pub struct LegalHoldPolicy {
8949    /// The legal hold id.
8950    pub id: LegalHoldId,
8951    /// Policy name.
8952    pub name: LegalHoldPolicyName,
8953    /// Team members IDs and number of permanently deleted members under hold.
8954    pub members: MembersInfo,
8955    /// The current state of the hold.
8956    pub status: LegalHoldStatus,
8957    /// Start date of the legal hold policy.
8958    pub start_date: crate::types::common::DropboxTimestamp,
8959    /// A description of the legal hold policy.
8960    pub description: Option<LegalHoldPolicyDescription>,
8961    /// The time at which the legal hold was activated.
8962    pub activation_time: Option<crate::types::common::DropboxTimestamp>,
8963    /// End date of the legal hold policy.
8964    pub end_date: Option<crate::types::common::DropboxTimestamp>,
8965}
8966
8967impl LegalHoldPolicy {
8968    pub fn new(
8969        id: LegalHoldId,
8970        name: LegalHoldPolicyName,
8971        members: MembersInfo,
8972        status: LegalHoldStatus,
8973        start_date: crate::types::common::DropboxTimestamp,
8974    ) -> Self {
8975        LegalHoldPolicy {
8976            id,
8977            name,
8978            members,
8979            status,
8980            start_date,
8981            description: None,
8982            activation_time: None,
8983            end_date: None,
8984        }
8985    }
8986
8987    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
8988        self.description = Some(value);
8989        self
8990    }
8991
8992    pub fn with_activation_time(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
8993        self.activation_time = Some(value);
8994        self
8995    }
8996
8997    pub fn with_end_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
8998        self.end_date = Some(value);
8999        self
9000    }
9001}
9002
9003const LEGAL_HOLD_POLICY_FIELDS: &[&str] = &["id",
9004                                            "name",
9005                                            "members",
9006                                            "status",
9007                                            "start_date",
9008                                            "description",
9009                                            "activation_time",
9010                                            "end_date"];
9011impl LegalHoldPolicy {
9012    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9013        map: V,
9014    ) -> Result<LegalHoldPolicy, V::Error> {
9015        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9016    }
9017
9018    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9019        mut map: V,
9020        optional: bool,
9021    ) -> Result<Option<LegalHoldPolicy>, V::Error> {
9022        let mut field_id = None;
9023        let mut field_name = None;
9024        let mut field_members = None;
9025        let mut field_status = None;
9026        let mut field_start_date = None;
9027        let mut field_description = None;
9028        let mut field_activation_time = None;
9029        let mut field_end_date = None;
9030        let mut nothing = true;
9031        while let Some(key) = map.next_key::<&str>()? {
9032            nothing = false;
9033            match key {
9034                "id" => {
9035                    if field_id.is_some() {
9036                        return Err(::serde::de::Error::duplicate_field("id"));
9037                    }
9038                    field_id = Some(map.next_value()?);
9039                }
9040                "name" => {
9041                    if field_name.is_some() {
9042                        return Err(::serde::de::Error::duplicate_field("name"));
9043                    }
9044                    field_name = Some(map.next_value()?);
9045                }
9046                "members" => {
9047                    if field_members.is_some() {
9048                        return Err(::serde::de::Error::duplicate_field("members"));
9049                    }
9050                    field_members = Some(map.next_value()?);
9051                }
9052                "status" => {
9053                    if field_status.is_some() {
9054                        return Err(::serde::de::Error::duplicate_field("status"));
9055                    }
9056                    field_status = Some(map.next_value()?);
9057                }
9058                "start_date" => {
9059                    if field_start_date.is_some() {
9060                        return Err(::serde::de::Error::duplicate_field("start_date"));
9061                    }
9062                    field_start_date = Some(map.next_value()?);
9063                }
9064                "description" => {
9065                    if field_description.is_some() {
9066                        return Err(::serde::de::Error::duplicate_field("description"));
9067                    }
9068                    field_description = Some(map.next_value()?);
9069                }
9070                "activation_time" => {
9071                    if field_activation_time.is_some() {
9072                        return Err(::serde::de::Error::duplicate_field("activation_time"));
9073                    }
9074                    field_activation_time = Some(map.next_value()?);
9075                }
9076                "end_date" => {
9077                    if field_end_date.is_some() {
9078                        return Err(::serde::de::Error::duplicate_field("end_date"));
9079                    }
9080                    field_end_date = Some(map.next_value()?);
9081                }
9082                _ => {
9083                    // unknown field allowed and ignored
9084                    map.next_value::<::serde_json::Value>()?;
9085                }
9086            }
9087        }
9088        if optional && nothing {
9089            return Ok(None);
9090        }
9091        let result = LegalHoldPolicy {
9092            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9093            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
9094            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
9095            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
9096            start_date: field_start_date.ok_or_else(|| ::serde::de::Error::missing_field("start_date"))?,
9097            description: field_description.and_then(Option::flatten),
9098            activation_time: field_activation_time.and_then(Option::flatten),
9099            end_date: field_end_date.and_then(Option::flatten),
9100        };
9101        Ok(Some(result))
9102    }
9103
9104    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9105        &self,
9106        s: &mut S::SerializeStruct,
9107    ) -> Result<(), S::Error> {
9108        use serde::ser::SerializeStruct;
9109        s.serialize_field("id", &self.id)?;
9110        s.serialize_field("name", &self.name)?;
9111        s.serialize_field("members", &self.members)?;
9112        s.serialize_field("status", &self.status)?;
9113        s.serialize_field("start_date", &self.start_date)?;
9114        if let Some(val) = &self.description {
9115            s.serialize_field("description", val)?;
9116        }
9117        if let Some(val) = &self.activation_time {
9118            s.serialize_field("activation_time", val)?;
9119        }
9120        if let Some(val) = &self.end_date {
9121            s.serialize_field("end_date", val)?;
9122        }
9123        Ok(())
9124    }
9125}
9126
9127impl<'de> ::serde::de::Deserialize<'de> for LegalHoldPolicy {
9128    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9129        // struct deserializer
9130        use serde::de::{MapAccess, Visitor};
9131        struct StructVisitor;
9132        impl<'de> Visitor<'de> for StructVisitor {
9133            type Value = LegalHoldPolicy;
9134            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9135                f.write_str("a LegalHoldPolicy struct")
9136            }
9137            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9138                LegalHoldPolicy::internal_deserialize(map)
9139            }
9140        }
9141        deserializer.deserialize_struct("LegalHoldPolicy", LEGAL_HOLD_POLICY_FIELDS, StructVisitor)
9142    }
9143}
9144
9145impl ::serde::ser::Serialize for LegalHoldPolicy {
9146    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9147        // struct serializer
9148        use serde::ser::SerializeStruct;
9149        let mut s = serializer.serialize_struct("LegalHoldPolicy", 8)?;
9150        self.internal_serialize::<S>(&mut s)?;
9151        s.end()
9152    }
9153}
9154
9155#[derive(Debug, Clone, PartialEq, Eq)]
9156#[non_exhaustive] // variants may be added in the future
9157pub enum LegalHoldStatus {
9158    /// The legal hold policy is active.
9159    Active,
9160    /// The legal hold policy was released.
9161    Released,
9162    /// The legal hold policy is activating.
9163    Activating,
9164    /// The legal hold policy is updating.
9165    Updating,
9166    /// The legal hold policy is exporting.
9167    Exporting,
9168    /// The legal hold policy is releasing.
9169    Releasing,
9170    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9171    /// typically indicates that this SDK version is out of date.
9172    Other,
9173}
9174
9175impl<'de> ::serde::de::Deserialize<'de> for LegalHoldStatus {
9176    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9177        // union deserializer
9178        use serde::de::{self, MapAccess, Visitor};
9179        struct EnumVisitor;
9180        impl<'de> Visitor<'de> for EnumVisitor {
9181            type Value = LegalHoldStatus;
9182            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9183                f.write_str("a LegalHoldStatus structure")
9184            }
9185            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9186                let tag: &str = match map.next_key()? {
9187                    Some(".tag") => map.next_value()?,
9188                    _ => return Err(de::Error::missing_field(".tag"))
9189                };
9190                let value = match tag {
9191                    "active" => LegalHoldStatus::Active,
9192                    "released" => LegalHoldStatus::Released,
9193                    "activating" => LegalHoldStatus::Activating,
9194                    "updating" => LegalHoldStatus::Updating,
9195                    "exporting" => LegalHoldStatus::Exporting,
9196                    "releasing" => LegalHoldStatus::Releasing,
9197                    _ => LegalHoldStatus::Other,
9198                };
9199                crate::eat_json_fields(&mut map)?;
9200                Ok(value)
9201            }
9202        }
9203        const VARIANTS: &[&str] = &["active",
9204                                    "released",
9205                                    "activating",
9206                                    "updating",
9207                                    "exporting",
9208                                    "releasing",
9209                                    "other"];
9210        deserializer.deserialize_struct("LegalHoldStatus", VARIANTS, EnumVisitor)
9211    }
9212}
9213
9214impl ::serde::ser::Serialize for LegalHoldStatus {
9215    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9216        // union serializer
9217        use serde::ser::SerializeStruct;
9218        match self {
9219            LegalHoldStatus::Active => {
9220                // unit
9221                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9222                s.serialize_field(".tag", "active")?;
9223                s.end()
9224            }
9225            LegalHoldStatus::Released => {
9226                // unit
9227                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9228                s.serialize_field(".tag", "released")?;
9229                s.end()
9230            }
9231            LegalHoldStatus::Activating => {
9232                // unit
9233                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9234                s.serialize_field(".tag", "activating")?;
9235                s.end()
9236            }
9237            LegalHoldStatus::Updating => {
9238                // unit
9239                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9240                s.serialize_field(".tag", "updating")?;
9241                s.end()
9242            }
9243            LegalHoldStatus::Exporting => {
9244                // unit
9245                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9246                s.serialize_field(".tag", "exporting")?;
9247                s.end()
9248            }
9249            LegalHoldStatus::Releasing => {
9250                // unit
9251                let mut s = serializer.serialize_struct("LegalHoldStatus", 1)?;
9252                s.serialize_field(".tag", "releasing")?;
9253                s.end()
9254            }
9255            LegalHoldStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9256        }
9257    }
9258}
9259
9260#[derive(Debug, Clone, PartialEq, Eq)]
9261#[non_exhaustive] // variants may be added in the future
9262pub enum LegalHoldsError {
9263    /// There has been an unknown legal hold error.
9264    UnknownLegalHoldError,
9265    /// You don't have permissions to perform this action.
9266    InsufficientPermissions,
9267    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9268    /// typically indicates that this SDK version is out of date.
9269    Other,
9270}
9271
9272impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsError {
9273    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9274        // union deserializer
9275        use serde::de::{self, MapAccess, Visitor};
9276        struct EnumVisitor;
9277        impl<'de> Visitor<'de> for EnumVisitor {
9278            type Value = LegalHoldsError;
9279            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9280                f.write_str("a LegalHoldsError structure")
9281            }
9282            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9283                let tag: &str = match map.next_key()? {
9284                    Some(".tag") => map.next_value()?,
9285                    _ => return Err(de::Error::missing_field(".tag"))
9286                };
9287                let value = match tag {
9288                    "unknown_legal_hold_error" => LegalHoldsError::UnknownLegalHoldError,
9289                    "insufficient_permissions" => LegalHoldsError::InsufficientPermissions,
9290                    _ => LegalHoldsError::Other,
9291                };
9292                crate::eat_json_fields(&mut map)?;
9293                Ok(value)
9294            }
9295        }
9296        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9297                                    "insufficient_permissions",
9298                                    "other"];
9299        deserializer.deserialize_struct("LegalHoldsError", VARIANTS, EnumVisitor)
9300    }
9301}
9302
9303impl ::serde::ser::Serialize for LegalHoldsError {
9304    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9305        // union serializer
9306        use serde::ser::SerializeStruct;
9307        match self {
9308            LegalHoldsError::UnknownLegalHoldError => {
9309                // unit
9310                let mut s = serializer.serialize_struct("LegalHoldsError", 1)?;
9311                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9312                s.end()
9313            }
9314            LegalHoldsError::InsufficientPermissions => {
9315                // unit
9316                let mut s = serializer.serialize_struct("LegalHoldsError", 1)?;
9317                s.serialize_field(".tag", "insufficient_permissions")?;
9318                s.end()
9319            }
9320            LegalHoldsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9321        }
9322    }
9323}
9324
9325impl ::std::error::Error for LegalHoldsError {
9326}
9327
9328impl ::std::fmt::Display for LegalHoldsError {
9329    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9330        match self {
9331            LegalHoldsError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9332            LegalHoldsError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
9333            _ => write!(f, "{:?}", *self),
9334        }
9335    }
9336}
9337
9338#[derive(Debug, Clone, PartialEq, Eq)]
9339#[non_exhaustive] // structs may have more fields added in the future.
9340pub struct LegalHoldsGetPolicyArg {
9341    /// The legal hold Id.
9342    pub id: LegalHoldId,
9343}
9344
9345impl LegalHoldsGetPolicyArg {
9346    pub fn new(id: LegalHoldId) -> Self {
9347        LegalHoldsGetPolicyArg {
9348            id,
9349        }
9350    }
9351}
9352
9353const LEGAL_HOLDS_GET_POLICY_ARG_FIELDS: &[&str] = &["id"];
9354impl LegalHoldsGetPolicyArg {
9355    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9356        map: V,
9357    ) -> Result<LegalHoldsGetPolicyArg, V::Error> {
9358        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9359    }
9360
9361    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9362        mut map: V,
9363        optional: bool,
9364    ) -> Result<Option<LegalHoldsGetPolicyArg>, V::Error> {
9365        let mut field_id = None;
9366        let mut nothing = true;
9367        while let Some(key) = map.next_key::<&str>()? {
9368            nothing = false;
9369            match key {
9370                "id" => {
9371                    if field_id.is_some() {
9372                        return Err(::serde::de::Error::duplicate_field("id"));
9373                    }
9374                    field_id = Some(map.next_value()?);
9375                }
9376                _ => {
9377                    // unknown field allowed and ignored
9378                    map.next_value::<::serde_json::Value>()?;
9379                }
9380            }
9381        }
9382        if optional && nothing {
9383            return Ok(None);
9384        }
9385        let result = LegalHoldsGetPolicyArg {
9386            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9387        };
9388        Ok(Some(result))
9389    }
9390
9391    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9392        &self,
9393        s: &mut S::SerializeStruct,
9394    ) -> Result<(), S::Error> {
9395        use serde::ser::SerializeStruct;
9396        s.serialize_field("id", &self.id)?;
9397        Ok(())
9398    }
9399}
9400
9401impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsGetPolicyArg {
9402    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9403        // struct deserializer
9404        use serde::de::{MapAccess, Visitor};
9405        struct StructVisitor;
9406        impl<'de> Visitor<'de> for StructVisitor {
9407            type Value = LegalHoldsGetPolicyArg;
9408            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9409                f.write_str("a LegalHoldsGetPolicyArg struct")
9410            }
9411            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9412                LegalHoldsGetPolicyArg::internal_deserialize(map)
9413            }
9414        }
9415        deserializer.deserialize_struct("LegalHoldsGetPolicyArg", LEGAL_HOLDS_GET_POLICY_ARG_FIELDS, StructVisitor)
9416    }
9417}
9418
9419impl ::serde::ser::Serialize for LegalHoldsGetPolicyArg {
9420    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9421        // struct serializer
9422        use serde::ser::SerializeStruct;
9423        let mut s = serializer.serialize_struct("LegalHoldsGetPolicyArg", 1)?;
9424        self.internal_serialize::<S>(&mut s)?;
9425        s.end()
9426    }
9427}
9428
9429#[derive(Debug, Clone, PartialEq, Eq)]
9430#[non_exhaustive] // variants may be added in the future
9431pub enum LegalHoldsGetPolicyError {
9432    /// There has been an unknown legal hold error.
9433    UnknownLegalHoldError,
9434    /// You don't have permissions to perform this action.
9435    InsufficientPermissions,
9436    /// Legal hold policy does not exist for [`LegalHoldsGetPolicyArg::id`](LegalHoldsGetPolicyArg).
9437    LegalHoldPolicyNotFound,
9438    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9439    /// typically indicates that this SDK version is out of date.
9440    Other,
9441}
9442
9443impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsGetPolicyError {
9444    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9445        // union deserializer
9446        use serde::de::{self, MapAccess, Visitor};
9447        struct EnumVisitor;
9448        impl<'de> Visitor<'de> for EnumVisitor {
9449            type Value = LegalHoldsGetPolicyError;
9450            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9451                f.write_str("a LegalHoldsGetPolicyError structure")
9452            }
9453            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9454                let tag: &str = match map.next_key()? {
9455                    Some(".tag") => map.next_value()?,
9456                    _ => return Err(de::Error::missing_field(".tag"))
9457                };
9458                let value = match tag {
9459                    "unknown_legal_hold_error" => LegalHoldsGetPolicyError::UnknownLegalHoldError,
9460                    "insufficient_permissions" => LegalHoldsGetPolicyError::InsufficientPermissions,
9461                    "legal_hold_policy_not_found" => LegalHoldsGetPolicyError::LegalHoldPolicyNotFound,
9462                    _ => LegalHoldsGetPolicyError::Other,
9463                };
9464                crate::eat_json_fields(&mut map)?;
9465                Ok(value)
9466            }
9467        }
9468        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9469                                    "insufficient_permissions",
9470                                    "other",
9471                                    "legal_hold_policy_not_found"];
9472        deserializer.deserialize_struct("LegalHoldsGetPolicyError", VARIANTS, EnumVisitor)
9473    }
9474}
9475
9476impl ::serde::ser::Serialize for LegalHoldsGetPolicyError {
9477    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9478        // union serializer
9479        use serde::ser::SerializeStruct;
9480        match self {
9481            LegalHoldsGetPolicyError::UnknownLegalHoldError => {
9482                // unit
9483                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9484                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9485                s.end()
9486            }
9487            LegalHoldsGetPolicyError::InsufficientPermissions => {
9488                // unit
9489                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9490                s.serialize_field(".tag", "insufficient_permissions")?;
9491                s.end()
9492            }
9493            LegalHoldsGetPolicyError::LegalHoldPolicyNotFound => {
9494                // unit
9495                let mut s = serializer.serialize_struct("LegalHoldsGetPolicyError", 1)?;
9496                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
9497                s.end()
9498            }
9499            LegalHoldsGetPolicyError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9500        }
9501    }
9502}
9503
9504impl ::std::error::Error for LegalHoldsGetPolicyError {
9505}
9506
9507impl ::std::fmt::Display for LegalHoldsGetPolicyError {
9508    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9509        match self {
9510            LegalHoldsGetPolicyError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9511            LegalHoldsGetPolicyError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
9512            _ => write!(f, "{:?}", *self),
9513        }
9514    }
9515}
9516
9517// union extends LegalHoldsError
9518impl From<LegalHoldsError> for LegalHoldsGetPolicyError {
9519    fn from(parent: LegalHoldsError) -> Self {
9520        match parent {
9521            LegalHoldsError::UnknownLegalHoldError => LegalHoldsGetPolicyError::UnknownLegalHoldError,
9522            LegalHoldsError::InsufficientPermissions => LegalHoldsGetPolicyError::InsufficientPermissions,
9523            LegalHoldsError::Other => LegalHoldsGetPolicyError::Other,
9524        }
9525    }
9526}
9527#[derive(Debug, Clone, PartialEq, Eq)]
9528#[non_exhaustive] // structs may have more fields added in the future.
9529pub struct LegalHoldsListHeldRevisionResult {
9530    /// List of file entries that under the hold.
9531    pub entries: Vec<LegalHoldHeldRevisionMetadata>,
9532    /// True if there are more file entries that haven't been returned. You can retrieve them with a
9533    /// call to /legal_holds/list_held_revisions_continue.
9534    pub has_more: bool,
9535    /// The cursor idicates where to continue reading file metadata entries for the next API call.
9536    /// When there are no more entries, the cursor will return none. Pass the cursor into
9537    /// /2/team/legal_holds/list_held_revisions/continue.
9538    pub cursor: Option<ListHeldRevisionCursor>,
9539}
9540
9541impl LegalHoldsListHeldRevisionResult {
9542    pub fn new(entries: Vec<LegalHoldHeldRevisionMetadata>, has_more: bool) -> Self {
9543        LegalHoldsListHeldRevisionResult {
9544            entries,
9545            has_more,
9546            cursor: None,
9547        }
9548    }
9549
9550    pub fn with_cursor(mut self, value: ListHeldRevisionCursor) -> Self {
9551        self.cursor = Some(value);
9552        self
9553    }
9554}
9555
9556const LEGAL_HOLDS_LIST_HELD_REVISION_RESULT_FIELDS: &[&str] = &["entries",
9557                                                                "has_more",
9558                                                                "cursor"];
9559impl LegalHoldsListHeldRevisionResult {
9560    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9561        map: V,
9562    ) -> Result<LegalHoldsListHeldRevisionResult, V::Error> {
9563        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9564    }
9565
9566    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9567        mut map: V,
9568        optional: bool,
9569    ) -> Result<Option<LegalHoldsListHeldRevisionResult>, V::Error> {
9570        let mut field_entries = None;
9571        let mut field_has_more = None;
9572        let mut field_cursor = None;
9573        let mut nothing = true;
9574        while let Some(key) = map.next_key::<&str>()? {
9575            nothing = false;
9576            match key {
9577                "entries" => {
9578                    if field_entries.is_some() {
9579                        return Err(::serde::de::Error::duplicate_field("entries"));
9580                    }
9581                    field_entries = Some(map.next_value()?);
9582                }
9583                "has_more" => {
9584                    if field_has_more.is_some() {
9585                        return Err(::serde::de::Error::duplicate_field("has_more"));
9586                    }
9587                    field_has_more = Some(map.next_value()?);
9588                }
9589                "cursor" => {
9590                    if field_cursor.is_some() {
9591                        return Err(::serde::de::Error::duplicate_field("cursor"));
9592                    }
9593                    field_cursor = Some(map.next_value()?);
9594                }
9595                _ => {
9596                    // unknown field allowed and ignored
9597                    map.next_value::<::serde_json::Value>()?;
9598                }
9599            }
9600        }
9601        if optional && nothing {
9602            return Ok(None);
9603        }
9604        let result = LegalHoldsListHeldRevisionResult {
9605            entries: field_entries.ok_or_else(|| ::serde::de::Error::missing_field("entries"))?,
9606            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
9607            cursor: field_cursor.and_then(Option::flatten),
9608        };
9609        Ok(Some(result))
9610    }
9611
9612    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9613        &self,
9614        s: &mut S::SerializeStruct,
9615    ) -> Result<(), S::Error> {
9616        use serde::ser::SerializeStruct;
9617        s.serialize_field("entries", &self.entries)?;
9618        s.serialize_field("has_more", &self.has_more)?;
9619        if let Some(val) = &self.cursor {
9620            s.serialize_field("cursor", val)?;
9621        }
9622        Ok(())
9623    }
9624}
9625
9626impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionResult {
9627    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9628        // struct deserializer
9629        use serde::de::{MapAccess, Visitor};
9630        struct StructVisitor;
9631        impl<'de> Visitor<'de> for StructVisitor {
9632            type Value = LegalHoldsListHeldRevisionResult;
9633            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9634                f.write_str("a LegalHoldsListHeldRevisionResult struct")
9635            }
9636            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9637                LegalHoldsListHeldRevisionResult::internal_deserialize(map)
9638            }
9639        }
9640        deserializer.deserialize_struct("LegalHoldsListHeldRevisionResult", LEGAL_HOLDS_LIST_HELD_REVISION_RESULT_FIELDS, StructVisitor)
9641    }
9642}
9643
9644impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionResult {
9645    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9646        // struct serializer
9647        use serde::ser::SerializeStruct;
9648        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionResult", 3)?;
9649        self.internal_serialize::<S>(&mut s)?;
9650        s.end()
9651    }
9652}
9653
9654#[derive(Debug, Clone, PartialEq, Eq)]
9655#[non_exhaustive] // structs may have more fields added in the future.
9656pub struct LegalHoldsListHeldRevisionsArg {
9657    /// The legal hold Id.
9658    pub id: LegalHoldId,
9659}
9660
9661impl LegalHoldsListHeldRevisionsArg {
9662    pub fn new(id: LegalHoldId) -> Self {
9663        LegalHoldsListHeldRevisionsArg {
9664            id,
9665        }
9666    }
9667}
9668
9669const LEGAL_HOLDS_LIST_HELD_REVISIONS_ARG_FIELDS: &[&str] = &["id"];
9670impl LegalHoldsListHeldRevisionsArg {
9671    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9672        map: V,
9673    ) -> Result<LegalHoldsListHeldRevisionsArg, V::Error> {
9674        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9675    }
9676
9677    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9678        mut map: V,
9679        optional: bool,
9680    ) -> Result<Option<LegalHoldsListHeldRevisionsArg>, V::Error> {
9681        let mut field_id = None;
9682        let mut nothing = true;
9683        while let Some(key) = map.next_key::<&str>()? {
9684            nothing = false;
9685            match key {
9686                "id" => {
9687                    if field_id.is_some() {
9688                        return Err(::serde::de::Error::duplicate_field("id"));
9689                    }
9690                    field_id = Some(map.next_value()?);
9691                }
9692                _ => {
9693                    // unknown field allowed and ignored
9694                    map.next_value::<::serde_json::Value>()?;
9695                }
9696            }
9697        }
9698        if optional && nothing {
9699            return Ok(None);
9700        }
9701        let result = LegalHoldsListHeldRevisionsArg {
9702            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9703        };
9704        Ok(Some(result))
9705    }
9706
9707    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9708        &self,
9709        s: &mut S::SerializeStruct,
9710    ) -> Result<(), S::Error> {
9711        use serde::ser::SerializeStruct;
9712        s.serialize_field("id", &self.id)?;
9713        Ok(())
9714    }
9715}
9716
9717impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsArg {
9718    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9719        // struct deserializer
9720        use serde::de::{MapAccess, Visitor};
9721        struct StructVisitor;
9722        impl<'de> Visitor<'de> for StructVisitor {
9723            type Value = LegalHoldsListHeldRevisionsArg;
9724            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9725                f.write_str("a LegalHoldsListHeldRevisionsArg struct")
9726            }
9727            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9728                LegalHoldsListHeldRevisionsArg::internal_deserialize(map)
9729            }
9730        }
9731        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsArg", LEGAL_HOLDS_LIST_HELD_REVISIONS_ARG_FIELDS, StructVisitor)
9732    }
9733}
9734
9735impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsArg {
9736    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9737        // struct serializer
9738        use serde::ser::SerializeStruct;
9739        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsArg", 1)?;
9740        self.internal_serialize::<S>(&mut s)?;
9741        s.end()
9742    }
9743}
9744
9745#[derive(Debug, Clone, PartialEq, Eq)]
9746#[non_exhaustive] // structs may have more fields added in the future.
9747pub struct LegalHoldsListHeldRevisionsContinueArg {
9748    /// The legal hold Id.
9749    pub id: LegalHoldId,
9750    /// The cursor idicates where to continue reading file metadata entries for the next API call.
9751    /// When there are no more entries, the cursor will return none.
9752    pub cursor: Option<ListHeldRevisionCursor>,
9753}
9754
9755impl LegalHoldsListHeldRevisionsContinueArg {
9756    pub fn new(id: LegalHoldId) -> Self {
9757        LegalHoldsListHeldRevisionsContinueArg {
9758            id,
9759            cursor: None,
9760        }
9761    }
9762
9763    pub fn with_cursor(mut self, value: ListHeldRevisionCursor) -> Self {
9764        self.cursor = Some(value);
9765        self
9766    }
9767}
9768
9769const LEGAL_HOLDS_LIST_HELD_REVISIONS_CONTINUE_ARG_FIELDS: &[&str] = &["id",
9770                                                                       "cursor"];
9771impl LegalHoldsListHeldRevisionsContinueArg {
9772    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
9773        map: V,
9774    ) -> Result<LegalHoldsListHeldRevisionsContinueArg, V::Error> {
9775        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
9776    }
9777
9778    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
9779        mut map: V,
9780        optional: bool,
9781    ) -> Result<Option<LegalHoldsListHeldRevisionsContinueArg>, V::Error> {
9782        let mut field_id = None;
9783        let mut field_cursor = None;
9784        let mut nothing = true;
9785        while let Some(key) = map.next_key::<&str>()? {
9786            nothing = false;
9787            match key {
9788                "id" => {
9789                    if field_id.is_some() {
9790                        return Err(::serde::de::Error::duplicate_field("id"));
9791                    }
9792                    field_id = Some(map.next_value()?);
9793                }
9794                "cursor" => {
9795                    if field_cursor.is_some() {
9796                        return Err(::serde::de::Error::duplicate_field("cursor"));
9797                    }
9798                    field_cursor = Some(map.next_value()?);
9799                }
9800                _ => {
9801                    // unknown field allowed and ignored
9802                    map.next_value::<::serde_json::Value>()?;
9803                }
9804            }
9805        }
9806        if optional && nothing {
9807            return Ok(None);
9808        }
9809        let result = LegalHoldsListHeldRevisionsContinueArg {
9810            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
9811            cursor: field_cursor.and_then(Option::flatten),
9812        };
9813        Ok(Some(result))
9814    }
9815
9816    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
9817        &self,
9818        s: &mut S::SerializeStruct,
9819    ) -> Result<(), S::Error> {
9820        use serde::ser::SerializeStruct;
9821        s.serialize_field("id", &self.id)?;
9822        if let Some(val) = &self.cursor {
9823            s.serialize_field("cursor", val)?;
9824        }
9825        Ok(())
9826    }
9827}
9828
9829impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsContinueArg {
9830    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9831        // struct deserializer
9832        use serde::de::{MapAccess, Visitor};
9833        struct StructVisitor;
9834        impl<'de> Visitor<'de> for StructVisitor {
9835            type Value = LegalHoldsListHeldRevisionsContinueArg;
9836            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9837                f.write_str("a LegalHoldsListHeldRevisionsContinueArg struct")
9838            }
9839            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
9840                LegalHoldsListHeldRevisionsContinueArg::internal_deserialize(map)
9841            }
9842        }
9843        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsContinueArg", LEGAL_HOLDS_LIST_HELD_REVISIONS_CONTINUE_ARG_FIELDS, StructVisitor)
9844    }
9845}
9846
9847impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsContinueArg {
9848    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9849        // struct serializer
9850        use serde::ser::SerializeStruct;
9851        let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueArg", 2)?;
9852        self.internal_serialize::<S>(&mut s)?;
9853        s.end()
9854    }
9855}
9856
9857#[derive(Debug, Clone, PartialEq, Eq)]
9858#[non_exhaustive] // variants may be added in the future
9859pub enum LegalHoldsListHeldRevisionsContinueError {
9860    /// There has been an unknown legal hold error.
9861    UnknownLegalHoldError,
9862    /// Temporary infrastructure failure, please retry.
9863    TransientError,
9864    /// Indicates that the cursor has been invalidated. Call
9865    /// [`legal_holds_list_held_revisions_continue()`](crate::team::legal_holds_list_held_revisions_continue)
9866    /// again with an empty cursor to obtain a new cursor.
9867    Reset,
9868    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9869    /// typically indicates that this SDK version is out of date.
9870    Other,
9871}
9872
9873impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsContinueError {
9874    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9875        // union deserializer
9876        use serde::de::{self, MapAccess, Visitor};
9877        struct EnumVisitor;
9878        impl<'de> Visitor<'de> for EnumVisitor {
9879            type Value = LegalHoldsListHeldRevisionsContinueError;
9880            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9881                f.write_str("a LegalHoldsListHeldRevisionsContinueError structure")
9882            }
9883            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9884                let tag: &str = match map.next_key()? {
9885                    Some(".tag") => map.next_value()?,
9886                    _ => return Err(de::Error::missing_field(".tag"))
9887                };
9888                let value = match tag {
9889                    "unknown_legal_hold_error" => LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError,
9890                    "transient_error" => LegalHoldsListHeldRevisionsContinueError::TransientError,
9891                    "reset" => LegalHoldsListHeldRevisionsContinueError::Reset,
9892                    _ => LegalHoldsListHeldRevisionsContinueError::Other,
9893                };
9894                crate::eat_json_fields(&mut map)?;
9895                Ok(value)
9896            }
9897        }
9898        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9899                                    "transient_error",
9900                                    "reset",
9901                                    "other"];
9902        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsContinueError", VARIANTS, EnumVisitor)
9903    }
9904}
9905
9906impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsContinueError {
9907    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9908        // union serializer
9909        use serde::ser::SerializeStruct;
9910        match self {
9911            LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError => {
9912                // unit
9913                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9914                s.serialize_field(".tag", "unknown_legal_hold_error")?;
9915                s.end()
9916            }
9917            LegalHoldsListHeldRevisionsContinueError::TransientError => {
9918                // unit
9919                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9920                s.serialize_field(".tag", "transient_error")?;
9921                s.end()
9922            }
9923            LegalHoldsListHeldRevisionsContinueError::Reset => {
9924                // unit
9925                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsContinueError", 1)?;
9926                s.serialize_field(".tag", "reset")?;
9927                s.end()
9928            }
9929            LegalHoldsListHeldRevisionsContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
9930        }
9931    }
9932}
9933
9934impl ::std::error::Error for LegalHoldsListHeldRevisionsContinueError {
9935}
9936
9937impl ::std::fmt::Display for LegalHoldsListHeldRevisionsContinueError {
9938    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9939        match self {
9940            LegalHoldsListHeldRevisionsContinueError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
9941            LegalHoldsListHeldRevisionsContinueError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
9942            _ => write!(f, "{:?}", *self),
9943        }
9944    }
9945}
9946
9947#[derive(Debug, Clone, PartialEq, Eq)]
9948#[non_exhaustive] // variants may be added in the future
9949pub enum LegalHoldsListHeldRevisionsError {
9950    /// There has been an unknown legal hold error.
9951    UnknownLegalHoldError,
9952    /// You don't have permissions to perform this action.
9953    InsufficientPermissions,
9954    /// Temporary infrastructure failure, please retry.
9955    TransientError,
9956    /// The legal hold is not holding any revisions yet.
9957    LegalHoldStillEmpty,
9958    /// Trying to list revisions for an inactive legal hold.
9959    InactiveLegalHold,
9960    /// Catch-all used for unrecognized values returned from the server. Encountering this value
9961    /// typically indicates that this SDK version is out of date.
9962    Other,
9963}
9964
9965impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListHeldRevisionsError {
9966    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
9967        // union deserializer
9968        use serde::de::{self, MapAccess, Visitor};
9969        struct EnumVisitor;
9970        impl<'de> Visitor<'de> for EnumVisitor {
9971            type Value = LegalHoldsListHeldRevisionsError;
9972            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
9973                f.write_str("a LegalHoldsListHeldRevisionsError structure")
9974            }
9975            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
9976                let tag: &str = match map.next_key()? {
9977                    Some(".tag") => map.next_value()?,
9978                    _ => return Err(de::Error::missing_field(".tag"))
9979                };
9980                let value = match tag {
9981                    "unknown_legal_hold_error" => LegalHoldsListHeldRevisionsError::UnknownLegalHoldError,
9982                    "insufficient_permissions" => LegalHoldsListHeldRevisionsError::InsufficientPermissions,
9983                    "transient_error" => LegalHoldsListHeldRevisionsError::TransientError,
9984                    "legal_hold_still_empty" => LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty,
9985                    "inactive_legal_hold" => LegalHoldsListHeldRevisionsError::InactiveLegalHold,
9986                    _ => LegalHoldsListHeldRevisionsError::Other,
9987                };
9988                crate::eat_json_fields(&mut map)?;
9989                Ok(value)
9990            }
9991        }
9992        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
9993                                    "insufficient_permissions",
9994                                    "other",
9995                                    "transient_error",
9996                                    "legal_hold_still_empty",
9997                                    "inactive_legal_hold"];
9998        deserializer.deserialize_struct("LegalHoldsListHeldRevisionsError", VARIANTS, EnumVisitor)
9999    }
10000}
10001
10002impl ::serde::ser::Serialize for LegalHoldsListHeldRevisionsError {
10003    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10004        // union serializer
10005        use serde::ser::SerializeStruct;
10006        match self {
10007            LegalHoldsListHeldRevisionsError::UnknownLegalHoldError => {
10008                // unit
10009                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10010                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10011                s.end()
10012            }
10013            LegalHoldsListHeldRevisionsError::InsufficientPermissions => {
10014                // unit
10015                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10016                s.serialize_field(".tag", "insufficient_permissions")?;
10017                s.end()
10018            }
10019            LegalHoldsListHeldRevisionsError::TransientError => {
10020                // unit
10021                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10022                s.serialize_field(".tag", "transient_error")?;
10023                s.end()
10024            }
10025            LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty => {
10026                // unit
10027                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10028                s.serialize_field(".tag", "legal_hold_still_empty")?;
10029                s.end()
10030            }
10031            LegalHoldsListHeldRevisionsError::InactiveLegalHold => {
10032                // unit
10033                let mut s = serializer.serialize_struct("LegalHoldsListHeldRevisionsError", 1)?;
10034                s.serialize_field(".tag", "inactive_legal_hold")?;
10035                s.end()
10036            }
10037            LegalHoldsListHeldRevisionsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10038        }
10039    }
10040}
10041
10042impl ::std::error::Error for LegalHoldsListHeldRevisionsError {
10043}
10044
10045impl ::std::fmt::Display for LegalHoldsListHeldRevisionsError {
10046    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10047        match self {
10048            LegalHoldsListHeldRevisionsError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10049            LegalHoldsListHeldRevisionsError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10050            LegalHoldsListHeldRevisionsError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10051            LegalHoldsListHeldRevisionsError::LegalHoldStillEmpty => f.write_str("The legal hold is not holding any revisions yet."),
10052            LegalHoldsListHeldRevisionsError::InactiveLegalHold => f.write_str("Trying to list revisions for an inactive legal hold."),
10053            _ => write!(f, "{:?}", *self),
10054        }
10055    }
10056}
10057
10058// union extends LegalHoldsError
10059impl From<LegalHoldsError> for LegalHoldsListHeldRevisionsError {
10060    fn from(parent: LegalHoldsError) -> Self {
10061        match parent {
10062            LegalHoldsError::UnknownLegalHoldError => LegalHoldsListHeldRevisionsError::UnknownLegalHoldError,
10063            LegalHoldsError::InsufficientPermissions => LegalHoldsListHeldRevisionsError::InsufficientPermissions,
10064            LegalHoldsError::Other => LegalHoldsListHeldRevisionsError::Other,
10065        }
10066    }
10067}
10068#[derive(Debug, Clone, PartialEq, Eq, Default)]
10069#[non_exhaustive] // structs may have more fields added in the future.
10070pub struct LegalHoldsListPoliciesArg {
10071    /// Whether to return holds that were released.
10072    pub include_released: bool,
10073}
10074
10075impl LegalHoldsListPoliciesArg {
10076    pub fn with_include_released(mut self, value: bool) -> Self {
10077        self.include_released = value;
10078        self
10079    }
10080}
10081
10082const LEGAL_HOLDS_LIST_POLICIES_ARG_FIELDS: &[&str] = &["include_released"];
10083impl LegalHoldsListPoliciesArg {
10084    // no _opt deserializer
10085    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10086        mut map: V,
10087    ) -> Result<LegalHoldsListPoliciesArg, V::Error> {
10088        let mut field_include_released = None;
10089        while let Some(key) = map.next_key::<&str>()? {
10090            match key {
10091                "include_released" => {
10092                    if field_include_released.is_some() {
10093                        return Err(::serde::de::Error::duplicate_field("include_released"));
10094                    }
10095                    field_include_released = Some(map.next_value()?);
10096                }
10097                _ => {
10098                    // unknown field allowed and ignored
10099                    map.next_value::<::serde_json::Value>()?;
10100                }
10101            }
10102        }
10103        let result = LegalHoldsListPoliciesArg {
10104            include_released: field_include_released.unwrap_or(false),
10105        };
10106        Ok(result)
10107    }
10108
10109    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10110        &self,
10111        s: &mut S::SerializeStruct,
10112    ) -> Result<(), S::Error> {
10113        use serde::ser::SerializeStruct;
10114        if self.include_released {
10115            s.serialize_field("include_released", &self.include_released)?;
10116        }
10117        Ok(())
10118    }
10119}
10120
10121impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesArg {
10122    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10123        // struct deserializer
10124        use serde::de::{MapAccess, Visitor};
10125        struct StructVisitor;
10126        impl<'de> Visitor<'de> for StructVisitor {
10127            type Value = LegalHoldsListPoliciesArg;
10128            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10129                f.write_str("a LegalHoldsListPoliciesArg struct")
10130            }
10131            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10132                LegalHoldsListPoliciesArg::internal_deserialize(map)
10133            }
10134        }
10135        deserializer.deserialize_struct("LegalHoldsListPoliciesArg", LEGAL_HOLDS_LIST_POLICIES_ARG_FIELDS, StructVisitor)
10136    }
10137}
10138
10139impl ::serde::ser::Serialize for LegalHoldsListPoliciesArg {
10140    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10141        // struct serializer
10142        use serde::ser::SerializeStruct;
10143        let mut s = serializer.serialize_struct("LegalHoldsListPoliciesArg", 1)?;
10144        self.internal_serialize::<S>(&mut s)?;
10145        s.end()
10146    }
10147}
10148
10149#[derive(Debug, Clone, PartialEq, Eq)]
10150#[non_exhaustive] // variants may be added in the future
10151pub enum LegalHoldsListPoliciesError {
10152    /// There has been an unknown legal hold error.
10153    UnknownLegalHoldError,
10154    /// You don't have permissions to perform this action.
10155    InsufficientPermissions,
10156    /// Temporary infrastructure failure, please retry.
10157    TransientError,
10158    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10159    /// typically indicates that this SDK version is out of date.
10160    Other,
10161}
10162
10163impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesError {
10164    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10165        // union deserializer
10166        use serde::de::{self, MapAccess, Visitor};
10167        struct EnumVisitor;
10168        impl<'de> Visitor<'de> for EnumVisitor {
10169            type Value = LegalHoldsListPoliciesError;
10170            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10171                f.write_str("a LegalHoldsListPoliciesError structure")
10172            }
10173            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10174                let tag: &str = match map.next_key()? {
10175                    Some(".tag") => map.next_value()?,
10176                    _ => return Err(de::Error::missing_field(".tag"))
10177                };
10178                let value = match tag {
10179                    "unknown_legal_hold_error" => LegalHoldsListPoliciesError::UnknownLegalHoldError,
10180                    "insufficient_permissions" => LegalHoldsListPoliciesError::InsufficientPermissions,
10181                    "transient_error" => LegalHoldsListPoliciesError::TransientError,
10182                    _ => LegalHoldsListPoliciesError::Other,
10183                };
10184                crate::eat_json_fields(&mut map)?;
10185                Ok(value)
10186            }
10187        }
10188        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10189                                    "insufficient_permissions",
10190                                    "other",
10191                                    "transient_error"];
10192        deserializer.deserialize_struct("LegalHoldsListPoliciesError", VARIANTS, EnumVisitor)
10193    }
10194}
10195
10196impl ::serde::ser::Serialize for LegalHoldsListPoliciesError {
10197    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10198        // union serializer
10199        use serde::ser::SerializeStruct;
10200        match self {
10201            LegalHoldsListPoliciesError::UnknownLegalHoldError => {
10202                // unit
10203                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10204                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10205                s.end()
10206            }
10207            LegalHoldsListPoliciesError::InsufficientPermissions => {
10208                // unit
10209                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10210                s.serialize_field(".tag", "insufficient_permissions")?;
10211                s.end()
10212            }
10213            LegalHoldsListPoliciesError::TransientError => {
10214                // unit
10215                let mut s = serializer.serialize_struct("LegalHoldsListPoliciesError", 1)?;
10216                s.serialize_field(".tag", "transient_error")?;
10217                s.end()
10218            }
10219            LegalHoldsListPoliciesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10220        }
10221    }
10222}
10223
10224impl ::std::error::Error for LegalHoldsListPoliciesError {
10225}
10226
10227impl ::std::fmt::Display for LegalHoldsListPoliciesError {
10228    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10229        match self {
10230            LegalHoldsListPoliciesError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10231            LegalHoldsListPoliciesError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10232            LegalHoldsListPoliciesError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10233            _ => write!(f, "{:?}", *self),
10234        }
10235    }
10236}
10237
10238// union extends LegalHoldsError
10239impl From<LegalHoldsError> for LegalHoldsListPoliciesError {
10240    fn from(parent: LegalHoldsError) -> Self {
10241        match parent {
10242            LegalHoldsError::UnknownLegalHoldError => LegalHoldsListPoliciesError::UnknownLegalHoldError,
10243            LegalHoldsError::InsufficientPermissions => LegalHoldsListPoliciesError::InsufficientPermissions,
10244            LegalHoldsError::Other => LegalHoldsListPoliciesError::Other,
10245        }
10246    }
10247}
10248#[derive(Debug, Clone, PartialEq, Eq)]
10249#[non_exhaustive] // structs may have more fields added in the future.
10250pub struct LegalHoldsListPoliciesResult {
10251    pub policies: Vec<LegalHoldPolicy>,
10252}
10253
10254impl LegalHoldsListPoliciesResult {
10255    pub fn new(policies: Vec<LegalHoldPolicy>) -> Self {
10256        LegalHoldsListPoliciesResult {
10257            policies,
10258        }
10259    }
10260}
10261
10262const LEGAL_HOLDS_LIST_POLICIES_RESULT_FIELDS: &[&str] = &["policies"];
10263impl LegalHoldsListPoliciesResult {
10264    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10265        map: V,
10266    ) -> Result<LegalHoldsListPoliciesResult, V::Error> {
10267        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10268    }
10269
10270    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10271        mut map: V,
10272        optional: bool,
10273    ) -> Result<Option<LegalHoldsListPoliciesResult>, V::Error> {
10274        let mut field_policies = None;
10275        let mut nothing = true;
10276        while let Some(key) = map.next_key::<&str>()? {
10277            nothing = false;
10278            match key {
10279                "policies" => {
10280                    if field_policies.is_some() {
10281                        return Err(::serde::de::Error::duplicate_field("policies"));
10282                    }
10283                    field_policies = Some(map.next_value()?);
10284                }
10285                _ => {
10286                    // unknown field allowed and ignored
10287                    map.next_value::<::serde_json::Value>()?;
10288                }
10289            }
10290        }
10291        if optional && nothing {
10292            return Ok(None);
10293        }
10294        let result = LegalHoldsListPoliciesResult {
10295            policies: field_policies.ok_or_else(|| ::serde::de::Error::missing_field("policies"))?,
10296        };
10297        Ok(Some(result))
10298    }
10299
10300    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10301        &self,
10302        s: &mut S::SerializeStruct,
10303    ) -> Result<(), S::Error> {
10304        use serde::ser::SerializeStruct;
10305        s.serialize_field("policies", &self.policies)?;
10306        Ok(())
10307    }
10308}
10309
10310impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsListPoliciesResult {
10311    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10312        // struct deserializer
10313        use serde::de::{MapAccess, Visitor};
10314        struct StructVisitor;
10315        impl<'de> Visitor<'de> for StructVisitor {
10316            type Value = LegalHoldsListPoliciesResult;
10317            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10318                f.write_str("a LegalHoldsListPoliciesResult struct")
10319            }
10320            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10321                LegalHoldsListPoliciesResult::internal_deserialize(map)
10322            }
10323        }
10324        deserializer.deserialize_struct("LegalHoldsListPoliciesResult", LEGAL_HOLDS_LIST_POLICIES_RESULT_FIELDS, StructVisitor)
10325    }
10326}
10327
10328impl ::serde::ser::Serialize for LegalHoldsListPoliciesResult {
10329    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10330        // struct serializer
10331        use serde::ser::SerializeStruct;
10332        let mut s = serializer.serialize_struct("LegalHoldsListPoliciesResult", 1)?;
10333        self.internal_serialize::<S>(&mut s)?;
10334        s.end()
10335    }
10336}
10337
10338#[derive(Debug, Clone, PartialEq, Eq)]
10339#[non_exhaustive] // structs may have more fields added in the future.
10340pub struct LegalHoldsPolicyCreateArg {
10341    /// Policy name.
10342    pub name: LegalHoldPolicyName,
10343    /// List of team member IDs added to the hold.
10344    pub members: Vec<crate::types::team_common::TeamMemberId>,
10345    /// A description of the legal hold policy.
10346    pub description: Option<LegalHoldPolicyDescription>,
10347    /// start date of the legal hold policy.
10348    pub start_date: Option<crate::types::common::DropboxTimestamp>,
10349    /// end date of the legal hold policy.
10350    pub end_date: Option<crate::types::common::DropboxTimestamp>,
10351}
10352
10353impl LegalHoldsPolicyCreateArg {
10354    pub fn new(
10355        name: LegalHoldPolicyName,
10356        members: Vec<crate::types::team_common::TeamMemberId>,
10357    ) -> Self {
10358        LegalHoldsPolicyCreateArg {
10359            name,
10360            members,
10361            description: None,
10362            start_date: None,
10363            end_date: None,
10364        }
10365    }
10366
10367    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
10368        self.description = Some(value);
10369        self
10370    }
10371
10372    pub fn with_start_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
10373        self.start_date = Some(value);
10374        self
10375    }
10376
10377    pub fn with_end_date(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
10378        self.end_date = Some(value);
10379        self
10380    }
10381}
10382
10383const LEGAL_HOLDS_POLICY_CREATE_ARG_FIELDS: &[&str] = &["name",
10384                                                        "members",
10385                                                        "description",
10386                                                        "start_date",
10387                                                        "end_date"];
10388impl LegalHoldsPolicyCreateArg {
10389    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10390        map: V,
10391    ) -> Result<LegalHoldsPolicyCreateArg, V::Error> {
10392        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10393    }
10394
10395    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10396        mut map: V,
10397        optional: bool,
10398    ) -> Result<Option<LegalHoldsPolicyCreateArg>, V::Error> {
10399        let mut field_name = None;
10400        let mut field_members = None;
10401        let mut field_description = None;
10402        let mut field_start_date = None;
10403        let mut field_end_date = None;
10404        let mut nothing = true;
10405        while let Some(key) = map.next_key::<&str>()? {
10406            nothing = false;
10407            match key {
10408                "name" => {
10409                    if field_name.is_some() {
10410                        return Err(::serde::de::Error::duplicate_field("name"));
10411                    }
10412                    field_name = Some(map.next_value()?);
10413                }
10414                "members" => {
10415                    if field_members.is_some() {
10416                        return Err(::serde::de::Error::duplicate_field("members"));
10417                    }
10418                    field_members = Some(map.next_value()?);
10419                }
10420                "description" => {
10421                    if field_description.is_some() {
10422                        return Err(::serde::de::Error::duplicate_field("description"));
10423                    }
10424                    field_description = Some(map.next_value()?);
10425                }
10426                "start_date" => {
10427                    if field_start_date.is_some() {
10428                        return Err(::serde::de::Error::duplicate_field("start_date"));
10429                    }
10430                    field_start_date = Some(map.next_value()?);
10431                }
10432                "end_date" => {
10433                    if field_end_date.is_some() {
10434                        return Err(::serde::de::Error::duplicate_field("end_date"));
10435                    }
10436                    field_end_date = Some(map.next_value()?);
10437                }
10438                _ => {
10439                    // unknown field allowed and ignored
10440                    map.next_value::<::serde_json::Value>()?;
10441                }
10442            }
10443        }
10444        if optional && nothing {
10445            return Ok(None);
10446        }
10447        let result = LegalHoldsPolicyCreateArg {
10448            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
10449            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
10450            description: field_description.and_then(Option::flatten),
10451            start_date: field_start_date.and_then(Option::flatten),
10452            end_date: field_end_date.and_then(Option::flatten),
10453        };
10454        Ok(Some(result))
10455    }
10456
10457    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10458        &self,
10459        s: &mut S::SerializeStruct,
10460    ) -> Result<(), S::Error> {
10461        use serde::ser::SerializeStruct;
10462        s.serialize_field("name", &self.name)?;
10463        s.serialize_field("members", &self.members)?;
10464        if let Some(val) = &self.description {
10465            s.serialize_field("description", val)?;
10466        }
10467        if let Some(val) = &self.start_date {
10468            s.serialize_field("start_date", val)?;
10469        }
10470        if let Some(val) = &self.end_date {
10471            s.serialize_field("end_date", val)?;
10472        }
10473        Ok(())
10474    }
10475}
10476
10477impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyCreateArg {
10478    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10479        // struct deserializer
10480        use serde::de::{MapAccess, Visitor};
10481        struct StructVisitor;
10482        impl<'de> Visitor<'de> for StructVisitor {
10483            type Value = LegalHoldsPolicyCreateArg;
10484            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10485                f.write_str("a LegalHoldsPolicyCreateArg struct")
10486            }
10487            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10488                LegalHoldsPolicyCreateArg::internal_deserialize(map)
10489            }
10490        }
10491        deserializer.deserialize_struct("LegalHoldsPolicyCreateArg", LEGAL_HOLDS_POLICY_CREATE_ARG_FIELDS, StructVisitor)
10492    }
10493}
10494
10495impl ::serde::ser::Serialize for LegalHoldsPolicyCreateArg {
10496    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10497        // struct serializer
10498        use serde::ser::SerializeStruct;
10499        let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateArg", 5)?;
10500        self.internal_serialize::<S>(&mut s)?;
10501        s.end()
10502    }
10503}
10504
10505#[derive(Debug, Clone, PartialEq, Eq)]
10506#[non_exhaustive] // variants may be added in the future
10507pub enum LegalHoldsPolicyCreateError {
10508    /// There has been an unknown legal hold error.
10509    UnknownLegalHoldError,
10510    /// You don't have permissions to perform this action.
10511    InsufficientPermissions,
10512    /// Start date must be earlier than end date.
10513    StartDateIsLaterThanEndDate,
10514    /// The users list must have at least one user.
10515    EmptyMembersList,
10516    /// Some members in the members list are not valid to be placed under legal hold.
10517    InvalidMembers,
10518    /// You cannot add more than 5 users in a legal hold.
10519    NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
10520    /// Temporary infrastructure failure, please retry.
10521    TransientError,
10522    /// The name provided is already in use by another legal hold.
10523    NameMustBeUnique,
10524    /// Team exceeded legal hold quota.
10525    TeamExceededLegalHoldQuota,
10526    /// The provided date is invalid.
10527    InvalidDate,
10528    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10529    /// typically indicates that this SDK version is out of date.
10530    Other,
10531}
10532
10533impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyCreateError {
10534    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10535        // union deserializer
10536        use serde::de::{self, MapAccess, Visitor};
10537        struct EnumVisitor;
10538        impl<'de> Visitor<'de> for EnumVisitor {
10539            type Value = LegalHoldsPolicyCreateError;
10540            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10541                f.write_str("a LegalHoldsPolicyCreateError structure")
10542            }
10543            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10544                let tag: &str = match map.next_key()? {
10545                    Some(".tag") => map.next_value()?,
10546                    _ => return Err(de::Error::missing_field(".tag"))
10547                };
10548                let value = match tag {
10549                    "unknown_legal_hold_error" => LegalHoldsPolicyCreateError::UnknownLegalHoldError,
10550                    "insufficient_permissions" => LegalHoldsPolicyCreateError::InsufficientPermissions,
10551                    "start_date_is_later_than_end_date" => LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate,
10552                    "empty_members_list" => LegalHoldsPolicyCreateError::EmptyMembersList,
10553                    "invalid_members" => LegalHoldsPolicyCreateError::InvalidMembers,
10554                    "number_of_users_on_hold_is_greater_than_hold_limitation" => LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
10555                    "transient_error" => LegalHoldsPolicyCreateError::TransientError,
10556                    "name_must_be_unique" => LegalHoldsPolicyCreateError::NameMustBeUnique,
10557                    "team_exceeded_legal_hold_quota" => LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota,
10558                    "invalid_date" => LegalHoldsPolicyCreateError::InvalidDate,
10559                    _ => LegalHoldsPolicyCreateError::Other,
10560                };
10561                crate::eat_json_fields(&mut map)?;
10562                Ok(value)
10563            }
10564        }
10565        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10566                                    "insufficient_permissions",
10567                                    "other",
10568                                    "start_date_is_later_than_end_date",
10569                                    "empty_members_list",
10570                                    "invalid_members",
10571                                    "number_of_users_on_hold_is_greater_than_hold_limitation",
10572                                    "transient_error",
10573                                    "name_must_be_unique",
10574                                    "team_exceeded_legal_hold_quota",
10575                                    "invalid_date"];
10576        deserializer.deserialize_struct("LegalHoldsPolicyCreateError", VARIANTS, EnumVisitor)
10577    }
10578}
10579
10580impl ::serde::ser::Serialize for LegalHoldsPolicyCreateError {
10581    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10582        // union serializer
10583        use serde::ser::SerializeStruct;
10584        match self {
10585            LegalHoldsPolicyCreateError::UnknownLegalHoldError => {
10586                // unit
10587                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10588                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10589                s.end()
10590            }
10591            LegalHoldsPolicyCreateError::InsufficientPermissions => {
10592                // unit
10593                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10594                s.serialize_field(".tag", "insufficient_permissions")?;
10595                s.end()
10596            }
10597            LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate => {
10598                // unit
10599                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10600                s.serialize_field(".tag", "start_date_is_later_than_end_date")?;
10601                s.end()
10602            }
10603            LegalHoldsPolicyCreateError::EmptyMembersList => {
10604                // unit
10605                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10606                s.serialize_field(".tag", "empty_members_list")?;
10607                s.end()
10608            }
10609            LegalHoldsPolicyCreateError::InvalidMembers => {
10610                // unit
10611                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10612                s.serialize_field(".tag", "invalid_members")?;
10613                s.end()
10614            }
10615            LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => {
10616                // unit
10617                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10618                s.serialize_field(".tag", "number_of_users_on_hold_is_greater_than_hold_limitation")?;
10619                s.end()
10620            }
10621            LegalHoldsPolicyCreateError::TransientError => {
10622                // unit
10623                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10624                s.serialize_field(".tag", "transient_error")?;
10625                s.end()
10626            }
10627            LegalHoldsPolicyCreateError::NameMustBeUnique => {
10628                // unit
10629                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10630                s.serialize_field(".tag", "name_must_be_unique")?;
10631                s.end()
10632            }
10633            LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota => {
10634                // unit
10635                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10636                s.serialize_field(".tag", "team_exceeded_legal_hold_quota")?;
10637                s.end()
10638            }
10639            LegalHoldsPolicyCreateError::InvalidDate => {
10640                // unit
10641                let mut s = serializer.serialize_struct("LegalHoldsPolicyCreateError", 1)?;
10642                s.serialize_field(".tag", "invalid_date")?;
10643                s.end()
10644            }
10645            LegalHoldsPolicyCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10646        }
10647    }
10648}
10649
10650impl ::std::error::Error for LegalHoldsPolicyCreateError {
10651}
10652
10653impl ::std::fmt::Display for LegalHoldsPolicyCreateError {
10654    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10655        match self {
10656            LegalHoldsPolicyCreateError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10657            LegalHoldsPolicyCreateError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10658            LegalHoldsPolicyCreateError::StartDateIsLaterThanEndDate => f.write_str("Start date must be earlier than end date."),
10659            LegalHoldsPolicyCreateError::EmptyMembersList => f.write_str("The users list must have at least one user."),
10660            LegalHoldsPolicyCreateError::InvalidMembers => f.write_str("Some members in the members list are not valid to be placed under legal hold."),
10661            LegalHoldsPolicyCreateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => f.write_str("You cannot add more than 5 users in a legal hold."),
10662            LegalHoldsPolicyCreateError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
10663            LegalHoldsPolicyCreateError::NameMustBeUnique => f.write_str("The name provided is already in use by another legal hold."),
10664            LegalHoldsPolicyCreateError::TeamExceededLegalHoldQuota => f.write_str("Team exceeded legal hold quota."),
10665            LegalHoldsPolicyCreateError::InvalidDate => f.write_str("The provided date is invalid."),
10666            _ => write!(f, "{:?}", *self),
10667        }
10668    }
10669}
10670
10671// union extends LegalHoldsError
10672impl From<LegalHoldsError> for LegalHoldsPolicyCreateError {
10673    fn from(parent: LegalHoldsError) -> Self {
10674        match parent {
10675            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyCreateError::UnknownLegalHoldError,
10676            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyCreateError::InsufficientPermissions,
10677            LegalHoldsError::Other => LegalHoldsPolicyCreateError::Other,
10678        }
10679    }
10680}
10681#[derive(Debug, Clone, PartialEq, Eq)]
10682#[non_exhaustive] // structs may have more fields added in the future.
10683pub struct LegalHoldsPolicyReleaseArg {
10684    /// The legal hold Id.
10685    pub id: LegalHoldId,
10686}
10687
10688impl LegalHoldsPolicyReleaseArg {
10689    pub fn new(id: LegalHoldId) -> Self {
10690        LegalHoldsPolicyReleaseArg {
10691            id,
10692        }
10693    }
10694}
10695
10696const LEGAL_HOLDS_POLICY_RELEASE_ARG_FIELDS: &[&str] = &["id"];
10697impl LegalHoldsPolicyReleaseArg {
10698    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10699        map: V,
10700    ) -> Result<LegalHoldsPolicyReleaseArg, V::Error> {
10701        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10702    }
10703
10704    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10705        mut map: V,
10706        optional: bool,
10707    ) -> Result<Option<LegalHoldsPolicyReleaseArg>, V::Error> {
10708        let mut field_id = None;
10709        let mut nothing = true;
10710        while let Some(key) = map.next_key::<&str>()? {
10711            nothing = false;
10712            match key {
10713                "id" => {
10714                    if field_id.is_some() {
10715                        return Err(::serde::de::Error::duplicate_field("id"));
10716                    }
10717                    field_id = Some(map.next_value()?);
10718                }
10719                _ => {
10720                    // unknown field allowed and ignored
10721                    map.next_value::<::serde_json::Value>()?;
10722                }
10723            }
10724        }
10725        if optional && nothing {
10726            return Ok(None);
10727        }
10728        let result = LegalHoldsPolicyReleaseArg {
10729            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10730        };
10731        Ok(Some(result))
10732    }
10733
10734    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10735        &self,
10736        s: &mut S::SerializeStruct,
10737    ) -> Result<(), S::Error> {
10738        use serde::ser::SerializeStruct;
10739        s.serialize_field("id", &self.id)?;
10740        Ok(())
10741    }
10742}
10743
10744impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyReleaseArg {
10745    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10746        // struct deserializer
10747        use serde::de::{MapAccess, Visitor};
10748        struct StructVisitor;
10749        impl<'de> Visitor<'de> for StructVisitor {
10750            type Value = LegalHoldsPolicyReleaseArg;
10751            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10752                f.write_str("a LegalHoldsPolicyReleaseArg struct")
10753            }
10754            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
10755                LegalHoldsPolicyReleaseArg::internal_deserialize(map)
10756            }
10757        }
10758        deserializer.deserialize_struct("LegalHoldsPolicyReleaseArg", LEGAL_HOLDS_POLICY_RELEASE_ARG_FIELDS, StructVisitor)
10759    }
10760}
10761
10762impl ::serde::ser::Serialize for LegalHoldsPolicyReleaseArg {
10763    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10764        // struct serializer
10765        use serde::ser::SerializeStruct;
10766        let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseArg", 1)?;
10767        self.internal_serialize::<S>(&mut s)?;
10768        s.end()
10769    }
10770}
10771
10772#[derive(Debug, Clone, PartialEq, Eq)]
10773#[non_exhaustive] // variants may be added in the future
10774pub enum LegalHoldsPolicyReleaseError {
10775    /// There has been an unknown legal hold error.
10776    UnknownLegalHoldError,
10777    /// You don't have permissions to perform this action.
10778    InsufficientPermissions,
10779    /// Legal hold is currently performing another operation.
10780    LegalHoldPerformingAnotherOperation,
10781    /// Legal hold is currently performing a release or is already released.
10782    LegalHoldAlreadyReleasing,
10783    /// Legal hold policy does not exist for
10784    /// [`LegalHoldsPolicyReleaseArg::id`](LegalHoldsPolicyReleaseArg).
10785    LegalHoldPolicyNotFound,
10786    /// Catch-all used for unrecognized values returned from the server. Encountering this value
10787    /// typically indicates that this SDK version is out of date.
10788    Other,
10789}
10790
10791impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyReleaseError {
10792    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
10793        // union deserializer
10794        use serde::de::{self, MapAccess, Visitor};
10795        struct EnumVisitor;
10796        impl<'de> Visitor<'de> for EnumVisitor {
10797            type Value = LegalHoldsPolicyReleaseError;
10798            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10799                f.write_str("a LegalHoldsPolicyReleaseError structure")
10800            }
10801            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
10802                let tag: &str = match map.next_key()? {
10803                    Some(".tag") => map.next_value()?,
10804                    _ => return Err(de::Error::missing_field(".tag"))
10805                };
10806                let value = match tag {
10807                    "unknown_legal_hold_error" => LegalHoldsPolicyReleaseError::UnknownLegalHoldError,
10808                    "insufficient_permissions" => LegalHoldsPolicyReleaseError::InsufficientPermissions,
10809                    "legal_hold_performing_another_operation" => LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation,
10810                    "legal_hold_already_releasing" => LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing,
10811                    "legal_hold_policy_not_found" => LegalHoldsPolicyReleaseError::LegalHoldPolicyNotFound,
10812                    _ => LegalHoldsPolicyReleaseError::Other,
10813                };
10814                crate::eat_json_fields(&mut map)?;
10815                Ok(value)
10816            }
10817        }
10818        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
10819                                    "insufficient_permissions",
10820                                    "other",
10821                                    "legal_hold_performing_another_operation",
10822                                    "legal_hold_already_releasing",
10823                                    "legal_hold_policy_not_found"];
10824        deserializer.deserialize_struct("LegalHoldsPolicyReleaseError", VARIANTS, EnumVisitor)
10825    }
10826}
10827
10828impl ::serde::ser::Serialize for LegalHoldsPolicyReleaseError {
10829    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
10830        // union serializer
10831        use serde::ser::SerializeStruct;
10832        match self {
10833            LegalHoldsPolicyReleaseError::UnknownLegalHoldError => {
10834                // unit
10835                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10836                s.serialize_field(".tag", "unknown_legal_hold_error")?;
10837                s.end()
10838            }
10839            LegalHoldsPolicyReleaseError::InsufficientPermissions => {
10840                // unit
10841                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10842                s.serialize_field(".tag", "insufficient_permissions")?;
10843                s.end()
10844            }
10845            LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation => {
10846                // unit
10847                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10848                s.serialize_field(".tag", "legal_hold_performing_another_operation")?;
10849                s.end()
10850            }
10851            LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing => {
10852                // unit
10853                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10854                s.serialize_field(".tag", "legal_hold_already_releasing")?;
10855                s.end()
10856            }
10857            LegalHoldsPolicyReleaseError::LegalHoldPolicyNotFound => {
10858                // unit
10859                let mut s = serializer.serialize_struct("LegalHoldsPolicyReleaseError", 1)?;
10860                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
10861                s.end()
10862            }
10863            LegalHoldsPolicyReleaseError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
10864        }
10865    }
10866}
10867
10868impl ::std::error::Error for LegalHoldsPolicyReleaseError {
10869}
10870
10871impl ::std::fmt::Display for LegalHoldsPolicyReleaseError {
10872    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
10873        match self {
10874            LegalHoldsPolicyReleaseError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
10875            LegalHoldsPolicyReleaseError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
10876            LegalHoldsPolicyReleaseError::LegalHoldPerformingAnotherOperation => f.write_str("Legal hold is currently performing another operation."),
10877            LegalHoldsPolicyReleaseError::LegalHoldAlreadyReleasing => f.write_str("Legal hold is currently performing a release or is already released."),
10878            _ => write!(f, "{:?}", *self),
10879        }
10880    }
10881}
10882
10883// union extends LegalHoldsError
10884impl From<LegalHoldsError> for LegalHoldsPolicyReleaseError {
10885    fn from(parent: LegalHoldsError) -> Self {
10886        match parent {
10887            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyReleaseError::UnknownLegalHoldError,
10888            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyReleaseError::InsufficientPermissions,
10889            LegalHoldsError::Other => LegalHoldsPolicyReleaseError::Other,
10890        }
10891    }
10892}
10893#[derive(Debug, Clone, PartialEq, Eq)]
10894#[non_exhaustive] // structs may have more fields added in the future.
10895pub struct LegalHoldsPolicyUpdateArg {
10896    /// The legal hold Id.
10897    pub id: LegalHoldId,
10898    /// Policy new name.
10899    pub name: Option<LegalHoldPolicyName>,
10900    /// Policy new description.
10901    pub description: Option<LegalHoldPolicyDescription>,
10902    /// List of team member IDs to apply the policy on.
10903    pub members: Option<Vec<crate::types::team_common::TeamMemberId>>,
10904}
10905
10906impl LegalHoldsPolicyUpdateArg {
10907    pub fn new(id: LegalHoldId) -> Self {
10908        LegalHoldsPolicyUpdateArg {
10909            id,
10910            name: None,
10911            description: None,
10912            members: None,
10913        }
10914    }
10915
10916    pub fn with_name(mut self, value: LegalHoldPolicyName) -> Self {
10917        self.name = Some(value);
10918        self
10919    }
10920
10921    pub fn with_description(mut self, value: LegalHoldPolicyDescription) -> Self {
10922        self.description = Some(value);
10923        self
10924    }
10925
10926    pub fn with_members(mut self, value: Vec<crate::types::team_common::TeamMemberId>) -> Self {
10927        self.members = Some(value);
10928        self
10929    }
10930}
10931
10932const LEGAL_HOLDS_POLICY_UPDATE_ARG_FIELDS: &[&str] = &["id",
10933                                                        "name",
10934                                                        "description",
10935                                                        "members"];
10936impl LegalHoldsPolicyUpdateArg {
10937    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
10938        map: V,
10939    ) -> Result<LegalHoldsPolicyUpdateArg, V::Error> {
10940        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
10941    }
10942
10943    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
10944        mut map: V,
10945        optional: bool,
10946    ) -> Result<Option<LegalHoldsPolicyUpdateArg>, V::Error> {
10947        let mut field_id = None;
10948        let mut field_name = None;
10949        let mut field_description = None;
10950        let mut field_members = None;
10951        let mut nothing = true;
10952        while let Some(key) = map.next_key::<&str>()? {
10953            nothing = false;
10954            match key {
10955                "id" => {
10956                    if field_id.is_some() {
10957                        return Err(::serde::de::Error::duplicate_field("id"));
10958                    }
10959                    field_id = Some(map.next_value()?);
10960                }
10961                "name" => {
10962                    if field_name.is_some() {
10963                        return Err(::serde::de::Error::duplicate_field("name"));
10964                    }
10965                    field_name = Some(map.next_value()?);
10966                }
10967                "description" => {
10968                    if field_description.is_some() {
10969                        return Err(::serde::de::Error::duplicate_field("description"));
10970                    }
10971                    field_description = Some(map.next_value()?);
10972                }
10973                "members" => {
10974                    if field_members.is_some() {
10975                        return Err(::serde::de::Error::duplicate_field("members"));
10976                    }
10977                    field_members = Some(map.next_value()?);
10978                }
10979                _ => {
10980                    // unknown field allowed and ignored
10981                    map.next_value::<::serde_json::Value>()?;
10982                }
10983            }
10984        }
10985        if optional && nothing {
10986            return Ok(None);
10987        }
10988        let result = LegalHoldsPolicyUpdateArg {
10989            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
10990            name: field_name.and_then(Option::flatten),
10991            description: field_description.and_then(Option::flatten),
10992            members: field_members.and_then(Option::flatten),
10993        };
10994        Ok(Some(result))
10995    }
10996
10997    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
10998        &self,
10999        s: &mut S::SerializeStruct,
11000    ) -> Result<(), S::Error> {
11001        use serde::ser::SerializeStruct;
11002        s.serialize_field("id", &self.id)?;
11003        if let Some(val) = &self.name {
11004            s.serialize_field("name", val)?;
11005        }
11006        if let Some(val) = &self.description {
11007            s.serialize_field("description", val)?;
11008        }
11009        if let Some(val) = &self.members {
11010            s.serialize_field("members", val)?;
11011        }
11012        Ok(())
11013    }
11014}
11015
11016impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyUpdateArg {
11017    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11018        // struct deserializer
11019        use serde::de::{MapAccess, Visitor};
11020        struct StructVisitor;
11021        impl<'de> Visitor<'de> for StructVisitor {
11022            type Value = LegalHoldsPolicyUpdateArg;
11023            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11024                f.write_str("a LegalHoldsPolicyUpdateArg struct")
11025            }
11026            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11027                LegalHoldsPolicyUpdateArg::internal_deserialize(map)
11028            }
11029        }
11030        deserializer.deserialize_struct("LegalHoldsPolicyUpdateArg", LEGAL_HOLDS_POLICY_UPDATE_ARG_FIELDS, StructVisitor)
11031    }
11032}
11033
11034impl ::serde::ser::Serialize for LegalHoldsPolicyUpdateArg {
11035    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11036        // struct serializer
11037        use serde::ser::SerializeStruct;
11038        let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateArg", 4)?;
11039        self.internal_serialize::<S>(&mut s)?;
11040        s.end()
11041    }
11042}
11043
11044#[derive(Debug, Clone, PartialEq, Eq)]
11045#[non_exhaustive] // variants may be added in the future
11046pub enum LegalHoldsPolicyUpdateError {
11047    /// There has been an unknown legal hold error.
11048    UnknownLegalHoldError,
11049    /// You don't have permissions to perform this action.
11050    InsufficientPermissions,
11051    /// Temporary infrastructure failure, please retry.
11052    TransientError,
11053    /// Trying to release an inactive legal hold.
11054    InactiveLegalHold,
11055    /// Legal hold is currently performing another operation.
11056    LegalHoldPerformingAnotherOperation,
11057    /// Some members in the members list are not valid to be placed under legal hold.
11058    InvalidMembers,
11059    /// You cannot add more than 5 users in a legal hold.
11060    NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11061    /// The users list must have at least one user.
11062    EmptyMembersList,
11063    /// The name provided is already in use by another legal hold.
11064    NameMustBeUnique,
11065    /// Legal hold policy does not exist for
11066    /// [`LegalHoldsPolicyUpdateArg::id`](LegalHoldsPolicyUpdateArg).
11067    LegalHoldPolicyNotFound,
11068    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11069    /// typically indicates that this SDK version is out of date.
11070    Other,
11071}
11072
11073impl<'de> ::serde::de::Deserialize<'de> for LegalHoldsPolicyUpdateError {
11074    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11075        // union deserializer
11076        use serde::de::{self, MapAccess, Visitor};
11077        struct EnumVisitor;
11078        impl<'de> Visitor<'de> for EnumVisitor {
11079            type Value = LegalHoldsPolicyUpdateError;
11080            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11081                f.write_str("a LegalHoldsPolicyUpdateError structure")
11082            }
11083            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11084                let tag: &str = match map.next_key()? {
11085                    Some(".tag") => map.next_value()?,
11086                    _ => return Err(de::Error::missing_field(".tag"))
11087                };
11088                let value = match tag {
11089                    "unknown_legal_hold_error" => LegalHoldsPolicyUpdateError::UnknownLegalHoldError,
11090                    "insufficient_permissions" => LegalHoldsPolicyUpdateError::InsufficientPermissions,
11091                    "transient_error" => LegalHoldsPolicyUpdateError::TransientError,
11092                    "inactive_legal_hold" => LegalHoldsPolicyUpdateError::InactiveLegalHold,
11093                    "legal_hold_performing_another_operation" => LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation,
11094                    "invalid_members" => LegalHoldsPolicyUpdateError::InvalidMembers,
11095                    "number_of_users_on_hold_is_greater_than_hold_limitation" => LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation,
11096                    "empty_members_list" => LegalHoldsPolicyUpdateError::EmptyMembersList,
11097                    "name_must_be_unique" => LegalHoldsPolicyUpdateError::NameMustBeUnique,
11098                    "legal_hold_policy_not_found" => LegalHoldsPolicyUpdateError::LegalHoldPolicyNotFound,
11099                    _ => LegalHoldsPolicyUpdateError::Other,
11100                };
11101                crate::eat_json_fields(&mut map)?;
11102                Ok(value)
11103            }
11104        }
11105        const VARIANTS: &[&str] = &["unknown_legal_hold_error",
11106                                    "insufficient_permissions",
11107                                    "other",
11108                                    "transient_error",
11109                                    "inactive_legal_hold",
11110                                    "legal_hold_performing_another_operation",
11111                                    "invalid_members",
11112                                    "number_of_users_on_hold_is_greater_than_hold_limitation",
11113                                    "empty_members_list",
11114                                    "name_must_be_unique",
11115                                    "legal_hold_policy_not_found"];
11116        deserializer.deserialize_struct("LegalHoldsPolicyUpdateError", VARIANTS, EnumVisitor)
11117    }
11118}
11119
11120impl ::serde::ser::Serialize for LegalHoldsPolicyUpdateError {
11121    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11122        // union serializer
11123        use serde::ser::SerializeStruct;
11124        match self {
11125            LegalHoldsPolicyUpdateError::UnknownLegalHoldError => {
11126                // unit
11127                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11128                s.serialize_field(".tag", "unknown_legal_hold_error")?;
11129                s.end()
11130            }
11131            LegalHoldsPolicyUpdateError::InsufficientPermissions => {
11132                // unit
11133                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11134                s.serialize_field(".tag", "insufficient_permissions")?;
11135                s.end()
11136            }
11137            LegalHoldsPolicyUpdateError::TransientError => {
11138                // unit
11139                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11140                s.serialize_field(".tag", "transient_error")?;
11141                s.end()
11142            }
11143            LegalHoldsPolicyUpdateError::InactiveLegalHold => {
11144                // unit
11145                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11146                s.serialize_field(".tag", "inactive_legal_hold")?;
11147                s.end()
11148            }
11149            LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation => {
11150                // unit
11151                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11152                s.serialize_field(".tag", "legal_hold_performing_another_operation")?;
11153                s.end()
11154            }
11155            LegalHoldsPolicyUpdateError::InvalidMembers => {
11156                // unit
11157                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11158                s.serialize_field(".tag", "invalid_members")?;
11159                s.end()
11160            }
11161            LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => {
11162                // unit
11163                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11164                s.serialize_field(".tag", "number_of_users_on_hold_is_greater_than_hold_limitation")?;
11165                s.end()
11166            }
11167            LegalHoldsPolicyUpdateError::EmptyMembersList => {
11168                // unit
11169                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11170                s.serialize_field(".tag", "empty_members_list")?;
11171                s.end()
11172            }
11173            LegalHoldsPolicyUpdateError::NameMustBeUnique => {
11174                // unit
11175                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11176                s.serialize_field(".tag", "name_must_be_unique")?;
11177                s.end()
11178            }
11179            LegalHoldsPolicyUpdateError::LegalHoldPolicyNotFound => {
11180                // unit
11181                let mut s = serializer.serialize_struct("LegalHoldsPolicyUpdateError", 1)?;
11182                s.serialize_field(".tag", "legal_hold_policy_not_found")?;
11183                s.end()
11184            }
11185            LegalHoldsPolicyUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11186        }
11187    }
11188}
11189
11190impl ::std::error::Error for LegalHoldsPolicyUpdateError {
11191}
11192
11193impl ::std::fmt::Display for LegalHoldsPolicyUpdateError {
11194    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11195        match self {
11196            LegalHoldsPolicyUpdateError::UnknownLegalHoldError => f.write_str("There has been an unknown legal hold error."),
11197            LegalHoldsPolicyUpdateError::InsufficientPermissions => f.write_str("You don't have permissions to perform this action."),
11198            LegalHoldsPolicyUpdateError::TransientError => f.write_str("Temporary infrastructure failure, please retry."),
11199            LegalHoldsPolicyUpdateError::InactiveLegalHold => f.write_str("Trying to release an inactive legal hold."),
11200            LegalHoldsPolicyUpdateError::LegalHoldPerformingAnotherOperation => f.write_str("Legal hold is currently performing another operation."),
11201            LegalHoldsPolicyUpdateError::InvalidMembers => f.write_str("Some members in the members list are not valid to be placed under legal hold."),
11202            LegalHoldsPolicyUpdateError::NumberOfUsersOnHoldIsGreaterThanHoldLimitation => f.write_str("You cannot add more than 5 users in a legal hold."),
11203            LegalHoldsPolicyUpdateError::EmptyMembersList => f.write_str("The users list must have at least one user."),
11204            LegalHoldsPolicyUpdateError::NameMustBeUnique => f.write_str("The name provided is already in use by another legal hold."),
11205            _ => write!(f, "{:?}", *self),
11206        }
11207    }
11208}
11209
11210// union extends LegalHoldsError
11211impl From<LegalHoldsError> for LegalHoldsPolicyUpdateError {
11212    fn from(parent: LegalHoldsError) -> Self {
11213        match parent {
11214            LegalHoldsError::UnknownLegalHoldError => LegalHoldsPolicyUpdateError::UnknownLegalHoldError,
11215            LegalHoldsError::InsufficientPermissions => LegalHoldsPolicyUpdateError::InsufficientPermissions,
11216            LegalHoldsError::Other => LegalHoldsPolicyUpdateError::Other,
11217        }
11218    }
11219}
11220#[derive(Debug, Clone, PartialEq, Eq)]
11221#[non_exhaustive] // structs may have more fields added in the future.
11222pub struct ListMemberAppsArg {
11223    /// The team member id.
11224    pub team_member_id: String,
11225}
11226
11227impl ListMemberAppsArg {
11228    pub fn new(team_member_id: String) -> Self {
11229        ListMemberAppsArg {
11230            team_member_id,
11231        }
11232    }
11233}
11234
11235const LIST_MEMBER_APPS_ARG_FIELDS: &[&str] = &["team_member_id"];
11236impl ListMemberAppsArg {
11237    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11238        map: V,
11239    ) -> Result<ListMemberAppsArg, V::Error> {
11240        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11241    }
11242
11243    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11244        mut map: V,
11245        optional: bool,
11246    ) -> Result<Option<ListMemberAppsArg>, V::Error> {
11247        let mut field_team_member_id = None;
11248        let mut nothing = true;
11249        while let Some(key) = map.next_key::<&str>()? {
11250            nothing = false;
11251            match key {
11252                "team_member_id" => {
11253                    if field_team_member_id.is_some() {
11254                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
11255                    }
11256                    field_team_member_id = Some(map.next_value()?);
11257                }
11258                _ => {
11259                    // unknown field allowed and ignored
11260                    map.next_value::<::serde_json::Value>()?;
11261                }
11262            }
11263        }
11264        if optional && nothing {
11265            return Ok(None);
11266        }
11267        let result = ListMemberAppsArg {
11268            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
11269        };
11270        Ok(Some(result))
11271    }
11272
11273    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11274        &self,
11275        s: &mut S::SerializeStruct,
11276    ) -> Result<(), S::Error> {
11277        use serde::ser::SerializeStruct;
11278        s.serialize_field("team_member_id", &self.team_member_id)?;
11279        Ok(())
11280    }
11281}
11282
11283impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsArg {
11284    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11285        // struct deserializer
11286        use serde::de::{MapAccess, Visitor};
11287        struct StructVisitor;
11288        impl<'de> Visitor<'de> for StructVisitor {
11289            type Value = ListMemberAppsArg;
11290            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11291                f.write_str("a ListMemberAppsArg struct")
11292            }
11293            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11294                ListMemberAppsArg::internal_deserialize(map)
11295            }
11296        }
11297        deserializer.deserialize_struct("ListMemberAppsArg", LIST_MEMBER_APPS_ARG_FIELDS, StructVisitor)
11298    }
11299}
11300
11301impl ::serde::ser::Serialize for ListMemberAppsArg {
11302    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11303        // struct serializer
11304        use serde::ser::SerializeStruct;
11305        let mut s = serializer.serialize_struct("ListMemberAppsArg", 1)?;
11306        self.internal_serialize::<S>(&mut s)?;
11307        s.end()
11308    }
11309}
11310
11311/// Error returned by
11312/// [`linked_apps_list_member_linked_apps()`](crate::team::linked_apps_list_member_linked_apps).
11313#[derive(Debug, Clone, PartialEq, Eq)]
11314#[non_exhaustive] // variants may be added in the future
11315pub enum ListMemberAppsError {
11316    /// Member not found.
11317    MemberNotFound,
11318    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11319    /// typically indicates that this SDK version is out of date.
11320    Other,
11321}
11322
11323impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsError {
11324    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11325        // union deserializer
11326        use serde::de::{self, MapAccess, Visitor};
11327        struct EnumVisitor;
11328        impl<'de> Visitor<'de> for EnumVisitor {
11329            type Value = ListMemberAppsError;
11330            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11331                f.write_str("a ListMemberAppsError structure")
11332            }
11333            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11334                let tag: &str = match map.next_key()? {
11335                    Some(".tag") => map.next_value()?,
11336                    _ => return Err(de::Error::missing_field(".tag"))
11337                };
11338                let value = match tag {
11339                    "member_not_found" => ListMemberAppsError::MemberNotFound,
11340                    _ => ListMemberAppsError::Other,
11341                };
11342                crate::eat_json_fields(&mut map)?;
11343                Ok(value)
11344            }
11345        }
11346        const VARIANTS: &[&str] = &["member_not_found",
11347                                    "other"];
11348        deserializer.deserialize_struct("ListMemberAppsError", VARIANTS, EnumVisitor)
11349    }
11350}
11351
11352impl ::serde::ser::Serialize for ListMemberAppsError {
11353    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11354        // union serializer
11355        use serde::ser::SerializeStruct;
11356        match self {
11357            ListMemberAppsError::MemberNotFound => {
11358                // unit
11359                let mut s = serializer.serialize_struct("ListMemberAppsError", 1)?;
11360                s.serialize_field(".tag", "member_not_found")?;
11361                s.end()
11362            }
11363            ListMemberAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11364        }
11365    }
11366}
11367
11368impl ::std::error::Error for ListMemberAppsError {
11369}
11370
11371impl ::std::fmt::Display for ListMemberAppsError {
11372    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11373        match self {
11374            ListMemberAppsError::MemberNotFound => f.write_str("Member not found."),
11375            _ => write!(f, "{:?}", *self),
11376        }
11377    }
11378}
11379
11380#[derive(Debug, Clone, PartialEq, Eq)]
11381#[non_exhaustive] // structs may have more fields added in the future.
11382pub struct ListMemberAppsResult {
11383    /// List of third party applications linked by this team member.
11384    pub linked_api_apps: Vec<ApiApp>,
11385}
11386
11387impl ListMemberAppsResult {
11388    pub fn new(linked_api_apps: Vec<ApiApp>) -> Self {
11389        ListMemberAppsResult {
11390            linked_api_apps,
11391        }
11392    }
11393}
11394
11395const LIST_MEMBER_APPS_RESULT_FIELDS: &[&str] = &["linked_api_apps"];
11396impl ListMemberAppsResult {
11397    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11398        map: V,
11399    ) -> Result<ListMemberAppsResult, V::Error> {
11400        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11401    }
11402
11403    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11404        mut map: V,
11405        optional: bool,
11406    ) -> Result<Option<ListMemberAppsResult>, V::Error> {
11407        let mut field_linked_api_apps = None;
11408        let mut nothing = true;
11409        while let Some(key) = map.next_key::<&str>()? {
11410            nothing = false;
11411            match key {
11412                "linked_api_apps" => {
11413                    if field_linked_api_apps.is_some() {
11414                        return Err(::serde::de::Error::duplicate_field("linked_api_apps"));
11415                    }
11416                    field_linked_api_apps = Some(map.next_value()?);
11417                }
11418                _ => {
11419                    // unknown field allowed and ignored
11420                    map.next_value::<::serde_json::Value>()?;
11421                }
11422            }
11423        }
11424        if optional && nothing {
11425            return Ok(None);
11426        }
11427        let result = ListMemberAppsResult {
11428            linked_api_apps: field_linked_api_apps.ok_or_else(|| ::serde::de::Error::missing_field("linked_api_apps"))?,
11429        };
11430        Ok(Some(result))
11431    }
11432
11433    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11434        &self,
11435        s: &mut S::SerializeStruct,
11436    ) -> Result<(), S::Error> {
11437        use serde::ser::SerializeStruct;
11438        s.serialize_field("linked_api_apps", &self.linked_api_apps)?;
11439        Ok(())
11440    }
11441}
11442
11443impl<'de> ::serde::de::Deserialize<'de> for ListMemberAppsResult {
11444    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11445        // struct deserializer
11446        use serde::de::{MapAccess, Visitor};
11447        struct StructVisitor;
11448        impl<'de> Visitor<'de> for StructVisitor {
11449            type Value = ListMemberAppsResult;
11450            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11451                f.write_str("a ListMemberAppsResult struct")
11452            }
11453            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11454                ListMemberAppsResult::internal_deserialize(map)
11455            }
11456        }
11457        deserializer.deserialize_struct("ListMemberAppsResult", LIST_MEMBER_APPS_RESULT_FIELDS, StructVisitor)
11458    }
11459}
11460
11461impl ::serde::ser::Serialize for ListMemberAppsResult {
11462    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11463        // struct serializer
11464        use serde::ser::SerializeStruct;
11465        let mut s = serializer.serialize_struct("ListMemberAppsResult", 1)?;
11466        self.internal_serialize::<S>(&mut s)?;
11467        s.end()
11468    }
11469}
11470
11471#[derive(Debug, Clone, PartialEq, Eq)]
11472#[non_exhaustive] // structs may have more fields added in the future.
11473pub struct ListMemberDevicesArg {
11474    /// The team's member id.
11475    pub team_member_id: String,
11476    /// Whether to list web sessions of the team's member.
11477    pub include_web_sessions: bool,
11478    /// Whether to list linked desktop devices of the team's member.
11479    pub include_desktop_clients: bool,
11480    /// Whether to list linked mobile devices of the team's member.
11481    pub include_mobile_clients: bool,
11482}
11483
11484impl ListMemberDevicesArg {
11485    pub fn new(team_member_id: String) -> Self {
11486        ListMemberDevicesArg {
11487            team_member_id,
11488            include_web_sessions: true,
11489            include_desktop_clients: true,
11490            include_mobile_clients: true,
11491        }
11492    }
11493
11494    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
11495        self.include_web_sessions = value;
11496        self
11497    }
11498
11499    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
11500        self.include_desktop_clients = value;
11501        self
11502    }
11503
11504    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
11505        self.include_mobile_clients = value;
11506        self
11507    }
11508}
11509
11510const LIST_MEMBER_DEVICES_ARG_FIELDS: &[&str] = &["team_member_id",
11511                                                  "include_web_sessions",
11512                                                  "include_desktop_clients",
11513                                                  "include_mobile_clients"];
11514impl ListMemberDevicesArg {
11515    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11516        map: V,
11517    ) -> Result<ListMemberDevicesArg, V::Error> {
11518        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
11519    }
11520
11521    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
11522        mut map: V,
11523        optional: bool,
11524    ) -> Result<Option<ListMemberDevicesArg>, V::Error> {
11525        let mut field_team_member_id = None;
11526        let mut field_include_web_sessions = None;
11527        let mut field_include_desktop_clients = None;
11528        let mut field_include_mobile_clients = None;
11529        let mut nothing = true;
11530        while let Some(key) = map.next_key::<&str>()? {
11531            nothing = false;
11532            match key {
11533                "team_member_id" => {
11534                    if field_team_member_id.is_some() {
11535                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
11536                    }
11537                    field_team_member_id = Some(map.next_value()?);
11538                }
11539                "include_web_sessions" => {
11540                    if field_include_web_sessions.is_some() {
11541                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
11542                    }
11543                    field_include_web_sessions = Some(map.next_value()?);
11544                }
11545                "include_desktop_clients" => {
11546                    if field_include_desktop_clients.is_some() {
11547                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
11548                    }
11549                    field_include_desktop_clients = Some(map.next_value()?);
11550                }
11551                "include_mobile_clients" => {
11552                    if field_include_mobile_clients.is_some() {
11553                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
11554                    }
11555                    field_include_mobile_clients = Some(map.next_value()?);
11556                }
11557                _ => {
11558                    // unknown field allowed and ignored
11559                    map.next_value::<::serde_json::Value>()?;
11560                }
11561            }
11562        }
11563        if optional && nothing {
11564            return Ok(None);
11565        }
11566        let result = ListMemberDevicesArg {
11567            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
11568            include_web_sessions: field_include_web_sessions.unwrap_or(true),
11569            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
11570            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
11571        };
11572        Ok(Some(result))
11573    }
11574
11575    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11576        &self,
11577        s: &mut S::SerializeStruct,
11578    ) -> Result<(), S::Error> {
11579        use serde::ser::SerializeStruct;
11580        s.serialize_field("team_member_id", &self.team_member_id)?;
11581        if !self.include_web_sessions {
11582            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
11583        }
11584        if !self.include_desktop_clients {
11585            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
11586        }
11587        if !self.include_mobile_clients {
11588            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
11589        }
11590        Ok(())
11591    }
11592}
11593
11594impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesArg {
11595    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11596        // struct deserializer
11597        use serde::de::{MapAccess, Visitor};
11598        struct StructVisitor;
11599        impl<'de> Visitor<'de> for StructVisitor {
11600            type Value = ListMemberDevicesArg;
11601            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11602                f.write_str("a ListMemberDevicesArg struct")
11603            }
11604            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11605                ListMemberDevicesArg::internal_deserialize(map)
11606            }
11607        }
11608        deserializer.deserialize_struct("ListMemberDevicesArg", LIST_MEMBER_DEVICES_ARG_FIELDS, StructVisitor)
11609    }
11610}
11611
11612impl ::serde::ser::Serialize for ListMemberDevicesArg {
11613    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11614        // struct serializer
11615        use serde::ser::SerializeStruct;
11616        let mut s = serializer.serialize_struct("ListMemberDevicesArg", 4)?;
11617        self.internal_serialize::<S>(&mut s)?;
11618        s.end()
11619    }
11620}
11621
11622#[derive(Debug, Clone, PartialEq, Eq)]
11623#[non_exhaustive] // variants may be added in the future
11624pub enum ListMemberDevicesError {
11625    /// Member not found.
11626    MemberNotFound,
11627    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11628    /// typically indicates that this SDK version is out of date.
11629    Other,
11630}
11631
11632impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesError {
11633    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11634        // union deserializer
11635        use serde::de::{self, MapAccess, Visitor};
11636        struct EnumVisitor;
11637        impl<'de> Visitor<'de> for EnumVisitor {
11638            type Value = ListMemberDevicesError;
11639            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11640                f.write_str("a ListMemberDevicesError structure")
11641            }
11642            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11643                let tag: &str = match map.next_key()? {
11644                    Some(".tag") => map.next_value()?,
11645                    _ => return Err(de::Error::missing_field(".tag"))
11646                };
11647                let value = match tag {
11648                    "member_not_found" => ListMemberDevicesError::MemberNotFound,
11649                    _ => ListMemberDevicesError::Other,
11650                };
11651                crate::eat_json_fields(&mut map)?;
11652                Ok(value)
11653            }
11654        }
11655        const VARIANTS: &[&str] = &["member_not_found",
11656                                    "other"];
11657        deserializer.deserialize_struct("ListMemberDevicesError", VARIANTS, EnumVisitor)
11658    }
11659}
11660
11661impl ::serde::ser::Serialize for ListMemberDevicesError {
11662    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11663        // union serializer
11664        use serde::ser::SerializeStruct;
11665        match self {
11666            ListMemberDevicesError::MemberNotFound => {
11667                // unit
11668                let mut s = serializer.serialize_struct("ListMemberDevicesError", 1)?;
11669                s.serialize_field(".tag", "member_not_found")?;
11670                s.end()
11671            }
11672            ListMemberDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11673        }
11674    }
11675}
11676
11677impl ::std::error::Error for ListMemberDevicesError {
11678}
11679
11680impl ::std::fmt::Display for ListMemberDevicesError {
11681    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11682        match self {
11683            ListMemberDevicesError::MemberNotFound => f.write_str("Member not found."),
11684            _ => write!(f, "{:?}", *self),
11685        }
11686    }
11687}
11688
11689#[derive(Debug, Clone, PartialEq, Eq, Default)]
11690#[non_exhaustive] // structs may have more fields added in the future.
11691pub struct ListMemberDevicesResult {
11692    /// List of web sessions made by this team member.
11693    pub active_web_sessions: Option<Vec<ActiveWebSession>>,
11694    /// List of desktop clients used by this team member.
11695    pub desktop_client_sessions: Option<Vec<DesktopClientSession>>,
11696    /// List of mobile client used by this team member.
11697    pub mobile_client_sessions: Option<Vec<MobileClientSession>>,
11698}
11699
11700impl ListMemberDevicesResult {
11701    pub fn with_active_web_sessions(mut self, value: Vec<ActiveWebSession>) -> Self {
11702        self.active_web_sessions = Some(value);
11703        self
11704    }
11705
11706    pub fn with_desktop_client_sessions(mut self, value: Vec<DesktopClientSession>) -> Self {
11707        self.desktop_client_sessions = Some(value);
11708        self
11709    }
11710
11711    pub fn with_mobile_client_sessions(mut self, value: Vec<MobileClientSession>) -> Self {
11712        self.mobile_client_sessions = Some(value);
11713        self
11714    }
11715}
11716
11717const LIST_MEMBER_DEVICES_RESULT_FIELDS: &[&str] = &["active_web_sessions",
11718                                                     "desktop_client_sessions",
11719                                                     "mobile_client_sessions"];
11720impl ListMemberDevicesResult {
11721    // no _opt deserializer
11722    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11723        mut map: V,
11724    ) -> Result<ListMemberDevicesResult, V::Error> {
11725        let mut field_active_web_sessions = None;
11726        let mut field_desktop_client_sessions = None;
11727        let mut field_mobile_client_sessions = None;
11728        while let Some(key) = map.next_key::<&str>()? {
11729            match key {
11730                "active_web_sessions" => {
11731                    if field_active_web_sessions.is_some() {
11732                        return Err(::serde::de::Error::duplicate_field("active_web_sessions"));
11733                    }
11734                    field_active_web_sessions = Some(map.next_value()?);
11735                }
11736                "desktop_client_sessions" => {
11737                    if field_desktop_client_sessions.is_some() {
11738                        return Err(::serde::de::Error::duplicate_field("desktop_client_sessions"));
11739                    }
11740                    field_desktop_client_sessions = Some(map.next_value()?);
11741                }
11742                "mobile_client_sessions" => {
11743                    if field_mobile_client_sessions.is_some() {
11744                        return Err(::serde::de::Error::duplicate_field("mobile_client_sessions"));
11745                    }
11746                    field_mobile_client_sessions = Some(map.next_value()?);
11747                }
11748                _ => {
11749                    // unknown field allowed and ignored
11750                    map.next_value::<::serde_json::Value>()?;
11751                }
11752            }
11753        }
11754        let result = ListMemberDevicesResult {
11755            active_web_sessions: field_active_web_sessions.and_then(Option::flatten),
11756            desktop_client_sessions: field_desktop_client_sessions.and_then(Option::flatten),
11757            mobile_client_sessions: field_mobile_client_sessions.and_then(Option::flatten),
11758        };
11759        Ok(result)
11760    }
11761
11762    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11763        &self,
11764        s: &mut S::SerializeStruct,
11765    ) -> Result<(), S::Error> {
11766        use serde::ser::SerializeStruct;
11767        if let Some(val) = &self.active_web_sessions {
11768            s.serialize_field("active_web_sessions", val)?;
11769        }
11770        if let Some(val) = &self.desktop_client_sessions {
11771            s.serialize_field("desktop_client_sessions", val)?;
11772        }
11773        if let Some(val) = &self.mobile_client_sessions {
11774            s.serialize_field("mobile_client_sessions", val)?;
11775        }
11776        Ok(())
11777    }
11778}
11779
11780impl<'de> ::serde::de::Deserialize<'de> for ListMemberDevicesResult {
11781    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11782        // struct deserializer
11783        use serde::de::{MapAccess, Visitor};
11784        struct StructVisitor;
11785        impl<'de> Visitor<'de> for StructVisitor {
11786            type Value = ListMemberDevicesResult;
11787            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11788                f.write_str("a ListMemberDevicesResult struct")
11789            }
11790            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11791                ListMemberDevicesResult::internal_deserialize(map)
11792            }
11793        }
11794        deserializer.deserialize_struct("ListMemberDevicesResult", LIST_MEMBER_DEVICES_RESULT_FIELDS, StructVisitor)
11795    }
11796}
11797
11798impl ::serde::ser::Serialize for ListMemberDevicesResult {
11799    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11800        // struct serializer
11801        use serde::ser::SerializeStruct;
11802        let mut s = serializer.serialize_struct("ListMemberDevicesResult", 3)?;
11803        self.internal_serialize::<S>(&mut s)?;
11804        s.end()
11805    }
11806}
11807
11808/// Arguments for
11809/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11810#[derive(Debug, Clone, PartialEq, Eq, Default)]
11811#[non_exhaustive] // structs may have more fields added in the future.
11812pub struct ListMembersAppsArg {
11813    /// At the first call to the
11814    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11815    /// the cursor shouldn't be passed. Then, if the result of the call includes a cursor, the
11816    /// following requests should include the received cursors in order to receive the next sub list
11817    /// of the team applications.
11818    pub cursor: Option<String>,
11819}
11820
11821impl ListMembersAppsArg {
11822    pub fn with_cursor(mut self, value: String) -> Self {
11823        self.cursor = Some(value);
11824        self
11825    }
11826}
11827
11828const LIST_MEMBERS_APPS_ARG_FIELDS: &[&str] = &["cursor"];
11829impl ListMembersAppsArg {
11830    // no _opt deserializer
11831    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
11832        mut map: V,
11833    ) -> Result<ListMembersAppsArg, V::Error> {
11834        let mut field_cursor = None;
11835        while let Some(key) = map.next_key::<&str>()? {
11836            match key {
11837                "cursor" => {
11838                    if field_cursor.is_some() {
11839                        return Err(::serde::de::Error::duplicate_field("cursor"));
11840                    }
11841                    field_cursor = Some(map.next_value()?);
11842                }
11843                _ => {
11844                    // unknown field allowed and ignored
11845                    map.next_value::<::serde_json::Value>()?;
11846                }
11847            }
11848        }
11849        let result = ListMembersAppsArg {
11850            cursor: field_cursor.and_then(Option::flatten),
11851        };
11852        Ok(result)
11853    }
11854
11855    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
11856        &self,
11857        s: &mut S::SerializeStruct,
11858    ) -> Result<(), S::Error> {
11859        use serde::ser::SerializeStruct;
11860        if let Some(val) = &self.cursor {
11861            s.serialize_field("cursor", val)?;
11862        }
11863        Ok(())
11864    }
11865}
11866
11867impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsArg {
11868    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11869        // struct deserializer
11870        use serde::de::{MapAccess, Visitor};
11871        struct StructVisitor;
11872        impl<'de> Visitor<'de> for StructVisitor {
11873            type Value = ListMembersAppsArg;
11874            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11875                f.write_str("a ListMembersAppsArg struct")
11876            }
11877            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
11878                ListMembersAppsArg::internal_deserialize(map)
11879            }
11880        }
11881        deserializer.deserialize_struct("ListMembersAppsArg", LIST_MEMBERS_APPS_ARG_FIELDS, StructVisitor)
11882    }
11883}
11884
11885impl ::serde::ser::Serialize for ListMembersAppsArg {
11886    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11887        // struct serializer
11888        use serde::ser::SerializeStruct;
11889        let mut s = serializer.serialize_struct("ListMembersAppsArg", 1)?;
11890        self.internal_serialize::<S>(&mut s)?;
11891        s.end()
11892    }
11893}
11894
11895/// Error returned by
11896/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11897#[derive(Debug, Clone, PartialEq, Eq)]
11898#[non_exhaustive] // variants may be added in the future
11899pub enum ListMembersAppsError {
11900    /// Indicates that the cursor has been invalidated. Call
11901    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11902    /// again with an empty cursor to obtain a new cursor.
11903    Reset,
11904    /// Catch-all used for unrecognized values returned from the server. Encountering this value
11905    /// typically indicates that this SDK version is out of date.
11906    Other,
11907}
11908
11909impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsError {
11910    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
11911        // union deserializer
11912        use serde::de::{self, MapAccess, Visitor};
11913        struct EnumVisitor;
11914        impl<'de> Visitor<'de> for EnumVisitor {
11915            type Value = ListMembersAppsError;
11916            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11917                f.write_str("a ListMembersAppsError structure")
11918            }
11919            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
11920                let tag: &str = match map.next_key()? {
11921                    Some(".tag") => map.next_value()?,
11922                    _ => return Err(de::Error::missing_field(".tag"))
11923                };
11924                let value = match tag {
11925                    "reset" => ListMembersAppsError::Reset,
11926                    _ => ListMembersAppsError::Other,
11927                };
11928                crate::eat_json_fields(&mut map)?;
11929                Ok(value)
11930            }
11931        }
11932        const VARIANTS: &[&str] = &["reset",
11933                                    "other"];
11934        deserializer.deserialize_struct("ListMembersAppsError", VARIANTS, EnumVisitor)
11935    }
11936}
11937
11938impl ::serde::ser::Serialize for ListMembersAppsError {
11939    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
11940        // union serializer
11941        use serde::ser::SerializeStruct;
11942        match self {
11943            ListMembersAppsError::Reset => {
11944                // unit
11945                let mut s = serializer.serialize_struct("ListMembersAppsError", 1)?;
11946                s.serialize_field(".tag", "reset")?;
11947                s.end()
11948            }
11949            ListMembersAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
11950        }
11951    }
11952}
11953
11954impl ::std::error::Error for ListMembersAppsError {
11955}
11956
11957impl ::std::fmt::Display for ListMembersAppsError {
11958    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
11959        write!(f, "{:?}", *self)
11960    }
11961}
11962
11963/// Information returned by
11964/// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps).
11965#[derive(Debug, Clone, PartialEq, Eq)]
11966#[non_exhaustive] // structs may have more fields added in the future.
11967pub struct ListMembersAppsResult {
11968    /// The linked applications of each member of the team.
11969    pub apps: Vec<MemberLinkedApps>,
11970    /// If true, then there are more apps available. Pass the cursor to
11971    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11972    /// to retrieve the rest.
11973    pub has_more: bool,
11974    /// Pass the cursor into
11975    /// [`linked_apps_list_members_linked_apps()`](crate::team::linked_apps_list_members_linked_apps)
11976    /// to receive the next sub list of team's applications.
11977    pub cursor: Option<String>,
11978}
11979
11980impl ListMembersAppsResult {
11981    pub fn new(apps: Vec<MemberLinkedApps>, has_more: bool) -> Self {
11982        ListMembersAppsResult {
11983            apps,
11984            has_more,
11985            cursor: None,
11986        }
11987    }
11988
11989    pub fn with_cursor(mut self, value: String) -> Self {
11990        self.cursor = Some(value);
11991        self
11992    }
11993}
11994
11995const LIST_MEMBERS_APPS_RESULT_FIELDS: &[&str] = &["apps",
11996                                                   "has_more",
11997                                                   "cursor"];
11998impl ListMembersAppsResult {
11999    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12000        map: V,
12001    ) -> Result<ListMembersAppsResult, V::Error> {
12002        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12003    }
12004
12005    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12006        mut map: V,
12007        optional: bool,
12008    ) -> Result<Option<ListMembersAppsResult>, V::Error> {
12009        let mut field_apps = None;
12010        let mut field_has_more = None;
12011        let mut field_cursor = None;
12012        let mut nothing = true;
12013        while let Some(key) = map.next_key::<&str>()? {
12014            nothing = false;
12015            match key {
12016                "apps" => {
12017                    if field_apps.is_some() {
12018                        return Err(::serde::de::Error::duplicate_field("apps"));
12019                    }
12020                    field_apps = Some(map.next_value()?);
12021                }
12022                "has_more" => {
12023                    if field_has_more.is_some() {
12024                        return Err(::serde::de::Error::duplicate_field("has_more"));
12025                    }
12026                    field_has_more = Some(map.next_value()?);
12027                }
12028                "cursor" => {
12029                    if field_cursor.is_some() {
12030                        return Err(::serde::de::Error::duplicate_field("cursor"));
12031                    }
12032                    field_cursor = Some(map.next_value()?);
12033                }
12034                _ => {
12035                    // unknown field allowed and ignored
12036                    map.next_value::<::serde_json::Value>()?;
12037                }
12038            }
12039        }
12040        if optional && nothing {
12041            return Ok(None);
12042        }
12043        let result = ListMembersAppsResult {
12044            apps: field_apps.ok_or_else(|| ::serde::de::Error::missing_field("apps"))?,
12045            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12046            cursor: field_cursor.and_then(Option::flatten),
12047        };
12048        Ok(Some(result))
12049    }
12050
12051    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12052        &self,
12053        s: &mut S::SerializeStruct,
12054    ) -> Result<(), S::Error> {
12055        use serde::ser::SerializeStruct;
12056        s.serialize_field("apps", &self.apps)?;
12057        s.serialize_field("has_more", &self.has_more)?;
12058        if let Some(val) = &self.cursor {
12059            s.serialize_field("cursor", val)?;
12060        }
12061        Ok(())
12062    }
12063}
12064
12065impl<'de> ::serde::de::Deserialize<'de> for ListMembersAppsResult {
12066    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12067        // struct deserializer
12068        use serde::de::{MapAccess, Visitor};
12069        struct StructVisitor;
12070        impl<'de> Visitor<'de> for StructVisitor {
12071            type Value = ListMembersAppsResult;
12072            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12073                f.write_str("a ListMembersAppsResult struct")
12074            }
12075            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12076                ListMembersAppsResult::internal_deserialize(map)
12077            }
12078        }
12079        deserializer.deserialize_struct("ListMembersAppsResult", LIST_MEMBERS_APPS_RESULT_FIELDS, StructVisitor)
12080    }
12081}
12082
12083impl ::serde::ser::Serialize for ListMembersAppsResult {
12084    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12085        // struct serializer
12086        use serde::ser::SerializeStruct;
12087        let mut s = serializer.serialize_struct("ListMembersAppsResult", 3)?;
12088        self.internal_serialize::<S>(&mut s)?;
12089        s.end()
12090    }
12091}
12092
12093#[derive(Debug, Clone, PartialEq, Eq)]
12094#[non_exhaustive] // structs may have more fields added in the future.
12095pub struct ListMembersDevicesArg {
12096    /// At the first call to the
12097    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) the cursor
12098    /// shouldn't be passed. Then, if the result of the call includes a cursor, the following
12099    /// requests should include the received cursors in order to receive the next sub list of team
12100    /// devices.
12101    pub cursor: Option<String>,
12102    /// Whether to list web sessions of the team members.
12103    pub include_web_sessions: bool,
12104    /// Whether to list desktop clients of the team members.
12105    pub include_desktop_clients: bool,
12106    /// Whether to list mobile clients of the team members.
12107    pub include_mobile_clients: bool,
12108}
12109
12110impl Default for ListMembersDevicesArg {
12111    fn default() -> Self {
12112        ListMembersDevicesArg {
12113            cursor: None,
12114            include_web_sessions: true,
12115            include_desktop_clients: true,
12116            include_mobile_clients: true,
12117        }
12118    }
12119}
12120
12121impl ListMembersDevicesArg {
12122    pub fn with_cursor(mut self, value: String) -> Self {
12123        self.cursor = Some(value);
12124        self
12125    }
12126
12127    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
12128        self.include_web_sessions = value;
12129        self
12130    }
12131
12132    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
12133        self.include_desktop_clients = value;
12134        self
12135    }
12136
12137    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
12138        self.include_mobile_clients = value;
12139        self
12140    }
12141}
12142
12143const LIST_MEMBERS_DEVICES_ARG_FIELDS: &[&str] = &["cursor",
12144                                                   "include_web_sessions",
12145                                                   "include_desktop_clients",
12146                                                   "include_mobile_clients"];
12147impl ListMembersDevicesArg {
12148    // no _opt deserializer
12149    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12150        mut map: V,
12151    ) -> Result<ListMembersDevicesArg, V::Error> {
12152        let mut field_cursor = None;
12153        let mut field_include_web_sessions = None;
12154        let mut field_include_desktop_clients = None;
12155        let mut field_include_mobile_clients = None;
12156        while let Some(key) = map.next_key::<&str>()? {
12157            match key {
12158                "cursor" => {
12159                    if field_cursor.is_some() {
12160                        return Err(::serde::de::Error::duplicate_field("cursor"));
12161                    }
12162                    field_cursor = Some(map.next_value()?);
12163                }
12164                "include_web_sessions" => {
12165                    if field_include_web_sessions.is_some() {
12166                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
12167                    }
12168                    field_include_web_sessions = Some(map.next_value()?);
12169                }
12170                "include_desktop_clients" => {
12171                    if field_include_desktop_clients.is_some() {
12172                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
12173                    }
12174                    field_include_desktop_clients = Some(map.next_value()?);
12175                }
12176                "include_mobile_clients" => {
12177                    if field_include_mobile_clients.is_some() {
12178                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
12179                    }
12180                    field_include_mobile_clients = Some(map.next_value()?);
12181                }
12182                _ => {
12183                    // unknown field allowed and ignored
12184                    map.next_value::<::serde_json::Value>()?;
12185                }
12186            }
12187        }
12188        let result = ListMembersDevicesArg {
12189            cursor: field_cursor.and_then(Option::flatten),
12190            include_web_sessions: field_include_web_sessions.unwrap_or(true),
12191            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
12192            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
12193        };
12194        Ok(result)
12195    }
12196
12197    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12198        &self,
12199        s: &mut S::SerializeStruct,
12200    ) -> Result<(), S::Error> {
12201        use serde::ser::SerializeStruct;
12202        if let Some(val) = &self.cursor {
12203            s.serialize_field("cursor", val)?;
12204        }
12205        if !self.include_web_sessions {
12206            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
12207        }
12208        if !self.include_desktop_clients {
12209            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
12210        }
12211        if !self.include_mobile_clients {
12212            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
12213        }
12214        Ok(())
12215    }
12216}
12217
12218impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesArg {
12219    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12220        // struct deserializer
12221        use serde::de::{MapAccess, Visitor};
12222        struct StructVisitor;
12223        impl<'de> Visitor<'de> for StructVisitor {
12224            type Value = ListMembersDevicesArg;
12225            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12226                f.write_str("a ListMembersDevicesArg struct")
12227            }
12228            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12229                ListMembersDevicesArg::internal_deserialize(map)
12230            }
12231        }
12232        deserializer.deserialize_struct("ListMembersDevicesArg", LIST_MEMBERS_DEVICES_ARG_FIELDS, StructVisitor)
12233    }
12234}
12235
12236impl ::serde::ser::Serialize for ListMembersDevicesArg {
12237    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12238        // struct serializer
12239        use serde::ser::SerializeStruct;
12240        let mut s = serializer.serialize_struct("ListMembersDevicesArg", 4)?;
12241        self.internal_serialize::<S>(&mut s)?;
12242        s.end()
12243    }
12244}
12245
12246#[derive(Debug, Clone, PartialEq, Eq)]
12247#[non_exhaustive] // variants may be added in the future
12248pub enum ListMembersDevicesError {
12249    /// Indicates that the cursor has been invalidated. Call
12250    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) again with an
12251    /// empty cursor to obtain a new cursor.
12252    Reset,
12253    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12254    /// typically indicates that this SDK version is out of date.
12255    Other,
12256}
12257
12258impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesError {
12259    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12260        // union deserializer
12261        use serde::de::{self, MapAccess, Visitor};
12262        struct EnumVisitor;
12263        impl<'de> Visitor<'de> for EnumVisitor {
12264            type Value = ListMembersDevicesError;
12265            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12266                f.write_str("a ListMembersDevicesError structure")
12267            }
12268            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12269                let tag: &str = match map.next_key()? {
12270                    Some(".tag") => map.next_value()?,
12271                    _ => return Err(de::Error::missing_field(".tag"))
12272                };
12273                let value = match tag {
12274                    "reset" => ListMembersDevicesError::Reset,
12275                    _ => ListMembersDevicesError::Other,
12276                };
12277                crate::eat_json_fields(&mut map)?;
12278                Ok(value)
12279            }
12280        }
12281        const VARIANTS: &[&str] = &["reset",
12282                                    "other"];
12283        deserializer.deserialize_struct("ListMembersDevicesError", VARIANTS, EnumVisitor)
12284    }
12285}
12286
12287impl ::serde::ser::Serialize for ListMembersDevicesError {
12288    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12289        // union serializer
12290        use serde::ser::SerializeStruct;
12291        match self {
12292            ListMembersDevicesError::Reset => {
12293                // unit
12294                let mut s = serializer.serialize_struct("ListMembersDevicesError", 1)?;
12295                s.serialize_field(".tag", "reset")?;
12296                s.end()
12297            }
12298            ListMembersDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12299        }
12300    }
12301}
12302
12303impl ::std::error::Error for ListMembersDevicesError {
12304}
12305
12306impl ::std::fmt::Display for ListMembersDevicesError {
12307    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12308        write!(f, "{:?}", *self)
12309    }
12310}
12311
12312#[derive(Debug, Clone, PartialEq, Eq)]
12313#[non_exhaustive] // structs may have more fields added in the future.
12314pub struct ListMembersDevicesResult {
12315    /// The devices of each member of the team.
12316    pub devices: Vec<MemberDevices>,
12317    /// If true, then there are more devices available. Pass the cursor to
12318    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) to retrieve
12319    /// the rest.
12320    pub has_more: bool,
12321    /// Pass the cursor into
12322    /// [`devices_list_members_devices()`](crate::team::devices_list_members_devices) to receive the
12323    /// next sub list of team's devices.
12324    pub cursor: Option<String>,
12325}
12326
12327impl ListMembersDevicesResult {
12328    pub fn new(devices: Vec<MemberDevices>, has_more: bool) -> Self {
12329        ListMembersDevicesResult {
12330            devices,
12331            has_more,
12332            cursor: None,
12333        }
12334    }
12335
12336    pub fn with_cursor(mut self, value: String) -> Self {
12337        self.cursor = Some(value);
12338        self
12339    }
12340}
12341
12342const LIST_MEMBERS_DEVICES_RESULT_FIELDS: &[&str] = &["devices",
12343                                                      "has_more",
12344                                                      "cursor"];
12345impl ListMembersDevicesResult {
12346    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12347        map: V,
12348    ) -> Result<ListMembersDevicesResult, V::Error> {
12349        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12350    }
12351
12352    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12353        mut map: V,
12354        optional: bool,
12355    ) -> Result<Option<ListMembersDevicesResult>, V::Error> {
12356        let mut field_devices = None;
12357        let mut field_has_more = None;
12358        let mut field_cursor = None;
12359        let mut nothing = true;
12360        while let Some(key) = map.next_key::<&str>()? {
12361            nothing = false;
12362            match key {
12363                "devices" => {
12364                    if field_devices.is_some() {
12365                        return Err(::serde::de::Error::duplicate_field("devices"));
12366                    }
12367                    field_devices = Some(map.next_value()?);
12368                }
12369                "has_more" => {
12370                    if field_has_more.is_some() {
12371                        return Err(::serde::de::Error::duplicate_field("has_more"));
12372                    }
12373                    field_has_more = Some(map.next_value()?);
12374                }
12375                "cursor" => {
12376                    if field_cursor.is_some() {
12377                        return Err(::serde::de::Error::duplicate_field("cursor"));
12378                    }
12379                    field_cursor = Some(map.next_value()?);
12380                }
12381                _ => {
12382                    // unknown field allowed and ignored
12383                    map.next_value::<::serde_json::Value>()?;
12384                }
12385            }
12386        }
12387        if optional && nothing {
12388            return Ok(None);
12389        }
12390        let result = ListMembersDevicesResult {
12391            devices: field_devices.ok_or_else(|| ::serde::de::Error::missing_field("devices"))?,
12392            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12393            cursor: field_cursor.and_then(Option::flatten),
12394        };
12395        Ok(Some(result))
12396    }
12397
12398    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12399        &self,
12400        s: &mut S::SerializeStruct,
12401    ) -> Result<(), S::Error> {
12402        use serde::ser::SerializeStruct;
12403        s.serialize_field("devices", &self.devices)?;
12404        s.serialize_field("has_more", &self.has_more)?;
12405        if let Some(val) = &self.cursor {
12406            s.serialize_field("cursor", val)?;
12407        }
12408        Ok(())
12409    }
12410}
12411
12412impl<'de> ::serde::de::Deserialize<'de> for ListMembersDevicesResult {
12413    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12414        // struct deserializer
12415        use serde::de::{MapAccess, Visitor};
12416        struct StructVisitor;
12417        impl<'de> Visitor<'de> for StructVisitor {
12418            type Value = ListMembersDevicesResult;
12419            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12420                f.write_str("a ListMembersDevicesResult struct")
12421            }
12422            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12423                ListMembersDevicesResult::internal_deserialize(map)
12424            }
12425        }
12426        deserializer.deserialize_struct("ListMembersDevicesResult", LIST_MEMBERS_DEVICES_RESULT_FIELDS, StructVisitor)
12427    }
12428}
12429
12430impl ::serde::ser::Serialize for ListMembersDevicesResult {
12431    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12432        // struct serializer
12433        use serde::ser::SerializeStruct;
12434        let mut s = serializer.serialize_struct("ListMembersDevicesResult", 3)?;
12435        self.internal_serialize::<S>(&mut s)?;
12436        s.end()
12437    }
12438}
12439
12440/// Arguments for
12441/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12442#[derive(Debug, Clone, PartialEq, Eq, Default)]
12443#[non_exhaustive] // structs may have more fields added in the future.
12444pub struct ListTeamAppsArg {
12445    /// At the first call to the
12446    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) the
12447    /// cursor shouldn't be passed. Then, if the result of the call includes a cursor, the following
12448    /// requests should include the received cursors in order to receive the next sub list of the
12449    /// team applications.
12450    pub cursor: Option<String>,
12451}
12452
12453impl ListTeamAppsArg {
12454    pub fn with_cursor(mut self, value: String) -> Self {
12455        self.cursor = Some(value);
12456        self
12457    }
12458}
12459
12460const LIST_TEAM_APPS_ARG_FIELDS: &[&str] = &["cursor"];
12461impl ListTeamAppsArg {
12462    // no _opt deserializer
12463    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12464        mut map: V,
12465    ) -> Result<ListTeamAppsArg, V::Error> {
12466        let mut field_cursor = None;
12467        while let Some(key) = map.next_key::<&str>()? {
12468            match key {
12469                "cursor" => {
12470                    if field_cursor.is_some() {
12471                        return Err(::serde::de::Error::duplicate_field("cursor"));
12472                    }
12473                    field_cursor = Some(map.next_value()?);
12474                }
12475                _ => {
12476                    // unknown field allowed and ignored
12477                    map.next_value::<::serde_json::Value>()?;
12478                }
12479            }
12480        }
12481        let result = ListTeamAppsArg {
12482            cursor: field_cursor.and_then(Option::flatten),
12483        };
12484        Ok(result)
12485    }
12486
12487    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12488        &self,
12489        s: &mut S::SerializeStruct,
12490    ) -> Result<(), S::Error> {
12491        use serde::ser::SerializeStruct;
12492        if let Some(val) = &self.cursor {
12493            s.serialize_field("cursor", val)?;
12494        }
12495        Ok(())
12496    }
12497}
12498
12499impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsArg {
12500    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12501        // struct deserializer
12502        use serde::de::{MapAccess, Visitor};
12503        struct StructVisitor;
12504        impl<'de> Visitor<'de> for StructVisitor {
12505            type Value = ListTeamAppsArg;
12506            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12507                f.write_str("a ListTeamAppsArg struct")
12508            }
12509            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12510                ListTeamAppsArg::internal_deserialize(map)
12511            }
12512        }
12513        deserializer.deserialize_struct("ListTeamAppsArg", LIST_TEAM_APPS_ARG_FIELDS, StructVisitor)
12514    }
12515}
12516
12517impl ::serde::ser::Serialize for ListTeamAppsArg {
12518    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12519        // struct serializer
12520        use serde::ser::SerializeStruct;
12521        let mut s = serializer.serialize_struct("ListTeamAppsArg", 1)?;
12522        self.internal_serialize::<S>(&mut s)?;
12523        s.end()
12524    }
12525}
12526
12527/// Error returned by
12528/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12529#[derive(Debug, Clone, PartialEq, Eq)]
12530#[non_exhaustive] // variants may be added in the future
12531pub enum ListTeamAppsError {
12532    /// Indicates that the cursor has been invalidated. Call
12533    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps)
12534    /// again with an empty cursor to obtain a new cursor.
12535    Reset,
12536    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12537    /// typically indicates that this SDK version is out of date.
12538    Other,
12539}
12540
12541impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsError {
12542    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12543        // union deserializer
12544        use serde::de::{self, MapAccess, Visitor};
12545        struct EnumVisitor;
12546        impl<'de> Visitor<'de> for EnumVisitor {
12547            type Value = ListTeamAppsError;
12548            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12549                f.write_str("a ListTeamAppsError structure")
12550            }
12551            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12552                let tag: &str = match map.next_key()? {
12553                    Some(".tag") => map.next_value()?,
12554                    _ => return Err(de::Error::missing_field(".tag"))
12555                };
12556                let value = match tag {
12557                    "reset" => ListTeamAppsError::Reset,
12558                    _ => ListTeamAppsError::Other,
12559                };
12560                crate::eat_json_fields(&mut map)?;
12561                Ok(value)
12562            }
12563        }
12564        const VARIANTS: &[&str] = &["reset",
12565                                    "other"];
12566        deserializer.deserialize_struct("ListTeamAppsError", VARIANTS, EnumVisitor)
12567    }
12568}
12569
12570impl ::serde::ser::Serialize for ListTeamAppsError {
12571    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12572        // union serializer
12573        use serde::ser::SerializeStruct;
12574        match self {
12575            ListTeamAppsError::Reset => {
12576                // unit
12577                let mut s = serializer.serialize_struct("ListTeamAppsError", 1)?;
12578                s.serialize_field(".tag", "reset")?;
12579                s.end()
12580            }
12581            ListTeamAppsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12582        }
12583    }
12584}
12585
12586impl ::std::error::Error for ListTeamAppsError {
12587}
12588
12589impl ::std::fmt::Display for ListTeamAppsError {
12590    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12591        write!(f, "{:?}", *self)
12592    }
12593}
12594
12595/// Information returned by
12596/// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps).
12597#[derive(Debug, Clone, PartialEq, Eq)]
12598#[non_exhaustive] // structs may have more fields added in the future.
12599pub struct ListTeamAppsResult {
12600    /// The linked applications of each member of the team.
12601    pub apps: Vec<MemberLinkedApps>,
12602    /// If true, then there are more apps available. Pass the cursor to
12603    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) to
12604    /// retrieve the rest.
12605    pub has_more: bool,
12606    /// Pass the cursor into
12607    /// [`linked_apps_list_team_linked_apps()`](crate::team::linked_apps_list_team_linked_apps) to
12608    /// receive the next sub list of team's applications.
12609    pub cursor: Option<String>,
12610}
12611
12612impl ListTeamAppsResult {
12613    pub fn new(apps: Vec<MemberLinkedApps>, has_more: bool) -> Self {
12614        ListTeamAppsResult {
12615            apps,
12616            has_more,
12617            cursor: None,
12618        }
12619    }
12620
12621    pub fn with_cursor(mut self, value: String) -> Self {
12622        self.cursor = Some(value);
12623        self
12624    }
12625}
12626
12627const LIST_TEAM_APPS_RESULT_FIELDS: &[&str] = &["apps",
12628                                                "has_more",
12629                                                "cursor"];
12630impl ListTeamAppsResult {
12631    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12632        map: V,
12633    ) -> Result<ListTeamAppsResult, V::Error> {
12634        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12635    }
12636
12637    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12638        mut map: V,
12639        optional: bool,
12640    ) -> Result<Option<ListTeamAppsResult>, V::Error> {
12641        let mut field_apps = None;
12642        let mut field_has_more = None;
12643        let mut field_cursor = None;
12644        let mut nothing = true;
12645        while let Some(key) = map.next_key::<&str>()? {
12646            nothing = false;
12647            match key {
12648                "apps" => {
12649                    if field_apps.is_some() {
12650                        return Err(::serde::de::Error::duplicate_field("apps"));
12651                    }
12652                    field_apps = Some(map.next_value()?);
12653                }
12654                "has_more" => {
12655                    if field_has_more.is_some() {
12656                        return Err(::serde::de::Error::duplicate_field("has_more"));
12657                    }
12658                    field_has_more = Some(map.next_value()?);
12659                }
12660                "cursor" => {
12661                    if field_cursor.is_some() {
12662                        return Err(::serde::de::Error::duplicate_field("cursor"));
12663                    }
12664                    field_cursor = Some(map.next_value()?);
12665                }
12666                _ => {
12667                    // unknown field allowed and ignored
12668                    map.next_value::<::serde_json::Value>()?;
12669                }
12670            }
12671        }
12672        if optional && nothing {
12673            return Ok(None);
12674        }
12675        let result = ListTeamAppsResult {
12676            apps: field_apps.ok_or_else(|| ::serde::de::Error::missing_field("apps"))?,
12677            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
12678            cursor: field_cursor.and_then(Option::flatten),
12679        };
12680        Ok(Some(result))
12681    }
12682
12683    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12684        &self,
12685        s: &mut S::SerializeStruct,
12686    ) -> Result<(), S::Error> {
12687        use serde::ser::SerializeStruct;
12688        s.serialize_field("apps", &self.apps)?;
12689        s.serialize_field("has_more", &self.has_more)?;
12690        if let Some(val) = &self.cursor {
12691            s.serialize_field("cursor", val)?;
12692        }
12693        Ok(())
12694    }
12695}
12696
12697impl<'de> ::serde::de::Deserialize<'de> for ListTeamAppsResult {
12698    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12699        // struct deserializer
12700        use serde::de::{MapAccess, Visitor};
12701        struct StructVisitor;
12702        impl<'de> Visitor<'de> for StructVisitor {
12703            type Value = ListTeamAppsResult;
12704            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12705                f.write_str("a ListTeamAppsResult struct")
12706            }
12707            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12708                ListTeamAppsResult::internal_deserialize(map)
12709            }
12710        }
12711        deserializer.deserialize_struct("ListTeamAppsResult", LIST_TEAM_APPS_RESULT_FIELDS, StructVisitor)
12712    }
12713}
12714
12715impl ::serde::ser::Serialize for ListTeamAppsResult {
12716    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12717        // struct serializer
12718        use serde::ser::SerializeStruct;
12719        let mut s = serializer.serialize_struct("ListTeamAppsResult", 3)?;
12720        self.internal_serialize::<S>(&mut s)?;
12721        s.end()
12722    }
12723}
12724
12725#[derive(Debug, Clone, PartialEq, Eq)]
12726#[non_exhaustive] // structs may have more fields added in the future.
12727pub struct ListTeamDevicesArg {
12728    /// At the first call to the
12729    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) the cursor shouldn't
12730    /// be passed. Then, if the result of the call includes a cursor, the following requests should
12731    /// include the received cursors in order to receive the next sub list of team devices.
12732    pub cursor: Option<String>,
12733    /// Whether to list web sessions of the team members.
12734    pub include_web_sessions: bool,
12735    /// Whether to list desktop clients of the team members.
12736    pub include_desktop_clients: bool,
12737    /// Whether to list mobile clients of the team members.
12738    pub include_mobile_clients: bool,
12739}
12740
12741impl Default for ListTeamDevicesArg {
12742    fn default() -> Self {
12743        ListTeamDevicesArg {
12744            cursor: None,
12745            include_web_sessions: true,
12746            include_desktop_clients: true,
12747            include_mobile_clients: true,
12748        }
12749    }
12750}
12751
12752impl ListTeamDevicesArg {
12753    pub fn with_cursor(mut self, value: String) -> Self {
12754        self.cursor = Some(value);
12755        self
12756    }
12757
12758    pub fn with_include_web_sessions(mut self, value: bool) -> Self {
12759        self.include_web_sessions = value;
12760        self
12761    }
12762
12763    pub fn with_include_desktop_clients(mut self, value: bool) -> Self {
12764        self.include_desktop_clients = value;
12765        self
12766    }
12767
12768    pub fn with_include_mobile_clients(mut self, value: bool) -> Self {
12769        self.include_mobile_clients = value;
12770        self
12771    }
12772}
12773
12774const LIST_TEAM_DEVICES_ARG_FIELDS: &[&str] = &["cursor",
12775                                                "include_web_sessions",
12776                                                "include_desktop_clients",
12777                                                "include_mobile_clients"];
12778impl ListTeamDevicesArg {
12779    // no _opt deserializer
12780    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12781        mut map: V,
12782    ) -> Result<ListTeamDevicesArg, V::Error> {
12783        let mut field_cursor = None;
12784        let mut field_include_web_sessions = None;
12785        let mut field_include_desktop_clients = None;
12786        let mut field_include_mobile_clients = None;
12787        while let Some(key) = map.next_key::<&str>()? {
12788            match key {
12789                "cursor" => {
12790                    if field_cursor.is_some() {
12791                        return Err(::serde::de::Error::duplicate_field("cursor"));
12792                    }
12793                    field_cursor = Some(map.next_value()?);
12794                }
12795                "include_web_sessions" => {
12796                    if field_include_web_sessions.is_some() {
12797                        return Err(::serde::de::Error::duplicate_field("include_web_sessions"));
12798                    }
12799                    field_include_web_sessions = Some(map.next_value()?);
12800                }
12801                "include_desktop_clients" => {
12802                    if field_include_desktop_clients.is_some() {
12803                        return Err(::serde::de::Error::duplicate_field("include_desktop_clients"));
12804                    }
12805                    field_include_desktop_clients = Some(map.next_value()?);
12806                }
12807                "include_mobile_clients" => {
12808                    if field_include_mobile_clients.is_some() {
12809                        return Err(::serde::de::Error::duplicate_field("include_mobile_clients"));
12810                    }
12811                    field_include_mobile_clients = Some(map.next_value()?);
12812                }
12813                _ => {
12814                    // unknown field allowed and ignored
12815                    map.next_value::<::serde_json::Value>()?;
12816                }
12817            }
12818        }
12819        let result = ListTeamDevicesArg {
12820            cursor: field_cursor.and_then(Option::flatten),
12821            include_web_sessions: field_include_web_sessions.unwrap_or(true),
12822            include_desktop_clients: field_include_desktop_clients.unwrap_or(true),
12823            include_mobile_clients: field_include_mobile_clients.unwrap_or(true),
12824        };
12825        Ok(result)
12826    }
12827
12828    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
12829        &self,
12830        s: &mut S::SerializeStruct,
12831    ) -> Result<(), S::Error> {
12832        use serde::ser::SerializeStruct;
12833        if let Some(val) = &self.cursor {
12834            s.serialize_field("cursor", val)?;
12835        }
12836        if !self.include_web_sessions {
12837            s.serialize_field("include_web_sessions", &self.include_web_sessions)?;
12838        }
12839        if !self.include_desktop_clients {
12840            s.serialize_field("include_desktop_clients", &self.include_desktop_clients)?;
12841        }
12842        if !self.include_mobile_clients {
12843            s.serialize_field("include_mobile_clients", &self.include_mobile_clients)?;
12844        }
12845        Ok(())
12846    }
12847}
12848
12849impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesArg {
12850    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12851        // struct deserializer
12852        use serde::de::{MapAccess, Visitor};
12853        struct StructVisitor;
12854        impl<'de> Visitor<'de> for StructVisitor {
12855            type Value = ListTeamDevicesArg;
12856            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12857                f.write_str("a ListTeamDevicesArg struct")
12858            }
12859            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
12860                ListTeamDevicesArg::internal_deserialize(map)
12861            }
12862        }
12863        deserializer.deserialize_struct("ListTeamDevicesArg", LIST_TEAM_DEVICES_ARG_FIELDS, StructVisitor)
12864    }
12865}
12866
12867impl ::serde::ser::Serialize for ListTeamDevicesArg {
12868    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12869        // struct serializer
12870        use serde::ser::SerializeStruct;
12871        let mut s = serializer.serialize_struct("ListTeamDevicesArg", 4)?;
12872        self.internal_serialize::<S>(&mut s)?;
12873        s.end()
12874    }
12875}
12876
12877#[derive(Debug, Clone, PartialEq, Eq)]
12878#[non_exhaustive] // variants may be added in the future
12879pub enum ListTeamDevicesError {
12880    /// Indicates that the cursor has been invalidated. Call
12881    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) again with an empty
12882    /// cursor to obtain a new cursor.
12883    Reset,
12884    /// Catch-all used for unrecognized values returned from the server. Encountering this value
12885    /// typically indicates that this SDK version is out of date.
12886    Other,
12887}
12888
12889impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesError {
12890    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
12891        // union deserializer
12892        use serde::de::{self, MapAccess, Visitor};
12893        struct EnumVisitor;
12894        impl<'de> Visitor<'de> for EnumVisitor {
12895            type Value = ListTeamDevicesError;
12896            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12897                f.write_str("a ListTeamDevicesError structure")
12898            }
12899            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
12900                let tag: &str = match map.next_key()? {
12901                    Some(".tag") => map.next_value()?,
12902                    _ => return Err(de::Error::missing_field(".tag"))
12903                };
12904                let value = match tag {
12905                    "reset" => ListTeamDevicesError::Reset,
12906                    _ => ListTeamDevicesError::Other,
12907                };
12908                crate::eat_json_fields(&mut map)?;
12909                Ok(value)
12910            }
12911        }
12912        const VARIANTS: &[&str] = &["reset",
12913                                    "other"];
12914        deserializer.deserialize_struct("ListTeamDevicesError", VARIANTS, EnumVisitor)
12915    }
12916}
12917
12918impl ::serde::ser::Serialize for ListTeamDevicesError {
12919    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
12920        // union serializer
12921        use serde::ser::SerializeStruct;
12922        match self {
12923            ListTeamDevicesError::Reset => {
12924                // unit
12925                let mut s = serializer.serialize_struct("ListTeamDevicesError", 1)?;
12926                s.serialize_field(".tag", "reset")?;
12927                s.end()
12928            }
12929            ListTeamDevicesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
12930        }
12931    }
12932}
12933
12934impl ::std::error::Error for ListTeamDevicesError {
12935}
12936
12937impl ::std::fmt::Display for ListTeamDevicesError {
12938    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
12939        write!(f, "{:?}", *self)
12940    }
12941}
12942
12943#[derive(Debug, Clone, PartialEq, Eq)]
12944#[non_exhaustive] // structs may have more fields added in the future.
12945pub struct ListTeamDevicesResult {
12946    /// The devices of each member of the team.
12947    pub devices: Vec<MemberDevices>,
12948    /// If true, then there are more devices available. Pass the cursor to
12949    /// [`devices_list_team_devices()`](crate::team::devices_list_team_devices) to retrieve the
12950    /// rest.
12951    pub has_more: bool,
12952    /// Pass the cursor into [`devices_list_team_devices()`](crate::team::devices_list_team_devices)
12953    /// to receive the next sub list of team's devices.
12954    pub cursor: Option<String>,
12955}
12956
12957impl ListTeamDevicesResult {
12958    pub fn new(devices: Vec<MemberDevices>, has_more: bool) -> Self {
12959        ListTeamDevicesResult {
12960            devices,
12961            has_more,
12962            cursor: None,
12963        }
12964    }
12965
12966    pub fn with_cursor(mut self, value: String) -> Self {
12967        self.cursor = Some(value);
12968        self
12969    }
12970}
12971
12972const LIST_TEAM_DEVICES_RESULT_FIELDS: &[&str] = &["devices",
12973                                                   "has_more",
12974                                                   "cursor"];
12975impl ListTeamDevicesResult {
12976    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
12977        map: V,
12978    ) -> Result<ListTeamDevicesResult, V::Error> {
12979        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
12980    }
12981
12982    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
12983        mut map: V,
12984        optional: bool,
12985    ) -> Result<Option<ListTeamDevicesResult>, V::Error> {
12986        let mut field_devices = None;
12987        let mut field_has_more = None;
12988        let mut field_cursor = None;
12989        let mut nothing = true;
12990        while let Some(key) = map.next_key::<&str>()? {
12991            nothing = false;
12992            match key {
12993                "devices" => {
12994                    if field_devices.is_some() {
12995                        return Err(::serde::de::Error::duplicate_field("devices"));
12996                    }
12997                    field_devices = Some(map.next_value()?);
12998                }
12999                "has_more" => {
13000                    if field_has_more.is_some() {
13001                        return Err(::serde::de::Error::duplicate_field("has_more"));
13002                    }
13003                    field_has_more = Some(map.next_value()?);
13004                }
13005                "cursor" => {
13006                    if field_cursor.is_some() {
13007                        return Err(::serde::de::Error::duplicate_field("cursor"));
13008                    }
13009                    field_cursor = Some(map.next_value()?);
13010                }
13011                _ => {
13012                    // unknown field allowed and ignored
13013                    map.next_value::<::serde_json::Value>()?;
13014                }
13015            }
13016        }
13017        if optional && nothing {
13018            return Ok(None);
13019        }
13020        let result = ListTeamDevicesResult {
13021            devices: field_devices.ok_or_else(|| ::serde::de::Error::missing_field("devices"))?,
13022            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
13023            cursor: field_cursor.and_then(Option::flatten),
13024        };
13025        Ok(Some(result))
13026    }
13027
13028    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13029        &self,
13030        s: &mut S::SerializeStruct,
13031    ) -> Result<(), S::Error> {
13032        use serde::ser::SerializeStruct;
13033        s.serialize_field("devices", &self.devices)?;
13034        s.serialize_field("has_more", &self.has_more)?;
13035        if let Some(val) = &self.cursor {
13036            s.serialize_field("cursor", val)?;
13037        }
13038        Ok(())
13039    }
13040}
13041
13042impl<'de> ::serde::de::Deserialize<'de> for ListTeamDevicesResult {
13043    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13044        // struct deserializer
13045        use serde::de::{MapAccess, Visitor};
13046        struct StructVisitor;
13047        impl<'de> Visitor<'de> for StructVisitor {
13048            type Value = ListTeamDevicesResult;
13049            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13050                f.write_str("a ListTeamDevicesResult struct")
13051            }
13052            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13053                ListTeamDevicesResult::internal_deserialize(map)
13054            }
13055        }
13056        deserializer.deserialize_struct("ListTeamDevicesResult", LIST_TEAM_DEVICES_RESULT_FIELDS, StructVisitor)
13057    }
13058}
13059
13060impl ::serde::ser::Serialize for ListTeamDevicesResult {
13061    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13062        // struct serializer
13063        use serde::ser::SerializeStruct;
13064        let mut s = serializer.serialize_struct("ListTeamDevicesResult", 3)?;
13065        self.internal_serialize::<S>(&mut s)?;
13066        s.end()
13067    }
13068}
13069
13070/// Specify access type a member should have when joined to a group.
13071#[derive(Debug, Clone, PartialEq, Eq)]
13072#[non_exhaustive] // structs may have more fields added in the future.
13073pub struct MemberAccess {
13074    /// Identity of a user.
13075    pub user: UserSelectorArg,
13076    /// Access type.
13077    pub access_type: GroupAccessType,
13078}
13079
13080impl MemberAccess {
13081    pub fn new(user: UserSelectorArg, access_type: GroupAccessType) -> Self {
13082        MemberAccess {
13083            user,
13084            access_type,
13085        }
13086    }
13087}
13088
13089const MEMBER_ACCESS_FIELDS: &[&str] = &["user",
13090                                        "access_type"];
13091impl MemberAccess {
13092    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13093        map: V,
13094    ) -> Result<MemberAccess, V::Error> {
13095        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13096    }
13097
13098    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13099        mut map: V,
13100        optional: bool,
13101    ) -> Result<Option<MemberAccess>, V::Error> {
13102        let mut field_user = None;
13103        let mut field_access_type = None;
13104        let mut nothing = true;
13105        while let Some(key) = map.next_key::<&str>()? {
13106            nothing = false;
13107            match key {
13108                "user" => {
13109                    if field_user.is_some() {
13110                        return Err(::serde::de::Error::duplicate_field("user"));
13111                    }
13112                    field_user = Some(map.next_value()?);
13113                }
13114                "access_type" => {
13115                    if field_access_type.is_some() {
13116                        return Err(::serde::de::Error::duplicate_field("access_type"));
13117                    }
13118                    field_access_type = Some(map.next_value()?);
13119                }
13120                _ => {
13121                    // unknown field allowed and ignored
13122                    map.next_value::<::serde_json::Value>()?;
13123                }
13124            }
13125        }
13126        if optional && nothing {
13127            return Ok(None);
13128        }
13129        let result = MemberAccess {
13130            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
13131            access_type: field_access_type.ok_or_else(|| ::serde::de::Error::missing_field("access_type"))?,
13132        };
13133        Ok(Some(result))
13134    }
13135
13136    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13137        &self,
13138        s: &mut S::SerializeStruct,
13139    ) -> Result<(), S::Error> {
13140        use serde::ser::SerializeStruct;
13141        s.serialize_field("user", &self.user)?;
13142        s.serialize_field("access_type", &self.access_type)?;
13143        Ok(())
13144    }
13145}
13146
13147impl<'de> ::serde::de::Deserialize<'de> for MemberAccess {
13148    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13149        // struct deserializer
13150        use serde::de::{MapAccess, Visitor};
13151        struct StructVisitor;
13152        impl<'de> Visitor<'de> for StructVisitor {
13153            type Value = MemberAccess;
13154            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13155                f.write_str("a MemberAccess struct")
13156            }
13157            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13158                MemberAccess::internal_deserialize(map)
13159            }
13160        }
13161        deserializer.deserialize_struct("MemberAccess", MEMBER_ACCESS_FIELDS, StructVisitor)
13162    }
13163}
13164
13165impl ::serde::ser::Serialize for MemberAccess {
13166    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13167        // struct serializer
13168        use serde::ser::SerializeStruct;
13169        let mut s = serializer.serialize_struct("MemberAccess", 2)?;
13170        self.internal_serialize::<S>(&mut s)?;
13171        s.end()
13172    }
13173}
13174
13175#[derive(Debug, Clone, PartialEq, Eq)]
13176#[non_exhaustive] // structs may have more fields added in the future.
13177pub struct MemberAddArg {
13178    pub member_email: crate::types::common::EmailAddress,
13179    /// Member's first name.
13180    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
13181    /// Member's last name.
13182    pub member_surname: Option<crate::types::common::OptionalNamePart>,
13183    /// External ID for member.
13184    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
13185    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
13186    /// configuration.
13187    pub member_persistent_id: Option<String>,
13188    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
13189    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
13190    /// flows for onboarding that want to handle announcements themselves.
13191    pub send_welcome_email: bool,
13192    /// Whether a user is directory restricted.
13193    pub is_directory_restricted: Option<bool>,
13194    pub role: AdminTier,
13195}
13196
13197impl MemberAddArg {
13198    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
13199        MemberAddArg {
13200            member_email,
13201            member_given_name: None,
13202            member_surname: None,
13203            member_external_id: None,
13204            member_persistent_id: None,
13205            send_welcome_email: true,
13206            is_directory_restricted: None,
13207            role: AdminTier::MemberOnly,
13208        }
13209    }
13210
13211    pub fn with_member_given_name(
13212        mut self,
13213        value: crate::types::common::OptionalNamePart,
13214    ) -> Self {
13215        self.member_given_name = Some(value);
13216        self
13217    }
13218
13219    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
13220        self.member_surname = Some(value);
13221        self
13222    }
13223
13224    pub fn with_member_external_id(
13225        mut self,
13226        value: crate::types::team_common::MemberExternalId,
13227    ) -> Self {
13228        self.member_external_id = Some(value);
13229        self
13230    }
13231
13232    pub fn with_member_persistent_id(mut self, value: String) -> Self {
13233        self.member_persistent_id = Some(value);
13234        self
13235    }
13236
13237    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
13238        self.send_welcome_email = value;
13239        self
13240    }
13241
13242    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
13243        self.is_directory_restricted = Some(value);
13244        self
13245    }
13246
13247    pub fn with_role(mut self, value: AdminTier) -> Self {
13248        self.role = value;
13249        self
13250    }
13251}
13252
13253const MEMBER_ADD_ARG_FIELDS: &[&str] = &["member_email",
13254                                         "member_given_name",
13255                                         "member_surname",
13256                                         "member_external_id",
13257                                         "member_persistent_id",
13258                                         "send_welcome_email",
13259                                         "is_directory_restricted",
13260                                         "role"];
13261impl MemberAddArg {
13262    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13263        map: V,
13264    ) -> Result<MemberAddArg, V::Error> {
13265        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13266    }
13267
13268    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13269        mut map: V,
13270        optional: bool,
13271    ) -> Result<Option<MemberAddArg>, V::Error> {
13272        let mut field_member_email = None;
13273        let mut field_member_given_name = None;
13274        let mut field_member_surname = None;
13275        let mut field_member_external_id = None;
13276        let mut field_member_persistent_id = None;
13277        let mut field_send_welcome_email = None;
13278        let mut field_is_directory_restricted = None;
13279        let mut field_role = None;
13280        let mut nothing = true;
13281        while let Some(key) = map.next_key::<&str>()? {
13282            nothing = false;
13283            match key {
13284                "member_email" => {
13285                    if field_member_email.is_some() {
13286                        return Err(::serde::de::Error::duplicate_field("member_email"));
13287                    }
13288                    field_member_email = Some(map.next_value()?);
13289                }
13290                "member_given_name" => {
13291                    if field_member_given_name.is_some() {
13292                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
13293                    }
13294                    field_member_given_name = Some(map.next_value()?);
13295                }
13296                "member_surname" => {
13297                    if field_member_surname.is_some() {
13298                        return Err(::serde::de::Error::duplicate_field("member_surname"));
13299                    }
13300                    field_member_surname = Some(map.next_value()?);
13301                }
13302                "member_external_id" => {
13303                    if field_member_external_id.is_some() {
13304                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
13305                    }
13306                    field_member_external_id = Some(map.next_value()?);
13307                }
13308                "member_persistent_id" => {
13309                    if field_member_persistent_id.is_some() {
13310                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
13311                    }
13312                    field_member_persistent_id = Some(map.next_value()?);
13313                }
13314                "send_welcome_email" => {
13315                    if field_send_welcome_email.is_some() {
13316                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
13317                    }
13318                    field_send_welcome_email = Some(map.next_value()?);
13319                }
13320                "is_directory_restricted" => {
13321                    if field_is_directory_restricted.is_some() {
13322                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
13323                    }
13324                    field_is_directory_restricted = Some(map.next_value()?);
13325                }
13326                "role" => {
13327                    if field_role.is_some() {
13328                        return Err(::serde::de::Error::duplicate_field("role"));
13329                    }
13330                    field_role = Some(map.next_value()?);
13331                }
13332                _ => {
13333                    // unknown field allowed and ignored
13334                    map.next_value::<::serde_json::Value>()?;
13335                }
13336            }
13337        }
13338        if optional && nothing {
13339            return Ok(None);
13340        }
13341        let result = MemberAddArg {
13342            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
13343            member_given_name: field_member_given_name.and_then(Option::flatten),
13344            member_surname: field_member_surname.and_then(Option::flatten),
13345            member_external_id: field_member_external_id.and_then(Option::flatten),
13346            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
13347            send_welcome_email: field_send_welcome_email.unwrap_or(true),
13348            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
13349            role: field_role.unwrap_or(AdminTier::MemberOnly),
13350        };
13351        Ok(Some(result))
13352    }
13353
13354    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13355        &self,
13356        s: &mut S::SerializeStruct,
13357    ) -> Result<(), S::Error> {
13358        use serde::ser::SerializeStruct;
13359        s.serialize_field("member_email", &self.member_email)?;
13360        if let Some(val) = &self.member_given_name {
13361            s.serialize_field("member_given_name", val)?;
13362        }
13363        if let Some(val) = &self.member_surname {
13364            s.serialize_field("member_surname", val)?;
13365        }
13366        if let Some(val) = &self.member_external_id {
13367            s.serialize_field("member_external_id", val)?;
13368        }
13369        if let Some(val) = &self.member_persistent_id {
13370            s.serialize_field("member_persistent_id", val)?;
13371        }
13372        if !self.send_welcome_email {
13373            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
13374        }
13375        if let Some(val) = &self.is_directory_restricted {
13376            s.serialize_field("is_directory_restricted", val)?;
13377        }
13378        if self.role != AdminTier::MemberOnly {
13379            s.serialize_field("role", &self.role)?;
13380        }
13381        Ok(())
13382    }
13383}
13384
13385impl<'de> ::serde::de::Deserialize<'de> for MemberAddArg {
13386    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13387        // struct deserializer
13388        use serde::de::{MapAccess, Visitor};
13389        struct StructVisitor;
13390        impl<'de> Visitor<'de> for StructVisitor {
13391            type Value = MemberAddArg;
13392            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13393                f.write_str("a MemberAddArg struct")
13394            }
13395            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13396                MemberAddArg::internal_deserialize(map)
13397            }
13398        }
13399        deserializer.deserialize_struct("MemberAddArg", MEMBER_ADD_ARG_FIELDS, StructVisitor)
13400    }
13401}
13402
13403impl ::serde::ser::Serialize for MemberAddArg {
13404    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13405        // struct serializer
13406        use serde::ser::SerializeStruct;
13407        let mut s = serializer.serialize_struct("MemberAddArg", 8)?;
13408        self.internal_serialize::<S>(&mut s)?;
13409        s.end()
13410    }
13411}
13412
13413// struct extends MemberAddArgBase
13414impl From<MemberAddArg> for MemberAddArgBase {
13415    fn from(subtype: MemberAddArg) -> Self {
13416        Self {
13417            member_email: subtype.member_email,
13418            member_given_name: subtype.member_given_name,
13419            member_surname: subtype.member_surname,
13420            member_external_id: subtype.member_external_id,
13421            member_persistent_id: subtype.member_persistent_id,
13422            send_welcome_email: subtype.send_welcome_email,
13423            is_directory_restricted: subtype.is_directory_restricted,
13424        }
13425    }
13426}
13427#[derive(Debug, Clone, PartialEq, Eq)]
13428#[non_exhaustive] // structs may have more fields added in the future.
13429pub struct MemberAddArgBase {
13430    pub member_email: crate::types::common::EmailAddress,
13431    /// Member's first name.
13432    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
13433    /// Member's last name.
13434    pub member_surname: Option<crate::types::common::OptionalNamePart>,
13435    /// External ID for member.
13436    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
13437    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
13438    /// configuration.
13439    pub member_persistent_id: Option<String>,
13440    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
13441    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
13442    /// flows for onboarding that want to handle announcements themselves.
13443    pub send_welcome_email: bool,
13444    /// Whether a user is directory restricted.
13445    pub is_directory_restricted: Option<bool>,
13446}
13447
13448impl MemberAddArgBase {
13449    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
13450        MemberAddArgBase {
13451            member_email,
13452            member_given_name: None,
13453            member_surname: None,
13454            member_external_id: None,
13455            member_persistent_id: None,
13456            send_welcome_email: true,
13457            is_directory_restricted: None,
13458        }
13459    }
13460
13461    pub fn with_member_given_name(
13462        mut self,
13463        value: crate::types::common::OptionalNamePart,
13464    ) -> Self {
13465        self.member_given_name = Some(value);
13466        self
13467    }
13468
13469    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
13470        self.member_surname = Some(value);
13471        self
13472    }
13473
13474    pub fn with_member_external_id(
13475        mut self,
13476        value: crate::types::team_common::MemberExternalId,
13477    ) -> Self {
13478        self.member_external_id = Some(value);
13479        self
13480    }
13481
13482    pub fn with_member_persistent_id(mut self, value: String) -> Self {
13483        self.member_persistent_id = Some(value);
13484        self
13485    }
13486
13487    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
13488        self.send_welcome_email = value;
13489        self
13490    }
13491
13492    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
13493        self.is_directory_restricted = Some(value);
13494        self
13495    }
13496}
13497
13498const MEMBER_ADD_ARG_BASE_FIELDS: &[&str] = &["member_email",
13499                                              "member_given_name",
13500                                              "member_surname",
13501                                              "member_external_id",
13502                                              "member_persistent_id",
13503                                              "send_welcome_email",
13504                                              "is_directory_restricted"];
13505impl MemberAddArgBase {
13506    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
13507        map: V,
13508    ) -> Result<MemberAddArgBase, V::Error> {
13509        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
13510    }
13511
13512    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
13513        mut map: V,
13514        optional: bool,
13515    ) -> Result<Option<MemberAddArgBase>, V::Error> {
13516        let mut field_member_email = None;
13517        let mut field_member_given_name = None;
13518        let mut field_member_surname = None;
13519        let mut field_member_external_id = None;
13520        let mut field_member_persistent_id = None;
13521        let mut field_send_welcome_email = None;
13522        let mut field_is_directory_restricted = None;
13523        let mut nothing = true;
13524        while let Some(key) = map.next_key::<&str>()? {
13525            nothing = false;
13526            match key {
13527                "member_email" => {
13528                    if field_member_email.is_some() {
13529                        return Err(::serde::de::Error::duplicate_field("member_email"));
13530                    }
13531                    field_member_email = Some(map.next_value()?);
13532                }
13533                "member_given_name" => {
13534                    if field_member_given_name.is_some() {
13535                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
13536                    }
13537                    field_member_given_name = Some(map.next_value()?);
13538                }
13539                "member_surname" => {
13540                    if field_member_surname.is_some() {
13541                        return Err(::serde::de::Error::duplicate_field("member_surname"));
13542                    }
13543                    field_member_surname = Some(map.next_value()?);
13544                }
13545                "member_external_id" => {
13546                    if field_member_external_id.is_some() {
13547                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
13548                    }
13549                    field_member_external_id = Some(map.next_value()?);
13550                }
13551                "member_persistent_id" => {
13552                    if field_member_persistent_id.is_some() {
13553                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
13554                    }
13555                    field_member_persistent_id = Some(map.next_value()?);
13556                }
13557                "send_welcome_email" => {
13558                    if field_send_welcome_email.is_some() {
13559                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
13560                    }
13561                    field_send_welcome_email = Some(map.next_value()?);
13562                }
13563                "is_directory_restricted" => {
13564                    if field_is_directory_restricted.is_some() {
13565                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
13566                    }
13567                    field_is_directory_restricted = Some(map.next_value()?);
13568                }
13569                _ => {
13570                    // unknown field allowed and ignored
13571                    map.next_value::<::serde_json::Value>()?;
13572                }
13573            }
13574        }
13575        if optional && nothing {
13576            return Ok(None);
13577        }
13578        let result = MemberAddArgBase {
13579            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
13580            member_given_name: field_member_given_name.and_then(Option::flatten),
13581            member_surname: field_member_surname.and_then(Option::flatten),
13582            member_external_id: field_member_external_id.and_then(Option::flatten),
13583            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
13584            send_welcome_email: field_send_welcome_email.unwrap_or(true),
13585            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
13586        };
13587        Ok(Some(result))
13588    }
13589
13590    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
13591        &self,
13592        s: &mut S::SerializeStruct,
13593    ) -> Result<(), S::Error> {
13594        use serde::ser::SerializeStruct;
13595        s.serialize_field("member_email", &self.member_email)?;
13596        if let Some(val) = &self.member_given_name {
13597            s.serialize_field("member_given_name", val)?;
13598        }
13599        if let Some(val) = &self.member_surname {
13600            s.serialize_field("member_surname", val)?;
13601        }
13602        if let Some(val) = &self.member_external_id {
13603            s.serialize_field("member_external_id", val)?;
13604        }
13605        if let Some(val) = &self.member_persistent_id {
13606            s.serialize_field("member_persistent_id", val)?;
13607        }
13608        if !self.send_welcome_email {
13609            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
13610        }
13611        if let Some(val) = &self.is_directory_restricted {
13612            s.serialize_field("is_directory_restricted", val)?;
13613        }
13614        Ok(())
13615    }
13616}
13617
13618impl<'de> ::serde::de::Deserialize<'de> for MemberAddArgBase {
13619    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13620        // struct deserializer
13621        use serde::de::{MapAccess, Visitor};
13622        struct StructVisitor;
13623        impl<'de> Visitor<'de> for StructVisitor {
13624            type Value = MemberAddArgBase;
13625            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13626                f.write_str("a MemberAddArgBase struct")
13627            }
13628            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
13629                MemberAddArgBase::internal_deserialize(map)
13630            }
13631        }
13632        deserializer.deserialize_struct("MemberAddArgBase", MEMBER_ADD_ARG_BASE_FIELDS, StructVisitor)
13633    }
13634}
13635
13636impl ::serde::ser::Serialize for MemberAddArgBase {
13637    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13638        // struct serializer
13639        use serde::ser::SerializeStruct;
13640        let mut s = serializer.serialize_struct("MemberAddArgBase", 7)?;
13641        self.internal_serialize::<S>(&mut s)?;
13642        s.end()
13643    }
13644}
13645
13646/// Describes the result of attempting to add a single user to the team. 'success' is the only value
13647/// indicating that a user was indeed added to the team - the other values explain the type of
13648/// failure that occurred, and include the email of the user for which the operation has failed.
13649#[derive(Debug, Clone, PartialEq, Eq)]
13650pub enum MemberAddResult {
13651    /// Team is already full. The organization has no available licenses.
13652    TeamLicenseLimit(crate::types::common::EmailAddress),
13653    /// Team is already full. The free team member limit has been reached.
13654    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
13655    /// User is already on this team. The provided email address is associated with a user who is
13656    /// already a member of (including in recoverable state) or invited to the team.
13657    UserAlreadyOnTeam(crate::types::common::EmailAddress),
13658    /// User is already on another team. The provided email address is associated with a user that
13659    /// is already a member or invited to another team.
13660    UserOnAnotherTeam(crate::types::common::EmailAddress),
13661    /// User is already paired.
13662    UserAlreadyPaired(crate::types::common::EmailAddress),
13663    /// User migration has failed.
13664    UserMigrationFailed(crate::types::common::EmailAddress),
13665    /// A user with the given external member ID already exists on the team (including in
13666    /// recoverable state).
13667    DuplicateExternalMemberId(crate::types::common::EmailAddress),
13668    /// A user with the given persistent ID already exists on the team (including in recoverable
13669    /// state).
13670    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
13671    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
13672    /// contact Dropbox for more information.
13673    PersistentIdDisabled(crate::types::common::EmailAddress),
13674    /// User creation has failed.
13675    UserCreationFailed(crate::types::common::EmailAddress),
13676    /// Describes a user that was successfully added to the team.
13677    Success(TeamMemberInfo),
13678}
13679
13680impl<'de> ::serde::de::Deserialize<'de> for MemberAddResult {
13681    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13682        // union deserializer
13683        use serde::de::{self, MapAccess, Visitor};
13684        struct EnumVisitor;
13685        impl<'de> Visitor<'de> for EnumVisitor {
13686            type Value = MemberAddResult;
13687            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13688                f.write_str("a MemberAddResult structure")
13689            }
13690            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13691                let tag: &str = match map.next_key()? {
13692                    Some(".tag") => map.next_value()?,
13693                    _ => return Err(de::Error::missing_field(".tag"))
13694                };
13695                let value = match tag {
13696                    "team_license_limit" => {
13697                        match map.next_key()? {
13698                            Some("team_license_limit") => MemberAddResult::TeamLicenseLimit(map.next_value()?),
13699                            None => return Err(de::Error::missing_field("team_license_limit")),
13700                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13701                        }
13702                    }
13703                    "free_team_member_limit_reached" => {
13704                        match map.next_key()? {
13705                            Some("free_team_member_limit_reached") => MemberAddResult::FreeTeamMemberLimitReached(map.next_value()?),
13706                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
13707                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13708                        }
13709                    }
13710                    "user_already_on_team" => {
13711                        match map.next_key()? {
13712                            Some("user_already_on_team") => MemberAddResult::UserAlreadyOnTeam(map.next_value()?),
13713                            None => return Err(de::Error::missing_field("user_already_on_team")),
13714                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13715                        }
13716                    }
13717                    "user_on_another_team" => {
13718                        match map.next_key()? {
13719                            Some("user_on_another_team") => MemberAddResult::UserOnAnotherTeam(map.next_value()?),
13720                            None => return Err(de::Error::missing_field("user_on_another_team")),
13721                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13722                        }
13723                    }
13724                    "user_already_paired" => {
13725                        match map.next_key()? {
13726                            Some("user_already_paired") => MemberAddResult::UserAlreadyPaired(map.next_value()?),
13727                            None => return Err(de::Error::missing_field("user_already_paired")),
13728                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13729                        }
13730                    }
13731                    "user_migration_failed" => {
13732                        match map.next_key()? {
13733                            Some("user_migration_failed") => MemberAddResult::UserMigrationFailed(map.next_value()?),
13734                            None => return Err(de::Error::missing_field("user_migration_failed")),
13735                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13736                        }
13737                    }
13738                    "duplicate_external_member_id" => {
13739                        match map.next_key()? {
13740                            Some("duplicate_external_member_id") => MemberAddResult::DuplicateExternalMemberId(map.next_value()?),
13741                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
13742                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13743                        }
13744                    }
13745                    "duplicate_member_persistent_id" => {
13746                        match map.next_key()? {
13747                            Some("duplicate_member_persistent_id") => MemberAddResult::DuplicateMemberPersistentId(map.next_value()?),
13748                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
13749                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13750                        }
13751                    }
13752                    "persistent_id_disabled" => {
13753                        match map.next_key()? {
13754                            Some("persistent_id_disabled") => MemberAddResult::PersistentIdDisabled(map.next_value()?),
13755                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
13756                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13757                        }
13758                    }
13759                    "user_creation_failed" => {
13760                        match map.next_key()? {
13761                            Some("user_creation_failed") => MemberAddResult::UserCreationFailed(map.next_value()?),
13762                            None => return Err(de::Error::missing_field("user_creation_failed")),
13763                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13764                        }
13765                    }
13766                    "success" => MemberAddResult::Success(TeamMemberInfo::internal_deserialize(&mut map)?),
13767                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
13768                };
13769                crate::eat_json_fields(&mut map)?;
13770                Ok(value)
13771            }
13772        }
13773        const VARIANTS: &[&str] = &["team_license_limit",
13774                                    "free_team_member_limit_reached",
13775                                    "user_already_on_team",
13776                                    "user_on_another_team",
13777                                    "user_already_paired",
13778                                    "user_migration_failed",
13779                                    "duplicate_external_member_id",
13780                                    "duplicate_member_persistent_id",
13781                                    "persistent_id_disabled",
13782                                    "user_creation_failed",
13783                                    "success"];
13784        deserializer.deserialize_struct("MemberAddResult", VARIANTS, EnumVisitor)
13785    }
13786}
13787
13788impl ::serde::ser::Serialize for MemberAddResult {
13789    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
13790        // union serializer
13791        use serde::ser::SerializeStruct;
13792        match self {
13793            MemberAddResult::TeamLicenseLimit(x) => {
13794                // primitive
13795                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13796                s.serialize_field(".tag", "team_license_limit")?;
13797                s.serialize_field("team_license_limit", x)?;
13798                s.end()
13799            }
13800            MemberAddResult::FreeTeamMemberLimitReached(x) => {
13801                // primitive
13802                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13803                s.serialize_field(".tag", "free_team_member_limit_reached")?;
13804                s.serialize_field("free_team_member_limit_reached", x)?;
13805                s.end()
13806            }
13807            MemberAddResult::UserAlreadyOnTeam(x) => {
13808                // primitive
13809                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13810                s.serialize_field(".tag", "user_already_on_team")?;
13811                s.serialize_field("user_already_on_team", x)?;
13812                s.end()
13813            }
13814            MemberAddResult::UserOnAnotherTeam(x) => {
13815                // primitive
13816                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13817                s.serialize_field(".tag", "user_on_another_team")?;
13818                s.serialize_field("user_on_another_team", x)?;
13819                s.end()
13820            }
13821            MemberAddResult::UserAlreadyPaired(x) => {
13822                // primitive
13823                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13824                s.serialize_field(".tag", "user_already_paired")?;
13825                s.serialize_field("user_already_paired", x)?;
13826                s.end()
13827            }
13828            MemberAddResult::UserMigrationFailed(x) => {
13829                // primitive
13830                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13831                s.serialize_field(".tag", "user_migration_failed")?;
13832                s.serialize_field("user_migration_failed", x)?;
13833                s.end()
13834            }
13835            MemberAddResult::DuplicateExternalMemberId(x) => {
13836                // primitive
13837                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13838                s.serialize_field(".tag", "duplicate_external_member_id")?;
13839                s.serialize_field("duplicate_external_member_id", x)?;
13840                s.end()
13841            }
13842            MemberAddResult::DuplicateMemberPersistentId(x) => {
13843                // primitive
13844                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13845                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
13846                s.serialize_field("duplicate_member_persistent_id", x)?;
13847                s.end()
13848            }
13849            MemberAddResult::PersistentIdDisabled(x) => {
13850                // primitive
13851                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13852                s.serialize_field(".tag", "persistent_id_disabled")?;
13853                s.serialize_field("persistent_id_disabled", x)?;
13854                s.end()
13855            }
13856            MemberAddResult::UserCreationFailed(x) => {
13857                // primitive
13858                let mut s = serializer.serialize_struct("MemberAddResult", 2)?;
13859                s.serialize_field(".tag", "user_creation_failed")?;
13860                s.serialize_field("user_creation_failed", x)?;
13861                s.end()
13862            }
13863            MemberAddResult::Success(x) => {
13864                // struct
13865                let mut s = serializer.serialize_struct("MemberAddResult", 3)?;
13866                s.serialize_field(".tag", "success")?;
13867                x.internal_serialize::<S>(&mut s)?;
13868                s.end()
13869            }
13870        }
13871    }
13872}
13873
13874// union extends MemberAddResultBase
13875impl From<MemberAddResultBase> for MemberAddResult {
13876    fn from(parent: MemberAddResultBase) -> Self {
13877        match parent {
13878            MemberAddResultBase::TeamLicenseLimit(x) => MemberAddResult::TeamLicenseLimit(x),
13879            MemberAddResultBase::FreeTeamMemberLimitReached(x) => MemberAddResult::FreeTeamMemberLimitReached(x),
13880            MemberAddResultBase::UserAlreadyOnTeam(x) => MemberAddResult::UserAlreadyOnTeam(x),
13881            MemberAddResultBase::UserOnAnotherTeam(x) => MemberAddResult::UserOnAnotherTeam(x),
13882            MemberAddResultBase::UserAlreadyPaired(x) => MemberAddResult::UserAlreadyPaired(x),
13883            MemberAddResultBase::UserMigrationFailed(x) => MemberAddResult::UserMigrationFailed(x),
13884            MemberAddResultBase::DuplicateExternalMemberId(x) => MemberAddResult::DuplicateExternalMemberId(x),
13885            MemberAddResultBase::DuplicateMemberPersistentId(x) => MemberAddResult::DuplicateMemberPersistentId(x),
13886            MemberAddResultBase::PersistentIdDisabled(x) => MemberAddResult::PersistentIdDisabled(x),
13887            MemberAddResultBase::UserCreationFailed(x) => MemberAddResult::UserCreationFailed(x),
13888        }
13889    }
13890}
13891#[derive(Debug, Clone, PartialEq, Eq)]
13892pub enum MemberAddResultBase {
13893    /// Team is already full. The organization has no available licenses.
13894    TeamLicenseLimit(crate::types::common::EmailAddress),
13895    /// Team is already full. The free team member limit has been reached.
13896    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
13897    /// User is already on this team. The provided email address is associated with a user who is
13898    /// already a member of (including in recoverable state) or invited to the team.
13899    UserAlreadyOnTeam(crate::types::common::EmailAddress),
13900    /// User is already on another team. The provided email address is associated with a user that
13901    /// is already a member or invited to another team.
13902    UserOnAnotherTeam(crate::types::common::EmailAddress),
13903    /// User is already paired.
13904    UserAlreadyPaired(crate::types::common::EmailAddress),
13905    /// User migration has failed.
13906    UserMigrationFailed(crate::types::common::EmailAddress),
13907    /// A user with the given external member ID already exists on the team (including in
13908    /// recoverable state).
13909    DuplicateExternalMemberId(crate::types::common::EmailAddress),
13910    /// A user with the given persistent ID already exists on the team (including in recoverable
13911    /// state).
13912    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
13913    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
13914    /// contact Dropbox for more information.
13915    PersistentIdDisabled(crate::types::common::EmailAddress),
13916    /// User creation has failed.
13917    UserCreationFailed(crate::types::common::EmailAddress),
13918}
13919
13920impl<'de> ::serde::de::Deserialize<'de> for MemberAddResultBase {
13921    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
13922        // union deserializer
13923        use serde::de::{self, MapAccess, Visitor};
13924        struct EnumVisitor;
13925        impl<'de> Visitor<'de> for EnumVisitor {
13926            type Value = MemberAddResultBase;
13927            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
13928                f.write_str("a MemberAddResultBase structure")
13929            }
13930            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
13931                let tag: &str = match map.next_key()? {
13932                    Some(".tag") => map.next_value()?,
13933                    _ => return Err(de::Error::missing_field(".tag"))
13934                };
13935                let value = match tag {
13936                    "team_license_limit" => {
13937                        match map.next_key()? {
13938                            Some("team_license_limit") => MemberAddResultBase::TeamLicenseLimit(map.next_value()?),
13939                            None => return Err(de::Error::missing_field("team_license_limit")),
13940                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13941                        }
13942                    }
13943                    "free_team_member_limit_reached" => {
13944                        match map.next_key()? {
13945                            Some("free_team_member_limit_reached") => MemberAddResultBase::FreeTeamMemberLimitReached(map.next_value()?),
13946                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
13947                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13948                        }
13949                    }
13950                    "user_already_on_team" => {
13951                        match map.next_key()? {
13952                            Some("user_already_on_team") => MemberAddResultBase::UserAlreadyOnTeam(map.next_value()?),
13953                            None => return Err(de::Error::missing_field("user_already_on_team")),
13954                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13955                        }
13956                    }
13957                    "user_on_another_team" => {
13958                        match map.next_key()? {
13959                            Some("user_on_another_team") => MemberAddResultBase::UserOnAnotherTeam(map.next_value()?),
13960                            None => return Err(de::Error::missing_field("user_on_another_team")),
13961                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13962                        }
13963                    }
13964                    "user_already_paired" => {
13965                        match map.next_key()? {
13966                            Some("user_already_paired") => MemberAddResultBase::UserAlreadyPaired(map.next_value()?),
13967                            None => return Err(de::Error::missing_field("user_already_paired")),
13968                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13969                        }
13970                    }
13971                    "user_migration_failed" => {
13972                        match map.next_key()? {
13973                            Some("user_migration_failed") => MemberAddResultBase::UserMigrationFailed(map.next_value()?),
13974                            None => return Err(de::Error::missing_field("user_migration_failed")),
13975                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13976                        }
13977                    }
13978                    "duplicate_external_member_id" => {
13979                        match map.next_key()? {
13980                            Some("duplicate_external_member_id") => MemberAddResultBase::DuplicateExternalMemberId(map.next_value()?),
13981                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
13982                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13983                        }
13984                    }
13985                    "duplicate_member_persistent_id" => {
13986                        match map.next_key()? {
13987                            Some("duplicate_member_persistent_id") => MemberAddResultBase::DuplicateMemberPersistentId(map.next_value()?),
13988                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
13989                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13990                        }
13991                    }
13992                    "persistent_id_disabled" => {
13993                        match map.next_key()? {
13994                            Some("persistent_id_disabled") => MemberAddResultBase::PersistentIdDisabled(map.next_value()?),
13995                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
13996                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
13997                        }
13998                    }
13999                    "user_creation_failed" => {
14000                        match map.next_key()? {
14001                            Some("user_creation_failed") => MemberAddResultBase::UserCreationFailed(map.next_value()?),
14002                            None => return Err(de::Error::missing_field("user_creation_failed")),
14003                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14004                        }
14005                    }
14006                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
14007                };
14008                crate::eat_json_fields(&mut map)?;
14009                Ok(value)
14010            }
14011        }
14012        const VARIANTS: &[&str] = &["team_license_limit",
14013                                    "free_team_member_limit_reached",
14014                                    "user_already_on_team",
14015                                    "user_on_another_team",
14016                                    "user_already_paired",
14017                                    "user_migration_failed",
14018                                    "duplicate_external_member_id",
14019                                    "duplicate_member_persistent_id",
14020                                    "persistent_id_disabled",
14021                                    "user_creation_failed"];
14022        deserializer.deserialize_struct("MemberAddResultBase", VARIANTS, EnumVisitor)
14023    }
14024}
14025
14026impl ::serde::ser::Serialize for MemberAddResultBase {
14027    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14028        // union serializer
14029        use serde::ser::SerializeStruct;
14030        match self {
14031            MemberAddResultBase::TeamLicenseLimit(x) => {
14032                // primitive
14033                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14034                s.serialize_field(".tag", "team_license_limit")?;
14035                s.serialize_field("team_license_limit", x)?;
14036                s.end()
14037            }
14038            MemberAddResultBase::FreeTeamMemberLimitReached(x) => {
14039                // primitive
14040                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14041                s.serialize_field(".tag", "free_team_member_limit_reached")?;
14042                s.serialize_field("free_team_member_limit_reached", x)?;
14043                s.end()
14044            }
14045            MemberAddResultBase::UserAlreadyOnTeam(x) => {
14046                // primitive
14047                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14048                s.serialize_field(".tag", "user_already_on_team")?;
14049                s.serialize_field("user_already_on_team", x)?;
14050                s.end()
14051            }
14052            MemberAddResultBase::UserOnAnotherTeam(x) => {
14053                // primitive
14054                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14055                s.serialize_field(".tag", "user_on_another_team")?;
14056                s.serialize_field("user_on_another_team", x)?;
14057                s.end()
14058            }
14059            MemberAddResultBase::UserAlreadyPaired(x) => {
14060                // primitive
14061                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14062                s.serialize_field(".tag", "user_already_paired")?;
14063                s.serialize_field("user_already_paired", x)?;
14064                s.end()
14065            }
14066            MemberAddResultBase::UserMigrationFailed(x) => {
14067                // primitive
14068                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14069                s.serialize_field(".tag", "user_migration_failed")?;
14070                s.serialize_field("user_migration_failed", x)?;
14071                s.end()
14072            }
14073            MemberAddResultBase::DuplicateExternalMemberId(x) => {
14074                // primitive
14075                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14076                s.serialize_field(".tag", "duplicate_external_member_id")?;
14077                s.serialize_field("duplicate_external_member_id", x)?;
14078                s.end()
14079            }
14080            MemberAddResultBase::DuplicateMemberPersistentId(x) => {
14081                // primitive
14082                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14083                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
14084                s.serialize_field("duplicate_member_persistent_id", x)?;
14085                s.end()
14086            }
14087            MemberAddResultBase::PersistentIdDisabled(x) => {
14088                // primitive
14089                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14090                s.serialize_field(".tag", "persistent_id_disabled")?;
14091                s.serialize_field("persistent_id_disabled", x)?;
14092                s.end()
14093            }
14094            MemberAddResultBase::UserCreationFailed(x) => {
14095                // primitive
14096                let mut s = serializer.serialize_struct("MemberAddResultBase", 2)?;
14097                s.serialize_field(".tag", "user_creation_failed")?;
14098                s.serialize_field("user_creation_failed", x)?;
14099                s.end()
14100            }
14101        }
14102    }
14103}
14104
14105#[derive(Debug, Clone, PartialEq, Eq)]
14106#[non_exhaustive] // structs may have more fields added in the future.
14107pub struct MemberAddV2Arg {
14108    pub member_email: crate::types::common::EmailAddress,
14109    /// Member's first name.
14110    pub member_given_name: Option<crate::types::common::OptionalNamePart>,
14111    /// Member's last name.
14112    pub member_surname: Option<crate::types::common::OptionalNamePart>,
14113    /// External ID for member.
14114    pub member_external_id: Option<crate::types::team_common::MemberExternalId>,
14115    /// Persistent ID for member. This field is only available to teams using persistent ID SAML
14116    /// configuration.
14117    pub member_persistent_id: Option<String>,
14118    /// Whether to send a welcome email to the member. If send_welcome_email is false, no email
14119    /// invitation will be sent to the user. This may be useful for apps using single sign-on (SSO)
14120    /// flows for onboarding that want to handle announcements themselves.
14121    pub send_welcome_email: bool,
14122    /// Whether a user is directory restricted.
14123    pub is_directory_restricted: Option<bool>,
14124    pub role_ids: Option<Vec<TeamMemberRoleId>>,
14125}
14126
14127impl MemberAddV2Arg {
14128    pub fn new(member_email: crate::types::common::EmailAddress) -> Self {
14129        MemberAddV2Arg {
14130            member_email,
14131            member_given_name: None,
14132            member_surname: None,
14133            member_external_id: None,
14134            member_persistent_id: None,
14135            send_welcome_email: true,
14136            is_directory_restricted: None,
14137            role_ids: None,
14138        }
14139    }
14140
14141    pub fn with_member_given_name(
14142        mut self,
14143        value: crate::types::common::OptionalNamePart,
14144    ) -> Self {
14145        self.member_given_name = Some(value);
14146        self
14147    }
14148
14149    pub fn with_member_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
14150        self.member_surname = Some(value);
14151        self
14152    }
14153
14154    pub fn with_member_external_id(
14155        mut self,
14156        value: crate::types::team_common::MemberExternalId,
14157    ) -> Self {
14158        self.member_external_id = Some(value);
14159        self
14160    }
14161
14162    pub fn with_member_persistent_id(mut self, value: String) -> Self {
14163        self.member_persistent_id = Some(value);
14164        self
14165    }
14166
14167    pub fn with_send_welcome_email(mut self, value: bool) -> Self {
14168        self.send_welcome_email = value;
14169        self
14170    }
14171
14172    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
14173        self.is_directory_restricted = Some(value);
14174        self
14175    }
14176
14177    pub fn with_role_ids(mut self, value: Vec<TeamMemberRoleId>) -> Self {
14178        self.role_ids = Some(value);
14179        self
14180    }
14181}
14182
14183const MEMBER_ADD_V2_ARG_FIELDS: &[&str] = &["member_email",
14184                                            "member_given_name",
14185                                            "member_surname",
14186                                            "member_external_id",
14187                                            "member_persistent_id",
14188                                            "send_welcome_email",
14189                                            "is_directory_restricted",
14190                                            "role_ids"];
14191impl MemberAddV2Arg {
14192    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14193        map: V,
14194    ) -> Result<MemberAddV2Arg, V::Error> {
14195        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14196    }
14197
14198    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14199        mut map: V,
14200        optional: bool,
14201    ) -> Result<Option<MemberAddV2Arg>, V::Error> {
14202        let mut field_member_email = None;
14203        let mut field_member_given_name = None;
14204        let mut field_member_surname = None;
14205        let mut field_member_external_id = None;
14206        let mut field_member_persistent_id = None;
14207        let mut field_send_welcome_email = None;
14208        let mut field_is_directory_restricted = None;
14209        let mut field_role_ids = None;
14210        let mut nothing = true;
14211        while let Some(key) = map.next_key::<&str>()? {
14212            nothing = false;
14213            match key {
14214                "member_email" => {
14215                    if field_member_email.is_some() {
14216                        return Err(::serde::de::Error::duplicate_field("member_email"));
14217                    }
14218                    field_member_email = Some(map.next_value()?);
14219                }
14220                "member_given_name" => {
14221                    if field_member_given_name.is_some() {
14222                        return Err(::serde::de::Error::duplicate_field("member_given_name"));
14223                    }
14224                    field_member_given_name = Some(map.next_value()?);
14225                }
14226                "member_surname" => {
14227                    if field_member_surname.is_some() {
14228                        return Err(::serde::de::Error::duplicate_field("member_surname"));
14229                    }
14230                    field_member_surname = Some(map.next_value()?);
14231                }
14232                "member_external_id" => {
14233                    if field_member_external_id.is_some() {
14234                        return Err(::serde::de::Error::duplicate_field("member_external_id"));
14235                    }
14236                    field_member_external_id = Some(map.next_value()?);
14237                }
14238                "member_persistent_id" => {
14239                    if field_member_persistent_id.is_some() {
14240                        return Err(::serde::de::Error::duplicate_field("member_persistent_id"));
14241                    }
14242                    field_member_persistent_id = Some(map.next_value()?);
14243                }
14244                "send_welcome_email" => {
14245                    if field_send_welcome_email.is_some() {
14246                        return Err(::serde::de::Error::duplicate_field("send_welcome_email"));
14247                    }
14248                    field_send_welcome_email = Some(map.next_value()?);
14249                }
14250                "is_directory_restricted" => {
14251                    if field_is_directory_restricted.is_some() {
14252                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
14253                    }
14254                    field_is_directory_restricted = Some(map.next_value()?);
14255                }
14256                "role_ids" => {
14257                    if field_role_ids.is_some() {
14258                        return Err(::serde::de::Error::duplicate_field("role_ids"));
14259                    }
14260                    field_role_ids = Some(map.next_value()?);
14261                }
14262                _ => {
14263                    // unknown field allowed and ignored
14264                    map.next_value::<::serde_json::Value>()?;
14265                }
14266            }
14267        }
14268        if optional && nothing {
14269            return Ok(None);
14270        }
14271        let result = MemberAddV2Arg {
14272            member_email: field_member_email.ok_or_else(|| ::serde::de::Error::missing_field("member_email"))?,
14273            member_given_name: field_member_given_name.and_then(Option::flatten),
14274            member_surname: field_member_surname.and_then(Option::flatten),
14275            member_external_id: field_member_external_id.and_then(Option::flatten),
14276            member_persistent_id: field_member_persistent_id.and_then(Option::flatten),
14277            send_welcome_email: field_send_welcome_email.unwrap_or(true),
14278            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
14279            role_ids: field_role_ids.and_then(Option::flatten),
14280        };
14281        Ok(Some(result))
14282    }
14283
14284    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14285        &self,
14286        s: &mut S::SerializeStruct,
14287    ) -> Result<(), S::Error> {
14288        use serde::ser::SerializeStruct;
14289        s.serialize_field("member_email", &self.member_email)?;
14290        if let Some(val) = &self.member_given_name {
14291            s.serialize_field("member_given_name", val)?;
14292        }
14293        if let Some(val) = &self.member_surname {
14294            s.serialize_field("member_surname", val)?;
14295        }
14296        if let Some(val) = &self.member_external_id {
14297            s.serialize_field("member_external_id", val)?;
14298        }
14299        if let Some(val) = &self.member_persistent_id {
14300            s.serialize_field("member_persistent_id", val)?;
14301        }
14302        if !self.send_welcome_email {
14303            s.serialize_field("send_welcome_email", &self.send_welcome_email)?;
14304        }
14305        if let Some(val) = &self.is_directory_restricted {
14306            s.serialize_field("is_directory_restricted", val)?;
14307        }
14308        if let Some(val) = &self.role_ids {
14309            s.serialize_field("role_ids", val)?;
14310        }
14311        Ok(())
14312    }
14313}
14314
14315impl<'de> ::serde::de::Deserialize<'de> for MemberAddV2Arg {
14316    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14317        // struct deserializer
14318        use serde::de::{MapAccess, Visitor};
14319        struct StructVisitor;
14320        impl<'de> Visitor<'de> for StructVisitor {
14321            type Value = MemberAddV2Arg;
14322            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14323                f.write_str("a MemberAddV2Arg struct")
14324            }
14325            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14326                MemberAddV2Arg::internal_deserialize(map)
14327            }
14328        }
14329        deserializer.deserialize_struct("MemberAddV2Arg", MEMBER_ADD_V2_ARG_FIELDS, StructVisitor)
14330    }
14331}
14332
14333impl ::serde::ser::Serialize for MemberAddV2Arg {
14334    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14335        // struct serializer
14336        use serde::ser::SerializeStruct;
14337        let mut s = serializer.serialize_struct("MemberAddV2Arg", 8)?;
14338        self.internal_serialize::<S>(&mut s)?;
14339        s.end()
14340    }
14341}
14342
14343// struct extends MemberAddArgBase
14344impl From<MemberAddV2Arg> for MemberAddArgBase {
14345    fn from(subtype: MemberAddV2Arg) -> Self {
14346        Self {
14347            member_email: subtype.member_email,
14348            member_given_name: subtype.member_given_name,
14349            member_surname: subtype.member_surname,
14350            member_external_id: subtype.member_external_id,
14351            member_persistent_id: subtype.member_persistent_id,
14352            send_welcome_email: subtype.send_welcome_email,
14353            is_directory_restricted: subtype.is_directory_restricted,
14354        }
14355    }
14356}
14357/// Describes the result of attempting to add a single user to the team. 'success' is the only value
14358/// indicating that a user was indeed added to the team - the other values explain the type of
14359/// failure that occurred, and include the email of the user for which the operation has failed.
14360#[derive(Debug, Clone, PartialEq, Eq)]
14361#[non_exhaustive] // variants may be added in the future
14362pub enum MemberAddV2Result {
14363    /// Team is already full. The organization has no available licenses.
14364    TeamLicenseLimit(crate::types::common::EmailAddress),
14365    /// Team is already full. The free team member limit has been reached.
14366    FreeTeamMemberLimitReached(crate::types::common::EmailAddress),
14367    /// User is already on this team. The provided email address is associated with a user who is
14368    /// already a member of (including in recoverable state) or invited to the team.
14369    UserAlreadyOnTeam(crate::types::common::EmailAddress),
14370    /// User is already on another team. The provided email address is associated with a user that
14371    /// is already a member or invited to another team.
14372    UserOnAnotherTeam(crate::types::common::EmailAddress),
14373    /// User is already paired.
14374    UserAlreadyPaired(crate::types::common::EmailAddress),
14375    /// User migration has failed.
14376    UserMigrationFailed(crate::types::common::EmailAddress),
14377    /// A user with the given external member ID already exists on the team (including in
14378    /// recoverable state).
14379    DuplicateExternalMemberId(crate::types::common::EmailAddress),
14380    /// A user with the given persistent ID already exists on the team (including in recoverable
14381    /// state).
14382    DuplicateMemberPersistentId(crate::types::common::EmailAddress),
14383    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
14384    /// contact Dropbox for more information.
14385    PersistentIdDisabled(crate::types::common::EmailAddress),
14386    /// User creation has failed.
14387    UserCreationFailed(crate::types::common::EmailAddress),
14388    /// Describes a user that was successfully added to the team.
14389    Success(TeamMemberInfoV2),
14390    /// Catch-all used for unrecognized values returned from the server. Encountering this value
14391    /// typically indicates that this SDK version is out of date.
14392    Other,
14393}
14394
14395impl<'de> ::serde::de::Deserialize<'de> for MemberAddV2Result {
14396    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14397        // union deserializer
14398        use serde::de::{self, MapAccess, Visitor};
14399        struct EnumVisitor;
14400        impl<'de> Visitor<'de> for EnumVisitor {
14401            type Value = MemberAddV2Result;
14402            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14403                f.write_str("a MemberAddV2Result structure")
14404            }
14405            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
14406                let tag: &str = match map.next_key()? {
14407                    Some(".tag") => map.next_value()?,
14408                    _ => return Err(de::Error::missing_field(".tag"))
14409                };
14410                let value = match tag {
14411                    "team_license_limit" => {
14412                        match map.next_key()? {
14413                            Some("team_license_limit") => MemberAddV2Result::TeamLicenseLimit(map.next_value()?),
14414                            None => return Err(de::Error::missing_field("team_license_limit")),
14415                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14416                        }
14417                    }
14418                    "free_team_member_limit_reached" => {
14419                        match map.next_key()? {
14420                            Some("free_team_member_limit_reached") => MemberAddV2Result::FreeTeamMemberLimitReached(map.next_value()?),
14421                            None => return Err(de::Error::missing_field("free_team_member_limit_reached")),
14422                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14423                        }
14424                    }
14425                    "user_already_on_team" => {
14426                        match map.next_key()? {
14427                            Some("user_already_on_team") => MemberAddV2Result::UserAlreadyOnTeam(map.next_value()?),
14428                            None => return Err(de::Error::missing_field("user_already_on_team")),
14429                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14430                        }
14431                    }
14432                    "user_on_another_team" => {
14433                        match map.next_key()? {
14434                            Some("user_on_another_team") => MemberAddV2Result::UserOnAnotherTeam(map.next_value()?),
14435                            None => return Err(de::Error::missing_field("user_on_another_team")),
14436                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14437                        }
14438                    }
14439                    "user_already_paired" => {
14440                        match map.next_key()? {
14441                            Some("user_already_paired") => MemberAddV2Result::UserAlreadyPaired(map.next_value()?),
14442                            None => return Err(de::Error::missing_field("user_already_paired")),
14443                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14444                        }
14445                    }
14446                    "user_migration_failed" => {
14447                        match map.next_key()? {
14448                            Some("user_migration_failed") => MemberAddV2Result::UserMigrationFailed(map.next_value()?),
14449                            None => return Err(de::Error::missing_field("user_migration_failed")),
14450                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14451                        }
14452                    }
14453                    "duplicate_external_member_id" => {
14454                        match map.next_key()? {
14455                            Some("duplicate_external_member_id") => MemberAddV2Result::DuplicateExternalMemberId(map.next_value()?),
14456                            None => return Err(de::Error::missing_field("duplicate_external_member_id")),
14457                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14458                        }
14459                    }
14460                    "duplicate_member_persistent_id" => {
14461                        match map.next_key()? {
14462                            Some("duplicate_member_persistent_id") => MemberAddV2Result::DuplicateMemberPersistentId(map.next_value()?),
14463                            None => return Err(de::Error::missing_field("duplicate_member_persistent_id")),
14464                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14465                        }
14466                    }
14467                    "persistent_id_disabled" => {
14468                        match map.next_key()? {
14469                            Some("persistent_id_disabled") => MemberAddV2Result::PersistentIdDisabled(map.next_value()?),
14470                            None => return Err(de::Error::missing_field("persistent_id_disabled")),
14471                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14472                        }
14473                    }
14474                    "user_creation_failed" => {
14475                        match map.next_key()? {
14476                            Some("user_creation_failed") => MemberAddV2Result::UserCreationFailed(map.next_value()?),
14477                            None => return Err(de::Error::missing_field("user_creation_failed")),
14478                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
14479                        }
14480                    }
14481                    "success" => MemberAddV2Result::Success(TeamMemberInfoV2::internal_deserialize(&mut map)?),
14482                    _ => MemberAddV2Result::Other,
14483                };
14484                crate::eat_json_fields(&mut map)?;
14485                Ok(value)
14486            }
14487        }
14488        const VARIANTS: &[&str] = &["team_license_limit",
14489                                    "free_team_member_limit_reached",
14490                                    "user_already_on_team",
14491                                    "user_on_another_team",
14492                                    "user_already_paired",
14493                                    "user_migration_failed",
14494                                    "duplicate_external_member_id",
14495                                    "duplicate_member_persistent_id",
14496                                    "persistent_id_disabled",
14497                                    "user_creation_failed",
14498                                    "success",
14499                                    "other"];
14500        deserializer.deserialize_struct("MemberAddV2Result", VARIANTS, EnumVisitor)
14501    }
14502}
14503
14504impl ::serde::ser::Serialize for MemberAddV2Result {
14505    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14506        // union serializer
14507        use serde::ser::SerializeStruct;
14508        match self {
14509            MemberAddV2Result::TeamLicenseLimit(x) => {
14510                // primitive
14511                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14512                s.serialize_field(".tag", "team_license_limit")?;
14513                s.serialize_field("team_license_limit", x)?;
14514                s.end()
14515            }
14516            MemberAddV2Result::FreeTeamMemberLimitReached(x) => {
14517                // primitive
14518                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14519                s.serialize_field(".tag", "free_team_member_limit_reached")?;
14520                s.serialize_field("free_team_member_limit_reached", x)?;
14521                s.end()
14522            }
14523            MemberAddV2Result::UserAlreadyOnTeam(x) => {
14524                // primitive
14525                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14526                s.serialize_field(".tag", "user_already_on_team")?;
14527                s.serialize_field("user_already_on_team", x)?;
14528                s.end()
14529            }
14530            MemberAddV2Result::UserOnAnotherTeam(x) => {
14531                // primitive
14532                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14533                s.serialize_field(".tag", "user_on_another_team")?;
14534                s.serialize_field("user_on_another_team", x)?;
14535                s.end()
14536            }
14537            MemberAddV2Result::UserAlreadyPaired(x) => {
14538                // primitive
14539                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14540                s.serialize_field(".tag", "user_already_paired")?;
14541                s.serialize_field("user_already_paired", x)?;
14542                s.end()
14543            }
14544            MemberAddV2Result::UserMigrationFailed(x) => {
14545                // primitive
14546                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14547                s.serialize_field(".tag", "user_migration_failed")?;
14548                s.serialize_field("user_migration_failed", x)?;
14549                s.end()
14550            }
14551            MemberAddV2Result::DuplicateExternalMemberId(x) => {
14552                // primitive
14553                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14554                s.serialize_field(".tag", "duplicate_external_member_id")?;
14555                s.serialize_field("duplicate_external_member_id", x)?;
14556                s.end()
14557            }
14558            MemberAddV2Result::DuplicateMemberPersistentId(x) => {
14559                // primitive
14560                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14561                s.serialize_field(".tag", "duplicate_member_persistent_id")?;
14562                s.serialize_field("duplicate_member_persistent_id", x)?;
14563                s.end()
14564            }
14565            MemberAddV2Result::PersistentIdDisabled(x) => {
14566                // primitive
14567                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14568                s.serialize_field(".tag", "persistent_id_disabled")?;
14569                s.serialize_field("persistent_id_disabled", x)?;
14570                s.end()
14571            }
14572            MemberAddV2Result::UserCreationFailed(x) => {
14573                // primitive
14574                let mut s = serializer.serialize_struct("MemberAddV2Result", 2)?;
14575                s.serialize_field(".tag", "user_creation_failed")?;
14576                s.serialize_field("user_creation_failed", x)?;
14577                s.end()
14578            }
14579            MemberAddV2Result::Success(x) => {
14580                // struct
14581                let mut s = serializer.serialize_struct("MemberAddV2Result", 3)?;
14582                s.serialize_field(".tag", "success")?;
14583                x.internal_serialize::<S>(&mut s)?;
14584                s.end()
14585            }
14586            MemberAddV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
14587        }
14588    }
14589}
14590
14591// union extends MemberAddResultBase
14592impl From<MemberAddResultBase> for MemberAddV2Result {
14593    fn from(parent: MemberAddResultBase) -> Self {
14594        match parent {
14595            MemberAddResultBase::TeamLicenseLimit(x) => MemberAddV2Result::TeamLicenseLimit(x),
14596            MemberAddResultBase::FreeTeamMemberLimitReached(x) => MemberAddV2Result::FreeTeamMemberLimitReached(x),
14597            MemberAddResultBase::UserAlreadyOnTeam(x) => MemberAddV2Result::UserAlreadyOnTeam(x),
14598            MemberAddResultBase::UserOnAnotherTeam(x) => MemberAddV2Result::UserOnAnotherTeam(x),
14599            MemberAddResultBase::UserAlreadyPaired(x) => MemberAddV2Result::UserAlreadyPaired(x),
14600            MemberAddResultBase::UserMigrationFailed(x) => MemberAddV2Result::UserMigrationFailed(x),
14601            MemberAddResultBase::DuplicateExternalMemberId(x) => MemberAddV2Result::DuplicateExternalMemberId(x),
14602            MemberAddResultBase::DuplicateMemberPersistentId(x) => MemberAddV2Result::DuplicateMemberPersistentId(x),
14603            MemberAddResultBase::PersistentIdDisabled(x) => MemberAddV2Result::PersistentIdDisabled(x),
14604            MemberAddResultBase::UserCreationFailed(x) => MemberAddV2Result::UserCreationFailed(x),
14605        }
14606    }
14607}
14608/// Information on devices of a team's member.
14609#[derive(Debug, Clone, PartialEq, Eq)]
14610#[non_exhaustive] // structs may have more fields added in the future.
14611pub struct MemberDevices {
14612    /// The member unique Id.
14613    pub team_member_id: String,
14614    /// List of web sessions made by this team member.
14615    pub web_sessions: Option<Vec<ActiveWebSession>>,
14616    /// List of desktop clients by this team member.
14617    pub desktop_clients: Option<Vec<DesktopClientSession>>,
14618    /// List of mobile clients by this team member.
14619    pub mobile_clients: Option<Vec<MobileClientSession>>,
14620}
14621
14622impl MemberDevices {
14623    pub fn new(team_member_id: String) -> Self {
14624        MemberDevices {
14625            team_member_id,
14626            web_sessions: None,
14627            desktop_clients: None,
14628            mobile_clients: None,
14629        }
14630    }
14631
14632    pub fn with_web_sessions(mut self, value: Vec<ActiveWebSession>) -> Self {
14633        self.web_sessions = Some(value);
14634        self
14635    }
14636
14637    pub fn with_desktop_clients(mut self, value: Vec<DesktopClientSession>) -> Self {
14638        self.desktop_clients = Some(value);
14639        self
14640    }
14641
14642    pub fn with_mobile_clients(mut self, value: Vec<MobileClientSession>) -> Self {
14643        self.mobile_clients = Some(value);
14644        self
14645    }
14646}
14647
14648const MEMBER_DEVICES_FIELDS: &[&str] = &["team_member_id",
14649                                         "web_sessions",
14650                                         "desktop_clients",
14651                                         "mobile_clients"];
14652impl MemberDevices {
14653    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14654        map: V,
14655    ) -> Result<MemberDevices, V::Error> {
14656        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14657    }
14658
14659    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14660        mut map: V,
14661        optional: bool,
14662    ) -> Result<Option<MemberDevices>, V::Error> {
14663        let mut field_team_member_id = None;
14664        let mut field_web_sessions = None;
14665        let mut field_desktop_clients = None;
14666        let mut field_mobile_clients = None;
14667        let mut nothing = true;
14668        while let Some(key) = map.next_key::<&str>()? {
14669            nothing = false;
14670            match key {
14671                "team_member_id" => {
14672                    if field_team_member_id.is_some() {
14673                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
14674                    }
14675                    field_team_member_id = Some(map.next_value()?);
14676                }
14677                "web_sessions" => {
14678                    if field_web_sessions.is_some() {
14679                        return Err(::serde::de::Error::duplicate_field("web_sessions"));
14680                    }
14681                    field_web_sessions = Some(map.next_value()?);
14682                }
14683                "desktop_clients" => {
14684                    if field_desktop_clients.is_some() {
14685                        return Err(::serde::de::Error::duplicate_field("desktop_clients"));
14686                    }
14687                    field_desktop_clients = Some(map.next_value()?);
14688                }
14689                "mobile_clients" => {
14690                    if field_mobile_clients.is_some() {
14691                        return Err(::serde::de::Error::duplicate_field("mobile_clients"));
14692                    }
14693                    field_mobile_clients = Some(map.next_value()?);
14694                }
14695                _ => {
14696                    // unknown field allowed and ignored
14697                    map.next_value::<::serde_json::Value>()?;
14698                }
14699            }
14700        }
14701        if optional && nothing {
14702            return Ok(None);
14703        }
14704        let result = MemberDevices {
14705            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
14706            web_sessions: field_web_sessions.and_then(Option::flatten),
14707            desktop_clients: field_desktop_clients.and_then(Option::flatten),
14708            mobile_clients: field_mobile_clients.and_then(Option::flatten),
14709        };
14710        Ok(Some(result))
14711    }
14712
14713    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14714        &self,
14715        s: &mut S::SerializeStruct,
14716    ) -> Result<(), S::Error> {
14717        use serde::ser::SerializeStruct;
14718        s.serialize_field("team_member_id", &self.team_member_id)?;
14719        if let Some(val) = &self.web_sessions {
14720            s.serialize_field("web_sessions", val)?;
14721        }
14722        if let Some(val) = &self.desktop_clients {
14723            s.serialize_field("desktop_clients", val)?;
14724        }
14725        if let Some(val) = &self.mobile_clients {
14726            s.serialize_field("mobile_clients", val)?;
14727        }
14728        Ok(())
14729    }
14730}
14731
14732impl<'de> ::serde::de::Deserialize<'de> for MemberDevices {
14733    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14734        // struct deserializer
14735        use serde::de::{MapAccess, Visitor};
14736        struct StructVisitor;
14737        impl<'de> Visitor<'de> for StructVisitor {
14738            type Value = MemberDevices;
14739            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14740                f.write_str("a MemberDevices struct")
14741            }
14742            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14743                MemberDevices::internal_deserialize(map)
14744            }
14745        }
14746        deserializer.deserialize_struct("MemberDevices", MEMBER_DEVICES_FIELDS, StructVisitor)
14747    }
14748}
14749
14750impl ::serde::ser::Serialize for MemberDevices {
14751    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14752        // struct serializer
14753        use serde::ser::SerializeStruct;
14754        let mut s = serializer.serialize_struct("MemberDevices", 4)?;
14755        self.internal_serialize::<S>(&mut s)?;
14756        s.end()
14757    }
14758}
14759
14760/// Information on linked applications of a team member.
14761#[derive(Debug, Clone, PartialEq, Eq)]
14762#[non_exhaustive] // structs may have more fields added in the future.
14763pub struct MemberLinkedApps {
14764    /// The member unique Id.
14765    pub team_member_id: String,
14766    /// List of third party applications linked by this team member.
14767    pub linked_api_apps: Vec<ApiApp>,
14768}
14769
14770impl MemberLinkedApps {
14771    pub fn new(team_member_id: String, linked_api_apps: Vec<ApiApp>) -> Self {
14772        MemberLinkedApps {
14773            team_member_id,
14774            linked_api_apps,
14775        }
14776    }
14777}
14778
14779const MEMBER_LINKED_APPS_FIELDS: &[&str] = &["team_member_id",
14780                                             "linked_api_apps"];
14781impl MemberLinkedApps {
14782    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
14783        map: V,
14784    ) -> Result<MemberLinkedApps, V::Error> {
14785        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
14786    }
14787
14788    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
14789        mut map: V,
14790        optional: bool,
14791    ) -> Result<Option<MemberLinkedApps>, V::Error> {
14792        let mut field_team_member_id = None;
14793        let mut field_linked_api_apps = None;
14794        let mut nothing = true;
14795        while let Some(key) = map.next_key::<&str>()? {
14796            nothing = false;
14797            match key {
14798                "team_member_id" => {
14799                    if field_team_member_id.is_some() {
14800                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
14801                    }
14802                    field_team_member_id = Some(map.next_value()?);
14803                }
14804                "linked_api_apps" => {
14805                    if field_linked_api_apps.is_some() {
14806                        return Err(::serde::de::Error::duplicate_field("linked_api_apps"));
14807                    }
14808                    field_linked_api_apps = Some(map.next_value()?);
14809                }
14810                _ => {
14811                    // unknown field allowed and ignored
14812                    map.next_value::<::serde_json::Value>()?;
14813                }
14814            }
14815        }
14816        if optional && nothing {
14817            return Ok(None);
14818        }
14819        let result = MemberLinkedApps {
14820            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
14821            linked_api_apps: field_linked_api_apps.ok_or_else(|| ::serde::de::Error::missing_field("linked_api_apps"))?,
14822        };
14823        Ok(Some(result))
14824    }
14825
14826    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
14827        &self,
14828        s: &mut S::SerializeStruct,
14829    ) -> Result<(), S::Error> {
14830        use serde::ser::SerializeStruct;
14831        s.serialize_field("team_member_id", &self.team_member_id)?;
14832        s.serialize_field("linked_api_apps", &self.linked_api_apps)?;
14833        Ok(())
14834    }
14835}
14836
14837impl<'de> ::serde::de::Deserialize<'de> for MemberLinkedApps {
14838    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
14839        // struct deserializer
14840        use serde::de::{MapAccess, Visitor};
14841        struct StructVisitor;
14842        impl<'de> Visitor<'de> for StructVisitor {
14843            type Value = MemberLinkedApps;
14844            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
14845                f.write_str("a MemberLinkedApps struct")
14846            }
14847            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
14848                MemberLinkedApps::internal_deserialize(map)
14849            }
14850        }
14851        deserializer.deserialize_struct("MemberLinkedApps", MEMBER_LINKED_APPS_FIELDS, StructVisitor)
14852    }
14853}
14854
14855impl ::serde::ser::Serialize for MemberLinkedApps {
14856    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
14857        // struct serializer
14858        use serde::ser::SerializeStruct;
14859        let mut s = serializer.serialize_struct("MemberLinkedApps", 2)?;
14860        self.internal_serialize::<S>(&mut s)?;
14861        s.end()
14862    }
14863}
14864
14865/// Basic member profile.
14866#[derive(Debug, Clone, PartialEq, Eq)]
14867#[non_exhaustive] // structs may have more fields added in the future.
14868pub struct MemberProfile {
14869    /// ID of user as a member of a team.
14870    pub team_member_id: crate::types::team_common::TeamMemberId,
14871    /// Email address of user.
14872    pub email: String,
14873    /// Is true if the user's email is verified to be owned by the user.
14874    pub email_verified: bool,
14875    /// The user's status as a member of a specific team.
14876    pub status: TeamMemberStatus,
14877    /// Representations for a person's name.
14878    pub name: crate::types::users::Name,
14879    /// The user's membership type: full (normal team member) vs limited (does not use a license; no
14880    /// access to the team's shared quota).
14881    pub membership_type: TeamMembershipType,
14882    /// External ID that a team can attach to the user. An application using the API may find it
14883    /// easier to use their own IDs instead of Dropbox IDs like account_id or team_member_id.
14884    pub external_id: Option<String>,
14885    /// A user's account identifier.
14886    pub account_id: Option<crate::types::users_common::AccountId>,
14887    /// Secondary emails of a user.
14888    pub secondary_emails: Option<Vec<crate::types::secondary_emails::SecondaryEmail>>,
14889    /// The date and time the user was invited to the team (contains value only when the member's
14890    /// status matches [`TeamMemberStatus::Invited`]).
14891    pub invited_on: Option<crate::types::common::DropboxTimestamp>,
14892    /// The date and time the user joined as a member of a specific team.
14893    pub joined_on: Option<crate::types::common::DropboxTimestamp>,
14894    /// The date and time the user was suspended from the team (contains value only when the
14895    /// member's status matches [`TeamMemberStatus::Suspended`]).
14896    pub suspended_on: Option<crate::types::common::DropboxTimestamp>,
14897    /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used
14898    /// for SAML authentication.
14899    pub persistent_id: Option<String>,
14900    /// Whether the user is a directory restricted user.
14901    pub is_directory_restricted: Option<bool>,
14902    /// URL for the photo representing the user, if one is set.
14903    pub profile_photo_url: Option<String>,
14904}
14905
14906impl MemberProfile {
14907    pub fn new(
14908        team_member_id: crate::types::team_common::TeamMemberId,
14909        email: String,
14910        email_verified: bool,
14911        status: TeamMemberStatus,
14912        name: crate::types::users::Name,
14913        membership_type: TeamMembershipType,
14914    ) -> Self {
14915        MemberProfile {
14916            team_member_id,
14917            email,
14918            email_verified,
14919            status,
14920            name,
14921            membership_type,
14922            external_id: None,
14923            account_id: None,
14924            secondary_emails: None,
14925            invited_on: None,
14926            joined_on: None,
14927            suspended_on: None,
14928            persistent_id: None,
14929            is_directory_restricted: None,
14930            profile_photo_url: None,
14931        }
14932    }
14933
14934    pub fn with_external_id(mut self, value: String) -> Self {
14935        self.external_id = Some(value);
14936        self
14937    }
14938
14939    pub fn with_account_id(mut self, value: crate::types::users_common::AccountId) -> Self {
14940        self.account_id = Some(value);
14941        self
14942    }
14943
14944    pub fn with_secondary_emails(
14945        mut self,
14946        value: Vec<crate::types::secondary_emails::SecondaryEmail>,
14947    ) -> Self {
14948        self.secondary_emails = Some(value);
14949        self
14950    }
14951
14952    pub fn with_invited_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14953        self.invited_on = Some(value);
14954        self
14955    }
14956
14957    pub fn with_joined_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14958        self.joined_on = Some(value);
14959        self
14960    }
14961
14962    pub fn with_suspended_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
14963        self.suspended_on = Some(value);
14964        self
14965    }
14966
14967    pub fn with_persistent_id(mut self, value: String) -> Self {
14968        self.persistent_id = Some(value);
14969        self
14970    }
14971
14972    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
14973        self.is_directory_restricted = Some(value);
14974        self
14975    }
14976
14977    pub fn with_profile_photo_url(mut self, value: String) -> Self {
14978        self.profile_photo_url = Some(value);
14979        self
14980    }
14981}
14982
14983const MEMBER_PROFILE_FIELDS: &[&str] = &["team_member_id",
14984                                         "email",
14985                                         "email_verified",
14986                                         "status",
14987                                         "name",
14988                                         "membership_type",
14989                                         "external_id",
14990                                         "account_id",
14991                                         "secondary_emails",
14992                                         "invited_on",
14993                                         "joined_on",
14994                                         "suspended_on",
14995                                         "persistent_id",
14996                                         "is_directory_restricted",
14997                                         "profile_photo_url"];
14998impl MemberProfile {
14999    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15000        map: V,
15001    ) -> Result<MemberProfile, V::Error> {
15002        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15003    }
15004
15005    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15006        mut map: V,
15007        optional: bool,
15008    ) -> Result<Option<MemberProfile>, V::Error> {
15009        let mut field_team_member_id = None;
15010        let mut field_email = None;
15011        let mut field_email_verified = None;
15012        let mut field_status = None;
15013        let mut field_name = None;
15014        let mut field_membership_type = None;
15015        let mut field_external_id = None;
15016        let mut field_account_id = None;
15017        let mut field_secondary_emails = None;
15018        let mut field_invited_on = None;
15019        let mut field_joined_on = None;
15020        let mut field_suspended_on = None;
15021        let mut field_persistent_id = None;
15022        let mut field_is_directory_restricted = None;
15023        let mut field_profile_photo_url = None;
15024        let mut nothing = true;
15025        while let Some(key) = map.next_key::<&str>()? {
15026            nothing = false;
15027            match key {
15028                "team_member_id" => {
15029                    if field_team_member_id.is_some() {
15030                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
15031                    }
15032                    field_team_member_id = Some(map.next_value()?);
15033                }
15034                "email" => {
15035                    if field_email.is_some() {
15036                        return Err(::serde::de::Error::duplicate_field("email"));
15037                    }
15038                    field_email = Some(map.next_value()?);
15039                }
15040                "email_verified" => {
15041                    if field_email_verified.is_some() {
15042                        return Err(::serde::de::Error::duplicate_field("email_verified"));
15043                    }
15044                    field_email_verified = Some(map.next_value()?);
15045                }
15046                "status" => {
15047                    if field_status.is_some() {
15048                        return Err(::serde::de::Error::duplicate_field("status"));
15049                    }
15050                    field_status = Some(map.next_value()?);
15051                }
15052                "name" => {
15053                    if field_name.is_some() {
15054                        return Err(::serde::de::Error::duplicate_field("name"));
15055                    }
15056                    field_name = Some(map.next_value()?);
15057                }
15058                "membership_type" => {
15059                    if field_membership_type.is_some() {
15060                        return Err(::serde::de::Error::duplicate_field("membership_type"));
15061                    }
15062                    field_membership_type = Some(map.next_value()?);
15063                }
15064                "external_id" => {
15065                    if field_external_id.is_some() {
15066                        return Err(::serde::de::Error::duplicate_field("external_id"));
15067                    }
15068                    field_external_id = Some(map.next_value()?);
15069                }
15070                "account_id" => {
15071                    if field_account_id.is_some() {
15072                        return Err(::serde::de::Error::duplicate_field("account_id"));
15073                    }
15074                    field_account_id = Some(map.next_value()?);
15075                }
15076                "secondary_emails" => {
15077                    if field_secondary_emails.is_some() {
15078                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
15079                    }
15080                    field_secondary_emails = Some(map.next_value()?);
15081                }
15082                "invited_on" => {
15083                    if field_invited_on.is_some() {
15084                        return Err(::serde::de::Error::duplicate_field("invited_on"));
15085                    }
15086                    field_invited_on = Some(map.next_value()?);
15087                }
15088                "joined_on" => {
15089                    if field_joined_on.is_some() {
15090                        return Err(::serde::de::Error::duplicate_field("joined_on"));
15091                    }
15092                    field_joined_on = Some(map.next_value()?);
15093                }
15094                "suspended_on" => {
15095                    if field_suspended_on.is_some() {
15096                        return Err(::serde::de::Error::duplicate_field("suspended_on"));
15097                    }
15098                    field_suspended_on = Some(map.next_value()?);
15099                }
15100                "persistent_id" => {
15101                    if field_persistent_id.is_some() {
15102                        return Err(::serde::de::Error::duplicate_field("persistent_id"));
15103                    }
15104                    field_persistent_id = Some(map.next_value()?);
15105                }
15106                "is_directory_restricted" => {
15107                    if field_is_directory_restricted.is_some() {
15108                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
15109                    }
15110                    field_is_directory_restricted = Some(map.next_value()?);
15111                }
15112                "profile_photo_url" => {
15113                    if field_profile_photo_url.is_some() {
15114                        return Err(::serde::de::Error::duplicate_field("profile_photo_url"));
15115                    }
15116                    field_profile_photo_url = Some(map.next_value()?);
15117                }
15118                _ => {
15119                    // unknown field allowed and ignored
15120                    map.next_value::<::serde_json::Value>()?;
15121                }
15122            }
15123        }
15124        if optional && nothing {
15125            return Ok(None);
15126        }
15127        let result = MemberProfile {
15128            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
15129            email: field_email.ok_or_else(|| ::serde::de::Error::missing_field("email"))?,
15130            email_verified: field_email_verified.ok_or_else(|| ::serde::de::Error::missing_field("email_verified"))?,
15131            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
15132            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
15133            membership_type: field_membership_type.ok_or_else(|| ::serde::de::Error::missing_field("membership_type"))?,
15134            external_id: field_external_id.and_then(Option::flatten),
15135            account_id: field_account_id.and_then(Option::flatten),
15136            secondary_emails: field_secondary_emails.and_then(Option::flatten),
15137            invited_on: field_invited_on.and_then(Option::flatten),
15138            joined_on: field_joined_on.and_then(Option::flatten),
15139            suspended_on: field_suspended_on.and_then(Option::flatten),
15140            persistent_id: field_persistent_id.and_then(Option::flatten),
15141            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
15142            profile_photo_url: field_profile_photo_url.and_then(Option::flatten),
15143        };
15144        Ok(Some(result))
15145    }
15146
15147    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15148        &self,
15149        s: &mut S::SerializeStruct,
15150    ) -> Result<(), S::Error> {
15151        use serde::ser::SerializeStruct;
15152        s.serialize_field("team_member_id", &self.team_member_id)?;
15153        s.serialize_field("email", &self.email)?;
15154        s.serialize_field("email_verified", &self.email_verified)?;
15155        s.serialize_field("status", &self.status)?;
15156        s.serialize_field("name", &self.name)?;
15157        s.serialize_field("membership_type", &self.membership_type)?;
15158        if let Some(val) = &self.external_id {
15159            s.serialize_field("external_id", val)?;
15160        }
15161        if let Some(val) = &self.account_id {
15162            s.serialize_field("account_id", val)?;
15163        }
15164        if let Some(val) = &self.secondary_emails {
15165            s.serialize_field("secondary_emails", val)?;
15166        }
15167        if let Some(val) = &self.invited_on {
15168            s.serialize_field("invited_on", val)?;
15169        }
15170        if let Some(val) = &self.joined_on {
15171            s.serialize_field("joined_on", val)?;
15172        }
15173        if let Some(val) = &self.suspended_on {
15174            s.serialize_field("suspended_on", val)?;
15175        }
15176        if let Some(val) = &self.persistent_id {
15177            s.serialize_field("persistent_id", val)?;
15178        }
15179        if let Some(val) = &self.is_directory_restricted {
15180            s.serialize_field("is_directory_restricted", val)?;
15181        }
15182        if let Some(val) = &self.profile_photo_url {
15183            s.serialize_field("profile_photo_url", val)?;
15184        }
15185        Ok(())
15186    }
15187}
15188
15189impl<'de> ::serde::de::Deserialize<'de> for MemberProfile {
15190    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15191        // struct deserializer
15192        use serde::de::{MapAccess, Visitor};
15193        struct StructVisitor;
15194        impl<'de> Visitor<'de> for StructVisitor {
15195            type Value = MemberProfile;
15196            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15197                f.write_str("a MemberProfile struct")
15198            }
15199            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15200                MemberProfile::internal_deserialize(map)
15201            }
15202        }
15203        deserializer.deserialize_struct("MemberProfile", MEMBER_PROFILE_FIELDS, StructVisitor)
15204    }
15205}
15206
15207impl ::serde::ser::Serialize for MemberProfile {
15208    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15209        // struct serializer
15210        use serde::ser::SerializeStruct;
15211        let mut s = serializer.serialize_struct("MemberProfile", 15)?;
15212        self.internal_serialize::<S>(&mut s)?;
15213        s.end()
15214    }
15215}
15216
15217#[derive(Debug, Clone, PartialEq, Eq)]
15218pub enum MemberSelectorError {
15219    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
15220    /// this team.
15221    UserNotFound,
15222    /// The user is not a member of the team.
15223    UserNotInTeam,
15224}
15225
15226impl<'de> ::serde::de::Deserialize<'de> for MemberSelectorError {
15227    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15228        // union deserializer
15229        use serde::de::{self, MapAccess, Visitor};
15230        struct EnumVisitor;
15231        impl<'de> Visitor<'de> for EnumVisitor {
15232            type Value = MemberSelectorError;
15233            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15234                f.write_str("a MemberSelectorError structure")
15235            }
15236            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15237                let tag: &str = match map.next_key()? {
15238                    Some(".tag") => map.next_value()?,
15239                    _ => return Err(de::Error::missing_field(".tag"))
15240                };
15241                let value = match tag {
15242                    "user_not_found" => MemberSelectorError::UserNotFound,
15243                    "user_not_in_team" => MemberSelectorError::UserNotInTeam,
15244                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15245                };
15246                crate::eat_json_fields(&mut map)?;
15247                Ok(value)
15248            }
15249        }
15250        const VARIANTS: &[&str] = &["user_not_found",
15251                                    "user_not_in_team"];
15252        deserializer.deserialize_struct("MemberSelectorError", VARIANTS, EnumVisitor)
15253    }
15254}
15255
15256impl ::serde::ser::Serialize for MemberSelectorError {
15257    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15258        // union serializer
15259        use serde::ser::SerializeStruct;
15260        match self {
15261            MemberSelectorError::UserNotFound => {
15262                // unit
15263                let mut s = serializer.serialize_struct("MemberSelectorError", 1)?;
15264                s.serialize_field(".tag", "user_not_found")?;
15265                s.end()
15266            }
15267            MemberSelectorError::UserNotInTeam => {
15268                // unit
15269                let mut s = serializer.serialize_struct("MemberSelectorError", 1)?;
15270                s.serialize_field(".tag", "user_not_in_team")?;
15271                s.end()
15272            }
15273        }
15274    }
15275}
15276
15277impl ::std::error::Error for MemberSelectorError {
15278}
15279
15280impl ::std::fmt::Display for MemberSelectorError {
15281    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15282        match self {
15283            MemberSelectorError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
15284            MemberSelectorError::UserNotInTeam => f.write_str("The user is not a member of the team."),
15285        }
15286    }
15287}
15288
15289// union extends UserSelectorError
15290impl From<UserSelectorError> for MemberSelectorError {
15291    fn from(parent: UserSelectorError) -> Self {
15292        match parent {
15293            UserSelectorError::UserNotFound => MemberSelectorError::UserNotFound,
15294        }
15295    }
15296}
15297#[derive(Debug, Clone, PartialEq, Eq)]
15298#[non_exhaustive] // structs may have more fields added in the future.
15299pub struct MembersAddArg {
15300    /// Details of new members to be added to the team.
15301    pub new_members: Vec<MemberAddArg>,
15302    /// Whether to force the add to happen asynchronously.
15303    pub force_async: bool,
15304}
15305
15306impl MembersAddArg {
15307    pub fn new(new_members: Vec<MemberAddArg>) -> Self {
15308        MembersAddArg {
15309            new_members,
15310            force_async: false,
15311        }
15312    }
15313
15314    pub fn with_force_async(mut self, value: bool) -> Self {
15315        self.force_async = value;
15316        self
15317    }
15318}
15319
15320const MEMBERS_ADD_ARG_FIELDS: &[&str] = &["new_members",
15321                                          "force_async"];
15322impl MembersAddArg {
15323    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15324        map: V,
15325    ) -> Result<MembersAddArg, V::Error> {
15326        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15327    }
15328
15329    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15330        mut map: V,
15331        optional: bool,
15332    ) -> Result<Option<MembersAddArg>, V::Error> {
15333        let mut field_new_members = None;
15334        let mut field_force_async = None;
15335        let mut nothing = true;
15336        while let Some(key) = map.next_key::<&str>()? {
15337            nothing = false;
15338            match key {
15339                "new_members" => {
15340                    if field_new_members.is_some() {
15341                        return Err(::serde::de::Error::duplicate_field("new_members"));
15342                    }
15343                    field_new_members = Some(map.next_value()?);
15344                }
15345                "force_async" => {
15346                    if field_force_async.is_some() {
15347                        return Err(::serde::de::Error::duplicate_field("force_async"));
15348                    }
15349                    field_force_async = Some(map.next_value()?);
15350                }
15351                _ => {
15352                    // unknown field allowed and ignored
15353                    map.next_value::<::serde_json::Value>()?;
15354                }
15355            }
15356        }
15357        if optional && nothing {
15358            return Ok(None);
15359        }
15360        let result = MembersAddArg {
15361            new_members: field_new_members.ok_or_else(|| ::serde::de::Error::missing_field("new_members"))?,
15362            force_async: field_force_async.unwrap_or(false),
15363        };
15364        Ok(Some(result))
15365    }
15366
15367    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15368        &self,
15369        s: &mut S::SerializeStruct,
15370    ) -> Result<(), S::Error> {
15371        use serde::ser::SerializeStruct;
15372        s.serialize_field("new_members", &self.new_members)?;
15373        if self.force_async {
15374            s.serialize_field("force_async", &self.force_async)?;
15375        }
15376        Ok(())
15377    }
15378}
15379
15380impl<'de> ::serde::de::Deserialize<'de> for MembersAddArg {
15381    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15382        // struct deserializer
15383        use serde::de::{MapAccess, Visitor};
15384        struct StructVisitor;
15385        impl<'de> Visitor<'de> for StructVisitor {
15386            type Value = MembersAddArg;
15387            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15388                f.write_str("a MembersAddArg struct")
15389            }
15390            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15391                MembersAddArg::internal_deserialize(map)
15392            }
15393        }
15394        deserializer.deserialize_struct("MembersAddArg", MEMBERS_ADD_ARG_FIELDS, StructVisitor)
15395    }
15396}
15397
15398impl ::serde::ser::Serialize for MembersAddArg {
15399    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15400        // struct serializer
15401        use serde::ser::SerializeStruct;
15402        let mut s = serializer.serialize_struct("MembersAddArg", 2)?;
15403        self.internal_serialize::<S>(&mut s)?;
15404        s.end()
15405    }
15406}
15407
15408// struct extends MembersAddArgBase
15409impl From<MembersAddArg> for MembersAddArgBase {
15410    fn from(subtype: MembersAddArg) -> Self {
15411        Self {
15412            force_async: subtype.force_async,
15413        }
15414    }
15415}
15416#[derive(Debug, Clone, PartialEq, Eq, Default)]
15417#[non_exhaustive] // structs may have more fields added in the future.
15418pub struct MembersAddArgBase {
15419    /// Whether to force the add to happen asynchronously.
15420    pub force_async: bool,
15421}
15422
15423impl MembersAddArgBase {
15424    pub fn with_force_async(mut self, value: bool) -> Self {
15425        self.force_async = value;
15426        self
15427    }
15428}
15429
15430const MEMBERS_ADD_ARG_BASE_FIELDS: &[&str] = &["force_async"];
15431impl MembersAddArgBase {
15432    // no _opt deserializer
15433    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15434        mut map: V,
15435    ) -> Result<MembersAddArgBase, V::Error> {
15436        let mut field_force_async = None;
15437        while let Some(key) = map.next_key::<&str>()? {
15438            match key {
15439                "force_async" => {
15440                    if field_force_async.is_some() {
15441                        return Err(::serde::de::Error::duplicate_field("force_async"));
15442                    }
15443                    field_force_async = Some(map.next_value()?);
15444                }
15445                _ => {
15446                    // unknown field allowed and ignored
15447                    map.next_value::<::serde_json::Value>()?;
15448                }
15449            }
15450        }
15451        let result = MembersAddArgBase {
15452            force_async: field_force_async.unwrap_or(false),
15453        };
15454        Ok(result)
15455    }
15456
15457    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15458        &self,
15459        s: &mut S::SerializeStruct,
15460    ) -> Result<(), S::Error> {
15461        use serde::ser::SerializeStruct;
15462        if self.force_async {
15463            s.serialize_field("force_async", &self.force_async)?;
15464        }
15465        Ok(())
15466    }
15467}
15468
15469impl<'de> ::serde::de::Deserialize<'de> for MembersAddArgBase {
15470    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15471        // struct deserializer
15472        use serde::de::{MapAccess, Visitor};
15473        struct StructVisitor;
15474        impl<'de> Visitor<'de> for StructVisitor {
15475            type Value = MembersAddArgBase;
15476            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15477                f.write_str("a MembersAddArgBase struct")
15478            }
15479            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15480                MembersAddArgBase::internal_deserialize(map)
15481            }
15482        }
15483        deserializer.deserialize_struct("MembersAddArgBase", MEMBERS_ADD_ARG_BASE_FIELDS, StructVisitor)
15484    }
15485}
15486
15487impl ::serde::ser::Serialize for MembersAddArgBase {
15488    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15489        // struct serializer
15490        use serde::ser::SerializeStruct;
15491        let mut s = serializer.serialize_struct("MembersAddArgBase", 1)?;
15492        self.internal_serialize::<S>(&mut s)?;
15493        s.end()
15494    }
15495}
15496
15497#[derive(Debug, Clone, PartialEq, Eq)]
15498pub enum MembersAddJobStatus {
15499    /// The asynchronous job is still in progress.
15500    InProgress,
15501    /// The asynchronous job has finished. For each member that was specified in the parameter
15502    /// [`MembersAddArg`] that was provided to [`members_add()`](crate::team::members_add), a
15503    /// corresponding item is returned in this list.
15504    Complete(Vec<MemberAddResult>),
15505    /// The asynchronous job returned an error. The string contains an error message.
15506    Failed(String),
15507}
15508
15509impl<'de> ::serde::de::Deserialize<'de> for MembersAddJobStatus {
15510    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15511        // union deserializer
15512        use serde::de::{self, MapAccess, Visitor};
15513        struct EnumVisitor;
15514        impl<'de> Visitor<'de> for EnumVisitor {
15515            type Value = MembersAddJobStatus;
15516            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15517                f.write_str("a MembersAddJobStatus structure")
15518            }
15519            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15520                let tag: &str = match map.next_key()? {
15521                    Some(".tag") => map.next_value()?,
15522                    _ => return Err(de::Error::missing_field(".tag"))
15523                };
15524                let value = match tag {
15525                    "in_progress" => MembersAddJobStatus::InProgress,
15526                    "complete" => {
15527                        match map.next_key()? {
15528                            Some("complete") => MembersAddJobStatus::Complete(map.next_value()?),
15529                            None => return Err(de::Error::missing_field("complete")),
15530                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15531                        }
15532                    }
15533                    "failed" => {
15534                        match map.next_key()? {
15535                            Some("failed") => MembersAddJobStatus::Failed(map.next_value()?),
15536                            None => return Err(de::Error::missing_field("failed")),
15537                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15538                        }
15539                    }
15540                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15541                };
15542                crate::eat_json_fields(&mut map)?;
15543                Ok(value)
15544            }
15545        }
15546        const VARIANTS: &[&str] = &["in_progress",
15547                                    "complete",
15548                                    "failed"];
15549        deserializer.deserialize_struct("MembersAddJobStatus", VARIANTS, EnumVisitor)
15550    }
15551}
15552
15553impl ::serde::ser::Serialize for MembersAddJobStatus {
15554    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15555        // union serializer
15556        use serde::ser::SerializeStruct;
15557        match self {
15558            MembersAddJobStatus::InProgress => {
15559                // unit
15560                let mut s = serializer.serialize_struct("MembersAddJobStatus", 1)?;
15561                s.serialize_field(".tag", "in_progress")?;
15562                s.end()
15563            }
15564            MembersAddJobStatus::Complete(x) => {
15565                // primitive
15566                let mut s = serializer.serialize_struct("MembersAddJobStatus", 2)?;
15567                s.serialize_field(".tag", "complete")?;
15568                s.serialize_field("complete", x)?;
15569                s.end()
15570            }
15571            MembersAddJobStatus::Failed(x) => {
15572                // primitive
15573                let mut s = serializer.serialize_struct("MembersAddJobStatus", 2)?;
15574                s.serialize_field(".tag", "failed")?;
15575                s.serialize_field("failed", x)?;
15576                s.end()
15577            }
15578        }
15579    }
15580}
15581
15582// union extends crate::types::dbx_async::PollResultBase
15583impl From<crate::types::dbx_async::PollResultBase> for MembersAddJobStatus {
15584    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
15585        match parent {
15586            crate::types::dbx_async::PollResultBase::InProgress => MembersAddJobStatus::InProgress,
15587        }
15588    }
15589}
15590#[derive(Debug, Clone, PartialEq, Eq)]
15591#[non_exhaustive] // variants may be added in the future
15592pub enum MembersAddJobStatusV2Result {
15593    /// The asynchronous job is still in progress.
15594    InProgress,
15595    /// The asynchronous job has finished. For each member that was specified in the parameter
15596    /// [`MembersAddArg`] that was provided to [`members_add_v2()`](crate::team::members_add_v2), a
15597    /// corresponding item is returned in this list.
15598    Complete(Vec<MemberAddV2Result>),
15599    /// The asynchronous job returned an error. The string contains an error message.
15600    Failed(String),
15601    /// Catch-all used for unrecognized values returned from the server. Encountering this value
15602    /// typically indicates that this SDK version is out of date.
15603    Other,
15604}
15605
15606impl<'de> ::serde::de::Deserialize<'de> for MembersAddJobStatusV2Result {
15607    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15608        // union deserializer
15609        use serde::de::{self, MapAccess, Visitor};
15610        struct EnumVisitor;
15611        impl<'de> Visitor<'de> for EnumVisitor {
15612            type Value = MembersAddJobStatusV2Result;
15613            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15614                f.write_str("a MembersAddJobStatusV2Result structure")
15615            }
15616            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15617                let tag: &str = match map.next_key()? {
15618                    Some(".tag") => map.next_value()?,
15619                    _ => return Err(de::Error::missing_field(".tag"))
15620                };
15621                let value = match tag {
15622                    "in_progress" => MembersAddJobStatusV2Result::InProgress,
15623                    "complete" => {
15624                        match map.next_key()? {
15625                            Some("complete") => MembersAddJobStatusV2Result::Complete(map.next_value()?),
15626                            None => return Err(de::Error::missing_field("complete")),
15627                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15628                        }
15629                    }
15630                    "failed" => {
15631                        match map.next_key()? {
15632                            Some("failed") => MembersAddJobStatusV2Result::Failed(map.next_value()?),
15633                            None => return Err(de::Error::missing_field("failed")),
15634                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15635                        }
15636                    }
15637                    _ => MembersAddJobStatusV2Result::Other,
15638                };
15639                crate::eat_json_fields(&mut map)?;
15640                Ok(value)
15641            }
15642        }
15643        const VARIANTS: &[&str] = &["in_progress",
15644                                    "complete",
15645                                    "failed",
15646                                    "other"];
15647        deserializer.deserialize_struct("MembersAddJobStatusV2Result", VARIANTS, EnumVisitor)
15648    }
15649}
15650
15651impl ::serde::ser::Serialize for MembersAddJobStatusV2Result {
15652    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15653        // union serializer
15654        use serde::ser::SerializeStruct;
15655        match self {
15656            MembersAddJobStatusV2Result::InProgress => {
15657                // unit
15658                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 1)?;
15659                s.serialize_field(".tag", "in_progress")?;
15660                s.end()
15661            }
15662            MembersAddJobStatusV2Result::Complete(x) => {
15663                // primitive
15664                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 2)?;
15665                s.serialize_field(".tag", "complete")?;
15666                s.serialize_field("complete", x)?;
15667                s.end()
15668            }
15669            MembersAddJobStatusV2Result::Failed(x) => {
15670                // primitive
15671                let mut s = serializer.serialize_struct("MembersAddJobStatusV2Result", 2)?;
15672                s.serialize_field(".tag", "failed")?;
15673                s.serialize_field("failed", x)?;
15674                s.end()
15675            }
15676            MembersAddJobStatusV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
15677        }
15678    }
15679}
15680
15681// union extends crate::types::dbx_async::PollResultBase
15682impl From<crate::types::dbx_async::PollResultBase> for MembersAddJobStatusV2Result {
15683    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
15684        match parent {
15685            crate::types::dbx_async::PollResultBase::InProgress => MembersAddJobStatusV2Result::InProgress,
15686        }
15687    }
15688}
15689#[derive(Debug, Clone, PartialEq, Eq)]
15690pub enum MembersAddLaunch {
15691    /// This response indicates that the processing is asynchronous. The string is an id that can be
15692    /// used to obtain the status of the asynchronous job.
15693    AsyncJobId(crate::types::dbx_async::AsyncJobId),
15694    Complete(Vec<MemberAddResult>),
15695}
15696
15697impl<'de> ::serde::de::Deserialize<'de> for MembersAddLaunch {
15698    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15699        // union deserializer
15700        use serde::de::{self, MapAccess, Visitor};
15701        struct EnumVisitor;
15702        impl<'de> Visitor<'de> for EnumVisitor {
15703            type Value = MembersAddLaunch;
15704            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15705                f.write_str("a MembersAddLaunch structure")
15706            }
15707            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15708                let tag: &str = match map.next_key()? {
15709                    Some(".tag") => map.next_value()?,
15710                    _ => return Err(de::Error::missing_field(".tag"))
15711                };
15712                let value = match tag {
15713                    "async_job_id" => {
15714                        match map.next_key()? {
15715                            Some("async_job_id") => MembersAddLaunch::AsyncJobId(map.next_value()?),
15716                            None => return Err(de::Error::missing_field("async_job_id")),
15717                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15718                        }
15719                    }
15720                    "complete" => {
15721                        match map.next_key()? {
15722                            Some("complete") => MembersAddLaunch::Complete(map.next_value()?),
15723                            None => return Err(de::Error::missing_field("complete")),
15724                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15725                        }
15726                    }
15727                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
15728                };
15729                crate::eat_json_fields(&mut map)?;
15730                Ok(value)
15731            }
15732        }
15733        const VARIANTS: &[&str] = &["async_job_id",
15734                                    "complete"];
15735        deserializer.deserialize_struct("MembersAddLaunch", VARIANTS, EnumVisitor)
15736    }
15737}
15738
15739impl ::serde::ser::Serialize for MembersAddLaunch {
15740    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15741        // union serializer
15742        use serde::ser::SerializeStruct;
15743        match self {
15744            MembersAddLaunch::AsyncJobId(x) => {
15745                // primitive
15746                let mut s = serializer.serialize_struct("MembersAddLaunch", 2)?;
15747                s.serialize_field(".tag", "async_job_id")?;
15748                s.serialize_field("async_job_id", x)?;
15749                s.end()
15750            }
15751            MembersAddLaunch::Complete(x) => {
15752                // primitive
15753                let mut s = serializer.serialize_struct("MembersAddLaunch", 2)?;
15754                s.serialize_field(".tag", "complete")?;
15755                s.serialize_field("complete", x)?;
15756                s.end()
15757            }
15758        }
15759    }
15760}
15761
15762// union extends crate::types::dbx_async::LaunchResultBase
15763impl From<crate::types::dbx_async::LaunchResultBase> for MembersAddLaunch {
15764    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
15765        match parent {
15766            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => MembersAddLaunch::AsyncJobId(x),
15767        }
15768    }
15769}
15770#[derive(Debug, Clone, PartialEq, Eq)]
15771#[non_exhaustive] // variants may be added in the future
15772pub enum MembersAddLaunchV2Result {
15773    /// This response indicates that the processing is asynchronous. The string is an id that can be
15774    /// used to obtain the status of the asynchronous job.
15775    AsyncJobId(crate::types::dbx_async::AsyncJobId),
15776    Complete(Vec<MemberAddV2Result>),
15777    /// Catch-all used for unrecognized values returned from the server. Encountering this value
15778    /// typically indicates that this SDK version is out of date.
15779    Other,
15780}
15781
15782impl<'de> ::serde::de::Deserialize<'de> for MembersAddLaunchV2Result {
15783    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15784        // union deserializer
15785        use serde::de::{self, MapAccess, Visitor};
15786        struct EnumVisitor;
15787        impl<'de> Visitor<'de> for EnumVisitor {
15788            type Value = MembersAddLaunchV2Result;
15789            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15790                f.write_str("a MembersAddLaunchV2Result structure")
15791            }
15792            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
15793                let tag: &str = match map.next_key()? {
15794                    Some(".tag") => map.next_value()?,
15795                    _ => return Err(de::Error::missing_field(".tag"))
15796                };
15797                let value = match tag {
15798                    "async_job_id" => {
15799                        match map.next_key()? {
15800                            Some("async_job_id") => MembersAddLaunchV2Result::AsyncJobId(map.next_value()?),
15801                            None => return Err(de::Error::missing_field("async_job_id")),
15802                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15803                        }
15804                    }
15805                    "complete" => {
15806                        match map.next_key()? {
15807                            Some("complete") => MembersAddLaunchV2Result::Complete(map.next_value()?),
15808                            None => return Err(de::Error::missing_field("complete")),
15809                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
15810                        }
15811                    }
15812                    _ => MembersAddLaunchV2Result::Other,
15813                };
15814                crate::eat_json_fields(&mut map)?;
15815                Ok(value)
15816            }
15817        }
15818        const VARIANTS: &[&str] = &["async_job_id",
15819                                    "complete",
15820                                    "other"];
15821        deserializer.deserialize_struct("MembersAddLaunchV2Result", VARIANTS, EnumVisitor)
15822    }
15823}
15824
15825impl ::serde::ser::Serialize for MembersAddLaunchV2Result {
15826    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15827        // union serializer
15828        use serde::ser::SerializeStruct;
15829        match self {
15830            MembersAddLaunchV2Result::AsyncJobId(x) => {
15831                // primitive
15832                let mut s = serializer.serialize_struct("MembersAddLaunchV2Result", 2)?;
15833                s.serialize_field(".tag", "async_job_id")?;
15834                s.serialize_field("async_job_id", x)?;
15835                s.end()
15836            }
15837            MembersAddLaunchV2Result::Complete(x) => {
15838                // primitive
15839                let mut s = serializer.serialize_struct("MembersAddLaunchV2Result", 2)?;
15840                s.serialize_field(".tag", "complete")?;
15841                s.serialize_field("complete", x)?;
15842                s.end()
15843            }
15844            MembersAddLaunchV2Result::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
15845        }
15846    }
15847}
15848
15849// union extends crate::types::dbx_async::LaunchResultBase
15850impl From<crate::types::dbx_async::LaunchResultBase> for MembersAddLaunchV2Result {
15851    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
15852        match parent {
15853            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => MembersAddLaunchV2Result::AsyncJobId(x),
15854        }
15855    }
15856}
15857#[derive(Debug, Clone, PartialEq, Eq)]
15858#[non_exhaustive] // structs may have more fields added in the future.
15859pub struct MembersAddV2Arg {
15860    /// Details of new members to be added to the team.
15861    pub new_members: Vec<MemberAddV2Arg>,
15862    /// Whether to force the add to happen asynchronously.
15863    pub force_async: bool,
15864}
15865
15866impl MembersAddV2Arg {
15867    pub fn new(new_members: Vec<MemberAddV2Arg>) -> Self {
15868        MembersAddV2Arg {
15869            new_members,
15870            force_async: false,
15871        }
15872    }
15873
15874    pub fn with_force_async(mut self, value: bool) -> Self {
15875        self.force_async = value;
15876        self
15877    }
15878}
15879
15880const MEMBERS_ADD_V2_ARG_FIELDS: &[&str] = &["new_members",
15881                                             "force_async"];
15882impl MembersAddV2Arg {
15883    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
15884        map: V,
15885    ) -> Result<MembersAddV2Arg, V::Error> {
15886        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
15887    }
15888
15889    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
15890        mut map: V,
15891        optional: bool,
15892    ) -> Result<Option<MembersAddV2Arg>, V::Error> {
15893        let mut field_new_members = None;
15894        let mut field_force_async = None;
15895        let mut nothing = true;
15896        while let Some(key) = map.next_key::<&str>()? {
15897            nothing = false;
15898            match key {
15899                "new_members" => {
15900                    if field_new_members.is_some() {
15901                        return Err(::serde::de::Error::duplicate_field("new_members"));
15902                    }
15903                    field_new_members = Some(map.next_value()?);
15904                }
15905                "force_async" => {
15906                    if field_force_async.is_some() {
15907                        return Err(::serde::de::Error::duplicate_field("force_async"));
15908                    }
15909                    field_force_async = Some(map.next_value()?);
15910                }
15911                _ => {
15912                    // unknown field allowed and ignored
15913                    map.next_value::<::serde_json::Value>()?;
15914                }
15915            }
15916        }
15917        if optional && nothing {
15918            return Ok(None);
15919        }
15920        let result = MembersAddV2Arg {
15921            new_members: field_new_members.ok_or_else(|| ::serde::de::Error::missing_field("new_members"))?,
15922            force_async: field_force_async.unwrap_or(false),
15923        };
15924        Ok(Some(result))
15925    }
15926
15927    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
15928        &self,
15929        s: &mut S::SerializeStruct,
15930    ) -> Result<(), S::Error> {
15931        use serde::ser::SerializeStruct;
15932        s.serialize_field("new_members", &self.new_members)?;
15933        if self.force_async {
15934            s.serialize_field("force_async", &self.force_async)?;
15935        }
15936        Ok(())
15937    }
15938}
15939
15940impl<'de> ::serde::de::Deserialize<'de> for MembersAddV2Arg {
15941    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
15942        // struct deserializer
15943        use serde::de::{MapAccess, Visitor};
15944        struct StructVisitor;
15945        impl<'de> Visitor<'de> for StructVisitor {
15946            type Value = MembersAddV2Arg;
15947            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
15948                f.write_str("a MembersAddV2Arg struct")
15949            }
15950            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
15951                MembersAddV2Arg::internal_deserialize(map)
15952            }
15953        }
15954        deserializer.deserialize_struct("MembersAddV2Arg", MEMBERS_ADD_V2_ARG_FIELDS, StructVisitor)
15955    }
15956}
15957
15958impl ::serde::ser::Serialize for MembersAddV2Arg {
15959    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
15960        // struct serializer
15961        use serde::ser::SerializeStruct;
15962        let mut s = serializer.serialize_struct("MembersAddV2Arg", 2)?;
15963        self.internal_serialize::<S>(&mut s)?;
15964        s.end()
15965    }
15966}
15967
15968// struct extends MembersAddArgBase
15969impl From<MembersAddV2Arg> for MembersAddArgBase {
15970    fn from(subtype: MembersAddV2Arg) -> Self {
15971        Self {
15972            force_async: subtype.force_async,
15973        }
15974    }
15975}
15976#[derive(Debug, Clone, PartialEq, Eq)]
15977#[non_exhaustive] // structs may have more fields added in the future.
15978pub struct MembersDataTransferArg {
15979    /// Identity of user to remove/suspend/have their files moved.
15980    pub user: UserSelectorArg,
15981    /// Files from the deleted member account will be transferred to this user.
15982    pub transfer_dest_id: UserSelectorArg,
15983    /// Errors during the transfer process will be sent via email to this user.
15984    pub transfer_admin_id: UserSelectorArg,
15985}
15986
15987impl MembersDataTransferArg {
15988    pub fn new(
15989        user: UserSelectorArg,
15990        transfer_dest_id: UserSelectorArg,
15991        transfer_admin_id: UserSelectorArg,
15992    ) -> Self {
15993        MembersDataTransferArg {
15994            user,
15995            transfer_dest_id,
15996            transfer_admin_id,
15997        }
15998    }
15999}
16000
16001const MEMBERS_DATA_TRANSFER_ARG_FIELDS: &[&str] = &["user",
16002                                                    "transfer_dest_id",
16003                                                    "transfer_admin_id"];
16004impl MembersDataTransferArg {
16005    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16006        map: V,
16007    ) -> Result<MembersDataTransferArg, V::Error> {
16008        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16009    }
16010
16011    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16012        mut map: V,
16013        optional: bool,
16014    ) -> Result<Option<MembersDataTransferArg>, V::Error> {
16015        let mut field_user = None;
16016        let mut field_transfer_dest_id = None;
16017        let mut field_transfer_admin_id = None;
16018        let mut nothing = true;
16019        while let Some(key) = map.next_key::<&str>()? {
16020            nothing = false;
16021            match key {
16022                "user" => {
16023                    if field_user.is_some() {
16024                        return Err(::serde::de::Error::duplicate_field("user"));
16025                    }
16026                    field_user = Some(map.next_value()?);
16027                }
16028                "transfer_dest_id" => {
16029                    if field_transfer_dest_id.is_some() {
16030                        return Err(::serde::de::Error::duplicate_field("transfer_dest_id"));
16031                    }
16032                    field_transfer_dest_id = Some(map.next_value()?);
16033                }
16034                "transfer_admin_id" => {
16035                    if field_transfer_admin_id.is_some() {
16036                        return Err(::serde::de::Error::duplicate_field("transfer_admin_id"));
16037                    }
16038                    field_transfer_admin_id = Some(map.next_value()?);
16039                }
16040                _ => {
16041                    // unknown field allowed and ignored
16042                    map.next_value::<::serde_json::Value>()?;
16043                }
16044            }
16045        }
16046        if optional && nothing {
16047            return Ok(None);
16048        }
16049        let result = MembersDataTransferArg {
16050            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16051            transfer_dest_id: field_transfer_dest_id.ok_or_else(|| ::serde::de::Error::missing_field("transfer_dest_id"))?,
16052            transfer_admin_id: field_transfer_admin_id.ok_or_else(|| ::serde::de::Error::missing_field("transfer_admin_id"))?,
16053        };
16054        Ok(Some(result))
16055    }
16056
16057    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16058        &self,
16059        s: &mut S::SerializeStruct,
16060    ) -> Result<(), S::Error> {
16061        use serde::ser::SerializeStruct;
16062        s.serialize_field("user", &self.user)?;
16063        s.serialize_field("transfer_dest_id", &self.transfer_dest_id)?;
16064        s.serialize_field("transfer_admin_id", &self.transfer_admin_id)?;
16065        Ok(())
16066    }
16067}
16068
16069impl<'de> ::serde::de::Deserialize<'de> for MembersDataTransferArg {
16070    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16071        // struct deserializer
16072        use serde::de::{MapAccess, Visitor};
16073        struct StructVisitor;
16074        impl<'de> Visitor<'de> for StructVisitor {
16075            type Value = MembersDataTransferArg;
16076            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16077                f.write_str("a MembersDataTransferArg struct")
16078            }
16079            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16080                MembersDataTransferArg::internal_deserialize(map)
16081            }
16082        }
16083        deserializer.deserialize_struct("MembersDataTransferArg", MEMBERS_DATA_TRANSFER_ARG_FIELDS, StructVisitor)
16084    }
16085}
16086
16087impl ::serde::ser::Serialize for MembersDataTransferArg {
16088    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16089        // struct serializer
16090        use serde::ser::SerializeStruct;
16091        let mut s = serializer.serialize_struct("MembersDataTransferArg", 3)?;
16092        self.internal_serialize::<S>(&mut s)?;
16093        s.end()
16094    }
16095}
16096
16097// struct extends MembersDeactivateBaseArg
16098impl From<MembersDataTransferArg> for MembersDeactivateBaseArg {
16099    fn from(subtype: MembersDataTransferArg) -> Self {
16100        Self {
16101            user: subtype.user,
16102        }
16103    }
16104}
16105#[derive(Debug, Clone, PartialEq, Eq)]
16106#[non_exhaustive] // structs may have more fields added in the future.
16107pub struct MembersDeactivateArg {
16108    /// Identity of user to remove/suspend/have their files moved.
16109    pub user: UserSelectorArg,
16110    /// If provided, controls if the user's data will be deleted on their linked devices.
16111    pub wipe_data: bool,
16112}
16113
16114impl MembersDeactivateArg {
16115    pub fn new(user: UserSelectorArg) -> Self {
16116        MembersDeactivateArg {
16117            user,
16118            wipe_data: true,
16119        }
16120    }
16121
16122    pub fn with_wipe_data(mut self, value: bool) -> Self {
16123        self.wipe_data = value;
16124        self
16125    }
16126}
16127
16128const MEMBERS_DEACTIVATE_ARG_FIELDS: &[&str] = &["user",
16129                                                 "wipe_data"];
16130impl MembersDeactivateArg {
16131    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16132        map: V,
16133    ) -> Result<MembersDeactivateArg, V::Error> {
16134        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16135    }
16136
16137    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16138        mut map: V,
16139        optional: bool,
16140    ) -> Result<Option<MembersDeactivateArg>, V::Error> {
16141        let mut field_user = None;
16142        let mut field_wipe_data = None;
16143        let mut nothing = true;
16144        while let Some(key) = map.next_key::<&str>()? {
16145            nothing = false;
16146            match key {
16147                "user" => {
16148                    if field_user.is_some() {
16149                        return Err(::serde::de::Error::duplicate_field("user"));
16150                    }
16151                    field_user = Some(map.next_value()?);
16152                }
16153                "wipe_data" => {
16154                    if field_wipe_data.is_some() {
16155                        return Err(::serde::de::Error::duplicate_field("wipe_data"));
16156                    }
16157                    field_wipe_data = Some(map.next_value()?);
16158                }
16159                _ => {
16160                    // unknown field allowed and ignored
16161                    map.next_value::<::serde_json::Value>()?;
16162                }
16163            }
16164        }
16165        if optional && nothing {
16166            return Ok(None);
16167        }
16168        let result = MembersDeactivateArg {
16169            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16170            wipe_data: field_wipe_data.unwrap_or(true),
16171        };
16172        Ok(Some(result))
16173    }
16174
16175    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16176        &self,
16177        s: &mut S::SerializeStruct,
16178    ) -> Result<(), S::Error> {
16179        use serde::ser::SerializeStruct;
16180        s.serialize_field("user", &self.user)?;
16181        if !self.wipe_data {
16182            s.serialize_field("wipe_data", &self.wipe_data)?;
16183        }
16184        Ok(())
16185    }
16186}
16187
16188impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateArg {
16189    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16190        // struct deserializer
16191        use serde::de::{MapAccess, Visitor};
16192        struct StructVisitor;
16193        impl<'de> Visitor<'de> for StructVisitor {
16194            type Value = MembersDeactivateArg;
16195            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16196                f.write_str("a MembersDeactivateArg struct")
16197            }
16198            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16199                MembersDeactivateArg::internal_deserialize(map)
16200            }
16201        }
16202        deserializer.deserialize_struct("MembersDeactivateArg", MEMBERS_DEACTIVATE_ARG_FIELDS, StructVisitor)
16203    }
16204}
16205
16206impl ::serde::ser::Serialize for MembersDeactivateArg {
16207    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16208        // struct serializer
16209        use serde::ser::SerializeStruct;
16210        let mut s = serializer.serialize_struct("MembersDeactivateArg", 2)?;
16211        self.internal_serialize::<S>(&mut s)?;
16212        s.end()
16213    }
16214}
16215
16216// struct extends MembersDeactivateBaseArg
16217impl From<MembersDeactivateArg> for MembersDeactivateBaseArg {
16218    fn from(subtype: MembersDeactivateArg) -> Self {
16219        Self {
16220            user: subtype.user,
16221        }
16222    }
16223}
16224/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
16225/// account.
16226#[derive(Debug, Clone, PartialEq, Eq)]
16227#[non_exhaustive] // structs may have more fields added in the future.
16228pub struct MembersDeactivateBaseArg {
16229    /// Identity of user to remove/suspend/have their files moved.
16230    pub user: UserSelectorArg,
16231}
16232
16233impl MembersDeactivateBaseArg {
16234    pub fn new(user: UserSelectorArg) -> Self {
16235        MembersDeactivateBaseArg {
16236            user,
16237        }
16238    }
16239}
16240
16241const MEMBERS_DEACTIVATE_BASE_ARG_FIELDS: &[&str] = &["user"];
16242impl MembersDeactivateBaseArg {
16243    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16244        map: V,
16245    ) -> Result<MembersDeactivateBaseArg, V::Error> {
16246        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16247    }
16248
16249    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16250        mut map: V,
16251        optional: bool,
16252    ) -> Result<Option<MembersDeactivateBaseArg>, V::Error> {
16253        let mut field_user = None;
16254        let mut nothing = true;
16255        while let Some(key) = map.next_key::<&str>()? {
16256            nothing = false;
16257            match key {
16258                "user" => {
16259                    if field_user.is_some() {
16260                        return Err(::serde::de::Error::duplicate_field("user"));
16261                    }
16262                    field_user = Some(map.next_value()?);
16263                }
16264                _ => {
16265                    // unknown field allowed and ignored
16266                    map.next_value::<::serde_json::Value>()?;
16267                }
16268            }
16269        }
16270        if optional && nothing {
16271            return Ok(None);
16272        }
16273        let result = MembersDeactivateBaseArg {
16274            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16275        };
16276        Ok(Some(result))
16277    }
16278
16279    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16280        &self,
16281        s: &mut S::SerializeStruct,
16282    ) -> Result<(), S::Error> {
16283        use serde::ser::SerializeStruct;
16284        s.serialize_field("user", &self.user)?;
16285        Ok(())
16286    }
16287}
16288
16289impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateBaseArg {
16290    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16291        // struct deserializer
16292        use serde::de::{MapAccess, Visitor};
16293        struct StructVisitor;
16294        impl<'de> Visitor<'de> for StructVisitor {
16295            type Value = MembersDeactivateBaseArg;
16296            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16297                f.write_str("a MembersDeactivateBaseArg struct")
16298            }
16299            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16300                MembersDeactivateBaseArg::internal_deserialize(map)
16301            }
16302        }
16303        deserializer.deserialize_struct("MembersDeactivateBaseArg", MEMBERS_DEACTIVATE_BASE_ARG_FIELDS, StructVisitor)
16304    }
16305}
16306
16307impl ::serde::ser::Serialize for MembersDeactivateBaseArg {
16308    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16309        // struct serializer
16310        use serde::ser::SerializeStruct;
16311        let mut s = serializer.serialize_struct("MembersDeactivateBaseArg", 1)?;
16312        self.internal_serialize::<S>(&mut s)?;
16313        s.end()
16314    }
16315}
16316
16317#[derive(Debug, Clone, PartialEq, Eq)]
16318#[non_exhaustive] // variants may be added in the future
16319pub enum MembersDeactivateError {
16320    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16321    /// this team.
16322    UserNotFound,
16323    /// The user is not a member of the team.
16324    UserNotInTeam,
16325    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16326    /// typically indicates that this SDK version is out of date.
16327    Other,
16328}
16329
16330impl<'de> ::serde::de::Deserialize<'de> for MembersDeactivateError {
16331    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16332        // union deserializer
16333        use serde::de::{self, MapAccess, Visitor};
16334        struct EnumVisitor;
16335        impl<'de> Visitor<'de> for EnumVisitor {
16336            type Value = MembersDeactivateError;
16337            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16338                f.write_str("a MembersDeactivateError structure")
16339            }
16340            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16341                let tag: &str = match map.next_key()? {
16342                    Some(".tag") => map.next_value()?,
16343                    _ => return Err(de::Error::missing_field(".tag"))
16344                };
16345                let value = match tag {
16346                    "user_not_found" => MembersDeactivateError::UserNotFound,
16347                    "user_not_in_team" => MembersDeactivateError::UserNotInTeam,
16348                    _ => MembersDeactivateError::Other,
16349                };
16350                crate::eat_json_fields(&mut map)?;
16351                Ok(value)
16352            }
16353        }
16354        const VARIANTS: &[&str] = &["user_not_found",
16355                                    "user_not_in_team",
16356                                    "other"];
16357        deserializer.deserialize_struct("MembersDeactivateError", VARIANTS, EnumVisitor)
16358    }
16359}
16360
16361impl ::serde::ser::Serialize for MembersDeactivateError {
16362    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16363        // union serializer
16364        use serde::ser::SerializeStruct;
16365        match self {
16366            MembersDeactivateError::UserNotFound => {
16367                // unit
16368                let mut s = serializer.serialize_struct("MembersDeactivateError", 1)?;
16369                s.serialize_field(".tag", "user_not_found")?;
16370                s.end()
16371            }
16372            MembersDeactivateError::UserNotInTeam => {
16373                // unit
16374                let mut s = serializer.serialize_struct("MembersDeactivateError", 1)?;
16375                s.serialize_field(".tag", "user_not_in_team")?;
16376                s.end()
16377            }
16378            MembersDeactivateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16379        }
16380    }
16381}
16382
16383impl ::std::error::Error for MembersDeactivateError {
16384}
16385
16386impl ::std::fmt::Display for MembersDeactivateError {
16387    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16388        match self {
16389            MembersDeactivateError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16390            MembersDeactivateError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16391            _ => write!(f, "{:?}", *self),
16392        }
16393    }
16394}
16395
16396// union extends UserSelectorError
16397impl From<UserSelectorError> for MembersDeactivateError {
16398    fn from(parent: UserSelectorError) -> Self {
16399        match parent {
16400            UserSelectorError::UserNotFound => MembersDeactivateError::UserNotFound,
16401        }
16402    }
16403}
16404#[derive(Debug, Clone, PartialEq, Eq)]
16405#[non_exhaustive] // variants may be added in the future
16406pub enum MembersDeleteFormerMemberFilesError {
16407    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16408    /// this team.
16409    UserNotFound,
16410    /// The user is not a member of the team.
16411    UserNotInTeam,
16412    /// Cannot permanently delete files while it's being transferred.
16413    TransferInProgress,
16414    /// Cannot permanently delete files that have already been transferred.
16415    AlreadyTransferred,
16416    /// Cannot permanently delete files that have already been transferred or deleted.
16417    AlreadyTransferredOrDeleted,
16418    /// User has not been removed from the team.
16419    UserNotRemoved,
16420    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16421    /// typically indicates that this SDK version is out of date.
16422    Other,
16423}
16424
16425impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteFormerMemberFilesError {
16426    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16427        // union deserializer
16428        use serde::de::{self, MapAccess, Visitor};
16429        struct EnumVisitor;
16430        impl<'de> Visitor<'de> for EnumVisitor {
16431            type Value = MembersDeleteFormerMemberFilesError;
16432            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16433                f.write_str("a MembersDeleteFormerMemberFilesError structure")
16434            }
16435            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16436                let tag: &str = match map.next_key()? {
16437                    Some(".tag") => map.next_value()?,
16438                    _ => return Err(de::Error::missing_field(".tag"))
16439                };
16440                let value = match tag {
16441                    "user_not_found" => MembersDeleteFormerMemberFilesError::UserNotFound,
16442                    "user_not_in_team" => MembersDeleteFormerMemberFilesError::UserNotInTeam,
16443                    "transfer_in_progress" => MembersDeleteFormerMemberFilesError::TransferInProgress,
16444                    "already_transferred" => MembersDeleteFormerMemberFilesError::AlreadyTransferred,
16445                    "already_transferred_or_deleted" => MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted,
16446                    "user_not_removed" => MembersDeleteFormerMemberFilesError::UserNotRemoved,
16447                    _ => MembersDeleteFormerMemberFilesError::Other,
16448                };
16449                crate::eat_json_fields(&mut map)?;
16450                Ok(value)
16451            }
16452        }
16453        const VARIANTS: &[&str] = &["user_not_found",
16454                                    "user_not_in_team",
16455                                    "other",
16456                                    "transfer_in_progress",
16457                                    "already_transferred",
16458                                    "already_transferred_or_deleted",
16459                                    "user_not_removed"];
16460        deserializer.deserialize_struct("MembersDeleteFormerMemberFilesError", VARIANTS, EnumVisitor)
16461    }
16462}
16463
16464impl ::serde::ser::Serialize for MembersDeleteFormerMemberFilesError {
16465    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16466        // union serializer
16467        use serde::ser::SerializeStruct;
16468        match self {
16469            MembersDeleteFormerMemberFilesError::UserNotFound => {
16470                // unit
16471                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16472                s.serialize_field(".tag", "user_not_found")?;
16473                s.end()
16474            }
16475            MembersDeleteFormerMemberFilesError::UserNotInTeam => {
16476                // unit
16477                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16478                s.serialize_field(".tag", "user_not_in_team")?;
16479                s.end()
16480            }
16481            MembersDeleteFormerMemberFilesError::TransferInProgress => {
16482                // unit
16483                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16484                s.serialize_field(".tag", "transfer_in_progress")?;
16485                s.end()
16486            }
16487            MembersDeleteFormerMemberFilesError::AlreadyTransferred => {
16488                // unit
16489                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16490                s.serialize_field(".tag", "already_transferred")?;
16491                s.end()
16492            }
16493            MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted => {
16494                // unit
16495                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16496                s.serialize_field(".tag", "already_transferred_or_deleted")?;
16497                s.end()
16498            }
16499            MembersDeleteFormerMemberFilesError::UserNotRemoved => {
16500                // unit
16501                let mut s = serializer.serialize_struct("MembersDeleteFormerMemberFilesError", 1)?;
16502                s.serialize_field(".tag", "user_not_removed")?;
16503                s.end()
16504            }
16505            MembersDeleteFormerMemberFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16506        }
16507    }
16508}
16509
16510impl ::std::error::Error for MembersDeleteFormerMemberFilesError {
16511}
16512
16513impl ::std::fmt::Display for MembersDeleteFormerMemberFilesError {
16514    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16515        match self {
16516            MembersDeleteFormerMemberFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16517            MembersDeleteFormerMemberFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16518            MembersDeleteFormerMemberFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
16519            MembersDeleteFormerMemberFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
16520            MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
16521            MembersDeleteFormerMemberFilesError::UserNotRemoved => f.write_str("User has not been removed from the team."),
16522            _ => write!(f, "{:?}", *self),
16523        }
16524    }
16525}
16526
16527// union extends MembersPermanentlyDeleteFilesError
16528impl From<MembersPermanentlyDeleteFilesError> for MembersDeleteFormerMemberFilesError {
16529    fn from(parent: MembersPermanentlyDeleteFilesError) -> Self {
16530        match parent {
16531            MembersPermanentlyDeleteFilesError::UserNotFound => MembersDeleteFormerMemberFilesError::UserNotFound,
16532            MembersPermanentlyDeleteFilesError::UserNotInTeam => MembersDeleteFormerMemberFilesError::UserNotInTeam,
16533            MembersPermanentlyDeleteFilesError::Other => MembersDeleteFormerMemberFilesError::Other,
16534            MembersPermanentlyDeleteFilesError::TransferInProgress => MembersDeleteFormerMemberFilesError::TransferInProgress,
16535            MembersPermanentlyDeleteFilesError::AlreadyTransferred => MembersDeleteFormerMemberFilesError::AlreadyTransferred,
16536            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => MembersDeleteFormerMemberFilesError::AlreadyTransferredOrDeleted,
16537        }
16538    }
16539}
16540#[derive(Debug, Clone, PartialEq, Eq)]
16541#[non_exhaustive] // structs may have more fields added in the future.
16542pub struct MembersDeleteProfilePhotoArg {
16543    /// Identity of the user whose profile photo will be deleted.
16544    pub user: UserSelectorArg,
16545}
16546
16547impl MembersDeleteProfilePhotoArg {
16548    pub fn new(user: UserSelectorArg) -> Self {
16549        MembersDeleteProfilePhotoArg {
16550            user,
16551        }
16552    }
16553}
16554
16555const MEMBERS_DELETE_PROFILE_PHOTO_ARG_FIELDS: &[&str] = &["user"];
16556impl MembersDeleteProfilePhotoArg {
16557    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16558        map: V,
16559    ) -> Result<MembersDeleteProfilePhotoArg, V::Error> {
16560        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16561    }
16562
16563    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16564        mut map: V,
16565        optional: bool,
16566    ) -> Result<Option<MembersDeleteProfilePhotoArg>, V::Error> {
16567        let mut field_user = None;
16568        let mut nothing = true;
16569        while let Some(key) = map.next_key::<&str>()? {
16570            nothing = false;
16571            match key {
16572                "user" => {
16573                    if field_user.is_some() {
16574                        return Err(::serde::de::Error::duplicate_field("user"));
16575                    }
16576                    field_user = Some(map.next_value()?);
16577                }
16578                _ => {
16579                    // unknown field allowed and ignored
16580                    map.next_value::<::serde_json::Value>()?;
16581                }
16582            }
16583        }
16584        if optional && nothing {
16585            return Ok(None);
16586        }
16587        let result = MembersDeleteProfilePhotoArg {
16588            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16589        };
16590        Ok(Some(result))
16591    }
16592
16593    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16594        &self,
16595        s: &mut S::SerializeStruct,
16596    ) -> Result<(), S::Error> {
16597        use serde::ser::SerializeStruct;
16598        s.serialize_field("user", &self.user)?;
16599        Ok(())
16600    }
16601}
16602
16603impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteProfilePhotoArg {
16604    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16605        // struct deserializer
16606        use serde::de::{MapAccess, Visitor};
16607        struct StructVisitor;
16608        impl<'de> Visitor<'de> for StructVisitor {
16609            type Value = MembersDeleteProfilePhotoArg;
16610            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16611                f.write_str("a MembersDeleteProfilePhotoArg struct")
16612            }
16613            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16614                MembersDeleteProfilePhotoArg::internal_deserialize(map)
16615            }
16616        }
16617        deserializer.deserialize_struct("MembersDeleteProfilePhotoArg", MEMBERS_DELETE_PROFILE_PHOTO_ARG_FIELDS, StructVisitor)
16618    }
16619}
16620
16621impl ::serde::ser::Serialize for MembersDeleteProfilePhotoArg {
16622    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16623        // struct serializer
16624        use serde::ser::SerializeStruct;
16625        let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoArg", 1)?;
16626        self.internal_serialize::<S>(&mut s)?;
16627        s.end()
16628    }
16629}
16630
16631#[derive(Debug, Clone, PartialEq, Eq)]
16632#[non_exhaustive] // variants may be added in the future
16633pub enum MembersDeleteProfilePhotoError {
16634    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
16635    /// this team.
16636    UserNotFound,
16637    /// The user is not a member of the team.
16638    UserNotInTeam,
16639    /// Modifying deleted users is not allowed.
16640    SetProfileDisallowed,
16641    /// Catch-all used for unrecognized values returned from the server. Encountering this value
16642    /// typically indicates that this SDK version is out of date.
16643    Other,
16644}
16645
16646impl<'de> ::serde::de::Deserialize<'de> for MembersDeleteProfilePhotoError {
16647    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16648        // union deserializer
16649        use serde::de::{self, MapAccess, Visitor};
16650        struct EnumVisitor;
16651        impl<'de> Visitor<'de> for EnumVisitor {
16652            type Value = MembersDeleteProfilePhotoError;
16653            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16654                f.write_str("a MembersDeleteProfilePhotoError structure")
16655            }
16656            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
16657                let tag: &str = match map.next_key()? {
16658                    Some(".tag") => map.next_value()?,
16659                    _ => return Err(de::Error::missing_field(".tag"))
16660                };
16661                let value = match tag {
16662                    "user_not_found" => MembersDeleteProfilePhotoError::UserNotFound,
16663                    "user_not_in_team" => MembersDeleteProfilePhotoError::UserNotInTeam,
16664                    "set_profile_disallowed" => MembersDeleteProfilePhotoError::SetProfileDisallowed,
16665                    _ => MembersDeleteProfilePhotoError::Other,
16666                };
16667                crate::eat_json_fields(&mut map)?;
16668                Ok(value)
16669            }
16670        }
16671        const VARIANTS: &[&str] = &["user_not_found",
16672                                    "user_not_in_team",
16673                                    "set_profile_disallowed",
16674                                    "other"];
16675        deserializer.deserialize_struct("MembersDeleteProfilePhotoError", VARIANTS, EnumVisitor)
16676    }
16677}
16678
16679impl ::serde::ser::Serialize for MembersDeleteProfilePhotoError {
16680    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16681        // union serializer
16682        use serde::ser::SerializeStruct;
16683        match self {
16684            MembersDeleteProfilePhotoError::UserNotFound => {
16685                // unit
16686                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16687                s.serialize_field(".tag", "user_not_found")?;
16688                s.end()
16689            }
16690            MembersDeleteProfilePhotoError::UserNotInTeam => {
16691                // unit
16692                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16693                s.serialize_field(".tag", "user_not_in_team")?;
16694                s.end()
16695            }
16696            MembersDeleteProfilePhotoError::SetProfileDisallowed => {
16697                // unit
16698                let mut s = serializer.serialize_struct("MembersDeleteProfilePhotoError", 1)?;
16699                s.serialize_field(".tag", "set_profile_disallowed")?;
16700                s.end()
16701            }
16702            MembersDeleteProfilePhotoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
16703        }
16704    }
16705}
16706
16707impl ::std::error::Error for MembersDeleteProfilePhotoError {
16708}
16709
16710impl ::std::fmt::Display for MembersDeleteProfilePhotoError {
16711    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16712        match self {
16713            MembersDeleteProfilePhotoError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
16714            MembersDeleteProfilePhotoError::UserNotInTeam => f.write_str("The user is not a member of the team."),
16715            MembersDeleteProfilePhotoError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
16716            _ => write!(f, "{:?}", *self),
16717        }
16718    }
16719}
16720
16721// union extends MemberSelectorError
16722impl From<MemberSelectorError> for MembersDeleteProfilePhotoError {
16723    fn from(parent: MemberSelectorError) -> Self {
16724        match parent {
16725            MemberSelectorError::UserNotFound => MembersDeleteProfilePhotoError::UserNotFound,
16726            MemberSelectorError::UserNotInTeam => MembersDeleteProfilePhotoError::UserNotInTeam,
16727        }
16728    }
16729}
16730/// Exactly one of team_member_id, email, or external_id must be provided to identify a former team
16731/// member.
16732#[derive(Debug, Clone, PartialEq, Eq)]
16733#[non_exhaustive] // structs may have more fields added in the future.
16734pub struct MembersFormerMemberArg {
16735    /// Identity of user whose files will be permanently deleted.
16736    pub user: UserSelectorArg,
16737}
16738
16739impl MembersFormerMemberArg {
16740    pub fn new(user: UserSelectorArg) -> Self {
16741        MembersFormerMemberArg {
16742            user,
16743        }
16744    }
16745}
16746
16747const MEMBERS_FORMER_MEMBER_ARG_FIELDS: &[&str] = &["user"];
16748impl MembersFormerMemberArg {
16749    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16750        map: V,
16751    ) -> Result<MembersFormerMemberArg, V::Error> {
16752        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16753    }
16754
16755    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16756        mut map: V,
16757        optional: bool,
16758    ) -> Result<Option<MembersFormerMemberArg>, V::Error> {
16759        let mut field_user = None;
16760        let mut nothing = true;
16761        while let Some(key) = map.next_key::<&str>()? {
16762            nothing = false;
16763            match key {
16764                "user" => {
16765                    if field_user.is_some() {
16766                        return Err(::serde::de::Error::duplicate_field("user"));
16767                    }
16768                    field_user = Some(map.next_value()?);
16769                }
16770                _ => {
16771                    // unknown field allowed and ignored
16772                    map.next_value::<::serde_json::Value>()?;
16773                }
16774            }
16775        }
16776        if optional && nothing {
16777            return Ok(None);
16778        }
16779        let result = MembersFormerMemberArg {
16780            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
16781        };
16782        Ok(Some(result))
16783    }
16784
16785    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16786        &self,
16787        s: &mut S::SerializeStruct,
16788    ) -> Result<(), S::Error> {
16789        use serde::ser::SerializeStruct;
16790        s.serialize_field("user", &self.user)?;
16791        Ok(())
16792    }
16793}
16794
16795impl<'de> ::serde::de::Deserialize<'de> for MembersFormerMemberArg {
16796    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16797        // struct deserializer
16798        use serde::de::{MapAccess, Visitor};
16799        struct StructVisitor;
16800        impl<'de> Visitor<'de> for StructVisitor {
16801            type Value = MembersFormerMemberArg;
16802            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16803                f.write_str("a MembersFormerMemberArg struct")
16804            }
16805            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16806                MembersFormerMemberArg::internal_deserialize(map)
16807            }
16808        }
16809        deserializer.deserialize_struct("MembersFormerMemberArg", MEMBERS_FORMER_MEMBER_ARG_FIELDS, StructVisitor)
16810    }
16811}
16812
16813impl ::serde::ser::Serialize for MembersFormerMemberArg {
16814    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16815        // struct serializer
16816        use serde::ser::SerializeStruct;
16817        let mut s = serializer.serialize_struct("MembersFormerMemberArg", 1)?;
16818        self.internal_serialize::<S>(&mut s)?;
16819        s.end()
16820    }
16821}
16822
16823/// Available TeamMemberRole for the connected team. To be used with
16824/// [`members_set_admin_permissions_v2()`](crate::team::members_set_admin_permissions_v2).
16825#[derive(Debug, Clone, PartialEq, Eq)]
16826#[non_exhaustive] // structs may have more fields added in the future.
16827pub struct MembersGetAvailableTeamMemberRolesResult {
16828    /// Available roles.
16829    pub roles: Vec<TeamMemberRole>,
16830}
16831
16832impl MembersGetAvailableTeamMemberRolesResult {
16833    pub fn new(roles: Vec<TeamMemberRole>) -> Self {
16834        MembersGetAvailableTeamMemberRolesResult {
16835            roles,
16836        }
16837    }
16838}
16839
16840const MEMBERS_GET_AVAILABLE_TEAM_MEMBER_ROLES_RESULT_FIELDS: &[&str] = &["roles"];
16841impl MembersGetAvailableTeamMemberRolesResult {
16842    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16843        map: V,
16844    ) -> Result<MembersGetAvailableTeamMemberRolesResult, V::Error> {
16845        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16846    }
16847
16848    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16849        mut map: V,
16850        optional: bool,
16851    ) -> Result<Option<MembersGetAvailableTeamMemberRolesResult>, V::Error> {
16852        let mut field_roles = None;
16853        let mut nothing = true;
16854        while let Some(key) = map.next_key::<&str>()? {
16855            nothing = false;
16856            match key {
16857                "roles" => {
16858                    if field_roles.is_some() {
16859                        return Err(::serde::de::Error::duplicate_field("roles"));
16860                    }
16861                    field_roles = Some(map.next_value()?);
16862                }
16863                _ => {
16864                    // unknown field allowed and ignored
16865                    map.next_value::<::serde_json::Value>()?;
16866                }
16867            }
16868        }
16869        if optional && nothing {
16870            return Ok(None);
16871        }
16872        let result = MembersGetAvailableTeamMemberRolesResult {
16873            roles: field_roles.ok_or_else(|| ::serde::de::Error::missing_field("roles"))?,
16874        };
16875        Ok(Some(result))
16876    }
16877
16878    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16879        &self,
16880        s: &mut S::SerializeStruct,
16881    ) -> Result<(), S::Error> {
16882        use serde::ser::SerializeStruct;
16883        s.serialize_field("roles", &self.roles)?;
16884        Ok(())
16885    }
16886}
16887
16888impl<'de> ::serde::de::Deserialize<'de> for MembersGetAvailableTeamMemberRolesResult {
16889    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16890        // struct deserializer
16891        use serde::de::{MapAccess, Visitor};
16892        struct StructVisitor;
16893        impl<'de> Visitor<'de> for StructVisitor {
16894            type Value = MembersGetAvailableTeamMemberRolesResult;
16895            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16896                f.write_str("a MembersGetAvailableTeamMemberRolesResult struct")
16897            }
16898            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16899                MembersGetAvailableTeamMemberRolesResult::internal_deserialize(map)
16900            }
16901        }
16902        deserializer.deserialize_struct("MembersGetAvailableTeamMemberRolesResult", MEMBERS_GET_AVAILABLE_TEAM_MEMBER_ROLES_RESULT_FIELDS, StructVisitor)
16903    }
16904}
16905
16906impl ::serde::ser::Serialize for MembersGetAvailableTeamMemberRolesResult {
16907    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16908        // struct serializer
16909        use serde::ser::SerializeStruct;
16910        let mut s = serializer.serialize_struct("MembersGetAvailableTeamMemberRolesResult", 1)?;
16911        self.internal_serialize::<S>(&mut s)?;
16912        s.end()
16913    }
16914}
16915
16916#[derive(Debug, Clone, PartialEq, Eq)]
16917#[non_exhaustive] // structs may have more fields added in the future.
16918pub struct MembersGetInfoArgs {
16919    /// List of team members.
16920    pub members: Vec<UserSelectorArg>,
16921}
16922
16923impl MembersGetInfoArgs {
16924    pub fn new(members: Vec<UserSelectorArg>) -> Self {
16925        MembersGetInfoArgs {
16926            members,
16927        }
16928    }
16929}
16930
16931const MEMBERS_GET_INFO_ARGS_FIELDS: &[&str] = &["members"];
16932impl MembersGetInfoArgs {
16933    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
16934        map: V,
16935    ) -> Result<MembersGetInfoArgs, V::Error> {
16936        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
16937    }
16938
16939    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
16940        mut map: V,
16941        optional: bool,
16942    ) -> Result<Option<MembersGetInfoArgs>, V::Error> {
16943        let mut field_members = None;
16944        let mut nothing = true;
16945        while let Some(key) = map.next_key::<&str>()? {
16946            nothing = false;
16947            match key {
16948                "members" => {
16949                    if field_members.is_some() {
16950                        return Err(::serde::de::Error::duplicate_field("members"));
16951                    }
16952                    field_members = Some(map.next_value()?);
16953                }
16954                _ => {
16955                    // unknown field allowed and ignored
16956                    map.next_value::<::serde_json::Value>()?;
16957                }
16958            }
16959        }
16960        if optional && nothing {
16961            return Ok(None);
16962        }
16963        let result = MembersGetInfoArgs {
16964            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
16965        };
16966        Ok(Some(result))
16967    }
16968
16969    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
16970        &self,
16971        s: &mut S::SerializeStruct,
16972    ) -> Result<(), S::Error> {
16973        use serde::ser::SerializeStruct;
16974        s.serialize_field("members", &self.members)?;
16975        Ok(())
16976    }
16977}
16978
16979impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoArgs {
16980    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
16981        // struct deserializer
16982        use serde::de::{MapAccess, Visitor};
16983        struct StructVisitor;
16984        impl<'de> Visitor<'de> for StructVisitor {
16985            type Value = MembersGetInfoArgs;
16986            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
16987                f.write_str("a MembersGetInfoArgs struct")
16988            }
16989            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
16990                MembersGetInfoArgs::internal_deserialize(map)
16991            }
16992        }
16993        deserializer.deserialize_struct("MembersGetInfoArgs", MEMBERS_GET_INFO_ARGS_FIELDS, StructVisitor)
16994    }
16995}
16996
16997impl ::serde::ser::Serialize for MembersGetInfoArgs {
16998    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16999        // struct serializer
17000        use serde::ser::SerializeStruct;
17001        let mut s = serializer.serialize_struct("MembersGetInfoArgs", 1)?;
17002        self.internal_serialize::<S>(&mut s)?;
17003        s.end()
17004    }
17005}
17006
17007
17008#[derive(Debug, Clone, PartialEq, Eq)]
17009#[non_exhaustive] // variants may be added in the future
17010pub enum MembersGetInfoError {
17011    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17012    /// typically indicates that this SDK version is out of date.
17013    Other,
17014}
17015
17016impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoError {
17017    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17018        // union deserializer
17019        use serde::de::{self, MapAccess, Visitor};
17020        struct EnumVisitor;
17021        impl<'de> Visitor<'de> for EnumVisitor {
17022            type Value = MembersGetInfoError;
17023            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17024                f.write_str("a MembersGetInfoError structure")
17025            }
17026            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17027                let tag: &str = match map.next_key()? {
17028                    Some(".tag") => map.next_value()?,
17029                    _ => return Err(de::Error::missing_field(".tag"))
17030                };
17031                // open enum with no defined variants
17032                let _ = tag;
17033                crate::eat_json_fields(&mut map)?;
17034                Ok(MembersGetInfoError::Other)
17035            }
17036        }
17037        const VARIANTS: &[&str] = &["other"];
17038        deserializer.deserialize_struct("MembersGetInfoError", VARIANTS, EnumVisitor)
17039    }
17040}
17041
17042impl ::serde::ser::Serialize for MembersGetInfoError {
17043    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17044        // union serializer
17045        #![allow(unused_variables)]
17046        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
17047    }
17048}
17049
17050impl ::std::error::Error for MembersGetInfoError {
17051}
17052
17053impl ::std::fmt::Display for MembersGetInfoError {
17054    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17055        write!(f, "{:?}", *self)
17056    }
17057}
17058
17059/// Describes a result obtained for a single user whose id was specified in the parameter of
17060/// [`members_get_info()`](crate::team::members_get_info).
17061#[derive(Debug, Clone, PartialEq, Eq)]
17062pub enum MembersGetInfoItem {
17063    /// An ID that was provided as a parameter to
17064    /// [`members_get_info()`](crate::team::members_get_info) or
17065    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
17066    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
17067    /// on how the method was called.
17068    IdNotFound(String),
17069    /// Info about a team member.
17070    MemberInfo(TeamMemberInfo),
17071}
17072
17073impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItem {
17074    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17075        // union deserializer
17076        use serde::de::{self, MapAccess, Visitor};
17077        struct EnumVisitor;
17078        impl<'de> Visitor<'de> for EnumVisitor {
17079            type Value = MembersGetInfoItem;
17080            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17081                f.write_str("a MembersGetInfoItem structure")
17082            }
17083            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17084                let tag: &str = match map.next_key()? {
17085                    Some(".tag") => map.next_value()?,
17086                    _ => return Err(de::Error::missing_field(".tag"))
17087                };
17088                let value = match tag {
17089                    "id_not_found" => {
17090                        match map.next_key()? {
17091                            Some("id_not_found") => MembersGetInfoItem::IdNotFound(map.next_value()?),
17092                            None => return Err(de::Error::missing_field("id_not_found")),
17093                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
17094                        }
17095                    }
17096                    "member_info" => MembersGetInfoItem::MemberInfo(TeamMemberInfo::internal_deserialize(&mut map)?),
17097                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
17098                };
17099                crate::eat_json_fields(&mut map)?;
17100                Ok(value)
17101            }
17102        }
17103        const VARIANTS: &[&str] = &["id_not_found",
17104                                    "member_info"];
17105        deserializer.deserialize_struct("MembersGetInfoItem", VARIANTS, EnumVisitor)
17106    }
17107}
17108
17109impl ::serde::ser::Serialize for MembersGetInfoItem {
17110    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17111        // union serializer
17112        use serde::ser::SerializeStruct;
17113        match self {
17114            MembersGetInfoItem::IdNotFound(x) => {
17115                // primitive
17116                let mut s = serializer.serialize_struct("MembersGetInfoItem", 2)?;
17117                s.serialize_field(".tag", "id_not_found")?;
17118                s.serialize_field("id_not_found", x)?;
17119                s.end()
17120            }
17121            MembersGetInfoItem::MemberInfo(x) => {
17122                // struct
17123                let mut s = serializer.serialize_struct("MembersGetInfoItem", 3)?;
17124                s.serialize_field(".tag", "member_info")?;
17125                x.internal_serialize::<S>(&mut s)?;
17126                s.end()
17127            }
17128        }
17129    }
17130}
17131
17132// union extends MembersGetInfoItemBase
17133impl From<MembersGetInfoItemBase> for MembersGetInfoItem {
17134    fn from(parent: MembersGetInfoItemBase) -> Self {
17135        match parent {
17136            MembersGetInfoItemBase::IdNotFound(x) => MembersGetInfoItem::IdNotFound(x),
17137        }
17138    }
17139}
17140#[derive(Debug, Clone, PartialEq, Eq)]
17141pub enum MembersGetInfoItemBase {
17142    /// An ID that was provided as a parameter to
17143    /// [`members_get_info()`](crate::team::members_get_info) or
17144    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
17145    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
17146    /// on how the method was called.
17147    IdNotFound(String),
17148}
17149
17150impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItemBase {
17151    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17152        // union deserializer
17153        use serde::de::{self, MapAccess, Visitor};
17154        struct EnumVisitor;
17155        impl<'de> Visitor<'de> for EnumVisitor {
17156            type Value = MembersGetInfoItemBase;
17157            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17158                f.write_str("a MembersGetInfoItemBase structure")
17159            }
17160            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17161                let tag: &str = match map.next_key()? {
17162                    Some(".tag") => map.next_value()?,
17163                    _ => return Err(de::Error::missing_field(".tag"))
17164                };
17165                let value = match tag {
17166                    "id_not_found" => {
17167                        match map.next_key()? {
17168                            Some("id_not_found") => MembersGetInfoItemBase::IdNotFound(map.next_value()?),
17169                            None => return Err(de::Error::missing_field("id_not_found")),
17170                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
17171                        }
17172                    }
17173                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
17174                };
17175                crate::eat_json_fields(&mut map)?;
17176                Ok(value)
17177            }
17178        }
17179        const VARIANTS: &[&str] = &["id_not_found"];
17180        deserializer.deserialize_struct("MembersGetInfoItemBase", VARIANTS, EnumVisitor)
17181    }
17182}
17183
17184impl ::serde::ser::Serialize for MembersGetInfoItemBase {
17185    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17186        // union serializer
17187        use serde::ser::SerializeStruct;
17188        match self {
17189            MembersGetInfoItemBase::IdNotFound(x) => {
17190                // primitive
17191                let mut s = serializer.serialize_struct("MembersGetInfoItemBase", 2)?;
17192                s.serialize_field(".tag", "id_not_found")?;
17193                s.serialize_field("id_not_found", x)?;
17194                s.end()
17195            }
17196        }
17197    }
17198}
17199
17200/// Describes a result obtained for a single user whose id was specified in the parameter of
17201/// [`members_get_info_v2()`](crate::team::members_get_info_v2).
17202#[derive(Debug, Clone, PartialEq, Eq)]
17203#[non_exhaustive] // variants may be added in the future
17204pub enum MembersGetInfoItemV2 {
17205    /// An ID that was provided as a parameter to
17206    /// [`members_get_info()`](crate::team::members_get_info) or
17207    /// [`members_get_info_v2()`](crate::team::members_get_info_v2), and did not match a
17208    /// corresponding user. This might be a team_member_id, an email, or an external ID, depending
17209    /// on how the method was called.
17210    IdNotFound(String),
17211    /// Info about a team member.
17212    MemberInfo(TeamMemberInfoV2),
17213    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17214    /// typically indicates that this SDK version is out of date.
17215    Other,
17216}
17217
17218impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoItemV2 {
17219    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17220        // union deserializer
17221        use serde::de::{self, MapAccess, Visitor};
17222        struct EnumVisitor;
17223        impl<'de> Visitor<'de> for EnumVisitor {
17224            type Value = MembersGetInfoItemV2;
17225            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17226                f.write_str("a MembersGetInfoItemV2 structure")
17227            }
17228            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17229                let tag: &str = match map.next_key()? {
17230                    Some(".tag") => map.next_value()?,
17231                    _ => return Err(de::Error::missing_field(".tag"))
17232                };
17233                let value = match tag {
17234                    "id_not_found" => {
17235                        match map.next_key()? {
17236                            Some("id_not_found") => MembersGetInfoItemV2::IdNotFound(map.next_value()?),
17237                            None => return Err(de::Error::missing_field("id_not_found")),
17238                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
17239                        }
17240                    }
17241                    "member_info" => MembersGetInfoItemV2::MemberInfo(TeamMemberInfoV2::internal_deserialize(&mut map)?),
17242                    _ => MembersGetInfoItemV2::Other,
17243                };
17244                crate::eat_json_fields(&mut map)?;
17245                Ok(value)
17246            }
17247        }
17248        const VARIANTS: &[&str] = &["id_not_found",
17249                                    "member_info",
17250                                    "other"];
17251        deserializer.deserialize_struct("MembersGetInfoItemV2", VARIANTS, EnumVisitor)
17252    }
17253}
17254
17255impl ::serde::ser::Serialize for MembersGetInfoItemV2 {
17256    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17257        // union serializer
17258        use serde::ser::SerializeStruct;
17259        match self {
17260            MembersGetInfoItemV2::IdNotFound(x) => {
17261                // primitive
17262                let mut s = serializer.serialize_struct("MembersGetInfoItemV2", 2)?;
17263                s.serialize_field(".tag", "id_not_found")?;
17264                s.serialize_field("id_not_found", x)?;
17265                s.end()
17266            }
17267            MembersGetInfoItemV2::MemberInfo(x) => {
17268                // struct
17269                let mut s = serializer.serialize_struct("MembersGetInfoItemV2", 3)?;
17270                s.serialize_field(".tag", "member_info")?;
17271                x.internal_serialize::<S>(&mut s)?;
17272                s.end()
17273            }
17274            MembersGetInfoItemV2::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17275        }
17276    }
17277}
17278
17279// union extends MembersGetInfoItemBase
17280impl From<MembersGetInfoItemBase> for MembersGetInfoItemV2 {
17281    fn from(parent: MembersGetInfoItemBase) -> Self {
17282        match parent {
17283            MembersGetInfoItemBase::IdNotFound(x) => MembersGetInfoItemV2::IdNotFound(x),
17284        }
17285    }
17286}
17287#[derive(Debug, Clone, PartialEq, Eq)]
17288#[non_exhaustive] // structs may have more fields added in the future.
17289pub struct MembersGetInfoV2Arg {
17290    /// List of team members.
17291    pub members: Vec<UserSelectorArg>,
17292}
17293
17294impl MembersGetInfoV2Arg {
17295    pub fn new(members: Vec<UserSelectorArg>) -> Self {
17296        MembersGetInfoV2Arg {
17297            members,
17298        }
17299    }
17300}
17301
17302const MEMBERS_GET_INFO_V2_ARG_FIELDS: &[&str] = &["members"];
17303impl MembersGetInfoV2Arg {
17304    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17305        map: V,
17306    ) -> Result<MembersGetInfoV2Arg, V::Error> {
17307        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17308    }
17309
17310    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17311        mut map: V,
17312        optional: bool,
17313    ) -> Result<Option<MembersGetInfoV2Arg>, V::Error> {
17314        let mut field_members = None;
17315        let mut nothing = true;
17316        while let Some(key) = map.next_key::<&str>()? {
17317            nothing = false;
17318            match key {
17319                "members" => {
17320                    if field_members.is_some() {
17321                        return Err(::serde::de::Error::duplicate_field("members"));
17322                    }
17323                    field_members = Some(map.next_value()?);
17324                }
17325                _ => {
17326                    // unknown field allowed and ignored
17327                    map.next_value::<::serde_json::Value>()?;
17328                }
17329            }
17330        }
17331        if optional && nothing {
17332            return Ok(None);
17333        }
17334        let result = MembersGetInfoV2Arg {
17335            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
17336        };
17337        Ok(Some(result))
17338    }
17339
17340    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17341        &self,
17342        s: &mut S::SerializeStruct,
17343    ) -> Result<(), S::Error> {
17344        use serde::ser::SerializeStruct;
17345        s.serialize_field("members", &self.members)?;
17346        Ok(())
17347    }
17348}
17349
17350impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoV2Arg {
17351    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17352        // struct deserializer
17353        use serde::de::{MapAccess, Visitor};
17354        struct StructVisitor;
17355        impl<'de> Visitor<'de> for StructVisitor {
17356            type Value = MembersGetInfoV2Arg;
17357            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17358                f.write_str("a MembersGetInfoV2Arg struct")
17359            }
17360            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17361                MembersGetInfoV2Arg::internal_deserialize(map)
17362            }
17363        }
17364        deserializer.deserialize_struct("MembersGetInfoV2Arg", MEMBERS_GET_INFO_V2_ARG_FIELDS, StructVisitor)
17365    }
17366}
17367
17368impl ::serde::ser::Serialize for MembersGetInfoV2Arg {
17369    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17370        // struct serializer
17371        use serde::ser::SerializeStruct;
17372        let mut s = serializer.serialize_struct("MembersGetInfoV2Arg", 1)?;
17373        self.internal_serialize::<S>(&mut s)?;
17374        s.end()
17375    }
17376}
17377
17378#[derive(Debug, Clone, PartialEq, Eq)]
17379#[non_exhaustive] // structs may have more fields added in the future.
17380pub struct MembersGetInfoV2Result {
17381    /// List of team members info.
17382    pub members_info: Vec<MembersGetInfoItemV2>,
17383}
17384
17385impl MembersGetInfoV2Result {
17386    pub fn new(members_info: Vec<MembersGetInfoItemV2>) -> Self {
17387        MembersGetInfoV2Result {
17388            members_info,
17389        }
17390    }
17391}
17392
17393const MEMBERS_GET_INFO_V2_RESULT_FIELDS: &[&str] = &["members_info"];
17394impl MembersGetInfoV2Result {
17395    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17396        map: V,
17397    ) -> Result<MembersGetInfoV2Result, V::Error> {
17398        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17399    }
17400
17401    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17402        mut map: V,
17403        optional: bool,
17404    ) -> Result<Option<MembersGetInfoV2Result>, V::Error> {
17405        let mut field_members_info = None;
17406        let mut nothing = true;
17407        while let Some(key) = map.next_key::<&str>()? {
17408            nothing = false;
17409            match key {
17410                "members_info" => {
17411                    if field_members_info.is_some() {
17412                        return Err(::serde::de::Error::duplicate_field("members_info"));
17413                    }
17414                    field_members_info = Some(map.next_value()?);
17415                }
17416                _ => {
17417                    // unknown field allowed and ignored
17418                    map.next_value::<::serde_json::Value>()?;
17419                }
17420            }
17421        }
17422        if optional && nothing {
17423            return Ok(None);
17424        }
17425        let result = MembersGetInfoV2Result {
17426            members_info: field_members_info.ok_or_else(|| ::serde::de::Error::missing_field("members_info"))?,
17427        };
17428        Ok(Some(result))
17429    }
17430
17431    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17432        &self,
17433        s: &mut S::SerializeStruct,
17434    ) -> Result<(), S::Error> {
17435        use serde::ser::SerializeStruct;
17436        s.serialize_field("members_info", &self.members_info)?;
17437        Ok(())
17438    }
17439}
17440
17441impl<'de> ::serde::de::Deserialize<'de> for MembersGetInfoV2Result {
17442    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17443        // struct deserializer
17444        use serde::de::{MapAccess, Visitor};
17445        struct StructVisitor;
17446        impl<'de> Visitor<'de> for StructVisitor {
17447            type Value = MembersGetInfoV2Result;
17448            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17449                f.write_str("a MembersGetInfoV2Result struct")
17450            }
17451            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17452                MembersGetInfoV2Result::internal_deserialize(map)
17453            }
17454        }
17455        deserializer.deserialize_struct("MembersGetInfoV2Result", MEMBERS_GET_INFO_V2_RESULT_FIELDS, StructVisitor)
17456    }
17457}
17458
17459impl ::serde::ser::Serialize for MembersGetInfoV2Result {
17460    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17461        // struct serializer
17462        use serde::ser::SerializeStruct;
17463        let mut s = serializer.serialize_struct("MembersGetInfoV2Result", 1)?;
17464        self.internal_serialize::<S>(&mut s)?;
17465        s.end()
17466    }
17467}
17468
17469#[derive(Debug, Clone, PartialEq, Eq)]
17470#[non_exhaustive] // structs may have more fields added in the future.
17471pub struct MembersInfo {
17472    /// Team member IDs of the users under this hold.
17473    pub team_member_ids: Vec<crate::types::team_common::TeamMemberId>,
17474    /// The number of permanently deleted users that were under this hold.
17475    pub permanently_deleted_users: u64,
17476}
17477
17478impl MembersInfo {
17479    pub fn new(
17480        team_member_ids: Vec<crate::types::team_common::TeamMemberId>,
17481        permanently_deleted_users: u64,
17482    ) -> Self {
17483        MembersInfo {
17484            team_member_ids,
17485            permanently_deleted_users,
17486        }
17487    }
17488}
17489
17490const MEMBERS_INFO_FIELDS: &[&str] = &["team_member_ids",
17491                                       "permanently_deleted_users"];
17492impl MembersInfo {
17493    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17494        map: V,
17495    ) -> Result<MembersInfo, V::Error> {
17496        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17497    }
17498
17499    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17500        mut map: V,
17501        optional: bool,
17502    ) -> Result<Option<MembersInfo>, V::Error> {
17503        let mut field_team_member_ids = None;
17504        let mut field_permanently_deleted_users = None;
17505        let mut nothing = true;
17506        while let Some(key) = map.next_key::<&str>()? {
17507            nothing = false;
17508            match key {
17509                "team_member_ids" => {
17510                    if field_team_member_ids.is_some() {
17511                        return Err(::serde::de::Error::duplicate_field("team_member_ids"));
17512                    }
17513                    field_team_member_ids = Some(map.next_value()?);
17514                }
17515                "permanently_deleted_users" => {
17516                    if field_permanently_deleted_users.is_some() {
17517                        return Err(::serde::de::Error::duplicate_field("permanently_deleted_users"));
17518                    }
17519                    field_permanently_deleted_users = Some(map.next_value()?);
17520                }
17521                _ => {
17522                    // unknown field allowed and ignored
17523                    map.next_value::<::serde_json::Value>()?;
17524                }
17525            }
17526        }
17527        if optional && nothing {
17528            return Ok(None);
17529        }
17530        let result = MembersInfo {
17531            team_member_ids: field_team_member_ids.ok_or_else(|| ::serde::de::Error::missing_field("team_member_ids"))?,
17532            permanently_deleted_users: field_permanently_deleted_users.ok_or_else(|| ::serde::de::Error::missing_field("permanently_deleted_users"))?,
17533        };
17534        Ok(Some(result))
17535    }
17536
17537    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17538        &self,
17539        s: &mut S::SerializeStruct,
17540    ) -> Result<(), S::Error> {
17541        use serde::ser::SerializeStruct;
17542        s.serialize_field("team_member_ids", &self.team_member_ids)?;
17543        s.serialize_field("permanently_deleted_users", &self.permanently_deleted_users)?;
17544        Ok(())
17545    }
17546}
17547
17548impl<'de> ::serde::de::Deserialize<'de> for MembersInfo {
17549    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17550        // struct deserializer
17551        use serde::de::{MapAccess, Visitor};
17552        struct StructVisitor;
17553        impl<'de> Visitor<'de> for StructVisitor {
17554            type Value = MembersInfo;
17555            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17556                f.write_str("a MembersInfo struct")
17557            }
17558            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17559                MembersInfo::internal_deserialize(map)
17560            }
17561        }
17562        deserializer.deserialize_struct("MembersInfo", MEMBERS_INFO_FIELDS, StructVisitor)
17563    }
17564}
17565
17566impl ::serde::ser::Serialize for MembersInfo {
17567    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17568        // struct serializer
17569        use serde::ser::SerializeStruct;
17570        let mut s = serializer.serialize_struct("MembersInfo", 2)?;
17571        self.internal_serialize::<S>(&mut s)?;
17572        s.end()
17573    }
17574}
17575
17576#[derive(Debug, Clone, PartialEq, Eq)]
17577#[non_exhaustive] // structs may have more fields added in the future.
17578pub struct MembersListArg {
17579    /// Number of results to return per call.
17580    pub limit: u32,
17581    /// Whether to return removed members.
17582    pub include_removed: bool,
17583}
17584
17585impl Default for MembersListArg {
17586    fn default() -> Self {
17587        MembersListArg {
17588            limit: 1000,
17589            include_removed: false,
17590        }
17591    }
17592}
17593
17594impl MembersListArg {
17595    pub fn with_limit(mut self, value: u32) -> Self {
17596        self.limit = value;
17597        self
17598    }
17599
17600    pub fn with_include_removed(mut self, value: bool) -> Self {
17601        self.include_removed = value;
17602        self
17603    }
17604}
17605
17606const MEMBERS_LIST_ARG_FIELDS: &[&str] = &["limit",
17607                                           "include_removed"];
17608impl MembersListArg {
17609    // no _opt deserializer
17610    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17611        mut map: V,
17612    ) -> Result<MembersListArg, V::Error> {
17613        let mut field_limit = None;
17614        let mut field_include_removed = None;
17615        while let Some(key) = map.next_key::<&str>()? {
17616            match key {
17617                "limit" => {
17618                    if field_limit.is_some() {
17619                        return Err(::serde::de::Error::duplicate_field("limit"));
17620                    }
17621                    field_limit = Some(map.next_value()?);
17622                }
17623                "include_removed" => {
17624                    if field_include_removed.is_some() {
17625                        return Err(::serde::de::Error::duplicate_field("include_removed"));
17626                    }
17627                    field_include_removed = Some(map.next_value()?);
17628                }
17629                _ => {
17630                    // unknown field allowed and ignored
17631                    map.next_value::<::serde_json::Value>()?;
17632                }
17633            }
17634        }
17635        let result = MembersListArg {
17636            limit: field_limit.unwrap_or(1000),
17637            include_removed: field_include_removed.unwrap_or(false),
17638        };
17639        Ok(result)
17640    }
17641
17642    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17643        &self,
17644        s: &mut S::SerializeStruct,
17645    ) -> Result<(), S::Error> {
17646        use serde::ser::SerializeStruct;
17647        if self.limit != 1000 {
17648            s.serialize_field("limit", &self.limit)?;
17649        }
17650        if self.include_removed {
17651            s.serialize_field("include_removed", &self.include_removed)?;
17652        }
17653        Ok(())
17654    }
17655}
17656
17657impl<'de> ::serde::de::Deserialize<'de> for MembersListArg {
17658    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17659        // struct deserializer
17660        use serde::de::{MapAccess, Visitor};
17661        struct StructVisitor;
17662        impl<'de> Visitor<'de> for StructVisitor {
17663            type Value = MembersListArg;
17664            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17665                f.write_str("a MembersListArg struct")
17666            }
17667            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17668                MembersListArg::internal_deserialize(map)
17669            }
17670        }
17671        deserializer.deserialize_struct("MembersListArg", MEMBERS_LIST_ARG_FIELDS, StructVisitor)
17672    }
17673}
17674
17675impl ::serde::ser::Serialize for MembersListArg {
17676    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17677        // struct serializer
17678        use serde::ser::SerializeStruct;
17679        let mut s = serializer.serialize_struct("MembersListArg", 2)?;
17680        self.internal_serialize::<S>(&mut s)?;
17681        s.end()
17682    }
17683}
17684
17685#[derive(Debug, Clone, PartialEq, Eq)]
17686#[non_exhaustive] // structs may have more fields added in the future.
17687pub struct MembersListContinueArg {
17688    /// Indicates from what point to get the next set of members.
17689    pub cursor: String,
17690}
17691
17692impl MembersListContinueArg {
17693    pub fn new(cursor: String) -> Self {
17694        MembersListContinueArg {
17695            cursor,
17696        }
17697    }
17698}
17699
17700const MEMBERS_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
17701impl MembersListContinueArg {
17702    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17703        map: V,
17704    ) -> Result<MembersListContinueArg, V::Error> {
17705        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17706    }
17707
17708    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17709        mut map: V,
17710        optional: bool,
17711    ) -> Result<Option<MembersListContinueArg>, V::Error> {
17712        let mut field_cursor = None;
17713        let mut nothing = true;
17714        while let Some(key) = map.next_key::<&str>()? {
17715            nothing = false;
17716            match key {
17717                "cursor" => {
17718                    if field_cursor.is_some() {
17719                        return Err(::serde::de::Error::duplicate_field("cursor"));
17720                    }
17721                    field_cursor = Some(map.next_value()?);
17722                }
17723                _ => {
17724                    // unknown field allowed and ignored
17725                    map.next_value::<::serde_json::Value>()?;
17726                }
17727            }
17728        }
17729        if optional && nothing {
17730            return Ok(None);
17731        }
17732        let result = MembersListContinueArg {
17733            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
17734        };
17735        Ok(Some(result))
17736    }
17737
17738    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17739        &self,
17740        s: &mut S::SerializeStruct,
17741    ) -> Result<(), S::Error> {
17742        use serde::ser::SerializeStruct;
17743        s.serialize_field("cursor", &self.cursor)?;
17744        Ok(())
17745    }
17746}
17747
17748impl<'de> ::serde::de::Deserialize<'de> for MembersListContinueArg {
17749    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17750        // struct deserializer
17751        use serde::de::{MapAccess, Visitor};
17752        struct StructVisitor;
17753        impl<'de> Visitor<'de> for StructVisitor {
17754            type Value = MembersListContinueArg;
17755            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17756                f.write_str("a MembersListContinueArg struct")
17757            }
17758            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17759                MembersListContinueArg::internal_deserialize(map)
17760            }
17761        }
17762        deserializer.deserialize_struct("MembersListContinueArg", MEMBERS_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
17763    }
17764}
17765
17766impl ::serde::ser::Serialize for MembersListContinueArg {
17767    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17768        // struct serializer
17769        use serde::ser::SerializeStruct;
17770        let mut s = serializer.serialize_struct("MembersListContinueArg", 1)?;
17771        self.internal_serialize::<S>(&mut s)?;
17772        s.end()
17773    }
17774}
17775
17776#[derive(Debug, Clone, PartialEq, Eq)]
17777#[non_exhaustive] // variants may be added in the future
17778pub enum MembersListContinueError {
17779    /// The cursor is invalid.
17780    InvalidCursor,
17781    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17782    /// typically indicates that this SDK version is out of date.
17783    Other,
17784}
17785
17786impl<'de> ::serde::de::Deserialize<'de> for MembersListContinueError {
17787    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17788        // union deserializer
17789        use serde::de::{self, MapAccess, Visitor};
17790        struct EnumVisitor;
17791        impl<'de> Visitor<'de> for EnumVisitor {
17792            type Value = MembersListContinueError;
17793            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17794                f.write_str("a MembersListContinueError structure")
17795            }
17796            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17797                let tag: &str = match map.next_key()? {
17798                    Some(".tag") => map.next_value()?,
17799                    _ => return Err(de::Error::missing_field(".tag"))
17800                };
17801                let value = match tag {
17802                    "invalid_cursor" => MembersListContinueError::InvalidCursor,
17803                    _ => MembersListContinueError::Other,
17804                };
17805                crate::eat_json_fields(&mut map)?;
17806                Ok(value)
17807            }
17808        }
17809        const VARIANTS: &[&str] = &["invalid_cursor",
17810                                    "other"];
17811        deserializer.deserialize_struct("MembersListContinueError", VARIANTS, EnumVisitor)
17812    }
17813}
17814
17815impl ::serde::ser::Serialize for MembersListContinueError {
17816    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17817        // union serializer
17818        use serde::ser::SerializeStruct;
17819        match self {
17820            MembersListContinueError::InvalidCursor => {
17821                // unit
17822                let mut s = serializer.serialize_struct("MembersListContinueError", 1)?;
17823                s.serialize_field(".tag", "invalid_cursor")?;
17824                s.end()
17825            }
17826            MembersListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
17827        }
17828    }
17829}
17830
17831impl ::std::error::Error for MembersListContinueError {
17832}
17833
17834impl ::std::fmt::Display for MembersListContinueError {
17835    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17836        match self {
17837            MembersListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
17838            _ => write!(f, "{:?}", *self),
17839        }
17840    }
17841}
17842
17843
17844#[derive(Debug, Clone, PartialEq, Eq)]
17845#[non_exhaustive] // variants may be added in the future
17846pub enum MembersListError {
17847    /// Catch-all used for unrecognized values returned from the server. Encountering this value
17848    /// typically indicates that this SDK version is out of date.
17849    Other,
17850}
17851
17852impl<'de> ::serde::de::Deserialize<'de> for MembersListError {
17853    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17854        // union deserializer
17855        use serde::de::{self, MapAccess, Visitor};
17856        struct EnumVisitor;
17857        impl<'de> Visitor<'de> for EnumVisitor {
17858            type Value = MembersListError;
17859            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17860                f.write_str("a MembersListError structure")
17861            }
17862            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
17863                let tag: &str = match map.next_key()? {
17864                    Some(".tag") => map.next_value()?,
17865                    _ => return Err(de::Error::missing_field(".tag"))
17866                };
17867                // open enum with no defined variants
17868                let _ = tag;
17869                crate::eat_json_fields(&mut map)?;
17870                Ok(MembersListError::Other)
17871            }
17872        }
17873        const VARIANTS: &[&str] = &["other"];
17874        deserializer.deserialize_struct("MembersListError", VARIANTS, EnumVisitor)
17875    }
17876}
17877
17878impl ::serde::ser::Serialize for MembersListError {
17879    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17880        // union serializer
17881        #![allow(unused_variables)]
17882        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
17883    }
17884}
17885
17886impl ::std::error::Error for MembersListError {
17887}
17888
17889impl ::std::fmt::Display for MembersListError {
17890    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17891        write!(f, "{:?}", *self)
17892    }
17893}
17894
17895#[derive(Debug, Clone, PartialEq, Eq)]
17896#[non_exhaustive] // structs may have more fields added in the future.
17897pub struct MembersListResult {
17898    /// List of team members.
17899    pub members: Vec<TeamMemberInfo>,
17900    /// Pass the cursor into [`members_list_continue()`](crate::team::members_list_continue) to
17901    /// obtain the additional members.
17902    pub cursor: String,
17903    /// Is true if there are additional team members that have not been returned yet. An additional
17904    /// call to [`members_list_continue()`](crate::team::members_list_continue) can retrieve them.
17905    pub has_more: bool,
17906}
17907
17908impl MembersListResult {
17909    pub fn new(members: Vec<TeamMemberInfo>, cursor: String, has_more: bool) -> Self {
17910        MembersListResult {
17911            members,
17912            cursor,
17913            has_more,
17914        }
17915    }
17916}
17917
17918const MEMBERS_LIST_RESULT_FIELDS: &[&str] = &["members",
17919                                              "cursor",
17920                                              "has_more"];
17921impl MembersListResult {
17922    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
17923        map: V,
17924    ) -> Result<MembersListResult, V::Error> {
17925        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
17926    }
17927
17928    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
17929        mut map: V,
17930        optional: bool,
17931    ) -> Result<Option<MembersListResult>, V::Error> {
17932        let mut field_members = None;
17933        let mut field_cursor = None;
17934        let mut field_has_more = None;
17935        let mut nothing = true;
17936        while let Some(key) = map.next_key::<&str>()? {
17937            nothing = false;
17938            match key {
17939                "members" => {
17940                    if field_members.is_some() {
17941                        return Err(::serde::de::Error::duplicate_field("members"));
17942                    }
17943                    field_members = Some(map.next_value()?);
17944                }
17945                "cursor" => {
17946                    if field_cursor.is_some() {
17947                        return Err(::serde::de::Error::duplicate_field("cursor"));
17948                    }
17949                    field_cursor = Some(map.next_value()?);
17950                }
17951                "has_more" => {
17952                    if field_has_more.is_some() {
17953                        return Err(::serde::de::Error::duplicate_field("has_more"));
17954                    }
17955                    field_has_more = Some(map.next_value()?);
17956                }
17957                _ => {
17958                    // unknown field allowed and ignored
17959                    map.next_value::<::serde_json::Value>()?;
17960                }
17961            }
17962        }
17963        if optional && nothing {
17964            return Ok(None);
17965        }
17966        let result = MembersListResult {
17967            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
17968            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
17969            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
17970        };
17971        Ok(Some(result))
17972    }
17973
17974    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
17975        &self,
17976        s: &mut S::SerializeStruct,
17977    ) -> Result<(), S::Error> {
17978        use serde::ser::SerializeStruct;
17979        s.serialize_field("members", &self.members)?;
17980        s.serialize_field("cursor", &self.cursor)?;
17981        s.serialize_field("has_more", &self.has_more)?;
17982        Ok(())
17983    }
17984}
17985
17986impl<'de> ::serde::de::Deserialize<'de> for MembersListResult {
17987    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
17988        // struct deserializer
17989        use serde::de::{MapAccess, Visitor};
17990        struct StructVisitor;
17991        impl<'de> Visitor<'de> for StructVisitor {
17992            type Value = MembersListResult;
17993            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
17994                f.write_str("a MembersListResult struct")
17995            }
17996            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
17997                MembersListResult::internal_deserialize(map)
17998            }
17999        }
18000        deserializer.deserialize_struct("MembersListResult", MEMBERS_LIST_RESULT_FIELDS, StructVisitor)
18001    }
18002}
18003
18004impl ::serde::ser::Serialize for MembersListResult {
18005    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18006        // struct serializer
18007        use serde::ser::SerializeStruct;
18008        let mut s = serializer.serialize_struct("MembersListResult", 3)?;
18009        self.internal_serialize::<S>(&mut s)?;
18010        s.end()
18011    }
18012}
18013
18014#[derive(Debug, Clone, PartialEq, Eq)]
18015#[non_exhaustive] // structs may have more fields added in the future.
18016pub struct MembersListV2Result {
18017    /// List of team members.
18018    pub members: Vec<TeamMemberInfoV2>,
18019    /// Pass the cursor into [`members_list_continue_v2()`](crate::team::members_list_continue_v2)
18020    /// to obtain the additional members.
18021    pub cursor: String,
18022    /// Is true if there are additional team members that have not been returned yet. An additional
18023    /// call to [`members_list_continue_v2()`](crate::team::members_list_continue_v2) can retrieve
18024    /// them.
18025    pub has_more: bool,
18026}
18027
18028impl MembersListV2Result {
18029    pub fn new(members: Vec<TeamMemberInfoV2>, cursor: String, has_more: bool) -> Self {
18030        MembersListV2Result {
18031            members,
18032            cursor,
18033            has_more,
18034        }
18035    }
18036}
18037
18038const MEMBERS_LIST_V2_RESULT_FIELDS: &[&str] = &["members",
18039                                                 "cursor",
18040                                                 "has_more"];
18041impl MembersListV2Result {
18042    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18043        map: V,
18044    ) -> Result<MembersListV2Result, V::Error> {
18045        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18046    }
18047
18048    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18049        mut map: V,
18050        optional: bool,
18051    ) -> Result<Option<MembersListV2Result>, V::Error> {
18052        let mut field_members = None;
18053        let mut field_cursor = None;
18054        let mut field_has_more = None;
18055        let mut nothing = true;
18056        while let Some(key) = map.next_key::<&str>()? {
18057            nothing = false;
18058            match key {
18059                "members" => {
18060                    if field_members.is_some() {
18061                        return Err(::serde::de::Error::duplicate_field("members"));
18062                    }
18063                    field_members = Some(map.next_value()?);
18064                }
18065                "cursor" => {
18066                    if field_cursor.is_some() {
18067                        return Err(::serde::de::Error::duplicate_field("cursor"));
18068                    }
18069                    field_cursor = Some(map.next_value()?);
18070                }
18071                "has_more" => {
18072                    if field_has_more.is_some() {
18073                        return Err(::serde::de::Error::duplicate_field("has_more"));
18074                    }
18075                    field_has_more = Some(map.next_value()?);
18076                }
18077                _ => {
18078                    // unknown field allowed and ignored
18079                    map.next_value::<::serde_json::Value>()?;
18080                }
18081            }
18082        }
18083        if optional && nothing {
18084            return Ok(None);
18085        }
18086        let result = MembersListV2Result {
18087            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
18088            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
18089            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
18090        };
18091        Ok(Some(result))
18092    }
18093
18094    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18095        &self,
18096        s: &mut S::SerializeStruct,
18097    ) -> Result<(), S::Error> {
18098        use serde::ser::SerializeStruct;
18099        s.serialize_field("members", &self.members)?;
18100        s.serialize_field("cursor", &self.cursor)?;
18101        s.serialize_field("has_more", &self.has_more)?;
18102        Ok(())
18103    }
18104}
18105
18106impl<'de> ::serde::de::Deserialize<'de> for MembersListV2Result {
18107    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18108        // struct deserializer
18109        use serde::de::{MapAccess, Visitor};
18110        struct StructVisitor;
18111        impl<'de> Visitor<'de> for StructVisitor {
18112            type Value = MembersListV2Result;
18113            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18114                f.write_str("a MembersListV2Result struct")
18115            }
18116            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18117                MembersListV2Result::internal_deserialize(map)
18118            }
18119        }
18120        deserializer.deserialize_struct("MembersListV2Result", MEMBERS_LIST_V2_RESULT_FIELDS, StructVisitor)
18121    }
18122}
18123
18124impl ::serde::ser::Serialize for MembersListV2Result {
18125    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18126        // struct serializer
18127        use serde::ser::SerializeStruct;
18128        let mut s = serializer.serialize_struct("MembersListV2Result", 3)?;
18129        self.internal_serialize::<S>(&mut s)?;
18130        s.end()
18131    }
18132}
18133
18134#[derive(Debug, Clone, PartialEq, Eq)]
18135#[non_exhaustive] // variants may be added in the future
18136pub enum MembersPermanentlyDeleteFilesError {
18137    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18138    /// this team.
18139    UserNotFound,
18140    /// The user is not a member of the team.
18141    UserNotInTeam,
18142    /// Cannot permanently delete files while it's being transferred.
18143    TransferInProgress,
18144    /// Cannot permanently delete files that have already been transferred.
18145    AlreadyTransferred,
18146    /// Cannot permanently delete files that have already been transferred or deleted.
18147    AlreadyTransferredOrDeleted,
18148    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18149    /// typically indicates that this SDK version is out of date.
18150    Other,
18151}
18152
18153impl<'de> ::serde::de::Deserialize<'de> for MembersPermanentlyDeleteFilesError {
18154    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18155        // union deserializer
18156        use serde::de::{self, MapAccess, Visitor};
18157        struct EnumVisitor;
18158        impl<'de> Visitor<'de> for EnumVisitor {
18159            type Value = MembersPermanentlyDeleteFilesError;
18160            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18161                f.write_str("a MembersPermanentlyDeleteFilesError structure")
18162            }
18163            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18164                let tag: &str = match map.next_key()? {
18165                    Some(".tag") => map.next_value()?,
18166                    _ => return Err(de::Error::missing_field(".tag"))
18167                };
18168                let value = match tag {
18169                    "user_not_found" => MembersPermanentlyDeleteFilesError::UserNotFound,
18170                    "user_not_in_team" => MembersPermanentlyDeleteFilesError::UserNotInTeam,
18171                    "transfer_in_progress" => MembersPermanentlyDeleteFilesError::TransferInProgress,
18172                    "already_transferred" => MembersPermanentlyDeleteFilesError::AlreadyTransferred,
18173                    "already_transferred_or_deleted" => MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted,
18174                    _ => MembersPermanentlyDeleteFilesError::Other,
18175                };
18176                crate::eat_json_fields(&mut map)?;
18177                Ok(value)
18178            }
18179        }
18180        const VARIANTS: &[&str] = &["user_not_found",
18181                                    "user_not_in_team",
18182                                    "other",
18183                                    "transfer_in_progress",
18184                                    "already_transferred",
18185                                    "already_transferred_or_deleted"];
18186        deserializer.deserialize_struct("MembersPermanentlyDeleteFilesError", VARIANTS, EnumVisitor)
18187    }
18188}
18189
18190impl ::serde::ser::Serialize for MembersPermanentlyDeleteFilesError {
18191    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18192        // union serializer
18193        use serde::ser::SerializeStruct;
18194        match self {
18195            MembersPermanentlyDeleteFilesError::UserNotFound => {
18196                // unit
18197                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18198                s.serialize_field(".tag", "user_not_found")?;
18199                s.end()
18200            }
18201            MembersPermanentlyDeleteFilesError::UserNotInTeam => {
18202                // unit
18203                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18204                s.serialize_field(".tag", "user_not_in_team")?;
18205                s.end()
18206            }
18207            MembersPermanentlyDeleteFilesError::TransferInProgress => {
18208                // unit
18209                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18210                s.serialize_field(".tag", "transfer_in_progress")?;
18211                s.end()
18212            }
18213            MembersPermanentlyDeleteFilesError::AlreadyTransferred => {
18214                // unit
18215                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18216                s.serialize_field(".tag", "already_transferred")?;
18217                s.end()
18218            }
18219            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => {
18220                // unit
18221                let mut s = serializer.serialize_struct("MembersPermanentlyDeleteFilesError", 1)?;
18222                s.serialize_field(".tag", "already_transferred_or_deleted")?;
18223                s.end()
18224            }
18225            MembersPermanentlyDeleteFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18226        }
18227    }
18228}
18229
18230impl ::std::error::Error for MembersPermanentlyDeleteFilesError {
18231}
18232
18233impl ::std::fmt::Display for MembersPermanentlyDeleteFilesError {
18234    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18235        match self {
18236            MembersPermanentlyDeleteFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
18237            MembersPermanentlyDeleteFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
18238            MembersPermanentlyDeleteFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
18239            MembersPermanentlyDeleteFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
18240            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
18241            _ => write!(f, "{:?}", *self),
18242        }
18243    }
18244}
18245
18246// union extends MembersDeactivateError
18247impl From<MembersDeactivateError> for MembersPermanentlyDeleteFilesError {
18248    fn from(parent: MembersDeactivateError) -> Self {
18249        match parent {
18250            MembersDeactivateError::UserNotFound => MembersPermanentlyDeleteFilesError::UserNotFound,
18251            MembersDeactivateError::UserNotInTeam => MembersPermanentlyDeleteFilesError::UserNotInTeam,
18252            MembersDeactivateError::Other => MembersPermanentlyDeleteFilesError::Other,
18253        }
18254    }
18255}
18256/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
18257/// account.
18258#[derive(Debug, Clone, PartialEq, Eq)]
18259#[non_exhaustive] // structs may have more fields added in the future.
18260pub struct MembersRecoverArg {
18261    /// Identity of user to recover.
18262    pub user: UserSelectorArg,
18263}
18264
18265impl MembersRecoverArg {
18266    pub fn new(user: UserSelectorArg) -> Self {
18267        MembersRecoverArg {
18268            user,
18269        }
18270    }
18271}
18272
18273const MEMBERS_RECOVER_ARG_FIELDS: &[&str] = &["user"];
18274impl MembersRecoverArg {
18275    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18276        map: V,
18277    ) -> Result<MembersRecoverArg, V::Error> {
18278        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18279    }
18280
18281    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18282        mut map: V,
18283        optional: bool,
18284    ) -> Result<Option<MembersRecoverArg>, V::Error> {
18285        let mut field_user = None;
18286        let mut nothing = true;
18287        while let Some(key) = map.next_key::<&str>()? {
18288            nothing = false;
18289            match key {
18290                "user" => {
18291                    if field_user.is_some() {
18292                        return Err(::serde::de::Error::duplicate_field("user"));
18293                    }
18294                    field_user = Some(map.next_value()?);
18295                }
18296                _ => {
18297                    // unknown field allowed and ignored
18298                    map.next_value::<::serde_json::Value>()?;
18299                }
18300            }
18301        }
18302        if optional && nothing {
18303            return Ok(None);
18304        }
18305        let result = MembersRecoverArg {
18306            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
18307        };
18308        Ok(Some(result))
18309    }
18310
18311    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18312        &self,
18313        s: &mut S::SerializeStruct,
18314    ) -> Result<(), S::Error> {
18315        use serde::ser::SerializeStruct;
18316        s.serialize_field("user", &self.user)?;
18317        Ok(())
18318    }
18319}
18320
18321impl<'de> ::serde::de::Deserialize<'de> for MembersRecoverArg {
18322    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18323        // struct deserializer
18324        use serde::de::{MapAccess, Visitor};
18325        struct StructVisitor;
18326        impl<'de> Visitor<'de> for StructVisitor {
18327            type Value = MembersRecoverArg;
18328            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18329                f.write_str("a MembersRecoverArg struct")
18330            }
18331            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18332                MembersRecoverArg::internal_deserialize(map)
18333            }
18334        }
18335        deserializer.deserialize_struct("MembersRecoverArg", MEMBERS_RECOVER_ARG_FIELDS, StructVisitor)
18336    }
18337}
18338
18339impl ::serde::ser::Serialize for MembersRecoverArg {
18340    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18341        // struct serializer
18342        use serde::ser::SerializeStruct;
18343        let mut s = serializer.serialize_struct("MembersRecoverArg", 1)?;
18344        self.internal_serialize::<S>(&mut s)?;
18345        s.end()
18346    }
18347}
18348
18349#[derive(Debug, Clone, PartialEq, Eq)]
18350#[non_exhaustive] // variants may be added in the future
18351pub enum MembersRecoverError {
18352    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18353    /// this team.
18354    UserNotFound,
18355    /// The user is not recoverable.
18356    UserUnrecoverable,
18357    /// The user is not a member of the team.
18358    UserNotInTeam,
18359    /// Team is full. The organization has no available licenses.
18360    TeamLicenseLimit,
18361    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18362    /// typically indicates that this SDK version is out of date.
18363    Other,
18364}
18365
18366impl<'de> ::serde::de::Deserialize<'de> for MembersRecoverError {
18367    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18368        // union deserializer
18369        use serde::de::{self, MapAccess, Visitor};
18370        struct EnumVisitor;
18371        impl<'de> Visitor<'de> for EnumVisitor {
18372            type Value = MembersRecoverError;
18373            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18374                f.write_str("a MembersRecoverError structure")
18375            }
18376            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18377                let tag: &str = match map.next_key()? {
18378                    Some(".tag") => map.next_value()?,
18379                    _ => return Err(de::Error::missing_field(".tag"))
18380                };
18381                let value = match tag {
18382                    "user_not_found" => MembersRecoverError::UserNotFound,
18383                    "user_unrecoverable" => MembersRecoverError::UserUnrecoverable,
18384                    "user_not_in_team" => MembersRecoverError::UserNotInTeam,
18385                    "team_license_limit" => MembersRecoverError::TeamLicenseLimit,
18386                    _ => MembersRecoverError::Other,
18387                };
18388                crate::eat_json_fields(&mut map)?;
18389                Ok(value)
18390            }
18391        }
18392        const VARIANTS: &[&str] = &["user_not_found",
18393                                    "user_unrecoverable",
18394                                    "user_not_in_team",
18395                                    "team_license_limit",
18396                                    "other"];
18397        deserializer.deserialize_struct("MembersRecoverError", VARIANTS, EnumVisitor)
18398    }
18399}
18400
18401impl ::serde::ser::Serialize for MembersRecoverError {
18402    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18403        // union serializer
18404        use serde::ser::SerializeStruct;
18405        match self {
18406            MembersRecoverError::UserNotFound => {
18407                // unit
18408                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
18409                s.serialize_field(".tag", "user_not_found")?;
18410                s.end()
18411            }
18412            MembersRecoverError::UserUnrecoverable => {
18413                // unit
18414                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
18415                s.serialize_field(".tag", "user_unrecoverable")?;
18416                s.end()
18417            }
18418            MembersRecoverError::UserNotInTeam => {
18419                // unit
18420                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
18421                s.serialize_field(".tag", "user_not_in_team")?;
18422                s.end()
18423            }
18424            MembersRecoverError::TeamLicenseLimit => {
18425                // unit
18426                let mut s = serializer.serialize_struct("MembersRecoverError", 1)?;
18427                s.serialize_field(".tag", "team_license_limit")?;
18428                s.end()
18429            }
18430            MembersRecoverError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
18431        }
18432    }
18433}
18434
18435impl ::std::error::Error for MembersRecoverError {
18436}
18437
18438impl ::std::fmt::Display for MembersRecoverError {
18439    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18440        match self {
18441            MembersRecoverError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
18442            MembersRecoverError::UserUnrecoverable => f.write_str("The user is not recoverable."),
18443            MembersRecoverError::UserNotInTeam => f.write_str("The user is not a member of the team."),
18444            MembersRecoverError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
18445            _ => write!(f, "{:?}", *self),
18446        }
18447    }
18448}
18449
18450// union extends UserSelectorError
18451impl From<UserSelectorError> for MembersRecoverError {
18452    fn from(parent: UserSelectorError) -> Self {
18453        match parent {
18454            UserSelectorError::UserNotFound => MembersRecoverError::UserNotFound,
18455        }
18456    }
18457}
18458#[derive(Debug, Clone, PartialEq, Eq)]
18459#[non_exhaustive] // structs may have more fields added in the future.
18460pub struct MembersRemoveArg {
18461    /// Identity of user to remove/suspend/have their files moved.
18462    pub user: UserSelectorArg,
18463    /// If provided, controls if the user's data will be deleted on their linked devices.
18464    pub wipe_data: bool,
18465    /// If provided, files from the deleted member account will be transferred to this user.
18466    pub transfer_dest_id: Option<UserSelectorArg>,
18467    /// If provided, errors during the transfer process will be sent via email to this user. If the
18468    /// transfer_dest_id argument was provided, then this argument must be provided as well.
18469    pub transfer_admin_id: Option<UserSelectorArg>,
18470    /// Downgrade the member to a Basic account. The user will retain the email address associated
18471    /// with their Dropbox account and data in their account that is not restricted to team members.
18472    /// In order to keep the account the argument `wipe_data` should be set to `false`.
18473    pub keep_account: bool,
18474    /// If provided, allows removed users to keep access to Dropbox folders (not Dropbox Paper
18475    /// folders) already explicitly shared with them (not via a group) when they are downgraded to a
18476    /// Basic account. Users will not retain access to folders that do not allow external sharing.
18477    /// In order to keep the sharing relationships, the arguments `wipe_data` should be set to
18478    /// `false` and `keep_account` should be set to `true`.
18479    pub retain_team_shares: bool,
18480    /// Permanently delete the data in the deleted member's account. After permanent deletion, the
18481    /// data is no longer available to be transferred to a different user.
18482    pub permanently_delete_files: bool,
18483}
18484
18485impl MembersRemoveArg {
18486    pub fn new(user: UserSelectorArg) -> Self {
18487        MembersRemoveArg {
18488            user,
18489            wipe_data: true,
18490            transfer_dest_id: None,
18491            transfer_admin_id: None,
18492            keep_account: false,
18493            retain_team_shares: false,
18494            permanently_delete_files: false,
18495        }
18496    }
18497
18498    pub fn with_wipe_data(mut self, value: bool) -> Self {
18499        self.wipe_data = value;
18500        self
18501    }
18502
18503    pub fn with_transfer_dest_id(mut self, value: UserSelectorArg) -> Self {
18504        self.transfer_dest_id = Some(value);
18505        self
18506    }
18507
18508    pub fn with_transfer_admin_id(mut self, value: UserSelectorArg) -> Self {
18509        self.transfer_admin_id = Some(value);
18510        self
18511    }
18512
18513    pub fn with_keep_account(mut self, value: bool) -> Self {
18514        self.keep_account = value;
18515        self
18516    }
18517
18518    pub fn with_retain_team_shares(mut self, value: bool) -> Self {
18519        self.retain_team_shares = value;
18520        self
18521    }
18522
18523    pub fn with_permanently_delete_files(mut self, value: bool) -> Self {
18524        self.permanently_delete_files = value;
18525        self
18526    }
18527}
18528
18529const MEMBERS_REMOVE_ARG_FIELDS: &[&str] = &["user",
18530                                             "wipe_data",
18531                                             "transfer_dest_id",
18532                                             "transfer_admin_id",
18533                                             "keep_account",
18534                                             "retain_team_shares",
18535                                             "permanently_delete_files"];
18536impl MembersRemoveArg {
18537    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
18538        map: V,
18539    ) -> Result<MembersRemoveArg, V::Error> {
18540        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
18541    }
18542
18543    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
18544        mut map: V,
18545        optional: bool,
18546    ) -> Result<Option<MembersRemoveArg>, V::Error> {
18547        let mut field_user = None;
18548        let mut field_wipe_data = None;
18549        let mut field_transfer_dest_id = None;
18550        let mut field_transfer_admin_id = None;
18551        let mut field_keep_account = None;
18552        let mut field_retain_team_shares = None;
18553        let mut field_permanently_delete_files = None;
18554        let mut nothing = true;
18555        while let Some(key) = map.next_key::<&str>()? {
18556            nothing = false;
18557            match key {
18558                "user" => {
18559                    if field_user.is_some() {
18560                        return Err(::serde::de::Error::duplicate_field("user"));
18561                    }
18562                    field_user = Some(map.next_value()?);
18563                }
18564                "wipe_data" => {
18565                    if field_wipe_data.is_some() {
18566                        return Err(::serde::de::Error::duplicate_field("wipe_data"));
18567                    }
18568                    field_wipe_data = Some(map.next_value()?);
18569                }
18570                "transfer_dest_id" => {
18571                    if field_transfer_dest_id.is_some() {
18572                        return Err(::serde::de::Error::duplicate_field("transfer_dest_id"));
18573                    }
18574                    field_transfer_dest_id = Some(map.next_value()?);
18575                }
18576                "transfer_admin_id" => {
18577                    if field_transfer_admin_id.is_some() {
18578                        return Err(::serde::de::Error::duplicate_field("transfer_admin_id"));
18579                    }
18580                    field_transfer_admin_id = Some(map.next_value()?);
18581                }
18582                "keep_account" => {
18583                    if field_keep_account.is_some() {
18584                        return Err(::serde::de::Error::duplicate_field("keep_account"));
18585                    }
18586                    field_keep_account = Some(map.next_value()?);
18587                }
18588                "retain_team_shares" => {
18589                    if field_retain_team_shares.is_some() {
18590                        return Err(::serde::de::Error::duplicate_field("retain_team_shares"));
18591                    }
18592                    field_retain_team_shares = Some(map.next_value()?);
18593                }
18594                "permanently_delete_files" => {
18595                    if field_permanently_delete_files.is_some() {
18596                        return Err(::serde::de::Error::duplicate_field("permanently_delete_files"));
18597                    }
18598                    field_permanently_delete_files = Some(map.next_value()?);
18599                }
18600                _ => {
18601                    // unknown field allowed and ignored
18602                    map.next_value::<::serde_json::Value>()?;
18603                }
18604            }
18605        }
18606        if optional && nothing {
18607            return Ok(None);
18608        }
18609        let result = MembersRemoveArg {
18610            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
18611            wipe_data: field_wipe_data.unwrap_or(true),
18612            transfer_dest_id: field_transfer_dest_id.and_then(Option::flatten),
18613            transfer_admin_id: field_transfer_admin_id.and_then(Option::flatten),
18614            keep_account: field_keep_account.unwrap_or(false),
18615            retain_team_shares: field_retain_team_shares.unwrap_or(false),
18616            permanently_delete_files: field_permanently_delete_files.unwrap_or(false),
18617        };
18618        Ok(Some(result))
18619    }
18620
18621    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
18622        &self,
18623        s: &mut S::SerializeStruct,
18624    ) -> Result<(), S::Error> {
18625        use serde::ser::SerializeStruct;
18626        s.serialize_field("user", &self.user)?;
18627        if !self.wipe_data {
18628            s.serialize_field("wipe_data", &self.wipe_data)?;
18629        }
18630        if let Some(val) = &self.transfer_dest_id {
18631            s.serialize_field("transfer_dest_id", val)?;
18632        }
18633        if let Some(val) = &self.transfer_admin_id {
18634            s.serialize_field("transfer_admin_id", val)?;
18635        }
18636        if self.keep_account {
18637            s.serialize_field("keep_account", &self.keep_account)?;
18638        }
18639        if self.retain_team_shares {
18640            s.serialize_field("retain_team_shares", &self.retain_team_shares)?;
18641        }
18642        if self.permanently_delete_files {
18643            s.serialize_field("permanently_delete_files", &self.permanently_delete_files)?;
18644        }
18645        Ok(())
18646    }
18647}
18648
18649impl<'de> ::serde::de::Deserialize<'de> for MembersRemoveArg {
18650    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18651        // struct deserializer
18652        use serde::de::{MapAccess, Visitor};
18653        struct StructVisitor;
18654        impl<'de> Visitor<'de> for StructVisitor {
18655            type Value = MembersRemoveArg;
18656            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18657                f.write_str("a MembersRemoveArg struct")
18658            }
18659            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
18660                MembersRemoveArg::internal_deserialize(map)
18661            }
18662        }
18663        deserializer.deserialize_struct("MembersRemoveArg", MEMBERS_REMOVE_ARG_FIELDS, StructVisitor)
18664    }
18665}
18666
18667impl ::serde::ser::Serialize for MembersRemoveArg {
18668    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18669        // struct serializer
18670        use serde::ser::SerializeStruct;
18671        let mut s = serializer.serialize_struct("MembersRemoveArg", 7)?;
18672        self.internal_serialize::<S>(&mut s)?;
18673        s.end()
18674    }
18675}
18676
18677// struct extends MembersDeactivateArg
18678impl From<MembersRemoveArg> for MembersDeactivateArg {
18679    fn from(subtype: MembersRemoveArg) -> Self {
18680        Self {
18681            user: subtype.user,
18682            wipe_data: subtype.wipe_data,
18683        }
18684    }
18685}
18686#[derive(Debug, Clone, PartialEq, Eq)]
18687#[non_exhaustive] // variants may be added in the future
18688pub enum MembersRemoveError {
18689    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
18690    /// this team.
18691    UserNotFound,
18692    /// The user is not a member of the team.
18693    UserNotInTeam,
18694    /// Cannot permanently delete files while it's being transferred.
18695    TransferInProgress,
18696    /// Cannot permanently delete files that have already been transferred.
18697    AlreadyTransferred,
18698    /// Cannot permanently delete files that have already been transferred or deleted.
18699    AlreadyTransferredOrDeleted,
18700    /// Expected removed user and transfer_dest user to be different.
18701    RemovedAndTransferDestShouldDiffer,
18702    /// Expected removed user and transfer_admin user to be different.
18703    RemovedAndTransferAdminShouldDiffer,
18704    /// No matching user found for the argument transfer_dest_id.
18705    TransferDestUserNotFound,
18706    /// The provided transfer_dest_id does not exist on this team.
18707    TransferDestUserNotInTeam,
18708    /// The provided transfer_admin_id does not exist on this team.
18709    TransferAdminUserNotInTeam,
18710    /// No matching user found for the argument transfer_admin_id.
18711    TransferAdminUserNotFound,
18712    /// The transfer_admin_id argument must be provided when file transfer is requested.
18713    UnspecifiedTransferAdminId,
18714    /// Specified transfer_admin user is not a team admin.
18715    TransferAdminIsNotAdmin,
18716    /// The recipient user's email is not verified.
18717    RecipientNotVerified,
18718    /// The user is the last admin of the team, so it cannot be removed from it.
18719    RemoveLastAdmin,
18720    /// Cannot keep account and transfer the data to another user at the same time.
18721    CannotKeepAccountAndTransfer,
18722    /// Cannot keep account and delete the data at the same time. To keep the account the argument
18723    /// wipe_data should be set to `false`.
18724    CannotKeepAccountAndDeleteData,
18725    /// Cannot keep account and permanently delete the data at the same time. To keep the account
18726    /// the argument permanently_delete_files should be set to `false`.
18727    CannotKeepAccountAndPermanentlyDelete,
18728    /// The email address of the user is too long to be disabled.
18729    EmailAddressTooLongToBeDisabled,
18730    /// Cannot keep account of an invited user.
18731    CannotKeepInvitedUserAccount,
18732    /// Cannot retain team shares when the user's data is marked for deletion on their linked
18733    /// devices. The argument wipe_data should be set to `false`.
18734    CannotRetainSharesWhenDataWiped,
18735    /// The user's account must be kept in order to retain team shares. The argument keep_account
18736    /// should be set to `true`.
18737    CannotRetainSharesWhenNoAccountKept,
18738    /// Externally sharing files, folders, and links must be enabled in team settings in order to
18739    /// retain team shares for the user.
18740    CannotRetainSharesWhenTeamExternalSharingOff,
18741    /// Only a team admin, can convert this account to a Basic account.
18742    CannotKeepAccount,
18743    /// This user content is currently being held. To convert this member's account to a Basic
18744    /// account, you'll first need to remove them from the hold.
18745    CannotKeepAccountUnderLegalHold,
18746    /// To convert this member to a Basic account, they'll first need to sign in to Dropbox and
18747    /// agree to the terms of service.
18748    CannotKeepAccountRequiredToSignTos,
18749    /// Cannot permanently delete files and transfer the data to another user at the same time.
18750    CannotPermanentlyDeleteAndTransfer,
18751    /// This user is the active destination of an in-progress file transfer. Wait for the transfer
18752    /// to complete before removing this member.
18753    MemberIsTransferDestination,
18754    /// Catch-all used for unrecognized values returned from the server. Encountering this value
18755    /// typically indicates that this SDK version is out of date.
18756    Other,
18757}
18758
18759impl<'de> ::serde::de::Deserialize<'de> for MembersRemoveError {
18760    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
18761        // union deserializer
18762        use serde::de::{self, MapAccess, Visitor};
18763        struct EnumVisitor;
18764        impl<'de> Visitor<'de> for EnumVisitor {
18765            type Value = MembersRemoveError;
18766            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
18767                f.write_str("a MembersRemoveError structure")
18768            }
18769            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
18770                let tag: &str = match map.next_key()? {
18771                    Some(".tag") => map.next_value()?,
18772                    _ => return Err(de::Error::missing_field(".tag"))
18773                };
18774                let value = match tag {
18775                    "user_not_found" => MembersRemoveError::UserNotFound,
18776                    "user_not_in_team" => MembersRemoveError::UserNotInTeam,
18777                    "transfer_in_progress" => MembersRemoveError::TransferInProgress,
18778                    "already_transferred" => MembersRemoveError::AlreadyTransferred,
18779                    "already_transferred_or_deleted" => MembersRemoveError::AlreadyTransferredOrDeleted,
18780                    "removed_and_transfer_dest_should_differ" => MembersRemoveError::RemovedAndTransferDestShouldDiffer,
18781                    "removed_and_transfer_admin_should_differ" => MembersRemoveError::RemovedAndTransferAdminShouldDiffer,
18782                    "transfer_dest_user_not_found" => MembersRemoveError::TransferDestUserNotFound,
18783                    "transfer_dest_user_not_in_team" => MembersRemoveError::TransferDestUserNotInTeam,
18784                    "transfer_admin_user_not_in_team" => MembersRemoveError::TransferAdminUserNotInTeam,
18785                    "transfer_admin_user_not_found" => MembersRemoveError::TransferAdminUserNotFound,
18786                    "unspecified_transfer_admin_id" => MembersRemoveError::UnspecifiedTransferAdminId,
18787                    "transfer_admin_is_not_admin" => MembersRemoveError::TransferAdminIsNotAdmin,
18788                    "recipient_not_verified" => MembersRemoveError::RecipientNotVerified,
18789                    "remove_last_admin" => MembersRemoveError::RemoveLastAdmin,
18790                    "cannot_keep_account_and_transfer" => MembersRemoveError::CannotKeepAccountAndTransfer,
18791                    "cannot_keep_account_and_delete_data" => MembersRemoveError::CannotKeepAccountAndDeleteData,
18792                    "cannot_keep_account_and_permanently_delete" => MembersRemoveError::CannotKeepAccountAndPermanentlyDelete,
18793                    "email_address_too_long_to_be_disabled" => MembersRemoveError::EmailAddressTooLongToBeDisabled,
18794                    "cannot_keep_invited_user_account" => MembersRemoveError::CannotKeepInvitedUserAccount,
18795                    "cannot_retain_shares_when_data_wiped" => MembersRemoveError::CannotRetainSharesWhenDataWiped,
18796                    "cannot_retain_shares_when_no_account_kept" => MembersRemoveError::CannotRetainSharesWhenNoAccountKept,
18797                    "cannot_retain_shares_when_team_external_sharing_off" => MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff,
18798                    "cannot_keep_account" => MembersRemoveError::CannotKeepAccount,
18799                    "cannot_keep_account_under_legal_hold" => MembersRemoveError::CannotKeepAccountUnderLegalHold,
18800                    "cannot_keep_account_required_to_sign_tos" => MembersRemoveError::CannotKeepAccountRequiredToSignTos,
18801                    "cannot_permanently_delete_and_transfer" => MembersRemoveError::CannotPermanentlyDeleteAndTransfer,
18802                    "member_is_transfer_destination" => MembersRemoveError::MemberIsTransferDestination,
18803                    _ => MembersRemoveError::Other,
18804                };
18805                crate::eat_json_fields(&mut map)?;
18806                Ok(value)
18807            }
18808        }
18809        const VARIANTS: &[&str] = &["user_not_found",
18810                                    "user_not_in_team",
18811                                    "other",
18812                                    "transfer_in_progress",
18813                                    "already_transferred",
18814                                    "already_transferred_or_deleted",
18815                                    "removed_and_transfer_dest_should_differ",
18816                                    "removed_and_transfer_admin_should_differ",
18817                                    "transfer_dest_user_not_found",
18818                                    "transfer_dest_user_not_in_team",
18819                                    "transfer_admin_user_not_in_team",
18820                                    "transfer_admin_user_not_found",
18821                                    "unspecified_transfer_admin_id",
18822                                    "transfer_admin_is_not_admin",
18823                                    "recipient_not_verified",
18824                                    "remove_last_admin",
18825                                    "cannot_keep_account_and_transfer",
18826                                    "cannot_keep_account_and_delete_data",
18827                                    "cannot_keep_account_and_permanently_delete",
18828                                    "email_address_too_long_to_be_disabled",
18829                                    "cannot_keep_invited_user_account",
18830                                    "cannot_retain_shares_when_data_wiped",
18831                                    "cannot_retain_shares_when_no_account_kept",
18832                                    "cannot_retain_shares_when_team_external_sharing_off",
18833                                    "cannot_keep_account",
18834                                    "cannot_keep_account_under_legal_hold",
18835                                    "cannot_keep_account_required_to_sign_tos",
18836                                    "cannot_permanently_delete_and_transfer",
18837                                    "member_is_transfer_destination"];
18838        deserializer.deserialize_struct("MembersRemoveError", VARIANTS, EnumVisitor)
18839    }
18840}
18841
18842impl ::serde::ser::Serialize for MembersRemoveError {
18843    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
18844        // union serializer
18845        use serde::ser::SerializeStruct;
18846        match self {
18847            MembersRemoveError::UserNotFound => {
18848                // unit
18849                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18850                s.serialize_field(".tag", "user_not_found")?;
18851                s.end()
18852            }
18853            MembersRemoveError::UserNotInTeam => {
18854                // unit
18855                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18856                s.serialize_field(".tag", "user_not_in_team")?;
18857                s.end()
18858            }
18859            MembersRemoveError::TransferInProgress => {
18860                // unit
18861                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18862                s.serialize_field(".tag", "transfer_in_progress")?;
18863                s.end()
18864            }
18865            MembersRemoveError::AlreadyTransferred => {
18866                // unit
18867                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18868                s.serialize_field(".tag", "already_transferred")?;
18869                s.end()
18870            }
18871            MembersRemoveError::AlreadyTransferredOrDeleted => {
18872                // unit
18873                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18874                s.serialize_field(".tag", "already_transferred_or_deleted")?;
18875                s.end()
18876            }
18877            MembersRemoveError::RemovedAndTransferDestShouldDiffer => {
18878                // unit
18879                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18880                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
18881                s.end()
18882            }
18883            MembersRemoveError::RemovedAndTransferAdminShouldDiffer => {
18884                // unit
18885                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18886                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
18887                s.end()
18888            }
18889            MembersRemoveError::TransferDestUserNotFound => {
18890                // unit
18891                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18892                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
18893                s.end()
18894            }
18895            MembersRemoveError::TransferDestUserNotInTeam => {
18896                // unit
18897                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18898                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
18899                s.end()
18900            }
18901            MembersRemoveError::TransferAdminUserNotInTeam => {
18902                // unit
18903                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18904                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
18905                s.end()
18906            }
18907            MembersRemoveError::TransferAdminUserNotFound => {
18908                // unit
18909                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18910                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
18911                s.end()
18912            }
18913            MembersRemoveError::UnspecifiedTransferAdminId => {
18914                // unit
18915                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18916                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
18917                s.end()
18918            }
18919            MembersRemoveError::TransferAdminIsNotAdmin => {
18920                // unit
18921                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18922                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
18923                s.end()
18924            }
18925            MembersRemoveError::RecipientNotVerified => {
18926                // unit
18927                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18928                s.serialize_field(".tag", "recipient_not_verified")?;
18929                s.end()
18930            }
18931            MembersRemoveError::RemoveLastAdmin => {
18932                // unit
18933                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18934                s.serialize_field(".tag", "remove_last_admin")?;
18935                s.end()
18936            }
18937            MembersRemoveError::CannotKeepAccountAndTransfer => {
18938                // unit
18939                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18940                s.serialize_field(".tag", "cannot_keep_account_and_transfer")?;
18941                s.end()
18942            }
18943            MembersRemoveError::CannotKeepAccountAndDeleteData => {
18944                // unit
18945                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18946                s.serialize_field(".tag", "cannot_keep_account_and_delete_data")?;
18947                s.end()
18948            }
18949            MembersRemoveError::CannotKeepAccountAndPermanentlyDelete => {
18950                // unit
18951                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18952                s.serialize_field(".tag", "cannot_keep_account_and_permanently_delete")?;
18953                s.end()
18954            }
18955            MembersRemoveError::EmailAddressTooLongToBeDisabled => {
18956                // unit
18957                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18958                s.serialize_field(".tag", "email_address_too_long_to_be_disabled")?;
18959                s.end()
18960            }
18961            MembersRemoveError::CannotKeepInvitedUserAccount => {
18962                // unit
18963                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18964                s.serialize_field(".tag", "cannot_keep_invited_user_account")?;
18965                s.end()
18966            }
18967            MembersRemoveError::CannotRetainSharesWhenDataWiped => {
18968                // unit
18969                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18970                s.serialize_field(".tag", "cannot_retain_shares_when_data_wiped")?;
18971                s.end()
18972            }
18973            MembersRemoveError::CannotRetainSharesWhenNoAccountKept => {
18974                // unit
18975                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18976                s.serialize_field(".tag", "cannot_retain_shares_when_no_account_kept")?;
18977                s.end()
18978            }
18979            MembersRemoveError::CannotRetainSharesWhenTeamExternalSharingOff => {
18980                // unit
18981                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18982                s.serialize_field(".tag", "cannot_retain_shares_when_team_external_sharing_off")?;
18983                s.end()
18984            }
18985            MembersRemoveError::CannotKeepAccount => {
18986                // unit
18987                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18988                s.serialize_field(".tag", "cannot_keep_account")?;
18989                s.end()
18990            }
18991            MembersRemoveError::CannotKeepAccountUnderLegalHold => {
18992                // unit
18993                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
18994                s.serialize_field(".tag", "cannot_keep_account_under_legal_hold")?;
18995                s.end()
18996            }
18997            MembersRemoveError::CannotKeepAccountRequiredToSignTos => {
18998                // unit
18999                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19000                s.serialize_field(".tag", "cannot_keep_account_required_to_sign_tos")?;
19001                s.end()
19002            }
19003            MembersRemoveError::CannotPermanentlyDeleteAndTransfer => {
19004                // unit
19005                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19006                s.serialize_field(".tag", "cannot_permanently_delete_and_transfer")?;
19007                s.end()
19008            }
19009            MembersRemoveError::MemberIsTransferDestination => {
19010                // unit
19011                let mut s = serializer.serialize_struct("MembersRemoveError", 1)?;
19012                s.serialize_field(".tag", "member_is_transfer_destination")?;
19013                s.end()
19014            }
19015            MembersRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19016        }
19017    }
19018}
19019
19020impl ::std::error::Error for MembersRemoveError {
19021}
19022
19023impl ::std::fmt::Display for MembersRemoveError {
19024    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19025        match self {
19026            MembersRemoveError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19027            MembersRemoveError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19028            MembersRemoveError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
19029            MembersRemoveError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
19030            MembersRemoveError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
19031            MembersRemoveError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
19032            MembersRemoveError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
19033            MembersRemoveError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
19034            MembersRemoveError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
19035            MembersRemoveError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
19036            MembersRemoveError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
19037            MembersRemoveError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
19038            MembersRemoveError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
19039            MembersRemoveError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
19040            MembersRemoveError::RemoveLastAdmin => f.write_str("The user is the last admin of the team, so it cannot be removed from it."),
19041            MembersRemoveError::CannotKeepAccountAndTransfer => f.write_str("Cannot keep account and transfer the data to another user at the same time."),
19042            MembersRemoveError::EmailAddressTooLongToBeDisabled => f.write_str("The email address of the user is too long to be disabled."),
19043            MembersRemoveError::CannotKeepInvitedUserAccount => f.write_str("Cannot keep account of an invited user."),
19044            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."),
19045            MembersRemoveError::CannotKeepAccount => f.write_str("Only a team admin, can convert this account to a Basic account."),
19046            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."),
19047            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."),
19048            MembersRemoveError::CannotPermanentlyDeleteAndTransfer => f.write_str("Cannot permanently delete files and transfer the data to another user at the same time."),
19049            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."),
19050            _ => write!(f, "{:?}", *self),
19051        }
19052    }
19053}
19054
19055// union extends MembersTransferFilesError
19056impl From<MembersTransferFilesError> for MembersRemoveError {
19057    fn from(parent: MembersTransferFilesError) -> Self {
19058        match parent {
19059            MembersTransferFilesError::UserNotFound => MembersRemoveError::UserNotFound,
19060            MembersTransferFilesError::UserNotInTeam => MembersRemoveError::UserNotInTeam,
19061            MembersTransferFilesError::Other => MembersRemoveError::Other,
19062            MembersTransferFilesError::TransferInProgress => MembersRemoveError::TransferInProgress,
19063            MembersTransferFilesError::AlreadyTransferred => MembersRemoveError::AlreadyTransferred,
19064            MembersTransferFilesError::AlreadyTransferredOrDeleted => MembersRemoveError::AlreadyTransferredOrDeleted,
19065            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => MembersRemoveError::RemovedAndTransferDestShouldDiffer,
19066            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => MembersRemoveError::RemovedAndTransferAdminShouldDiffer,
19067            MembersTransferFilesError::TransferDestUserNotFound => MembersRemoveError::TransferDestUserNotFound,
19068            MembersTransferFilesError::TransferDestUserNotInTeam => MembersRemoveError::TransferDestUserNotInTeam,
19069            MembersTransferFilesError::TransferAdminUserNotInTeam => MembersRemoveError::TransferAdminUserNotInTeam,
19070            MembersTransferFilesError::TransferAdminUserNotFound => MembersRemoveError::TransferAdminUserNotFound,
19071            MembersTransferFilesError::UnspecifiedTransferAdminId => MembersRemoveError::UnspecifiedTransferAdminId,
19072            MembersTransferFilesError::TransferAdminIsNotAdmin => MembersRemoveError::TransferAdminIsNotAdmin,
19073            MembersTransferFilesError::RecipientNotVerified => MembersRemoveError::RecipientNotVerified,
19074        }
19075    }
19076}
19077
19078#[derive(Debug, Clone, PartialEq, Eq)]
19079#[non_exhaustive] // variants may be added in the future
19080pub enum MembersSendWelcomeError {
19081    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19082    /// this team.
19083    UserNotFound,
19084    /// The user is not a member of the team.
19085    UserNotInTeam,
19086    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19087    /// typically indicates that this SDK version is out of date.
19088    Other,
19089}
19090
19091impl<'de> ::serde::de::Deserialize<'de> for MembersSendWelcomeError {
19092    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19093        // union deserializer
19094        use serde::de::{self, MapAccess, Visitor};
19095        struct EnumVisitor;
19096        impl<'de> Visitor<'de> for EnumVisitor {
19097            type Value = MembersSendWelcomeError;
19098            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19099                f.write_str("a MembersSendWelcomeError structure")
19100            }
19101            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19102                let tag: &str = match map.next_key()? {
19103                    Some(".tag") => map.next_value()?,
19104                    _ => return Err(de::Error::missing_field(".tag"))
19105                };
19106                let value = match tag {
19107                    "user_not_found" => MembersSendWelcomeError::UserNotFound,
19108                    "user_not_in_team" => MembersSendWelcomeError::UserNotInTeam,
19109                    _ => MembersSendWelcomeError::Other,
19110                };
19111                crate::eat_json_fields(&mut map)?;
19112                Ok(value)
19113            }
19114        }
19115        const VARIANTS: &[&str] = &["user_not_found",
19116                                    "user_not_in_team",
19117                                    "other"];
19118        deserializer.deserialize_struct("MembersSendWelcomeError", VARIANTS, EnumVisitor)
19119    }
19120}
19121
19122impl ::serde::ser::Serialize for MembersSendWelcomeError {
19123    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19124        // union serializer
19125        use serde::ser::SerializeStruct;
19126        match self {
19127            MembersSendWelcomeError::UserNotFound => {
19128                // unit
19129                let mut s = serializer.serialize_struct("MembersSendWelcomeError", 1)?;
19130                s.serialize_field(".tag", "user_not_found")?;
19131                s.end()
19132            }
19133            MembersSendWelcomeError::UserNotInTeam => {
19134                // unit
19135                let mut s = serializer.serialize_struct("MembersSendWelcomeError", 1)?;
19136                s.serialize_field(".tag", "user_not_in_team")?;
19137                s.end()
19138            }
19139            MembersSendWelcomeError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19140        }
19141    }
19142}
19143
19144impl ::std::error::Error for MembersSendWelcomeError {
19145}
19146
19147impl ::std::fmt::Display for MembersSendWelcomeError {
19148    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19149        match self {
19150            MembersSendWelcomeError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19151            MembersSendWelcomeError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19152            _ => write!(f, "{:?}", *self),
19153        }
19154    }
19155}
19156
19157// union extends MemberSelectorError
19158impl From<MemberSelectorError> for MembersSendWelcomeError {
19159    fn from(parent: MemberSelectorError) -> Self {
19160        match parent {
19161            MemberSelectorError::UserNotFound => MembersSendWelcomeError::UserNotFound,
19162            MemberSelectorError::UserNotInTeam => MembersSendWelcomeError::UserNotInTeam,
19163        }
19164    }
19165}
19166/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
19167/// account.
19168#[derive(Debug, Clone, PartialEq, Eq)]
19169#[non_exhaustive] // structs may have more fields added in the future.
19170pub struct MembersSetPermissions2Arg {
19171    /// Identity of user whose role will be set.
19172    pub user: UserSelectorArg,
19173    /// The new roles for the member. Send empty list to make user member only. For now, only up to
19174    /// one role is allowed.
19175    pub new_roles: Option<Vec<TeamMemberRoleId>>,
19176}
19177
19178impl MembersSetPermissions2Arg {
19179    pub fn new(user: UserSelectorArg) -> Self {
19180        MembersSetPermissions2Arg {
19181            user,
19182            new_roles: None,
19183        }
19184    }
19185
19186    pub fn with_new_roles(mut self, value: Vec<TeamMemberRoleId>) -> Self {
19187        self.new_roles = Some(value);
19188        self
19189    }
19190}
19191
19192const MEMBERS_SET_PERMISSIONS2_ARG_FIELDS: &[&str] = &["user",
19193                                                       "new_roles"];
19194impl MembersSetPermissions2Arg {
19195    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19196        map: V,
19197    ) -> Result<MembersSetPermissions2Arg, V::Error> {
19198        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19199    }
19200
19201    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19202        mut map: V,
19203        optional: bool,
19204    ) -> Result<Option<MembersSetPermissions2Arg>, V::Error> {
19205        let mut field_user = None;
19206        let mut field_new_roles = None;
19207        let mut nothing = true;
19208        while let Some(key) = map.next_key::<&str>()? {
19209            nothing = false;
19210            match key {
19211                "user" => {
19212                    if field_user.is_some() {
19213                        return Err(::serde::de::Error::duplicate_field("user"));
19214                    }
19215                    field_user = Some(map.next_value()?);
19216                }
19217                "new_roles" => {
19218                    if field_new_roles.is_some() {
19219                        return Err(::serde::de::Error::duplicate_field("new_roles"));
19220                    }
19221                    field_new_roles = Some(map.next_value()?);
19222                }
19223                _ => {
19224                    // unknown field allowed and ignored
19225                    map.next_value::<::serde_json::Value>()?;
19226                }
19227            }
19228        }
19229        if optional && nothing {
19230            return Ok(None);
19231        }
19232        let result = MembersSetPermissions2Arg {
19233            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19234            new_roles: field_new_roles.and_then(Option::flatten),
19235        };
19236        Ok(Some(result))
19237    }
19238
19239    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19240        &self,
19241        s: &mut S::SerializeStruct,
19242    ) -> Result<(), S::Error> {
19243        use serde::ser::SerializeStruct;
19244        s.serialize_field("user", &self.user)?;
19245        if let Some(val) = &self.new_roles {
19246            s.serialize_field("new_roles", val)?;
19247        }
19248        Ok(())
19249    }
19250}
19251
19252impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Arg {
19253    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19254        // struct deserializer
19255        use serde::de::{MapAccess, Visitor};
19256        struct StructVisitor;
19257        impl<'de> Visitor<'de> for StructVisitor {
19258            type Value = MembersSetPermissions2Arg;
19259            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19260                f.write_str("a MembersSetPermissions2Arg struct")
19261            }
19262            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19263                MembersSetPermissions2Arg::internal_deserialize(map)
19264            }
19265        }
19266        deserializer.deserialize_struct("MembersSetPermissions2Arg", MEMBERS_SET_PERMISSIONS2_ARG_FIELDS, StructVisitor)
19267    }
19268}
19269
19270impl ::serde::ser::Serialize for MembersSetPermissions2Arg {
19271    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19272        // struct serializer
19273        use serde::ser::SerializeStruct;
19274        let mut s = serializer.serialize_struct("MembersSetPermissions2Arg", 2)?;
19275        self.internal_serialize::<S>(&mut s)?;
19276        s.end()
19277    }
19278}
19279
19280#[derive(Debug, Clone, PartialEq, Eq)]
19281#[non_exhaustive] // variants may be added in the future
19282pub enum MembersSetPermissions2Error {
19283    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19284    /// this team.
19285    UserNotFound,
19286    /// Cannot remove the admin setting of the last admin.
19287    LastAdmin,
19288    /// The user is not a member of the team.
19289    UserNotInTeam,
19290    /// Cannot remove/grant permissions. This can happen if the team member is suspended.
19291    CannotSetPermissions,
19292    /// No matching role found. At least one of the provided new_roles does not exist on this team.
19293    RoleNotFound,
19294    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19295    /// typically indicates that this SDK version is out of date.
19296    Other,
19297}
19298
19299impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Error {
19300    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19301        // union deserializer
19302        use serde::de::{self, MapAccess, Visitor};
19303        struct EnumVisitor;
19304        impl<'de> Visitor<'de> for EnumVisitor {
19305            type Value = MembersSetPermissions2Error;
19306            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19307                f.write_str("a MembersSetPermissions2Error structure")
19308            }
19309            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19310                let tag: &str = match map.next_key()? {
19311                    Some(".tag") => map.next_value()?,
19312                    _ => return Err(de::Error::missing_field(".tag"))
19313                };
19314                let value = match tag {
19315                    "user_not_found" => MembersSetPermissions2Error::UserNotFound,
19316                    "last_admin" => MembersSetPermissions2Error::LastAdmin,
19317                    "user_not_in_team" => MembersSetPermissions2Error::UserNotInTeam,
19318                    "cannot_set_permissions" => MembersSetPermissions2Error::CannotSetPermissions,
19319                    "role_not_found" => MembersSetPermissions2Error::RoleNotFound,
19320                    _ => MembersSetPermissions2Error::Other,
19321                };
19322                crate::eat_json_fields(&mut map)?;
19323                Ok(value)
19324            }
19325        }
19326        const VARIANTS: &[&str] = &["user_not_found",
19327                                    "last_admin",
19328                                    "user_not_in_team",
19329                                    "cannot_set_permissions",
19330                                    "role_not_found",
19331                                    "other"];
19332        deserializer.deserialize_struct("MembersSetPermissions2Error", VARIANTS, EnumVisitor)
19333    }
19334}
19335
19336impl ::serde::ser::Serialize for MembersSetPermissions2Error {
19337    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19338        // union serializer
19339        use serde::ser::SerializeStruct;
19340        match self {
19341            MembersSetPermissions2Error::UserNotFound => {
19342                // unit
19343                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19344                s.serialize_field(".tag", "user_not_found")?;
19345                s.end()
19346            }
19347            MembersSetPermissions2Error::LastAdmin => {
19348                // unit
19349                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19350                s.serialize_field(".tag", "last_admin")?;
19351                s.end()
19352            }
19353            MembersSetPermissions2Error::UserNotInTeam => {
19354                // unit
19355                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19356                s.serialize_field(".tag", "user_not_in_team")?;
19357                s.end()
19358            }
19359            MembersSetPermissions2Error::CannotSetPermissions => {
19360                // unit
19361                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19362                s.serialize_field(".tag", "cannot_set_permissions")?;
19363                s.end()
19364            }
19365            MembersSetPermissions2Error::RoleNotFound => {
19366                // unit
19367                let mut s = serializer.serialize_struct("MembersSetPermissions2Error", 1)?;
19368                s.serialize_field(".tag", "role_not_found")?;
19369                s.end()
19370            }
19371            MembersSetPermissions2Error::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19372        }
19373    }
19374}
19375
19376impl ::std::error::Error for MembersSetPermissions2Error {
19377}
19378
19379impl ::std::fmt::Display for MembersSetPermissions2Error {
19380    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19381        match self {
19382            MembersSetPermissions2Error::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19383            MembersSetPermissions2Error::LastAdmin => f.write_str("Cannot remove the admin setting of the last admin."),
19384            MembersSetPermissions2Error::UserNotInTeam => f.write_str("The user is not a member of the team."),
19385            MembersSetPermissions2Error::CannotSetPermissions => f.write_str("Cannot remove/grant permissions. This can happen if the team member is suspended."),
19386            MembersSetPermissions2Error::RoleNotFound => f.write_str("No matching role found. At least one of the provided new_roles does not exist on this team."),
19387            _ => write!(f, "{:?}", *self),
19388        }
19389    }
19390}
19391
19392// union extends UserSelectorError
19393impl From<UserSelectorError> for MembersSetPermissions2Error {
19394    fn from(parent: UserSelectorError) -> Self {
19395        match parent {
19396            UserSelectorError::UserNotFound => MembersSetPermissions2Error::UserNotFound,
19397        }
19398    }
19399}
19400#[derive(Debug, Clone, PartialEq, Eq)]
19401#[non_exhaustive] // structs may have more fields added in the future.
19402pub struct MembersSetPermissions2Result {
19403    /// The member ID of the user to which the change was applied.
19404    pub team_member_id: crate::types::team_common::TeamMemberId,
19405    /// The roles after the change. Empty in case the user become a non-admin.
19406    pub roles: Option<Vec<TeamMemberRole>>,
19407}
19408
19409impl MembersSetPermissions2Result {
19410    pub fn new(team_member_id: crate::types::team_common::TeamMemberId) -> Self {
19411        MembersSetPermissions2Result {
19412            team_member_id,
19413            roles: None,
19414        }
19415    }
19416
19417    pub fn with_roles(mut self, value: Vec<TeamMemberRole>) -> Self {
19418        self.roles = Some(value);
19419        self
19420    }
19421}
19422
19423const MEMBERS_SET_PERMISSIONS2_RESULT_FIELDS: &[&str] = &["team_member_id",
19424                                                          "roles"];
19425impl MembersSetPermissions2Result {
19426    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19427        map: V,
19428    ) -> Result<MembersSetPermissions2Result, V::Error> {
19429        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19430    }
19431
19432    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19433        mut map: V,
19434        optional: bool,
19435    ) -> Result<Option<MembersSetPermissions2Result>, V::Error> {
19436        let mut field_team_member_id = None;
19437        let mut field_roles = None;
19438        let mut nothing = true;
19439        while let Some(key) = map.next_key::<&str>()? {
19440            nothing = false;
19441            match key {
19442                "team_member_id" => {
19443                    if field_team_member_id.is_some() {
19444                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
19445                    }
19446                    field_team_member_id = Some(map.next_value()?);
19447                }
19448                "roles" => {
19449                    if field_roles.is_some() {
19450                        return Err(::serde::de::Error::duplicate_field("roles"));
19451                    }
19452                    field_roles = Some(map.next_value()?);
19453                }
19454                _ => {
19455                    // unknown field allowed and ignored
19456                    map.next_value::<::serde_json::Value>()?;
19457                }
19458            }
19459        }
19460        if optional && nothing {
19461            return Ok(None);
19462        }
19463        let result = MembersSetPermissions2Result {
19464            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
19465            roles: field_roles.and_then(Option::flatten),
19466        };
19467        Ok(Some(result))
19468    }
19469
19470    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19471        &self,
19472        s: &mut S::SerializeStruct,
19473    ) -> Result<(), S::Error> {
19474        use serde::ser::SerializeStruct;
19475        s.serialize_field("team_member_id", &self.team_member_id)?;
19476        if let Some(val) = &self.roles {
19477            s.serialize_field("roles", val)?;
19478        }
19479        Ok(())
19480    }
19481}
19482
19483impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissions2Result {
19484    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19485        // struct deserializer
19486        use serde::de::{MapAccess, Visitor};
19487        struct StructVisitor;
19488        impl<'de> Visitor<'de> for StructVisitor {
19489            type Value = MembersSetPermissions2Result;
19490            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19491                f.write_str("a MembersSetPermissions2Result struct")
19492            }
19493            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19494                MembersSetPermissions2Result::internal_deserialize(map)
19495            }
19496        }
19497        deserializer.deserialize_struct("MembersSetPermissions2Result", MEMBERS_SET_PERMISSIONS2_RESULT_FIELDS, StructVisitor)
19498    }
19499}
19500
19501impl ::serde::ser::Serialize for MembersSetPermissions2Result {
19502    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19503        // struct serializer
19504        use serde::ser::SerializeStruct;
19505        let mut s = serializer.serialize_struct("MembersSetPermissions2Result", 2)?;
19506        self.internal_serialize::<S>(&mut s)?;
19507        s.end()
19508    }
19509}
19510
19511/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
19512/// account.
19513#[derive(Debug, Clone, PartialEq, Eq)]
19514#[non_exhaustive] // structs may have more fields added in the future.
19515pub struct MembersSetPermissionsArg {
19516    /// Identity of user whose role will be set.
19517    pub user: UserSelectorArg,
19518    /// The new role of the member.
19519    pub new_role: AdminTier,
19520}
19521
19522impl MembersSetPermissionsArg {
19523    pub fn new(user: UserSelectorArg, new_role: AdminTier) -> Self {
19524        MembersSetPermissionsArg {
19525            user,
19526            new_role,
19527        }
19528    }
19529}
19530
19531const MEMBERS_SET_PERMISSIONS_ARG_FIELDS: &[&str] = &["user",
19532                                                      "new_role"];
19533impl MembersSetPermissionsArg {
19534    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19535        map: V,
19536    ) -> Result<MembersSetPermissionsArg, V::Error> {
19537        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19538    }
19539
19540    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19541        mut map: V,
19542        optional: bool,
19543    ) -> Result<Option<MembersSetPermissionsArg>, V::Error> {
19544        let mut field_user = None;
19545        let mut field_new_role = None;
19546        let mut nothing = true;
19547        while let Some(key) = map.next_key::<&str>()? {
19548            nothing = false;
19549            match key {
19550                "user" => {
19551                    if field_user.is_some() {
19552                        return Err(::serde::de::Error::duplicate_field("user"));
19553                    }
19554                    field_user = Some(map.next_value()?);
19555                }
19556                "new_role" => {
19557                    if field_new_role.is_some() {
19558                        return Err(::serde::de::Error::duplicate_field("new_role"));
19559                    }
19560                    field_new_role = Some(map.next_value()?);
19561                }
19562                _ => {
19563                    // unknown field allowed and ignored
19564                    map.next_value::<::serde_json::Value>()?;
19565                }
19566            }
19567        }
19568        if optional && nothing {
19569            return Ok(None);
19570        }
19571        let result = MembersSetPermissionsArg {
19572            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19573            new_role: field_new_role.ok_or_else(|| ::serde::de::Error::missing_field("new_role"))?,
19574        };
19575        Ok(Some(result))
19576    }
19577
19578    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19579        &self,
19580        s: &mut S::SerializeStruct,
19581    ) -> Result<(), S::Error> {
19582        use serde::ser::SerializeStruct;
19583        s.serialize_field("user", &self.user)?;
19584        s.serialize_field("new_role", &self.new_role)?;
19585        Ok(())
19586    }
19587}
19588
19589impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsArg {
19590    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19591        // struct deserializer
19592        use serde::de::{MapAccess, Visitor};
19593        struct StructVisitor;
19594        impl<'de> Visitor<'de> for StructVisitor {
19595            type Value = MembersSetPermissionsArg;
19596            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19597                f.write_str("a MembersSetPermissionsArg struct")
19598            }
19599            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19600                MembersSetPermissionsArg::internal_deserialize(map)
19601            }
19602        }
19603        deserializer.deserialize_struct("MembersSetPermissionsArg", MEMBERS_SET_PERMISSIONS_ARG_FIELDS, StructVisitor)
19604    }
19605}
19606
19607impl ::serde::ser::Serialize for MembersSetPermissionsArg {
19608    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19609        // struct serializer
19610        use serde::ser::SerializeStruct;
19611        let mut s = serializer.serialize_struct("MembersSetPermissionsArg", 2)?;
19612        self.internal_serialize::<S>(&mut s)?;
19613        s.end()
19614    }
19615}
19616
19617#[derive(Debug, Clone, PartialEq, Eq)]
19618#[non_exhaustive] // variants may be added in the future
19619pub enum MembersSetPermissionsError {
19620    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
19621    /// this team.
19622    UserNotFound,
19623    /// Cannot remove the admin setting of the last admin.
19624    LastAdmin,
19625    /// The user is not a member of the team.
19626    UserNotInTeam,
19627    /// Cannot remove/grant permissions.
19628    CannotSetPermissions,
19629    /// Team is full. The organization has no available licenses.
19630    TeamLicenseLimit,
19631    /// Catch-all used for unrecognized values returned from the server. Encountering this value
19632    /// typically indicates that this SDK version is out of date.
19633    Other,
19634}
19635
19636impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsError {
19637    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19638        // union deserializer
19639        use serde::de::{self, MapAccess, Visitor};
19640        struct EnumVisitor;
19641        impl<'de> Visitor<'de> for EnumVisitor {
19642            type Value = MembersSetPermissionsError;
19643            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19644                f.write_str("a MembersSetPermissionsError structure")
19645            }
19646            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
19647                let tag: &str = match map.next_key()? {
19648                    Some(".tag") => map.next_value()?,
19649                    _ => return Err(de::Error::missing_field(".tag"))
19650                };
19651                let value = match tag {
19652                    "user_not_found" => MembersSetPermissionsError::UserNotFound,
19653                    "last_admin" => MembersSetPermissionsError::LastAdmin,
19654                    "user_not_in_team" => MembersSetPermissionsError::UserNotInTeam,
19655                    "cannot_set_permissions" => MembersSetPermissionsError::CannotSetPermissions,
19656                    "team_license_limit" => MembersSetPermissionsError::TeamLicenseLimit,
19657                    _ => MembersSetPermissionsError::Other,
19658                };
19659                crate::eat_json_fields(&mut map)?;
19660                Ok(value)
19661            }
19662        }
19663        const VARIANTS: &[&str] = &["user_not_found",
19664                                    "last_admin",
19665                                    "user_not_in_team",
19666                                    "cannot_set_permissions",
19667                                    "team_license_limit",
19668                                    "other"];
19669        deserializer.deserialize_struct("MembersSetPermissionsError", VARIANTS, EnumVisitor)
19670    }
19671}
19672
19673impl ::serde::ser::Serialize for MembersSetPermissionsError {
19674    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19675        // union serializer
19676        use serde::ser::SerializeStruct;
19677        match self {
19678            MembersSetPermissionsError::UserNotFound => {
19679                // unit
19680                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19681                s.serialize_field(".tag", "user_not_found")?;
19682                s.end()
19683            }
19684            MembersSetPermissionsError::LastAdmin => {
19685                // unit
19686                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19687                s.serialize_field(".tag", "last_admin")?;
19688                s.end()
19689            }
19690            MembersSetPermissionsError::UserNotInTeam => {
19691                // unit
19692                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19693                s.serialize_field(".tag", "user_not_in_team")?;
19694                s.end()
19695            }
19696            MembersSetPermissionsError::CannotSetPermissions => {
19697                // unit
19698                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19699                s.serialize_field(".tag", "cannot_set_permissions")?;
19700                s.end()
19701            }
19702            MembersSetPermissionsError::TeamLicenseLimit => {
19703                // unit
19704                let mut s = serializer.serialize_struct("MembersSetPermissionsError", 1)?;
19705                s.serialize_field(".tag", "team_license_limit")?;
19706                s.end()
19707            }
19708            MembersSetPermissionsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
19709        }
19710    }
19711}
19712
19713impl ::std::error::Error for MembersSetPermissionsError {
19714}
19715
19716impl ::std::fmt::Display for MembersSetPermissionsError {
19717    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19718        match self {
19719            MembersSetPermissionsError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
19720            MembersSetPermissionsError::LastAdmin => f.write_str("Cannot remove the admin setting of the last admin."),
19721            MembersSetPermissionsError::UserNotInTeam => f.write_str("The user is not a member of the team."),
19722            MembersSetPermissionsError::CannotSetPermissions => f.write_str("Cannot remove/grant permissions."),
19723            MembersSetPermissionsError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
19724            _ => write!(f, "{:?}", *self),
19725        }
19726    }
19727}
19728
19729// union extends UserSelectorError
19730impl From<UserSelectorError> for MembersSetPermissionsError {
19731    fn from(parent: UserSelectorError) -> Self {
19732        match parent {
19733            UserSelectorError::UserNotFound => MembersSetPermissionsError::UserNotFound,
19734        }
19735    }
19736}
19737#[derive(Debug, Clone, PartialEq, Eq)]
19738#[non_exhaustive] // structs may have more fields added in the future.
19739pub struct MembersSetPermissionsResult {
19740    /// The member ID of the user to which the change was applied.
19741    pub team_member_id: crate::types::team_common::TeamMemberId,
19742    /// The role after the change.
19743    pub role: AdminTier,
19744}
19745
19746impl MembersSetPermissionsResult {
19747    pub fn new(team_member_id: crate::types::team_common::TeamMemberId, role: AdminTier) -> Self {
19748        MembersSetPermissionsResult {
19749            team_member_id,
19750            role,
19751        }
19752    }
19753}
19754
19755const MEMBERS_SET_PERMISSIONS_RESULT_FIELDS: &[&str] = &["team_member_id",
19756                                                         "role"];
19757impl MembersSetPermissionsResult {
19758    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19759        map: V,
19760    ) -> Result<MembersSetPermissionsResult, V::Error> {
19761        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19762    }
19763
19764    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19765        mut map: V,
19766        optional: bool,
19767    ) -> Result<Option<MembersSetPermissionsResult>, V::Error> {
19768        let mut field_team_member_id = None;
19769        let mut field_role = None;
19770        let mut nothing = true;
19771        while let Some(key) = map.next_key::<&str>()? {
19772            nothing = false;
19773            match key {
19774                "team_member_id" => {
19775                    if field_team_member_id.is_some() {
19776                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
19777                    }
19778                    field_team_member_id = Some(map.next_value()?);
19779                }
19780                "role" => {
19781                    if field_role.is_some() {
19782                        return Err(::serde::de::Error::duplicate_field("role"));
19783                    }
19784                    field_role = Some(map.next_value()?);
19785                }
19786                _ => {
19787                    // unknown field allowed and ignored
19788                    map.next_value::<::serde_json::Value>()?;
19789                }
19790            }
19791        }
19792        if optional && nothing {
19793            return Ok(None);
19794        }
19795        let result = MembersSetPermissionsResult {
19796            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
19797            role: field_role.ok_or_else(|| ::serde::de::Error::missing_field("role"))?,
19798        };
19799        Ok(Some(result))
19800    }
19801
19802    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
19803        &self,
19804        s: &mut S::SerializeStruct,
19805    ) -> Result<(), S::Error> {
19806        use serde::ser::SerializeStruct;
19807        s.serialize_field("team_member_id", &self.team_member_id)?;
19808        s.serialize_field("role", &self.role)?;
19809        Ok(())
19810    }
19811}
19812
19813impl<'de> ::serde::de::Deserialize<'de> for MembersSetPermissionsResult {
19814    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
19815        // struct deserializer
19816        use serde::de::{MapAccess, Visitor};
19817        struct StructVisitor;
19818        impl<'de> Visitor<'de> for StructVisitor {
19819            type Value = MembersSetPermissionsResult;
19820            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
19821                f.write_str("a MembersSetPermissionsResult struct")
19822            }
19823            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
19824                MembersSetPermissionsResult::internal_deserialize(map)
19825            }
19826        }
19827        deserializer.deserialize_struct("MembersSetPermissionsResult", MEMBERS_SET_PERMISSIONS_RESULT_FIELDS, StructVisitor)
19828    }
19829}
19830
19831impl ::serde::ser::Serialize for MembersSetPermissionsResult {
19832    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
19833        // struct serializer
19834        use serde::ser::SerializeStruct;
19835        let mut s = serializer.serialize_struct("MembersSetPermissionsResult", 2)?;
19836        self.internal_serialize::<S>(&mut s)?;
19837        s.end()
19838    }
19839}
19840
19841/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
19842/// account. At least one of new_email, new_external_id, new_given_name, and/or new_surname must be
19843/// provided.
19844#[derive(Debug, Clone, PartialEq, Eq)]
19845#[non_exhaustive] // structs may have more fields added in the future.
19846pub struct MembersSetProfileArg {
19847    /// Identity of user whose profile will be set.
19848    pub user: UserSelectorArg,
19849    /// New email for member.
19850    pub new_email: Option<crate::types::common::EmailAddress>,
19851    /// New external ID for member.
19852    pub new_external_id: Option<crate::types::team_common::MemberExternalId>,
19853    /// New given name for member.
19854    pub new_given_name: Option<crate::types::common::OptionalNamePart>,
19855    /// New surname for member.
19856    pub new_surname: Option<crate::types::common::OptionalNamePart>,
19857    /// New persistent ID. This field only available to teams using persistent ID SAML
19858    /// configuration.
19859    pub new_persistent_id: Option<String>,
19860    /// New value for whether the user is a directory restricted user.
19861    pub new_is_directory_restricted: Option<bool>,
19862}
19863
19864impl MembersSetProfileArg {
19865    pub fn new(user: UserSelectorArg) -> Self {
19866        MembersSetProfileArg {
19867            user,
19868            new_email: None,
19869            new_external_id: None,
19870            new_given_name: None,
19871            new_surname: None,
19872            new_persistent_id: None,
19873            new_is_directory_restricted: None,
19874        }
19875    }
19876
19877    pub fn with_new_email(mut self, value: crate::types::common::EmailAddress) -> Self {
19878        self.new_email = Some(value);
19879        self
19880    }
19881
19882    pub fn with_new_external_id(
19883        mut self,
19884        value: crate::types::team_common::MemberExternalId,
19885    ) -> Self {
19886        self.new_external_id = Some(value);
19887        self
19888    }
19889
19890    pub fn with_new_given_name(mut self, value: crate::types::common::OptionalNamePart) -> Self {
19891        self.new_given_name = Some(value);
19892        self
19893    }
19894
19895    pub fn with_new_surname(mut self, value: crate::types::common::OptionalNamePart) -> Self {
19896        self.new_surname = Some(value);
19897        self
19898    }
19899
19900    pub fn with_new_persistent_id(mut self, value: String) -> Self {
19901        self.new_persistent_id = Some(value);
19902        self
19903    }
19904
19905    pub fn with_new_is_directory_restricted(mut self, value: bool) -> Self {
19906        self.new_is_directory_restricted = Some(value);
19907        self
19908    }
19909}
19910
19911const MEMBERS_SET_PROFILE_ARG_FIELDS: &[&str] = &["user",
19912                                                  "new_email",
19913                                                  "new_external_id",
19914                                                  "new_given_name",
19915                                                  "new_surname",
19916                                                  "new_persistent_id",
19917                                                  "new_is_directory_restricted"];
19918impl MembersSetProfileArg {
19919    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
19920        map: V,
19921    ) -> Result<MembersSetProfileArg, V::Error> {
19922        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
19923    }
19924
19925    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
19926        mut map: V,
19927        optional: bool,
19928    ) -> Result<Option<MembersSetProfileArg>, V::Error> {
19929        let mut field_user = None;
19930        let mut field_new_email = None;
19931        let mut field_new_external_id = None;
19932        let mut field_new_given_name = None;
19933        let mut field_new_surname = None;
19934        let mut field_new_persistent_id = None;
19935        let mut field_new_is_directory_restricted = None;
19936        let mut nothing = true;
19937        while let Some(key) = map.next_key::<&str>()? {
19938            nothing = false;
19939            match key {
19940                "user" => {
19941                    if field_user.is_some() {
19942                        return Err(::serde::de::Error::duplicate_field("user"));
19943                    }
19944                    field_user = Some(map.next_value()?);
19945                }
19946                "new_email" => {
19947                    if field_new_email.is_some() {
19948                        return Err(::serde::de::Error::duplicate_field("new_email"));
19949                    }
19950                    field_new_email = Some(map.next_value()?);
19951                }
19952                "new_external_id" => {
19953                    if field_new_external_id.is_some() {
19954                        return Err(::serde::de::Error::duplicate_field("new_external_id"));
19955                    }
19956                    field_new_external_id = Some(map.next_value()?);
19957                }
19958                "new_given_name" => {
19959                    if field_new_given_name.is_some() {
19960                        return Err(::serde::de::Error::duplicate_field("new_given_name"));
19961                    }
19962                    field_new_given_name = Some(map.next_value()?);
19963                }
19964                "new_surname" => {
19965                    if field_new_surname.is_some() {
19966                        return Err(::serde::de::Error::duplicate_field("new_surname"));
19967                    }
19968                    field_new_surname = Some(map.next_value()?);
19969                }
19970                "new_persistent_id" => {
19971                    if field_new_persistent_id.is_some() {
19972                        return Err(::serde::de::Error::duplicate_field("new_persistent_id"));
19973                    }
19974                    field_new_persistent_id = Some(map.next_value()?);
19975                }
19976                "new_is_directory_restricted" => {
19977                    if field_new_is_directory_restricted.is_some() {
19978                        return Err(::serde::de::Error::duplicate_field("new_is_directory_restricted"));
19979                    }
19980                    field_new_is_directory_restricted = Some(map.next_value()?);
19981                }
19982                _ => {
19983                    // unknown field allowed and ignored
19984                    map.next_value::<::serde_json::Value>()?;
19985                }
19986            }
19987        }
19988        if optional && nothing {
19989            return Ok(None);
19990        }
19991        let result = MembersSetProfileArg {
19992            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
19993            new_email: field_new_email.and_then(Option::flatten),
19994            new_external_id: field_new_external_id.and_then(Option::flatten),
19995            new_given_name: field_new_given_name.and_then(Option::flatten),
19996            new_surname: field_new_surname.and_then(Option::flatten),
19997            new_persistent_id: field_new_persistent_id.and_then(Option::flatten),
19998            new_is_directory_restricted: field_new_is_directory_restricted.and_then(Option::flatten),
19999        };
20000        Ok(Some(result))
20001    }
20002
20003    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20004        &self,
20005        s: &mut S::SerializeStruct,
20006    ) -> Result<(), S::Error> {
20007        use serde::ser::SerializeStruct;
20008        s.serialize_field("user", &self.user)?;
20009        if let Some(val) = &self.new_email {
20010            s.serialize_field("new_email", val)?;
20011        }
20012        if let Some(val) = &self.new_external_id {
20013            s.serialize_field("new_external_id", val)?;
20014        }
20015        if let Some(val) = &self.new_given_name {
20016            s.serialize_field("new_given_name", val)?;
20017        }
20018        if let Some(val) = &self.new_surname {
20019            s.serialize_field("new_surname", val)?;
20020        }
20021        if let Some(val) = &self.new_persistent_id {
20022            s.serialize_field("new_persistent_id", val)?;
20023        }
20024        if let Some(val) = &self.new_is_directory_restricted {
20025            s.serialize_field("new_is_directory_restricted", val)?;
20026        }
20027        Ok(())
20028    }
20029}
20030
20031impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfileArg {
20032    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20033        // struct deserializer
20034        use serde::de::{MapAccess, Visitor};
20035        struct StructVisitor;
20036        impl<'de> Visitor<'de> for StructVisitor {
20037            type Value = MembersSetProfileArg;
20038            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20039                f.write_str("a MembersSetProfileArg struct")
20040            }
20041            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20042                MembersSetProfileArg::internal_deserialize(map)
20043            }
20044        }
20045        deserializer.deserialize_struct("MembersSetProfileArg", MEMBERS_SET_PROFILE_ARG_FIELDS, StructVisitor)
20046    }
20047}
20048
20049impl ::serde::ser::Serialize for MembersSetProfileArg {
20050    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20051        // struct serializer
20052        use serde::ser::SerializeStruct;
20053        let mut s = serializer.serialize_struct("MembersSetProfileArg", 7)?;
20054        self.internal_serialize::<S>(&mut s)?;
20055        s.end()
20056    }
20057}
20058
20059#[derive(Debug, Clone, PartialEq, Eq)]
20060#[non_exhaustive] // variants may be added in the future
20061pub enum MembersSetProfileError {
20062    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20063    /// this team.
20064    UserNotFound,
20065    /// The user is not a member of the team.
20066    UserNotInTeam,
20067    /// It is unsafe to use both external_id and new_external_id.
20068    ExternalIdAndNewExternalIdUnsafe,
20069    /// None of new_email, new_given_name, new_surname, or new_external_id are specified.
20070    NoNewDataSpecified,
20071    /// Email is already reserved for another user.
20072    EmailReservedForOtherUser,
20073    /// The external ID is already in use by another team member.
20074    ExternalIdUsedByOtherUser,
20075    /// Modifying deleted users is not allowed.
20076    SetProfileDisallowed,
20077    /// Parameter new_email cannot be empty.
20078    ParamCannotBeEmpty,
20079    /// Persistent ID is only available to teams with persistent ID SAML configuration. Please
20080    /// contact Dropbox for more information.
20081    PersistentIdDisabled,
20082    /// The persistent ID is already in use by another team member.
20083    PersistentIdUsedByOtherUser,
20084    /// Directory Restrictions option is not available.
20085    DirectoryRestrictedOff,
20086    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20087    /// typically indicates that this SDK version is out of date.
20088    Other,
20089}
20090
20091impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfileError {
20092    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20093        // union deserializer
20094        use serde::de::{self, MapAccess, Visitor};
20095        struct EnumVisitor;
20096        impl<'de> Visitor<'de> for EnumVisitor {
20097            type Value = MembersSetProfileError;
20098            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20099                f.write_str("a MembersSetProfileError structure")
20100            }
20101            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20102                let tag: &str = match map.next_key()? {
20103                    Some(".tag") => map.next_value()?,
20104                    _ => return Err(de::Error::missing_field(".tag"))
20105                };
20106                let value = match tag {
20107                    "user_not_found" => MembersSetProfileError::UserNotFound,
20108                    "user_not_in_team" => MembersSetProfileError::UserNotInTeam,
20109                    "external_id_and_new_external_id_unsafe" => MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe,
20110                    "no_new_data_specified" => MembersSetProfileError::NoNewDataSpecified,
20111                    "email_reserved_for_other_user" => MembersSetProfileError::EmailReservedForOtherUser,
20112                    "external_id_used_by_other_user" => MembersSetProfileError::ExternalIdUsedByOtherUser,
20113                    "set_profile_disallowed" => MembersSetProfileError::SetProfileDisallowed,
20114                    "param_cannot_be_empty" => MembersSetProfileError::ParamCannotBeEmpty,
20115                    "persistent_id_disabled" => MembersSetProfileError::PersistentIdDisabled,
20116                    "persistent_id_used_by_other_user" => MembersSetProfileError::PersistentIdUsedByOtherUser,
20117                    "directory_restricted_off" => MembersSetProfileError::DirectoryRestrictedOff,
20118                    _ => MembersSetProfileError::Other,
20119                };
20120                crate::eat_json_fields(&mut map)?;
20121                Ok(value)
20122            }
20123        }
20124        const VARIANTS: &[&str] = &["user_not_found",
20125                                    "user_not_in_team",
20126                                    "external_id_and_new_external_id_unsafe",
20127                                    "no_new_data_specified",
20128                                    "email_reserved_for_other_user",
20129                                    "external_id_used_by_other_user",
20130                                    "set_profile_disallowed",
20131                                    "param_cannot_be_empty",
20132                                    "persistent_id_disabled",
20133                                    "persistent_id_used_by_other_user",
20134                                    "directory_restricted_off",
20135                                    "other"];
20136        deserializer.deserialize_struct("MembersSetProfileError", VARIANTS, EnumVisitor)
20137    }
20138}
20139
20140impl ::serde::ser::Serialize for MembersSetProfileError {
20141    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20142        // union serializer
20143        use serde::ser::SerializeStruct;
20144        match self {
20145            MembersSetProfileError::UserNotFound => {
20146                // unit
20147                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20148                s.serialize_field(".tag", "user_not_found")?;
20149                s.end()
20150            }
20151            MembersSetProfileError::UserNotInTeam => {
20152                // unit
20153                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20154                s.serialize_field(".tag", "user_not_in_team")?;
20155                s.end()
20156            }
20157            MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe => {
20158                // unit
20159                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20160                s.serialize_field(".tag", "external_id_and_new_external_id_unsafe")?;
20161                s.end()
20162            }
20163            MembersSetProfileError::NoNewDataSpecified => {
20164                // unit
20165                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20166                s.serialize_field(".tag", "no_new_data_specified")?;
20167                s.end()
20168            }
20169            MembersSetProfileError::EmailReservedForOtherUser => {
20170                // unit
20171                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20172                s.serialize_field(".tag", "email_reserved_for_other_user")?;
20173                s.end()
20174            }
20175            MembersSetProfileError::ExternalIdUsedByOtherUser => {
20176                // unit
20177                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20178                s.serialize_field(".tag", "external_id_used_by_other_user")?;
20179                s.end()
20180            }
20181            MembersSetProfileError::SetProfileDisallowed => {
20182                // unit
20183                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20184                s.serialize_field(".tag", "set_profile_disallowed")?;
20185                s.end()
20186            }
20187            MembersSetProfileError::ParamCannotBeEmpty => {
20188                // unit
20189                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20190                s.serialize_field(".tag", "param_cannot_be_empty")?;
20191                s.end()
20192            }
20193            MembersSetProfileError::PersistentIdDisabled => {
20194                // unit
20195                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20196                s.serialize_field(".tag", "persistent_id_disabled")?;
20197                s.end()
20198            }
20199            MembersSetProfileError::PersistentIdUsedByOtherUser => {
20200                // unit
20201                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20202                s.serialize_field(".tag", "persistent_id_used_by_other_user")?;
20203                s.end()
20204            }
20205            MembersSetProfileError::DirectoryRestrictedOff => {
20206                // unit
20207                let mut s = serializer.serialize_struct("MembersSetProfileError", 1)?;
20208                s.serialize_field(".tag", "directory_restricted_off")?;
20209                s.end()
20210            }
20211            MembersSetProfileError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20212        }
20213    }
20214}
20215
20216impl ::std::error::Error for MembersSetProfileError {
20217}
20218
20219impl ::std::fmt::Display for MembersSetProfileError {
20220    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20221        match self {
20222            MembersSetProfileError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20223            MembersSetProfileError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20224            MembersSetProfileError::ExternalIdAndNewExternalIdUnsafe => f.write_str("It is unsafe to use both external_id and new_external_id."),
20225            MembersSetProfileError::NoNewDataSpecified => f.write_str("None of new_email, new_given_name, new_surname, or new_external_id are specified."),
20226            MembersSetProfileError::EmailReservedForOtherUser => f.write_str("Email is already reserved for another user."),
20227            MembersSetProfileError::ExternalIdUsedByOtherUser => f.write_str("The external ID is already in use by another team member."),
20228            MembersSetProfileError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
20229            MembersSetProfileError::ParamCannotBeEmpty => f.write_str("Parameter new_email cannot be empty."),
20230            MembersSetProfileError::PersistentIdDisabled => f.write_str("Persistent ID is only available to teams with persistent ID SAML configuration. Please contact Dropbox for more information."),
20231            MembersSetProfileError::PersistentIdUsedByOtherUser => f.write_str("The persistent ID is already in use by another team member."),
20232            MembersSetProfileError::DirectoryRestrictedOff => f.write_str("Directory Restrictions option is not available."),
20233            _ => write!(f, "{:?}", *self),
20234        }
20235    }
20236}
20237
20238// union extends MemberSelectorError
20239impl From<MemberSelectorError> for MembersSetProfileError {
20240    fn from(parent: MemberSelectorError) -> Self {
20241        match parent {
20242            MemberSelectorError::UserNotFound => MembersSetProfileError::UserNotFound,
20243            MemberSelectorError::UserNotInTeam => MembersSetProfileError::UserNotInTeam,
20244        }
20245    }
20246}
20247#[derive(Debug, Clone, PartialEq, Eq)]
20248#[non_exhaustive] // structs may have more fields added in the future.
20249pub struct MembersSetProfilePhotoArg {
20250    /// Identity of the user whose profile photo will be set.
20251    pub user: UserSelectorArg,
20252    /// Image to set as the member's new profile photo.
20253    pub photo: crate::types::account::PhotoSourceArg,
20254}
20255
20256impl MembersSetProfilePhotoArg {
20257    pub fn new(user: UserSelectorArg, photo: crate::types::account::PhotoSourceArg) -> Self {
20258        MembersSetProfilePhotoArg {
20259            user,
20260            photo,
20261        }
20262    }
20263}
20264
20265const MEMBERS_SET_PROFILE_PHOTO_ARG_FIELDS: &[&str] = &["user",
20266                                                        "photo"];
20267impl MembersSetProfilePhotoArg {
20268    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
20269        map: V,
20270    ) -> Result<MembersSetProfilePhotoArg, V::Error> {
20271        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
20272    }
20273
20274    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
20275        mut map: V,
20276        optional: bool,
20277    ) -> Result<Option<MembersSetProfilePhotoArg>, V::Error> {
20278        let mut field_user = None;
20279        let mut field_photo = None;
20280        let mut nothing = true;
20281        while let Some(key) = map.next_key::<&str>()? {
20282            nothing = false;
20283            match key {
20284                "user" => {
20285                    if field_user.is_some() {
20286                        return Err(::serde::de::Error::duplicate_field("user"));
20287                    }
20288                    field_user = Some(map.next_value()?);
20289                }
20290                "photo" => {
20291                    if field_photo.is_some() {
20292                        return Err(::serde::de::Error::duplicate_field("photo"));
20293                    }
20294                    field_photo = Some(map.next_value()?);
20295                }
20296                _ => {
20297                    // unknown field allowed and ignored
20298                    map.next_value::<::serde_json::Value>()?;
20299                }
20300            }
20301        }
20302        if optional && nothing {
20303            return Ok(None);
20304        }
20305        let result = MembersSetProfilePhotoArg {
20306            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
20307            photo: field_photo.ok_or_else(|| ::serde::de::Error::missing_field("photo"))?,
20308        };
20309        Ok(Some(result))
20310    }
20311
20312    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
20313        &self,
20314        s: &mut S::SerializeStruct,
20315    ) -> Result<(), S::Error> {
20316        use serde::ser::SerializeStruct;
20317        s.serialize_field("user", &self.user)?;
20318        s.serialize_field("photo", &self.photo)?;
20319        Ok(())
20320    }
20321}
20322
20323impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfilePhotoArg {
20324    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20325        // struct deserializer
20326        use serde::de::{MapAccess, Visitor};
20327        struct StructVisitor;
20328        impl<'de> Visitor<'de> for StructVisitor {
20329            type Value = MembersSetProfilePhotoArg;
20330            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20331                f.write_str("a MembersSetProfilePhotoArg struct")
20332            }
20333            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
20334                MembersSetProfilePhotoArg::internal_deserialize(map)
20335            }
20336        }
20337        deserializer.deserialize_struct("MembersSetProfilePhotoArg", MEMBERS_SET_PROFILE_PHOTO_ARG_FIELDS, StructVisitor)
20338    }
20339}
20340
20341impl ::serde::ser::Serialize for MembersSetProfilePhotoArg {
20342    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20343        // struct serializer
20344        use serde::ser::SerializeStruct;
20345        let mut s = serializer.serialize_struct("MembersSetProfilePhotoArg", 2)?;
20346        self.internal_serialize::<S>(&mut s)?;
20347        s.end()
20348    }
20349}
20350
20351#[derive(Debug, Clone, PartialEq, Eq)]
20352#[non_exhaustive] // variants may be added in the future
20353pub enum MembersSetProfilePhotoError {
20354    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20355    /// this team.
20356    UserNotFound,
20357    /// The user is not a member of the team.
20358    UserNotInTeam,
20359    /// Modifying deleted users is not allowed.
20360    SetProfileDisallowed,
20361    PhotoError(crate::types::account::SetProfilePhotoError),
20362    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20363    /// typically indicates that this SDK version is out of date.
20364    Other,
20365}
20366
20367impl<'de> ::serde::de::Deserialize<'de> for MembersSetProfilePhotoError {
20368    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20369        // union deserializer
20370        use serde::de::{self, MapAccess, Visitor};
20371        struct EnumVisitor;
20372        impl<'de> Visitor<'de> for EnumVisitor {
20373            type Value = MembersSetProfilePhotoError;
20374            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20375                f.write_str("a MembersSetProfilePhotoError structure")
20376            }
20377            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20378                let tag: &str = match map.next_key()? {
20379                    Some(".tag") => map.next_value()?,
20380                    _ => return Err(de::Error::missing_field(".tag"))
20381                };
20382                let value = match tag {
20383                    "user_not_found" => MembersSetProfilePhotoError::UserNotFound,
20384                    "user_not_in_team" => MembersSetProfilePhotoError::UserNotInTeam,
20385                    "set_profile_disallowed" => MembersSetProfilePhotoError::SetProfileDisallowed,
20386                    "photo_error" => {
20387                        match map.next_key()? {
20388                            Some("photo_error") => MembersSetProfilePhotoError::PhotoError(map.next_value()?),
20389                            None => return Err(de::Error::missing_field("photo_error")),
20390                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
20391                        }
20392                    }
20393                    _ => MembersSetProfilePhotoError::Other,
20394                };
20395                crate::eat_json_fields(&mut map)?;
20396                Ok(value)
20397            }
20398        }
20399        const VARIANTS: &[&str] = &["user_not_found",
20400                                    "user_not_in_team",
20401                                    "set_profile_disallowed",
20402                                    "photo_error",
20403                                    "other"];
20404        deserializer.deserialize_struct("MembersSetProfilePhotoError", VARIANTS, EnumVisitor)
20405    }
20406}
20407
20408impl ::serde::ser::Serialize for MembersSetProfilePhotoError {
20409    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20410        // union serializer
20411        use serde::ser::SerializeStruct;
20412        match self {
20413            MembersSetProfilePhotoError::UserNotFound => {
20414                // unit
20415                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
20416                s.serialize_field(".tag", "user_not_found")?;
20417                s.end()
20418            }
20419            MembersSetProfilePhotoError::UserNotInTeam => {
20420                // unit
20421                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
20422                s.serialize_field(".tag", "user_not_in_team")?;
20423                s.end()
20424            }
20425            MembersSetProfilePhotoError::SetProfileDisallowed => {
20426                // unit
20427                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 1)?;
20428                s.serialize_field(".tag", "set_profile_disallowed")?;
20429                s.end()
20430            }
20431            MembersSetProfilePhotoError::PhotoError(x) => {
20432                // union or polymporphic struct
20433                let mut s = serializer.serialize_struct("MembersSetProfilePhotoError", 2)?;
20434                s.serialize_field(".tag", "photo_error")?;
20435                s.serialize_field("photo_error", x)?;
20436                s.end()
20437            }
20438            MembersSetProfilePhotoError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20439        }
20440    }
20441}
20442
20443impl ::std::error::Error for MembersSetProfilePhotoError {
20444    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
20445        match self {
20446            MembersSetProfilePhotoError::PhotoError(inner) => Some(inner),
20447            _ => None,
20448        }
20449    }
20450}
20451
20452impl ::std::fmt::Display for MembersSetProfilePhotoError {
20453    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20454        match self {
20455            MembersSetProfilePhotoError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20456            MembersSetProfilePhotoError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20457            MembersSetProfilePhotoError::SetProfileDisallowed => f.write_str("Modifying deleted users is not allowed."),
20458            MembersSetProfilePhotoError::PhotoError(inner) => write!(f, "MembersSetProfilePhotoError: {}", inner),
20459            _ => write!(f, "{:?}", *self),
20460        }
20461    }
20462}
20463
20464// union extends MemberSelectorError
20465impl From<MemberSelectorError> for MembersSetProfilePhotoError {
20466    fn from(parent: MemberSelectorError) -> Self {
20467        match parent {
20468            MemberSelectorError::UserNotFound => MembersSetProfilePhotoError::UserNotFound,
20469            MemberSelectorError::UserNotInTeam => MembersSetProfilePhotoError::UserNotInTeam,
20470        }
20471    }
20472}
20473#[derive(Debug, Clone, PartialEq, Eq)]
20474#[non_exhaustive] // variants may be added in the future
20475pub enum MembersSuspendError {
20476    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20477    /// this team.
20478    UserNotFound,
20479    /// The user is not a member of the team.
20480    UserNotInTeam,
20481    /// The user is not active, so it cannot be suspended.
20482    SuspendInactiveUser,
20483    /// The user is the last admin of the team, so it cannot be suspended.
20484    SuspendLastAdmin,
20485    /// Team is full. The organization has no available licenses.
20486    TeamLicenseLimit,
20487    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20488    /// typically indicates that this SDK version is out of date.
20489    Other,
20490}
20491
20492impl<'de> ::serde::de::Deserialize<'de> for MembersSuspendError {
20493    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20494        // union deserializer
20495        use serde::de::{self, MapAccess, Visitor};
20496        struct EnumVisitor;
20497        impl<'de> Visitor<'de> for EnumVisitor {
20498            type Value = MembersSuspendError;
20499            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20500                f.write_str("a MembersSuspendError structure")
20501            }
20502            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20503                let tag: &str = match map.next_key()? {
20504                    Some(".tag") => map.next_value()?,
20505                    _ => return Err(de::Error::missing_field(".tag"))
20506                };
20507                let value = match tag {
20508                    "user_not_found" => MembersSuspendError::UserNotFound,
20509                    "user_not_in_team" => MembersSuspendError::UserNotInTeam,
20510                    "suspend_inactive_user" => MembersSuspendError::SuspendInactiveUser,
20511                    "suspend_last_admin" => MembersSuspendError::SuspendLastAdmin,
20512                    "team_license_limit" => MembersSuspendError::TeamLicenseLimit,
20513                    _ => MembersSuspendError::Other,
20514                };
20515                crate::eat_json_fields(&mut map)?;
20516                Ok(value)
20517            }
20518        }
20519        const VARIANTS: &[&str] = &["user_not_found",
20520                                    "user_not_in_team",
20521                                    "other",
20522                                    "suspend_inactive_user",
20523                                    "suspend_last_admin",
20524                                    "team_license_limit"];
20525        deserializer.deserialize_struct("MembersSuspendError", VARIANTS, EnumVisitor)
20526    }
20527}
20528
20529impl ::serde::ser::Serialize for MembersSuspendError {
20530    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20531        // union serializer
20532        use serde::ser::SerializeStruct;
20533        match self {
20534            MembersSuspendError::UserNotFound => {
20535                // unit
20536                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20537                s.serialize_field(".tag", "user_not_found")?;
20538                s.end()
20539            }
20540            MembersSuspendError::UserNotInTeam => {
20541                // unit
20542                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20543                s.serialize_field(".tag", "user_not_in_team")?;
20544                s.end()
20545            }
20546            MembersSuspendError::SuspendInactiveUser => {
20547                // unit
20548                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20549                s.serialize_field(".tag", "suspend_inactive_user")?;
20550                s.end()
20551            }
20552            MembersSuspendError::SuspendLastAdmin => {
20553                // unit
20554                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20555                s.serialize_field(".tag", "suspend_last_admin")?;
20556                s.end()
20557            }
20558            MembersSuspendError::TeamLicenseLimit => {
20559                // unit
20560                let mut s = serializer.serialize_struct("MembersSuspendError", 1)?;
20561                s.serialize_field(".tag", "team_license_limit")?;
20562                s.end()
20563            }
20564            MembersSuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20565        }
20566    }
20567}
20568
20569impl ::std::error::Error for MembersSuspendError {
20570}
20571
20572impl ::std::fmt::Display for MembersSuspendError {
20573    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20574        match self {
20575            MembersSuspendError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20576            MembersSuspendError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20577            MembersSuspendError::SuspendInactiveUser => f.write_str("The user is not active, so it cannot be suspended."),
20578            MembersSuspendError::SuspendLastAdmin => f.write_str("The user is the last admin of the team, so it cannot be suspended."),
20579            MembersSuspendError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
20580            _ => write!(f, "{:?}", *self),
20581        }
20582    }
20583}
20584
20585// union extends MembersDeactivateError
20586impl From<MembersDeactivateError> for MembersSuspendError {
20587    fn from(parent: MembersDeactivateError) -> Self {
20588        match parent {
20589            MembersDeactivateError::UserNotFound => MembersSuspendError::UserNotFound,
20590            MembersDeactivateError::UserNotInTeam => MembersSuspendError::UserNotInTeam,
20591            MembersDeactivateError::Other => MembersSuspendError::Other,
20592        }
20593    }
20594}
20595#[derive(Debug, Clone, PartialEq, Eq)]
20596#[non_exhaustive] // variants may be added in the future
20597pub enum MembersTransferFilesError {
20598    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20599    /// this team.
20600    UserNotFound,
20601    /// The user is not a member of the team.
20602    UserNotInTeam,
20603    /// Cannot permanently delete files while it's being transferred.
20604    TransferInProgress,
20605    /// Cannot permanently delete files that have already been transferred.
20606    AlreadyTransferred,
20607    /// Cannot permanently delete files that have already been transferred or deleted.
20608    AlreadyTransferredOrDeleted,
20609    /// Expected removed user and transfer_dest user to be different.
20610    RemovedAndTransferDestShouldDiffer,
20611    /// Expected removed user and transfer_admin user to be different.
20612    RemovedAndTransferAdminShouldDiffer,
20613    /// No matching user found for the argument transfer_dest_id.
20614    TransferDestUserNotFound,
20615    /// The provided transfer_dest_id does not exist on this team.
20616    TransferDestUserNotInTeam,
20617    /// The provided transfer_admin_id does not exist on this team.
20618    TransferAdminUserNotInTeam,
20619    /// No matching user found for the argument transfer_admin_id.
20620    TransferAdminUserNotFound,
20621    /// The transfer_admin_id argument must be provided when file transfer is requested.
20622    UnspecifiedTransferAdminId,
20623    /// Specified transfer_admin user is not a team admin.
20624    TransferAdminIsNotAdmin,
20625    /// The recipient user's email is not verified.
20626    RecipientNotVerified,
20627    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20628    /// typically indicates that this SDK version is out of date.
20629    Other,
20630}
20631
20632impl<'de> ::serde::de::Deserialize<'de> for MembersTransferFilesError {
20633    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20634        // union deserializer
20635        use serde::de::{self, MapAccess, Visitor};
20636        struct EnumVisitor;
20637        impl<'de> Visitor<'de> for EnumVisitor {
20638            type Value = MembersTransferFilesError;
20639            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20640                f.write_str("a MembersTransferFilesError structure")
20641            }
20642            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20643                let tag: &str = match map.next_key()? {
20644                    Some(".tag") => map.next_value()?,
20645                    _ => return Err(de::Error::missing_field(".tag"))
20646                };
20647                let value = match tag {
20648                    "user_not_found" => MembersTransferFilesError::UserNotFound,
20649                    "user_not_in_team" => MembersTransferFilesError::UserNotInTeam,
20650                    "transfer_in_progress" => MembersTransferFilesError::TransferInProgress,
20651                    "already_transferred" => MembersTransferFilesError::AlreadyTransferred,
20652                    "already_transferred_or_deleted" => MembersTransferFilesError::AlreadyTransferredOrDeleted,
20653                    "removed_and_transfer_dest_should_differ" => MembersTransferFilesError::RemovedAndTransferDestShouldDiffer,
20654                    "removed_and_transfer_admin_should_differ" => MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer,
20655                    "transfer_dest_user_not_found" => MembersTransferFilesError::TransferDestUserNotFound,
20656                    "transfer_dest_user_not_in_team" => MembersTransferFilesError::TransferDestUserNotInTeam,
20657                    "transfer_admin_user_not_in_team" => MembersTransferFilesError::TransferAdminUserNotInTeam,
20658                    "transfer_admin_user_not_found" => MembersTransferFilesError::TransferAdminUserNotFound,
20659                    "unspecified_transfer_admin_id" => MembersTransferFilesError::UnspecifiedTransferAdminId,
20660                    "transfer_admin_is_not_admin" => MembersTransferFilesError::TransferAdminIsNotAdmin,
20661                    "recipient_not_verified" => MembersTransferFilesError::RecipientNotVerified,
20662                    _ => MembersTransferFilesError::Other,
20663                };
20664                crate::eat_json_fields(&mut map)?;
20665                Ok(value)
20666            }
20667        }
20668        const VARIANTS: &[&str] = &["user_not_found",
20669                                    "user_not_in_team",
20670                                    "other",
20671                                    "transfer_in_progress",
20672                                    "already_transferred",
20673                                    "already_transferred_or_deleted",
20674                                    "removed_and_transfer_dest_should_differ",
20675                                    "removed_and_transfer_admin_should_differ",
20676                                    "transfer_dest_user_not_found",
20677                                    "transfer_dest_user_not_in_team",
20678                                    "transfer_admin_user_not_in_team",
20679                                    "transfer_admin_user_not_found",
20680                                    "unspecified_transfer_admin_id",
20681                                    "transfer_admin_is_not_admin",
20682                                    "recipient_not_verified"];
20683        deserializer.deserialize_struct("MembersTransferFilesError", VARIANTS, EnumVisitor)
20684    }
20685}
20686
20687impl ::serde::ser::Serialize for MembersTransferFilesError {
20688    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20689        // union serializer
20690        use serde::ser::SerializeStruct;
20691        match self {
20692            MembersTransferFilesError::UserNotFound => {
20693                // unit
20694                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20695                s.serialize_field(".tag", "user_not_found")?;
20696                s.end()
20697            }
20698            MembersTransferFilesError::UserNotInTeam => {
20699                // unit
20700                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20701                s.serialize_field(".tag", "user_not_in_team")?;
20702                s.end()
20703            }
20704            MembersTransferFilesError::TransferInProgress => {
20705                // unit
20706                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20707                s.serialize_field(".tag", "transfer_in_progress")?;
20708                s.end()
20709            }
20710            MembersTransferFilesError::AlreadyTransferred => {
20711                // unit
20712                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20713                s.serialize_field(".tag", "already_transferred")?;
20714                s.end()
20715            }
20716            MembersTransferFilesError::AlreadyTransferredOrDeleted => {
20717                // unit
20718                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20719                s.serialize_field(".tag", "already_transferred_or_deleted")?;
20720                s.end()
20721            }
20722            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => {
20723                // unit
20724                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20725                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
20726                s.end()
20727            }
20728            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => {
20729                // unit
20730                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20731                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
20732                s.end()
20733            }
20734            MembersTransferFilesError::TransferDestUserNotFound => {
20735                // unit
20736                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20737                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
20738                s.end()
20739            }
20740            MembersTransferFilesError::TransferDestUserNotInTeam => {
20741                // unit
20742                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20743                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
20744                s.end()
20745            }
20746            MembersTransferFilesError::TransferAdminUserNotInTeam => {
20747                // unit
20748                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20749                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
20750                s.end()
20751            }
20752            MembersTransferFilesError::TransferAdminUserNotFound => {
20753                // unit
20754                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20755                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
20756                s.end()
20757            }
20758            MembersTransferFilesError::UnspecifiedTransferAdminId => {
20759                // unit
20760                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20761                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
20762                s.end()
20763            }
20764            MembersTransferFilesError::TransferAdminIsNotAdmin => {
20765                // unit
20766                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20767                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
20768                s.end()
20769            }
20770            MembersTransferFilesError::RecipientNotVerified => {
20771                // unit
20772                let mut s = serializer.serialize_struct("MembersTransferFilesError", 1)?;
20773                s.serialize_field(".tag", "recipient_not_verified")?;
20774                s.end()
20775            }
20776            MembersTransferFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
20777        }
20778    }
20779}
20780
20781impl ::std::error::Error for MembersTransferFilesError {
20782}
20783
20784impl ::std::fmt::Display for MembersTransferFilesError {
20785    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20786        match self {
20787            MembersTransferFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
20788            MembersTransferFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
20789            MembersTransferFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
20790            MembersTransferFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
20791            MembersTransferFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
20792            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
20793            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
20794            MembersTransferFilesError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
20795            MembersTransferFilesError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
20796            MembersTransferFilesError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
20797            MembersTransferFilesError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
20798            MembersTransferFilesError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
20799            MembersTransferFilesError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
20800            MembersTransferFilesError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
20801            _ => write!(f, "{:?}", *self),
20802        }
20803    }
20804}
20805
20806// union extends MembersPermanentlyDeleteFilesError
20807impl From<MembersPermanentlyDeleteFilesError> for MembersTransferFilesError {
20808    fn from(parent: MembersPermanentlyDeleteFilesError) -> Self {
20809        match parent {
20810            MembersPermanentlyDeleteFilesError::UserNotFound => MembersTransferFilesError::UserNotFound,
20811            MembersPermanentlyDeleteFilesError::UserNotInTeam => MembersTransferFilesError::UserNotInTeam,
20812            MembersPermanentlyDeleteFilesError::Other => MembersTransferFilesError::Other,
20813            MembersPermanentlyDeleteFilesError::TransferInProgress => MembersTransferFilesError::TransferInProgress,
20814            MembersPermanentlyDeleteFilesError::AlreadyTransferred => MembersTransferFilesError::AlreadyTransferred,
20815            MembersPermanentlyDeleteFilesError::AlreadyTransferredOrDeleted => MembersTransferFilesError::AlreadyTransferredOrDeleted,
20816        }
20817    }
20818}
20819#[derive(Debug, Clone, PartialEq, Eq)]
20820#[non_exhaustive] // variants may be added in the future
20821pub enum MembersTransferFormerMembersFilesError {
20822    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
20823    /// this team.
20824    UserNotFound,
20825    /// The user is not a member of the team.
20826    UserNotInTeam,
20827    /// Cannot permanently delete files while it's being transferred.
20828    TransferInProgress,
20829    /// Cannot permanently delete files that have already been transferred.
20830    AlreadyTransferred,
20831    /// Cannot permanently delete files that have already been transferred or deleted.
20832    AlreadyTransferredOrDeleted,
20833    /// Expected removed user and transfer_dest user to be different.
20834    RemovedAndTransferDestShouldDiffer,
20835    /// Expected removed user and transfer_admin user to be different.
20836    RemovedAndTransferAdminShouldDiffer,
20837    /// No matching user found for the argument transfer_dest_id.
20838    TransferDestUserNotFound,
20839    /// The provided transfer_dest_id does not exist on this team.
20840    TransferDestUserNotInTeam,
20841    /// The provided transfer_admin_id does not exist on this team.
20842    TransferAdminUserNotInTeam,
20843    /// No matching user found for the argument transfer_admin_id.
20844    TransferAdminUserNotFound,
20845    /// The transfer_admin_id argument must be provided when file transfer is requested.
20846    UnspecifiedTransferAdminId,
20847    /// Specified transfer_admin user is not a team admin.
20848    TransferAdminIsNotAdmin,
20849    /// The recipient user's email is not verified.
20850    RecipientNotVerified,
20851    /// The user's data is being transferred. Please wait some time before retrying.
20852    UserDataIsBeingTransferred,
20853    /// No matching removed user found for the argument user.
20854    UserNotRemoved,
20855    /// User files aren't transferable anymore.
20856    UserDataCannotBeTransferred,
20857    /// User's data has already been transferred to another user.
20858    UserDataAlreadyTransferred,
20859    /// Catch-all used for unrecognized values returned from the server. Encountering this value
20860    /// typically indicates that this SDK version is out of date.
20861    Other,
20862}
20863
20864impl<'de> ::serde::de::Deserialize<'de> for MembersTransferFormerMembersFilesError {
20865    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
20866        // union deserializer
20867        use serde::de::{self, MapAccess, Visitor};
20868        struct EnumVisitor;
20869        impl<'de> Visitor<'de> for EnumVisitor {
20870            type Value = MembersTransferFormerMembersFilesError;
20871            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
20872                f.write_str("a MembersTransferFormerMembersFilesError structure")
20873            }
20874            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
20875                let tag: &str = match map.next_key()? {
20876                    Some(".tag") => map.next_value()?,
20877                    _ => return Err(de::Error::missing_field(".tag"))
20878                };
20879                let value = match tag {
20880                    "user_not_found" => MembersTransferFormerMembersFilesError::UserNotFound,
20881                    "user_not_in_team" => MembersTransferFormerMembersFilesError::UserNotInTeam,
20882                    "transfer_in_progress" => MembersTransferFormerMembersFilesError::TransferInProgress,
20883                    "already_transferred" => MembersTransferFormerMembersFilesError::AlreadyTransferred,
20884                    "already_transferred_or_deleted" => MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted,
20885                    "removed_and_transfer_dest_should_differ" => MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer,
20886                    "removed_and_transfer_admin_should_differ" => MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer,
20887                    "transfer_dest_user_not_found" => MembersTransferFormerMembersFilesError::TransferDestUserNotFound,
20888                    "transfer_dest_user_not_in_team" => MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam,
20889                    "transfer_admin_user_not_in_team" => MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam,
20890                    "transfer_admin_user_not_found" => MembersTransferFormerMembersFilesError::TransferAdminUserNotFound,
20891                    "unspecified_transfer_admin_id" => MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId,
20892                    "transfer_admin_is_not_admin" => MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin,
20893                    "recipient_not_verified" => MembersTransferFormerMembersFilesError::RecipientNotVerified,
20894                    "user_data_is_being_transferred" => MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred,
20895                    "user_not_removed" => MembersTransferFormerMembersFilesError::UserNotRemoved,
20896                    "user_data_cannot_be_transferred" => MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred,
20897                    "user_data_already_transferred" => MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred,
20898                    _ => MembersTransferFormerMembersFilesError::Other,
20899                };
20900                crate::eat_json_fields(&mut map)?;
20901                Ok(value)
20902            }
20903        }
20904        const VARIANTS: &[&str] = &["user_not_found",
20905                                    "user_not_in_team",
20906                                    "other",
20907                                    "transfer_in_progress",
20908                                    "already_transferred",
20909                                    "already_transferred_or_deleted",
20910                                    "removed_and_transfer_dest_should_differ",
20911                                    "removed_and_transfer_admin_should_differ",
20912                                    "transfer_dest_user_not_found",
20913                                    "transfer_dest_user_not_in_team",
20914                                    "transfer_admin_user_not_in_team",
20915                                    "transfer_admin_user_not_found",
20916                                    "unspecified_transfer_admin_id",
20917                                    "transfer_admin_is_not_admin",
20918                                    "recipient_not_verified",
20919                                    "user_data_is_being_transferred",
20920                                    "user_not_removed",
20921                                    "user_data_cannot_be_transferred",
20922                                    "user_data_already_transferred"];
20923        deserializer.deserialize_struct("MembersTransferFormerMembersFilesError", VARIANTS, EnumVisitor)
20924    }
20925}
20926
20927impl ::serde::ser::Serialize for MembersTransferFormerMembersFilesError {
20928    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
20929        // union serializer
20930        use serde::ser::SerializeStruct;
20931        match self {
20932            MembersTransferFormerMembersFilesError::UserNotFound => {
20933                // unit
20934                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20935                s.serialize_field(".tag", "user_not_found")?;
20936                s.end()
20937            }
20938            MembersTransferFormerMembersFilesError::UserNotInTeam => {
20939                // unit
20940                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20941                s.serialize_field(".tag", "user_not_in_team")?;
20942                s.end()
20943            }
20944            MembersTransferFormerMembersFilesError::TransferInProgress => {
20945                // unit
20946                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20947                s.serialize_field(".tag", "transfer_in_progress")?;
20948                s.end()
20949            }
20950            MembersTransferFormerMembersFilesError::AlreadyTransferred => {
20951                // unit
20952                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20953                s.serialize_field(".tag", "already_transferred")?;
20954                s.end()
20955            }
20956            MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted => {
20957                // unit
20958                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20959                s.serialize_field(".tag", "already_transferred_or_deleted")?;
20960                s.end()
20961            }
20962            MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer => {
20963                // unit
20964                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20965                s.serialize_field(".tag", "removed_and_transfer_dest_should_differ")?;
20966                s.end()
20967            }
20968            MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer => {
20969                // unit
20970                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20971                s.serialize_field(".tag", "removed_and_transfer_admin_should_differ")?;
20972                s.end()
20973            }
20974            MembersTransferFormerMembersFilesError::TransferDestUserNotFound => {
20975                // unit
20976                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20977                s.serialize_field(".tag", "transfer_dest_user_not_found")?;
20978                s.end()
20979            }
20980            MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam => {
20981                // unit
20982                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20983                s.serialize_field(".tag", "transfer_dest_user_not_in_team")?;
20984                s.end()
20985            }
20986            MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam => {
20987                // unit
20988                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20989                s.serialize_field(".tag", "transfer_admin_user_not_in_team")?;
20990                s.end()
20991            }
20992            MembersTransferFormerMembersFilesError::TransferAdminUserNotFound => {
20993                // unit
20994                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
20995                s.serialize_field(".tag", "transfer_admin_user_not_found")?;
20996                s.end()
20997            }
20998            MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId => {
20999                // unit
21000                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21001                s.serialize_field(".tag", "unspecified_transfer_admin_id")?;
21002                s.end()
21003            }
21004            MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin => {
21005                // unit
21006                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21007                s.serialize_field(".tag", "transfer_admin_is_not_admin")?;
21008                s.end()
21009            }
21010            MembersTransferFormerMembersFilesError::RecipientNotVerified => {
21011                // unit
21012                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21013                s.serialize_field(".tag", "recipient_not_verified")?;
21014                s.end()
21015            }
21016            MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred => {
21017                // unit
21018                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21019                s.serialize_field(".tag", "user_data_is_being_transferred")?;
21020                s.end()
21021            }
21022            MembersTransferFormerMembersFilesError::UserNotRemoved => {
21023                // unit
21024                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21025                s.serialize_field(".tag", "user_not_removed")?;
21026                s.end()
21027            }
21028            MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred => {
21029                // unit
21030                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21031                s.serialize_field(".tag", "user_data_cannot_be_transferred")?;
21032                s.end()
21033            }
21034            MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred => {
21035                // unit
21036                let mut s = serializer.serialize_struct("MembersTransferFormerMembersFilesError", 1)?;
21037                s.serialize_field(".tag", "user_data_already_transferred")?;
21038                s.end()
21039            }
21040            MembersTransferFormerMembersFilesError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21041        }
21042    }
21043}
21044
21045impl ::std::error::Error for MembersTransferFormerMembersFilesError {
21046}
21047
21048impl ::std::fmt::Display for MembersTransferFormerMembersFilesError {
21049    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21050        match self {
21051            MembersTransferFormerMembersFilesError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21052            MembersTransferFormerMembersFilesError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21053            MembersTransferFormerMembersFilesError::TransferInProgress => f.write_str("Cannot permanently delete files while it's being transferred."),
21054            MembersTransferFormerMembersFilesError::AlreadyTransferred => f.write_str("Cannot permanently delete files that have already been transferred."),
21055            MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted => f.write_str("Cannot permanently delete files that have already been transferred or deleted."),
21056            MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer => f.write_str("Expected removed user and transfer_dest user to be different."),
21057            MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer => f.write_str("Expected removed user and transfer_admin user to be different."),
21058            MembersTransferFormerMembersFilesError::TransferDestUserNotFound => f.write_str("No matching user found for the argument transfer_dest_id."),
21059            MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam => f.write_str("The provided transfer_dest_id does not exist on this team."),
21060            MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam => f.write_str("The provided transfer_admin_id does not exist on this team."),
21061            MembersTransferFormerMembersFilesError::TransferAdminUserNotFound => f.write_str("No matching user found for the argument transfer_admin_id."),
21062            MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId => f.write_str("The transfer_admin_id argument must be provided when file transfer is requested."),
21063            MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin => f.write_str("Specified transfer_admin user is not a team admin."),
21064            MembersTransferFormerMembersFilesError::RecipientNotVerified => f.write_str("The recipient user's email is not verified."),
21065            MembersTransferFormerMembersFilesError::UserDataIsBeingTransferred => f.write_str("The user's data is being transferred. Please wait some time before retrying."),
21066            MembersTransferFormerMembersFilesError::UserNotRemoved => f.write_str("No matching removed user found for the argument user."),
21067            MembersTransferFormerMembersFilesError::UserDataCannotBeTransferred => f.write_str("User files aren't transferable anymore."),
21068            MembersTransferFormerMembersFilesError::UserDataAlreadyTransferred => f.write_str("User's data has already been transferred to another user."),
21069            _ => write!(f, "{:?}", *self),
21070        }
21071    }
21072}
21073
21074// union extends MembersTransferFilesError
21075impl From<MembersTransferFilesError> for MembersTransferFormerMembersFilesError {
21076    fn from(parent: MembersTransferFilesError) -> Self {
21077        match parent {
21078            MembersTransferFilesError::UserNotFound => MembersTransferFormerMembersFilesError::UserNotFound,
21079            MembersTransferFilesError::UserNotInTeam => MembersTransferFormerMembersFilesError::UserNotInTeam,
21080            MembersTransferFilesError::Other => MembersTransferFormerMembersFilesError::Other,
21081            MembersTransferFilesError::TransferInProgress => MembersTransferFormerMembersFilesError::TransferInProgress,
21082            MembersTransferFilesError::AlreadyTransferred => MembersTransferFormerMembersFilesError::AlreadyTransferred,
21083            MembersTransferFilesError::AlreadyTransferredOrDeleted => MembersTransferFormerMembersFilesError::AlreadyTransferredOrDeleted,
21084            MembersTransferFilesError::RemovedAndTransferDestShouldDiffer => MembersTransferFormerMembersFilesError::RemovedAndTransferDestShouldDiffer,
21085            MembersTransferFilesError::RemovedAndTransferAdminShouldDiffer => MembersTransferFormerMembersFilesError::RemovedAndTransferAdminShouldDiffer,
21086            MembersTransferFilesError::TransferDestUserNotFound => MembersTransferFormerMembersFilesError::TransferDestUserNotFound,
21087            MembersTransferFilesError::TransferDestUserNotInTeam => MembersTransferFormerMembersFilesError::TransferDestUserNotInTeam,
21088            MembersTransferFilesError::TransferAdminUserNotInTeam => MembersTransferFormerMembersFilesError::TransferAdminUserNotInTeam,
21089            MembersTransferFilesError::TransferAdminUserNotFound => MembersTransferFormerMembersFilesError::TransferAdminUserNotFound,
21090            MembersTransferFilesError::UnspecifiedTransferAdminId => MembersTransferFormerMembersFilesError::UnspecifiedTransferAdminId,
21091            MembersTransferFilesError::TransferAdminIsNotAdmin => MembersTransferFormerMembersFilesError::TransferAdminIsNotAdmin,
21092            MembersTransferFilesError::RecipientNotVerified => MembersTransferFormerMembersFilesError::RecipientNotVerified,
21093        }
21094    }
21095}
21096/// Exactly one of team_member_id, email, or external_id must be provided to identify the user
21097/// account.
21098#[derive(Debug, Clone, PartialEq, Eq)]
21099#[non_exhaustive] // structs may have more fields added in the future.
21100pub struct MembersUnsuspendArg {
21101    /// Identity of user to unsuspend.
21102    pub user: UserSelectorArg,
21103}
21104
21105impl MembersUnsuspendArg {
21106    pub fn new(user: UserSelectorArg) -> Self {
21107        MembersUnsuspendArg {
21108            user,
21109        }
21110    }
21111}
21112
21113const MEMBERS_UNSUSPEND_ARG_FIELDS: &[&str] = &["user"];
21114impl MembersUnsuspendArg {
21115    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21116        map: V,
21117    ) -> Result<MembersUnsuspendArg, V::Error> {
21118        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21119    }
21120
21121    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21122        mut map: V,
21123        optional: bool,
21124    ) -> Result<Option<MembersUnsuspendArg>, V::Error> {
21125        let mut field_user = None;
21126        let mut nothing = true;
21127        while let Some(key) = map.next_key::<&str>()? {
21128            nothing = false;
21129            match key {
21130                "user" => {
21131                    if field_user.is_some() {
21132                        return Err(::serde::de::Error::duplicate_field("user"));
21133                    }
21134                    field_user = Some(map.next_value()?);
21135                }
21136                _ => {
21137                    // unknown field allowed and ignored
21138                    map.next_value::<::serde_json::Value>()?;
21139                }
21140            }
21141        }
21142        if optional && nothing {
21143            return Ok(None);
21144        }
21145        let result = MembersUnsuspendArg {
21146            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
21147        };
21148        Ok(Some(result))
21149    }
21150
21151    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21152        &self,
21153        s: &mut S::SerializeStruct,
21154    ) -> Result<(), S::Error> {
21155        use serde::ser::SerializeStruct;
21156        s.serialize_field("user", &self.user)?;
21157        Ok(())
21158    }
21159}
21160
21161impl<'de> ::serde::de::Deserialize<'de> for MembersUnsuspendArg {
21162    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21163        // struct deserializer
21164        use serde::de::{MapAccess, Visitor};
21165        struct StructVisitor;
21166        impl<'de> Visitor<'de> for StructVisitor {
21167            type Value = MembersUnsuspendArg;
21168            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21169                f.write_str("a MembersUnsuspendArg struct")
21170            }
21171            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21172                MembersUnsuspendArg::internal_deserialize(map)
21173            }
21174        }
21175        deserializer.deserialize_struct("MembersUnsuspendArg", MEMBERS_UNSUSPEND_ARG_FIELDS, StructVisitor)
21176    }
21177}
21178
21179impl ::serde::ser::Serialize for MembersUnsuspendArg {
21180    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21181        // struct serializer
21182        use serde::ser::SerializeStruct;
21183        let mut s = serializer.serialize_struct("MembersUnsuspendArg", 1)?;
21184        self.internal_serialize::<S>(&mut s)?;
21185        s.end()
21186    }
21187}
21188
21189#[derive(Debug, Clone, PartialEq, Eq)]
21190#[non_exhaustive] // variants may be added in the future
21191pub enum MembersUnsuspendError {
21192    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
21193    /// this team.
21194    UserNotFound,
21195    /// The user is not a member of the team.
21196    UserNotInTeam,
21197    /// The user is unsuspended, so it cannot be unsuspended again.
21198    UnsuspendNonSuspendedMember,
21199    /// Team is full. The organization has no available licenses.
21200    TeamLicenseLimit,
21201    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21202    /// typically indicates that this SDK version is out of date.
21203    Other,
21204}
21205
21206impl<'de> ::serde::de::Deserialize<'de> for MembersUnsuspendError {
21207    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21208        // union deserializer
21209        use serde::de::{self, MapAccess, Visitor};
21210        struct EnumVisitor;
21211        impl<'de> Visitor<'de> for EnumVisitor {
21212            type Value = MembersUnsuspendError;
21213            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21214                f.write_str("a MembersUnsuspendError structure")
21215            }
21216            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21217                let tag: &str = match map.next_key()? {
21218                    Some(".tag") => map.next_value()?,
21219                    _ => return Err(de::Error::missing_field(".tag"))
21220                };
21221                let value = match tag {
21222                    "user_not_found" => MembersUnsuspendError::UserNotFound,
21223                    "user_not_in_team" => MembersUnsuspendError::UserNotInTeam,
21224                    "unsuspend_non_suspended_member" => MembersUnsuspendError::UnsuspendNonSuspendedMember,
21225                    "team_license_limit" => MembersUnsuspendError::TeamLicenseLimit,
21226                    _ => MembersUnsuspendError::Other,
21227                };
21228                crate::eat_json_fields(&mut map)?;
21229                Ok(value)
21230            }
21231        }
21232        const VARIANTS: &[&str] = &["user_not_found",
21233                                    "user_not_in_team",
21234                                    "other",
21235                                    "unsuspend_non_suspended_member",
21236                                    "team_license_limit"];
21237        deserializer.deserialize_struct("MembersUnsuspendError", VARIANTS, EnumVisitor)
21238    }
21239}
21240
21241impl ::serde::ser::Serialize for MembersUnsuspendError {
21242    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21243        // union serializer
21244        use serde::ser::SerializeStruct;
21245        match self {
21246            MembersUnsuspendError::UserNotFound => {
21247                // unit
21248                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
21249                s.serialize_field(".tag", "user_not_found")?;
21250                s.end()
21251            }
21252            MembersUnsuspendError::UserNotInTeam => {
21253                // unit
21254                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
21255                s.serialize_field(".tag", "user_not_in_team")?;
21256                s.end()
21257            }
21258            MembersUnsuspendError::UnsuspendNonSuspendedMember => {
21259                // unit
21260                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
21261                s.serialize_field(".tag", "unsuspend_non_suspended_member")?;
21262                s.end()
21263            }
21264            MembersUnsuspendError::TeamLicenseLimit => {
21265                // unit
21266                let mut s = serializer.serialize_struct("MembersUnsuspendError", 1)?;
21267                s.serialize_field(".tag", "team_license_limit")?;
21268                s.end()
21269            }
21270            MembersUnsuspendError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21271        }
21272    }
21273}
21274
21275impl ::std::error::Error for MembersUnsuspendError {
21276}
21277
21278impl ::std::fmt::Display for MembersUnsuspendError {
21279    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21280        match self {
21281            MembersUnsuspendError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
21282            MembersUnsuspendError::UserNotInTeam => f.write_str("The user is not a member of the team."),
21283            MembersUnsuspendError::UnsuspendNonSuspendedMember => f.write_str("The user is unsuspended, so it cannot be unsuspended again."),
21284            MembersUnsuspendError::TeamLicenseLimit => f.write_str("Team is full. The organization has no available licenses."),
21285            _ => write!(f, "{:?}", *self),
21286        }
21287    }
21288}
21289
21290// union extends MembersDeactivateError
21291impl From<MembersDeactivateError> for MembersUnsuspendError {
21292    fn from(parent: MembersDeactivateError) -> Self {
21293        match parent {
21294            MembersDeactivateError::UserNotFound => MembersUnsuspendError::UserNotFound,
21295            MembersDeactivateError::UserNotInTeam => MembersUnsuspendError::UserNotInTeam,
21296            MembersDeactivateError::Other => MembersUnsuspendError::Other,
21297        }
21298    }
21299}
21300#[derive(Debug, Clone, PartialEq, Eq)]
21301#[non_exhaustive] // variants may be added in the future
21302pub enum MobileClientPlatform {
21303    /// Official Dropbox iPhone client.
21304    Iphone,
21305    /// Official Dropbox iPad client.
21306    Ipad,
21307    /// Official Dropbox Android client.
21308    Android,
21309    /// Official Dropbox Windows phone client.
21310    WindowsPhone,
21311    /// Official Dropbox Blackberry client.
21312    Blackberry,
21313    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21314    /// typically indicates that this SDK version is out of date.
21315    Other,
21316}
21317
21318impl<'de> ::serde::de::Deserialize<'de> for MobileClientPlatform {
21319    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21320        // union deserializer
21321        use serde::de::{self, MapAccess, Visitor};
21322        struct EnumVisitor;
21323        impl<'de> Visitor<'de> for EnumVisitor {
21324            type Value = MobileClientPlatform;
21325            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21326                f.write_str("a MobileClientPlatform structure")
21327            }
21328            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21329                let tag: &str = match map.next_key()? {
21330                    Some(".tag") => map.next_value()?,
21331                    _ => return Err(de::Error::missing_field(".tag"))
21332                };
21333                let value = match tag {
21334                    "iphone" => MobileClientPlatform::Iphone,
21335                    "ipad" => MobileClientPlatform::Ipad,
21336                    "android" => MobileClientPlatform::Android,
21337                    "windows_phone" => MobileClientPlatform::WindowsPhone,
21338                    "blackberry" => MobileClientPlatform::Blackberry,
21339                    _ => MobileClientPlatform::Other,
21340                };
21341                crate::eat_json_fields(&mut map)?;
21342                Ok(value)
21343            }
21344        }
21345        const VARIANTS: &[&str] = &["iphone",
21346                                    "ipad",
21347                                    "android",
21348                                    "windows_phone",
21349                                    "blackberry",
21350                                    "other"];
21351        deserializer.deserialize_struct("MobileClientPlatform", VARIANTS, EnumVisitor)
21352    }
21353}
21354
21355impl ::serde::ser::Serialize for MobileClientPlatform {
21356    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21357        // union serializer
21358        use serde::ser::SerializeStruct;
21359        match self {
21360            MobileClientPlatform::Iphone => {
21361                // unit
21362                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21363                s.serialize_field(".tag", "iphone")?;
21364                s.end()
21365            }
21366            MobileClientPlatform::Ipad => {
21367                // unit
21368                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21369                s.serialize_field(".tag", "ipad")?;
21370                s.end()
21371            }
21372            MobileClientPlatform::Android => {
21373                // unit
21374                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21375                s.serialize_field(".tag", "android")?;
21376                s.end()
21377            }
21378            MobileClientPlatform::WindowsPhone => {
21379                // unit
21380                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21381                s.serialize_field(".tag", "windows_phone")?;
21382                s.end()
21383            }
21384            MobileClientPlatform::Blackberry => {
21385                // unit
21386                let mut s = serializer.serialize_struct("MobileClientPlatform", 1)?;
21387                s.serialize_field(".tag", "blackberry")?;
21388                s.end()
21389            }
21390            MobileClientPlatform::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21391        }
21392    }
21393}
21394
21395/// Information about linked Dropbox mobile client sessions.
21396#[derive(Debug, Clone, PartialEq, Eq)]
21397#[non_exhaustive] // structs may have more fields added in the future.
21398pub struct MobileClientSession {
21399    /// The session id.
21400    pub session_id: String,
21401    /// The device name.
21402    pub device_name: String,
21403    /// The mobile application type.
21404    pub client_type: MobileClientPlatform,
21405    /// The IP address of the last activity from this session.
21406    pub ip_address: Option<String>,
21407    /// The country from which the last activity from this session was made.
21408    pub country: Option<String>,
21409    /// The time this session was created.
21410    pub created: Option<crate::types::common::DropboxTimestamp>,
21411    /// The time of the last activity from this session.
21412    pub updated: Option<crate::types::common::DropboxTimestamp>,
21413    /// The dropbox client version.
21414    pub client_version: Option<String>,
21415    /// The hosting OS version.
21416    pub os_version: Option<String>,
21417    /// last carrier used by the device.
21418    pub last_carrier: Option<String>,
21419}
21420
21421impl MobileClientSession {
21422    pub fn new(
21423        session_id: String,
21424        device_name: String,
21425        client_type: MobileClientPlatform,
21426    ) -> Self {
21427        MobileClientSession {
21428            session_id,
21429            device_name,
21430            client_type,
21431            ip_address: None,
21432            country: None,
21433            created: None,
21434            updated: None,
21435            client_version: None,
21436            os_version: None,
21437            last_carrier: None,
21438        }
21439    }
21440
21441    pub fn with_ip_address(mut self, value: String) -> Self {
21442        self.ip_address = Some(value);
21443        self
21444    }
21445
21446    pub fn with_country(mut self, value: String) -> Self {
21447        self.country = Some(value);
21448        self
21449    }
21450
21451    pub fn with_created(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
21452        self.created = Some(value);
21453        self
21454    }
21455
21456    pub fn with_updated(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
21457        self.updated = Some(value);
21458        self
21459    }
21460
21461    pub fn with_client_version(mut self, value: String) -> Self {
21462        self.client_version = Some(value);
21463        self
21464    }
21465
21466    pub fn with_os_version(mut self, value: String) -> Self {
21467        self.os_version = Some(value);
21468        self
21469    }
21470
21471    pub fn with_last_carrier(mut self, value: String) -> Self {
21472        self.last_carrier = Some(value);
21473        self
21474    }
21475}
21476
21477const MOBILE_CLIENT_SESSION_FIELDS: &[&str] = &["session_id",
21478                                                "device_name",
21479                                                "client_type",
21480                                                "ip_address",
21481                                                "country",
21482                                                "created",
21483                                                "updated",
21484                                                "client_version",
21485                                                "os_version",
21486                                                "last_carrier"];
21487impl MobileClientSession {
21488    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21489        map: V,
21490    ) -> Result<MobileClientSession, V::Error> {
21491        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21492    }
21493
21494    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21495        mut map: V,
21496        optional: bool,
21497    ) -> Result<Option<MobileClientSession>, V::Error> {
21498        let mut field_session_id = None;
21499        let mut field_device_name = None;
21500        let mut field_client_type = None;
21501        let mut field_ip_address = None;
21502        let mut field_country = None;
21503        let mut field_created = None;
21504        let mut field_updated = None;
21505        let mut field_client_version = None;
21506        let mut field_os_version = None;
21507        let mut field_last_carrier = None;
21508        let mut nothing = true;
21509        while let Some(key) = map.next_key::<&str>()? {
21510            nothing = false;
21511            match key {
21512                "session_id" => {
21513                    if field_session_id.is_some() {
21514                        return Err(::serde::de::Error::duplicate_field("session_id"));
21515                    }
21516                    field_session_id = Some(map.next_value()?);
21517                }
21518                "device_name" => {
21519                    if field_device_name.is_some() {
21520                        return Err(::serde::de::Error::duplicate_field("device_name"));
21521                    }
21522                    field_device_name = Some(map.next_value()?);
21523                }
21524                "client_type" => {
21525                    if field_client_type.is_some() {
21526                        return Err(::serde::de::Error::duplicate_field("client_type"));
21527                    }
21528                    field_client_type = Some(map.next_value()?);
21529                }
21530                "ip_address" => {
21531                    if field_ip_address.is_some() {
21532                        return Err(::serde::de::Error::duplicate_field("ip_address"));
21533                    }
21534                    field_ip_address = Some(map.next_value()?);
21535                }
21536                "country" => {
21537                    if field_country.is_some() {
21538                        return Err(::serde::de::Error::duplicate_field("country"));
21539                    }
21540                    field_country = Some(map.next_value()?);
21541                }
21542                "created" => {
21543                    if field_created.is_some() {
21544                        return Err(::serde::de::Error::duplicate_field("created"));
21545                    }
21546                    field_created = Some(map.next_value()?);
21547                }
21548                "updated" => {
21549                    if field_updated.is_some() {
21550                        return Err(::serde::de::Error::duplicate_field("updated"));
21551                    }
21552                    field_updated = Some(map.next_value()?);
21553                }
21554                "client_version" => {
21555                    if field_client_version.is_some() {
21556                        return Err(::serde::de::Error::duplicate_field("client_version"));
21557                    }
21558                    field_client_version = Some(map.next_value()?);
21559                }
21560                "os_version" => {
21561                    if field_os_version.is_some() {
21562                        return Err(::serde::de::Error::duplicate_field("os_version"));
21563                    }
21564                    field_os_version = Some(map.next_value()?);
21565                }
21566                "last_carrier" => {
21567                    if field_last_carrier.is_some() {
21568                        return Err(::serde::de::Error::duplicate_field("last_carrier"));
21569                    }
21570                    field_last_carrier = Some(map.next_value()?);
21571                }
21572                _ => {
21573                    // unknown field allowed and ignored
21574                    map.next_value::<::serde_json::Value>()?;
21575                }
21576            }
21577        }
21578        if optional && nothing {
21579            return Ok(None);
21580        }
21581        let result = MobileClientSession {
21582            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
21583            device_name: field_device_name.ok_or_else(|| ::serde::de::Error::missing_field("device_name"))?,
21584            client_type: field_client_type.ok_or_else(|| ::serde::de::Error::missing_field("client_type"))?,
21585            ip_address: field_ip_address.and_then(Option::flatten),
21586            country: field_country.and_then(Option::flatten),
21587            created: field_created.and_then(Option::flatten),
21588            updated: field_updated.and_then(Option::flatten),
21589            client_version: field_client_version.and_then(Option::flatten),
21590            os_version: field_os_version.and_then(Option::flatten),
21591            last_carrier: field_last_carrier.and_then(Option::flatten),
21592        };
21593        Ok(Some(result))
21594    }
21595
21596    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21597        &self,
21598        s: &mut S::SerializeStruct,
21599    ) -> Result<(), S::Error> {
21600        use serde::ser::SerializeStruct;
21601        s.serialize_field("session_id", &self.session_id)?;
21602        s.serialize_field("device_name", &self.device_name)?;
21603        s.serialize_field("client_type", &self.client_type)?;
21604        if let Some(val) = &self.ip_address {
21605            s.serialize_field("ip_address", val)?;
21606        }
21607        if let Some(val) = &self.country {
21608            s.serialize_field("country", val)?;
21609        }
21610        if let Some(val) = &self.created {
21611            s.serialize_field("created", val)?;
21612        }
21613        if let Some(val) = &self.updated {
21614            s.serialize_field("updated", val)?;
21615        }
21616        if let Some(val) = &self.client_version {
21617            s.serialize_field("client_version", val)?;
21618        }
21619        if let Some(val) = &self.os_version {
21620            s.serialize_field("os_version", val)?;
21621        }
21622        if let Some(val) = &self.last_carrier {
21623            s.serialize_field("last_carrier", val)?;
21624        }
21625        Ok(())
21626    }
21627}
21628
21629impl<'de> ::serde::de::Deserialize<'de> for MobileClientSession {
21630    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21631        // struct deserializer
21632        use serde::de::{MapAccess, Visitor};
21633        struct StructVisitor;
21634        impl<'de> Visitor<'de> for StructVisitor {
21635            type Value = MobileClientSession;
21636            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21637                f.write_str("a MobileClientSession struct")
21638            }
21639            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21640                MobileClientSession::internal_deserialize(map)
21641            }
21642        }
21643        deserializer.deserialize_struct("MobileClientSession", MOBILE_CLIENT_SESSION_FIELDS, StructVisitor)
21644    }
21645}
21646
21647impl ::serde::ser::Serialize for MobileClientSession {
21648    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21649        // struct serializer
21650        use serde::ser::SerializeStruct;
21651        let mut s = serializer.serialize_struct("MobileClientSession", 10)?;
21652        self.internal_serialize::<S>(&mut s)?;
21653        s.end()
21654    }
21655}
21656
21657// struct extends DeviceSession
21658impl From<MobileClientSession> for DeviceSession {
21659    fn from(subtype: MobileClientSession) -> Self {
21660        Self {
21661            session_id: subtype.session_id,
21662            ip_address: subtype.ip_address,
21663            country: subtype.country,
21664            created: subtype.created,
21665            updated: subtype.updated,
21666        }
21667    }
21668}
21669/// Properties of a namespace.
21670#[derive(Debug, Clone, PartialEq, Eq)]
21671#[non_exhaustive] // structs may have more fields added in the future.
21672pub struct NamespaceMetadata {
21673    /// The name of this namespace.
21674    pub name: String,
21675    /// The ID of this namespace.
21676    pub namespace_id: crate::types::common::SharedFolderId,
21677    /// The type of this namespace.
21678    pub namespace_type: NamespaceType,
21679    /// If this is a team member or app folder, the ID of the owning team member. Otherwise, this
21680    /// field is not present.
21681    pub team_member_id: Option<crate::types::team_common::TeamMemberId>,
21682}
21683
21684impl NamespaceMetadata {
21685    pub fn new(
21686        name: String,
21687        namespace_id: crate::types::common::SharedFolderId,
21688        namespace_type: NamespaceType,
21689    ) -> Self {
21690        NamespaceMetadata {
21691            name,
21692            namespace_id,
21693            namespace_type,
21694            team_member_id: None,
21695        }
21696    }
21697
21698    pub fn with_team_member_id(mut self, value: crate::types::team_common::TeamMemberId) -> Self {
21699        self.team_member_id = Some(value);
21700        self
21701    }
21702}
21703
21704const NAMESPACE_METADATA_FIELDS: &[&str] = &["name",
21705                                             "namespace_id",
21706                                             "namespace_type",
21707                                             "team_member_id"];
21708impl NamespaceMetadata {
21709    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
21710        map: V,
21711    ) -> Result<NamespaceMetadata, V::Error> {
21712        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
21713    }
21714
21715    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
21716        mut map: V,
21717        optional: bool,
21718    ) -> Result<Option<NamespaceMetadata>, V::Error> {
21719        let mut field_name = None;
21720        let mut field_namespace_id = None;
21721        let mut field_namespace_type = None;
21722        let mut field_team_member_id = None;
21723        let mut nothing = true;
21724        while let Some(key) = map.next_key::<&str>()? {
21725            nothing = false;
21726            match key {
21727                "name" => {
21728                    if field_name.is_some() {
21729                        return Err(::serde::de::Error::duplicate_field("name"));
21730                    }
21731                    field_name = Some(map.next_value()?);
21732                }
21733                "namespace_id" => {
21734                    if field_namespace_id.is_some() {
21735                        return Err(::serde::de::Error::duplicate_field("namespace_id"));
21736                    }
21737                    field_namespace_id = Some(map.next_value()?);
21738                }
21739                "namespace_type" => {
21740                    if field_namespace_type.is_some() {
21741                        return Err(::serde::de::Error::duplicate_field("namespace_type"));
21742                    }
21743                    field_namespace_type = Some(map.next_value()?);
21744                }
21745                "team_member_id" => {
21746                    if field_team_member_id.is_some() {
21747                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
21748                    }
21749                    field_team_member_id = Some(map.next_value()?);
21750                }
21751                _ => {
21752                    // unknown field allowed and ignored
21753                    map.next_value::<::serde_json::Value>()?;
21754                }
21755            }
21756        }
21757        if optional && nothing {
21758            return Ok(None);
21759        }
21760        let result = NamespaceMetadata {
21761            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
21762            namespace_id: field_namespace_id.ok_or_else(|| ::serde::de::Error::missing_field("namespace_id"))?,
21763            namespace_type: field_namespace_type.ok_or_else(|| ::serde::de::Error::missing_field("namespace_type"))?,
21764            team_member_id: field_team_member_id.and_then(Option::flatten),
21765        };
21766        Ok(Some(result))
21767    }
21768
21769    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
21770        &self,
21771        s: &mut S::SerializeStruct,
21772    ) -> Result<(), S::Error> {
21773        use serde::ser::SerializeStruct;
21774        s.serialize_field("name", &self.name)?;
21775        s.serialize_field("namespace_id", &self.namespace_id)?;
21776        s.serialize_field("namespace_type", &self.namespace_type)?;
21777        if let Some(val) = &self.team_member_id {
21778            s.serialize_field("team_member_id", val)?;
21779        }
21780        Ok(())
21781    }
21782}
21783
21784impl<'de> ::serde::de::Deserialize<'de> for NamespaceMetadata {
21785    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21786        // struct deserializer
21787        use serde::de::{MapAccess, Visitor};
21788        struct StructVisitor;
21789        impl<'de> Visitor<'de> for StructVisitor {
21790            type Value = NamespaceMetadata;
21791            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21792                f.write_str("a NamespaceMetadata struct")
21793            }
21794            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
21795                NamespaceMetadata::internal_deserialize(map)
21796            }
21797        }
21798        deserializer.deserialize_struct("NamespaceMetadata", NAMESPACE_METADATA_FIELDS, StructVisitor)
21799    }
21800}
21801
21802impl ::serde::ser::Serialize for NamespaceMetadata {
21803    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21804        // struct serializer
21805        use serde::ser::SerializeStruct;
21806        let mut s = serializer.serialize_struct("NamespaceMetadata", 4)?;
21807        self.internal_serialize::<S>(&mut s)?;
21808        s.end()
21809    }
21810}
21811
21812#[derive(Debug, Clone, PartialEq, Eq)]
21813#[non_exhaustive] // variants may be added in the future
21814pub enum NamespaceType {
21815    /// App sandbox folder.
21816    AppFolder,
21817    /// Shared folder.
21818    SharedFolder,
21819    /// Top-level team-owned folder.
21820    TeamFolder,
21821    /// Team member's home folder.
21822    TeamMemberFolder,
21823    /// Team member's root folder.
21824    TeamMemberRoot,
21825    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21826    /// typically indicates that this SDK version is out of date.
21827    Other,
21828}
21829
21830impl<'de> ::serde::de::Deserialize<'de> for NamespaceType {
21831    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21832        // union deserializer
21833        use serde::de::{self, MapAccess, Visitor};
21834        struct EnumVisitor;
21835        impl<'de> Visitor<'de> for EnumVisitor {
21836            type Value = NamespaceType;
21837            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21838                f.write_str("a NamespaceType structure")
21839            }
21840            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21841                let tag: &str = match map.next_key()? {
21842                    Some(".tag") => map.next_value()?,
21843                    _ => return Err(de::Error::missing_field(".tag"))
21844                };
21845                let value = match tag {
21846                    "app_folder" => NamespaceType::AppFolder,
21847                    "shared_folder" => NamespaceType::SharedFolder,
21848                    "team_folder" => NamespaceType::TeamFolder,
21849                    "team_member_folder" => NamespaceType::TeamMemberFolder,
21850                    "team_member_root" => NamespaceType::TeamMemberRoot,
21851                    _ => NamespaceType::Other,
21852                };
21853                crate::eat_json_fields(&mut map)?;
21854                Ok(value)
21855            }
21856        }
21857        const VARIANTS: &[&str] = &["app_folder",
21858                                    "shared_folder",
21859                                    "team_folder",
21860                                    "team_member_folder",
21861                                    "team_member_root",
21862                                    "other"];
21863        deserializer.deserialize_struct("NamespaceType", VARIANTS, EnumVisitor)
21864    }
21865}
21866
21867impl ::serde::ser::Serialize for NamespaceType {
21868    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21869        // union serializer
21870        use serde::ser::SerializeStruct;
21871        match self {
21872            NamespaceType::AppFolder => {
21873                // unit
21874                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21875                s.serialize_field(".tag", "app_folder")?;
21876                s.end()
21877            }
21878            NamespaceType::SharedFolder => {
21879                // unit
21880                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21881                s.serialize_field(".tag", "shared_folder")?;
21882                s.end()
21883            }
21884            NamespaceType::TeamFolder => {
21885                // unit
21886                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21887                s.serialize_field(".tag", "team_folder")?;
21888                s.end()
21889            }
21890            NamespaceType::TeamMemberFolder => {
21891                // unit
21892                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21893                s.serialize_field(".tag", "team_member_folder")?;
21894                s.end()
21895            }
21896            NamespaceType::TeamMemberRoot => {
21897                // unit
21898                let mut s = serializer.serialize_struct("NamespaceType", 1)?;
21899                s.serialize_field(".tag", "team_member_root")?;
21900                s.end()
21901            }
21902            NamespaceType::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21903        }
21904    }
21905}
21906
21907/// User result for setting member custom quota.
21908#[derive(Debug, Clone, PartialEq, Eq)]
21909#[non_exhaustive] // variants may be added in the future
21910pub enum RemoveCustomQuotaResult {
21911    /// Successfully removed user.
21912    Success(UserSelectorArg),
21913    /// Invalid user (not in team).
21914    InvalidUser(UserSelectorArg),
21915    /// Catch-all used for unrecognized values returned from the server. Encountering this value
21916    /// typically indicates that this SDK version is out of date.
21917    Other,
21918}
21919
21920impl<'de> ::serde::de::Deserialize<'de> for RemoveCustomQuotaResult {
21921    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
21922        // union deserializer
21923        use serde::de::{self, MapAccess, Visitor};
21924        struct EnumVisitor;
21925        impl<'de> Visitor<'de> for EnumVisitor {
21926            type Value = RemoveCustomQuotaResult;
21927            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
21928                f.write_str("a RemoveCustomQuotaResult structure")
21929            }
21930            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
21931                let tag: &str = match map.next_key()? {
21932                    Some(".tag") => map.next_value()?,
21933                    _ => return Err(de::Error::missing_field(".tag"))
21934                };
21935                let value = match tag {
21936                    "success" => {
21937                        match map.next_key()? {
21938                            Some("success") => RemoveCustomQuotaResult::Success(map.next_value()?),
21939                            None => return Err(de::Error::missing_field("success")),
21940                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21941                        }
21942                    }
21943                    "invalid_user" => {
21944                        match map.next_key()? {
21945                            Some("invalid_user") => RemoveCustomQuotaResult::InvalidUser(map.next_value()?),
21946                            None => return Err(de::Error::missing_field("invalid_user")),
21947                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
21948                        }
21949                    }
21950                    _ => RemoveCustomQuotaResult::Other,
21951                };
21952                crate::eat_json_fields(&mut map)?;
21953                Ok(value)
21954            }
21955        }
21956        const VARIANTS: &[&str] = &["success",
21957                                    "invalid_user",
21958                                    "other"];
21959        deserializer.deserialize_struct("RemoveCustomQuotaResult", VARIANTS, EnumVisitor)
21960    }
21961}
21962
21963impl ::serde::ser::Serialize for RemoveCustomQuotaResult {
21964    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
21965        // union serializer
21966        use serde::ser::SerializeStruct;
21967        match self {
21968            RemoveCustomQuotaResult::Success(x) => {
21969                // union or polymporphic struct
21970                let mut s = serializer.serialize_struct("RemoveCustomQuotaResult", 2)?;
21971                s.serialize_field(".tag", "success")?;
21972                s.serialize_field("success", x)?;
21973                s.end()
21974            }
21975            RemoveCustomQuotaResult::InvalidUser(x) => {
21976                // union or polymporphic struct
21977                let mut s = serializer.serialize_struct("RemoveCustomQuotaResult", 2)?;
21978                s.serialize_field(".tag", "invalid_user")?;
21979                s.serialize_field("invalid_user", x)?;
21980                s.end()
21981            }
21982            RemoveCustomQuotaResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
21983        }
21984    }
21985}
21986
21987#[derive(Debug, Clone, PartialEq, Eq)]
21988#[non_exhaustive] // structs may have more fields added in the future.
21989pub struct RemovedStatus {
21990    /// True if the removed team member is recoverable.
21991    pub is_recoverable: bool,
21992    /// True if the team member's account was converted to individual account.
21993    pub is_disconnected: bool,
21994}
21995
21996impl RemovedStatus {
21997    pub fn new(is_recoverable: bool, is_disconnected: bool) -> Self {
21998        RemovedStatus {
21999            is_recoverable,
22000            is_disconnected,
22001        }
22002    }
22003}
22004
22005const REMOVED_STATUS_FIELDS: &[&str] = &["is_recoverable",
22006                                         "is_disconnected"];
22007impl RemovedStatus {
22008    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22009        map: V,
22010    ) -> Result<RemovedStatus, V::Error> {
22011        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22012    }
22013
22014    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22015        mut map: V,
22016        optional: bool,
22017    ) -> Result<Option<RemovedStatus>, V::Error> {
22018        let mut field_is_recoverable = None;
22019        let mut field_is_disconnected = None;
22020        let mut nothing = true;
22021        while let Some(key) = map.next_key::<&str>()? {
22022            nothing = false;
22023            match key {
22024                "is_recoverable" => {
22025                    if field_is_recoverable.is_some() {
22026                        return Err(::serde::de::Error::duplicate_field("is_recoverable"));
22027                    }
22028                    field_is_recoverable = Some(map.next_value()?);
22029                }
22030                "is_disconnected" => {
22031                    if field_is_disconnected.is_some() {
22032                        return Err(::serde::de::Error::duplicate_field("is_disconnected"));
22033                    }
22034                    field_is_disconnected = Some(map.next_value()?);
22035                }
22036                _ => {
22037                    // unknown field allowed and ignored
22038                    map.next_value::<::serde_json::Value>()?;
22039                }
22040            }
22041        }
22042        if optional && nothing {
22043            return Ok(None);
22044        }
22045        let result = RemovedStatus {
22046            is_recoverable: field_is_recoverable.ok_or_else(|| ::serde::de::Error::missing_field("is_recoverable"))?,
22047            is_disconnected: field_is_disconnected.ok_or_else(|| ::serde::de::Error::missing_field("is_disconnected"))?,
22048        };
22049        Ok(Some(result))
22050    }
22051
22052    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22053        &self,
22054        s: &mut S::SerializeStruct,
22055    ) -> Result<(), S::Error> {
22056        use serde::ser::SerializeStruct;
22057        s.serialize_field("is_recoverable", &self.is_recoverable)?;
22058        s.serialize_field("is_disconnected", &self.is_disconnected)?;
22059        Ok(())
22060    }
22061}
22062
22063impl<'de> ::serde::de::Deserialize<'de> for RemovedStatus {
22064    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22065        // struct deserializer
22066        use serde::de::{MapAccess, Visitor};
22067        struct StructVisitor;
22068        impl<'de> Visitor<'de> for StructVisitor {
22069            type Value = RemovedStatus;
22070            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22071                f.write_str("a RemovedStatus struct")
22072            }
22073            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22074                RemovedStatus::internal_deserialize(map)
22075            }
22076        }
22077        deserializer.deserialize_struct("RemovedStatus", REMOVED_STATUS_FIELDS, StructVisitor)
22078    }
22079}
22080
22081impl ::serde::ser::Serialize for RemovedStatus {
22082    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22083        // struct serializer
22084        use serde::ser::SerializeStruct;
22085        let mut s = serializer.serialize_struct("RemovedStatus", 2)?;
22086        self.internal_serialize::<S>(&mut s)?;
22087        s.end()
22088    }
22089}
22090
22091/// Result of trying to resend verification email to a secondary email address. 'success' is the
22092/// only value indicating that a verification email was successfully sent. The other values explain
22093/// the type of error that occurred, and include the email for which the error occurred.
22094#[derive(Debug, Clone, PartialEq, Eq)]
22095#[non_exhaustive] // variants may be added in the future
22096pub enum ResendSecondaryEmailResult {
22097    /// A verification email was successfully sent to the secondary email address.
22098    Success(crate::types::common::EmailAddress),
22099    /// This secondary email address is not pending for the user.
22100    NotPending(crate::types::common::EmailAddress),
22101    /// Too many emails are being sent to this email address. Please try again later.
22102    RateLimited(crate::types::common::EmailAddress),
22103    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22104    /// typically indicates that this SDK version is out of date.
22105    Other,
22106}
22107
22108impl<'de> ::serde::de::Deserialize<'de> for ResendSecondaryEmailResult {
22109    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22110        // union deserializer
22111        use serde::de::{self, MapAccess, Visitor};
22112        struct EnumVisitor;
22113        impl<'de> Visitor<'de> for EnumVisitor {
22114            type Value = ResendSecondaryEmailResult;
22115            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22116                f.write_str("a ResendSecondaryEmailResult structure")
22117            }
22118            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22119                let tag: &str = match map.next_key()? {
22120                    Some(".tag") => map.next_value()?,
22121                    _ => return Err(de::Error::missing_field(".tag"))
22122                };
22123                let value = match tag {
22124                    "success" => {
22125                        match map.next_key()? {
22126                            Some("success") => ResendSecondaryEmailResult::Success(map.next_value()?),
22127                            None => return Err(de::Error::missing_field("success")),
22128                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
22129                        }
22130                    }
22131                    "not_pending" => {
22132                        match map.next_key()? {
22133                            Some("not_pending") => ResendSecondaryEmailResult::NotPending(map.next_value()?),
22134                            None => return Err(de::Error::missing_field("not_pending")),
22135                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
22136                        }
22137                    }
22138                    "rate_limited" => {
22139                        match map.next_key()? {
22140                            Some("rate_limited") => ResendSecondaryEmailResult::RateLimited(map.next_value()?),
22141                            None => return Err(de::Error::missing_field("rate_limited")),
22142                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
22143                        }
22144                    }
22145                    _ => ResendSecondaryEmailResult::Other,
22146                };
22147                crate::eat_json_fields(&mut map)?;
22148                Ok(value)
22149            }
22150        }
22151        const VARIANTS: &[&str] = &["success",
22152                                    "not_pending",
22153                                    "rate_limited",
22154                                    "other"];
22155        deserializer.deserialize_struct("ResendSecondaryEmailResult", VARIANTS, EnumVisitor)
22156    }
22157}
22158
22159impl ::serde::ser::Serialize for ResendSecondaryEmailResult {
22160    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22161        // union serializer
22162        use serde::ser::SerializeStruct;
22163        match self {
22164            ResendSecondaryEmailResult::Success(x) => {
22165                // primitive
22166                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
22167                s.serialize_field(".tag", "success")?;
22168                s.serialize_field("success", x)?;
22169                s.end()
22170            }
22171            ResendSecondaryEmailResult::NotPending(x) => {
22172                // primitive
22173                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
22174                s.serialize_field(".tag", "not_pending")?;
22175                s.serialize_field("not_pending", x)?;
22176                s.end()
22177            }
22178            ResendSecondaryEmailResult::RateLimited(x) => {
22179                // primitive
22180                let mut s = serializer.serialize_struct("ResendSecondaryEmailResult", 2)?;
22181                s.serialize_field(".tag", "rate_limited")?;
22182                s.serialize_field("rate_limited", x)?;
22183                s.end()
22184            }
22185            ResendSecondaryEmailResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22186        }
22187    }
22188}
22189
22190#[derive(Debug, Clone, PartialEq, Eq)]
22191#[non_exhaustive] // structs may have more fields added in the future.
22192pub struct ResendVerificationEmailArg {
22193    /// List of users and secondary emails to resend verification emails to.
22194    pub emails_to_resend: Vec<UserSecondaryEmailsArg>,
22195}
22196
22197impl ResendVerificationEmailArg {
22198    pub fn new(emails_to_resend: Vec<UserSecondaryEmailsArg>) -> Self {
22199        ResendVerificationEmailArg {
22200            emails_to_resend,
22201        }
22202    }
22203}
22204
22205const RESEND_VERIFICATION_EMAIL_ARG_FIELDS: &[&str] = &["emails_to_resend"];
22206impl ResendVerificationEmailArg {
22207    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22208        map: V,
22209    ) -> Result<ResendVerificationEmailArg, V::Error> {
22210        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22211    }
22212
22213    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22214        mut map: V,
22215        optional: bool,
22216    ) -> Result<Option<ResendVerificationEmailArg>, V::Error> {
22217        let mut field_emails_to_resend = None;
22218        let mut nothing = true;
22219        while let Some(key) = map.next_key::<&str>()? {
22220            nothing = false;
22221            match key {
22222                "emails_to_resend" => {
22223                    if field_emails_to_resend.is_some() {
22224                        return Err(::serde::de::Error::duplicate_field("emails_to_resend"));
22225                    }
22226                    field_emails_to_resend = Some(map.next_value()?);
22227                }
22228                _ => {
22229                    // unknown field allowed and ignored
22230                    map.next_value::<::serde_json::Value>()?;
22231                }
22232            }
22233        }
22234        if optional && nothing {
22235            return Ok(None);
22236        }
22237        let result = ResendVerificationEmailArg {
22238            emails_to_resend: field_emails_to_resend.ok_or_else(|| ::serde::de::Error::missing_field("emails_to_resend"))?,
22239        };
22240        Ok(Some(result))
22241    }
22242
22243    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22244        &self,
22245        s: &mut S::SerializeStruct,
22246    ) -> Result<(), S::Error> {
22247        use serde::ser::SerializeStruct;
22248        s.serialize_field("emails_to_resend", &self.emails_to_resend)?;
22249        Ok(())
22250    }
22251}
22252
22253impl<'de> ::serde::de::Deserialize<'de> for ResendVerificationEmailArg {
22254    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22255        // struct deserializer
22256        use serde::de::{MapAccess, Visitor};
22257        struct StructVisitor;
22258        impl<'de> Visitor<'de> for StructVisitor {
22259            type Value = ResendVerificationEmailArg;
22260            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22261                f.write_str("a ResendVerificationEmailArg struct")
22262            }
22263            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22264                ResendVerificationEmailArg::internal_deserialize(map)
22265            }
22266        }
22267        deserializer.deserialize_struct("ResendVerificationEmailArg", RESEND_VERIFICATION_EMAIL_ARG_FIELDS, StructVisitor)
22268    }
22269}
22270
22271impl ::serde::ser::Serialize for ResendVerificationEmailArg {
22272    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22273        // struct serializer
22274        use serde::ser::SerializeStruct;
22275        let mut s = serializer.serialize_struct("ResendVerificationEmailArg", 1)?;
22276        self.internal_serialize::<S>(&mut s)?;
22277        s.end()
22278    }
22279}
22280
22281/// List of users and resend results.
22282#[derive(Debug, Clone, PartialEq, Eq)]
22283#[non_exhaustive] // structs may have more fields added in the future.
22284pub struct ResendVerificationEmailResult {
22285    pub results: Vec<UserResendResult>,
22286}
22287
22288impl ResendVerificationEmailResult {
22289    pub fn new(results: Vec<UserResendResult>) -> Self {
22290        ResendVerificationEmailResult {
22291            results,
22292        }
22293    }
22294}
22295
22296const RESEND_VERIFICATION_EMAIL_RESULT_FIELDS: &[&str] = &["results"];
22297impl ResendVerificationEmailResult {
22298    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22299        map: V,
22300    ) -> Result<ResendVerificationEmailResult, V::Error> {
22301        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22302    }
22303
22304    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22305        mut map: V,
22306        optional: bool,
22307    ) -> Result<Option<ResendVerificationEmailResult>, V::Error> {
22308        let mut field_results = None;
22309        let mut nothing = true;
22310        while let Some(key) = map.next_key::<&str>()? {
22311            nothing = false;
22312            match key {
22313                "results" => {
22314                    if field_results.is_some() {
22315                        return Err(::serde::de::Error::duplicate_field("results"));
22316                    }
22317                    field_results = Some(map.next_value()?);
22318                }
22319                _ => {
22320                    // unknown field allowed and ignored
22321                    map.next_value::<::serde_json::Value>()?;
22322                }
22323            }
22324        }
22325        if optional && nothing {
22326            return Ok(None);
22327        }
22328        let result = ResendVerificationEmailResult {
22329            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
22330        };
22331        Ok(Some(result))
22332    }
22333
22334    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22335        &self,
22336        s: &mut S::SerializeStruct,
22337    ) -> Result<(), S::Error> {
22338        use serde::ser::SerializeStruct;
22339        s.serialize_field("results", &self.results)?;
22340        Ok(())
22341    }
22342}
22343
22344impl<'de> ::serde::de::Deserialize<'de> for ResendVerificationEmailResult {
22345    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22346        // struct deserializer
22347        use serde::de::{MapAccess, Visitor};
22348        struct StructVisitor;
22349        impl<'de> Visitor<'de> for StructVisitor {
22350            type Value = ResendVerificationEmailResult;
22351            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22352                f.write_str("a ResendVerificationEmailResult struct")
22353            }
22354            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22355                ResendVerificationEmailResult::internal_deserialize(map)
22356            }
22357        }
22358        deserializer.deserialize_struct("ResendVerificationEmailResult", RESEND_VERIFICATION_EMAIL_RESULT_FIELDS, StructVisitor)
22359    }
22360}
22361
22362impl ::serde::ser::Serialize for ResendVerificationEmailResult {
22363    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22364        // struct serializer
22365        use serde::ser::SerializeStruct;
22366        let mut s = serializer.serialize_struct("ResendVerificationEmailResult", 1)?;
22367        self.internal_serialize::<S>(&mut s)?;
22368        s.end()
22369    }
22370}
22371
22372#[derive(Debug, Clone, PartialEq, Eq)]
22373#[non_exhaustive] // structs may have more fields added in the future.
22374pub struct RevokeDesktopClientArg {
22375    /// The session id.
22376    pub session_id: String,
22377    /// The unique id of the member owning the device.
22378    pub team_member_id: String,
22379    /// Whether to delete all files of the account (this is possible only if supported by the
22380    /// desktop client and  will be made the next time the client access the account).
22381    pub delete_on_unlink: bool,
22382}
22383
22384impl RevokeDesktopClientArg {
22385    pub fn new(session_id: String, team_member_id: String) -> Self {
22386        RevokeDesktopClientArg {
22387            session_id,
22388            team_member_id,
22389            delete_on_unlink: false,
22390        }
22391    }
22392
22393    pub fn with_delete_on_unlink(mut self, value: bool) -> Self {
22394        self.delete_on_unlink = value;
22395        self
22396    }
22397}
22398
22399const REVOKE_DESKTOP_CLIENT_ARG_FIELDS: &[&str] = &["session_id",
22400                                                    "team_member_id",
22401                                                    "delete_on_unlink"];
22402impl RevokeDesktopClientArg {
22403    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22404        map: V,
22405    ) -> Result<RevokeDesktopClientArg, V::Error> {
22406        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22407    }
22408
22409    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22410        mut map: V,
22411        optional: bool,
22412    ) -> Result<Option<RevokeDesktopClientArg>, V::Error> {
22413        let mut field_session_id = None;
22414        let mut field_team_member_id = None;
22415        let mut field_delete_on_unlink = None;
22416        let mut nothing = true;
22417        while let Some(key) = map.next_key::<&str>()? {
22418            nothing = false;
22419            match key {
22420                "session_id" => {
22421                    if field_session_id.is_some() {
22422                        return Err(::serde::de::Error::duplicate_field("session_id"));
22423                    }
22424                    field_session_id = Some(map.next_value()?);
22425                }
22426                "team_member_id" => {
22427                    if field_team_member_id.is_some() {
22428                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
22429                    }
22430                    field_team_member_id = Some(map.next_value()?);
22431                }
22432                "delete_on_unlink" => {
22433                    if field_delete_on_unlink.is_some() {
22434                        return Err(::serde::de::Error::duplicate_field("delete_on_unlink"));
22435                    }
22436                    field_delete_on_unlink = Some(map.next_value()?);
22437                }
22438                _ => {
22439                    // unknown field allowed and ignored
22440                    map.next_value::<::serde_json::Value>()?;
22441                }
22442            }
22443        }
22444        if optional && nothing {
22445            return Ok(None);
22446        }
22447        let result = RevokeDesktopClientArg {
22448            session_id: field_session_id.ok_or_else(|| ::serde::de::Error::missing_field("session_id"))?,
22449            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
22450            delete_on_unlink: field_delete_on_unlink.unwrap_or(false),
22451        };
22452        Ok(Some(result))
22453    }
22454
22455    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22456        &self,
22457        s: &mut S::SerializeStruct,
22458    ) -> Result<(), S::Error> {
22459        use serde::ser::SerializeStruct;
22460        s.serialize_field("session_id", &self.session_id)?;
22461        s.serialize_field("team_member_id", &self.team_member_id)?;
22462        if self.delete_on_unlink {
22463            s.serialize_field("delete_on_unlink", &self.delete_on_unlink)?;
22464        }
22465        Ok(())
22466    }
22467}
22468
22469impl<'de> ::serde::de::Deserialize<'de> for RevokeDesktopClientArg {
22470    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22471        // struct deserializer
22472        use serde::de::{MapAccess, Visitor};
22473        struct StructVisitor;
22474        impl<'de> Visitor<'de> for StructVisitor {
22475            type Value = RevokeDesktopClientArg;
22476            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22477                f.write_str("a RevokeDesktopClientArg struct")
22478            }
22479            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22480                RevokeDesktopClientArg::internal_deserialize(map)
22481            }
22482        }
22483        deserializer.deserialize_struct("RevokeDesktopClientArg", REVOKE_DESKTOP_CLIENT_ARG_FIELDS, StructVisitor)
22484    }
22485}
22486
22487impl ::serde::ser::Serialize for RevokeDesktopClientArg {
22488    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22489        // struct serializer
22490        use serde::ser::SerializeStruct;
22491        let mut s = serializer.serialize_struct("RevokeDesktopClientArg", 3)?;
22492        self.internal_serialize::<S>(&mut s)?;
22493        s.end()
22494    }
22495}
22496
22497// struct extends DeviceSessionArg
22498impl From<RevokeDesktopClientArg> for DeviceSessionArg {
22499    fn from(subtype: RevokeDesktopClientArg) -> Self {
22500        Self {
22501            session_id: subtype.session_id,
22502            team_member_id: subtype.team_member_id,
22503        }
22504    }
22505}
22506#[derive(Debug, Clone, PartialEq, Eq)]
22507pub enum RevokeDeviceSessionArg {
22508    /// End an active session.
22509    WebSession(DeviceSessionArg),
22510    /// Unlink a linked desktop device.
22511    DesktopClient(RevokeDesktopClientArg),
22512    /// Unlink a linked mobile device.
22513    MobileClient(DeviceSessionArg),
22514}
22515
22516impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionArg {
22517    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22518        // union deserializer
22519        use serde::de::{self, MapAccess, Visitor};
22520        struct EnumVisitor;
22521        impl<'de> Visitor<'de> for EnumVisitor {
22522            type Value = RevokeDeviceSessionArg;
22523            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22524                f.write_str("a RevokeDeviceSessionArg structure")
22525            }
22526            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22527                let tag: &str = match map.next_key()? {
22528                    Some(".tag") => map.next_value()?,
22529                    _ => return Err(de::Error::missing_field(".tag"))
22530                };
22531                let value = match tag {
22532                    "web_session" => RevokeDeviceSessionArg::WebSession(DeviceSessionArg::internal_deserialize(&mut map)?),
22533                    "desktop_client" => RevokeDeviceSessionArg::DesktopClient(RevokeDesktopClientArg::internal_deserialize(&mut map)?),
22534                    "mobile_client" => RevokeDeviceSessionArg::MobileClient(DeviceSessionArg::internal_deserialize(&mut map)?),
22535                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
22536                };
22537                crate::eat_json_fields(&mut map)?;
22538                Ok(value)
22539            }
22540        }
22541        const VARIANTS: &[&str] = &["web_session",
22542                                    "desktop_client",
22543                                    "mobile_client"];
22544        deserializer.deserialize_struct("RevokeDeviceSessionArg", VARIANTS, EnumVisitor)
22545    }
22546}
22547
22548impl ::serde::ser::Serialize for RevokeDeviceSessionArg {
22549    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22550        // union serializer
22551        use serde::ser::SerializeStruct;
22552        match self {
22553            RevokeDeviceSessionArg::WebSession(x) => {
22554                // struct
22555                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 3)?;
22556                s.serialize_field(".tag", "web_session")?;
22557                x.internal_serialize::<S>(&mut s)?;
22558                s.end()
22559            }
22560            RevokeDeviceSessionArg::DesktopClient(x) => {
22561                // struct
22562                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 4)?;
22563                s.serialize_field(".tag", "desktop_client")?;
22564                x.internal_serialize::<S>(&mut s)?;
22565                s.end()
22566            }
22567            RevokeDeviceSessionArg::MobileClient(x) => {
22568                // struct
22569                let mut s = serializer.serialize_struct("RevokeDeviceSessionArg", 3)?;
22570                s.serialize_field(".tag", "mobile_client")?;
22571                x.internal_serialize::<S>(&mut s)?;
22572                s.end()
22573            }
22574        }
22575    }
22576}
22577
22578#[derive(Debug, Clone, PartialEq, Eq)]
22579#[non_exhaustive] // structs may have more fields added in the future.
22580pub struct RevokeDeviceSessionBatchArg {
22581    pub revoke_devices: Vec<RevokeDeviceSessionArg>,
22582}
22583
22584impl RevokeDeviceSessionBatchArg {
22585    pub fn new(revoke_devices: Vec<RevokeDeviceSessionArg>) -> Self {
22586        RevokeDeviceSessionBatchArg {
22587            revoke_devices,
22588        }
22589    }
22590}
22591
22592const REVOKE_DEVICE_SESSION_BATCH_ARG_FIELDS: &[&str] = &["revoke_devices"];
22593impl RevokeDeviceSessionBatchArg {
22594    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22595        map: V,
22596    ) -> Result<RevokeDeviceSessionBatchArg, V::Error> {
22597        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22598    }
22599
22600    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22601        mut map: V,
22602        optional: bool,
22603    ) -> Result<Option<RevokeDeviceSessionBatchArg>, V::Error> {
22604        let mut field_revoke_devices = None;
22605        let mut nothing = true;
22606        while let Some(key) = map.next_key::<&str>()? {
22607            nothing = false;
22608            match key {
22609                "revoke_devices" => {
22610                    if field_revoke_devices.is_some() {
22611                        return Err(::serde::de::Error::duplicate_field("revoke_devices"));
22612                    }
22613                    field_revoke_devices = Some(map.next_value()?);
22614                }
22615                _ => {
22616                    // unknown field allowed and ignored
22617                    map.next_value::<::serde_json::Value>()?;
22618                }
22619            }
22620        }
22621        if optional && nothing {
22622            return Ok(None);
22623        }
22624        let result = RevokeDeviceSessionBatchArg {
22625            revoke_devices: field_revoke_devices.ok_or_else(|| ::serde::de::Error::missing_field("revoke_devices"))?,
22626        };
22627        Ok(Some(result))
22628    }
22629
22630    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22631        &self,
22632        s: &mut S::SerializeStruct,
22633    ) -> Result<(), S::Error> {
22634        use serde::ser::SerializeStruct;
22635        s.serialize_field("revoke_devices", &self.revoke_devices)?;
22636        Ok(())
22637    }
22638}
22639
22640impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchArg {
22641    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22642        // struct deserializer
22643        use serde::de::{MapAccess, Visitor};
22644        struct StructVisitor;
22645        impl<'de> Visitor<'de> for StructVisitor {
22646            type Value = RevokeDeviceSessionBatchArg;
22647            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22648                f.write_str("a RevokeDeviceSessionBatchArg struct")
22649            }
22650            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22651                RevokeDeviceSessionBatchArg::internal_deserialize(map)
22652            }
22653        }
22654        deserializer.deserialize_struct("RevokeDeviceSessionBatchArg", REVOKE_DEVICE_SESSION_BATCH_ARG_FIELDS, StructVisitor)
22655    }
22656}
22657
22658impl ::serde::ser::Serialize for RevokeDeviceSessionBatchArg {
22659    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22660        // struct serializer
22661        use serde::ser::SerializeStruct;
22662        let mut s = serializer.serialize_struct("RevokeDeviceSessionBatchArg", 1)?;
22663        self.internal_serialize::<S>(&mut s)?;
22664        s.end()
22665    }
22666}
22667
22668
22669#[derive(Debug, Clone, PartialEq, Eq)]
22670#[non_exhaustive] // variants may be added in the future
22671pub enum RevokeDeviceSessionBatchError {
22672    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22673    /// typically indicates that this SDK version is out of date.
22674    Other,
22675}
22676
22677impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchError {
22678    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22679        // union deserializer
22680        use serde::de::{self, MapAccess, Visitor};
22681        struct EnumVisitor;
22682        impl<'de> Visitor<'de> for EnumVisitor {
22683            type Value = RevokeDeviceSessionBatchError;
22684            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22685                f.write_str("a RevokeDeviceSessionBatchError structure")
22686            }
22687            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22688                let tag: &str = match map.next_key()? {
22689                    Some(".tag") => map.next_value()?,
22690                    _ => return Err(de::Error::missing_field(".tag"))
22691                };
22692                // open enum with no defined variants
22693                let _ = tag;
22694                crate::eat_json_fields(&mut map)?;
22695                Ok(RevokeDeviceSessionBatchError::Other)
22696            }
22697        }
22698        const VARIANTS: &[&str] = &["other"];
22699        deserializer.deserialize_struct("RevokeDeviceSessionBatchError", VARIANTS, EnumVisitor)
22700    }
22701}
22702
22703impl ::serde::ser::Serialize for RevokeDeviceSessionBatchError {
22704    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22705        // union serializer
22706        #![allow(unused_variables)]
22707        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
22708    }
22709}
22710
22711impl ::std::error::Error for RevokeDeviceSessionBatchError {
22712}
22713
22714impl ::std::fmt::Display for RevokeDeviceSessionBatchError {
22715    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22716        write!(f, "{:?}", *self)
22717    }
22718}
22719
22720#[derive(Debug, Clone, PartialEq, Eq)]
22721#[non_exhaustive] // structs may have more fields added in the future.
22722pub struct RevokeDeviceSessionBatchResult {
22723    pub revoke_devices_status: Vec<RevokeDeviceSessionStatus>,
22724}
22725
22726impl RevokeDeviceSessionBatchResult {
22727    pub fn new(revoke_devices_status: Vec<RevokeDeviceSessionStatus>) -> Self {
22728        RevokeDeviceSessionBatchResult {
22729            revoke_devices_status,
22730        }
22731    }
22732}
22733
22734const REVOKE_DEVICE_SESSION_BATCH_RESULT_FIELDS: &[&str] = &["revoke_devices_status"];
22735impl RevokeDeviceSessionBatchResult {
22736    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22737        map: V,
22738    ) -> Result<RevokeDeviceSessionBatchResult, V::Error> {
22739        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22740    }
22741
22742    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22743        mut map: V,
22744        optional: bool,
22745    ) -> Result<Option<RevokeDeviceSessionBatchResult>, V::Error> {
22746        let mut field_revoke_devices_status = None;
22747        let mut nothing = true;
22748        while let Some(key) = map.next_key::<&str>()? {
22749            nothing = false;
22750            match key {
22751                "revoke_devices_status" => {
22752                    if field_revoke_devices_status.is_some() {
22753                        return Err(::serde::de::Error::duplicate_field("revoke_devices_status"));
22754                    }
22755                    field_revoke_devices_status = Some(map.next_value()?);
22756                }
22757                _ => {
22758                    // unknown field allowed and ignored
22759                    map.next_value::<::serde_json::Value>()?;
22760                }
22761            }
22762        }
22763        if optional && nothing {
22764            return Ok(None);
22765        }
22766        let result = RevokeDeviceSessionBatchResult {
22767            revoke_devices_status: field_revoke_devices_status.ok_or_else(|| ::serde::de::Error::missing_field("revoke_devices_status"))?,
22768        };
22769        Ok(Some(result))
22770    }
22771
22772    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22773        &self,
22774        s: &mut S::SerializeStruct,
22775    ) -> Result<(), S::Error> {
22776        use serde::ser::SerializeStruct;
22777        s.serialize_field("revoke_devices_status", &self.revoke_devices_status)?;
22778        Ok(())
22779    }
22780}
22781
22782impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionBatchResult {
22783    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22784        // struct deserializer
22785        use serde::de::{MapAccess, Visitor};
22786        struct StructVisitor;
22787        impl<'de> Visitor<'de> for StructVisitor {
22788            type Value = RevokeDeviceSessionBatchResult;
22789            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22790                f.write_str("a RevokeDeviceSessionBatchResult struct")
22791            }
22792            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22793                RevokeDeviceSessionBatchResult::internal_deserialize(map)
22794            }
22795        }
22796        deserializer.deserialize_struct("RevokeDeviceSessionBatchResult", REVOKE_DEVICE_SESSION_BATCH_RESULT_FIELDS, StructVisitor)
22797    }
22798}
22799
22800impl ::serde::ser::Serialize for RevokeDeviceSessionBatchResult {
22801    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22802        // struct serializer
22803        use serde::ser::SerializeStruct;
22804        let mut s = serializer.serialize_struct("RevokeDeviceSessionBatchResult", 1)?;
22805        self.internal_serialize::<S>(&mut s)?;
22806        s.end()
22807    }
22808}
22809
22810#[derive(Debug, Clone, PartialEq, Eq)]
22811#[non_exhaustive] // variants may be added in the future
22812pub enum RevokeDeviceSessionError {
22813    /// Device session not found.
22814    DeviceSessionNotFound,
22815    /// Member not found.
22816    MemberNotFound,
22817    /// Catch-all used for unrecognized values returned from the server. Encountering this value
22818    /// typically indicates that this SDK version is out of date.
22819    Other,
22820}
22821
22822impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionError {
22823    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22824        // union deserializer
22825        use serde::de::{self, MapAccess, Visitor};
22826        struct EnumVisitor;
22827        impl<'de> Visitor<'de> for EnumVisitor {
22828            type Value = RevokeDeviceSessionError;
22829            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22830                f.write_str("a RevokeDeviceSessionError structure")
22831            }
22832            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
22833                let tag: &str = match map.next_key()? {
22834                    Some(".tag") => map.next_value()?,
22835                    _ => return Err(de::Error::missing_field(".tag"))
22836                };
22837                let value = match tag {
22838                    "device_session_not_found" => RevokeDeviceSessionError::DeviceSessionNotFound,
22839                    "member_not_found" => RevokeDeviceSessionError::MemberNotFound,
22840                    _ => RevokeDeviceSessionError::Other,
22841                };
22842                crate::eat_json_fields(&mut map)?;
22843                Ok(value)
22844            }
22845        }
22846        const VARIANTS: &[&str] = &["device_session_not_found",
22847                                    "member_not_found",
22848                                    "other"];
22849        deserializer.deserialize_struct("RevokeDeviceSessionError", VARIANTS, EnumVisitor)
22850    }
22851}
22852
22853impl ::serde::ser::Serialize for RevokeDeviceSessionError {
22854    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22855        // union serializer
22856        use serde::ser::SerializeStruct;
22857        match self {
22858            RevokeDeviceSessionError::DeviceSessionNotFound => {
22859                // unit
22860                let mut s = serializer.serialize_struct("RevokeDeviceSessionError", 1)?;
22861                s.serialize_field(".tag", "device_session_not_found")?;
22862                s.end()
22863            }
22864            RevokeDeviceSessionError::MemberNotFound => {
22865                // unit
22866                let mut s = serializer.serialize_struct("RevokeDeviceSessionError", 1)?;
22867                s.serialize_field(".tag", "member_not_found")?;
22868                s.end()
22869            }
22870            RevokeDeviceSessionError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
22871        }
22872    }
22873}
22874
22875impl ::std::error::Error for RevokeDeviceSessionError {
22876}
22877
22878impl ::std::fmt::Display for RevokeDeviceSessionError {
22879    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22880        match self {
22881            RevokeDeviceSessionError::DeviceSessionNotFound => f.write_str("Device session not found."),
22882            RevokeDeviceSessionError::MemberNotFound => f.write_str("Member not found."),
22883            _ => write!(f, "{:?}", *self),
22884        }
22885    }
22886}
22887
22888#[derive(Debug, Clone, PartialEq, Eq)]
22889#[non_exhaustive] // structs may have more fields added in the future.
22890pub struct RevokeDeviceSessionStatus {
22891    /// Result of the revoking request.
22892    pub success: bool,
22893    /// The error cause in case of a failure.
22894    pub error_type: Option<RevokeDeviceSessionError>,
22895}
22896
22897impl RevokeDeviceSessionStatus {
22898    pub fn new(success: bool) -> Self {
22899        RevokeDeviceSessionStatus {
22900            success,
22901            error_type: None,
22902        }
22903    }
22904
22905    pub fn with_error_type(mut self, value: RevokeDeviceSessionError) -> Self {
22906        self.error_type = Some(value);
22907        self
22908    }
22909}
22910
22911const REVOKE_DEVICE_SESSION_STATUS_FIELDS: &[&str] = &["success",
22912                                                       "error_type"];
22913impl RevokeDeviceSessionStatus {
22914    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
22915        map: V,
22916    ) -> Result<RevokeDeviceSessionStatus, V::Error> {
22917        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
22918    }
22919
22920    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
22921        mut map: V,
22922        optional: bool,
22923    ) -> Result<Option<RevokeDeviceSessionStatus>, V::Error> {
22924        let mut field_success = None;
22925        let mut field_error_type = None;
22926        let mut nothing = true;
22927        while let Some(key) = map.next_key::<&str>()? {
22928            nothing = false;
22929            match key {
22930                "success" => {
22931                    if field_success.is_some() {
22932                        return Err(::serde::de::Error::duplicate_field("success"));
22933                    }
22934                    field_success = Some(map.next_value()?);
22935                }
22936                "error_type" => {
22937                    if field_error_type.is_some() {
22938                        return Err(::serde::de::Error::duplicate_field("error_type"));
22939                    }
22940                    field_error_type = Some(map.next_value()?);
22941                }
22942                _ => {
22943                    // unknown field allowed and ignored
22944                    map.next_value::<::serde_json::Value>()?;
22945                }
22946            }
22947        }
22948        if optional && nothing {
22949            return Ok(None);
22950        }
22951        let result = RevokeDeviceSessionStatus {
22952            success: field_success.ok_or_else(|| ::serde::de::Error::missing_field("success"))?,
22953            error_type: field_error_type.and_then(Option::flatten),
22954        };
22955        Ok(Some(result))
22956    }
22957
22958    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
22959        &self,
22960        s: &mut S::SerializeStruct,
22961    ) -> Result<(), S::Error> {
22962        use serde::ser::SerializeStruct;
22963        s.serialize_field("success", &self.success)?;
22964        if let Some(val) = &self.error_type {
22965            s.serialize_field("error_type", val)?;
22966        }
22967        Ok(())
22968    }
22969}
22970
22971impl<'de> ::serde::de::Deserialize<'de> for RevokeDeviceSessionStatus {
22972    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
22973        // struct deserializer
22974        use serde::de::{MapAccess, Visitor};
22975        struct StructVisitor;
22976        impl<'de> Visitor<'de> for StructVisitor {
22977            type Value = RevokeDeviceSessionStatus;
22978            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
22979                f.write_str("a RevokeDeviceSessionStatus struct")
22980            }
22981            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
22982                RevokeDeviceSessionStatus::internal_deserialize(map)
22983            }
22984        }
22985        deserializer.deserialize_struct("RevokeDeviceSessionStatus", REVOKE_DEVICE_SESSION_STATUS_FIELDS, StructVisitor)
22986    }
22987}
22988
22989impl ::serde::ser::Serialize for RevokeDeviceSessionStatus {
22990    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
22991        // struct serializer
22992        use serde::ser::SerializeStruct;
22993        let mut s = serializer.serialize_struct("RevokeDeviceSessionStatus", 2)?;
22994        self.internal_serialize::<S>(&mut s)?;
22995        s.end()
22996    }
22997}
22998
22999#[derive(Debug, Clone, PartialEq, Eq)]
23000#[non_exhaustive] // structs may have more fields added in the future.
23001pub struct RevokeLinkedApiAppArg {
23002    /// The application's unique id.
23003    pub app_id: String,
23004    /// The unique id of the member owning the device.
23005    pub team_member_id: String,
23006    /// This flag is not longer supported, the application dedicated folder (in case the application
23007    /// uses one) will be kept.
23008    pub keep_app_folder: bool,
23009}
23010
23011impl RevokeLinkedApiAppArg {
23012    pub fn new(app_id: String, team_member_id: String) -> Self {
23013        RevokeLinkedApiAppArg {
23014            app_id,
23015            team_member_id,
23016            keep_app_folder: true,
23017        }
23018    }
23019
23020    pub fn with_keep_app_folder(mut self, value: bool) -> Self {
23021        self.keep_app_folder = value;
23022        self
23023    }
23024}
23025
23026const REVOKE_LINKED_API_APP_ARG_FIELDS: &[&str] = &["app_id",
23027                                                    "team_member_id",
23028                                                    "keep_app_folder"];
23029impl RevokeLinkedApiAppArg {
23030    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23031        map: V,
23032    ) -> Result<RevokeLinkedApiAppArg, V::Error> {
23033        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23034    }
23035
23036    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23037        mut map: V,
23038        optional: bool,
23039    ) -> Result<Option<RevokeLinkedApiAppArg>, V::Error> {
23040        let mut field_app_id = None;
23041        let mut field_team_member_id = None;
23042        let mut field_keep_app_folder = None;
23043        let mut nothing = true;
23044        while let Some(key) = map.next_key::<&str>()? {
23045            nothing = false;
23046            match key {
23047                "app_id" => {
23048                    if field_app_id.is_some() {
23049                        return Err(::serde::de::Error::duplicate_field("app_id"));
23050                    }
23051                    field_app_id = Some(map.next_value()?);
23052                }
23053                "team_member_id" => {
23054                    if field_team_member_id.is_some() {
23055                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
23056                    }
23057                    field_team_member_id = Some(map.next_value()?);
23058                }
23059                "keep_app_folder" => {
23060                    if field_keep_app_folder.is_some() {
23061                        return Err(::serde::de::Error::duplicate_field("keep_app_folder"));
23062                    }
23063                    field_keep_app_folder = Some(map.next_value()?);
23064                }
23065                _ => {
23066                    // unknown field allowed and ignored
23067                    map.next_value::<::serde_json::Value>()?;
23068                }
23069            }
23070        }
23071        if optional && nothing {
23072            return Ok(None);
23073        }
23074        let result = RevokeLinkedApiAppArg {
23075            app_id: field_app_id.ok_or_else(|| ::serde::de::Error::missing_field("app_id"))?,
23076            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
23077            keep_app_folder: field_keep_app_folder.unwrap_or(true),
23078        };
23079        Ok(Some(result))
23080    }
23081
23082    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23083        &self,
23084        s: &mut S::SerializeStruct,
23085    ) -> Result<(), S::Error> {
23086        use serde::ser::SerializeStruct;
23087        s.serialize_field("app_id", &self.app_id)?;
23088        s.serialize_field("team_member_id", &self.team_member_id)?;
23089        if !self.keep_app_folder {
23090            s.serialize_field("keep_app_folder", &self.keep_app_folder)?;
23091        }
23092        Ok(())
23093    }
23094}
23095
23096impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedApiAppArg {
23097    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23098        // struct deserializer
23099        use serde::de::{MapAccess, Visitor};
23100        struct StructVisitor;
23101        impl<'de> Visitor<'de> for StructVisitor {
23102            type Value = RevokeLinkedApiAppArg;
23103            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23104                f.write_str("a RevokeLinkedApiAppArg struct")
23105            }
23106            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23107                RevokeLinkedApiAppArg::internal_deserialize(map)
23108            }
23109        }
23110        deserializer.deserialize_struct("RevokeLinkedApiAppArg", REVOKE_LINKED_API_APP_ARG_FIELDS, StructVisitor)
23111    }
23112}
23113
23114impl ::serde::ser::Serialize for RevokeLinkedApiAppArg {
23115    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23116        // struct serializer
23117        use serde::ser::SerializeStruct;
23118        let mut s = serializer.serialize_struct("RevokeLinkedApiAppArg", 3)?;
23119        self.internal_serialize::<S>(&mut s)?;
23120        s.end()
23121    }
23122}
23123
23124#[derive(Debug, Clone, PartialEq, Eq)]
23125#[non_exhaustive] // structs may have more fields added in the future.
23126pub struct RevokeLinkedApiAppBatchArg {
23127    pub revoke_linked_app: Vec<RevokeLinkedApiAppArg>,
23128}
23129
23130impl RevokeLinkedApiAppBatchArg {
23131    pub fn new(revoke_linked_app: Vec<RevokeLinkedApiAppArg>) -> Self {
23132        RevokeLinkedApiAppBatchArg {
23133            revoke_linked_app,
23134        }
23135    }
23136}
23137
23138const REVOKE_LINKED_API_APP_BATCH_ARG_FIELDS: &[&str] = &["revoke_linked_app"];
23139impl RevokeLinkedApiAppBatchArg {
23140    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23141        map: V,
23142    ) -> Result<RevokeLinkedApiAppBatchArg, V::Error> {
23143        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23144    }
23145
23146    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23147        mut map: V,
23148        optional: bool,
23149    ) -> Result<Option<RevokeLinkedApiAppBatchArg>, V::Error> {
23150        let mut field_revoke_linked_app = None;
23151        let mut nothing = true;
23152        while let Some(key) = map.next_key::<&str>()? {
23153            nothing = false;
23154            match key {
23155                "revoke_linked_app" => {
23156                    if field_revoke_linked_app.is_some() {
23157                        return Err(::serde::de::Error::duplicate_field("revoke_linked_app"));
23158                    }
23159                    field_revoke_linked_app = Some(map.next_value()?);
23160                }
23161                _ => {
23162                    // unknown field allowed and ignored
23163                    map.next_value::<::serde_json::Value>()?;
23164                }
23165            }
23166        }
23167        if optional && nothing {
23168            return Ok(None);
23169        }
23170        let result = RevokeLinkedApiAppBatchArg {
23171            revoke_linked_app: field_revoke_linked_app.ok_or_else(|| ::serde::de::Error::missing_field("revoke_linked_app"))?,
23172        };
23173        Ok(Some(result))
23174    }
23175
23176    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23177        &self,
23178        s: &mut S::SerializeStruct,
23179    ) -> Result<(), S::Error> {
23180        use serde::ser::SerializeStruct;
23181        s.serialize_field("revoke_linked_app", &self.revoke_linked_app)?;
23182        Ok(())
23183    }
23184}
23185
23186impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedApiAppBatchArg {
23187    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23188        // struct deserializer
23189        use serde::de::{MapAccess, Visitor};
23190        struct StructVisitor;
23191        impl<'de> Visitor<'de> for StructVisitor {
23192            type Value = RevokeLinkedApiAppBatchArg;
23193            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23194                f.write_str("a RevokeLinkedApiAppBatchArg struct")
23195            }
23196            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23197                RevokeLinkedApiAppBatchArg::internal_deserialize(map)
23198            }
23199        }
23200        deserializer.deserialize_struct("RevokeLinkedApiAppBatchArg", REVOKE_LINKED_API_APP_BATCH_ARG_FIELDS, StructVisitor)
23201    }
23202}
23203
23204impl ::serde::ser::Serialize for RevokeLinkedApiAppBatchArg {
23205    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23206        // struct serializer
23207        use serde::ser::SerializeStruct;
23208        let mut s = serializer.serialize_struct("RevokeLinkedApiAppBatchArg", 1)?;
23209        self.internal_serialize::<S>(&mut s)?;
23210        s.end()
23211    }
23212}
23213
23214/// Error returned by
23215/// [`linked_apps_revoke_linked_app_batch()`](crate::team::linked_apps_revoke_linked_app_batch).
23216#[derive(Debug, Clone, PartialEq, Eq)]
23217#[non_exhaustive] // variants may be added in the future
23218pub enum RevokeLinkedAppBatchError {
23219    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23220    /// typically indicates that this SDK version is out of date.
23221    Other,
23222}
23223
23224impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppBatchError {
23225    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23226        // union deserializer
23227        use serde::de::{self, MapAccess, Visitor};
23228        struct EnumVisitor;
23229        impl<'de> Visitor<'de> for EnumVisitor {
23230            type Value = RevokeLinkedAppBatchError;
23231            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23232                f.write_str("a RevokeLinkedAppBatchError structure")
23233            }
23234            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23235                let tag: &str = match map.next_key()? {
23236                    Some(".tag") => map.next_value()?,
23237                    _ => return Err(de::Error::missing_field(".tag"))
23238                };
23239                // open enum with no defined variants
23240                let _ = tag;
23241                crate::eat_json_fields(&mut map)?;
23242                Ok(RevokeLinkedAppBatchError::Other)
23243            }
23244        }
23245        const VARIANTS: &[&str] = &["other"];
23246        deserializer.deserialize_struct("RevokeLinkedAppBatchError", VARIANTS, EnumVisitor)
23247    }
23248}
23249
23250impl ::serde::ser::Serialize for RevokeLinkedAppBatchError {
23251    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23252        // union serializer
23253        #![allow(unused_variables)]
23254        Err(::serde::ser::Error::custom("cannot serialize an open union with no defined variants"))
23255    }
23256}
23257
23258impl ::std::error::Error for RevokeLinkedAppBatchError {
23259}
23260
23261impl ::std::fmt::Display for RevokeLinkedAppBatchError {
23262    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23263        write!(f, "{:?}", *self)
23264    }
23265}
23266
23267#[derive(Debug, Clone, PartialEq, Eq)]
23268#[non_exhaustive] // structs may have more fields added in the future.
23269pub struct RevokeLinkedAppBatchResult {
23270    pub revoke_linked_app_status: Vec<RevokeLinkedAppStatus>,
23271}
23272
23273impl RevokeLinkedAppBatchResult {
23274    pub fn new(revoke_linked_app_status: Vec<RevokeLinkedAppStatus>) -> Self {
23275        RevokeLinkedAppBatchResult {
23276            revoke_linked_app_status,
23277        }
23278    }
23279}
23280
23281const REVOKE_LINKED_APP_BATCH_RESULT_FIELDS: &[&str] = &["revoke_linked_app_status"];
23282impl RevokeLinkedAppBatchResult {
23283    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23284        map: V,
23285    ) -> Result<RevokeLinkedAppBatchResult, V::Error> {
23286        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23287    }
23288
23289    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23290        mut map: V,
23291        optional: bool,
23292    ) -> Result<Option<RevokeLinkedAppBatchResult>, V::Error> {
23293        let mut field_revoke_linked_app_status = None;
23294        let mut nothing = true;
23295        while let Some(key) = map.next_key::<&str>()? {
23296            nothing = false;
23297            match key {
23298                "revoke_linked_app_status" => {
23299                    if field_revoke_linked_app_status.is_some() {
23300                        return Err(::serde::de::Error::duplicate_field("revoke_linked_app_status"));
23301                    }
23302                    field_revoke_linked_app_status = Some(map.next_value()?);
23303                }
23304                _ => {
23305                    // unknown field allowed and ignored
23306                    map.next_value::<::serde_json::Value>()?;
23307                }
23308            }
23309        }
23310        if optional && nothing {
23311            return Ok(None);
23312        }
23313        let result = RevokeLinkedAppBatchResult {
23314            revoke_linked_app_status: field_revoke_linked_app_status.ok_or_else(|| ::serde::de::Error::missing_field("revoke_linked_app_status"))?,
23315        };
23316        Ok(Some(result))
23317    }
23318
23319    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23320        &self,
23321        s: &mut S::SerializeStruct,
23322    ) -> Result<(), S::Error> {
23323        use serde::ser::SerializeStruct;
23324        s.serialize_field("revoke_linked_app_status", &self.revoke_linked_app_status)?;
23325        Ok(())
23326    }
23327}
23328
23329impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppBatchResult {
23330    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23331        // struct deserializer
23332        use serde::de::{MapAccess, Visitor};
23333        struct StructVisitor;
23334        impl<'de> Visitor<'de> for StructVisitor {
23335            type Value = RevokeLinkedAppBatchResult;
23336            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23337                f.write_str("a RevokeLinkedAppBatchResult struct")
23338            }
23339            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23340                RevokeLinkedAppBatchResult::internal_deserialize(map)
23341            }
23342        }
23343        deserializer.deserialize_struct("RevokeLinkedAppBatchResult", REVOKE_LINKED_APP_BATCH_RESULT_FIELDS, StructVisitor)
23344    }
23345}
23346
23347impl ::serde::ser::Serialize for RevokeLinkedAppBatchResult {
23348    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23349        // struct serializer
23350        use serde::ser::SerializeStruct;
23351        let mut s = serializer.serialize_struct("RevokeLinkedAppBatchResult", 1)?;
23352        self.internal_serialize::<S>(&mut s)?;
23353        s.end()
23354    }
23355}
23356
23357/// Error returned by
23358/// [`linked_apps_revoke_linked_app()`](crate::team::linked_apps_revoke_linked_app).
23359#[derive(Debug, Clone, PartialEq, Eq)]
23360#[non_exhaustive] // variants may be added in the future
23361pub enum RevokeLinkedAppError {
23362    /// Application not found.
23363    AppNotFound,
23364    /// Member not found.
23365    MemberNotFound,
23366    /// App folder removal is not supported.
23367    AppFolderRemovalNotSupported,
23368    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23369    /// typically indicates that this SDK version is out of date.
23370    Other,
23371}
23372
23373impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppError {
23374    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23375        // union deserializer
23376        use serde::de::{self, MapAccess, Visitor};
23377        struct EnumVisitor;
23378        impl<'de> Visitor<'de> for EnumVisitor {
23379            type Value = RevokeLinkedAppError;
23380            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23381                f.write_str("a RevokeLinkedAppError structure")
23382            }
23383            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23384                let tag: &str = match map.next_key()? {
23385                    Some(".tag") => map.next_value()?,
23386                    _ => return Err(de::Error::missing_field(".tag"))
23387                };
23388                let value = match tag {
23389                    "app_not_found" => RevokeLinkedAppError::AppNotFound,
23390                    "member_not_found" => RevokeLinkedAppError::MemberNotFound,
23391                    "app_folder_removal_not_supported" => RevokeLinkedAppError::AppFolderRemovalNotSupported,
23392                    _ => RevokeLinkedAppError::Other,
23393                };
23394                crate::eat_json_fields(&mut map)?;
23395                Ok(value)
23396            }
23397        }
23398        const VARIANTS: &[&str] = &["app_not_found",
23399                                    "member_not_found",
23400                                    "app_folder_removal_not_supported",
23401                                    "other"];
23402        deserializer.deserialize_struct("RevokeLinkedAppError", VARIANTS, EnumVisitor)
23403    }
23404}
23405
23406impl ::serde::ser::Serialize for RevokeLinkedAppError {
23407    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23408        // union serializer
23409        use serde::ser::SerializeStruct;
23410        match self {
23411            RevokeLinkedAppError::AppNotFound => {
23412                // unit
23413                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
23414                s.serialize_field(".tag", "app_not_found")?;
23415                s.end()
23416            }
23417            RevokeLinkedAppError::MemberNotFound => {
23418                // unit
23419                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
23420                s.serialize_field(".tag", "member_not_found")?;
23421                s.end()
23422            }
23423            RevokeLinkedAppError::AppFolderRemovalNotSupported => {
23424                // unit
23425                let mut s = serializer.serialize_struct("RevokeLinkedAppError", 1)?;
23426                s.serialize_field(".tag", "app_folder_removal_not_supported")?;
23427                s.end()
23428            }
23429            RevokeLinkedAppError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23430        }
23431    }
23432}
23433
23434impl ::std::error::Error for RevokeLinkedAppError {
23435}
23436
23437impl ::std::fmt::Display for RevokeLinkedAppError {
23438    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23439        match self {
23440            RevokeLinkedAppError::AppNotFound => f.write_str("Application not found."),
23441            RevokeLinkedAppError::MemberNotFound => f.write_str("Member not found."),
23442            RevokeLinkedAppError::AppFolderRemovalNotSupported => f.write_str("App folder removal is not supported."),
23443            _ => write!(f, "{:?}", *self),
23444        }
23445    }
23446}
23447
23448#[derive(Debug, Clone, PartialEq, Eq)]
23449#[non_exhaustive] // structs may have more fields added in the future.
23450pub struct RevokeLinkedAppStatus {
23451    /// Result of the revoking request.
23452    pub success: bool,
23453    /// The error cause in case of a failure.
23454    pub error_type: Option<RevokeLinkedAppError>,
23455}
23456
23457impl RevokeLinkedAppStatus {
23458    pub fn new(success: bool) -> Self {
23459        RevokeLinkedAppStatus {
23460            success,
23461            error_type: None,
23462        }
23463    }
23464
23465    pub fn with_error_type(mut self, value: RevokeLinkedAppError) -> Self {
23466        self.error_type = Some(value);
23467        self
23468    }
23469}
23470
23471const REVOKE_LINKED_APP_STATUS_FIELDS: &[&str] = &["success",
23472                                                   "error_type"];
23473impl RevokeLinkedAppStatus {
23474    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23475        map: V,
23476    ) -> Result<RevokeLinkedAppStatus, V::Error> {
23477        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23478    }
23479
23480    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23481        mut map: V,
23482        optional: bool,
23483    ) -> Result<Option<RevokeLinkedAppStatus>, V::Error> {
23484        let mut field_success = None;
23485        let mut field_error_type = None;
23486        let mut nothing = true;
23487        while let Some(key) = map.next_key::<&str>()? {
23488            nothing = false;
23489            match key {
23490                "success" => {
23491                    if field_success.is_some() {
23492                        return Err(::serde::de::Error::duplicate_field("success"));
23493                    }
23494                    field_success = Some(map.next_value()?);
23495                }
23496                "error_type" => {
23497                    if field_error_type.is_some() {
23498                        return Err(::serde::de::Error::duplicate_field("error_type"));
23499                    }
23500                    field_error_type = Some(map.next_value()?);
23501                }
23502                _ => {
23503                    // unknown field allowed and ignored
23504                    map.next_value::<::serde_json::Value>()?;
23505                }
23506            }
23507        }
23508        if optional && nothing {
23509            return Ok(None);
23510        }
23511        let result = RevokeLinkedAppStatus {
23512            success: field_success.ok_or_else(|| ::serde::de::Error::missing_field("success"))?,
23513            error_type: field_error_type.and_then(Option::flatten),
23514        };
23515        Ok(Some(result))
23516    }
23517
23518    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23519        &self,
23520        s: &mut S::SerializeStruct,
23521    ) -> Result<(), S::Error> {
23522        use serde::ser::SerializeStruct;
23523        s.serialize_field("success", &self.success)?;
23524        if let Some(val) = &self.error_type {
23525            s.serialize_field("error_type", val)?;
23526        }
23527        Ok(())
23528    }
23529}
23530
23531impl<'de> ::serde::de::Deserialize<'de> for RevokeLinkedAppStatus {
23532    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23533        // struct deserializer
23534        use serde::de::{MapAccess, Visitor};
23535        struct StructVisitor;
23536        impl<'de> Visitor<'de> for StructVisitor {
23537            type Value = RevokeLinkedAppStatus;
23538            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23539                f.write_str("a RevokeLinkedAppStatus struct")
23540            }
23541            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23542                RevokeLinkedAppStatus::internal_deserialize(map)
23543            }
23544        }
23545        deserializer.deserialize_struct("RevokeLinkedAppStatus", REVOKE_LINKED_APP_STATUS_FIELDS, StructVisitor)
23546    }
23547}
23548
23549impl ::serde::ser::Serialize for RevokeLinkedAppStatus {
23550    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23551        // struct serializer
23552        use serde::ser::SerializeStruct;
23553        let mut s = serializer.serialize_struct("RevokeLinkedAppStatus", 2)?;
23554        self.internal_serialize::<S>(&mut s)?;
23555        s.end()
23556    }
23557}
23558
23559#[derive(Debug, Clone, PartialEq, Eq)]
23560#[non_exhaustive] // structs may have more fields added in the future.
23561pub struct SetCustomQuotaArg {
23562    /// List of users and their custom quotas.
23563    pub users_and_quotas: Vec<UserCustomQuotaArg>,
23564}
23565
23566impl SetCustomQuotaArg {
23567    pub fn new(users_and_quotas: Vec<UserCustomQuotaArg>) -> Self {
23568        SetCustomQuotaArg {
23569            users_and_quotas,
23570        }
23571    }
23572}
23573
23574const SET_CUSTOM_QUOTA_ARG_FIELDS: &[&str] = &["users_and_quotas"];
23575impl SetCustomQuotaArg {
23576    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23577        map: V,
23578    ) -> Result<SetCustomQuotaArg, V::Error> {
23579        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
23580    }
23581
23582    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
23583        mut map: V,
23584        optional: bool,
23585    ) -> Result<Option<SetCustomQuotaArg>, V::Error> {
23586        let mut field_users_and_quotas = None;
23587        let mut nothing = true;
23588        while let Some(key) = map.next_key::<&str>()? {
23589            nothing = false;
23590            match key {
23591                "users_and_quotas" => {
23592                    if field_users_and_quotas.is_some() {
23593                        return Err(::serde::de::Error::duplicate_field("users_and_quotas"));
23594                    }
23595                    field_users_and_quotas = Some(map.next_value()?);
23596                }
23597                _ => {
23598                    // unknown field allowed and ignored
23599                    map.next_value::<::serde_json::Value>()?;
23600                }
23601            }
23602        }
23603        if optional && nothing {
23604            return Ok(None);
23605        }
23606        let result = SetCustomQuotaArg {
23607            users_and_quotas: field_users_and_quotas.ok_or_else(|| ::serde::de::Error::missing_field("users_and_quotas"))?,
23608        };
23609        Ok(Some(result))
23610    }
23611
23612    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23613        &self,
23614        s: &mut S::SerializeStruct,
23615    ) -> Result<(), S::Error> {
23616        use serde::ser::SerializeStruct;
23617        s.serialize_field("users_and_quotas", &self.users_and_quotas)?;
23618        Ok(())
23619    }
23620}
23621
23622impl<'de> ::serde::de::Deserialize<'de> for SetCustomQuotaArg {
23623    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23624        // struct deserializer
23625        use serde::de::{MapAccess, Visitor};
23626        struct StructVisitor;
23627        impl<'de> Visitor<'de> for StructVisitor {
23628            type Value = SetCustomQuotaArg;
23629            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23630                f.write_str("a SetCustomQuotaArg struct")
23631            }
23632            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23633                SetCustomQuotaArg::internal_deserialize(map)
23634            }
23635        }
23636        deserializer.deserialize_struct("SetCustomQuotaArg", SET_CUSTOM_QUOTA_ARG_FIELDS, StructVisitor)
23637    }
23638}
23639
23640impl ::serde::ser::Serialize for SetCustomQuotaArg {
23641    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23642        // struct serializer
23643        use serde::ser::SerializeStruct;
23644        let mut s = serializer.serialize_struct("SetCustomQuotaArg", 1)?;
23645        self.internal_serialize::<S>(&mut s)?;
23646        s.end()
23647    }
23648}
23649
23650/// Error returned when setting member custom quota.
23651#[derive(Debug, Clone, PartialEq, Eq)]
23652#[non_exhaustive] // variants may be added in the future
23653pub enum SetCustomQuotaError {
23654    /// A maximum of 1000 users can be set for a single call.
23655    TooManyUsers,
23656    /// Some of the users are on the excluded users list and can't have custom quota set.
23657    SomeUsersAreExcluded,
23658    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23659    /// typically indicates that this SDK version is out of date.
23660    Other,
23661}
23662
23663impl<'de> ::serde::de::Deserialize<'de> for SetCustomQuotaError {
23664    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23665        // union deserializer
23666        use serde::de::{self, MapAccess, Visitor};
23667        struct EnumVisitor;
23668        impl<'de> Visitor<'de> for EnumVisitor {
23669            type Value = SetCustomQuotaError;
23670            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23671                f.write_str("a SetCustomQuotaError structure")
23672            }
23673            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23674                let tag: &str = match map.next_key()? {
23675                    Some(".tag") => map.next_value()?,
23676                    _ => return Err(de::Error::missing_field(".tag"))
23677                };
23678                let value = match tag {
23679                    "too_many_users" => SetCustomQuotaError::TooManyUsers,
23680                    "some_users_are_excluded" => SetCustomQuotaError::SomeUsersAreExcluded,
23681                    _ => SetCustomQuotaError::Other,
23682                };
23683                crate::eat_json_fields(&mut map)?;
23684                Ok(value)
23685            }
23686        }
23687        const VARIANTS: &[&str] = &["too_many_users",
23688                                    "other",
23689                                    "some_users_are_excluded"];
23690        deserializer.deserialize_struct("SetCustomQuotaError", VARIANTS, EnumVisitor)
23691    }
23692}
23693
23694impl ::serde::ser::Serialize for SetCustomQuotaError {
23695    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23696        // union serializer
23697        use serde::ser::SerializeStruct;
23698        match self {
23699            SetCustomQuotaError::TooManyUsers => {
23700                // unit
23701                let mut s = serializer.serialize_struct("SetCustomQuotaError", 1)?;
23702                s.serialize_field(".tag", "too_many_users")?;
23703                s.end()
23704            }
23705            SetCustomQuotaError::SomeUsersAreExcluded => {
23706                // unit
23707                let mut s = serializer.serialize_struct("SetCustomQuotaError", 1)?;
23708                s.serialize_field(".tag", "some_users_are_excluded")?;
23709                s.end()
23710            }
23711            SetCustomQuotaError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23712        }
23713    }
23714}
23715
23716impl ::std::error::Error for SetCustomQuotaError {
23717}
23718
23719impl ::std::fmt::Display for SetCustomQuotaError {
23720    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23721        match self {
23722            SetCustomQuotaError::TooManyUsers => f.write_str("A maximum of 1000 users can be set for a single call."),
23723            SetCustomQuotaError::SomeUsersAreExcluded => f.write_str("Some of the users are on the excluded users list and can't have custom quota set."),
23724            _ => write!(f, "{:?}", *self),
23725        }
23726    }
23727}
23728
23729// union extends CustomQuotaError
23730impl From<CustomQuotaError> for SetCustomQuotaError {
23731    fn from(parent: CustomQuotaError) -> Self {
23732        match parent {
23733            CustomQuotaError::TooManyUsers => SetCustomQuotaError::TooManyUsers,
23734            CustomQuotaError::Other => SetCustomQuotaError::Other,
23735        }
23736    }
23737}
23738/// Structure representing Approve List entries. Domain and emails are supported. At least one entry
23739/// of any supported type is required.
23740#[derive(Debug, Clone, PartialEq, Eq, Default)]
23741#[non_exhaustive] // structs may have more fields added in the future.
23742pub struct SharingAllowlistAddArgs {
23743    /// List of domains represented by valid string representation (RFC-1034/5).
23744    pub domains: Option<Vec<String>>,
23745    /// List of emails represented by valid string representation (RFC-5322/822).
23746    pub emails: Option<Vec<String>>,
23747}
23748
23749impl SharingAllowlistAddArgs {
23750    pub fn with_domains(mut self, value: Vec<String>) -> Self {
23751        self.domains = Some(value);
23752        self
23753    }
23754
23755    pub fn with_emails(mut self, value: Vec<String>) -> Self {
23756        self.emails = Some(value);
23757        self
23758    }
23759}
23760
23761const SHARING_ALLOWLIST_ADD_ARGS_FIELDS: &[&str] = &["domains",
23762                                                     "emails"];
23763impl SharingAllowlistAddArgs {
23764    // no _opt deserializer
23765    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23766        mut map: V,
23767    ) -> Result<SharingAllowlistAddArgs, V::Error> {
23768        let mut field_domains = None;
23769        let mut field_emails = None;
23770        while let Some(key) = map.next_key::<&str>()? {
23771            match key {
23772                "domains" => {
23773                    if field_domains.is_some() {
23774                        return Err(::serde::de::Error::duplicate_field("domains"));
23775                    }
23776                    field_domains = Some(map.next_value()?);
23777                }
23778                "emails" => {
23779                    if field_emails.is_some() {
23780                        return Err(::serde::de::Error::duplicate_field("emails"));
23781                    }
23782                    field_emails = Some(map.next_value()?);
23783                }
23784                _ => {
23785                    // unknown field allowed and ignored
23786                    map.next_value::<::serde_json::Value>()?;
23787                }
23788            }
23789        }
23790        let result = SharingAllowlistAddArgs {
23791            domains: field_domains.and_then(Option::flatten),
23792            emails: field_emails.and_then(Option::flatten),
23793        };
23794        Ok(result)
23795    }
23796
23797    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
23798        &self,
23799        s: &mut S::SerializeStruct,
23800    ) -> Result<(), S::Error> {
23801        use serde::ser::SerializeStruct;
23802        if let Some(val) = &self.domains {
23803            s.serialize_field("domains", val)?;
23804        }
23805        if let Some(val) = &self.emails {
23806            s.serialize_field("emails", val)?;
23807        }
23808        Ok(())
23809    }
23810}
23811
23812impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddArgs {
23813    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23814        // struct deserializer
23815        use serde::de::{MapAccess, Visitor};
23816        struct StructVisitor;
23817        impl<'de> Visitor<'de> for StructVisitor {
23818            type Value = SharingAllowlistAddArgs;
23819            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23820                f.write_str("a SharingAllowlistAddArgs struct")
23821            }
23822            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
23823                SharingAllowlistAddArgs::internal_deserialize(map)
23824            }
23825        }
23826        deserializer.deserialize_struct("SharingAllowlistAddArgs", SHARING_ALLOWLIST_ADD_ARGS_FIELDS, StructVisitor)
23827    }
23828}
23829
23830impl ::serde::ser::Serialize for SharingAllowlistAddArgs {
23831    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23832        // struct serializer
23833        use serde::ser::SerializeStruct;
23834        let mut s = serializer.serialize_struct("SharingAllowlistAddArgs", 2)?;
23835        self.internal_serialize::<S>(&mut s)?;
23836        s.end()
23837    }
23838}
23839
23840#[derive(Debug, Clone, PartialEq, Eq)]
23841#[non_exhaustive] // variants may be added in the future
23842pub enum SharingAllowlistAddError {
23843    /// One of provided values is not valid.
23844    MalformedEntry(String),
23845    /// Neither single domain nor email provided.
23846    NoEntriesProvided,
23847    /// Too many entries provided within one call.
23848    TooManyEntriesProvided,
23849    /// Team entries limit reached.
23850    TeamLimitReached,
23851    /// Unknown error.
23852    UnknownError,
23853    /// Entries already exists.
23854    EntriesAlreadyExist(String),
23855    /// Catch-all used for unrecognized values returned from the server. Encountering this value
23856    /// typically indicates that this SDK version is out of date.
23857    Other,
23858}
23859
23860impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddError {
23861    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23862        // union deserializer
23863        use serde::de::{self, MapAccess, Visitor};
23864        struct EnumVisitor;
23865        impl<'de> Visitor<'de> for EnumVisitor {
23866            type Value = SharingAllowlistAddError;
23867            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23868                f.write_str("a SharingAllowlistAddError structure")
23869            }
23870            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
23871                let tag: &str = match map.next_key()? {
23872                    Some(".tag") => map.next_value()?,
23873                    _ => return Err(de::Error::missing_field(".tag"))
23874                };
23875                let value = match tag {
23876                    "malformed_entry" => {
23877                        match map.next_key()? {
23878                            Some("malformed_entry") => SharingAllowlistAddError::MalformedEntry(map.next_value()?),
23879                            None => return Err(de::Error::missing_field("malformed_entry")),
23880                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23881                        }
23882                    }
23883                    "no_entries_provided" => SharingAllowlistAddError::NoEntriesProvided,
23884                    "too_many_entries_provided" => SharingAllowlistAddError::TooManyEntriesProvided,
23885                    "team_limit_reached" => SharingAllowlistAddError::TeamLimitReached,
23886                    "unknown_error" => SharingAllowlistAddError::UnknownError,
23887                    "entries_already_exist" => {
23888                        match map.next_key()? {
23889                            Some("entries_already_exist") => SharingAllowlistAddError::EntriesAlreadyExist(map.next_value()?),
23890                            None => return Err(de::Error::missing_field("entries_already_exist")),
23891                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
23892                        }
23893                    }
23894                    _ => SharingAllowlistAddError::Other,
23895                };
23896                crate::eat_json_fields(&mut map)?;
23897                Ok(value)
23898            }
23899        }
23900        const VARIANTS: &[&str] = &["malformed_entry",
23901                                    "no_entries_provided",
23902                                    "too_many_entries_provided",
23903                                    "team_limit_reached",
23904                                    "unknown_error",
23905                                    "entries_already_exist",
23906                                    "other"];
23907        deserializer.deserialize_struct("SharingAllowlistAddError", VARIANTS, EnumVisitor)
23908    }
23909}
23910
23911impl ::serde::ser::Serialize for SharingAllowlistAddError {
23912    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
23913        // union serializer
23914        use serde::ser::SerializeStruct;
23915        match self {
23916            SharingAllowlistAddError::MalformedEntry(x) => {
23917                // primitive
23918                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 2)?;
23919                s.serialize_field(".tag", "malformed_entry")?;
23920                s.serialize_field("malformed_entry", x)?;
23921                s.end()
23922            }
23923            SharingAllowlistAddError::NoEntriesProvided => {
23924                // unit
23925                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23926                s.serialize_field(".tag", "no_entries_provided")?;
23927                s.end()
23928            }
23929            SharingAllowlistAddError::TooManyEntriesProvided => {
23930                // unit
23931                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23932                s.serialize_field(".tag", "too_many_entries_provided")?;
23933                s.end()
23934            }
23935            SharingAllowlistAddError::TeamLimitReached => {
23936                // unit
23937                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23938                s.serialize_field(".tag", "team_limit_reached")?;
23939                s.end()
23940            }
23941            SharingAllowlistAddError::UnknownError => {
23942                // unit
23943                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 1)?;
23944                s.serialize_field(".tag", "unknown_error")?;
23945                s.end()
23946            }
23947            SharingAllowlistAddError::EntriesAlreadyExist(x) => {
23948                // primitive
23949                let mut s = serializer.serialize_struct("SharingAllowlistAddError", 2)?;
23950                s.serialize_field(".tag", "entries_already_exist")?;
23951                s.serialize_field("entries_already_exist", x)?;
23952                s.end()
23953            }
23954            SharingAllowlistAddError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
23955        }
23956    }
23957}
23958
23959impl ::std::error::Error for SharingAllowlistAddError {
23960}
23961
23962impl ::std::fmt::Display for SharingAllowlistAddError {
23963    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
23964        match self {
23965            SharingAllowlistAddError::MalformedEntry(inner) => write!(f, "One of provided values is not valid: {:?}", inner),
23966            SharingAllowlistAddError::NoEntriesProvided => f.write_str("Neither single domain nor email provided."),
23967            SharingAllowlistAddError::TooManyEntriesProvided => f.write_str("Too many entries provided within one call."),
23968            SharingAllowlistAddError::TeamLimitReached => f.write_str("Team entries limit reached."),
23969            SharingAllowlistAddError::UnknownError => f.write_str("Unknown error."),
23970            SharingAllowlistAddError::EntriesAlreadyExist(inner) => write!(f, "Entries already exists: {:?}", inner),
23971            _ => write!(f, "{:?}", *self),
23972        }
23973    }
23974}
23975
23976/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
23977/// Stone.
23978#[derive(Debug, Clone, PartialEq, Eq, Default)]
23979#[non_exhaustive] // structs may have more fields added in the future.
23980pub struct SharingAllowlistAddResponse {
23981}
23982
23983const SHARING_ALLOWLIST_ADD_RESPONSE_FIELDS: &[&str] = &[];
23984impl SharingAllowlistAddResponse {
23985    // no _opt deserializer
23986    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
23987        mut map: V,
23988    ) -> Result<SharingAllowlistAddResponse, V::Error> {
23989        // ignore any fields found; none are presently recognized
23990        crate::eat_json_fields(&mut map)?;
23991        Ok(SharingAllowlistAddResponse {})
23992    }
23993}
23994
23995impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistAddResponse {
23996    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
23997        // struct deserializer
23998        use serde::de::{MapAccess, Visitor};
23999        struct StructVisitor;
24000        impl<'de> Visitor<'de> for StructVisitor {
24001            type Value = SharingAllowlistAddResponse;
24002            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24003                f.write_str("a SharingAllowlistAddResponse struct")
24004            }
24005            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24006                SharingAllowlistAddResponse::internal_deserialize(map)
24007            }
24008        }
24009        deserializer.deserialize_struct("SharingAllowlistAddResponse", SHARING_ALLOWLIST_ADD_RESPONSE_FIELDS, StructVisitor)
24010    }
24011}
24012
24013impl ::serde::ser::Serialize for SharingAllowlistAddResponse {
24014    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24015        // struct serializer
24016        use serde::ser::SerializeStruct;
24017        serializer.serialize_struct("SharingAllowlistAddResponse", 0)?.end()
24018    }
24019}
24020
24021#[derive(Debug, Clone, PartialEq, Eq)]
24022#[non_exhaustive] // structs may have more fields added in the future.
24023pub struct SharingAllowlistListArg {
24024    /// The number of entries to fetch at one time.
24025    pub limit: u32,
24026}
24027
24028impl Default for SharingAllowlistListArg {
24029    fn default() -> Self {
24030        SharingAllowlistListArg {
24031            limit: 1000,
24032        }
24033    }
24034}
24035
24036impl SharingAllowlistListArg {
24037    pub fn with_limit(mut self, value: u32) -> Self {
24038        self.limit = value;
24039        self
24040    }
24041}
24042
24043const SHARING_ALLOWLIST_LIST_ARG_FIELDS: &[&str] = &["limit"];
24044impl SharingAllowlistListArg {
24045    // no _opt deserializer
24046    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24047        mut map: V,
24048    ) -> Result<SharingAllowlistListArg, V::Error> {
24049        let mut field_limit = None;
24050        while let Some(key) = map.next_key::<&str>()? {
24051            match key {
24052                "limit" => {
24053                    if field_limit.is_some() {
24054                        return Err(::serde::de::Error::duplicate_field("limit"));
24055                    }
24056                    field_limit = Some(map.next_value()?);
24057                }
24058                _ => {
24059                    // unknown field allowed and ignored
24060                    map.next_value::<::serde_json::Value>()?;
24061                }
24062            }
24063        }
24064        let result = SharingAllowlistListArg {
24065            limit: field_limit.unwrap_or(1000),
24066        };
24067        Ok(result)
24068    }
24069
24070    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24071        &self,
24072        s: &mut S::SerializeStruct,
24073    ) -> Result<(), S::Error> {
24074        use serde::ser::SerializeStruct;
24075        if self.limit != 1000 {
24076            s.serialize_field("limit", &self.limit)?;
24077        }
24078        Ok(())
24079    }
24080}
24081
24082impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListArg {
24083    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24084        // struct deserializer
24085        use serde::de::{MapAccess, Visitor};
24086        struct StructVisitor;
24087        impl<'de> Visitor<'de> for StructVisitor {
24088            type Value = SharingAllowlistListArg;
24089            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24090                f.write_str("a SharingAllowlistListArg struct")
24091            }
24092            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24093                SharingAllowlistListArg::internal_deserialize(map)
24094            }
24095        }
24096        deserializer.deserialize_struct("SharingAllowlistListArg", SHARING_ALLOWLIST_LIST_ARG_FIELDS, StructVisitor)
24097    }
24098}
24099
24100impl ::serde::ser::Serialize for SharingAllowlistListArg {
24101    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24102        // struct serializer
24103        use serde::ser::SerializeStruct;
24104        let mut s = serializer.serialize_struct("SharingAllowlistListArg", 1)?;
24105        self.internal_serialize::<S>(&mut s)?;
24106        s.end()
24107    }
24108}
24109
24110#[derive(Debug, Clone, PartialEq, Eq)]
24111#[non_exhaustive] // structs may have more fields added in the future.
24112pub struct SharingAllowlistListContinueArg {
24113    /// The cursor returned from a previous call to
24114    /// [`sharing_allowlist_list()`](crate::team::sharing_allowlist_list) or
24115    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
24116    pub cursor: String,
24117}
24118
24119impl SharingAllowlistListContinueArg {
24120    pub fn new(cursor: String) -> Self {
24121        SharingAllowlistListContinueArg {
24122            cursor,
24123        }
24124    }
24125}
24126
24127const SHARING_ALLOWLIST_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
24128impl SharingAllowlistListContinueArg {
24129    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24130        map: V,
24131    ) -> Result<SharingAllowlistListContinueArg, V::Error> {
24132        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24133    }
24134
24135    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24136        mut map: V,
24137        optional: bool,
24138    ) -> Result<Option<SharingAllowlistListContinueArg>, V::Error> {
24139        let mut field_cursor = None;
24140        let mut nothing = true;
24141        while let Some(key) = map.next_key::<&str>()? {
24142            nothing = false;
24143            match key {
24144                "cursor" => {
24145                    if field_cursor.is_some() {
24146                        return Err(::serde::de::Error::duplicate_field("cursor"));
24147                    }
24148                    field_cursor = Some(map.next_value()?);
24149                }
24150                _ => {
24151                    // unknown field allowed and ignored
24152                    map.next_value::<::serde_json::Value>()?;
24153                }
24154            }
24155        }
24156        if optional && nothing {
24157            return Ok(None);
24158        }
24159        let result = SharingAllowlistListContinueArg {
24160            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
24161        };
24162        Ok(Some(result))
24163    }
24164
24165    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24166        &self,
24167        s: &mut S::SerializeStruct,
24168    ) -> Result<(), S::Error> {
24169        use serde::ser::SerializeStruct;
24170        s.serialize_field("cursor", &self.cursor)?;
24171        Ok(())
24172    }
24173}
24174
24175impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListContinueArg {
24176    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24177        // struct deserializer
24178        use serde::de::{MapAccess, Visitor};
24179        struct StructVisitor;
24180        impl<'de> Visitor<'de> for StructVisitor {
24181            type Value = SharingAllowlistListContinueArg;
24182            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24183                f.write_str("a SharingAllowlistListContinueArg struct")
24184            }
24185            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24186                SharingAllowlistListContinueArg::internal_deserialize(map)
24187            }
24188        }
24189        deserializer.deserialize_struct("SharingAllowlistListContinueArg", SHARING_ALLOWLIST_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
24190    }
24191}
24192
24193impl ::serde::ser::Serialize for SharingAllowlistListContinueArg {
24194    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24195        // struct serializer
24196        use serde::ser::SerializeStruct;
24197        let mut s = serializer.serialize_struct("SharingAllowlistListContinueArg", 1)?;
24198        self.internal_serialize::<S>(&mut s)?;
24199        s.end()
24200    }
24201}
24202
24203#[derive(Debug, Clone, PartialEq, Eq)]
24204#[non_exhaustive] // variants may be added in the future
24205pub enum SharingAllowlistListContinueError {
24206    /// Provided cursor is not valid.
24207    InvalidCursor,
24208    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24209    /// typically indicates that this SDK version is out of date.
24210    Other,
24211}
24212
24213impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListContinueError {
24214    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24215        // union deserializer
24216        use serde::de::{self, MapAccess, Visitor};
24217        struct EnumVisitor;
24218        impl<'de> Visitor<'de> for EnumVisitor {
24219            type Value = SharingAllowlistListContinueError;
24220            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24221                f.write_str("a SharingAllowlistListContinueError structure")
24222            }
24223            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24224                let tag: &str = match map.next_key()? {
24225                    Some(".tag") => map.next_value()?,
24226                    _ => return Err(de::Error::missing_field(".tag"))
24227                };
24228                let value = match tag {
24229                    "invalid_cursor" => SharingAllowlistListContinueError::InvalidCursor,
24230                    _ => SharingAllowlistListContinueError::Other,
24231                };
24232                crate::eat_json_fields(&mut map)?;
24233                Ok(value)
24234            }
24235        }
24236        const VARIANTS: &[&str] = &["invalid_cursor",
24237                                    "other"];
24238        deserializer.deserialize_struct("SharingAllowlistListContinueError", VARIANTS, EnumVisitor)
24239    }
24240}
24241
24242impl ::serde::ser::Serialize for SharingAllowlistListContinueError {
24243    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24244        // union serializer
24245        use serde::ser::SerializeStruct;
24246        match self {
24247            SharingAllowlistListContinueError::InvalidCursor => {
24248                // unit
24249                let mut s = serializer.serialize_struct("SharingAllowlistListContinueError", 1)?;
24250                s.serialize_field(".tag", "invalid_cursor")?;
24251                s.end()
24252            }
24253            SharingAllowlistListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24254        }
24255    }
24256}
24257
24258impl ::std::error::Error for SharingAllowlistListContinueError {
24259}
24260
24261impl ::std::fmt::Display for SharingAllowlistListContinueError {
24262    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24263        match self {
24264            SharingAllowlistListContinueError::InvalidCursor => f.write_str("Provided cursor is not valid."),
24265            _ => write!(f, "{:?}", *self),
24266        }
24267    }
24268}
24269
24270/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
24271/// Stone.
24272#[derive(Debug, Clone, PartialEq, Eq, Default)]
24273#[non_exhaustive] // structs may have more fields added in the future.
24274pub struct SharingAllowlistListError {
24275}
24276
24277const SHARING_ALLOWLIST_LIST_ERROR_FIELDS: &[&str] = &[];
24278impl SharingAllowlistListError {
24279    // no _opt deserializer
24280    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24281        mut map: V,
24282    ) -> Result<SharingAllowlistListError, V::Error> {
24283        // ignore any fields found; none are presently recognized
24284        crate::eat_json_fields(&mut map)?;
24285        Ok(SharingAllowlistListError {})
24286    }
24287}
24288
24289impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListError {
24290    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24291        // struct deserializer
24292        use serde::de::{MapAccess, Visitor};
24293        struct StructVisitor;
24294        impl<'de> Visitor<'de> for StructVisitor {
24295            type Value = SharingAllowlistListError;
24296            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24297                f.write_str("a SharingAllowlistListError struct")
24298            }
24299            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24300                SharingAllowlistListError::internal_deserialize(map)
24301            }
24302        }
24303        deserializer.deserialize_struct("SharingAllowlistListError", SHARING_ALLOWLIST_LIST_ERROR_FIELDS, StructVisitor)
24304    }
24305}
24306
24307impl ::serde::ser::Serialize for SharingAllowlistListError {
24308    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24309        // struct serializer
24310        use serde::ser::SerializeStruct;
24311        serializer.serialize_struct("SharingAllowlistListError", 0)?.end()
24312    }
24313}
24314
24315impl ::std::error::Error for SharingAllowlistListError {
24316}
24317
24318impl ::std::fmt::Display for SharingAllowlistListError {
24319    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24320        write!(f, "{:?}", *self)
24321    }
24322}
24323
24324#[derive(Debug, Clone, PartialEq, Eq)]
24325#[non_exhaustive] // structs may have more fields added in the future.
24326pub struct SharingAllowlistListResponse {
24327    /// List of domains represented by valid string representation (RFC-1034/5).
24328    pub domains: Vec<String>,
24329    /// List of emails represented by valid string representation (RFC-5322/822).
24330    pub emails: Vec<String>,
24331    /// If this is nonempty, there are more entries that can be fetched with
24332    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
24333    pub cursor: String,
24334    /// if true indicates that more entries can be fetched with
24335    /// [`sharing_allowlist_list_continue()`](crate::team::sharing_allowlist_list_continue).
24336    pub has_more: bool,
24337}
24338
24339impl SharingAllowlistListResponse {
24340    pub fn new(domains: Vec<String>, emails: Vec<String>) -> Self {
24341        SharingAllowlistListResponse {
24342            domains,
24343            emails,
24344            cursor: String::new(),
24345            has_more: false,
24346        }
24347    }
24348
24349    pub fn with_cursor(mut self, value: String) -> Self {
24350        self.cursor = value;
24351        self
24352    }
24353
24354    pub fn with_has_more(mut self, value: bool) -> Self {
24355        self.has_more = value;
24356        self
24357    }
24358}
24359
24360const SHARING_ALLOWLIST_LIST_RESPONSE_FIELDS: &[&str] = &["domains",
24361                                                          "emails",
24362                                                          "cursor",
24363                                                          "has_more"];
24364impl SharingAllowlistListResponse {
24365    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24366        map: V,
24367    ) -> Result<SharingAllowlistListResponse, V::Error> {
24368        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24369    }
24370
24371    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24372        mut map: V,
24373        optional: bool,
24374    ) -> Result<Option<SharingAllowlistListResponse>, V::Error> {
24375        let mut field_domains = None;
24376        let mut field_emails = None;
24377        let mut field_cursor = None;
24378        let mut field_has_more = None;
24379        let mut nothing = true;
24380        while let Some(key) = map.next_key::<&str>()? {
24381            nothing = false;
24382            match key {
24383                "domains" => {
24384                    if field_domains.is_some() {
24385                        return Err(::serde::de::Error::duplicate_field("domains"));
24386                    }
24387                    field_domains = Some(map.next_value()?);
24388                }
24389                "emails" => {
24390                    if field_emails.is_some() {
24391                        return Err(::serde::de::Error::duplicate_field("emails"));
24392                    }
24393                    field_emails = Some(map.next_value()?);
24394                }
24395                "cursor" => {
24396                    if field_cursor.is_some() {
24397                        return Err(::serde::de::Error::duplicate_field("cursor"));
24398                    }
24399                    field_cursor = Some(map.next_value()?);
24400                }
24401                "has_more" => {
24402                    if field_has_more.is_some() {
24403                        return Err(::serde::de::Error::duplicate_field("has_more"));
24404                    }
24405                    field_has_more = Some(map.next_value()?);
24406                }
24407                _ => {
24408                    // unknown field allowed and ignored
24409                    map.next_value::<::serde_json::Value>()?;
24410                }
24411            }
24412        }
24413        if optional && nothing {
24414            return Ok(None);
24415        }
24416        let result = SharingAllowlistListResponse {
24417            domains: field_domains.ok_or_else(|| ::serde::de::Error::missing_field("domains"))?,
24418            emails: field_emails.ok_or_else(|| ::serde::de::Error::missing_field("emails"))?,
24419            cursor: field_cursor.unwrap_or_default(),
24420            has_more: field_has_more.unwrap_or(false),
24421        };
24422        Ok(Some(result))
24423    }
24424
24425    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24426        &self,
24427        s: &mut S::SerializeStruct,
24428    ) -> Result<(), S::Error> {
24429        use serde::ser::SerializeStruct;
24430        s.serialize_field("domains", &self.domains)?;
24431        s.serialize_field("emails", &self.emails)?;
24432        if !self.cursor.is_empty() {
24433            s.serialize_field("cursor", &self.cursor)?;
24434        }
24435        if self.has_more {
24436            s.serialize_field("has_more", &self.has_more)?;
24437        }
24438        Ok(())
24439    }
24440}
24441
24442impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistListResponse {
24443    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24444        // struct deserializer
24445        use serde::de::{MapAccess, Visitor};
24446        struct StructVisitor;
24447        impl<'de> Visitor<'de> for StructVisitor {
24448            type Value = SharingAllowlistListResponse;
24449            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24450                f.write_str("a SharingAllowlistListResponse struct")
24451            }
24452            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24453                SharingAllowlistListResponse::internal_deserialize(map)
24454            }
24455        }
24456        deserializer.deserialize_struct("SharingAllowlistListResponse", SHARING_ALLOWLIST_LIST_RESPONSE_FIELDS, StructVisitor)
24457    }
24458}
24459
24460impl ::serde::ser::Serialize for SharingAllowlistListResponse {
24461    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24462        // struct serializer
24463        use serde::ser::SerializeStruct;
24464        let mut s = serializer.serialize_struct("SharingAllowlistListResponse", 4)?;
24465        self.internal_serialize::<S>(&mut s)?;
24466        s.end()
24467    }
24468}
24469
24470#[derive(Debug, Clone, PartialEq, Eq, Default)]
24471#[non_exhaustive] // structs may have more fields added in the future.
24472pub struct SharingAllowlistRemoveArgs {
24473    /// List of domains represented by valid string representation (RFC-1034/5).
24474    pub domains: Option<Vec<String>>,
24475    /// List of emails represented by valid string representation (RFC-5322/822).
24476    pub emails: Option<Vec<String>>,
24477}
24478
24479impl SharingAllowlistRemoveArgs {
24480    pub fn with_domains(mut self, value: Vec<String>) -> Self {
24481        self.domains = Some(value);
24482        self
24483    }
24484
24485    pub fn with_emails(mut self, value: Vec<String>) -> Self {
24486        self.emails = Some(value);
24487        self
24488    }
24489}
24490
24491const SHARING_ALLOWLIST_REMOVE_ARGS_FIELDS: &[&str] = &["domains",
24492                                                        "emails"];
24493impl SharingAllowlistRemoveArgs {
24494    // no _opt deserializer
24495    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24496        mut map: V,
24497    ) -> Result<SharingAllowlistRemoveArgs, V::Error> {
24498        let mut field_domains = None;
24499        let mut field_emails = None;
24500        while let Some(key) = map.next_key::<&str>()? {
24501            match key {
24502                "domains" => {
24503                    if field_domains.is_some() {
24504                        return Err(::serde::de::Error::duplicate_field("domains"));
24505                    }
24506                    field_domains = Some(map.next_value()?);
24507                }
24508                "emails" => {
24509                    if field_emails.is_some() {
24510                        return Err(::serde::de::Error::duplicate_field("emails"));
24511                    }
24512                    field_emails = Some(map.next_value()?);
24513                }
24514                _ => {
24515                    // unknown field allowed and ignored
24516                    map.next_value::<::serde_json::Value>()?;
24517                }
24518            }
24519        }
24520        let result = SharingAllowlistRemoveArgs {
24521            domains: field_domains.and_then(Option::flatten),
24522            emails: field_emails.and_then(Option::flatten),
24523        };
24524        Ok(result)
24525    }
24526
24527    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24528        &self,
24529        s: &mut S::SerializeStruct,
24530    ) -> Result<(), S::Error> {
24531        use serde::ser::SerializeStruct;
24532        if let Some(val) = &self.domains {
24533            s.serialize_field("domains", val)?;
24534        }
24535        if let Some(val) = &self.emails {
24536            s.serialize_field("emails", val)?;
24537        }
24538        Ok(())
24539    }
24540}
24541
24542impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveArgs {
24543    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24544        // struct deserializer
24545        use serde::de::{MapAccess, Visitor};
24546        struct StructVisitor;
24547        impl<'de> Visitor<'de> for StructVisitor {
24548            type Value = SharingAllowlistRemoveArgs;
24549            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24550                f.write_str("a SharingAllowlistRemoveArgs struct")
24551            }
24552            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24553                SharingAllowlistRemoveArgs::internal_deserialize(map)
24554            }
24555        }
24556        deserializer.deserialize_struct("SharingAllowlistRemoveArgs", SHARING_ALLOWLIST_REMOVE_ARGS_FIELDS, StructVisitor)
24557    }
24558}
24559
24560impl ::serde::ser::Serialize for SharingAllowlistRemoveArgs {
24561    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24562        // struct serializer
24563        use serde::ser::SerializeStruct;
24564        let mut s = serializer.serialize_struct("SharingAllowlistRemoveArgs", 2)?;
24565        self.internal_serialize::<S>(&mut s)?;
24566        s.end()
24567    }
24568}
24569
24570#[derive(Debug, Clone, PartialEq, Eq)]
24571#[non_exhaustive] // variants may be added in the future
24572pub enum SharingAllowlistRemoveError {
24573    /// One of provided values is not valid.
24574    MalformedEntry(String),
24575    /// One or more provided values do not exist.
24576    EntriesDoNotExist(String),
24577    /// Neither single domain nor email provided.
24578    NoEntriesProvided,
24579    /// Too many entries provided within one call.
24580    TooManyEntriesProvided,
24581    /// Unknown error.
24582    UnknownError,
24583    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24584    /// typically indicates that this SDK version is out of date.
24585    Other,
24586}
24587
24588impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveError {
24589    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24590        // union deserializer
24591        use serde::de::{self, MapAccess, Visitor};
24592        struct EnumVisitor;
24593        impl<'de> Visitor<'de> for EnumVisitor {
24594            type Value = SharingAllowlistRemoveError;
24595            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24596                f.write_str("a SharingAllowlistRemoveError structure")
24597            }
24598            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24599                let tag: &str = match map.next_key()? {
24600                    Some(".tag") => map.next_value()?,
24601                    _ => return Err(de::Error::missing_field(".tag"))
24602                };
24603                let value = match tag {
24604                    "malformed_entry" => {
24605                        match map.next_key()? {
24606                            Some("malformed_entry") => SharingAllowlistRemoveError::MalformedEntry(map.next_value()?),
24607                            None => return Err(de::Error::missing_field("malformed_entry")),
24608                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24609                        }
24610                    }
24611                    "entries_do_not_exist" => {
24612                        match map.next_key()? {
24613                            Some("entries_do_not_exist") => SharingAllowlistRemoveError::EntriesDoNotExist(map.next_value()?),
24614                            None => return Err(de::Error::missing_field("entries_do_not_exist")),
24615                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24616                        }
24617                    }
24618                    "no_entries_provided" => SharingAllowlistRemoveError::NoEntriesProvided,
24619                    "too_many_entries_provided" => SharingAllowlistRemoveError::TooManyEntriesProvided,
24620                    "unknown_error" => SharingAllowlistRemoveError::UnknownError,
24621                    _ => SharingAllowlistRemoveError::Other,
24622                };
24623                crate::eat_json_fields(&mut map)?;
24624                Ok(value)
24625            }
24626        }
24627        const VARIANTS: &[&str] = &["malformed_entry",
24628                                    "entries_do_not_exist",
24629                                    "no_entries_provided",
24630                                    "too_many_entries_provided",
24631                                    "unknown_error",
24632                                    "other"];
24633        deserializer.deserialize_struct("SharingAllowlistRemoveError", VARIANTS, EnumVisitor)
24634    }
24635}
24636
24637impl ::serde::ser::Serialize for SharingAllowlistRemoveError {
24638    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24639        // union serializer
24640        use serde::ser::SerializeStruct;
24641        match self {
24642            SharingAllowlistRemoveError::MalformedEntry(x) => {
24643                // primitive
24644                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 2)?;
24645                s.serialize_field(".tag", "malformed_entry")?;
24646                s.serialize_field("malformed_entry", x)?;
24647                s.end()
24648            }
24649            SharingAllowlistRemoveError::EntriesDoNotExist(x) => {
24650                // primitive
24651                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 2)?;
24652                s.serialize_field(".tag", "entries_do_not_exist")?;
24653                s.serialize_field("entries_do_not_exist", x)?;
24654                s.end()
24655            }
24656            SharingAllowlistRemoveError::NoEntriesProvided => {
24657                // unit
24658                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24659                s.serialize_field(".tag", "no_entries_provided")?;
24660                s.end()
24661            }
24662            SharingAllowlistRemoveError::TooManyEntriesProvided => {
24663                // unit
24664                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24665                s.serialize_field(".tag", "too_many_entries_provided")?;
24666                s.end()
24667            }
24668            SharingAllowlistRemoveError::UnknownError => {
24669                // unit
24670                let mut s = serializer.serialize_struct("SharingAllowlistRemoveError", 1)?;
24671                s.serialize_field(".tag", "unknown_error")?;
24672                s.end()
24673            }
24674            SharingAllowlistRemoveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24675        }
24676    }
24677}
24678
24679impl ::std::error::Error for SharingAllowlistRemoveError {
24680}
24681
24682impl ::std::fmt::Display for SharingAllowlistRemoveError {
24683    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24684        match self {
24685            SharingAllowlistRemoveError::MalformedEntry(inner) => write!(f, "One of provided values is not valid: {:?}", inner),
24686            SharingAllowlistRemoveError::EntriesDoNotExist(inner) => write!(f, "One or more provided values do not exist: {:?}", inner),
24687            SharingAllowlistRemoveError::NoEntriesProvided => f.write_str("Neither single domain nor email provided."),
24688            SharingAllowlistRemoveError::TooManyEntriesProvided => f.write_str("Too many entries provided within one call."),
24689            SharingAllowlistRemoveError::UnknownError => f.write_str("Unknown error."),
24690            _ => write!(f, "{:?}", *self),
24691        }
24692    }
24693}
24694
24695/// This struct is empty. The comment here is intentionally emitted to avoid indentation issues with
24696/// Stone.
24697#[derive(Debug, Clone, PartialEq, Eq, Default)]
24698#[non_exhaustive] // structs may have more fields added in the future.
24699pub struct SharingAllowlistRemoveResponse {
24700}
24701
24702const SHARING_ALLOWLIST_REMOVE_RESPONSE_FIELDS: &[&str] = &[];
24703impl SharingAllowlistRemoveResponse {
24704    // no _opt deserializer
24705    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24706        mut map: V,
24707    ) -> Result<SharingAllowlistRemoveResponse, V::Error> {
24708        // ignore any fields found; none are presently recognized
24709        crate::eat_json_fields(&mut map)?;
24710        Ok(SharingAllowlistRemoveResponse {})
24711    }
24712}
24713
24714impl<'de> ::serde::de::Deserialize<'de> for SharingAllowlistRemoveResponse {
24715    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24716        // struct deserializer
24717        use serde::de::{MapAccess, Visitor};
24718        struct StructVisitor;
24719        impl<'de> Visitor<'de> for StructVisitor {
24720            type Value = SharingAllowlistRemoveResponse;
24721            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24722                f.write_str("a SharingAllowlistRemoveResponse struct")
24723            }
24724            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24725                SharingAllowlistRemoveResponse::internal_deserialize(map)
24726            }
24727        }
24728        deserializer.deserialize_struct("SharingAllowlistRemoveResponse", SHARING_ALLOWLIST_REMOVE_RESPONSE_FIELDS, StructVisitor)
24729    }
24730}
24731
24732impl ::serde::ser::Serialize for SharingAllowlistRemoveResponse {
24733    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24734        // struct serializer
24735        use serde::ser::SerializeStruct;
24736        serializer.serialize_struct("SharingAllowlistRemoveResponse", 0)?.end()
24737    }
24738}
24739
24740/// Describes the number of users in a specific storage bucket.
24741#[derive(Debug, Clone, PartialEq, Eq)]
24742#[non_exhaustive] // structs may have more fields added in the future.
24743pub struct StorageBucket {
24744    /// The name of the storage bucket. For example, '1G' is a bucket of users with storage size up
24745    /// to 1 Giga.
24746    pub bucket: String,
24747    /// The number of people whose storage is in the range of this storage bucket.
24748    pub users: u64,
24749}
24750
24751impl StorageBucket {
24752    pub fn new(bucket: String, users: u64) -> Self {
24753        StorageBucket {
24754            bucket,
24755            users,
24756        }
24757    }
24758}
24759
24760const STORAGE_BUCKET_FIELDS: &[&str] = &["bucket",
24761                                         "users"];
24762impl StorageBucket {
24763    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
24764        map: V,
24765    ) -> Result<StorageBucket, V::Error> {
24766        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
24767    }
24768
24769    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
24770        mut map: V,
24771        optional: bool,
24772    ) -> Result<Option<StorageBucket>, V::Error> {
24773        let mut field_bucket = None;
24774        let mut field_users = None;
24775        let mut nothing = true;
24776        while let Some(key) = map.next_key::<&str>()? {
24777            nothing = false;
24778            match key {
24779                "bucket" => {
24780                    if field_bucket.is_some() {
24781                        return Err(::serde::de::Error::duplicate_field("bucket"));
24782                    }
24783                    field_bucket = Some(map.next_value()?);
24784                }
24785                "users" => {
24786                    if field_users.is_some() {
24787                        return Err(::serde::de::Error::duplicate_field("users"));
24788                    }
24789                    field_users = Some(map.next_value()?);
24790                }
24791                _ => {
24792                    // unknown field allowed and ignored
24793                    map.next_value::<::serde_json::Value>()?;
24794                }
24795            }
24796        }
24797        if optional && nothing {
24798            return Ok(None);
24799        }
24800        let result = StorageBucket {
24801            bucket: field_bucket.ok_or_else(|| ::serde::de::Error::missing_field("bucket"))?,
24802            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
24803        };
24804        Ok(Some(result))
24805    }
24806
24807    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
24808        &self,
24809        s: &mut S::SerializeStruct,
24810    ) -> Result<(), S::Error> {
24811        use serde::ser::SerializeStruct;
24812        s.serialize_field("bucket", &self.bucket)?;
24813        s.serialize_field("users", &self.users)?;
24814        Ok(())
24815    }
24816}
24817
24818impl<'de> ::serde::de::Deserialize<'de> for StorageBucket {
24819    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24820        // struct deserializer
24821        use serde::de::{MapAccess, Visitor};
24822        struct StructVisitor;
24823        impl<'de> Visitor<'de> for StructVisitor {
24824            type Value = StorageBucket;
24825            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24826                f.write_str("a StorageBucket struct")
24827            }
24828            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
24829                StorageBucket::internal_deserialize(map)
24830            }
24831        }
24832        deserializer.deserialize_struct("StorageBucket", STORAGE_BUCKET_FIELDS, StructVisitor)
24833    }
24834}
24835
24836impl ::serde::ser::Serialize for StorageBucket {
24837    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24838        // struct serializer
24839        use serde::ser::SerializeStruct;
24840        let mut s = serializer.serialize_struct("StorageBucket", 2)?;
24841        self.internal_serialize::<S>(&mut s)?;
24842        s.end()
24843    }
24844}
24845
24846#[derive(Debug, Clone, PartialEq, Eq)]
24847#[non_exhaustive] // variants may be added in the future
24848pub enum TeamFolderAccessError {
24849    /// The team folder ID is invalid.
24850    InvalidTeamFolderId,
24851    /// The authenticated app does not have permission to manage that team folder.
24852    NoAccess,
24853    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24854    /// typically indicates that this SDK version is out of date.
24855    Other,
24856}
24857
24858impl<'de> ::serde::de::Deserialize<'de> for TeamFolderAccessError {
24859    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24860        // union deserializer
24861        use serde::de::{self, MapAccess, Visitor};
24862        struct EnumVisitor;
24863        impl<'de> Visitor<'de> for EnumVisitor {
24864            type Value = TeamFolderAccessError;
24865            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24866                f.write_str("a TeamFolderAccessError structure")
24867            }
24868            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24869                let tag: &str = match map.next_key()? {
24870                    Some(".tag") => map.next_value()?,
24871                    _ => return Err(de::Error::missing_field(".tag"))
24872                };
24873                let value = match tag {
24874                    "invalid_team_folder_id" => TeamFolderAccessError::InvalidTeamFolderId,
24875                    "no_access" => TeamFolderAccessError::NoAccess,
24876                    _ => TeamFolderAccessError::Other,
24877                };
24878                crate::eat_json_fields(&mut map)?;
24879                Ok(value)
24880            }
24881        }
24882        const VARIANTS: &[&str] = &["invalid_team_folder_id",
24883                                    "no_access",
24884                                    "other"];
24885        deserializer.deserialize_struct("TeamFolderAccessError", VARIANTS, EnumVisitor)
24886    }
24887}
24888
24889impl ::serde::ser::Serialize for TeamFolderAccessError {
24890    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24891        // union serializer
24892        use serde::ser::SerializeStruct;
24893        match self {
24894            TeamFolderAccessError::InvalidTeamFolderId => {
24895                // unit
24896                let mut s = serializer.serialize_struct("TeamFolderAccessError", 1)?;
24897                s.serialize_field(".tag", "invalid_team_folder_id")?;
24898                s.end()
24899            }
24900            TeamFolderAccessError::NoAccess => {
24901                // unit
24902                let mut s = serializer.serialize_struct("TeamFolderAccessError", 1)?;
24903                s.serialize_field(".tag", "no_access")?;
24904                s.end()
24905            }
24906            TeamFolderAccessError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
24907        }
24908    }
24909}
24910
24911impl ::std::error::Error for TeamFolderAccessError {
24912}
24913
24914impl ::std::fmt::Display for TeamFolderAccessError {
24915    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24916        match self {
24917            TeamFolderAccessError::InvalidTeamFolderId => f.write_str("The team folder ID is invalid."),
24918            TeamFolderAccessError::NoAccess => f.write_str("The authenticated app does not have permission to manage that team folder."),
24919            _ => write!(f, "{:?}", *self),
24920        }
24921    }
24922}
24923
24924
24925#[derive(Debug, Clone, PartialEq, Eq)]
24926#[non_exhaustive] // variants may be added in the future
24927pub enum TeamFolderActivateError {
24928    AccessError(TeamFolderAccessError),
24929    StatusError(TeamFolderInvalidStatusError),
24930    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
24931    /// Catch-all used for unrecognized values returned from the server. Encountering this value
24932    /// typically indicates that this SDK version is out of date.
24933    Other,
24934}
24935
24936impl<'de> ::serde::de::Deserialize<'de> for TeamFolderActivateError {
24937    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
24938        // union deserializer
24939        use serde::de::{self, MapAccess, Visitor};
24940        struct EnumVisitor;
24941        impl<'de> Visitor<'de> for EnumVisitor {
24942            type Value = TeamFolderActivateError;
24943            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
24944                f.write_str("a TeamFolderActivateError structure")
24945            }
24946            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
24947                let tag: &str = match map.next_key()? {
24948                    Some(".tag") => map.next_value()?,
24949                    _ => return Err(de::Error::missing_field(".tag"))
24950                };
24951                let value = match tag {
24952                    "access_error" => {
24953                        match map.next_key()? {
24954                            Some("access_error") => TeamFolderActivateError::AccessError(map.next_value()?),
24955                            None => return Err(de::Error::missing_field("access_error")),
24956                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24957                        }
24958                    }
24959                    "status_error" => {
24960                        match map.next_key()? {
24961                            Some("status_error") => TeamFolderActivateError::StatusError(map.next_value()?),
24962                            None => return Err(de::Error::missing_field("status_error")),
24963                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24964                        }
24965                    }
24966                    "team_shared_dropbox_error" => {
24967                        match map.next_key()? {
24968                            Some("team_shared_dropbox_error") => TeamFolderActivateError::TeamSharedDropboxError(map.next_value()?),
24969                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
24970                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
24971                        }
24972                    }
24973                    _ => TeamFolderActivateError::Other,
24974                };
24975                crate::eat_json_fields(&mut map)?;
24976                Ok(value)
24977            }
24978        }
24979        const VARIANTS: &[&str] = &["access_error",
24980                                    "status_error",
24981                                    "team_shared_dropbox_error",
24982                                    "other"];
24983        deserializer.deserialize_struct("TeamFolderActivateError", VARIANTS, EnumVisitor)
24984    }
24985}
24986
24987impl ::serde::ser::Serialize for TeamFolderActivateError {
24988    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24989        // union serializer
24990        use serde::ser::SerializeStruct;
24991        match self {
24992            TeamFolderActivateError::AccessError(x) => {
24993                // union or polymporphic struct
24994                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
24995                s.serialize_field(".tag", "access_error")?;
24996                s.serialize_field("access_error", x)?;
24997                s.end()
24998            }
24999            TeamFolderActivateError::StatusError(x) => {
25000                // union or polymporphic struct
25001                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
25002                s.serialize_field(".tag", "status_error")?;
25003                s.serialize_field("status_error", x)?;
25004                s.end()
25005            }
25006            TeamFolderActivateError::TeamSharedDropboxError(x) => {
25007                // union or polymporphic struct
25008                let mut s = serializer.serialize_struct("TeamFolderActivateError", 2)?;
25009                s.serialize_field(".tag", "team_shared_dropbox_error")?;
25010                s.serialize_field("team_shared_dropbox_error", x)?;
25011                s.end()
25012            }
25013            TeamFolderActivateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25014        }
25015    }
25016}
25017
25018impl ::std::error::Error for TeamFolderActivateError {
25019    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
25020        match self {
25021            TeamFolderActivateError::AccessError(inner) => Some(inner),
25022            TeamFolderActivateError::StatusError(inner) => Some(inner),
25023            TeamFolderActivateError::TeamSharedDropboxError(inner) => Some(inner),
25024            _ => None,
25025        }
25026    }
25027}
25028
25029impl ::std::fmt::Display for TeamFolderActivateError {
25030    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25031        match self {
25032            TeamFolderActivateError::AccessError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25033            TeamFolderActivateError::StatusError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25034            TeamFolderActivateError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderActivateError: {}", inner),
25035            _ => write!(f, "{:?}", *self),
25036        }
25037    }
25038}
25039
25040// union extends BaseTeamFolderError
25041impl From<BaseTeamFolderError> for TeamFolderActivateError {
25042    fn from(parent: BaseTeamFolderError) -> Self {
25043        match parent {
25044            BaseTeamFolderError::AccessError(x) => TeamFolderActivateError::AccessError(x),
25045            BaseTeamFolderError::StatusError(x) => TeamFolderActivateError::StatusError(x),
25046            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderActivateError::TeamSharedDropboxError(x),
25047            BaseTeamFolderError::Other => TeamFolderActivateError::Other,
25048        }
25049    }
25050}
25051#[derive(Debug, Clone, PartialEq, Eq)]
25052#[non_exhaustive] // structs may have more fields added in the future.
25053pub struct TeamFolderArchiveArg {
25054    /// The ID of the team folder.
25055    pub team_folder_id: crate::types::common::SharedFolderId,
25056    /// Whether to force the archive to happen synchronously.
25057    pub force_async_off: bool,
25058}
25059
25060impl TeamFolderArchiveArg {
25061    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
25062        TeamFolderArchiveArg {
25063            team_folder_id,
25064            force_async_off: false,
25065        }
25066    }
25067
25068    pub fn with_force_async_off(mut self, value: bool) -> Self {
25069        self.force_async_off = value;
25070        self
25071    }
25072}
25073
25074const TEAM_FOLDER_ARCHIVE_ARG_FIELDS: &[&str] = &["team_folder_id",
25075                                                  "force_async_off"];
25076impl TeamFolderArchiveArg {
25077    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25078        map: V,
25079    ) -> Result<TeamFolderArchiveArg, V::Error> {
25080        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25081    }
25082
25083    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25084        mut map: V,
25085        optional: bool,
25086    ) -> Result<Option<TeamFolderArchiveArg>, V::Error> {
25087        let mut field_team_folder_id = None;
25088        let mut field_force_async_off = None;
25089        let mut nothing = true;
25090        while let Some(key) = map.next_key::<&str>()? {
25091            nothing = false;
25092            match key {
25093                "team_folder_id" => {
25094                    if field_team_folder_id.is_some() {
25095                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
25096                    }
25097                    field_team_folder_id = Some(map.next_value()?);
25098                }
25099                "force_async_off" => {
25100                    if field_force_async_off.is_some() {
25101                        return Err(::serde::de::Error::duplicate_field("force_async_off"));
25102                    }
25103                    field_force_async_off = Some(map.next_value()?);
25104                }
25105                _ => {
25106                    // unknown field allowed and ignored
25107                    map.next_value::<::serde_json::Value>()?;
25108                }
25109            }
25110        }
25111        if optional && nothing {
25112            return Ok(None);
25113        }
25114        let result = TeamFolderArchiveArg {
25115            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
25116            force_async_off: field_force_async_off.unwrap_or(false),
25117        };
25118        Ok(Some(result))
25119    }
25120
25121    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25122        &self,
25123        s: &mut S::SerializeStruct,
25124    ) -> Result<(), S::Error> {
25125        use serde::ser::SerializeStruct;
25126        s.serialize_field("team_folder_id", &self.team_folder_id)?;
25127        if self.force_async_off {
25128            s.serialize_field("force_async_off", &self.force_async_off)?;
25129        }
25130        Ok(())
25131    }
25132}
25133
25134impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveArg {
25135    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25136        // struct deserializer
25137        use serde::de::{MapAccess, Visitor};
25138        struct StructVisitor;
25139        impl<'de> Visitor<'de> for StructVisitor {
25140            type Value = TeamFolderArchiveArg;
25141            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25142                f.write_str("a TeamFolderArchiveArg struct")
25143            }
25144            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25145                TeamFolderArchiveArg::internal_deserialize(map)
25146            }
25147        }
25148        deserializer.deserialize_struct("TeamFolderArchiveArg", TEAM_FOLDER_ARCHIVE_ARG_FIELDS, StructVisitor)
25149    }
25150}
25151
25152impl ::serde::ser::Serialize for TeamFolderArchiveArg {
25153    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25154        // struct serializer
25155        use serde::ser::SerializeStruct;
25156        let mut s = serializer.serialize_struct("TeamFolderArchiveArg", 2)?;
25157        self.internal_serialize::<S>(&mut s)?;
25158        s.end()
25159    }
25160}
25161
25162// struct extends TeamFolderIdArg
25163impl From<TeamFolderArchiveArg> for TeamFolderIdArg {
25164    fn from(subtype: TeamFolderArchiveArg) -> Self {
25165        Self {
25166            team_folder_id: subtype.team_folder_id,
25167        }
25168    }
25169}
25170
25171#[derive(Debug, Clone, PartialEq, Eq)]
25172#[non_exhaustive] // variants may be added in the future
25173pub enum TeamFolderArchiveError {
25174    AccessError(TeamFolderAccessError),
25175    StatusError(TeamFolderInvalidStatusError),
25176    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
25177    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25178    /// typically indicates that this SDK version is out of date.
25179    Other,
25180}
25181
25182impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveError {
25183    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25184        // union deserializer
25185        use serde::de::{self, MapAccess, Visitor};
25186        struct EnumVisitor;
25187        impl<'de> Visitor<'de> for EnumVisitor {
25188            type Value = TeamFolderArchiveError;
25189            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25190                f.write_str("a TeamFolderArchiveError structure")
25191            }
25192            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25193                let tag: &str = match map.next_key()? {
25194                    Some(".tag") => map.next_value()?,
25195                    _ => return Err(de::Error::missing_field(".tag"))
25196                };
25197                let value = match tag {
25198                    "access_error" => {
25199                        match map.next_key()? {
25200                            Some("access_error") => TeamFolderArchiveError::AccessError(map.next_value()?),
25201                            None => return Err(de::Error::missing_field("access_error")),
25202                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25203                        }
25204                    }
25205                    "status_error" => {
25206                        match map.next_key()? {
25207                            Some("status_error") => TeamFolderArchiveError::StatusError(map.next_value()?),
25208                            None => return Err(de::Error::missing_field("status_error")),
25209                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25210                        }
25211                    }
25212                    "team_shared_dropbox_error" => {
25213                        match map.next_key()? {
25214                            Some("team_shared_dropbox_error") => TeamFolderArchiveError::TeamSharedDropboxError(map.next_value()?),
25215                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
25216                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25217                        }
25218                    }
25219                    _ => TeamFolderArchiveError::Other,
25220                };
25221                crate::eat_json_fields(&mut map)?;
25222                Ok(value)
25223            }
25224        }
25225        const VARIANTS: &[&str] = &["access_error",
25226                                    "status_error",
25227                                    "team_shared_dropbox_error",
25228                                    "other"];
25229        deserializer.deserialize_struct("TeamFolderArchiveError", VARIANTS, EnumVisitor)
25230    }
25231}
25232
25233impl ::serde::ser::Serialize for TeamFolderArchiveError {
25234    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25235        // union serializer
25236        use serde::ser::SerializeStruct;
25237        match self {
25238            TeamFolderArchiveError::AccessError(x) => {
25239                // union or polymporphic struct
25240                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
25241                s.serialize_field(".tag", "access_error")?;
25242                s.serialize_field("access_error", x)?;
25243                s.end()
25244            }
25245            TeamFolderArchiveError::StatusError(x) => {
25246                // union or polymporphic struct
25247                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
25248                s.serialize_field(".tag", "status_error")?;
25249                s.serialize_field("status_error", x)?;
25250                s.end()
25251            }
25252            TeamFolderArchiveError::TeamSharedDropboxError(x) => {
25253                // union or polymporphic struct
25254                let mut s = serializer.serialize_struct("TeamFolderArchiveError", 2)?;
25255                s.serialize_field(".tag", "team_shared_dropbox_error")?;
25256                s.serialize_field("team_shared_dropbox_error", x)?;
25257                s.end()
25258            }
25259            TeamFolderArchiveError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25260        }
25261    }
25262}
25263
25264impl ::std::error::Error for TeamFolderArchiveError {
25265    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
25266        match self {
25267            TeamFolderArchiveError::AccessError(inner) => Some(inner),
25268            TeamFolderArchiveError::StatusError(inner) => Some(inner),
25269            TeamFolderArchiveError::TeamSharedDropboxError(inner) => Some(inner),
25270            _ => None,
25271        }
25272    }
25273}
25274
25275impl ::std::fmt::Display for TeamFolderArchiveError {
25276    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25277        match self {
25278            TeamFolderArchiveError::AccessError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
25279            TeamFolderArchiveError::StatusError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
25280            TeamFolderArchiveError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderArchiveError: {}", inner),
25281            _ => write!(f, "{:?}", *self),
25282        }
25283    }
25284}
25285
25286// union extends BaseTeamFolderError
25287impl From<BaseTeamFolderError> for TeamFolderArchiveError {
25288    fn from(parent: BaseTeamFolderError) -> Self {
25289        match parent {
25290            BaseTeamFolderError::AccessError(x) => TeamFolderArchiveError::AccessError(x),
25291            BaseTeamFolderError::StatusError(x) => TeamFolderArchiveError::StatusError(x),
25292            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderArchiveError::TeamSharedDropboxError(x),
25293            BaseTeamFolderError::Other => TeamFolderArchiveError::Other,
25294        }
25295    }
25296}
25297#[derive(Debug, Clone, PartialEq, Eq)]
25298pub enum TeamFolderArchiveJobStatus {
25299    /// The asynchronous job is still in progress.
25300    InProgress,
25301    /// The archive job has finished. The value is the metadata for the resulting team folder.
25302    Complete(TeamFolderMetadata),
25303    /// Error occurred while performing an asynchronous job from
25304    /// [`team_folder_archive()`](crate::team::team_folder_archive).
25305    Failed(TeamFolderArchiveError),
25306}
25307
25308impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveJobStatus {
25309    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25310        // union deserializer
25311        use serde::de::{self, MapAccess, Visitor};
25312        struct EnumVisitor;
25313        impl<'de> Visitor<'de> for EnumVisitor {
25314            type Value = TeamFolderArchiveJobStatus;
25315            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25316                f.write_str("a TeamFolderArchiveJobStatus structure")
25317            }
25318            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25319                let tag: &str = match map.next_key()? {
25320                    Some(".tag") => map.next_value()?,
25321                    _ => return Err(de::Error::missing_field(".tag"))
25322                };
25323                let value = match tag {
25324                    "in_progress" => TeamFolderArchiveJobStatus::InProgress,
25325                    "complete" => TeamFolderArchiveJobStatus::Complete(TeamFolderMetadata::internal_deserialize(&mut map)?),
25326                    "failed" => {
25327                        match map.next_key()? {
25328                            Some("failed") => TeamFolderArchiveJobStatus::Failed(map.next_value()?),
25329                            None => return Err(de::Error::missing_field("failed")),
25330                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25331                        }
25332                    }
25333                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
25334                };
25335                crate::eat_json_fields(&mut map)?;
25336                Ok(value)
25337            }
25338        }
25339        const VARIANTS: &[&str] = &["in_progress",
25340                                    "complete",
25341                                    "failed"];
25342        deserializer.deserialize_struct("TeamFolderArchiveJobStatus", VARIANTS, EnumVisitor)
25343    }
25344}
25345
25346impl ::serde::ser::Serialize for TeamFolderArchiveJobStatus {
25347    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25348        // union serializer
25349        use serde::ser::SerializeStruct;
25350        match self {
25351            TeamFolderArchiveJobStatus::InProgress => {
25352                // unit
25353                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 1)?;
25354                s.serialize_field(".tag", "in_progress")?;
25355                s.end()
25356            }
25357            TeamFolderArchiveJobStatus::Complete(x) => {
25358                // struct
25359                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 8)?;
25360                s.serialize_field(".tag", "complete")?;
25361                x.internal_serialize::<S>(&mut s)?;
25362                s.end()
25363            }
25364            TeamFolderArchiveJobStatus::Failed(x) => {
25365                // union or polymporphic struct
25366                let mut s = serializer.serialize_struct("TeamFolderArchiveJobStatus", 2)?;
25367                s.serialize_field(".tag", "failed")?;
25368                s.serialize_field("failed", x)?;
25369                s.end()
25370            }
25371        }
25372    }
25373}
25374
25375// union extends crate::types::dbx_async::PollResultBase
25376impl From<crate::types::dbx_async::PollResultBase> for TeamFolderArchiveJobStatus {
25377    fn from(parent: crate::types::dbx_async::PollResultBase) -> Self {
25378        match parent {
25379            crate::types::dbx_async::PollResultBase::InProgress => TeamFolderArchiveJobStatus::InProgress,
25380        }
25381    }
25382}
25383#[derive(Debug, Clone, PartialEq, Eq)]
25384pub enum TeamFolderArchiveLaunch {
25385    /// This response indicates that the processing is asynchronous. The string is an id that can be
25386    /// used to obtain the status of the asynchronous job.
25387    AsyncJobId(crate::types::dbx_async::AsyncJobId),
25388    Complete(TeamFolderMetadata),
25389}
25390
25391impl<'de> ::serde::de::Deserialize<'de> for TeamFolderArchiveLaunch {
25392    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25393        // union deserializer
25394        use serde::de::{self, MapAccess, Visitor};
25395        struct EnumVisitor;
25396        impl<'de> Visitor<'de> for EnumVisitor {
25397            type Value = TeamFolderArchiveLaunch;
25398            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25399                f.write_str("a TeamFolderArchiveLaunch structure")
25400            }
25401            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25402                let tag: &str = match map.next_key()? {
25403                    Some(".tag") => map.next_value()?,
25404                    _ => return Err(de::Error::missing_field(".tag"))
25405                };
25406                let value = match tag {
25407                    "async_job_id" => {
25408                        match map.next_key()? {
25409                            Some("async_job_id") => TeamFolderArchiveLaunch::AsyncJobId(map.next_value()?),
25410                            None => return Err(de::Error::missing_field("async_job_id")),
25411                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25412                        }
25413                    }
25414                    "complete" => TeamFolderArchiveLaunch::Complete(TeamFolderMetadata::internal_deserialize(&mut map)?),
25415                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
25416                };
25417                crate::eat_json_fields(&mut map)?;
25418                Ok(value)
25419            }
25420        }
25421        const VARIANTS: &[&str] = &["async_job_id",
25422                                    "complete"];
25423        deserializer.deserialize_struct("TeamFolderArchiveLaunch", VARIANTS, EnumVisitor)
25424    }
25425}
25426
25427impl ::serde::ser::Serialize for TeamFolderArchiveLaunch {
25428    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25429        // union serializer
25430        use serde::ser::SerializeStruct;
25431        match self {
25432            TeamFolderArchiveLaunch::AsyncJobId(x) => {
25433                // primitive
25434                let mut s = serializer.serialize_struct("TeamFolderArchiveLaunch", 2)?;
25435                s.serialize_field(".tag", "async_job_id")?;
25436                s.serialize_field("async_job_id", x)?;
25437                s.end()
25438            }
25439            TeamFolderArchiveLaunch::Complete(x) => {
25440                // struct
25441                let mut s = serializer.serialize_struct("TeamFolderArchiveLaunch", 8)?;
25442                s.serialize_field(".tag", "complete")?;
25443                x.internal_serialize::<S>(&mut s)?;
25444                s.end()
25445            }
25446        }
25447    }
25448}
25449
25450// union extends crate::types::dbx_async::LaunchResultBase
25451impl From<crate::types::dbx_async::LaunchResultBase> for TeamFolderArchiveLaunch {
25452    fn from(parent: crate::types::dbx_async::LaunchResultBase) -> Self {
25453        match parent {
25454            crate::types::dbx_async::LaunchResultBase::AsyncJobId(x) => TeamFolderArchiveLaunch::AsyncJobId(x),
25455        }
25456    }
25457}
25458#[derive(Debug, Clone, PartialEq, Eq)]
25459#[non_exhaustive] // structs may have more fields added in the future.
25460pub struct TeamFolderCreateArg {
25461    /// Name for the new team folder.
25462    pub name: String,
25463    /// The sync setting to apply to this team folder. Only permitted if the team has team selective
25464    /// sync enabled.
25465    pub sync_setting: Option<crate::types::files::SyncSettingArg>,
25466}
25467
25468impl TeamFolderCreateArg {
25469    pub fn new(name: String) -> Self {
25470        TeamFolderCreateArg {
25471            name,
25472            sync_setting: None,
25473        }
25474    }
25475
25476    pub fn with_sync_setting(mut self, value: crate::types::files::SyncSettingArg) -> Self {
25477        self.sync_setting = Some(value);
25478        self
25479    }
25480}
25481
25482const TEAM_FOLDER_CREATE_ARG_FIELDS: &[&str] = &["name",
25483                                                 "sync_setting"];
25484impl TeamFolderCreateArg {
25485    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25486        map: V,
25487    ) -> Result<TeamFolderCreateArg, V::Error> {
25488        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25489    }
25490
25491    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25492        mut map: V,
25493        optional: bool,
25494    ) -> Result<Option<TeamFolderCreateArg>, V::Error> {
25495        let mut field_name = None;
25496        let mut field_sync_setting = None;
25497        let mut nothing = true;
25498        while let Some(key) = map.next_key::<&str>()? {
25499            nothing = false;
25500            match key {
25501                "name" => {
25502                    if field_name.is_some() {
25503                        return Err(::serde::de::Error::duplicate_field("name"));
25504                    }
25505                    field_name = Some(map.next_value()?);
25506                }
25507                "sync_setting" => {
25508                    if field_sync_setting.is_some() {
25509                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
25510                    }
25511                    field_sync_setting = Some(map.next_value()?);
25512                }
25513                _ => {
25514                    // unknown field allowed and ignored
25515                    map.next_value::<::serde_json::Value>()?;
25516                }
25517            }
25518        }
25519        if optional && nothing {
25520            return Ok(None);
25521        }
25522        let result = TeamFolderCreateArg {
25523            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
25524            sync_setting: field_sync_setting.and_then(Option::flatten),
25525        };
25526        Ok(Some(result))
25527    }
25528
25529    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25530        &self,
25531        s: &mut S::SerializeStruct,
25532    ) -> Result<(), S::Error> {
25533        use serde::ser::SerializeStruct;
25534        s.serialize_field("name", &self.name)?;
25535        if let Some(val) = &self.sync_setting {
25536            s.serialize_field("sync_setting", val)?;
25537        }
25538        Ok(())
25539    }
25540}
25541
25542impl<'de> ::serde::de::Deserialize<'de> for TeamFolderCreateArg {
25543    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25544        // struct deserializer
25545        use serde::de::{MapAccess, Visitor};
25546        struct StructVisitor;
25547        impl<'de> Visitor<'de> for StructVisitor {
25548            type Value = TeamFolderCreateArg;
25549            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25550                f.write_str("a TeamFolderCreateArg struct")
25551            }
25552            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25553                TeamFolderCreateArg::internal_deserialize(map)
25554            }
25555        }
25556        deserializer.deserialize_struct("TeamFolderCreateArg", TEAM_FOLDER_CREATE_ARG_FIELDS, StructVisitor)
25557    }
25558}
25559
25560impl ::serde::ser::Serialize for TeamFolderCreateArg {
25561    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25562        // struct serializer
25563        use serde::ser::SerializeStruct;
25564        let mut s = serializer.serialize_struct("TeamFolderCreateArg", 2)?;
25565        self.internal_serialize::<S>(&mut s)?;
25566        s.end()
25567    }
25568}
25569
25570#[derive(Debug, Clone, PartialEq, Eq)]
25571#[non_exhaustive] // variants may be added in the future
25572pub enum TeamFolderCreateError {
25573    /// The provided name cannot be used.
25574    InvalidFolderName,
25575    /// There is already a team folder with the provided name.
25576    FolderNameAlreadyUsed,
25577    /// The provided name cannot be used because it is reserved.
25578    FolderNameReserved,
25579    /// An error occurred setting the sync settings.
25580    SyncSettingsError(crate::types::files::SyncSettingsError),
25581    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25582    /// typically indicates that this SDK version is out of date.
25583    Other,
25584}
25585
25586impl<'de> ::serde::de::Deserialize<'de> for TeamFolderCreateError {
25587    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25588        // union deserializer
25589        use serde::de::{self, MapAccess, Visitor};
25590        struct EnumVisitor;
25591        impl<'de> Visitor<'de> for EnumVisitor {
25592            type Value = TeamFolderCreateError;
25593            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25594                f.write_str("a TeamFolderCreateError structure")
25595            }
25596            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25597                let tag: &str = match map.next_key()? {
25598                    Some(".tag") => map.next_value()?,
25599                    _ => return Err(de::Error::missing_field(".tag"))
25600                };
25601                let value = match tag {
25602                    "invalid_folder_name" => TeamFolderCreateError::InvalidFolderName,
25603                    "folder_name_already_used" => TeamFolderCreateError::FolderNameAlreadyUsed,
25604                    "folder_name_reserved" => TeamFolderCreateError::FolderNameReserved,
25605                    "sync_settings_error" => {
25606                        match map.next_key()? {
25607                            Some("sync_settings_error") => TeamFolderCreateError::SyncSettingsError(map.next_value()?),
25608                            None => return Err(de::Error::missing_field("sync_settings_error")),
25609                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25610                        }
25611                    }
25612                    _ => TeamFolderCreateError::Other,
25613                };
25614                crate::eat_json_fields(&mut map)?;
25615                Ok(value)
25616            }
25617        }
25618        const VARIANTS: &[&str] = &["invalid_folder_name",
25619                                    "folder_name_already_used",
25620                                    "folder_name_reserved",
25621                                    "sync_settings_error",
25622                                    "other"];
25623        deserializer.deserialize_struct("TeamFolderCreateError", VARIANTS, EnumVisitor)
25624    }
25625}
25626
25627impl ::serde::ser::Serialize for TeamFolderCreateError {
25628    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25629        // union serializer
25630        use serde::ser::SerializeStruct;
25631        match self {
25632            TeamFolderCreateError::InvalidFolderName => {
25633                // unit
25634                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25635                s.serialize_field(".tag", "invalid_folder_name")?;
25636                s.end()
25637            }
25638            TeamFolderCreateError::FolderNameAlreadyUsed => {
25639                // unit
25640                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25641                s.serialize_field(".tag", "folder_name_already_used")?;
25642                s.end()
25643            }
25644            TeamFolderCreateError::FolderNameReserved => {
25645                // unit
25646                let mut s = serializer.serialize_struct("TeamFolderCreateError", 1)?;
25647                s.serialize_field(".tag", "folder_name_reserved")?;
25648                s.end()
25649            }
25650            TeamFolderCreateError::SyncSettingsError(x) => {
25651                // union or polymporphic struct
25652                let mut s = serializer.serialize_struct("TeamFolderCreateError", 2)?;
25653                s.serialize_field(".tag", "sync_settings_error")?;
25654                s.serialize_field("sync_settings_error", x)?;
25655                s.end()
25656            }
25657            TeamFolderCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
25658        }
25659    }
25660}
25661
25662impl ::std::error::Error for TeamFolderCreateError {
25663    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
25664        match self {
25665            TeamFolderCreateError::SyncSettingsError(inner) => Some(inner),
25666            _ => None,
25667        }
25668    }
25669}
25670
25671impl ::std::fmt::Display for TeamFolderCreateError {
25672    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25673        match self {
25674            TeamFolderCreateError::InvalidFolderName => f.write_str("The provided name cannot be used."),
25675            TeamFolderCreateError::FolderNameAlreadyUsed => f.write_str("There is already a team folder with the provided name."),
25676            TeamFolderCreateError::FolderNameReserved => f.write_str("The provided name cannot be used because it is reserved."),
25677            TeamFolderCreateError::SyncSettingsError(inner) => write!(f, "An error occurred setting the sync settings: {}", inner),
25678            _ => write!(f, "{:?}", *self),
25679        }
25680    }
25681}
25682
25683#[derive(Debug, Clone, PartialEq, Eq)]
25684pub enum TeamFolderGetInfoItem {
25685    /// An ID that was provided as a parameter to
25686    /// [`team_folder_get_info()`](crate::team::team_folder_get_info) did not match any of the
25687    /// team's team folders.
25688    IdNotFound(String),
25689    /// Properties of a team folder.
25690    TeamFolderMetadata(TeamFolderMetadata),
25691}
25692
25693impl<'de> ::serde::de::Deserialize<'de> for TeamFolderGetInfoItem {
25694    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25695        // union deserializer
25696        use serde::de::{self, MapAccess, Visitor};
25697        struct EnumVisitor;
25698        impl<'de> Visitor<'de> for EnumVisitor {
25699            type Value = TeamFolderGetInfoItem;
25700            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25701                f.write_str("a TeamFolderGetInfoItem structure")
25702            }
25703            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25704                let tag: &str = match map.next_key()? {
25705                    Some(".tag") => map.next_value()?,
25706                    _ => return Err(de::Error::missing_field(".tag"))
25707                };
25708                let value = match tag {
25709                    "id_not_found" => {
25710                        match map.next_key()? {
25711                            Some("id_not_found") => TeamFolderGetInfoItem::IdNotFound(map.next_value()?),
25712                            None => return Err(de::Error::missing_field("id_not_found")),
25713                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
25714                        }
25715                    }
25716                    "team_folder_metadata" => TeamFolderGetInfoItem::TeamFolderMetadata(TeamFolderMetadata::internal_deserialize(&mut map)?),
25717                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
25718                };
25719                crate::eat_json_fields(&mut map)?;
25720                Ok(value)
25721            }
25722        }
25723        const VARIANTS: &[&str] = &["id_not_found",
25724                                    "team_folder_metadata"];
25725        deserializer.deserialize_struct("TeamFolderGetInfoItem", VARIANTS, EnumVisitor)
25726    }
25727}
25728
25729impl ::serde::ser::Serialize for TeamFolderGetInfoItem {
25730    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25731        // union serializer
25732        use serde::ser::SerializeStruct;
25733        match self {
25734            TeamFolderGetInfoItem::IdNotFound(x) => {
25735                // primitive
25736                let mut s = serializer.serialize_struct("TeamFolderGetInfoItem", 2)?;
25737                s.serialize_field(".tag", "id_not_found")?;
25738                s.serialize_field("id_not_found", x)?;
25739                s.end()
25740            }
25741            TeamFolderGetInfoItem::TeamFolderMetadata(x) => {
25742                // struct
25743                let mut s = serializer.serialize_struct("TeamFolderGetInfoItem", 8)?;
25744                s.serialize_field(".tag", "team_folder_metadata")?;
25745                x.internal_serialize::<S>(&mut s)?;
25746                s.end()
25747            }
25748        }
25749    }
25750}
25751
25752#[derive(Debug, Clone, PartialEq, Eq)]
25753#[non_exhaustive] // structs may have more fields added in the future.
25754pub struct TeamFolderIdArg {
25755    /// The ID of the team folder.
25756    pub team_folder_id: crate::types::common::SharedFolderId,
25757}
25758
25759impl TeamFolderIdArg {
25760    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
25761        TeamFolderIdArg {
25762            team_folder_id,
25763        }
25764    }
25765}
25766
25767const TEAM_FOLDER_ID_ARG_FIELDS: &[&str] = &["team_folder_id"];
25768impl TeamFolderIdArg {
25769    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25770        map: V,
25771    ) -> Result<TeamFolderIdArg, V::Error> {
25772        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25773    }
25774
25775    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25776        mut map: V,
25777        optional: bool,
25778    ) -> Result<Option<TeamFolderIdArg>, V::Error> {
25779        let mut field_team_folder_id = None;
25780        let mut nothing = true;
25781        while let Some(key) = map.next_key::<&str>()? {
25782            nothing = false;
25783            match key {
25784                "team_folder_id" => {
25785                    if field_team_folder_id.is_some() {
25786                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
25787                    }
25788                    field_team_folder_id = Some(map.next_value()?);
25789                }
25790                _ => {
25791                    // unknown field allowed and ignored
25792                    map.next_value::<::serde_json::Value>()?;
25793                }
25794            }
25795        }
25796        if optional && nothing {
25797            return Ok(None);
25798        }
25799        let result = TeamFolderIdArg {
25800            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
25801        };
25802        Ok(Some(result))
25803    }
25804
25805    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25806        &self,
25807        s: &mut S::SerializeStruct,
25808    ) -> Result<(), S::Error> {
25809        use serde::ser::SerializeStruct;
25810        s.serialize_field("team_folder_id", &self.team_folder_id)?;
25811        Ok(())
25812    }
25813}
25814
25815impl<'de> ::serde::de::Deserialize<'de> for TeamFolderIdArg {
25816    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25817        // struct deserializer
25818        use serde::de::{MapAccess, Visitor};
25819        struct StructVisitor;
25820        impl<'de> Visitor<'de> for StructVisitor {
25821            type Value = TeamFolderIdArg;
25822            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25823                f.write_str("a TeamFolderIdArg struct")
25824            }
25825            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25826                TeamFolderIdArg::internal_deserialize(map)
25827            }
25828        }
25829        deserializer.deserialize_struct("TeamFolderIdArg", TEAM_FOLDER_ID_ARG_FIELDS, StructVisitor)
25830    }
25831}
25832
25833impl ::serde::ser::Serialize for TeamFolderIdArg {
25834    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25835        // struct serializer
25836        use serde::ser::SerializeStruct;
25837        let mut s = serializer.serialize_struct("TeamFolderIdArg", 1)?;
25838        self.internal_serialize::<S>(&mut s)?;
25839        s.end()
25840    }
25841}
25842
25843#[derive(Debug, Clone, PartialEq, Eq)]
25844#[non_exhaustive] // structs may have more fields added in the future.
25845pub struct TeamFolderIdListArg {
25846    /// The list of team folder IDs.
25847    pub team_folder_ids: Vec<crate::types::common::SharedFolderId>,
25848}
25849
25850impl TeamFolderIdListArg {
25851    pub fn new(team_folder_ids: Vec<crate::types::common::SharedFolderId>) -> Self {
25852        TeamFolderIdListArg {
25853            team_folder_ids,
25854        }
25855    }
25856}
25857
25858const TEAM_FOLDER_ID_LIST_ARG_FIELDS: &[&str] = &["team_folder_ids"];
25859impl TeamFolderIdListArg {
25860    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
25861        map: V,
25862    ) -> Result<TeamFolderIdListArg, V::Error> {
25863        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
25864    }
25865
25866    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
25867        mut map: V,
25868        optional: bool,
25869    ) -> Result<Option<TeamFolderIdListArg>, V::Error> {
25870        let mut field_team_folder_ids = None;
25871        let mut nothing = true;
25872        while let Some(key) = map.next_key::<&str>()? {
25873            nothing = false;
25874            match key {
25875                "team_folder_ids" => {
25876                    if field_team_folder_ids.is_some() {
25877                        return Err(::serde::de::Error::duplicate_field("team_folder_ids"));
25878                    }
25879                    field_team_folder_ids = Some(map.next_value()?);
25880                }
25881                _ => {
25882                    // unknown field allowed and ignored
25883                    map.next_value::<::serde_json::Value>()?;
25884                }
25885            }
25886        }
25887        if optional && nothing {
25888            return Ok(None);
25889        }
25890        let result = TeamFolderIdListArg {
25891            team_folder_ids: field_team_folder_ids.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_ids"))?,
25892        };
25893        Ok(Some(result))
25894    }
25895
25896    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
25897        &self,
25898        s: &mut S::SerializeStruct,
25899    ) -> Result<(), S::Error> {
25900        use serde::ser::SerializeStruct;
25901        s.serialize_field("team_folder_ids", &self.team_folder_ids)?;
25902        Ok(())
25903    }
25904}
25905
25906impl<'de> ::serde::de::Deserialize<'de> for TeamFolderIdListArg {
25907    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25908        // struct deserializer
25909        use serde::de::{MapAccess, Visitor};
25910        struct StructVisitor;
25911        impl<'de> Visitor<'de> for StructVisitor {
25912            type Value = TeamFolderIdListArg;
25913            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25914                f.write_str("a TeamFolderIdListArg struct")
25915            }
25916            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
25917                TeamFolderIdListArg::internal_deserialize(map)
25918            }
25919        }
25920        deserializer.deserialize_struct("TeamFolderIdListArg", TEAM_FOLDER_ID_LIST_ARG_FIELDS, StructVisitor)
25921    }
25922}
25923
25924impl ::serde::ser::Serialize for TeamFolderIdListArg {
25925    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25926        // struct serializer
25927        use serde::ser::SerializeStruct;
25928        let mut s = serializer.serialize_struct("TeamFolderIdListArg", 1)?;
25929        self.internal_serialize::<S>(&mut s)?;
25930        s.end()
25931    }
25932}
25933
25934#[derive(Debug, Clone, PartialEq, Eq)]
25935#[non_exhaustive] // variants may be added in the future
25936pub enum TeamFolderInvalidStatusError {
25937    /// The folder is active and the operation did not succeed.
25938    Active,
25939    /// The folder is archived and the operation did not succeed.
25940    Archived,
25941    /// The folder is being archived and the operation did not succeed.
25942    ArchiveInProgress,
25943    /// Catch-all used for unrecognized values returned from the server. Encountering this value
25944    /// typically indicates that this SDK version is out of date.
25945    Other,
25946}
25947
25948impl<'de> ::serde::de::Deserialize<'de> for TeamFolderInvalidStatusError {
25949    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
25950        // union deserializer
25951        use serde::de::{self, MapAccess, Visitor};
25952        struct EnumVisitor;
25953        impl<'de> Visitor<'de> for EnumVisitor {
25954            type Value = TeamFolderInvalidStatusError;
25955            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
25956                f.write_str("a TeamFolderInvalidStatusError structure")
25957            }
25958            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
25959                let tag: &str = match map.next_key()? {
25960                    Some(".tag") => map.next_value()?,
25961                    _ => return Err(de::Error::missing_field(".tag"))
25962                };
25963                let value = match tag {
25964                    "active" => TeamFolderInvalidStatusError::Active,
25965                    "archived" => TeamFolderInvalidStatusError::Archived,
25966                    "archive_in_progress" => TeamFolderInvalidStatusError::ArchiveInProgress,
25967                    _ => TeamFolderInvalidStatusError::Other,
25968                };
25969                crate::eat_json_fields(&mut map)?;
25970                Ok(value)
25971            }
25972        }
25973        const VARIANTS: &[&str] = &["active",
25974                                    "archived",
25975                                    "archive_in_progress",
25976                                    "other"];
25977        deserializer.deserialize_struct("TeamFolderInvalidStatusError", VARIANTS, EnumVisitor)
25978    }
25979}
25980
25981impl ::serde::ser::Serialize for TeamFolderInvalidStatusError {
25982    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
25983        // union serializer
25984        use serde::ser::SerializeStruct;
25985        match self {
25986            TeamFolderInvalidStatusError::Active => {
25987                // unit
25988                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
25989                s.serialize_field(".tag", "active")?;
25990                s.end()
25991            }
25992            TeamFolderInvalidStatusError::Archived => {
25993                // unit
25994                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
25995                s.serialize_field(".tag", "archived")?;
25996                s.end()
25997            }
25998            TeamFolderInvalidStatusError::ArchiveInProgress => {
25999                // unit
26000                let mut s = serializer.serialize_struct("TeamFolderInvalidStatusError", 1)?;
26001                s.serialize_field(".tag", "archive_in_progress")?;
26002                s.end()
26003            }
26004            TeamFolderInvalidStatusError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26005        }
26006    }
26007}
26008
26009impl ::std::error::Error for TeamFolderInvalidStatusError {
26010}
26011
26012impl ::std::fmt::Display for TeamFolderInvalidStatusError {
26013    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26014        match self {
26015            TeamFolderInvalidStatusError::Active => f.write_str("The folder is active and the operation did not succeed."),
26016            TeamFolderInvalidStatusError::Archived => f.write_str("The folder is archived and the operation did not succeed."),
26017            TeamFolderInvalidStatusError::ArchiveInProgress => f.write_str("The folder is being archived and the operation did not succeed."),
26018            _ => write!(f, "{:?}", *self),
26019        }
26020    }
26021}
26022
26023#[derive(Debug, Clone, PartialEq, Eq)]
26024#[non_exhaustive] // structs may have more fields added in the future.
26025pub struct TeamFolderListArg {
26026    /// The maximum number of results to return per request.
26027    pub limit: u32,
26028}
26029
26030impl Default for TeamFolderListArg {
26031    fn default() -> Self {
26032        TeamFolderListArg {
26033            limit: 1000,
26034        }
26035    }
26036}
26037
26038impl TeamFolderListArg {
26039    pub fn with_limit(mut self, value: u32) -> Self {
26040        self.limit = value;
26041        self
26042    }
26043}
26044
26045const TEAM_FOLDER_LIST_ARG_FIELDS: &[&str] = &["limit"];
26046impl TeamFolderListArg {
26047    // no _opt deserializer
26048    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26049        mut map: V,
26050    ) -> Result<TeamFolderListArg, V::Error> {
26051        let mut field_limit = None;
26052        while let Some(key) = map.next_key::<&str>()? {
26053            match key {
26054                "limit" => {
26055                    if field_limit.is_some() {
26056                        return Err(::serde::de::Error::duplicate_field("limit"));
26057                    }
26058                    field_limit = Some(map.next_value()?);
26059                }
26060                _ => {
26061                    // unknown field allowed and ignored
26062                    map.next_value::<::serde_json::Value>()?;
26063                }
26064            }
26065        }
26066        let result = TeamFolderListArg {
26067            limit: field_limit.unwrap_or(1000),
26068        };
26069        Ok(result)
26070    }
26071
26072    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26073        &self,
26074        s: &mut S::SerializeStruct,
26075    ) -> Result<(), S::Error> {
26076        use serde::ser::SerializeStruct;
26077        if self.limit != 1000 {
26078            s.serialize_field("limit", &self.limit)?;
26079        }
26080        Ok(())
26081    }
26082}
26083
26084impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListArg {
26085    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26086        // struct deserializer
26087        use serde::de::{MapAccess, Visitor};
26088        struct StructVisitor;
26089        impl<'de> Visitor<'de> for StructVisitor {
26090            type Value = TeamFolderListArg;
26091            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26092                f.write_str("a TeamFolderListArg struct")
26093            }
26094            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26095                TeamFolderListArg::internal_deserialize(map)
26096            }
26097        }
26098        deserializer.deserialize_struct("TeamFolderListArg", TEAM_FOLDER_LIST_ARG_FIELDS, StructVisitor)
26099    }
26100}
26101
26102impl ::serde::ser::Serialize for TeamFolderListArg {
26103    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26104        // struct serializer
26105        use serde::ser::SerializeStruct;
26106        let mut s = serializer.serialize_struct("TeamFolderListArg", 1)?;
26107        self.internal_serialize::<S>(&mut s)?;
26108        s.end()
26109    }
26110}
26111
26112#[derive(Debug, Clone, PartialEq, Eq)]
26113#[non_exhaustive] // structs may have more fields added in the future.
26114pub struct TeamFolderListContinueArg {
26115    /// Indicates from what point to get the next set of team folders.
26116    pub cursor: String,
26117}
26118
26119impl TeamFolderListContinueArg {
26120    pub fn new(cursor: String) -> Self {
26121        TeamFolderListContinueArg {
26122            cursor,
26123        }
26124    }
26125}
26126
26127const TEAM_FOLDER_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
26128impl TeamFolderListContinueArg {
26129    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26130        map: V,
26131    ) -> Result<TeamFolderListContinueArg, V::Error> {
26132        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26133    }
26134
26135    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26136        mut map: V,
26137        optional: bool,
26138    ) -> Result<Option<TeamFolderListContinueArg>, V::Error> {
26139        let mut field_cursor = None;
26140        let mut nothing = true;
26141        while let Some(key) = map.next_key::<&str>()? {
26142            nothing = false;
26143            match key {
26144                "cursor" => {
26145                    if field_cursor.is_some() {
26146                        return Err(::serde::de::Error::duplicate_field("cursor"));
26147                    }
26148                    field_cursor = Some(map.next_value()?);
26149                }
26150                _ => {
26151                    // unknown field allowed and ignored
26152                    map.next_value::<::serde_json::Value>()?;
26153                }
26154            }
26155        }
26156        if optional && nothing {
26157            return Ok(None);
26158        }
26159        let result = TeamFolderListContinueArg {
26160            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
26161        };
26162        Ok(Some(result))
26163    }
26164
26165    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26166        &self,
26167        s: &mut S::SerializeStruct,
26168    ) -> Result<(), S::Error> {
26169        use serde::ser::SerializeStruct;
26170        s.serialize_field("cursor", &self.cursor)?;
26171        Ok(())
26172    }
26173}
26174
26175impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListContinueArg {
26176    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26177        // struct deserializer
26178        use serde::de::{MapAccess, Visitor};
26179        struct StructVisitor;
26180        impl<'de> Visitor<'de> for StructVisitor {
26181            type Value = TeamFolderListContinueArg;
26182            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26183                f.write_str("a TeamFolderListContinueArg struct")
26184            }
26185            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26186                TeamFolderListContinueArg::internal_deserialize(map)
26187            }
26188        }
26189        deserializer.deserialize_struct("TeamFolderListContinueArg", TEAM_FOLDER_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
26190    }
26191}
26192
26193impl ::serde::ser::Serialize for TeamFolderListContinueArg {
26194    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26195        // struct serializer
26196        use serde::ser::SerializeStruct;
26197        let mut s = serializer.serialize_struct("TeamFolderListContinueArg", 1)?;
26198        self.internal_serialize::<S>(&mut s)?;
26199        s.end()
26200    }
26201}
26202
26203#[derive(Debug, Clone, PartialEq, Eq)]
26204#[non_exhaustive] // variants may be added in the future
26205pub enum TeamFolderListContinueError {
26206    /// The cursor is invalid.
26207    InvalidCursor,
26208    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26209    /// typically indicates that this SDK version is out of date.
26210    Other,
26211}
26212
26213impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListContinueError {
26214    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26215        // union deserializer
26216        use serde::de::{self, MapAccess, Visitor};
26217        struct EnumVisitor;
26218        impl<'de> Visitor<'de> for EnumVisitor {
26219            type Value = TeamFolderListContinueError;
26220            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26221                f.write_str("a TeamFolderListContinueError structure")
26222            }
26223            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26224                let tag: &str = match map.next_key()? {
26225                    Some(".tag") => map.next_value()?,
26226                    _ => return Err(de::Error::missing_field(".tag"))
26227                };
26228                let value = match tag {
26229                    "invalid_cursor" => TeamFolderListContinueError::InvalidCursor,
26230                    _ => TeamFolderListContinueError::Other,
26231                };
26232                crate::eat_json_fields(&mut map)?;
26233                Ok(value)
26234            }
26235        }
26236        const VARIANTS: &[&str] = &["invalid_cursor",
26237                                    "other"];
26238        deserializer.deserialize_struct("TeamFolderListContinueError", VARIANTS, EnumVisitor)
26239    }
26240}
26241
26242impl ::serde::ser::Serialize for TeamFolderListContinueError {
26243    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26244        // union serializer
26245        use serde::ser::SerializeStruct;
26246        match self {
26247            TeamFolderListContinueError::InvalidCursor => {
26248                // unit
26249                let mut s = serializer.serialize_struct("TeamFolderListContinueError", 1)?;
26250                s.serialize_field(".tag", "invalid_cursor")?;
26251                s.end()
26252            }
26253            TeamFolderListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26254        }
26255    }
26256}
26257
26258impl ::std::error::Error for TeamFolderListContinueError {
26259}
26260
26261impl ::std::fmt::Display for TeamFolderListContinueError {
26262    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26263        match self {
26264            TeamFolderListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
26265            _ => write!(f, "{:?}", *self),
26266        }
26267    }
26268}
26269
26270#[derive(Debug, Clone, PartialEq, Eq)]
26271#[non_exhaustive] // structs may have more fields added in the future.
26272pub struct TeamFolderListError {
26273    pub access_error: TeamFolderAccessError,
26274}
26275
26276impl TeamFolderListError {
26277    pub fn new(access_error: TeamFolderAccessError) -> Self {
26278        TeamFolderListError {
26279            access_error,
26280        }
26281    }
26282}
26283
26284const TEAM_FOLDER_LIST_ERROR_FIELDS: &[&str] = &["access_error"];
26285impl TeamFolderListError {
26286    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26287        map: V,
26288    ) -> Result<TeamFolderListError, V::Error> {
26289        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26290    }
26291
26292    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26293        mut map: V,
26294        optional: bool,
26295    ) -> Result<Option<TeamFolderListError>, V::Error> {
26296        let mut field_access_error = None;
26297        let mut nothing = true;
26298        while let Some(key) = map.next_key::<&str>()? {
26299            nothing = false;
26300            match key {
26301                "access_error" => {
26302                    if field_access_error.is_some() {
26303                        return Err(::serde::de::Error::duplicate_field("access_error"));
26304                    }
26305                    field_access_error = Some(map.next_value()?);
26306                }
26307                _ => {
26308                    // unknown field allowed and ignored
26309                    map.next_value::<::serde_json::Value>()?;
26310                }
26311            }
26312        }
26313        if optional && nothing {
26314            return Ok(None);
26315        }
26316        let result = TeamFolderListError {
26317            access_error: field_access_error.ok_or_else(|| ::serde::de::Error::missing_field("access_error"))?,
26318        };
26319        Ok(Some(result))
26320    }
26321
26322    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26323        &self,
26324        s: &mut S::SerializeStruct,
26325    ) -> Result<(), S::Error> {
26326        use serde::ser::SerializeStruct;
26327        s.serialize_field("access_error", &self.access_error)?;
26328        Ok(())
26329    }
26330}
26331
26332impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListError {
26333    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26334        // struct deserializer
26335        use serde::de::{MapAccess, Visitor};
26336        struct StructVisitor;
26337        impl<'de> Visitor<'de> for StructVisitor {
26338            type Value = TeamFolderListError;
26339            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26340                f.write_str("a TeamFolderListError struct")
26341            }
26342            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26343                TeamFolderListError::internal_deserialize(map)
26344            }
26345        }
26346        deserializer.deserialize_struct("TeamFolderListError", TEAM_FOLDER_LIST_ERROR_FIELDS, StructVisitor)
26347    }
26348}
26349
26350impl ::serde::ser::Serialize for TeamFolderListError {
26351    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26352        // struct serializer
26353        use serde::ser::SerializeStruct;
26354        let mut s = serializer.serialize_struct("TeamFolderListError", 1)?;
26355        self.internal_serialize::<S>(&mut s)?;
26356        s.end()
26357    }
26358}
26359
26360impl ::std::error::Error for TeamFolderListError {
26361}
26362
26363impl ::std::fmt::Display for TeamFolderListError {
26364    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26365        write!(f, "{:?}", *self)
26366    }
26367}
26368
26369/// Result for [`team_folder_list()`](crate::team::team_folder_list) and
26370/// [`team_folder_list_continue()`](crate::team::team_folder_list_continue).
26371#[derive(Debug, Clone, PartialEq, Eq)]
26372#[non_exhaustive] // structs may have more fields added in the future.
26373pub struct TeamFolderListResult {
26374    /// List of all team folders in the authenticated team.
26375    pub team_folders: Vec<TeamFolderMetadata>,
26376    /// Pass the cursor into [`team_folder_list_continue()`](crate::team::team_folder_list_continue)
26377    /// to obtain additional team folders.
26378    pub cursor: String,
26379    /// Is true if there are additional team folders that have not been returned yet. An additional
26380    /// call to [`team_folder_list_continue()`](crate::team::team_folder_list_continue) can retrieve
26381    /// them.
26382    pub has_more: bool,
26383}
26384
26385impl TeamFolderListResult {
26386    pub fn new(team_folders: Vec<TeamFolderMetadata>, cursor: String, has_more: bool) -> Self {
26387        TeamFolderListResult {
26388            team_folders,
26389            cursor,
26390            has_more,
26391        }
26392    }
26393}
26394
26395const TEAM_FOLDER_LIST_RESULT_FIELDS: &[&str] = &["team_folders",
26396                                                  "cursor",
26397                                                  "has_more"];
26398impl TeamFolderListResult {
26399    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26400        map: V,
26401    ) -> Result<TeamFolderListResult, V::Error> {
26402        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26403    }
26404
26405    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26406        mut map: V,
26407        optional: bool,
26408    ) -> Result<Option<TeamFolderListResult>, V::Error> {
26409        let mut field_team_folders = None;
26410        let mut field_cursor = None;
26411        let mut field_has_more = None;
26412        let mut nothing = true;
26413        while let Some(key) = map.next_key::<&str>()? {
26414            nothing = false;
26415            match key {
26416                "team_folders" => {
26417                    if field_team_folders.is_some() {
26418                        return Err(::serde::de::Error::duplicate_field("team_folders"));
26419                    }
26420                    field_team_folders = Some(map.next_value()?);
26421                }
26422                "cursor" => {
26423                    if field_cursor.is_some() {
26424                        return Err(::serde::de::Error::duplicate_field("cursor"));
26425                    }
26426                    field_cursor = Some(map.next_value()?);
26427                }
26428                "has_more" => {
26429                    if field_has_more.is_some() {
26430                        return Err(::serde::de::Error::duplicate_field("has_more"));
26431                    }
26432                    field_has_more = Some(map.next_value()?);
26433                }
26434                _ => {
26435                    // unknown field allowed and ignored
26436                    map.next_value::<::serde_json::Value>()?;
26437                }
26438            }
26439        }
26440        if optional && nothing {
26441            return Ok(None);
26442        }
26443        let result = TeamFolderListResult {
26444            team_folders: field_team_folders.ok_or_else(|| ::serde::de::Error::missing_field("team_folders"))?,
26445            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
26446            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
26447        };
26448        Ok(Some(result))
26449    }
26450
26451    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26452        &self,
26453        s: &mut S::SerializeStruct,
26454    ) -> Result<(), S::Error> {
26455        use serde::ser::SerializeStruct;
26456        s.serialize_field("team_folders", &self.team_folders)?;
26457        s.serialize_field("cursor", &self.cursor)?;
26458        s.serialize_field("has_more", &self.has_more)?;
26459        Ok(())
26460    }
26461}
26462
26463impl<'de> ::serde::de::Deserialize<'de> for TeamFolderListResult {
26464    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26465        // struct deserializer
26466        use serde::de::{MapAccess, Visitor};
26467        struct StructVisitor;
26468        impl<'de> Visitor<'de> for StructVisitor {
26469            type Value = TeamFolderListResult;
26470            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26471                f.write_str("a TeamFolderListResult struct")
26472            }
26473            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26474                TeamFolderListResult::internal_deserialize(map)
26475            }
26476        }
26477        deserializer.deserialize_struct("TeamFolderListResult", TEAM_FOLDER_LIST_RESULT_FIELDS, StructVisitor)
26478    }
26479}
26480
26481impl ::serde::ser::Serialize for TeamFolderListResult {
26482    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26483        // struct serializer
26484        use serde::ser::SerializeStruct;
26485        let mut s = serializer.serialize_struct("TeamFolderListResult", 3)?;
26486        self.internal_serialize::<S>(&mut s)?;
26487        s.end()
26488    }
26489}
26490
26491/// Properties of a team folder.
26492#[derive(Debug, Clone, PartialEq, Eq)]
26493#[non_exhaustive] // structs may have more fields added in the future.
26494pub struct TeamFolderMetadata {
26495    /// The ID of the team folder.
26496    pub team_folder_id: crate::types::common::SharedFolderId,
26497    /// The name of the team folder.
26498    pub name: String,
26499    /// The status of the team folder.
26500    pub status: TeamFolderStatus,
26501    /// True if this team folder is a shared team root.
26502    pub is_team_shared_dropbox: bool,
26503    /// The sync setting applied to this team folder.
26504    pub sync_setting: crate::types::files::SyncSetting,
26505    /// Sync settings applied to contents of this team folder.
26506    pub content_sync_settings: Vec<crate::types::files::ContentSyncSetting>,
26507    /// The quota limit in bytes for this team folder namespace tree.
26508    pub quota_limit: i64,
26509}
26510
26511impl TeamFolderMetadata {
26512    pub fn new(
26513        team_folder_id: crate::types::common::SharedFolderId,
26514        name: String,
26515        status: TeamFolderStatus,
26516        is_team_shared_dropbox: bool,
26517        sync_setting: crate::types::files::SyncSetting,
26518        content_sync_settings: Vec<crate::types::files::ContentSyncSetting>,
26519    ) -> Self {
26520        TeamFolderMetadata {
26521            team_folder_id,
26522            name,
26523            status,
26524            is_team_shared_dropbox,
26525            sync_setting,
26526            content_sync_settings,
26527            quota_limit: 0,
26528        }
26529    }
26530
26531    pub fn with_quota_limit(mut self, value: i64) -> Self {
26532        self.quota_limit = value;
26533        self
26534    }
26535}
26536
26537const TEAM_FOLDER_METADATA_FIELDS: &[&str] = &["team_folder_id",
26538                                               "name",
26539                                               "status",
26540                                               "is_team_shared_dropbox",
26541                                               "sync_setting",
26542                                               "content_sync_settings",
26543                                               "quota_limit"];
26544impl TeamFolderMetadata {
26545    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26546        map: V,
26547    ) -> Result<TeamFolderMetadata, V::Error> {
26548        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26549    }
26550
26551    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26552        mut map: V,
26553        optional: bool,
26554    ) -> Result<Option<TeamFolderMetadata>, V::Error> {
26555        let mut field_team_folder_id = None;
26556        let mut field_name = None;
26557        let mut field_status = None;
26558        let mut field_is_team_shared_dropbox = None;
26559        let mut field_sync_setting = None;
26560        let mut field_content_sync_settings = None;
26561        let mut field_quota_limit = None;
26562        let mut nothing = true;
26563        while let Some(key) = map.next_key::<&str>()? {
26564            nothing = false;
26565            match key {
26566                "team_folder_id" => {
26567                    if field_team_folder_id.is_some() {
26568                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
26569                    }
26570                    field_team_folder_id = Some(map.next_value()?);
26571                }
26572                "name" => {
26573                    if field_name.is_some() {
26574                        return Err(::serde::de::Error::duplicate_field("name"));
26575                    }
26576                    field_name = Some(map.next_value()?);
26577                }
26578                "status" => {
26579                    if field_status.is_some() {
26580                        return Err(::serde::de::Error::duplicate_field("status"));
26581                    }
26582                    field_status = Some(map.next_value()?);
26583                }
26584                "is_team_shared_dropbox" => {
26585                    if field_is_team_shared_dropbox.is_some() {
26586                        return Err(::serde::de::Error::duplicate_field("is_team_shared_dropbox"));
26587                    }
26588                    field_is_team_shared_dropbox = Some(map.next_value()?);
26589                }
26590                "sync_setting" => {
26591                    if field_sync_setting.is_some() {
26592                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
26593                    }
26594                    field_sync_setting = Some(map.next_value()?);
26595                }
26596                "content_sync_settings" => {
26597                    if field_content_sync_settings.is_some() {
26598                        return Err(::serde::de::Error::duplicate_field("content_sync_settings"));
26599                    }
26600                    field_content_sync_settings = Some(map.next_value()?);
26601                }
26602                "quota_limit" => {
26603                    if field_quota_limit.is_some() {
26604                        return Err(::serde::de::Error::duplicate_field("quota_limit"));
26605                    }
26606                    field_quota_limit = Some(map.next_value()?);
26607                }
26608                _ => {
26609                    // unknown field allowed and ignored
26610                    map.next_value::<::serde_json::Value>()?;
26611                }
26612            }
26613        }
26614        if optional && nothing {
26615            return Ok(None);
26616        }
26617        let result = TeamFolderMetadata {
26618            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
26619            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
26620            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
26621            is_team_shared_dropbox: field_is_team_shared_dropbox.ok_or_else(|| ::serde::de::Error::missing_field("is_team_shared_dropbox"))?,
26622            sync_setting: field_sync_setting.ok_or_else(|| ::serde::de::Error::missing_field("sync_setting"))?,
26623            content_sync_settings: field_content_sync_settings.ok_or_else(|| ::serde::de::Error::missing_field("content_sync_settings"))?,
26624            quota_limit: field_quota_limit.unwrap_or(0),
26625        };
26626        Ok(Some(result))
26627    }
26628
26629    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26630        &self,
26631        s: &mut S::SerializeStruct,
26632    ) -> Result<(), S::Error> {
26633        use serde::ser::SerializeStruct;
26634        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26635        s.serialize_field("name", &self.name)?;
26636        s.serialize_field("status", &self.status)?;
26637        s.serialize_field("is_team_shared_dropbox", &self.is_team_shared_dropbox)?;
26638        s.serialize_field("sync_setting", &self.sync_setting)?;
26639        s.serialize_field("content_sync_settings", &self.content_sync_settings)?;
26640        if self.quota_limit != 0 {
26641            s.serialize_field("quota_limit", &self.quota_limit)?;
26642        }
26643        Ok(())
26644    }
26645}
26646
26647impl<'de> ::serde::de::Deserialize<'de> for TeamFolderMetadata {
26648    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26649        // struct deserializer
26650        use serde::de::{MapAccess, Visitor};
26651        struct StructVisitor;
26652        impl<'de> Visitor<'de> for StructVisitor {
26653            type Value = TeamFolderMetadata;
26654            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26655                f.write_str("a TeamFolderMetadata struct")
26656            }
26657            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26658                TeamFolderMetadata::internal_deserialize(map)
26659            }
26660        }
26661        deserializer.deserialize_struct("TeamFolderMetadata", TEAM_FOLDER_METADATA_FIELDS, StructVisitor)
26662    }
26663}
26664
26665impl ::serde::ser::Serialize for TeamFolderMetadata {
26666    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26667        // struct serializer
26668        use serde::ser::SerializeStruct;
26669        let mut s = serializer.serialize_struct("TeamFolderMetadata", 7)?;
26670        self.internal_serialize::<S>(&mut s)?;
26671        s.end()
26672    }
26673}
26674
26675
26676#[derive(Debug, Clone, PartialEq, Eq)]
26677#[non_exhaustive] // variants may be added in the future
26678pub enum TeamFolderPermanentlyDeleteError {
26679    AccessError(TeamFolderAccessError),
26680    StatusError(TeamFolderInvalidStatusError),
26681    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
26682    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26683    /// typically indicates that this SDK version is out of date.
26684    Other,
26685}
26686
26687impl<'de> ::serde::de::Deserialize<'de> for TeamFolderPermanentlyDeleteError {
26688    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26689        // union deserializer
26690        use serde::de::{self, MapAccess, Visitor};
26691        struct EnumVisitor;
26692        impl<'de> Visitor<'de> for EnumVisitor {
26693            type Value = TeamFolderPermanentlyDeleteError;
26694            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26695                f.write_str("a TeamFolderPermanentlyDeleteError structure")
26696            }
26697            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26698                let tag: &str = match map.next_key()? {
26699                    Some(".tag") => map.next_value()?,
26700                    _ => return Err(de::Error::missing_field(".tag"))
26701                };
26702                let value = match tag {
26703                    "access_error" => {
26704                        match map.next_key()? {
26705                            Some("access_error") => TeamFolderPermanentlyDeleteError::AccessError(map.next_value()?),
26706                            None => return Err(de::Error::missing_field("access_error")),
26707                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26708                        }
26709                    }
26710                    "status_error" => {
26711                        match map.next_key()? {
26712                            Some("status_error") => TeamFolderPermanentlyDeleteError::StatusError(map.next_value()?),
26713                            None => return Err(de::Error::missing_field("status_error")),
26714                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26715                        }
26716                    }
26717                    "team_shared_dropbox_error" => {
26718                        match map.next_key()? {
26719                            Some("team_shared_dropbox_error") => TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(map.next_value()?),
26720                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
26721                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26722                        }
26723                    }
26724                    _ => TeamFolderPermanentlyDeleteError::Other,
26725                };
26726                crate::eat_json_fields(&mut map)?;
26727                Ok(value)
26728            }
26729        }
26730        const VARIANTS: &[&str] = &["access_error",
26731                                    "status_error",
26732                                    "team_shared_dropbox_error",
26733                                    "other"];
26734        deserializer.deserialize_struct("TeamFolderPermanentlyDeleteError", VARIANTS, EnumVisitor)
26735    }
26736}
26737
26738impl ::serde::ser::Serialize for TeamFolderPermanentlyDeleteError {
26739    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26740        // union serializer
26741        use serde::ser::SerializeStruct;
26742        match self {
26743            TeamFolderPermanentlyDeleteError::AccessError(x) => {
26744                // union or polymporphic struct
26745                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26746                s.serialize_field(".tag", "access_error")?;
26747                s.serialize_field("access_error", x)?;
26748                s.end()
26749            }
26750            TeamFolderPermanentlyDeleteError::StatusError(x) => {
26751                // union or polymporphic struct
26752                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26753                s.serialize_field(".tag", "status_error")?;
26754                s.serialize_field("status_error", x)?;
26755                s.end()
26756            }
26757            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(x) => {
26758                // union or polymporphic struct
26759                let mut s = serializer.serialize_struct("TeamFolderPermanentlyDeleteError", 2)?;
26760                s.serialize_field(".tag", "team_shared_dropbox_error")?;
26761                s.serialize_field("team_shared_dropbox_error", x)?;
26762                s.end()
26763            }
26764            TeamFolderPermanentlyDeleteError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
26765        }
26766    }
26767}
26768
26769impl ::std::error::Error for TeamFolderPermanentlyDeleteError {
26770    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
26771        match self {
26772            TeamFolderPermanentlyDeleteError::AccessError(inner) => Some(inner),
26773            TeamFolderPermanentlyDeleteError::StatusError(inner) => Some(inner),
26774            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(inner) => Some(inner),
26775            _ => None,
26776        }
26777    }
26778}
26779
26780impl ::std::fmt::Display for TeamFolderPermanentlyDeleteError {
26781    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26782        match self {
26783            TeamFolderPermanentlyDeleteError::AccessError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26784            TeamFolderPermanentlyDeleteError::StatusError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26785            TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderPermanentlyDeleteError: {}", inner),
26786            _ => write!(f, "{:?}", *self),
26787        }
26788    }
26789}
26790
26791// union extends BaseTeamFolderError
26792impl From<BaseTeamFolderError> for TeamFolderPermanentlyDeleteError {
26793    fn from(parent: BaseTeamFolderError) -> Self {
26794        match parent {
26795            BaseTeamFolderError::AccessError(x) => TeamFolderPermanentlyDeleteError::AccessError(x),
26796            BaseTeamFolderError::StatusError(x) => TeamFolderPermanentlyDeleteError::StatusError(x),
26797            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderPermanentlyDeleteError::TeamSharedDropboxError(x),
26798            BaseTeamFolderError::Other => TeamFolderPermanentlyDeleteError::Other,
26799        }
26800    }
26801}
26802#[derive(Debug, Clone, PartialEq, Eq)]
26803#[non_exhaustive] // structs may have more fields added in the future.
26804pub struct TeamFolderRenameArg {
26805    /// The ID of the team folder.
26806    pub team_folder_id: crate::types::common::SharedFolderId,
26807    /// New team folder name.
26808    pub name: String,
26809}
26810
26811impl TeamFolderRenameArg {
26812    pub fn new(team_folder_id: crate::types::common::SharedFolderId, name: String) -> Self {
26813        TeamFolderRenameArg {
26814            team_folder_id,
26815            name,
26816        }
26817    }
26818}
26819
26820const TEAM_FOLDER_RENAME_ARG_FIELDS: &[&str] = &["team_folder_id",
26821                                                 "name"];
26822impl TeamFolderRenameArg {
26823    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
26824        map: V,
26825    ) -> Result<TeamFolderRenameArg, V::Error> {
26826        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
26827    }
26828
26829    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
26830        mut map: V,
26831        optional: bool,
26832    ) -> Result<Option<TeamFolderRenameArg>, V::Error> {
26833        let mut field_team_folder_id = None;
26834        let mut field_name = None;
26835        let mut nothing = true;
26836        while let Some(key) = map.next_key::<&str>()? {
26837            nothing = false;
26838            match key {
26839                "team_folder_id" => {
26840                    if field_team_folder_id.is_some() {
26841                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
26842                    }
26843                    field_team_folder_id = Some(map.next_value()?);
26844                }
26845                "name" => {
26846                    if field_name.is_some() {
26847                        return Err(::serde::de::Error::duplicate_field("name"));
26848                    }
26849                    field_name = Some(map.next_value()?);
26850                }
26851                _ => {
26852                    // unknown field allowed and ignored
26853                    map.next_value::<::serde_json::Value>()?;
26854                }
26855            }
26856        }
26857        if optional && nothing {
26858            return Ok(None);
26859        }
26860        let result = TeamFolderRenameArg {
26861            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
26862            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
26863        };
26864        Ok(Some(result))
26865    }
26866
26867    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
26868        &self,
26869        s: &mut S::SerializeStruct,
26870    ) -> Result<(), S::Error> {
26871        use serde::ser::SerializeStruct;
26872        s.serialize_field("team_folder_id", &self.team_folder_id)?;
26873        s.serialize_field("name", &self.name)?;
26874        Ok(())
26875    }
26876}
26877
26878impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRenameArg {
26879    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26880        // struct deserializer
26881        use serde::de::{MapAccess, Visitor};
26882        struct StructVisitor;
26883        impl<'de> Visitor<'de> for StructVisitor {
26884            type Value = TeamFolderRenameArg;
26885            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26886                f.write_str("a TeamFolderRenameArg struct")
26887            }
26888            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
26889                TeamFolderRenameArg::internal_deserialize(map)
26890            }
26891        }
26892        deserializer.deserialize_struct("TeamFolderRenameArg", TEAM_FOLDER_RENAME_ARG_FIELDS, StructVisitor)
26893    }
26894}
26895
26896impl ::serde::ser::Serialize for TeamFolderRenameArg {
26897    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26898        // struct serializer
26899        use serde::ser::SerializeStruct;
26900        let mut s = serializer.serialize_struct("TeamFolderRenameArg", 2)?;
26901        self.internal_serialize::<S>(&mut s)?;
26902        s.end()
26903    }
26904}
26905
26906// struct extends TeamFolderIdArg
26907impl From<TeamFolderRenameArg> for TeamFolderIdArg {
26908    fn from(subtype: TeamFolderRenameArg) -> Self {
26909        Self {
26910            team_folder_id: subtype.team_folder_id,
26911        }
26912    }
26913}
26914#[derive(Debug, Clone, PartialEq, Eq)]
26915#[non_exhaustive] // variants may be added in the future
26916pub enum TeamFolderRenameError {
26917    AccessError(TeamFolderAccessError),
26918    StatusError(TeamFolderInvalidStatusError),
26919    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
26920    /// The provided folder name cannot be used.
26921    InvalidFolderName,
26922    /// There is already a team folder with the same name.
26923    FolderNameAlreadyUsed,
26924    /// The provided name cannot be used because it is reserved.
26925    FolderNameReserved,
26926    /// Catch-all used for unrecognized values returned from the server. Encountering this value
26927    /// typically indicates that this SDK version is out of date.
26928    Other,
26929}
26930
26931impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRenameError {
26932    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
26933        // union deserializer
26934        use serde::de::{self, MapAccess, Visitor};
26935        struct EnumVisitor;
26936        impl<'de> Visitor<'de> for EnumVisitor {
26937            type Value = TeamFolderRenameError;
26938            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
26939                f.write_str("a TeamFolderRenameError structure")
26940            }
26941            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
26942                let tag: &str = match map.next_key()? {
26943                    Some(".tag") => map.next_value()?,
26944                    _ => return Err(de::Error::missing_field(".tag"))
26945                };
26946                let value = match tag {
26947                    "access_error" => {
26948                        match map.next_key()? {
26949                            Some("access_error") => TeamFolderRenameError::AccessError(map.next_value()?),
26950                            None => return Err(de::Error::missing_field("access_error")),
26951                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26952                        }
26953                    }
26954                    "status_error" => {
26955                        match map.next_key()? {
26956                            Some("status_error") => TeamFolderRenameError::StatusError(map.next_value()?),
26957                            None => return Err(de::Error::missing_field("status_error")),
26958                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26959                        }
26960                    }
26961                    "team_shared_dropbox_error" => {
26962                        match map.next_key()? {
26963                            Some("team_shared_dropbox_error") => TeamFolderRenameError::TeamSharedDropboxError(map.next_value()?),
26964                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
26965                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
26966                        }
26967                    }
26968                    "invalid_folder_name" => TeamFolderRenameError::InvalidFolderName,
26969                    "folder_name_already_used" => TeamFolderRenameError::FolderNameAlreadyUsed,
26970                    "folder_name_reserved" => TeamFolderRenameError::FolderNameReserved,
26971                    _ => TeamFolderRenameError::Other,
26972                };
26973                crate::eat_json_fields(&mut map)?;
26974                Ok(value)
26975            }
26976        }
26977        const VARIANTS: &[&str] = &["access_error",
26978                                    "status_error",
26979                                    "team_shared_dropbox_error",
26980                                    "other",
26981                                    "invalid_folder_name",
26982                                    "folder_name_already_used",
26983                                    "folder_name_reserved"];
26984        deserializer.deserialize_struct("TeamFolderRenameError", VARIANTS, EnumVisitor)
26985    }
26986}
26987
26988impl ::serde::ser::Serialize for TeamFolderRenameError {
26989    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
26990        // union serializer
26991        use serde::ser::SerializeStruct;
26992        match self {
26993            TeamFolderRenameError::AccessError(x) => {
26994                // union or polymporphic struct
26995                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
26996                s.serialize_field(".tag", "access_error")?;
26997                s.serialize_field("access_error", x)?;
26998                s.end()
26999            }
27000            TeamFolderRenameError::StatusError(x) => {
27001                // union or polymporphic struct
27002                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
27003                s.serialize_field(".tag", "status_error")?;
27004                s.serialize_field("status_error", x)?;
27005                s.end()
27006            }
27007            TeamFolderRenameError::TeamSharedDropboxError(x) => {
27008                // union or polymporphic struct
27009                let mut s = serializer.serialize_struct("TeamFolderRenameError", 2)?;
27010                s.serialize_field(".tag", "team_shared_dropbox_error")?;
27011                s.serialize_field("team_shared_dropbox_error", x)?;
27012                s.end()
27013            }
27014            TeamFolderRenameError::InvalidFolderName => {
27015                // unit
27016                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27017                s.serialize_field(".tag", "invalid_folder_name")?;
27018                s.end()
27019            }
27020            TeamFolderRenameError::FolderNameAlreadyUsed => {
27021                // unit
27022                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27023                s.serialize_field(".tag", "folder_name_already_used")?;
27024                s.end()
27025            }
27026            TeamFolderRenameError::FolderNameReserved => {
27027                // unit
27028                let mut s = serializer.serialize_struct("TeamFolderRenameError", 1)?;
27029                s.serialize_field(".tag", "folder_name_reserved")?;
27030                s.end()
27031            }
27032            TeamFolderRenameError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27033        }
27034    }
27035}
27036
27037impl ::std::error::Error for TeamFolderRenameError {
27038    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
27039        match self {
27040            TeamFolderRenameError::AccessError(inner) => Some(inner),
27041            TeamFolderRenameError::StatusError(inner) => Some(inner),
27042            TeamFolderRenameError::TeamSharedDropboxError(inner) => Some(inner),
27043            _ => None,
27044        }
27045    }
27046}
27047
27048impl ::std::fmt::Display for TeamFolderRenameError {
27049    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27050        match self {
27051            TeamFolderRenameError::AccessError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27052            TeamFolderRenameError::StatusError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27053            TeamFolderRenameError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderRenameError: {}", inner),
27054            TeamFolderRenameError::InvalidFolderName => f.write_str("The provided folder name cannot be used."),
27055            TeamFolderRenameError::FolderNameAlreadyUsed => f.write_str("There is already a team folder with the same name."),
27056            TeamFolderRenameError::FolderNameReserved => f.write_str("The provided name cannot be used because it is reserved."),
27057            _ => write!(f, "{:?}", *self),
27058        }
27059    }
27060}
27061
27062// union extends BaseTeamFolderError
27063impl From<BaseTeamFolderError> for TeamFolderRenameError {
27064    fn from(parent: BaseTeamFolderError) -> Self {
27065        match parent {
27066            BaseTeamFolderError::AccessError(x) => TeamFolderRenameError::AccessError(x),
27067            BaseTeamFolderError::StatusError(x) => TeamFolderRenameError::StatusError(x),
27068            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderRenameError::TeamSharedDropboxError(x),
27069            BaseTeamFolderError::Other => TeamFolderRenameError::Other,
27070        }
27071    }
27072}
27073
27074#[derive(Debug, Clone, PartialEq, Eq)]
27075#[non_exhaustive] // variants may be added in the future
27076pub enum TeamFolderRestoreError {
27077    AccessError(TeamFolderAccessError),
27078    StatusError(TeamFolderInvalidStatusError),
27079    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
27080    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27081    /// typically indicates that this SDK version is out of date.
27082    Other,
27083}
27084
27085impl<'de> ::serde::de::Deserialize<'de> for TeamFolderRestoreError {
27086    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27087        // union deserializer
27088        use serde::de::{self, MapAccess, Visitor};
27089        struct EnumVisitor;
27090        impl<'de> Visitor<'de> for EnumVisitor {
27091            type Value = TeamFolderRestoreError;
27092            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27093                f.write_str("a TeamFolderRestoreError structure")
27094            }
27095            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27096                let tag: &str = match map.next_key()? {
27097                    Some(".tag") => map.next_value()?,
27098                    _ => return Err(de::Error::missing_field(".tag"))
27099                };
27100                let value = match tag {
27101                    "access_error" => {
27102                        match map.next_key()? {
27103                            Some("access_error") => TeamFolderRestoreError::AccessError(map.next_value()?),
27104                            None => return Err(de::Error::missing_field("access_error")),
27105                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27106                        }
27107                    }
27108                    "status_error" => {
27109                        match map.next_key()? {
27110                            Some("status_error") => TeamFolderRestoreError::StatusError(map.next_value()?),
27111                            None => return Err(de::Error::missing_field("status_error")),
27112                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27113                        }
27114                    }
27115                    "team_shared_dropbox_error" => {
27116                        match map.next_key()? {
27117                            Some("team_shared_dropbox_error") => TeamFolderRestoreError::TeamSharedDropboxError(map.next_value()?),
27118                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
27119                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27120                        }
27121                    }
27122                    _ => TeamFolderRestoreError::Other,
27123                };
27124                crate::eat_json_fields(&mut map)?;
27125                Ok(value)
27126            }
27127        }
27128        const VARIANTS: &[&str] = &["access_error",
27129                                    "status_error",
27130                                    "team_shared_dropbox_error",
27131                                    "other"];
27132        deserializer.deserialize_struct("TeamFolderRestoreError", VARIANTS, EnumVisitor)
27133    }
27134}
27135
27136impl ::serde::ser::Serialize for TeamFolderRestoreError {
27137    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27138        // union serializer
27139        use serde::ser::SerializeStruct;
27140        match self {
27141            TeamFolderRestoreError::AccessError(x) => {
27142                // union or polymporphic struct
27143                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
27144                s.serialize_field(".tag", "access_error")?;
27145                s.serialize_field("access_error", x)?;
27146                s.end()
27147            }
27148            TeamFolderRestoreError::StatusError(x) => {
27149                // union or polymporphic struct
27150                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
27151                s.serialize_field(".tag", "status_error")?;
27152                s.serialize_field("status_error", x)?;
27153                s.end()
27154            }
27155            TeamFolderRestoreError::TeamSharedDropboxError(x) => {
27156                // union or polymporphic struct
27157                let mut s = serializer.serialize_struct("TeamFolderRestoreError", 2)?;
27158                s.serialize_field(".tag", "team_shared_dropbox_error")?;
27159                s.serialize_field("team_shared_dropbox_error", x)?;
27160                s.end()
27161            }
27162            TeamFolderRestoreError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27163        }
27164    }
27165}
27166
27167impl ::std::error::Error for TeamFolderRestoreError {
27168    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
27169        match self {
27170            TeamFolderRestoreError::AccessError(inner) => Some(inner),
27171            TeamFolderRestoreError::StatusError(inner) => Some(inner),
27172            TeamFolderRestoreError::TeamSharedDropboxError(inner) => Some(inner),
27173            _ => None,
27174        }
27175    }
27176}
27177
27178impl ::std::fmt::Display for TeamFolderRestoreError {
27179    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27180        match self {
27181            TeamFolderRestoreError::AccessError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
27182            TeamFolderRestoreError::StatusError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
27183            TeamFolderRestoreError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderRestoreError: {}", inner),
27184            _ => write!(f, "{:?}", *self),
27185        }
27186    }
27187}
27188
27189// union extends BaseTeamFolderError
27190impl From<BaseTeamFolderError> for TeamFolderRestoreError {
27191    fn from(parent: BaseTeamFolderError) -> Self {
27192        match parent {
27193            BaseTeamFolderError::AccessError(x) => TeamFolderRestoreError::AccessError(x),
27194            BaseTeamFolderError::StatusError(x) => TeamFolderRestoreError::StatusError(x),
27195            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderRestoreError::TeamSharedDropboxError(x),
27196            BaseTeamFolderError::Other => TeamFolderRestoreError::Other,
27197        }
27198    }
27199}
27200#[derive(Debug, Clone, PartialEq, Eq)]
27201#[non_exhaustive] // variants may be added in the future
27202pub enum TeamFolderStatus {
27203    /// The team folder and sub-folders are available to all members.
27204    Active,
27205    /// The team folder is archived and is not accessible outside of the team folder manager.
27206    Archived,
27207    /// The team folder is in the process of being archived and is not accessible outside of the
27208    /// team folder manager.
27209    ArchiveInProgress,
27210    /// The team folder is unmounted and can be restored.
27211    Inactive,
27212    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27213    /// typically indicates that this SDK version is out of date.
27214    Other,
27215}
27216
27217impl<'de> ::serde::de::Deserialize<'de> for TeamFolderStatus {
27218    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27219        // union deserializer
27220        use serde::de::{self, MapAccess, Visitor};
27221        struct EnumVisitor;
27222        impl<'de> Visitor<'de> for EnumVisitor {
27223            type Value = TeamFolderStatus;
27224            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27225                f.write_str("a TeamFolderStatus structure")
27226            }
27227            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27228                let tag: &str = match map.next_key()? {
27229                    Some(".tag") => map.next_value()?,
27230                    _ => return Err(de::Error::missing_field(".tag"))
27231                };
27232                let value = match tag {
27233                    "active" => TeamFolderStatus::Active,
27234                    "archived" => TeamFolderStatus::Archived,
27235                    "archive_in_progress" => TeamFolderStatus::ArchiveInProgress,
27236                    "inactive" => TeamFolderStatus::Inactive,
27237                    _ => TeamFolderStatus::Other,
27238                };
27239                crate::eat_json_fields(&mut map)?;
27240                Ok(value)
27241            }
27242        }
27243        const VARIANTS: &[&str] = &["active",
27244                                    "archived",
27245                                    "archive_in_progress",
27246                                    "inactive",
27247                                    "other"];
27248        deserializer.deserialize_struct("TeamFolderStatus", VARIANTS, EnumVisitor)
27249    }
27250}
27251
27252impl ::serde::ser::Serialize for TeamFolderStatus {
27253    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27254        // union serializer
27255        use serde::ser::SerializeStruct;
27256        match self {
27257            TeamFolderStatus::Active => {
27258                // unit
27259                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
27260                s.serialize_field(".tag", "active")?;
27261                s.end()
27262            }
27263            TeamFolderStatus::Archived => {
27264                // unit
27265                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
27266                s.serialize_field(".tag", "archived")?;
27267                s.end()
27268            }
27269            TeamFolderStatus::ArchiveInProgress => {
27270                // unit
27271                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
27272                s.serialize_field(".tag", "archive_in_progress")?;
27273                s.end()
27274            }
27275            TeamFolderStatus::Inactive => {
27276                // unit
27277                let mut s = serializer.serialize_struct("TeamFolderStatus", 1)?;
27278                s.serialize_field(".tag", "inactive")?;
27279                s.end()
27280            }
27281            TeamFolderStatus::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27282        }
27283    }
27284}
27285
27286#[derive(Debug, Clone, PartialEq, Eq)]
27287#[non_exhaustive] // variants may be added in the future
27288pub enum TeamFolderTeamSharedDropboxError {
27289    /// This action is not allowed for a shared team root.
27290    Disallowed,
27291    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27292    /// typically indicates that this SDK version is out of date.
27293    Other,
27294}
27295
27296impl<'de> ::serde::de::Deserialize<'de> for TeamFolderTeamSharedDropboxError {
27297    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27298        // union deserializer
27299        use serde::de::{self, MapAccess, Visitor};
27300        struct EnumVisitor;
27301        impl<'de> Visitor<'de> for EnumVisitor {
27302            type Value = TeamFolderTeamSharedDropboxError;
27303            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27304                f.write_str("a TeamFolderTeamSharedDropboxError structure")
27305            }
27306            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27307                let tag: &str = match map.next_key()? {
27308                    Some(".tag") => map.next_value()?,
27309                    _ => return Err(de::Error::missing_field(".tag"))
27310                };
27311                let value = match tag {
27312                    "disallowed" => TeamFolderTeamSharedDropboxError::Disallowed,
27313                    _ => TeamFolderTeamSharedDropboxError::Other,
27314                };
27315                crate::eat_json_fields(&mut map)?;
27316                Ok(value)
27317            }
27318        }
27319        const VARIANTS: &[&str] = &["disallowed",
27320                                    "other"];
27321        deserializer.deserialize_struct("TeamFolderTeamSharedDropboxError", VARIANTS, EnumVisitor)
27322    }
27323}
27324
27325impl ::serde::ser::Serialize for TeamFolderTeamSharedDropboxError {
27326    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27327        // union serializer
27328        use serde::ser::SerializeStruct;
27329        match self {
27330            TeamFolderTeamSharedDropboxError::Disallowed => {
27331                // unit
27332                let mut s = serializer.serialize_struct("TeamFolderTeamSharedDropboxError", 1)?;
27333                s.serialize_field(".tag", "disallowed")?;
27334                s.end()
27335            }
27336            TeamFolderTeamSharedDropboxError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27337        }
27338    }
27339}
27340
27341impl ::std::error::Error for TeamFolderTeamSharedDropboxError {
27342}
27343
27344impl ::std::fmt::Display for TeamFolderTeamSharedDropboxError {
27345    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27346        match self {
27347            TeamFolderTeamSharedDropboxError::Disallowed => f.write_str("This action is not allowed for a shared team root."),
27348            _ => write!(f, "{:?}", *self),
27349        }
27350    }
27351}
27352
27353#[derive(Debug, Clone, PartialEq, Eq)]
27354#[non_exhaustive] // structs may have more fields added in the future.
27355pub struct TeamFolderUpdateSyncSettingsArg {
27356    /// The ID of the team folder.
27357    pub team_folder_id: crate::types::common::SharedFolderId,
27358    /// Sync setting to apply to the team folder itself. Only meaningful if the team folder is not a
27359    /// shared team root.
27360    pub sync_setting: Option<crate::types::files::SyncSettingArg>,
27361    /// Sync settings to apply to contents of this team folder.
27362    pub content_sync_settings: Option<Vec<crate::types::files::ContentSyncSettingArg>>,
27363}
27364
27365impl TeamFolderUpdateSyncSettingsArg {
27366    pub fn new(team_folder_id: crate::types::common::SharedFolderId) -> Self {
27367        TeamFolderUpdateSyncSettingsArg {
27368            team_folder_id,
27369            sync_setting: None,
27370            content_sync_settings: None,
27371        }
27372    }
27373
27374    pub fn with_sync_setting(mut self, value: crate::types::files::SyncSettingArg) -> Self {
27375        self.sync_setting = Some(value);
27376        self
27377    }
27378
27379    pub fn with_content_sync_settings(
27380        mut self,
27381        value: Vec<crate::types::files::ContentSyncSettingArg>,
27382    ) -> Self {
27383        self.content_sync_settings = Some(value);
27384        self
27385    }
27386}
27387
27388const TEAM_FOLDER_UPDATE_SYNC_SETTINGS_ARG_FIELDS: &[&str] = &["team_folder_id",
27389                                                               "sync_setting",
27390                                                               "content_sync_settings"];
27391impl TeamFolderUpdateSyncSettingsArg {
27392    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27393        map: V,
27394    ) -> Result<TeamFolderUpdateSyncSettingsArg, V::Error> {
27395        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27396    }
27397
27398    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27399        mut map: V,
27400        optional: bool,
27401    ) -> Result<Option<TeamFolderUpdateSyncSettingsArg>, V::Error> {
27402        let mut field_team_folder_id = None;
27403        let mut field_sync_setting = None;
27404        let mut field_content_sync_settings = None;
27405        let mut nothing = true;
27406        while let Some(key) = map.next_key::<&str>()? {
27407            nothing = false;
27408            match key {
27409                "team_folder_id" => {
27410                    if field_team_folder_id.is_some() {
27411                        return Err(::serde::de::Error::duplicate_field("team_folder_id"));
27412                    }
27413                    field_team_folder_id = Some(map.next_value()?);
27414                }
27415                "sync_setting" => {
27416                    if field_sync_setting.is_some() {
27417                        return Err(::serde::de::Error::duplicate_field("sync_setting"));
27418                    }
27419                    field_sync_setting = Some(map.next_value()?);
27420                }
27421                "content_sync_settings" => {
27422                    if field_content_sync_settings.is_some() {
27423                        return Err(::serde::de::Error::duplicate_field("content_sync_settings"));
27424                    }
27425                    field_content_sync_settings = Some(map.next_value()?);
27426                }
27427                _ => {
27428                    // unknown field allowed and ignored
27429                    map.next_value::<::serde_json::Value>()?;
27430                }
27431            }
27432        }
27433        if optional && nothing {
27434            return Ok(None);
27435        }
27436        let result = TeamFolderUpdateSyncSettingsArg {
27437            team_folder_id: field_team_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("team_folder_id"))?,
27438            sync_setting: field_sync_setting.and_then(Option::flatten),
27439            content_sync_settings: field_content_sync_settings.and_then(Option::flatten),
27440        };
27441        Ok(Some(result))
27442    }
27443
27444    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27445        &self,
27446        s: &mut S::SerializeStruct,
27447    ) -> Result<(), S::Error> {
27448        use serde::ser::SerializeStruct;
27449        s.serialize_field("team_folder_id", &self.team_folder_id)?;
27450        if let Some(val) = &self.sync_setting {
27451            s.serialize_field("sync_setting", val)?;
27452        }
27453        if let Some(val) = &self.content_sync_settings {
27454            s.serialize_field("content_sync_settings", val)?;
27455        }
27456        Ok(())
27457    }
27458}
27459
27460impl<'de> ::serde::de::Deserialize<'de> for TeamFolderUpdateSyncSettingsArg {
27461    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27462        // struct deserializer
27463        use serde::de::{MapAccess, Visitor};
27464        struct StructVisitor;
27465        impl<'de> Visitor<'de> for StructVisitor {
27466            type Value = TeamFolderUpdateSyncSettingsArg;
27467            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27468                f.write_str("a TeamFolderUpdateSyncSettingsArg struct")
27469            }
27470            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27471                TeamFolderUpdateSyncSettingsArg::internal_deserialize(map)
27472            }
27473        }
27474        deserializer.deserialize_struct("TeamFolderUpdateSyncSettingsArg", TEAM_FOLDER_UPDATE_SYNC_SETTINGS_ARG_FIELDS, StructVisitor)
27475    }
27476}
27477
27478impl ::serde::ser::Serialize for TeamFolderUpdateSyncSettingsArg {
27479    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27480        // struct serializer
27481        use serde::ser::SerializeStruct;
27482        let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsArg", 3)?;
27483        self.internal_serialize::<S>(&mut s)?;
27484        s.end()
27485    }
27486}
27487
27488// struct extends TeamFolderIdArg
27489impl From<TeamFolderUpdateSyncSettingsArg> for TeamFolderIdArg {
27490    fn from(subtype: TeamFolderUpdateSyncSettingsArg) -> Self {
27491        Self {
27492            team_folder_id: subtype.team_folder_id,
27493        }
27494    }
27495}
27496#[derive(Debug, Clone, PartialEq, Eq)]
27497#[non_exhaustive] // variants may be added in the future
27498pub enum TeamFolderUpdateSyncSettingsError {
27499    AccessError(TeamFolderAccessError),
27500    StatusError(TeamFolderInvalidStatusError),
27501    TeamSharedDropboxError(TeamFolderTeamSharedDropboxError),
27502    /// An error occurred setting the sync settings.
27503    SyncSettingsError(crate::types::files::SyncSettingsError),
27504    /// Catch-all used for unrecognized values returned from the server. Encountering this value
27505    /// typically indicates that this SDK version is out of date.
27506    Other,
27507}
27508
27509impl<'de> ::serde::de::Deserialize<'de> for TeamFolderUpdateSyncSettingsError {
27510    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27511        // union deserializer
27512        use serde::de::{self, MapAccess, Visitor};
27513        struct EnumVisitor;
27514        impl<'de> Visitor<'de> for EnumVisitor {
27515            type Value = TeamFolderUpdateSyncSettingsError;
27516            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27517                f.write_str("a TeamFolderUpdateSyncSettingsError structure")
27518            }
27519            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
27520                let tag: &str = match map.next_key()? {
27521                    Some(".tag") => map.next_value()?,
27522                    _ => return Err(de::Error::missing_field(".tag"))
27523                };
27524                let value = match tag {
27525                    "access_error" => {
27526                        match map.next_key()? {
27527                            Some("access_error") => TeamFolderUpdateSyncSettingsError::AccessError(map.next_value()?),
27528                            None => return Err(de::Error::missing_field("access_error")),
27529                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27530                        }
27531                    }
27532                    "status_error" => {
27533                        match map.next_key()? {
27534                            Some("status_error") => TeamFolderUpdateSyncSettingsError::StatusError(map.next_value()?),
27535                            None => return Err(de::Error::missing_field("status_error")),
27536                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27537                        }
27538                    }
27539                    "team_shared_dropbox_error" => {
27540                        match map.next_key()? {
27541                            Some("team_shared_dropbox_error") => TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(map.next_value()?),
27542                            None => return Err(de::Error::missing_field("team_shared_dropbox_error")),
27543                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27544                        }
27545                    }
27546                    "sync_settings_error" => {
27547                        match map.next_key()? {
27548                            Some("sync_settings_error") => TeamFolderUpdateSyncSettingsError::SyncSettingsError(map.next_value()?),
27549                            None => return Err(de::Error::missing_field("sync_settings_error")),
27550                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
27551                        }
27552                    }
27553                    _ => TeamFolderUpdateSyncSettingsError::Other,
27554                };
27555                crate::eat_json_fields(&mut map)?;
27556                Ok(value)
27557            }
27558        }
27559        const VARIANTS: &[&str] = &["access_error",
27560                                    "status_error",
27561                                    "team_shared_dropbox_error",
27562                                    "other",
27563                                    "sync_settings_error"];
27564        deserializer.deserialize_struct("TeamFolderUpdateSyncSettingsError", VARIANTS, EnumVisitor)
27565    }
27566}
27567
27568impl ::serde::ser::Serialize for TeamFolderUpdateSyncSettingsError {
27569    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27570        // union serializer
27571        use serde::ser::SerializeStruct;
27572        match self {
27573            TeamFolderUpdateSyncSettingsError::AccessError(x) => {
27574                // union or polymporphic struct
27575                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
27576                s.serialize_field(".tag", "access_error")?;
27577                s.serialize_field("access_error", x)?;
27578                s.end()
27579            }
27580            TeamFolderUpdateSyncSettingsError::StatusError(x) => {
27581                // union or polymporphic struct
27582                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
27583                s.serialize_field(".tag", "status_error")?;
27584                s.serialize_field("status_error", x)?;
27585                s.end()
27586            }
27587            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(x) => {
27588                // union or polymporphic struct
27589                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
27590                s.serialize_field(".tag", "team_shared_dropbox_error")?;
27591                s.serialize_field("team_shared_dropbox_error", x)?;
27592                s.end()
27593            }
27594            TeamFolderUpdateSyncSettingsError::SyncSettingsError(x) => {
27595                // union or polymporphic struct
27596                let mut s = serializer.serialize_struct("TeamFolderUpdateSyncSettingsError", 2)?;
27597                s.serialize_field(".tag", "sync_settings_error")?;
27598                s.serialize_field("sync_settings_error", x)?;
27599                s.end()
27600            }
27601            TeamFolderUpdateSyncSettingsError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
27602        }
27603    }
27604}
27605
27606impl ::std::error::Error for TeamFolderUpdateSyncSettingsError {
27607    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
27608        match self {
27609            TeamFolderUpdateSyncSettingsError::AccessError(inner) => Some(inner),
27610            TeamFolderUpdateSyncSettingsError::StatusError(inner) => Some(inner),
27611            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(inner) => Some(inner),
27612            TeamFolderUpdateSyncSettingsError::SyncSettingsError(inner) => Some(inner),
27613            _ => None,
27614        }
27615    }
27616}
27617
27618impl ::std::fmt::Display for TeamFolderUpdateSyncSettingsError {
27619    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27620        match self {
27621            TeamFolderUpdateSyncSettingsError::AccessError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
27622            TeamFolderUpdateSyncSettingsError::StatusError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
27623            TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(inner) => write!(f, "TeamFolderUpdateSyncSettingsError: {}", inner),
27624            TeamFolderUpdateSyncSettingsError::SyncSettingsError(inner) => write!(f, "An error occurred setting the sync settings: {}", inner),
27625            _ => write!(f, "{:?}", *self),
27626        }
27627    }
27628}
27629
27630// union extends BaseTeamFolderError
27631impl From<BaseTeamFolderError> for TeamFolderUpdateSyncSettingsError {
27632    fn from(parent: BaseTeamFolderError) -> Self {
27633        match parent {
27634            BaseTeamFolderError::AccessError(x) => TeamFolderUpdateSyncSettingsError::AccessError(x),
27635            BaseTeamFolderError::StatusError(x) => TeamFolderUpdateSyncSettingsError::StatusError(x),
27636            BaseTeamFolderError::TeamSharedDropboxError(x) => TeamFolderUpdateSyncSettingsError::TeamSharedDropboxError(x),
27637            BaseTeamFolderError::Other => TeamFolderUpdateSyncSettingsError::Other,
27638        }
27639    }
27640}
27641#[derive(Debug, Clone, PartialEq, Eq)]
27642#[non_exhaustive] // structs may have more fields added in the future.
27643pub struct TeamGetInfoResult {
27644    /// The name of the team.
27645    pub name: String,
27646    /// The ID of the team.
27647    pub team_id: String,
27648    /// The number of licenses available to the team.
27649    pub num_licensed_users: u32,
27650    /// The number of accounts that have been invited or are already active members of the team.
27651    pub num_provisioned_users: u32,
27652    pub policies: crate::types::team_policies::TeamMemberPolicies,
27653    /// The number of licenses used on the team.
27654    pub num_used_licenses: u32,
27655}
27656
27657impl TeamGetInfoResult {
27658    pub fn new(
27659        name: String,
27660        team_id: String,
27661        num_licensed_users: u32,
27662        num_provisioned_users: u32,
27663        policies: crate::types::team_policies::TeamMemberPolicies,
27664    ) -> Self {
27665        TeamGetInfoResult {
27666            name,
27667            team_id,
27668            num_licensed_users,
27669            num_provisioned_users,
27670            policies,
27671            num_used_licenses: 0,
27672        }
27673    }
27674
27675    pub fn with_num_used_licenses(mut self, value: u32) -> Self {
27676        self.num_used_licenses = value;
27677        self
27678    }
27679}
27680
27681const TEAM_GET_INFO_RESULT_FIELDS: &[&str] = &["name",
27682                                               "team_id",
27683                                               "num_licensed_users",
27684                                               "num_provisioned_users",
27685                                               "policies",
27686                                               "num_used_licenses"];
27687impl TeamGetInfoResult {
27688    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27689        map: V,
27690    ) -> Result<TeamGetInfoResult, V::Error> {
27691        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27692    }
27693
27694    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27695        mut map: V,
27696        optional: bool,
27697    ) -> Result<Option<TeamGetInfoResult>, V::Error> {
27698        let mut field_name = None;
27699        let mut field_team_id = None;
27700        let mut field_num_licensed_users = None;
27701        let mut field_num_provisioned_users = None;
27702        let mut field_policies = None;
27703        let mut field_num_used_licenses = None;
27704        let mut nothing = true;
27705        while let Some(key) = map.next_key::<&str>()? {
27706            nothing = false;
27707            match key {
27708                "name" => {
27709                    if field_name.is_some() {
27710                        return Err(::serde::de::Error::duplicate_field("name"));
27711                    }
27712                    field_name = Some(map.next_value()?);
27713                }
27714                "team_id" => {
27715                    if field_team_id.is_some() {
27716                        return Err(::serde::de::Error::duplicate_field("team_id"));
27717                    }
27718                    field_team_id = Some(map.next_value()?);
27719                }
27720                "num_licensed_users" => {
27721                    if field_num_licensed_users.is_some() {
27722                        return Err(::serde::de::Error::duplicate_field("num_licensed_users"));
27723                    }
27724                    field_num_licensed_users = Some(map.next_value()?);
27725                }
27726                "num_provisioned_users" => {
27727                    if field_num_provisioned_users.is_some() {
27728                        return Err(::serde::de::Error::duplicate_field("num_provisioned_users"));
27729                    }
27730                    field_num_provisioned_users = Some(map.next_value()?);
27731                }
27732                "policies" => {
27733                    if field_policies.is_some() {
27734                        return Err(::serde::de::Error::duplicate_field("policies"));
27735                    }
27736                    field_policies = Some(map.next_value()?);
27737                }
27738                "num_used_licenses" => {
27739                    if field_num_used_licenses.is_some() {
27740                        return Err(::serde::de::Error::duplicate_field("num_used_licenses"));
27741                    }
27742                    field_num_used_licenses = Some(map.next_value()?);
27743                }
27744                _ => {
27745                    // unknown field allowed and ignored
27746                    map.next_value::<::serde_json::Value>()?;
27747                }
27748            }
27749        }
27750        if optional && nothing {
27751            return Ok(None);
27752        }
27753        let result = TeamGetInfoResult {
27754            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
27755            team_id: field_team_id.ok_or_else(|| ::serde::de::Error::missing_field("team_id"))?,
27756            num_licensed_users: field_num_licensed_users.ok_or_else(|| ::serde::de::Error::missing_field("num_licensed_users"))?,
27757            num_provisioned_users: field_num_provisioned_users.ok_or_else(|| ::serde::de::Error::missing_field("num_provisioned_users"))?,
27758            policies: field_policies.ok_or_else(|| ::serde::de::Error::missing_field("policies"))?,
27759            num_used_licenses: field_num_used_licenses.unwrap_or(0),
27760        };
27761        Ok(Some(result))
27762    }
27763
27764    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27765        &self,
27766        s: &mut S::SerializeStruct,
27767    ) -> Result<(), S::Error> {
27768        use serde::ser::SerializeStruct;
27769        s.serialize_field("name", &self.name)?;
27770        s.serialize_field("team_id", &self.team_id)?;
27771        s.serialize_field("num_licensed_users", &self.num_licensed_users)?;
27772        s.serialize_field("num_provisioned_users", &self.num_provisioned_users)?;
27773        s.serialize_field("policies", &self.policies)?;
27774        if self.num_used_licenses != 0 {
27775            s.serialize_field("num_used_licenses", &self.num_used_licenses)?;
27776        }
27777        Ok(())
27778    }
27779}
27780
27781impl<'de> ::serde::de::Deserialize<'de> for TeamGetInfoResult {
27782    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27783        // struct deserializer
27784        use serde::de::{MapAccess, Visitor};
27785        struct StructVisitor;
27786        impl<'de> Visitor<'de> for StructVisitor {
27787            type Value = TeamGetInfoResult;
27788            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27789                f.write_str("a TeamGetInfoResult struct")
27790            }
27791            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27792                TeamGetInfoResult::internal_deserialize(map)
27793            }
27794        }
27795        deserializer.deserialize_struct("TeamGetInfoResult", TEAM_GET_INFO_RESULT_FIELDS, StructVisitor)
27796    }
27797}
27798
27799impl ::serde::ser::Serialize for TeamGetInfoResult {
27800    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27801        // struct serializer
27802        use serde::ser::SerializeStruct;
27803        let mut s = serializer.serialize_struct("TeamGetInfoResult", 6)?;
27804        self.internal_serialize::<S>(&mut s)?;
27805        s.end()
27806    }
27807}
27808
27809/// Information about a team member.
27810#[derive(Debug, Clone, PartialEq, Eq)]
27811#[non_exhaustive] // structs may have more fields added in the future.
27812pub struct TeamMemberInfo {
27813    /// Profile of a user as a member of a team.
27814    pub profile: TeamMemberProfile,
27815    /// The user's role in the team.
27816    pub role: AdminTier,
27817}
27818
27819impl TeamMemberInfo {
27820    pub fn new(profile: TeamMemberProfile, role: AdminTier) -> Self {
27821        TeamMemberInfo {
27822            profile,
27823            role,
27824        }
27825    }
27826}
27827
27828const TEAM_MEMBER_INFO_FIELDS: &[&str] = &["profile",
27829                                           "role"];
27830impl TeamMemberInfo {
27831    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27832        map: V,
27833    ) -> Result<TeamMemberInfo, V::Error> {
27834        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27835    }
27836
27837    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27838        mut map: V,
27839        optional: bool,
27840    ) -> Result<Option<TeamMemberInfo>, V::Error> {
27841        let mut field_profile = None;
27842        let mut field_role = None;
27843        let mut nothing = true;
27844        while let Some(key) = map.next_key::<&str>()? {
27845            nothing = false;
27846            match key {
27847                "profile" => {
27848                    if field_profile.is_some() {
27849                        return Err(::serde::de::Error::duplicate_field("profile"));
27850                    }
27851                    field_profile = Some(map.next_value()?);
27852                }
27853                "role" => {
27854                    if field_role.is_some() {
27855                        return Err(::serde::de::Error::duplicate_field("role"));
27856                    }
27857                    field_role = Some(map.next_value()?);
27858                }
27859                _ => {
27860                    // unknown field allowed and ignored
27861                    map.next_value::<::serde_json::Value>()?;
27862                }
27863            }
27864        }
27865        if optional && nothing {
27866            return Ok(None);
27867        }
27868        let result = TeamMemberInfo {
27869            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
27870            role: field_role.ok_or_else(|| ::serde::de::Error::missing_field("role"))?,
27871        };
27872        Ok(Some(result))
27873    }
27874
27875    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27876        &self,
27877        s: &mut S::SerializeStruct,
27878    ) -> Result<(), S::Error> {
27879        use serde::ser::SerializeStruct;
27880        s.serialize_field("profile", &self.profile)?;
27881        s.serialize_field("role", &self.role)?;
27882        Ok(())
27883    }
27884}
27885
27886impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfo {
27887    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
27888        // struct deserializer
27889        use serde::de::{MapAccess, Visitor};
27890        struct StructVisitor;
27891        impl<'de> Visitor<'de> for StructVisitor {
27892            type Value = TeamMemberInfo;
27893            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
27894                f.write_str("a TeamMemberInfo struct")
27895            }
27896            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
27897                TeamMemberInfo::internal_deserialize(map)
27898            }
27899        }
27900        deserializer.deserialize_struct("TeamMemberInfo", TEAM_MEMBER_INFO_FIELDS, StructVisitor)
27901    }
27902}
27903
27904impl ::serde::ser::Serialize for TeamMemberInfo {
27905    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
27906        // struct serializer
27907        use serde::ser::SerializeStruct;
27908        let mut s = serializer.serialize_struct("TeamMemberInfo", 2)?;
27909        self.internal_serialize::<S>(&mut s)?;
27910        s.end()
27911    }
27912}
27913
27914/// Information about a team member.
27915#[derive(Debug, Clone, PartialEq, Eq)]
27916#[non_exhaustive] // structs may have more fields added in the future.
27917pub struct TeamMemberInfoV2 {
27918    /// Profile of a user as a member of a team.
27919    pub profile: TeamMemberProfile,
27920    /// The user's roles in the team.
27921    pub roles: Option<Vec<TeamMemberRole>>,
27922}
27923
27924impl TeamMemberInfoV2 {
27925    pub fn new(profile: TeamMemberProfile) -> Self {
27926        TeamMemberInfoV2 {
27927            profile,
27928            roles: None,
27929        }
27930    }
27931
27932    pub fn with_roles(mut self, value: Vec<TeamMemberRole>) -> Self {
27933        self.roles = Some(value);
27934        self
27935    }
27936}
27937
27938const TEAM_MEMBER_INFO_V2_FIELDS: &[&str] = &["profile",
27939                                              "roles"];
27940impl TeamMemberInfoV2 {
27941    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
27942        map: V,
27943    ) -> Result<TeamMemberInfoV2, V::Error> {
27944        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
27945    }
27946
27947    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
27948        mut map: V,
27949        optional: bool,
27950    ) -> Result<Option<TeamMemberInfoV2>, V::Error> {
27951        let mut field_profile = None;
27952        let mut field_roles = None;
27953        let mut nothing = true;
27954        while let Some(key) = map.next_key::<&str>()? {
27955            nothing = false;
27956            match key {
27957                "profile" => {
27958                    if field_profile.is_some() {
27959                        return Err(::serde::de::Error::duplicate_field("profile"));
27960                    }
27961                    field_profile = Some(map.next_value()?);
27962                }
27963                "roles" => {
27964                    if field_roles.is_some() {
27965                        return Err(::serde::de::Error::duplicate_field("roles"));
27966                    }
27967                    field_roles = Some(map.next_value()?);
27968                }
27969                _ => {
27970                    // unknown field allowed and ignored
27971                    map.next_value::<::serde_json::Value>()?;
27972                }
27973            }
27974        }
27975        if optional && nothing {
27976            return Ok(None);
27977        }
27978        let result = TeamMemberInfoV2 {
27979            profile: field_profile.ok_or_else(|| ::serde::de::Error::missing_field("profile"))?,
27980            roles: field_roles.and_then(Option::flatten),
27981        };
27982        Ok(Some(result))
27983    }
27984
27985    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
27986        &self,
27987        s: &mut S::SerializeStruct,
27988    ) -> Result<(), S::Error> {
27989        use serde::ser::SerializeStruct;
27990        s.serialize_field("profile", &self.profile)?;
27991        if let Some(val) = &self.roles {
27992            s.serialize_field("roles", val)?;
27993        }
27994        Ok(())
27995    }
27996}
27997
27998impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfoV2 {
27999    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28000        // struct deserializer
28001        use serde::de::{MapAccess, Visitor};
28002        struct StructVisitor;
28003        impl<'de> Visitor<'de> for StructVisitor {
28004            type Value = TeamMemberInfoV2;
28005            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28006                f.write_str("a TeamMemberInfoV2 struct")
28007            }
28008            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28009                TeamMemberInfoV2::internal_deserialize(map)
28010            }
28011        }
28012        deserializer.deserialize_struct("TeamMemberInfoV2", TEAM_MEMBER_INFO_V2_FIELDS, StructVisitor)
28013    }
28014}
28015
28016impl ::serde::ser::Serialize for TeamMemberInfoV2 {
28017    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28018        // struct serializer
28019        use serde::ser::SerializeStruct;
28020        let mut s = serializer.serialize_struct("TeamMemberInfoV2", 2)?;
28021        self.internal_serialize::<S>(&mut s)?;
28022        s.end()
28023    }
28024}
28025
28026/// Information about a team member, after the change, like at
28027/// [`members_set_profile_v2()`](crate::team::members_set_profile_v2).
28028#[derive(Debug, Clone, PartialEq, Eq)]
28029#[non_exhaustive] // structs may have more fields added in the future.
28030pub struct TeamMemberInfoV2Result {
28031    /// Member info, after the change.
28032    pub member_info: TeamMemberInfoV2,
28033}
28034
28035impl TeamMemberInfoV2Result {
28036    pub fn new(member_info: TeamMemberInfoV2) -> Self {
28037        TeamMemberInfoV2Result {
28038            member_info,
28039        }
28040    }
28041}
28042
28043const TEAM_MEMBER_INFO_V2_RESULT_FIELDS: &[&str] = &["member_info"];
28044impl TeamMemberInfoV2Result {
28045    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28046        map: V,
28047    ) -> Result<TeamMemberInfoV2Result, V::Error> {
28048        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28049    }
28050
28051    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28052        mut map: V,
28053        optional: bool,
28054    ) -> Result<Option<TeamMemberInfoV2Result>, V::Error> {
28055        let mut field_member_info = None;
28056        let mut nothing = true;
28057        while let Some(key) = map.next_key::<&str>()? {
28058            nothing = false;
28059            match key {
28060                "member_info" => {
28061                    if field_member_info.is_some() {
28062                        return Err(::serde::de::Error::duplicate_field("member_info"));
28063                    }
28064                    field_member_info = Some(map.next_value()?);
28065                }
28066                _ => {
28067                    // unknown field allowed and ignored
28068                    map.next_value::<::serde_json::Value>()?;
28069                }
28070            }
28071        }
28072        if optional && nothing {
28073            return Ok(None);
28074        }
28075        let result = TeamMemberInfoV2Result {
28076            member_info: field_member_info.ok_or_else(|| ::serde::de::Error::missing_field("member_info"))?,
28077        };
28078        Ok(Some(result))
28079    }
28080
28081    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28082        &self,
28083        s: &mut S::SerializeStruct,
28084    ) -> Result<(), S::Error> {
28085        use serde::ser::SerializeStruct;
28086        s.serialize_field("member_info", &self.member_info)?;
28087        Ok(())
28088    }
28089}
28090
28091impl<'de> ::serde::de::Deserialize<'de> for TeamMemberInfoV2Result {
28092    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28093        // struct deserializer
28094        use serde::de::{MapAccess, Visitor};
28095        struct StructVisitor;
28096        impl<'de> Visitor<'de> for StructVisitor {
28097            type Value = TeamMemberInfoV2Result;
28098            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28099                f.write_str("a TeamMemberInfoV2Result struct")
28100            }
28101            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28102                TeamMemberInfoV2Result::internal_deserialize(map)
28103            }
28104        }
28105        deserializer.deserialize_struct("TeamMemberInfoV2Result", TEAM_MEMBER_INFO_V2_RESULT_FIELDS, StructVisitor)
28106    }
28107}
28108
28109impl ::serde::ser::Serialize for TeamMemberInfoV2Result {
28110    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28111        // struct serializer
28112        use serde::ser::SerializeStruct;
28113        let mut s = serializer.serialize_struct("TeamMemberInfoV2Result", 1)?;
28114        self.internal_serialize::<S>(&mut s)?;
28115        s.end()
28116    }
28117}
28118
28119/// Profile of a user as a member of a team.
28120#[derive(Debug, Clone, PartialEq, Eq)]
28121#[non_exhaustive] // structs may have more fields added in the future.
28122pub struct TeamMemberProfile {
28123    /// ID of user as a member of a team.
28124    pub team_member_id: crate::types::team_common::TeamMemberId,
28125    /// Email address of user.
28126    pub email: String,
28127    /// Is true if the user's email is verified to be owned by the user.
28128    pub email_verified: bool,
28129    /// The user's status as a member of a specific team.
28130    pub status: TeamMemberStatus,
28131    /// Representations for a person's name.
28132    pub name: crate::types::users::Name,
28133    /// The user's membership type: full (normal team member) vs limited (does not use a license; no
28134    /// access to the team's shared quota).
28135    pub membership_type: TeamMembershipType,
28136    /// List of group IDs of groups that the user belongs to.
28137    pub groups: Vec<crate::types::team_common::GroupId>,
28138    /// The namespace id of the user's member folder.
28139    pub member_folder_id: crate::types::common::NamespaceId,
28140    /// The namespace id of the user's root folder.
28141    pub root_folder_id: crate::types::common::NamespaceId,
28142    /// External ID that a team can attach to the user. An application using the API may find it
28143    /// easier to use their own IDs instead of Dropbox IDs like account_id or team_member_id.
28144    pub external_id: Option<String>,
28145    /// A user's account identifier.
28146    pub account_id: Option<crate::types::users_common::AccountId>,
28147    /// Secondary emails of a user.
28148    pub secondary_emails: Option<Vec<crate::types::secondary_emails::SecondaryEmail>>,
28149    /// The date and time the user was invited to the team (contains value only when the member's
28150    /// status matches [`TeamMemberStatus::Invited`]).
28151    pub invited_on: Option<crate::types::common::DropboxTimestamp>,
28152    /// The date and time the user joined as a member of a specific team.
28153    pub joined_on: Option<crate::types::common::DropboxTimestamp>,
28154    /// The date and time the user was suspended from the team (contains value only when the
28155    /// member's status matches [`TeamMemberStatus::Suspended`]).
28156    pub suspended_on: Option<crate::types::common::DropboxTimestamp>,
28157    /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used
28158    /// for SAML authentication.
28159    pub persistent_id: Option<String>,
28160    /// Whether the user is a directory restricted user.
28161    pub is_directory_restricted: Option<bool>,
28162    /// URL for the photo representing the user, if one is set.
28163    pub profile_photo_url: Option<String>,
28164}
28165
28166impl TeamMemberProfile {
28167    pub fn new(
28168        team_member_id: crate::types::team_common::TeamMemberId,
28169        email: String,
28170        email_verified: bool,
28171        status: TeamMemberStatus,
28172        name: crate::types::users::Name,
28173        membership_type: TeamMembershipType,
28174        groups: Vec<crate::types::team_common::GroupId>,
28175        member_folder_id: crate::types::common::NamespaceId,
28176        root_folder_id: crate::types::common::NamespaceId,
28177    ) -> Self {
28178        TeamMemberProfile {
28179            team_member_id,
28180            email,
28181            email_verified,
28182            status,
28183            name,
28184            membership_type,
28185            groups,
28186            member_folder_id,
28187            root_folder_id,
28188            external_id: None,
28189            account_id: None,
28190            secondary_emails: None,
28191            invited_on: None,
28192            joined_on: None,
28193            suspended_on: None,
28194            persistent_id: None,
28195            is_directory_restricted: None,
28196            profile_photo_url: None,
28197        }
28198    }
28199
28200    pub fn with_external_id(mut self, value: String) -> Self {
28201        self.external_id = Some(value);
28202        self
28203    }
28204
28205    pub fn with_account_id(mut self, value: crate::types::users_common::AccountId) -> Self {
28206        self.account_id = Some(value);
28207        self
28208    }
28209
28210    pub fn with_secondary_emails(
28211        mut self,
28212        value: Vec<crate::types::secondary_emails::SecondaryEmail>,
28213    ) -> Self {
28214        self.secondary_emails = Some(value);
28215        self
28216    }
28217
28218    pub fn with_invited_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
28219        self.invited_on = Some(value);
28220        self
28221    }
28222
28223    pub fn with_joined_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
28224        self.joined_on = Some(value);
28225        self
28226    }
28227
28228    pub fn with_suspended_on(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
28229        self.suspended_on = Some(value);
28230        self
28231    }
28232
28233    pub fn with_persistent_id(mut self, value: String) -> Self {
28234        self.persistent_id = Some(value);
28235        self
28236    }
28237
28238    pub fn with_is_directory_restricted(mut self, value: bool) -> Self {
28239        self.is_directory_restricted = Some(value);
28240        self
28241    }
28242
28243    pub fn with_profile_photo_url(mut self, value: String) -> Self {
28244        self.profile_photo_url = Some(value);
28245        self
28246    }
28247}
28248
28249const TEAM_MEMBER_PROFILE_FIELDS: &[&str] = &["team_member_id",
28250                                              "email",
28251                                              "email_verified",
28252                                              "status",
28253                                              "name",
28254                                              "membership_type",
28255                                              "groups",
28256                                              "member_folder_id",
28257                                              "root_folder_id",
28258                                              "external_id",
28259                                              "account_id",
28260                                              "secondary_emails",
28261                                              "invited_on",
28262                                              "joined_on",
28263                                              "suspended_on",
28264                                              "persistent_id",
28265                                              "is_directory_restricted",
28266                                              "profile_photo_url"];
28267impl TeamMemberProfile {
28268    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28269        map: V,
28270    ) -> Result<TeamMemberProfile, V::Error> {
28271        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28272    }
28273
28274    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28275        mut map: V,
28276        optional: bool,
28277    ) -> Result<Option<TeamMemberProfile>, V::Error> {
28278        let mut field_team_member_id = None;
28279        let mut field_email = None;
28280        let mut field_email_verified = None;
28281        let mut field_status = None;
28282        let mut field_name = None;
28283        let mut field_membership_type = None;
28284        let mut field_groups = None;
28285        let mut field_member_folder_id = None;
28286        let mut field_root_folder_id = None;
28287        let mut field_external_id = None;
28288        let mut field_account_id = None;
28289        let mut field_secondary_emails = None;
28290        let mut field_invited_on = None;
28291        let mut field_joined_on = None;
28292        let mut field_suspended_on = None;
28293        let mut field_persistent_id = None;
28294        let mut field_is_directory_restricted = None;
28295        let mut field_profile_photo_url = None;
28296        let mut nothing = true;
28297        while let Some(key) = map.next_key::<&str>()? {
28298            nothing = false;
28299            match key {
28300                "team_member_id" => {
28301                    if field_team_member_id.is_some() {
28302                        return Err(::serde::de::Error::duplicate_field("team_member_id"));
28303                    }
28304                    field_team_member_id = Some(map.next_value()?);
28305                }
28306                "email" => {
28307                    if field_email.is_some() {
28308                        return Err(::serde::de::Error::duplicate_field("email"));
28309                    }
28310                    field_email = Some(map.next_value()?);
28311                }
28312                "email_verified" => {
28313                    if field_email_verified.is_some() {
28314                        return Err(::serde::de::Error::duplicate_field("email_verified"));
28315                    }
28316                    field_email_verified = Some(map.next_value()?);
28317                }
28318                "status" => {
28319                    if field_status.is_some() {
28320                        return Err(::serde::de::Error::duplicate_field("status"));
28321                    }
28322                    field_status = Some(map.next_value()?);
28323                }
28324                "name" => {
28325                    if field_name.is_some() {
28326                        return Err(::serde::de::Error::duplicate_field("name"));
28327                    }
28328                    field_name = Some(map.next_value()?);
28329                }
28330                "membership_type" => {
28331                    if field_membership_type.is_some() {
28332                        return Err(::serde::de::Error::duplicate_field("membership_type"));
28333                    }
28334                    field_membership_type = Some(map.next_value()?);
28335                }
28336                "groups" => {
28337                    if field_groups.is_some() {
28338                        return Err(::serde::de::Error::duplicate_field("groups"));
28339                    }
28340                    field_groups = Some(map.next_value()?);
28341                }
28342                "member_folder_id" => {
28343                    if field_member_folder_id.is_some() {
28344                        return Err(::serde::de::Error::duplicate_field("member_folder_id"));
28345                    }
28346                    field_member_folder_id = Some(map.next_value()?);
28347                }
28348                "root_folder_id" => {
28349                    if field_root_folder_id.is_some() {
28350                        return Err(::serde::de::Error::duplicate_field("root_folder_id"));
28351                    }
28352                    field_root_folder_id = Some(map.next_value()?);
28353                }
28354                "external_id" => {
28355                    if field_external_id.is_some() {
28356                        return Err(::serde::de::Error::duplicate_field("external_id"));
28357                    }
28358                    field_external_id = Some(map.next_value()?);
28359                }
28360                "account_id" => {
28361                    if field_account_id.is_some() {
28362                        return Err(::serde::de::Error::duplicate_field("account_id"));
28363                    }
28364                    field_account_id = Some(map.next_value()?);
28365                }
28366                "secondary_emails" => {
28367                    if field_secondary_emails.is_some() {
28368                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
28369                    }
28370                    field_secondary_emails = Some(map.next_value()?);
28371                }
28372                "invited_on" => {
28373                    if field_invited_on.is_some() {
28374                        return Err(::serde::de::Error::duplicate_field("invited_on"));
28375                    }
28376                    field_invited_on = Some(map.next_value()?);
28377                }
28378                "joined_on" => {
28379                    if field_joined_on.is_some() {
28380                        return Err(::serde::de::Error::duplicate_field("joined_on"));
28381                    }
28382                    field_joined_on = Some(map.next_value()?);
28383                }
28384                "suspended_on" => {
28385                    if field_suspended_on.is_some() {
28386                        return Err(::serde::de::Error::duplicate_field("suspended_on"));
28387                    }
28388                    field_suspended_on = Some(map.next_value()?);
28389                }
28390                "persistent_id" => {
28391                    if field_persistent_id.is_some() {
28392                        return Err(::serde::de::Error::duplicate_field("persistent_id"));
28393                    }
28394                    field_persistent_id = Some(map.next_value()?);
28395                }
28396                "is_directory_restricted" => {
28397                    if field_is_directory_restricted.is_some() {
28398                        return Err(::serde::de::Error::duplicate_field("is_directory_restricted"));
28399                    }
28400                    field_is_directory_restricted = Some(map.next_value()?);
28401                }
28402                "profile_photo_url" => {
28403                    if field_profile_photo_url.is_some() {
28404                        return Err(::serde::de::Error::duplicate_field("profile_photo_url"));
28405                    }
28406                    field_profile_photo_url = Some(map.next_value()?);
28407                }
28408                _ => {
28409                    // unknown field allowed and ignored
28410                    map.next_value::<::serde_json::Value>()?;
28411                }
28412            }
28413        }
28414        if optional && nothing {
28415            return Ok(None);
28416        }
28417        let result = TeamMemberProfile {
28418            team_member_id: field_team_member_id.ok_or_else(|| ::serde::de::Error::missing_field("team_member_id"))?,
28419            email: field_email.ok_or_else(|| ::serde::de::Error::missing_field("email"))?,
28420            email_verified: field_email_verified.ok_or_else(|| ::serde::de::Error::missing_field("email_verified"))?,
28421            status: field_status.ok_or_else(|| ::serde::de::Error::missing_field("status"))?,
28422            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
28423            membership_type: field_membership_type.ok_or_else(|| ::serde::de::Error::missing_field("membership_type"))?,
28424            groups: field_groups.ok_or_else(|| ::serde::de::Error::missing_field("groups"))?,
28425            member_folder_id: field_member_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("member_folder_id"))?,
28426            root_folder_id: field_root_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("root_folder_id"))?,
28427            external_id: field_external_id.and_then(Option::flatten),
28428            account_id: field_account_id.and_then(Option::flatten),
28429            secondary_emails: field_secondary_emails.and_then(Option::flatten),
28430            invited_on: field_invited_on.and_then(Option::flatten),
28431            joined_on: field_joined_on.and_then(Option::flatten),
28432            suspended_on: field_suspended_on.and_then(Option::flatten),
28433            persistent_id: field_persistent_id.and_then(Option::flatten),
28434            is_directory_restricted: field_is_directory_restricted.and_then(Option::flatten),
28435            profile_photo_url: field_profile_photo_url.and_then(Option::flatten),
28436        };
28437        Ok(Some(result))
28438    }
28439
28440    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28441        &self,
28442        s: &mut S::SerializeStruct,
28443    ) -> Result<(), S::Error> {
28444        use serde::ser::SerializeStruct;
28445        s.serialize_field("team_member_id", &self.team_member_id)?;
28446        s.serialize_field("email", &self.email)?;
28447        s.serialize_field("email_verified", &self.email_verified)?;
28448        s.serialize_field("status", &self.status)?;
28449        s.serialize_field("name", &self.name)?;
28450        s.serialize_field("membership_type", &self.membership_type)?;
28451        s.serialize_field("groups", &self.groups)?;
28452        s.serialize_field("member_folder_id", &self.member_folder_id)?;
28453        s.serialize_field("root_folder_id", &self.root_folder_id)?;
28454        if let Some(val) = &self.external_id {
28455            s.serialize_field("external_id", val)?;
28456        }
28457        if let Some(val) = &self.account_id {
28458            s.serialize_field("account_id", val)?;
28459        }
28460        if let Some(val) = &self.secondary_emails {
28461            s.serialize_field("secondary_emails", val)?;
28462        }
28463        if let Some(val) = &self.invited_on {
28464            s.serialize_field("invited_on", val)?;
28465        }
28466        if let Some(val) = &self.joined_on {
28467            s.serialize_field("joined_on", val)?;
28468        }
28469        if let Some(val) = &self.suspended_on {
28470            s.serialize_field("suspended_on", val)?;
28471        }
28472        if let Some(val) = &self.persistent_id {
28473            s.serialize_field("persistent_id", val)?;
28474        }
28475        if let Some(val) = &self.is_directory_restricted {
28476            s.serialize_field("is_directory_restricted", val)?;
28477        }
28478        if let Some(val) = &self.profile_photo_url {
28479            s.serialize_field("profile_photo_url", val)?;
28480        }
28481        Ok(())
28482    }
28483}
28484
28485impl<'de> ::serde::de::Deserialize<'de> for TeamMemberProfile {
28486    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28487        // struct deserializer
28488        use serde::de::{MapAccess, Visitor};
28489        struct StructVisitor;
28490        impl<'de> Visitor<'de> for StructVisitor {
28491            type Value = TeamMemberProfile;
28492            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28493                f.write_str("a TeamMemberProfile struct")
28494            }
28495            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28496                TeamMemberProfile::internal_deserialize(map)
28497            }
28498        }
28499        deserializer.deserialize_struct("TeamMemberProfile", TEAM_MEMBER_PROFILE_FIELDS, StructVisitor)
28500    }
28501}
28502
28503impl ::serde::ser::Serialize for TeamMemberProfile {
28504    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28505        // struct serializer
28506        use serde::ser::SerializeStruct;
28507        let mut s = serializer.serialize_struct("TeamMemberProfile", 18)?;
28508        self.internal_serialize::<S>(&mut s)?;
28509        s.end()
28510    }
28511}
28512
28513// struct extends MemberProfile
28514impl From<TeamMemberProfile> for MemberProfile {
28515    fn from(subtype: TeamMemberProfile) -> Self {
28516        Self {
28517            team_member_id: subtype.team_member_id,
28518            email: subtype.email,
28519            email_verified: subtype.email_verified,
28520            status: subtype.status,
28521            name: subtype.name,
28522            membership_type: subtype.membership_type,
28523            external_id: subtype.external_id,
28524            account_id: subtype.account_id,
28525            secondary_emails: subtype.secondary_emails,
28526            invited_on: subtype.invited_on,
28527            joined_on: subtype.joined_on,
28528            suspended_on: subtype.suspended_on,
28529            persistent_id: subtype.persistent_id,
28530            is_directory_restricted: subtype.is_directory_restricted,
28531            profile_photo_url: subtype.profile_photo_url,
28532        }
28533    }
28534}
28535/// A role which can be attached to a team member. This replaces AdminTier; each AdminTier
28536/// corresponds to a new TeamMemberRole with a matching name.
28537#[derive(Debug, Clone, PartialEq, Eq)]
28538#[non_exhaustive] // structs may have more fields added in the future.
28539pub struct TeamMemberRole {
28540    /// A string containing encoded role ID. For roles defined by Dropbox, this is the same across
28541    /// all teams.
28542    pub role_id: TeamMemberRoleId,
28543    /// The role display name.
28544    pub name: String,
28545    /// Role description. Describes which permissions come with this role.
28546    pub description: String,
28547}
28548
28549impl TeamMemberRole {
28550    pub fn new(role_id: TeamMemberRoleId, name: String, description: String) -> Self {
28551        TeamMemberRole {
28552            role_id,
28553            name,
28554            description,
28555        }
28556    }
28557}
28558
28559const TEAM_MEMBER_ROLE_FIELDS: &[&str] = &["role_id",
28560                                           "name",
28561                                           "description"];
28562impl TeamMemberRole {
28563    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28564        map: V,
28565    ) -> Result<TeamMemberRole, V::Error> {
28566        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28567    }
28568
28569    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28570        mut map: V,
28571        optional: bool,
28572    ) -> Result<Option<TeamMemberRole>, V::Error> {
28573        let mut field_role_id = None;
28574        let mut field_name = None;
28575        let mut field_description = None;
28576        let mut nothing = true;
28577        while let Some(key) = map.next_key::<&str>()? {
28578            nothing = false;
28579            match key {
28580                "role_id" => {
28581                    if field_role_id.is_some() {
28582                        return Err(::serde::de::Error::duplicate_field("role_id"));
28583                    }
28584                    field_role_id = Some(map.next_value()?);
28585                }
28586                "name" => {
28587                    if field_name.is_some() {
28588                        return Err(::serde::de::Error::duplicate_field("name"));
28589                    }
28590                    field_name = Some(map.next_value()?);
28591                }
28592                "description" => {
28593                    if field_description.is_some() {
28594                        return Err(::serde::de::Error::duplicate_field("description"));
28595                    }
28596                    field_description = Some(map.next_value()?);
28597                }
28598                _ => {
28599                    // unknown field allowed and ignored
28600                    map.next_value::<::serde_json::Value>()?;
28601                }
28602            }
28603        }
28604        if optional && nothing {
28605            return Ok(None);
28606        }
28607        let result = TeamMemberRole {
28608            role_id: field_role_id.ok_or_else(|| ::serde::de::Error::missing_field("role_id"))?,
28609            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
28610            description: field_description.ok_or_else(|| ::serde::de::Error::missing_field("description"))?,
28611        };
28612        Ok(Some(result))
28613    }
28614
28615    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28616        &self,
28617        s: &mut S::SerializeStruct,
28618    ) -> Result<(), S::Error> {
28619        use serde::ser::SerializeStruct;
28620        s.serialize_field("role_id", &self.role_id)?;
28621        s.serialize_field("name", &self.name)?;
28622        s.serialize_field("description", &self.description)?;
28623        Ok(())
28624    }
28625}
28626
28627impl<'de> ::serde::de::Deserialize<'de> for TeamMemberRole {
28628    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28629        // struct deserializer
28630        use serde::de::{MapAccess, Visitor};
28631        struct StructVisitor;
28632        impl<'de> Visitor<'de> for StructVisitor {
28633            type Value = TeamMemberRole;
28634            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28635                f.write_str("a TeamMemberRole struct")
28636            }
28637            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28638                TeamMemberRole::internal_deserialize(map)
28639            }
28640        }
28641        deserializer.deserialize_struct("TeamMemberRole", TEAM_MEMBER_ROLE_FIELDS, StructVisitor)
28642    }
28643}
28644
28645impl ::serde::ser::Serialize for TeamMemberRole {
28646    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28647        // struct serializer
28648        use serde::ser::SerializeStruct;
28649        let mut s = serializer.serialize_struct("TeamMemberRole", 3)?;
28650        self.internal_serialize::<S>(&mut s)?;
28651        s.end()
28652    }
28653}
28654
28655/// The user's status as a member of a specific team.
28656#[derive(Debug, Clone, PartialEq, Eq)]
28657pub enum TeamMemberStatus {
28658    /// User has successfully joined the team.
28659    Active,
28660    /// User has been invited to a team, but has not joined the team yet.
28661    Invited,
28662    /// User is no longer a member of the team, but the account can be un-suspended, re-establishing
28663    /// the user as a team member.
28664    Suspended,
28665    /// User is no longer a member of the team. Removed users are only listed when include_removed
28666    /// is true in members/list.
28667    Removed(RemovedStatus),
28668}
28669
28670impl<'de> ::serde::de::Deserialize<'de> for TeamMemberStatus {
28671    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28672        // union deserializer
28673        use serde::de::{self, MapAccess, Visitor};
28674        struct EnumVisitor;
28675        impl<'de> Visitor<'de> for EnumVisitor {
28676            type Value = TeamMemberStatus;
28677            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28678                f.write_str("a TeamMemberStatus structure")
28679            }
28680            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28681                let tag: &str = match map.next_key()? {
28682                    Some(".tag") => map.next_value()?,
28683                    _ => return Err(de::Error::missing_field(".tag"))
28684                };
28685                let value = match tag {
28686                    "active" => TeamMemberStatus::Active,
28687                    "invited" => TeamMemberStatus::Invited,
28688                    "suspended" => TeamMemberStatus::Suspended,
28689                    "removed" => TeamMemberStatus::Removed(RemovedStatus::internal_deserialize(&mut map)?),
28690                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
28691                };
28692                crate::eat_json_fields(&mut map)?;
28693                Ok(value)
28694            }
28695        }
28696        const VARIANTS: &[&str] = &["active",
28697                                    "invited",
28698                                    "suspended",
28699                                    "removed"];
28700        deserializer.deserialize_struct("TeamMemberStatus", VARIANTS, EnumVisitor)
28701    }
28702}
28703
28704impl ::serde::ser::Serialize for TeamMemberStatus {
28705    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28706        // union serializer
28707        use serde::ser::SerializeStruct;
28708        match self {
28709            TeamMemberStatus::Active => {
28710                // unit
28711                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
28712                s.serialize_field(".tag", "active")?;
28713                s.end()
28714            }
28715            TeamMemberStatus::Invited => {
28716                // unit
28717                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
28718                s.serialize_field(".tag", "invited")?;
28719                s.end()
28720            }
28721            TeamMemberStatus::Suspended => {
28722                // unit
28723                let mut s = serializer.serialize_struct("TeamMemberStatus", 1)?;
28724                s.serialize_field(".tag", "suspended")?;
28725                s.end()
28726            }
28727            TeamMemberStatus::Removed(x) => {
28728                // struct
28729                let mut s = serializer.serialize_struct("TeamMemberStatus", 3)?;
28730                s.serialize_field(".tag", "removed")?;
28731                x.internal_serialize::<S>(&mut s)?;
28732                s.end()
28733            }
28734        }
28735    }
28736}
28737
28738#[derive(Debug, Clone, PartialEq, Eq)]
28739pub enum TeamMembershipType {
28740    /// User uses a license and has full access to team resources like the shared quota.
28741    Full,
28742    /// User does not have access to the shared quota and team admins have restricted administrative
28743    /// control.
28744    Limited,
28745}
28746
28747impl<'de> ::serde::de::Deserialize<'de> for TeamMembershipType {
28748    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28749        // union deserializer
28750        use serde::de::{self, MapAccess, Visitor};
28751        struct EnumVisitor;
28752        impl<'de> Visitor<'de> for EnumVisitor {
28753            type Value = TeamMembershipType;
28754            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28755                f.write_str("a TeamMembershipType structure")
28756            }
28757            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
28758                let tag: &str = match map.next_key()? {
28759                    Some(".tag") => map.next_value()?,
28760                    _ => return Err(de::Error::missing_field(".tag"))
28761                };
28762                let value = match tag {
28763                    "full" => TeamMembershipType::Full,
28764                    "limited" => TeamMembershipType::Limited,
28765                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
28766                };
28767                crate::eat_json_fields(&mut map)?;
28768                Ok(value)
28769            }
28770        }
28771        const VARIANTS: &[&str] = &["full",
28772                                    "limited"];
28773        deserializer.deserialize_struct("TeamMembershipType", VARIANTS, EnumVisitor)
28774    }
28775}
28776
28777impl ::serde::ser::Serialize for TeamMembershipType {
28778    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28779        // union serializer
28780        use serde::ser::SerializeStruct;
28781        match self {
28782            TeamMembershipType::Full => {
28783                // unit
28784                let mut s = serializer.serialize_struct("TeamMembershipType", 1)?;
28785                s.serialize_field(".tag", "full")?;
28786                s.end()
28787            }
28788            TeamMembershipType::Limited => {
28789                // unit
28790                let mut s = serializer.serialize_struct("TeamMembershipType", 1)?;
28791                s.serialize_field(".tag", "limited")?;
28792                s.end()
28793            }
28794        }
28795    }
28796}
28797
28798#[derive(Debug, Clone, PartialEq, Eq)]
28799#[non_exhaustive] // structs may have more fields added in the future.
28800pub struct TeamNamespacesListArg {
28801    /// Specifying a value here has no effect.
28802    pub limit: u32,
28803}
28804
28805impl Default for TeamNamespacesListArg {
28806    fn default() -> Self {
28807        TeamNamespacesListArg {
28808            limit: 1000,
28809        }
28810    }
28811}
28812
28813impl TeamNamespacesListArg {
28814    pub fn with_limit(mut self, value: u32) -> Self {
28815        self.limit = value;
28816        self
28817    }
28818}
28819
28820const TEAM_NAMESPACES_LIST_ARG_FIELDS: &[&str] = &["limit"];
28821impl TeamNamespacesListArg {
28822    // no _opt deserializer
28823    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28824        mut map: V,
28825    ) -> Result<TeamNamespacesListArg, V::Error> {
28826        let mut field_limit = None;
28827        while let Some(key) = map.next_key::<&str>()? {
28828            match key {
28829                "limit" => {
28830                    if field_limit.is_some() {
28831                        return Err(::serde::de::Error::duplicate_field("limit"));
28832                    }
28833                    field_limit = Some(map.next_value()?);
28834                }
28835                _ => {
28836                    // unknown field allowed and ignored
28837                    map.next_value::<::serde_json::Value>()?;
28838                }
28839            }
28840        }
28841        let result = TeamNamespacesListArg {
28842            limit: field_limit.unwrap_or(1000),
28843        };
28844        Ok(result)
28845    }
28846
28847    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28848        &self,
28849        s: &mut S::SerializeStruct,
28850    ) -> Result<(), S::Error> {
28851        use serde::ser::SerializeStruct;
28852        if self.limit != 1000 {
28853            s.serialize_field("limit", &self.limit)?;
28854        }
28855        Ok(())
28856    }
28857}
28858
28859impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListArg {
28860    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28861        // struct deserializer
28862        use serde::de::{MapAccess, Visitor};
28863        struct StructVisitor;
28864        impl<'de> Visitor<'de> for StructVisitor {
28865            type Value = TeamNamespacesListArg;
28866            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28867                f.write_str("a TeamNamespacesListArg struct")
28868            }
28869            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28870                TeamNamespacesListArg::internal_deserialize(map)
28871            }
28872        }
28873        deserializer.deserialize_struct("TeamNamespacesListArg", TEAM_NAMESPACES_LIST_ARG_FIELDS, StructVisitor)
28874    }
28875}
28876
28877impl ::serde::ser::Serialize for TeamNamespacesListArg {
28878    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28879        // struct serializer
28880        use serde::ser::SerializeStruct;
28881        let mut s = serializer.serialize_struct("TeamNamespacesListArg", 1)?;
28882        self.internal_serialize::<S>(&mut s)?;
28883        s.end()
28884    }
28885}
28886
28887#[derive(Debug, Clone, PartialEq, Eq)]
28888#[non_exhaustive] // structs may have more fields added in the future.
28889pub struct TeamNamespacesListContinueArg {
28890    /// Indicates from what point to get the next set of team-accessible namespaces.
28891    pub cursor: String,
28892}
28893
28894impl TeamNamespacesListContinueArg {
28895    pub fn new(cursor: String) -> Self {
28896        TeamNamespacesListContinueArg {
28897            cursor,
28898        }
28899    }
28900}
28901
28902const TEAM_NAMESPACES_LIST_CONTINUE_ARG_FIELDS: &[&str] = &["cursor"];
28903impl TeamNamespacesListContinueArg {
28904    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
28905        map: V,
28906    ) -> Result<TeamNamespacesListContinueArg, V::Error> {
28907        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
28908    }
28909
28910    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
28911        mut map: V,
28912        optional: bool,
28913    ) -> Result<Option<TeamNamespacesListContinueArg>, V::Error> {
28914        let mut field_cursor = None;
28915        let mut nothing = true;
28916        while let Some(key) = map.next_key::<&str>()? {
28917            nothing = false;
28918            match key {
28919                "cursor" => {
28920                    if field_cursor.is_some() {
28921                        return Err(::serde::de::Error::duplicate_field("cursor"));
28922                    }
28923                    field_cursor = Some(map.next_value()?);
28924                }
28925                _ => {
28926                    // unknown field allowed and ignored
28927                    map.next_value::<::serde_json::Value>()?;
28928                }
28929            }
28930        }
28931        if optional && nothing {
28932            return Ok(None);
28933        }
28934        let result = TeamNamespacesListContinueArg {
28935            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
28936        };
28937        Ok(Some(result))
28938    }
28939
28940    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
28941        &self,
28942        s: &mut S::SerializeStruct,
28943    ) -> Result<(), S::Error> {
28944        use serde::ser::SerializeStruct;
28945        s.serialize_field("cursor", &self.cursor)?;
28946        Ok(())
28947    }
28948}
28949
28950impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListContinueArg {
28951    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28952        // struct deserializer
28953        use serde::de::{MapAccess, Visitor};
28954        struct StructVisitor;
28955        impl<'de> Visitor<'de> for StructVisitor {
28956            type Value = TeamNamespacesListContinueArg;
28957            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28958                f.write_str("a TeamNamespacesListContinueArg struct")
28959            }
28960            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
28961                TeamNamespacesListContinueArg::internal_deserialize(map)
28962            }
28963        }
28964        deserializer.deserialize_struct("TeamNamespacesListContinueArg", TEAM_NAMESPACES_LIST_CONTINUE_ARG_FIELDS, StructVisitor)
28965    }
28966}
28967
28968impl ::serde::ser::Serialize for TeamNamespacesListContinueArg {
28969    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
28970        // struct serializer
28971        use serde::ser::SerializeStruct;
28972        let mut s = serializer.serialize_struct("TeamNamespacesListContinueArg", 1)?;
28973        self.internal_serialize::<S>(&mut s)?;
28974        s.end()
28975    }
28976}
28977
28978#[derive(Debug, Clone, PartialEq, Eq)]
28979#[non_exhaustive] // variants may be added in the future
28980pub enum TeamNamespacesListContinueError {
28981    /// Argument passed in is invalid.
28982    InvalidArg,
28983    /// The cursor is invalid.
28984    InvalidCursor,
28985    /// Catch-all used for unrecognized values returned from the server. Encountering this value
28986    /// typically indicates that this SDK version is out of date.
28987    Other,
28988}
28989
28990impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListContinueError {
28991    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
28992        // union deserializer
28993        use serde::de::{self, MapAccess, Visitor};
28994        struct EnumVisitor;
28995        impl<'de> Visitor<'de> for EnumVisitor {
28996            type Value = TeamNamespacesListContinueError;
28997            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
28998                f.write_str("a TeamNamespacesListContinueError structure")
28999            }
29000            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29001                let tag: &str = match map.next_key()? {
29002                    Some(".tag") => map.next_value()?,
29003                    _ => return Err(de::Error::missing_field(".tag"))
29004                };
29005                let value = match tag {
29006                    "invalid_arg" => TeamNamespacesListContinueError::InvalidArg,
29007                    "invalid_cursor" => TeamNamespacesListContinueError::InvalidCursor,
29008                    _ => TeamNamespacesListContinueError::Other,
29009                };
29010                crate::eat_json_fields(&mut map)?;
29011                Ok(value)
29012            }
29013        }
29014        const VARIANTS: &[&str] = &["invalid_arg",
29015                                    "other",
29016                                    "invalid_cursor"];
29017        deserializer.deserialize_struct("TeamNamespacesListContinueError", VARIANTS, EnumVisitor)
29018    }
29019}
29020
29021impl ::serde::ser::Serialize for TeamNamespacesListContinueError {
29022    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29023        // union serializer
29024        use serde::ser::SerializeStruct;
29025        match self {
29026            TeamNamespacesListContinueError::InvalidArg => {
29027                // unit
29028                let mut s = serializer.serialize_struct("TeamNamespacesListContinueError", 1)?;
29029                s.serialize_field(".tag", "invalid_arg")?;
29030                s.end()
29031            }
29032            TeamNamespacesListContinueError::InvalidCursor => {
29033                // unit
29034                let mut s = serializer.serialize_struct("TeamNamespacesListContinueError", 1)?;
29035                s.serialize_field(".tag", "invalid_cursor")?;
29036                s.end()
29037            }
29038            TeamNamespacesListContinueError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29039        }
29040    }
29041}
29042
29043impl ::std::error::Error for TeamNamespacesListContinueError {
29044}
29045
29046impl ::std::fmt::Display for TeamNamespacesListContinueError {
29047    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29048        match self {
29049            TeamNamespacesListContinueError::InvalidArg => f.write_str("Argument passed in is invalid."),
29050            TeamNamespacesListContinueError::InvalidCursor => f.write_str("The cursor is invalid."),
29051            _ => write!(f, "{:?}", *self),
29052        }
29053    }
29054}
29055
29056// union extends TeamNamespacesListError
29057impl From<TeamNamespacesListError> for TeamNamespacesListContinueError {
29058    fn from(parent: TeamNamespacesListError) -> Self {
29059        match parent {
29060            TeamNamespacesListError::InvalidArg => TeamNamespacesListContinueError::InvalidArg,
29061            TeamNamespacesListError::Other => TeamNamespacesListContinueError::Other,
29062        }
29063    }
29064}
29065#[derive(Debug, Clone, PartialEq, Eq)]
29066#[non_exhaustive] // variants may be added in the future
29067pub enum TeamNamespacesListError {
29068    /// Argument passed in is invalid.
29069    InvalidArg,
29070    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29071    /// typically indicates that this SDK version is out of date.
29072    Other,
29073}
29074
29075impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListError {
29076    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29077        // union deserializer
29078        use serde::de::{self, MapAccess, Visitor};
29079        struct EnumVisitor;
29080        impl<'de> Visitor<'de> for EnumVisitor {
29081            type Value = TeamNamespacesListError;
29082            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29083                f.write_str("a TeamNamespacesListError structure")
29084            }
29085            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29086                let tag: &str = match map.next_key()? {
29087                    Some(".tag") => map.next_value()?,
29088                    _ => return Err(de::Error::missing_field(".tag"))
29089                };
29090                let value = match tag {
29091                    "invalid_arg" => TeamNamespacesListError::InvalidArg,
29092                    _ => TeamNamespacesListError::Other,
29093                };
29094                crate::eat_json_fields(&mut map)?;
29095                Ok(value)
29096            }
29097        }
29098        const VARIANTS: &[&str] = &["invalid_arg",
29099                                    "other"];
29100        deserializer.deserialize_struct("TeamNamespacesListError", VARIANTS, EnumVisitor)
29101    }
29102}
29103
29104impl ::serde::ser::Serialize for TeamNamespacesListError {
29105    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29106        // union serializer
29107        use serde::ser::SerializeStruct;
29108        match self {
29109            TeamNamespacesListError::InvalidArg => {
29110                // unit
29111                let mut s = serializer.serialize_struct("TeamNamespacesListError", 1)?;
29112                s.serialize_field(".tag", "invalid_arg")?;
29113                s.end()
29114            }
29115            TeamNamespacesListError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29116        }
29117    }
29118}
29119
29120impl ::std::error::Error for TeamNamespacesListError {
29121}
29122
29123impl ::std::fmt::Display for TeamNamespacesListError {
29124    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29125        match self {
29126            TeamNamespacesListError::InvalidArg => f.write_str("Argument passed in is invalid."),
29127            _ => write!(f, "{:?}", *self),
29128        }
29129    }
29130}
29131
29132/// Result for [`namespaces_list()`](crate::team::namespaces_list).
29133#[derive(Debug, Clone, PartialEq, Eq)]
29134#[non_exhaustive] // structs may have more fields added in the future.
29135pub struct TeamNamespacesListResult {
29136    /// List of all namespaces the team can access.
29137    pub namespaces: Vec<NamespaceMetadata>,
29138    /// Pass the cursor into [`namespaces_list_continue()`](crate::team::namespaces_list_continue)
29139    /// to obtain additional namespaces. Note that duplicate namespaces may be returned.
29140    pub cursor: String,
29141    /// Is true if there are additional namespaces that have not been returned yet.
29142    pub has_more: bool,
29143}
29144
29145impl TeamNamespacesListResult {
29146    pub fn new(namespaces: Vec<NamespaceMetadata>, cursor: String, has_more: bool) -> Self {
29147        TeamNamespacesListResult {
29148            namespaces,
29149            cursor,
29150            has_more,
29151        }
29152    }
29153}
29154
29155const TEAM_NAMESPACES_LIST_RESULT_FIELDS: &[&str] = &["namespaces",
29156                                                      "cursor",
29157                                                      "has_more"];
29158impl TeamNamespacesListResult {
29159    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29160        map: V,
29161    ) -> Result<TeamNamespacesListResult, V::Error> {
29162        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29163    }
29164
29165    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29166        mut map: V,
29167        optional: bool,
29168    ) -> Result<Option<TeamNamespacesListResult>, V::Error> {
29169        let mut field_namespaces = None;
29170        let mut field_cursor = None;
29171        let mut field_has_more = None;
29172        let mut nothing = true;
29173        while let Some(key) = map.next_key::<&str>()? {
29174            nothing = false;
29175            match key {
29176                "namespaces" => {
29177                    if field_namespaces.is_some() {
29178                        return Err(::serde::de::Error::duplicate_field("namespaces"));
29179                    }
29180                    field_namespaces = Some(map.next_value()?);
29181                }
29182                "cursor" => {
29183                    if field_cursor.is_some() {
29184                        return Err(::serde::de::Error::duplicate_field("cursor"));
29185                    }
29186                    field_cursor = Some(map.next_value()?);
29187                }
29188                "has_more" => {
29189                    if field_has_more.is_some() {
29190                        return Err(::serde::de::Error::duplicate_field("has_more"));
29191                    }
29192                    field_has_more = Some(map.next_value()?);
29193                }
29194                _ => {
29195                    // unknown field allowed and ignored
29196                    map.next_value::<::serde_json::Value>()?;
29197                }
29198            }
29199        }
29200        if optional && nothing {
29201            return Ok(None);
29202        }
29203        let result = TeamNamespacesListResult {
29204            namespaces: field_namespaces.ok_or_else(|| ::serde::de::Error::missing_field("namespaces"))?,
29205            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
29206            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
29207        };
29208        Ok(Some(result))
29209    }
29210
29211    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29212        &self,
29213        s: &mut S::SerializeStruct,
29214    ) -> Result<(), S::Error> {
29215        use serde::ser::SerializeStruct;
29216        s.serialize_field("namespaces", &self.namespaces)?;
29217        s.serialize_field("cursor", &self.cursor)?;
29218        s.serialize_field("has_more", &self.has_more)?;
29219        Ok(())
29220    }
29221}
29222
29223impl<'de> ::serde::de::Deserialize<'de> for TeamNamespacesListResult {
29224    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29225        // struct deserializer
29226        use serde::de::{MapAccess, Visitor};
29227        struct StructVisitor;
29228        impl<'de> Visitor<'de> for StructVisitor {
29229            type Value = TeamNamespacesListResult;
29230            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29231                f.write_str("a TeamNamespacesListResult struct")
29232            }
29233            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29234                TeamNamespacesListResult::internal_deserialize(map)
29235            }
29236        }
29237        deserializer.deserialize_struct("TeamNamespacesListResult", TEAM_NAMESPACES_LIST_RESULT_FIELDS, StructVisitor)
29238    }
29239}
29240
29241impl ::serde::ser::Serialize for TeamNamespacesListResult {
29242    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29243        // struct serializer
29244        use serde::ser::SerializeStruct;
29245        let mut s = serializer.serialize_struct("TeamNamespacesListResult", 3)?;
29246        self.internal_serialize::<S>(&mut s)?;
29247        s.end()
29248    }
29249}
29250
29251#[derive(Debug, Clone, PartialEq, Eq)]
29252#[non_exhaustive] // variants may be added in the future
29253pub enum TeamReportFailureReason {
29254    /// We couldn't create the report, but we think this was a fluke. Everything should work if you
29255    /// try it again.
29256    TemporaryError,
29257    /// Too many other reports are being created right now. Try creating this report again once the
29258    /// others finish.
29259    ManyReportsAtOnce,
29260    /// We couldn't create the report. Try creating the report again with less data.
29261    TooMuchData,
29262    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29263    /// typically indicates that this SDK version is out of date.
29264    Other,
29265}
29266
29267impl<'de> ::serde::de::Deserialize<'de> for TeamReportFailureReason {
29268    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29269        // union deserializer
29270        use serde::de::{self, MapAccess, Visitor};
29271        struct EnumVisitor;
29272        impl<'de> Visitor<'de> for EnumVisitor {
29273            type Value = TeamReportFailureReason;
29274            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29275                f.write_str("a TeamReportFailureReason structure")
29276            }
29277            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29278                let tag: &str = match map.next_key()? {
29279                    Some(".tag") => map.next_value()?,
29280                    _ => return Err(de::Error::missing_field(".tag"))
29281                };
29282                let value = match tag {
29283                    "temporary_error" => TeamReportFailureReason::TemporaryError,
29284                    "many_reports_at_once" => TeamReportFailureReason::ManyReportsAtOnce,
29285                    "too_much_data" => TeamReportFailureReason::TooMuchData,
29286                    _ => TeamReportFailureReason::Other,
29287                };
29288                crate::eat_json_fields(&mut map)?;
29289                Ok(value)
29290            }
29291        }
29292        const VARIANTS: &[&str] = &["temporary_error",
29293                                    "many_reports_at_once",
29294                                    "too_much_data",
29295                                    "other"];
29296        deserializer.deserialize_struct("TeamReportFailureReason", VARIANTS, EnumVisitor)
29297    }
29298}
29299
29300impl ::serde::ser::Serialize for TeamReportFailureReason {
29301    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29302        // union serializer
29303        use serde::ser::SerializeStruct;
29304        match self {
29305            TeamReportFailureReason::TemporaryError => {
29306                // unit
29307                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
29308                s.serialize_field(".tag", "temporary_error")?;
29309                s.end()
29310            }
29311            TeamReportFailureReason::ManyReportsAtOnce => {
29312                // unit
29313                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
29314                s.serialize_field(".tag", "many_reports_at_once")?;
29315                s.end()
29316            }
29317            TeamReportFailureReason::TooMuchData => {
29318                // unit
29319                let mut s = serializer.serialize_struct("TeamReportFailureReason", 1)?;
29320                s.serialize_field(".tag", "too_much_data")?;
29321                s.end()
29322            }
29323            TeamReportFailureReason::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29324        }
29325    }
29326}
29327
29328/// Error returned by
29329/// [`token_get_authenticated_admin()`](crate::team::token_get_authenticated_admin).
29330#[derive(Debug, Clone, PartialEq, Eq)]
29331#[non_exhaustive] // variants may be added in the future
29332pub enum TokenGetAuthenticatedAdminError {
29333    /// The current token is not associated with a team admin, because mappings were not recorded
29334    /// when the token was created. Consider re-authorizing a new access token to record its
29335    /// authenticating admin.
29336    MappingNotFound,
29337    /// Either the team admin that authorized this token is no longer an active member of the team
29338    /// or no longer a team admin.
29339    AdminNotActive,
29340    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29341    /// typically indicates that this SDK version is out of date.
29342    Other,
29343}
29344
29345impl<'de> ::serde::de::Deserialize<'de> for TokenGetAuthenticatedAdminError {
29346    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29347        // union deserializer
29348        use serde::de::{self, MapAccess, Visitor};
29349        struct EnumVisitor;
29350        impl<'de> Visitor<'de> for EnumVisitor {
29351            type Value = TokenGetAuthenticatedAdminError;
29352            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29353                f.write_str("a TokenGetAuthenticatedAdminError structure")
29354            }
29355            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29356                let tag: &str = match map.next_key()? {
29357                    Some(".tag") => map.next_value()?,
29358                    _ => return Err(de::Error::missing_field(".tag"))
29359                };
29360                let value = match tag {
29361                    "mapping_not_found" => TokenGetAuthenticatedAdminError::MappingNotFound,
29362                    "admin_not_active" => TokenGetAuthenticatedAdminError::AdminNotActive,
29363                    _ => TokenGetAuthenticatedAdminError::Other,
29364                };
29365                crate::eat_json_fields(&mut map)?;
29366                Ok(value)
29367            }
29368        }
29369        const VARIANTS: &[&str] = &["mapping_not_found",
29370                                    "admin_not_active",
29371                                    "other"];
29372        deserializer.deserialize_struct("TokenGetAuthenticatedAdminError", VARIANTS, EnumVisitor)
29373    }
29374}
29375
29376impl ::serde::ser::Serialize for TokenGetAuthenticatedAdminError {
29377    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29378        // union serializer
29379        use serde::ser::SerializeStruct;
29380        match self {
29381            TokenGetAuthenticatedAdminError::MappingNotFound => {
29382                // unit
29383                let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminError", 1)?;
29384                s.serialize_field(".tag", "mapping_not_found")?;
29385                s.end()
29386            }
29387            TokenGetAuthenticatedAdminError::AdminNotActive => {
29388                // unit
29389                let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminError", 1)?;
29390                s.serialize_field(".tag", "admin_not_active")?;
29391                s.end()
29392            }
29393            TokenGetAuthenticatedAdminError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29394        }
29395    }
29396}
29397
29398impl ::std::error::Error for TokenGetAuthenticatedAdminError {
29399}
29400
29401impl ::std::fmt::Display for TokenGetAuthenticatedAdminError {
29402    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29403        match self {
29404            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."),
29405            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."),
29406            _ => write!(f, "{:?}", *self),
29407        }
29408    }
29409}
29410
29411/// Results for [`token_get_authenticated_admin()`](crate::team::token_get_authenticated_admin).
29412#[derive(Debug, Clone, PartialEq, Eq)]
29413#[non_exhaustive] // structs may have more fields added in the future.
29414pub struct TokenGetAuthenticatedAdminResult {
29415    /// The admin who authorized the token.
29416    pub admin_profile: TeamMemberProfile,
29417}
29418
29419impl TokenGetAuthenticatedAdminResult {
29420    pub fn new(admin_profile: TeamMemberProfile) -> Self {
29421        TokenGetAuthenticatedAdminResult {
29422            admin_profile,
29423        }
29424    }
29425}
29426
29427const TOKEN_GET_AUTHENTICATED_ADMIN_RESULT_FIELDS: &[&str] = &["admin_profile"];
29428impl TokenGetAuthenticatedAdminResult {
29429    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29430        map: V,
29431    ) -> Result<TokenGetAuthenticatedAdminResult, V::Error> {
29432        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29433    }
29434
29435    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29436        mut map: V,
29437        optional: bool,
29438    ) -> Result<Option<TokenGetAuthenticatedAdminResult>, V::Error> {
29439        let mut field_admin_profile = None;
29440        let mut nothing = true;
29441        while let Some(key) = map.next_key::<&str>()? {
29442            nothing = false;
29443            match key {
29444                "admin_profile" => {
29445                    if field_admin_profile.is_some() {
29446                        return Err(::serde::de::Error::duplicate_field("admin_profile"));
29447                    }
29448                    field_admin_profile = Some(map.next_value()?);
29449                }
29450                _ => {
29451                    // unknown field allowed and ignored
29452                    map.next_value::<::serde_json::Value>()?;
29453                }
29454            }
29455        }
29456        if optional && nothing {
29457            return Ok(None);
29458        }
29459        let result = TokenGetAuthenticatedAdminResult {
29460            admin_profile: field_admin_profile.ok_or_else(|| ::serde::de::Error::missing_field("admin_profile"))?,
29461        };
29462        Ok(Some(result))
29463    }
29464
29465    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29466        &self,
29467        s: &mut S::SerializeStruct,
29468    ) -> Result<(), S::Error> {
29469        use serde::ser::SerializeStruct;
29470        s.serialize_field("admin_profile", &self.admin_profile)?;
29471        Ok(())
29472    }
29473}
29474
29475impl<'de> ::serde::de::Deserialize<'de> for TokenGetAuthenticatedAdminResult {
29476    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29477        // struct deserializer
29478        use serde::de::{MapAccess, Visitor};
29479        struct StructVisitor;
29480        impl<'de> Visitor<'de> for StructVisitor {
29481            type Value = TokenGetAuthenticatedAdminResult;
29482            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29483                f.write_str("a TokenGetAuthenticatedAdminResult struct")
29484            }
29485            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29486                TokenGetAuthenticatedAdminResult::internal_deserialize(map)
29487            }
29488        }
29489        deserializer.deserialize_struct("TokenGetAuthenticatedAdminResult", TOKEN_GET_AUTHENTICATED_ADMIN_RESULT_FIELDS, StructVisitor)
29490    }
29491}
29492
29493impl ::serde::ser::Serialize for TokenGetAuthenticatedAdminResult {
29494    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29495        // struct serializer
29496        use serde::ser::SerializeStruct;
29497        let mut s = serializer.serialize_struct("TokenGetAuthenticatedAdminResult", 1)?;
29498        self.internal_serialize::<S>(&mut s)?;
29499        s.end()
29500    }
29501}
29502
29503/// The value for [`Feature::UploadApiRateLimit`].
29504#[derive(Debug, Clone, PartialEq, Eq)]
29505#[non_exhaustive] // variants may be added in the future
29506pub enum UploadApiRateLimitValue {
29507    /// This team has unlimited upload API quota. So far both server version account and legacy
29508    /// account type have unlimited monthly upload api quota.
29509    Unlimited,
29510    /// The number of upload API calls allowed per month.
29511    Limit(u32),
29512    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29513    /// typically indicates that this SDK version is out of date.
29514    Other,
29515}
29516
29517impl<'de> ::serde::de::Deserialize<'de> for UploadApiRateLimitValue {
29518    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29519        // union deserializer
29520        use serde::de::{self, MapAccess, Visitor};
29521        struct EnumVisitor;
29522        impl<'de> Visitor<'de> for EnumVisitor {
29523            type Value = UploadApiRateLimitValue;
29524            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29525                f.write_str("a UploadApiRateLimitValue structure")
29526            }
29527            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29528                let tag: &str = match map.next_key()? {
29529                    Some(".tag") => map.next_value()?,
29530                    _ => return Err(de::Error::missing_field(".tag"))
29531                };
29532                let value = match tag {
29533                    "unlimited" => UploadApiRateLimitValue::Unlimited,
29534                    "limit" => {
29535                        match map.next_key()? {
29536                            Some("limit") => UploadApiRateLimitValue::Limit(map.next_value()?),
29537                            None => return Err(de::Error::missing_field("limit")),
29538                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29539                        }
29540                    }
29541                    _ => UploadApiRateLimitValue::Other,
29542                };
29543                crate::eat_json_fields(&mut map)?;
29544                Ok(value)
29545            }
29546        }
29547        const VARIANTS: &[&str] = &["unlimited",
29548                                    "limit",
29549                                    "other"];
29550        deserializer.deserialize_struct("UploadApiRateLimitValue", VARIANTS, EnumVisitor)
29551    }
29552}
29553
29554impl ::serde::ser::Serialize for UploadApiRateLimitValue {
29555    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29556        // union serializer
29557        use serde::ser::SerializeStruct;
29558        match self {
29559            UploadApiRateLimitValue::Unlimited => {
29560                // unit
29561                let mut s = serializer.serialize_struct("UploadApiRateLimitValue", 1)?;
29562                s.serialize_field(".tag", "unlimited")?;
29563                s.end()
29564            }
29565            UploadApiRateLimitValue::Limit(x) => {
29566                // primitive
29567                let mut s = serializer.serialize_struct("UploadApiRateLimitValue", 2)?;
29568                s.serialize_field(".tag", "limit")?;
29569                s.serialize_field("limit", x)?;
29570                s.end()
29571            }
29572            UploadApiRateLimitValue::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29573        }
29574    }
29575}
29576
29577/// Result of trying to add secondary emails to a user. 'success' is the only value indicating that
29578/// a user was successfully retrieved for adding secondary emails. The other values explain the type
29579/// of error that occurred, and include the user for which the error occurred.
29580#[derive(Debug, Clone, PartialEq, Eq)]
29581#[non_exhaustive] // variants may be added in the future
29582pub enum UserAddResult {
29583    /// Describes a user and the results for each attempt to add a secondary email.
29584    Success(UserSecondaryEmailsResult),
29585    /// Specified user is not a valid target for adding secondary emails.
29586    InvalidUser(UserSelectorArg),
29587    /// Secondary emails can only be added to verified users.
29588    Unverified(UserSelectorArg),
29589    /// Secondary emails cannot be added to placeholder users.
29590    PlaceholderUser(UserSelectorArg),
29591    /// Catch-all used for unrecognized values returned from the server. Encountering this value
29592    /// typically indicates that this SDK version is out of date.
29593    Other,
29594}
29595
29596impl<'de> ::serde::de::Deserialize<'de> for UserAddResult {
29597    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29598        // union deserializer
29599        use serde::de::{self, MapAccess, Visitor};
29600        struct EnumVisitor;
29601        impl<'de> Visitor<'de> for EnumVisitor {
29602            type Value = UserAddResult;
29603            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29604                f.write_str("a UserAddResult structure")
29605            }
29606            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
29607                let tag: &str = match map.next_key()? {
29608                    Some(".tag") => map.next_value()?,
29609                    _ => return Err(de::Error::missing_field(".tag"))
29610                };
29611                let value = match tag {
29612                    "success" => UserAddResult::Success(UserSecondaryEmailsResult::internal_deserialize(&mut map)?),
29613                    "invalid_user" => {
29614                        match map.next_key()? {
29615                            Some("invalid_user") => UserAddResult::InvalidUser(map.next_value()?),
29616                            None => return Err(de::Error::missing_field("invalid_user")),
29617                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29618                        }
29619                    }
29620                    "unverified" => {
29621                        match map.next_key()? {
29622                            Some("unverified") => UserAddResult::Unverified(map.next_value()?),
29623                            None => return Err(de::Error::missing_field("unverified")),
29624                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29625                        }
29626                    }
29627                    "placeholder_user" => {
29628                        match map.next_key()? {
29629                            Some("placeholder_user") => UserAddResult::PlaceholderUser(map.next_value()?),
29630                            None => return Err(de::Error::missing_field("placeholder_user")),
29631                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
29632                        }
29633                    }
29634                    _ => UserAddResult::Other,
29635                };
29636                crate::eat_json_fields(&mut map)?;
29637                Ok(value)
29638            }
29639        }
29640        const VARIANTS: &[&str] = &["success",
29641                                    "invalid_user",
29642                                    "unverified",
29643                                    "placeholder_user",
29644                                    "other"];
29645        deserializer.deserialize_struct("UserAddResult", VARIANTS, EnumVisitor)
29646    }
29647}
29648
29649impl ::serde::ser::Serialize for UserAddResult {
29650    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29651        // union serializer
29652        use serde::ser::SerializeStruct;
29653        match self {
29654            UserAddResult::Success(x) => {
29655                // struct
29656                let mut s = serializer.serialize_struct("UserAddResult", 3)?;
29657                s.serialize_field(".tag", "success")?;
29658                x.internal_serialize::<S>(&mut s)?;
29659                s.end()
29660            }
29661            UserAddResult::InvalidUser(x) => {
29662                // union or polymporphic struct
29663                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
29664                s.serialize_field(".tag", "invalid_user")?;
29665                s.serialize_field("invalid_user", x)?;
29666                s.end()
29667            }
29668            UserAddResult::Unverified(x) => {
29669                // union or polymporphic struct
29670                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
29671                s.serialize_field(".tag", "unverified")?;
29672                s.serialize_field("unverified", x)?;
29673                s.end()
29674            }
29675            UserAddResult::PlaceholderUser(x) => {
29676                // union or polymporphic struct
29677                let mut s = serializer.serialize_struct("UserAddResult", 2)?;
29678                s.serialize_field(".tag", "placeholder_user")?;
29679                s.serialize_field("placeholder_user", x)?;
29680                s.end()
29681            }
29682            UserAddResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
29683        }
29684    }
29685}
29686
29687/// User and their required custom quota in GB (1 TB = 1024 GB).
29688#[derive(Debug, Clone, PartialEq, Eq)]
29689#[non_exhaustive] // structs may have more fields added in the future.
29690pub struct UserCustomQuotaArg {
29691    pub user: UserSelectorArg,
29692    pub quota_gb: UserQuota,
29693}
29694
29695impl UserCustomQuotaArg {
29696    pub fn new(user: UserSelectorArg, quota_gb: UserQuota) -> Self {
29697        UserCustomQuotaArg {
29698            user,
29699            quota_gb,
29700        }
29701    }
29702}
29703
29704const USER_CUSTOM_QUOTA_ARG_FIELDS: &[&str] = &["user",
29705                                                "quota_gb"];
29706impl UserCustomQuotaArg {
29707    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29708        map: V,
29709    ) -> Result<UserCustomQuotaArg, V::Error> {
29710        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29711    }
29712
29713    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29714        mut map: V,
29715        optional: bool,
29716    ) -> Result<Option<UserCustomQuotaArg>, V::Error> {
29717        let mut field_user = None;
29718        let mut field_quota_gb = None;
29719        let mut nothing = true;
29720        while let Some(key) = map.next_key::<&str>()? {
29721            nothing = false;
29722            match key {
29723                "user" => {
29724                    if field_user.is_some() {
29725                        return Err(::serde::de::Error::duplicate_field("user"));
29726                    }
29727                    field_user = Some(map.next_value()?);
29728                }
29729                "quota_gb" => {
29730                    if field_quota_gb.is_some() {
29731                        return Err(::serde::de::Error::duplicate_field("quota_gb"));
29732                    }
29733                    field_quota_gb = Some(map.next_value()?);
29734                }
29735                _ => {
29736                    // unknown field allowed and ignored
29737                    map.next_value::<::serde_json::Value>()?;
29738                }
29739            }
29740        }
29741        if optional && nothing {
29742            return Ok(None);
29743        }
29744        let result = UserCustomQuotaArg {
29745            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29746            quota_gb: field_quota_gb.ok_or_else(|| ::serde::de::Error::missing_field("quota_gb"))?,
29747        };
29748        Ok(Some(result))
29749    }
29750
29751    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29752        &self,
29753        s: &mut S::SerializeStruct,
29754    ) -> Result<(), S::Error> {
29755        use serde::ser::SerializeStruct;
29756        s.serialize_field("user", &self.user)?;
29757        s.serialize_field("quota_gb", &self.quota_gb)?;
29758        Ok(())
29759    }
29760}
29761
29762impl<'de> ::serde::de::Deserialize<'de> for UserCustomQuotaArg {
29763    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29764        // struct deserializer
29765        use serde::de::{MapAccess, Visitor};
29766        struct StructVisitor;
29767        impl<'de> Visitor<'de> for StructVisitor {
29768            type Value = UserCustomQuotaArg;
29769            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29770                f.write_str("a UserCustomQuotaArg struct")
29771            }
29772            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29773                UserCustomQuotaArg::internal_deserialize(map)
29774            }
29775        }
29776        deserializer.deserialize_struct("UserCustomQuotaArg", USER_CUSTOM_QUOTA_ARG_FIELDS, StructVisitor)
29777    }
29778}
29779
29780impl ::serde::ser::Serialize for UserCustomQuotaArg {
29781    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29782        // struct serializer
29783        use serde::ser::SerializeStruct;
29784        let mut s = serializer.serialize_struct("UserCustomQuotaArg", 2)?;
29785        self.internal_serialize::<S>(&mut s)?;
29786        s.end()
29787    }
29788}
29789
29790/// User and their custom quota in GB (1 TB = 1024 GB). No quota returns if the user has no custom
29791/// quota set.
29792#[derive(Debug, Clone, PartialEq, Eq)]
29793#[non_exhaustive] // structs may have more fields added in the future.
29794pub struct UserCustomQuotaResult {
29795    pub user: UserSelectorArg,
29796    pub quota_gb: Option<UserQuota>,
29797}
29798
29799impl UserCustomQuotaResult {
29800    pub fn new(user: UserSelectorArg) -> Self {
29801        UserCustomQuotaResult {
29802            user,
29803            quota_gb: None,
29804        }
29805    }
29806
29807    pub fn with_quota_gb(mut self, value: UserQuota) -> Self {
29808        self.quota_gb = Some(value);
29809        self
29810    }
29811}
29812
29813const USER_CUSTOM_QUOTA_RESULT_FIELDS: &[&str] = &["user",
29814                                                   "quota_gb"];
29815impl UserCustomQuotaResult {
29816    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29817        map: V,
29818    ) -> Result<UserCustomQuotaResult, V::Error> {
29819        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29820    }
29821
29822    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29823        mut map: V,
29824        optional: bool,
29825    ) -> Result<Option<UserCustomQuotaResult>, V::Error> {
29826        let mut field_user = None;
29827        let mut field_quota_gb = None;
29828        let mut nothing = true;
29829        while let Some(key) = map.next_key::<&str>()? {
29830            nothing = false;
29831            match key {
29832                "user" => {
29833                    if field_user.is_some() {
29834                        return Err(::serde::de::Error::duplicate_field("user"));
29835                    }
29836                    field_user = Some(map.next_value()?);
29837                }
29838                "quota_gb" => {
29839                    if field_quota_gb.is_some() {
29840                        return Err(::serde::de::Error::duplicate_field("quota_gb"));
29841                    }
29842                    field_quota_gb = Some(map.next_value()?);
29843                }
29844                _ => {
29845                    // unknown field allowed and ignored
29846                    map.next_value::<::serde_json::Value>()?;
29847                }
29848            }
29849        }
29850        if optional && nothing {
29851            return Ok(None);
29852        }
29853        let result = UserCustomQuotaResult {
29854            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29855            quota_gb: field_quota_gb.and_then(Option::flatten),
29856        };
29857        Ok(Some(result))
29858    }
29859
29860    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29861        &self,
29862        s: &mut S::SerializeStruct,
29863    ) -> Result<(), S::Error> {
29864        use serde::ser::SerializeStruct;
29865        s.serialize_field("user", &self.user)?;
29866        if let Some(val) = &self.quota_gb {
29867            s.serialize_field("quota_gb", val)?;
29868        }
29869        Ok(())
29870    }
29871}
29872
29873impl<'de> ::serde::de::Deserialize<'de> for UserCustomQuotaResult {
29874    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29875        // struct deserializer
29876        use serde::de::{MapAccess, Visitor};
29877        struct StructVisitor;
29878        impl<'de> Visitor<'de> for StructVisitor {
29879            type Value = UserCustomQuotaResult;
29880            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29881                f.write_str("a UserCustomQuotaResult struct")
29882            }
29883            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29884                UserCustomQuotaResult::internal_deserialize(map)
29885            }
29886        }
29887        deserializer.deserialize_struct("UserCustomQuotaResult", USER_CUSTOM_QUOTA_RESULT_FIELDS, StructVisitor)
29888    }
29889}
29890
29891impl ::serde::ser::Serialize for UserCustomQuotaResult {
29892    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29893        // struct serializer
29894        use serde::ser::SerializeStruct;
29895        let mut s = serializer.serialize_struct("UserCustomQuotaResult", 2)?;
29896        self.internal_serialize::<S>(&mut s)?;
29897        s.end()
29898    }
29899}
29900
29901#[derive(Debug, Clone, PartialEq, Eq)]
29902#[non_exhaustive] // structs may have more fields added in the future.
29903pub struct UserDeleteEmailsResult {
29904    pub user: UserSelectorArg,
29905    pub results: Vec<DeleteSecondaryEmailResult>,
29906}
29907
29908impl UserDeleteEmailsResult {
29909    pub fn new(user: UserSelectorArg, results: Vec<DeleteSecondaryEmailResult>) -> Self {
29910        UserDeleteEmailsResult {
29911            user,
29912            results,
29913        }
29914    }
29915}
29916
29917const USER_DELETE_EMAILS_RESULT_FIELDS: &[&str] = &["user",
29918                                                    "results"];
29919impl UserDeleteEmailsResult {
29920    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
29921        map: V,
29922    ) -> Result<UserDeleteEmailsResult, V::Error> {
29923        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
29924    }
29925
29926    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
29927        mut map: V,
29928        optional: bool,
29929    ) -> Result<Option<UserDeleteEmailsResult>, V::Error> {
29930        let mut field_user = None;
29931        let mut field_results = None;
29932        let mut nothing = true;
29933        while let Some(key) = map.next_key::<&str>()? {
29934            nothing = false;
29935            match key {
29936                "user" => {
29937                    if field_user.is_some() {
29938                        return Err(::serde::de::Error::duplicate_field("user"));
29939                    }
29940                    field_user = Some(map.next_value()?);
29941                }
29942                "results" => {
29943                    if field_results.is_some() {
29944                        return Err(::serde::de::Error::duplicate_field("results"));
29945                    }
29946                    field_results = Some(map.next_value()?);
29947                }
29948                _ => {
29949                    // unknown field allowed and ignored
29950                    map.next_value::<::serde_json::Value>()?;
29951                }
29952            }
29953        }
29954        if optional && nothing {
29955            return Ok(None);
29956        }
29957        let result = UserDeleteEmailsResult {
29958            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
29959            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
29960        };
29961        Ok(Some(result))
29962    }
29963
29964    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
29965        &self,
29966        s: &mut S::SerializeStruct,
29967    ) -> Result<(), S::Error> {
29968        use serde::ser::SerializeStruct;
29969        s.serialize_field("user", &self.user)?;
29970        s.serialize_field("results", &self.results)?;
29971        Ok(())
29972    }
29973}
29974
29975impl<'de> ::serde::de::Deserialize<'de> for UserDeleteEmailsResult {
29976    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
29977        // struct deserializer
29978        use serde::de::{MapAccess, Visitor};
29979        struct StructVisitor;
29980        impl<'de> Visitor<'de> for StructVisitor {
29981            type Value = UserDeleteEmailsResult;
29982            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
29983                f.write_str("a UserDeleteEmailsResult struct")
29984            }
29985            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
29986                UserDeleteEmailsResult::internal_deserialize(map)
29987            }
29988        }
29989        deserializer.deserialize_struct("UserDeleteEmailsResult", USER_DELETE_EMAILS_RESULT_FIELDS, StructVisitor)
29990    }
29991}
29992
29993impl ::serde::ser::Serialize for UserDeleteEmailsResult {
29994    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
29995        // struct serializer
29996        use serde::ser::SerializeStruct;
29997        let mut s = serializer.serialize_struct("UserDeleteEmailsResult", 2)?;
29998        self.internal_serialize::<S>(&mut s)?;
29999        s.end()
30000    }
30001}
30002
30003/// Result of trying to delete a user's secondary emails. 'success' is the only value indicating
30004/// that a user was successfully retrieved for deleting secondary emails. The other values explain
30005/// the type of error that occurred, and include the user for which the error occurred.
30006#[derive(Debug, Clone, PartialEq, Eq)]
30007#[non_exhaustive] // variants may be added in the future
30008pub enum UserDeleteResult {
30009    /// Describes a user and the results for each attempt to delete a secondary email.
30010    Success(UserDeleteEmailsResult),
30011    /// Specified user is not a valid target for deleting secondary emails.
30012    InvalidUser(UserSelectorArg),
30013    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30014    /// typically indicates that this SDK version is out of date.
30015    Other,
30016}
30017
30018impl<'de> ::serde::de::Deserialize<'de> for UserDeleteResult {
30019    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30020        // union deserializer
30021        use serde::de::{self, MapAccess, Visitor};
30022        struct EnumVisitor;
30023        impl<'de> Visitor<'de> for EnumVisitor {
30024            type Value = UserDeleteResult;
30025            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30026                f.write_str("a UserDeleteResult structure")
30027            }
30028            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30029                let tag: &str = match map.next_key()? {
30030                    Some(".tag") => map.next_value()?,
30031                    _ => return Err(de::Error::missing_field(".tag"))
30032                };
30033                let value = match tag {
30034                    "success" => UserDeleteResult::Success(UserDeleteEmailsResult::internal_deserialize(&mut map)?),
30035                    "invalid_user" => {
30036                        match map.next_key()? {
30037                            Some("invalid_user") => UserDeleteResult::InvalidUser(map.next_value()?),
30038                            None => return Err(de::Error::missing_field("invalid_user")),
30039                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30040                        }
30041                    }
30042                    _ => UserDeleteResult::Other,
30043                };
30044                crate::eat_json_fields(&mut map)?;
30045                Ok(value)
30046            }
30047        }
30048        const VARIANTS: &[&str] = &["success",
30049                                    "invalid_user",
30050                                    "other"];
30051        deserializer.deserialize_struct("UserDeleteResult", VARIANTS, EnumVisitor)
30052    }
30053}
30054
30055impl ::serde::ser::Serialize for UserDeleteResult {
30056    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30057        // union serializer
30058        use serde::ser::SerializeStruct;
30059        match self {
30060            UserDeleteResult::Success(x) => {
30061                // struct
30062                let mut s = serializer.serialize_struct("UserDeleteResult", 3)?;
30063                s.serialize_field(".tag", "success")?;
30064                x.internal_serialize::<S>(&mut s)?;
30065                s.end()
30066            }
30067            UserDeleteResult::InvalidUser(x) => {
30068                // union or polymporphic struct
30069                let mut s = serializer.serialize_struct("UserDeleteResult", 2)?;
30070                s.serialize_field(".tag", "invalid_user")?;
30071                s.serialize_field("invalid_user", x)?;
30072                s.end()
30073            }
30074            UserDeleteResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30075        }
30076    }
30077}
30078
30079#[derive(Debug, Clone, PartialEq, Eq)]
30080#[non_exhaustive] // structs may have more fields added in the future.
30081pub struct UserResendEmailsResult {
30082    pub user: UserSelectorArg,
30083    pub results: Vec<ResendSecondaryEmailResult>,
30084}
30085
30086impl UserResendEmailsResult {
30087    pub fn new(user: UserSelectorArg, results: Vec<ResendSecondaryEmailResult>) -> Self {
30088        UserResendEmailsResult {
30089            user,
30090            results,
30091        }
30092    }
30093}
30094
30095const USER_RESEND_EMAILS_RESULT_FIELDS: &[&str] = &["user",
30096                                                    "results"];
30097impl UserResendEmailsResult {
30098    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30099        map: V,
30100    ) -> Result<UserResendEmailsResult, V::Error> {
30101        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30102    }
30103
30104    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30105        mut map: V,
30106        optional: bool,
30107    ) -> Result<Option<UserResendEmailsResult>, V::Error> {
30108        let mut field_user = None;
30109        let mut field_results = None;
30110        let mut nothing = true;
30111        while let Some(key) = map.next_key::<&str>()? {
30112            nothing = false;
30113            match key {
30114                "user" => {
30115                    if field_user.is_some() {
30116                        return Err(::serde::de::Error::duplicate_field("user"));
30117                    }
30118                    field_user = Some(map.next_value()?);
30119                }
30120                "results" => {
30121                    if field_results.is_some() {
30122                        return Err(::serde::de::Error::duplicate_field("results"));
30123                    }
30124                    field_results = Some(map.next_value()?);
30125                }
30126                _ => {
30127                    // unknown field allowed and ignored
30128                    map.next_value::<::serde_json::Value>()?;
30129                }
30130            }
30131        }
30132        if optional && nothing {
30133            return Ok(None);
30134        }
30135        let result = UserResendEmailsResult {
30136            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30137            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
30138        };
30139        Ok(Some(result))
30140    }
30141
30142    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30143        &self,
30144        s: &mut S::SerializeStruct,
30145    ) -> Result<(), S::Error> {
30146        use serde::ser::SerializeStruct;
30147        s.serialize_field("user", &self.user)?;
30148        s.serialize_field("results", &self.results)?;
30149        Ok(())
30150    }
30151}
30152
30153impl<'de> ::serde::de::Deserialize<'de> for UserResendEmailsResult {
30154    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30155        // struct deserializer
30156        use serde::de::{MapAccess, Visitor};
30157        struct StructVisitor;
30158        impl<'de> Visitor<'de> for StructVisitor {
30159            type Value = UserResendEmailsResult;
30160            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30161                f.write_str("a UserResendEmailsResult struct")
30162            }
30163            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30164                UserResendEmailsResult::internal_deserialize(map)
30165            }
30166        }
30167        deserializer.deserialize_struct("UserResendEmailsResult", USER_RESEND_EMAILS_RESULT_FIELDS, StructVisitor)
30168    }
30169}
30170
30171impl ::serde::ser::Serialize for UserResendEmailsResult {
30172    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30173        // struct serializer
30174        use serde::ser::SerializeStruct;
30175        let mut s = serializer.serialize_struct("UserResendEmailsResult", 2)?;
30176        self.internal_serialize::<S>(&mut s)?;
30177        s.end()
30178    }
30179}
30180
30181/// Result of trying to resend verification emails to a user. 'success' is the only value indicating
30182/// that a user was successfully retrieved for sending verification emails. The other values explain
30183/// the type of error that occurred, and include the user for which the error occurred.
30184#[derive(Debug, Clone, PartialEq, Eq)]
30185#[non_exhaustive] // variants may be added in the future
30186pub enum UserResendResult {
30187    /// Describes a user and the results for each attempt to resend verification emails.
30188    Success(UserResendEmailsResult),
30189    /// Specified user is not a valid target for resending verification emails.
30190    InvalidUser(UserSelectorArg),
30191    /// Catch-all used for unrecognized values returned from the server. Encountering this value
30192    /// typically indicates that this SDK version is out of date.
30193    Other,
30194}
30195
30196impl<'de> ::serde::de::Deserialize<'de> for UserResendResult {
30197    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30198        // union deserializer
30199        use serde::de::{self, MapAccess, Visitor};
30200        struct EnumVisitor;
30201        impl<'de> Visitor<'de> for EnumVisitor {
30202            type Value = UserResendResult;
30203            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30204                f.write_str("a UserResendResult structure")
30205            }
30206            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30207                let tag: &str = match map.next_key()? {
30208                    Some(".tag") => map.next_value()?,
30209                    _ => return Err(de::Error::missing_field(".tag"))
30210                };
30211                let value = match tag {
30212                    "success" => UserResendResult::Success(UserResendEmailsResult::internal_deserialize(&mut map)?),
30213                    "invalid_user" => {
30214                        match map.next_key()? {
30215                            Some("invalid_user") => UserResendResult::InvalidUser(map.next_value()?),
30216                            None => return Err(de::Error::missing_field("invalid_user")),
30217                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30218                        }
30219                    }
30220                    _ => UserResendResult::Other,
30221                };
30222                crate::eat_json_fields(&mut map)?;
30223                Ok(value)
30224            }
30225        }
30226        const VARIANTS: &[&str] = &["success",
30227                                    "invalid_user",
30228                                    "other"];
30229        deserializer.deserialize_struct("UserResendResult", VARIANTS, EnumVisitor)
30230    }
30231}
30232
30233impl ::serde::ser::Serialize for UserResendResult {
30234    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30235        // union serializer
30236        use serde::ser::SerializeStruct;
30237        match self {
30238            UserResendResult::Success(x) => {
30239                // struct
30240                let mut s = serializer.serialize_struct("UserResendResult", 3)?;
30241                s.serialize_field(".tag", "success")?;
30242                x.internal_serialize::<S>(&mut s)?;
30243                s.end()
30244            }
30245            UserResendResult::InvalidUser(x) => {
30246                // union or polymporphic struct
30247                let mut s = serializer.serialize_struct("UserResendResult", 2)?;
30248                s.serialize_field(".tag", "invalid_user")?;
30249                s.serialize_field("invalid_user", x)?;
30250                s.end()
30251            }
30252            UserResendResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
30253        }
30254    }
30255}
30256
30257/// User and a list of secondary emails.
30258#[derive(Debug, Clone, PartialEq, Eq)]
30259#[non_exhaustive] // structs may have more fields added in the future.
30260pub struct UserSecondaryEmailsArg {
30261    pub user: UserSelectorArg,
30262    pub secondary_emails: Vec<crate::types::common::EmailAddress>,
30263}
30264
30265impl UserSecondaryEmailsArg {
30266    pub fn new(
30267        user: UserSelectorArg,
30268        secondary_emails: Vec<crate::types::common::EmailAddress>,
30269    ) -> Self {
30270        UserSecondaryEmailsArg {
30271            user,
30272            secondary_emails,
30273        }
30274    }
30275}
30276
30277const USER_SECONDARY_EMAILS_ARG_FIELDS: &[&str] = &["user",
30278                                                    "secondary_emails"];
30279impl UserSecondaryEmailsArg {
30280    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30281        map: V,
30282    ) -> Result<UserSecondaryEmailsArg, V::Error> {
30283        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30284    }
30285
30286    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30287        mut map: V,
30288        optional: bool,
30289    ) -> Result<Option<UserSecondaryEmailsArg>, V::Error> {
30290        let mut field_user = None;
30291        let mut field_secondary_emails = None;
30292        let mut nothing = true;
30293        while let Some(key) = map.next_key::<&str>()? {
30294            nothing = false;
30295            match key {
30296                "user" => {
30297                    if field_user.is_some() {
30298                        return Err(::serde::de::Error::duplicate_field("user"));
30299                    }
30300                    field_user = Some(map.next_value()?);
30301                }
30302                "secondary_emails" => {
30303                    if field_secondary_emails.is_some() {
30304                        return Err(::serde::de::Error::duplicate_field("secondary_emails"));
30305                    }
30306                    field_secondary_emails = Some(map.next_value()?);
30307                }
30308                _ => {
30309                    // unknown field allowed and ignored
30310                    map.next_value::<::serde_json::Value>()?;
30311                }
30312            }
30313        }
30314        if optional && nothing {
30315            return Ok(None);
30316        }
30317        let result = UserSecondaryEmailsArg {
30318            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30319            secondary_emails: field_secondary_emails.ok_or_else(|| ::serde::de::Error::missing_field("secondary_emails"))?,
30320        };
30321        Ok(Some(result))
30322    }
30323
30324    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30325        &self,
30326        s: &mut S::SerializeStruct,
30327    ) -> Result<(), S::Error> {
30328        use serde::ser::SerializeStruct;
30329        s.serialize_field("user", &self.user)?;
30330        s.serialize_field("secondary_emails", &self.secondary_emails)?;
30331        Ok(())
30332    }
30333}
30334
30335impl<'de> ::serde::de::Deserialize<'de> for UserSecondaryEmailsArg {
30336    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30337        // struct deserializer
30338        use serde::de::{MapAccess, Visitor};
30339        struct StructVisitor;
30340        impl<'de> Visitor<'de> for StructVisitor {
30341            type Value = UserSecondaryEmailsArg;
30342            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30343                f.write_str("a UserSecondaryEmailsArg struct")
30344            }
30345            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30346                UserSecondaryEmailsArg::internal_deserialize(map)
30347            }
30348        }
30349        deserializer.deserialize_struct("UserSecondaryEmailsArg", USER_SECONDARY_EMAILS_ARG_FIELDS, StructVisitor)
30350    }
30351}
30352
30353impl ::serde::ser::Serialize for UserSecondaryEmailsArg {
30354    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30355        // struct serializer
30356        use serde::ser::SerializeStruct;
30357        let mut s = serializer.serialize_struct("UserSecondaryEmailsArg", 2)?;
30358        self.internal_serialize::<S>(&mut s)?;
30359        s.end()
30360    }
30361}
30362
30363#[derive(Debug, Clone, PartialEq, Eq)]
30364#[non_exhaustive] // structs may have more fields added in the future.
30365pub struct UserSecondaryEmailsResult {
30366    pub user: UserSelectorArg,
30367    pub results: Vec<AddSecondaryEmailResult>,
30368}
30369
30370impl UserSecondaryEmailsResult {
30371    pub fn new(user: UserSelectorArg, results: Vec<AddSecondaryEmailResult>) -> Self {
30372        UserSecondaryEmailsResult {
30373            user,
30374            results,
30375        }
30376    }
30377}
30378
30379const USER_SECONDARY_EMAILS_RESULT_FIELDS: &[&str] = &["user",
30380                                                       "results"];
30381impl UserSecondaryEmailsResult {
30382    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
30383        map: V,
30384    ) -> Result<UserSecondaryEmailsResult, V::Error> {
30385        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
30386    }
30387
30388    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
30389        mut map: V,
30390        optional: bool,
30391    ) -> Result<Option<UserSecondaryEmailsResult>, V::Error> {
30392        let mut field_user = None;
30393        let mut field_results = None;
30394        let mut nothing = true;
30395        while let Some(key) = map.next_key::<&str>()? {
30396            nothing = false;
30397            match key {
30398                "user" => {
30399                    if field_user.is_some() {
30400                        return Err(::serde::de::Error::duplicate_field("user"));
30401                    }
30402                    field_user = Some(map.next_value()?);
30403                }
30404                "results" => {
30405                    if field_results.is_some() {
30406                        return Err(::serde::de::Error::duplicate_field("results"));
30407                    }
30408                    field_results = Some(map.next_value()?);
30409                }
30410                _ => {
30411                    // unknown field allowed and ignored
30412                    map.next_value::<::serde_json::Value>()?;
30413                }
30414            }
30415        }
30416        if optional && nothing {
30417            return Ok(None);
30418        }
30419        let result = UserSecondaryEmailsResult {
30420            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
30421            results: field_results.ok_or_else(|| ::serde::de::Error::missing_field("results"))?,
30422        };
30423        Ok(Some(result))
30424    }
30425
30426    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
30427        &self,
30428        s: &mut S::SerializeStruct,
30429    ) -> Result<(), S::Error> {
30430        use serde::ser::SerializeStruct;
30431        s.serialize_field("user", &self.user)?;
30432        s.serialize_field("results", &self.results)?;
30433        Ok(())
30434    }
30435}
30436
30437impl<'de> ::serde::de::Deserialize<'de> for UserSecondaryEmailsResult {
30438    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30439        // struct deserializer
30440        use serde::de::{MapAccess, Visitor};
30441        struct StructVisitor;
30442        impl<'de> Visitor<'de> for StructVisitor {
30443            type Value = UserSecondaryEmailsResult;
30444            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30445                f.write_str("a UserSecondaryEmailsResult struct")
30446            }
30447            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
30448                UserSecondaryEmailsResult::internal_deserialize(map)
30449            }
30450        }
30451        deserializer.deserialize_struct("UserSecondaryEmailsResult", USER_SECONDARY_EMAILS_RESULT_FIELDS, StructVisitor)
30452    }
30453}
30454
30455impl ::serde::ser::Serialize for UserSecondaryEmailsResult {
30456    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30457        // struct serializer
30458        use serde::ser::SerializeStruct;
30459        let mut s = serializer.serialize_struct("UserSecondaryEmailsResult", 2)?;
30460        self.internal_serialize::<S>(&mut s)?;
30461        s.end()
30462    }
30463}
30464
30465/// Argument for selecting a single user, either by team_member_id, external_id or email.
30466#[derive(Debug, Clone, PartialEq, Eq)]
30467pub enum UserSelectorArg {
30468    TeamMemberId(crate::types::team_common::TeamMemberId),
30469    ExternalId(crate::types::team_common::MemberExternalId),
30470    Email(crate::types::common::EmailAddress),
30471}
30472
30473impl<'de> ::serde::de::Deserialize<'de> for UserSelectorArg {
30474    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30475        // union deserializer
30476        use serde::de::{self, MapAccess, Visitor};
30477        struct EnumVisitor;
30478        impl<'de> Visitor<'de> for EnumVisitor {
30479            type Value = UserSelectorArg;
30480            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30481                f.write_str("a UserSelectorArg structure")
30482            }
30483            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30484                let tag: &str = match map.next_key()? {
30485                    Some(".tag") => map.next_value()?,
30486                    _ => return Err(de::Error::missing_field(".tag"))
30487                };
30488                let value = match tag {
30489                    "team_member_id" => {
30490                        match map.next_key()? {
30491                            Some("team_member_id") => UserSelectorArg::TeamMemberId(map.next_value()?),
30492                            None => return Err(de::Error::missing_field("team_member_id")),
30493                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30494                        }
30495                    }
30496                    "external_id" => {
30497                        match map.next_key()? {
30498                            Some("external_id") => UserSelectorArg::ExternalId(map.next_value()?),
30499                            None => return Err(de::Error::missing_field("external_id")),
30500                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30501                        }
30502                    }
30503                    "email" => {
30504                        match map.next_key()? {
30505                            Some("email") => UserSelectorArg::Email(map.next_value()?),
30506                            None => return Err(de::Error::missing_field("email")),
30507                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30508                        }
30509                    }
30510                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
30511                };
30512                crate::eat_json_fields(&mut map)?;
30513                Ok(value)
30514            }
30515        }
30516        const VARIANTS: &[&str] = &["team_member_id",
30517                                    "external_id",
30518                                    "email"];
30519        deserializer.deserialize_struct("UserSelectorArg", VARIANTS, EnumVisitor)
30520    }
30521}
30522
30523impl ::serde::ser::Serialize for UserSelectorArg {
30524    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30525        // union serializer
30526        use serde::ser::SerializeStruct;
30527        match self {
30528            UserSelectorArg::TeamMemberId(x) => {
30529                // primitive
30530                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
30531                s.serialize_field(".tag", "team_member_id")?;
30532                s.serialize_field("team_member_id", x)?;
30533                s.end()
30534            }
30535            UserSelectorArg::ExternalId(x) => {
30536                // primitive
30537                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
30538                s.serialize_field(".tag", "external_id")?;
30539                s.serialize_field("external_id", x)?;
30540                s.end()
30541            }
30542            UserSelectorArg::Email(x) => {
30543                // primitive
30544                let mut s = serializer.serialize_struct("UserSelectorArg", 2)?;
30545                s.serialize_field(".tag", "email")?;
30546                s.serialize_field("email", x)?;
30547                s.end()
30548            }
30549        }
30550    }
30551}
30552
30553/// Error that can be returned whenever a struct derived from [`UserSelectorArg`] is used.
30554#[derive(Debug, Clone, PartialEq, Eq)]
30555pub enum UserSelectorError {
30556    /// No matching user found. The provided team_member_id, email, or external_id does not exist on
30557    /// this team.
30558    UserNotFound,
30559}
30560
30561impl<'de> ::serde::de::Deserialize<'de> for UserSelectorError {
30562    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30563        // union deserializer
30564        use serde::de::{self, MapAccess, Visitor};
30565        struct EnumVisitor;
30566        impl<'de> Visitor<'de> for EnumVisitor {
30567            type Value = UserSelectorError;
30568            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30569                f.write_str("a UserSelectorError structure")
30570            }
30571            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30572                let tag: &str = match map.next_key()? {
30573                    Some(".tag") => map.next_value()?,
30574                    _ => return Err(de::Error::missing_field(".tag"))
30575                };
30576                let value = match tag {
30577                    "user_not_found" => UserSelectorError::UserNotFound,
30578                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
30579                };
30580                crate::eat_json_fields(&mut map)?;
30581                Ok(value)
30582            }
30583        }
30584        const VARIANTS: &[&str] = &["user_not_found"];
30585        deserializer.deserialize_struct("UserSelectorError", VARIANTS, EnumVisitor)
30586    }
30587}
30588
30589impl ::serde::ser::Serialize for UserSelectorError {
30590    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30591        // union serializer
30592        use serde::ser::SerializeStruct;
30593        match self {
30594            UserSelectorError::UserNotFound => {
30595                // unit
30596                let mut s = serializer.serialize_struct("UserSelectorError", 1)?;
30597                s.serialize_field(".tag", "user_not_found")?;
30598                s.end()
30599            }
30600        }
30601    }
30602}
30603
30604impl ::std::error::Error for UserSelectorError {
30605}
30606
30607impl ::std::fmt::Display for UserSelectorError {
30608    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30609        match self {
30610            UserSelectorError::UserNotFound => f.write_str("No matching user found. The provided team_member_id, email, or external_id does not exist on this team."),
30611        }
30612    }
30613}
30614
30615/// Argument for selecting a list of users, either by team_member_ids, external_ids or emails.
30616#[derive(Debug, Clone, PartialEq, Eq)]
30617pub enum UsersSelectorArg {
30618    /// List of member IDs.
30619    TeamMemberIds(Vec<crate::types::team_common::TeamMemberId>),
30620    /// List of external user IDs.
30621    ExternalIds(Vec<crate::types::team_common::MemberExternalId>),
30622    /// List of email addresses.
30623    Emails(Vec<crate::types::common::EmailAddress>),
30624}
30625
30626impl<'de> ::serde::de::Deserialize<'de> for UsersSelectorArg {
30627    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
30628        // union deserializer
30629        use serde::de::{self, MapAccess, Visitor};
30630        struct EnumVisitor;
30631        impl<'de> Visitor<'de> for EnumVisitor {
30632            type Value = UsersSelectorArg;
30633            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
30634                f.write_str("a UsersSelectorArg structure")
30635            }
30636            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
30637                let tag: &str = match map.next_key()? {
30638                    Some(".tag") => map.next_value()?,
30639                    _ => return Err(de::Error::missing_field(".tag"))
30640                };
30641                let value = match tag {
30642                    "team_member_ids" => {
30643                        match map.next_key()? {
30644                            Some("team_member_ids") => UsersSelectorArg::TeamMemberIds(map.next_value()?),
30645                            None => return Err(de::Error::missing_field("team_member_ids")),
30646                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30647                        }
30648                    }
30649                    "external_ids" => {
30650                        match map.next_key()? {
30651                            Some("external_ids") => UsersSelectorArg::ExternalIds(map.next_value()?),
30652                            None => return Err(de::Error::missing_field("external_ids")),
30653                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30654                        }
30655                    }
30656                    "emails" => {
30657                        match map.next_key()? {
30658                            Some("emails") => UsersSelectorArg::Emails(map.next_value()?),
30659                            None => return Err(de::Error::missing_field("emails")),
30660                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
30661                        }
30662                    }
30663                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
30664                };
30665                crate::eat_json_fields(&mut map)?;
30666                Ok(value)
30667            }
30668        }
30669        const VARIANTS: &[&str] = &["team_member_ids",
30670                                    "external_ids",
30671                                    "emails"];
30672        deserializer.deserialize_struct("UsersSelectorArg", VARIANTS, EnumVisitor)
30673    }
30674}
30675
30676impl ::serde::ser::Serialize for UsersSelectorArg {
30677    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
30678        // union serializer
30679        use serde::ser::SerializeStruct;
30680        match self {
30681            UsersSelectorArg::TeamMemberIds(x) => {
30682                // primitive
30683                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
30684                s.serialize_field(".tag", "team_member_ids")?;
30685                s.serialize_field("team_member_ids", x)?;
30686                s.end()
30687            }
30688            UsersSelectorArg::ExternalIds(x) => {
30689                // primitive
30690                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
30691                s.serialize_field(".tag", "external_ids")?;
30692                s.serialize_field("external_ids", x)?;
30693                s.end()
30694            }
30695            UsersSelectorArg::Emails(x) => {
30696                // primitive
30697                let mut s = serializer.serialize_struct("UsersSelectorArg", 2)?;
30698                s.serialize_field(".tag", "emails")?;
30699                s.serialize_field("emails", x)?;
30700                s.end()
30701            }
30702        }
30703    }
30704}
30705