dropbox_sdk/generated/types/
paper.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)]
10
11//! This namespace contains endpoints and data types for managing docs and folders in Dropbox Paper.
12//! New Paper users will see docs they create in their filesystem as '.paper' files alongside their
13//! other Dropbox content. The /paper endpoints are being deprecated and you'll need to use /files
14//! and /sharing endpoints to interact with their Paper content. Read more in the [Paper Migration
15//! Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
16
17pub type PaperDocId = String;
18
19#[derive(Debug, Clone, PartialEq, Eq)]
20#[non_exhaustive] // structs may have more fields added in the future.
21pub struct AddMember {
22    /// User which should be added to the Paper doc. Specify only email address or Dropbox account
23    /// ID.
24    pub member: crate::types::sharing::MemberSelector,
25    /// Permission for the user.
26    pub permission_level: PaperDocPermissionLevel,
27}
28
29impl AddMember {
30    pub fn new(member: crate::types::sharing::MemberSelector) -> Self {
31        AddMember {
32            member,
33            permission_level: PaperDocPermissionLevel::Edit,
34        }
35    }
36
37    pub fn with_permission_level(mut self, value: PaperDocPermissionLevel) -> Self {
38        self.permission_level = value;
39        self
40    }
41}
42
43const ADD_MEMBER_FIELDS: &[&str] = &["member",
44                                     "permission_level"];
45impl AddMember {
46    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
47        map: V,
48    ) -> Result<AddMember, V::Error> {
49        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
50    }
51
52    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
53        mut map: V,
54        optional: bool,
55    ) -> Result<Option<AddMember>, V::Error> {
56        let mut field_member = None;
57        let mut field_permission_level = None;
58        let mut nothing = true;
59        while let Some(key) = map.next_key::<&str>()? {
60            nothing = false;
61            match key {
62                "member" => {
63                    if field_member.is_some() {
64                        return Err(::serde::de::Error::duplicate_field("member"));
65                    }
66                    field_member = Some(map.next_value()?);
67                }
68                "permission_level" => {
69                    if field_permission_level.is_some() {
70                        return Err(::serde::de::Error::duplicate_field("permission_level"));
71                    }
72                    field_permission_level = Some(map.next_value()?);
73                }
74                _ => {
75                    // unknown field allowed and ignored
76                    map.next_value::<::serde_json::Value>()?;
77                }
78            }
79        }
80        if optional && nothing {
81            return Ok(None);
82        }
83        let result = AddMember {
84            member: field_member.ok_or_else(|| ::serde::de::Error::missing_field("member"))?,
85            permission_level: field_permission_level.unwrap_or(PaperDocPermissionLevel::Edit),
86        };
87        Ok(Some(result))
88    }
89
90    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
91        &self,
92        s: &mut S::SerializeStruct,
93    ) -> Result<(), S::Error> {
94        use serde::ser::SerializeStruct;
95        s.serialize_field("member", &self.member)?;
96        if self.permission_level != PaperDocPermissionLevel::Edit {
97            s.serialize_field("permission_level", &self.permission_level)?;
98        }
99        Ok(())
100    }
101}
102
103impl<'de> ::serde::de::Deserialize<'de> for AddMember {
104    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
105        // struct deserializer
106        use serde::de::{MapAccess, Visitor};
107        struct StructVisitor;
108        impl<'de> Visitor<'de> for StructVisitor {
109            type Value = AddMember;
110            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
111                f.write_str("a AddMember struct")
112            }
113            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
114                AddMember::internal_deserialize(map)
115            }
116        }
117        deserializer.deserialize_struct("AddMember", ADD_MEMBER_FIELDS, StructVisitor)
118    }
119}
120
121impl ::serde::ser::Serialize for AddMember {
122    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
123        // struct serializer
124        use serde::ser::SerializeStruct;
125        let mut s = serializer.serialize_struct("AddMember", 2)?;
126        self.internal_serialize::<S>(&mut s)?;
127        s.end()
128    }
129}
130
131#[derive(Debug, Clone, PartialEq, Eq)]
132#[non_exhaustive] // structs may have more fields added in the future.
133pub struct AddPaperDocUser {
134    /// The Paper doc ID.
135    pub doc_id: PaperDocId,
136    /// User which should be added to the Paper doc. Specify only email address or Dropbox account
137    /// ID.
138    pub members: Vec<AddMember>,
139    /// A personal message that will be emailed to each successfully added member.
140    pub custom_message: Option<String>,
141    /// Clients should set this to true if no email message shall be sent to added users.
142    pub quiet: bool,
143}
144
145impl AddPaperDocUser {
146    pub fn new(doc_id: PaperDocId, members: Vec<AddMember>) -> Self {
147        AddPaperDocUser {
148            doc_id,
149            members,
150            custom_message: None,
151            quiet: false,
152        }
153    }
154
155    pub fn with_custom_message(mut self, value: String) -> Self {
156        self.custom_message = Some(value);
157        self
158    }
159
160    pub fn with_quiet(mut self, value: bool) -> Self {
161        self.quiet = value;
162        self
163    }
164}
165
166const ADD_PAPER_DOC_USER_FIELDS: &[&str] = &["doc_id",
167                                             "members",
168                                             "custom_message",
169                                             "quiet"];
170impl AddPaperDocUser {
171    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
172        map: V,
173    ) -> Result<AddPaperDocUser, V::Error> {
174        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
175    }
176
177    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
178        mut map: V,
179        optional: bool,
180    ) -> Result<Option<AddPaperDocUser>, V::Error> {
181        let mut field_doc_id = None;
182        let mut field_members = None;
183        let mut field_custom_message = None;
184        let mut field_quiet = None;
185        let mut nothing = true;
186        while let Some(key) = map.next_key::<&str>()? {
187            nothing = false;
188            match key {
189                "doc_id" => {
190                    if field_doc_id.is_some() {
191                        return Err(::serde::de::Error::duplicate_field("doc_id"));
192                    }
193                    field_doc_id = Some(map.next_value()?);
194                }
195                "members" => {
196                    if field_members.is_some() {
197                        return Err(::serde::de::Error::duplicate_field("members"));
198                    }
199                    field_members = Some(map.next_value()?);
200                }
201                "custom_message" => {
202                    if field_custom_message.is_some() {
203                        return Err(::serde::de::Error::duplicate_field("custom_message"));
204                    }
205                    field_custom_message = Some(map.next_value()?);
206                }
207                "quiet" => {
208                    if field_quiet.is_some() {
209                        return Err(::serde::de::Error::duplicate_field("quiet"));
210                    }
211                    field_quiet = Some(map.next_value()?);
212                }
213                _ => {
214                    // unknown field allowed and ignored
215                    map.next_value::<::serde_json::Value>()?;
216                }
217            }
218        }
219        if optional && nothing {
220            return Ok(None);
221        }
222        let result = AddPaperDocUser {
223            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
224            members: field_members.ok_or_else(|| ::serde::de::Error::missing_field("members"))?,
225            custom_message: field_custom_message.and_then(Option::flatten),
226            quiet: field_quiet.unwrap_or(false),
227        };
228        Ok(Some(result))
229    }
230
231    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
232        &self,
233        s: &mut S::SerializeStruct,
234    ) -> Result<(), S::Error> {
235        use serde::ser::SerializeStruct;
236        s.serialize_field("doc_id", &self.doc_id)?;
237        s.serialize_field("members", &self.members)?;
238        if let Some(val) = &self.custom_message {
239            s.serialize_field("custom_message", val)?;
240        }
241        if self.quiet {
242            s.serialize_field("quiet", &self.quiet)?;
243        }
244        Ok(())
245    }
246}
247
248impl<'de> ::serde::de::Deserialize<'de> for AddPaperDocUser {
249    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
250        // struct deserializer
251        use serde::de::{MapAccess, Visitor};
252        struct StructVisitor;
253        impl<'de> Visitor<'de> for StructVisitor {
254            type Value = AddPaperDocUser;
255            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
256                f.write_str("a AddPaperDocUser struct")
257            }
258            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
259                AddPaperDocUser::internal_deserialize(map)
260            }
261        }
262        deserializer.deserialize_struct("AddPaperDocUser", ADD_PAPER_DOC_USER_FIELDS, StructVisitor)
263    }
264}
265
266impl ::serde::ser::Serialize for AddPaperDocUser {
267    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
268        // struct serializer
269        use serde::ser::SerializeStruct;
270        let mut s = serializer.serialize_struct("AddPaperDocUser", 4)?;
271        self.internal_serialize::<S>(&mut s)?;
272        s.end()
273    }
274}
275
276// struct extends RefPaperDoc
277impl From<AddPaperDocUser> for RefPaperDoc {
278    fn from(subtype: AddPaperDocUser) -> Self {
279        Self {
280            doc_id: subtype.doc_id,
281        }
282    }
283}
284/// Per-member result for [`docs_users_add()`](crate::paper::docs_users_add).
285#[derive(Debug, Clone, PartialEq, Eq)]
286#[non_exhaustive] // structs may have more fields added in the future.
287pub struct AddPaperDocUserMemberResult {
288    /// One of specified input members.
289    pub member: crate::types::sharing::MemberSelector,
290    /// The outcome of the action on this member.
291    pub result: AddPaperDocUserResult,
292}
293
294impl AddPaperDocUserMemberResult {
295    pub fn new(
296        member: crate::types::sharing::MemberSelector,
297        result: AddPaperDocUserResult,
298    ) -> Self {
299        AddPaperDocUserMemberResult {
300            member,
301            result,
302        }
303    }
304}
305
306const ADD_PAPER_DOC_USER_MEMBER_RESULT_FIELDS: &[&str] = &["member",
307                                                           "result"];
308impl AddPaperDocUserMemberResult {
309    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
310        map: V,
311    ) -> Result<AddPaperDocUserMemberResult, V::Error> {
312        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
313    }
314
315    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
316        mut map: V,
317        optional: bool,
318    ) -> Result<Option<AddPaperDocUserMemberResult>, V::Error> {
319        let mut field_member = None;
320        let mut field_result = None;
321        let mut nothing = true;
322        while let Some(key) = map.next_key::<&str>()? {
323            nothing = false;
324            match key {
325                "member" => {
326                    if field_member.is_some() {
327                        return Err(::serde::de::Error::duplicate_field("member"));
328                    }
329                    field_member = Some(map.next_value()?);
330                }
331                "result" => {
332                    if field_result.is_some() {
333                        return Err(::serde::de::Error::duplicate_field("result"));
334                    }
335                    field_result = Some(map.next_value()?);
336                }
337                _ => {
338                    // unknown field allowed and ignored
339                    map.next_value::<::serde_json::Value>()?;
340                }
341            }
342        }
343        if optional && nothing {
344            return Ok(None);
345        }
346        let result = AddPaperDocUserMemberResult {
347            member: field_member.ok_or_else(|| ::serde::de::Error::missing_field("member"))?,
348            result: field_result.ok_or_else(|| ::serde::de::Error::missing_field("result"))?,
349        };
350        Ok(Some(result))
351    }
352
353    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
354        &self,
355        s: &mut S::SerializeStruct,
356    ) -> Result<(), S::Error> {
357        use serde::ser::SerializeStruct;
358        s.serialize_field("member", &self.member)?;
359        s.serialize_field("result", &self.result)?;
360        Ok(())
361    }
362}
363
364impl<'de> ::serde::de::Deserialize<'de> for AddPaperDocUserMemberResult {
365    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
366        // struct deserializer
367        use serde::de::{MapAccess, Visitor};
368        struct StructVisitor;
369        impl<'de> Visitor<'de> for StructVisitor {
370            type Value = AddPaperDocUserMemberResult;
371            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
372                f.write_str("a AddPaperDocUserMemberResult struct")
373            }
374            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
375                AddPaperDocUserMemberResult::internal_deserialize(map)
376            }
377        }
378        deserializer.deserialize_struct("AddPaperDocUserMemberResult", ADD_PAPER_DOC_USER_MEMBER_RESULT_FIELDS, StructVisitor)
379    }
380}
381
382impl ::serde::ser::Serialize for AddPaperDocUserMemberResult {
383    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
384        // struct serializer
385        use serde::ser::SerializeStruct;
386        let mut s = serializer.serialize_struct("AddPaperDocUserMemberResult", 2)?;
387        self.internal_serialize::<S>(&mut s)?;
388        s.end()
389    }
390}
391
392#[derive(Debug, Clone, PartialEq, Eq)]
393#[non_exhaustive] // variants may be added in the future
394pub enum AddPaperDocUserResult {
395    /// User was successfully added to the Paper doc.
396    Success,
397    /// Something unexpected happened when trying to add the user to the Paper doc.
398    UnknownError,
399    /// The Paper doc can be shared only with team members.
400    SharingOutsideTeamDisabled,
401    /// The daily limit of how many users can be added to the Paper doc was reached.
402    DailyLimitReached,
403    /// Owner's permissions cannot be changed.
404    UserIsOwner,
405    /// User data could not be retrieved. Clients should retry.
406    FailedUserDataRetrieval,
407    /// This user already has the correct permission to the Paper doc.
408    PermissionAlreadyGranted,
409    /// Catch-all used for unrecognized values returned from the server. Encountering this value
410    /// typically indicates that this SDK version is out of date.
411    Other,
412}
413
414impl<'de> ::serde::de::Deserialize<'de> for AddPaperDocUserResult {
415    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
416        // union deserializer
417        use serde::de::{self, MapAccess, Visitor};
418        struct EnumVisitor;
419        impl<'de> Visitor<'de> for EnumVisitor {
420            type Value = AddPaperDocUserResult;
421            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
422                f.write_str("a AddPaperDocUserResult structure")
423            }
424            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
425                let tag: &str = match map.next_key()? {
426                    Some(".tag") => map.next_value()?,
427                    _ => return Err(de::Error::missing_field(".tag"))
428                };
429                let value = match tag {
430                    "success" => AddPaperDocUserResult::Success,
431                    "unknown_error" => AddPaperDocUserResult::UnknownError,
432                    "sharing_outside_team_disabled" => AddPaperDocUserResult::SharingOutsideTeamDisabled,
433                    "daily_limit_reached" => AddPaperDocUserResult::DailyLimitReached,
434                    "user_is_owner" => AddPaperDocUserResult::UserIsOwner,
435                    "failed_user_data_retrieval" => AddPaperDocUserResult::FailedUserDataRetrieval,
436                    "permission_already_granted" => AddPaperDocUserResult::PermissionAlreadyGranted,
437                    _ => AddPaperDocUserResult::Other,
438                };
439                crate::eat_json_fields(&mut map)?;
440                Ok(value)
441            }
442        }
443        const VARIANTS: &[&str] = &["success",
444                                    "unknown_error",
445                                    "sharing_outside_team_disabled",
446                                    "daily_limit_reached",
447                                    "user_is_owner",
448                                    "failed_user_data_retrieval",
449                                    "permission_already_granted",
450                                    "other"];
451        deserializer.deserialize_struct("AddPaperDocUserResult", VARIANTS, EnumVisitor)
452    }
453}
454
455impl ::serde::ser::Serialize for AddPaperDocUserResult {
456    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
457        // union serializer
458        use serde::ser::SerializeStruct;
459        match self {
460            AddPaperDocUserResult::Success => {
461                // unit
462                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
463                s.serialize_field(".tag", "success")?;
464                s.end()
465            }
466            AddPaperDocUserResult::UnknownError => {
467                // unit
468                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
469                s.serialize_field(".tag", "unknown_error")?;
470                s.end()
471            }
472            AddPaperDocUserResult::SharingOutsideTeamDisabled => {
473                // unit
474                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
475                s.serialize_field(".tag", "sharing_outside_team_disabled")?;
476                s.end()
477            }
478            AddPaperDocUserResult::DailyLimitReached => {
479                // unit
480                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
481                s.serialize_field(".tag", "daily_limit_reached")?;
482                s.end()
483            }
484            AddPaperDocUserResult::UserIsOwner => {
485                // unit
486                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
487                s.serialize_field(".tag", "user_is_owner")?;
488                s.end()
489            }
490            AddPaperDocUserResult::FailedUserDataRetrieval => {
491                // unit
492                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
493                s.serialize_field(".tag", "failed_user_data_retrieval")?;
494                s.end()
495            }
496            AddPaperDocUserResult::PermissionAlreadyGranted => {
497                // unit
498                let mut s = serializer.serialize_struct("AddPaperDocUserResult", 1)?;
499                s.serialize_field(".tag", "permission_already_granted")?;
500                s.end()
501            }
502            AddPaperDocUserResult::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
503        }
504    }
505}
506
507#[derive(Debug, Clone, PartialEq, Eq)]
508#[non_exhaustive] // structs may have more fields added in the future.
509pub struct Cursor {
510    /// The actual cursor value.
511    pub value: String,
512    /// Expiration time of `value`. Some cursors might have expiration time assigned. This is a UTC
513    /// value after which the cursor is no longer valid and the API starts returning an error. If
514    /// cursor expires a new one needs to be obtained and pagination needs to be restarted. Some
515    /// cursors might be short-lived some cursors might be long-lived. This really depends on the
516    /// sorting type and order, e.g.: 1. on one hand, listing docs created by the user, sorted by
517    /// the created time ascending will have undefinite expiration because the results cannot change
518    /// while the iteration is happening. This cursor would be suitable for long term polling. 2. on
519    /// the other hand, listing docs sorted by the last modified time will have a very short
520    /// expiration as docs do get modified very often and the modified time can be changed while the
521    /// iteration is happening thus altering the results.
522    pub expiration: Option<crate::types::common::DropboxTimestamp>,
523}
524
525impl Cursor {
526    pub fn new(value: String) -> Self {
527        Cursor {
528            value,
529            expiration: None,
530        }
531    }
532
533    pub fn with_expiration(mut self, value: crate::types::common::DropboxTimestamp) -> Self {
534        self.expiration = Some(value);
535        self
536    }
537}
538
539const CURSOR_FIELDS: &[&str] = &["value",
540                                 "expiration"];
541impl Cursor {
542    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
543        map: V,
544    ) -> Result<Cursor, V::Error> {
545        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
546    }
547
548    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
549        mut map: V,
550        optional: bool,
551    ) -> Result<Option<Cursor>, V::Error> {
552        let mut field_value = None;
553        let mut field_expiration = None;
554        let mut nothing = true;
555        while let Some(key) = map.next_key::<&str>()? {
556            nothing = false;
557            match key {
558                "value" => {
559                    if field_value.is_some() {
560                        return Err(::serde::de::Error::duplicate_field("value"));
561                    }
562                    field_value = Some(map.next_value()?);
563                }
564                "expiration" => {
565                    if field_expiration.is_some() {
566                        return Err(::serde::de::Error::duplicate_field("expiration"));
567                    }
568                    field_expiration = Some(map.next_value()?);
569                }
570                _ => {
571                    // unknown field allowed and ignored
572                    map.next_value::<::serde_json::Value>()?;
573                }
574            }
575        }
576        if optional && nothing {
577            return Ok(None);
578        }
579        let result = Cursor {
580            value: field_value.ok_or_else(|| ::serde::de::Error::missing_field("value"))?,
581            expiration: field_expiration.and_then(Option::flatten),
582        };
583        Ok(Some(result))
584    }
585
586    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
587        &self,
588        s: &mut S::SerializeStruct,
589    ) -> Result<(), S::Error> {
590        use serde::ser::SerializeStruct;
591        s.serialize_field("value", &self.value)?;
592        if let Some(val) = &self.expiration {
593            s.serialize_field("expiration", val)?;
594        }
595        Ok(())
596    }
597}
598
599impl<'de> ::serde::de::Deserialize<'de> for Cursor {
600    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
601        // struct deserializer
602        use serde::de::{MapAccess, Visitor};
603        struct StructVisitor;
604        impl<'de> Visitor<'de> for StructVisitor {
605            type Value = Cursor;
606            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
607                f.write_str("a Cursor struct")
608            }
609            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
610                Cursor::internal_deserialize(map)
611            }
612        }
613        deserializer.deserialize_struct("Cursor", CURSOR_FIELDS, StructVisitor)
614    }
615}
616
617impl ::serde::ser::Serialize for Cursor {
618    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
619        // struct serializer
620        use serde::ser::SerializeStruct;
621        let mut s = serializer.serialize_struct("Cursor", 2)?;
622        self.internal_serialize::<S>(&mut s)?;
623        s.end()
624    }
625}
626
627#[derive(Debug, Clone, PartialEq, Eq)]
628#[non_exhaustive] // variants may be added in the future
629pub enum DocLookupError {
630    /// Your account does not have permissions to perform this action. This may be due to it only
631    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
632    /// the [Paper Migration
633    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
634    InsufficientPermissions,
635    /// The required doc was not found.
636    DocNotFound,
637    /// Catch-all used for unrecognized values returned from the server. Encountering this value
638    /// typically indicates that this SDK version is out of date.
639    Other,
640}
641
642impl<'de> ::serde::de::Deserialize<'de> for DocLookupError {
643    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
644        // union deserializer
645        use serde::de::{self, MapAccess, Visitor};
646        struct EnumVisitor;
647        impl<'de> Visitor<'de> for EnumVisitor {
648            type Value = DocLookupError;
649            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
650                f.write_str("a DocLookupError structure")
651            }
652            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
653                let tag: &str = match map.next_key()? {
654                    Some(".tag") => map.next_value()?,
655                    _ => return Err(de::Error::missing_field(".tag"))
656                };
657                let value = match tag {
658                    "insufficient_permissions" => DocLookupError::InsufficientPermissions,
659                    "doc_not_found" => DocLookupError::DocNotFound,
660                    _ => DocLookupError::Other,
661                };
662                crate::eat_json_fields(&mut map)?;
663                Ok(value)
664            }
665        }
666        const VARIANTS: &[&str] = &["insufficient_permissions",
667                                    "other",
668                                    "doc_not_found"];
669        deserializer.deserialize_struct("DocLookupError", VARIANTS, EnumVisitor)
670    }
671}
672
673impl ::serde::ser::Serialize for DocLookupError {
674    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
675        // union serializer
676        use serde::ser::SerializeStruct;
677        match self {
678            DocLookupError::InsufficientPermissions => {
679                // unit
680                let mut s = serializer.serialize_struct("DocLookupError", 1)?;
681                s.serialize_field(".tag", "insufficient_permissions")?;
682                s.end()
683            }
684            DocLookupError::DocNotFound => {
685                // unit
686                let mut s = serializer.serialize_struct("DocLookupError", 1)?;
687                s.serialize_field(".tag", "doc_not_found")?;
688                s.end()
689            }
690            DocLookupError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
691        }
692    }
693}
694
695impl ::std::error::Error for DocLookupError {
696}
697
698impl ::std::fmt::Display for DocLookupError {
699    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
700        match self {
701            DocLookupError::DocNotFound => f.write_str("The required doc was not found."),
702            _ => write!(f, "{:?}", *self),
703        }
704    }
705}
706
707// union extends PaperApiBaseError
708impl From<PaperApiBaseError> for DocLookupError {
709    fn from(parent: PaperApiBaseError) -> Self {
710        match parent {
711            PaperApiBaseError::InsufficientPermissions => DocLookupError::InsufficientPermissions,
712            PaperApiBaseError::Other => DocLookupError::Other,
713        }
714    }
715}
716/// The subscription level of a Paper doc.
717#[derive(Debug, Clone, PartialEq, Eq)]
718pub enum DocSubscriptionLevel {
719    /// No change email messages unless you're the creator.
720    Default,
721    /// Ignored: Not shown in pad lists or activity and no email message is sent.
722    Ignore,
723    /// Subscribed: Shown in pad lists and activity and change email messages are sent.
724    Every,
725    /// Unsubscribed: Shown in pad lists, but not in activity and no change email messages are sent.
726    NoEmail,
727}
728
729impl<'de> ::serde::de::Deserialize<'de> for DocSubscriptionLevel {
730    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
731        // union deserializer
732        use serde::de::{self, MapAccess, Visitor};
733        struct EnumVisitor;
734        impl<'de> Visitor<'de> for EnumVisitor {
735            type Value = DocSubscriptionLevel;
736            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
737                f.write_str("a DocSubscriptionLevel structure")
738            }
739            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
740                let tag: &str = match map.next_key()? {
741                    Some(".tag") => map.next_value()?,
742                    _ => return Err(de::Error::missing_field(".tag"))
743                };
744                let value = match tag {
745                    "default" => DocSubscriptionLevel::Default,
746                    "ignore" => DocSubscriptionLevel::Ignore,
747                    "every" => DocSubscriptionLevel::Every,
748                    "no_email" => DocSubscriptionLevel::NoEmail,
749                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
750                };
751                crate::eat_json_fields(&mut map)?;
752                Ok(value)
753            }
754        }
755        const VARIANTS: &[&str] = &["default",
756                                    "ignore",
757                                    "every",
758                                    "no_email"];
759        deserializer.deserialize_struct("DocSubscriptionLevel", VARIANTS, EnumVisitor)
760    }
761}
762
763impl ::serde::ser::Serialize for DocSubscriptionLevel {
764    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
765        // union serializer
766        use serde::ser::SerializeStruct;
767        match self {
768            DocSubscriptionLevel::Default => {
769                // unit
770                let mut s = serializer.serialize_struct("DocSubscriptionLevel", 1)?;
771                s.serialize_field(".tag", "default")?;
772                s.end()
773            }
774            DocSubscriptionLevel::Ignore => {
775                // unit
776                let mut s = serializer.serialize_struct("DocSubscriptionLevel", 1)?;
777                s.serialize_field(".tag", "ignore")?;
778                s.end()
779            }
780            DocSubscriptionLevel::Every => {
781                // unit
782                let mut s = serializer.serialize_struct("DocSubscriptionLevel", 1)?;
783                s.serialize_field(".tag", "every")?;
784                s.end()
785            }
786            DocSubscriptionLevel::NoEmail => {
787                // unit
788                let mut s = serializer.serialize_struct("DocSubscriptionLevel", 1)?;
789                s.serialize_field(".tag", "no_email")?;
790                s.end()
791            }
792        }
793    }
794}
795
796/// The desired export format of the Paper doc.
797#[derive(Debug, Clone, PartialEq, Eq)]
798#[non_exhaustive] // variants may be added in the future
799pub enum ExportFormat {
800    /// The HTML export format.
801    Html,
802    /// The markdown export format.
803    Markdown,
804    /// Catch-all used for unrecognized values returned from the server. Encountering this value
805    /// typically indicates that this SDK version is out of date.
806    Other,
807}
808
809impl<'de> ::serde::de::Deserialize<'de> for ExportFormat {
810    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
811        // union deserializer
812        use serde::de::{self, MapAccess, Visitor};
813        struct EnumVisitor;
814        impl<'de> Visitor<'de> for EnumVisitor {
815            type Value = ExportFormat;
816            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
817                f.write_str("a ExportFormat structure")
818            }
819            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
820                let tag: &str = match map.next_key()? {
821                    Some(".tag") => map.next_value()?,
822                    _ => return Err(de::Error::missing_field(".tag"))
823                };
824                let value = match tag {
825                    "html" => ExportFormat::Html,
826                    "markdown" => ExportFormat::Markdown,
827                    _ => ExportFormat::Other,
828                };
829                crate::eat_json_fields(&mut map)?;
830                Ok(value)
831            }
832        }
833        const VARIANTS: &[&str] = &["html",
834                                    "markdown",
835                                    "other"];
836        deserializer.deserialize_struct("ExportFormat", VARIANTS, EnumVisitor)
837    }
838}
839
840impl ::serde::ser::Serialize for ExportFormat {
841    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
842        // union serializer
843        use serde::ser::SerializeStruct;
844        match self {
845            ExportFormat::Html => {
846                // unit
847                let mut s = serializer.serialize_struct("ExportFormat", 1)?;
848                s.serialize_field(".tag", "html")?;
849                s.end()
850            }
851            ExportFormat::Markdown => {
852                // unit
853                let mut s = serializer.serialize_struct("ExportFormat", 1)?;
854                s.serialize_field(".tag", "markdown")?;
855                s.end()
856            }
857            ExportFormat::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
858        }
859    }
860}
861
862/// Data structure representing a Paper folder.
863#[derive(Debug, Clone, PartialEq, Eq)]
864#[non_exhaustive] // structs may have more fields added in the future.
865pub struct Folder {
866    /// Paper folder ID. This ID uniquely identifies the folder.
867    pub id: String,
868    /// Paper folder name.
869    pub name: String,
870}
871
872impl Folder {
873    pub fn new(id: String, name: String) -> Self {
874        Folder {
875            id,
876            name,
877        }
878    }
879}
880
881const FOLDER_FIELDS: &[&str] = &["id",
882                                 "name"];
883impl Folder {
884    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
885        map: V,
886    ) -> Result<Folder, V::Error> {
887        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
888    }
889
890    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
891        mut map: V,
892        optional: bool,
893    ) -> Result<Option<Folder>, V::Error> {
894        let mut field_id = None;
895        let mut field_name = None;
896        let mut nothing = true;
897        while let Some(key) = map.next_key::<&str>()? {
898            nothing = false;
899            match key {
900                "id" => {
901                    if field_id.is_some() {
902                        return Err(::serde::de::Error::duplicate_field("id"));
903                    }
904                    field_id = Some(map.next_value()?);
905                }
906                "name" => {
907                    if field_name.is_some() {
908                        return Err(::serde::de::Error::duplicate_field("name"));
909                    }
910                    field_name = Some(map.next_value()?);
911                }
912                _ => {
913                    // unknown field allowed and ignored
914                    map.next_value::<::serde_json::Value>()?;
915                }
916            }
917        }
918        if optional && nothing {
919            return Ok(None);
920        }
921        let result = Folder {
922            id: field_id.ok_or_else(|| ::serde::de::Error::missing_field("id"))?,
923            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
924        };
925        Ok(Some(result))
926    }
927
928    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
929        &self,
930        s: &mut S::SerializeStruct,
931    ) -> Result<(), S::Error> {
932        use serde::ser::SerializeStruct;
933        s.serialize_field("id", &self.id)?;
934        s.serialize_field("name", &self.name)?;
935        Ok(())
936    }
937}
938
939impl<'de> ::serde::de::Deserialize<'de> for Folder {
940    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
941        // struct deserializer
942        use serde::de::{MapAccess, Visitor};
943        struct StructVisitor;
944        impl<'de> Visitor<'de> for StructVisitor {
945            type Value = Folder;
946            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
947                f.write_str("a Folder struct")
948            }
949            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
950                Folder::internal_deserialize(map)
951            }
952        }
953        deserializer.deserialize_struct("Folder", FOLDER_FIELDS, StructVisitor)
954    }
955}
956
957impl ::serde::ser::Serialize for Folder {
958    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
959        // struct serializer
960        use serde::ser::SerializeStruct;
961        let mut s = serializer.serialize_struct("Folder", 2)?;
962        self.internal_serialize::<S>(&mut s)?;
963        s.end()
964    }
965}
966
967/// The sharing policy of a Paper folder. The sharing policy of subfolders is inherited from the
968/// root folder.
969#[derive(Debug, Clone, PartialEq, Eq)]
970pub enum FolderSharingPolicyType {
971    /// Everyone in your team and anyone directly invited can access this folder.
972    Team,
973    /// Only people directly invited can access this folder.
974    InviteOnly,
975}
976
977impl<'de> ::serde::de::Deserialize<'de> for FolderSharingPolicyType {
978    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
979        // union deserializer
980        use serde::de::{self, MapAccess, Visitor};
981        struct EnumVisitor;
982        impl<'de> Visitor<'de> for EnumVisitor {
983            type Value = FolderSharingPolicyType;
984            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
985                f.write_str("a FolderSharingPolicyType structure")
986            }
987            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
988                let tag: &str = match map.next_key()? {
989                    Some(".tag") => map.next_value()?,
990                    _ => return Err(de::Error::missing_field(".tag"))
991                };
992                let value = match tag {
993                    "team" => FolderSharingPolicyType::Team,
994                    "invite_only" => FolderSharingPolicyType::InviteOnly,
995                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
996                };
997                crate::eat_json_fields(&mut map)?;
998                Ok(value)
999            }
1000        }
1001        const VARIANTS: &[&str] = &["team",
1002                                    "invite_only"];
1003        deserializer.deserialize_struct("FolderSharingPolicyType", VARIANTS, EnumVisitor)
1004    }
1005}
1006
1007impl ::serde::ser::Serialize for FolderSharingPolicyType {
1008    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1009        // union serializer
1010        use serde::ser::SerializeStruct;
1011        match self {
1012            FolderSharingPolicyType::Team => {
1013                // unit
1014                let mut s = serializer.serialize_struct("FolderSharingPolicyType", 1)?;
1015                s.serialize_field(".tag", "team")?;
1016                s.end()
1017            }
1018            FolderSharingPolicyType::InviteOnly => {
1019                // unit
1020                let mut s = serializer.serialize_struct("FolderSharingPolicyType", 1)?;
1021                s.serialize_field(".tag", "invite_only")?;
1022                s.end()
1023            }
1024        }
1025    }
1026}
1027
1028/// The subscription level of a Paper folder.
1029#[derive(Debug, Clone, PartialEq, Eq)]
1030pub enum FolderSubscriptionLevel {
1031    /// Not shown in activity, no email messages.
1032    None,
1033    /// Shown in activity, no email messages.
1034    ActivityOnly,
1035    /// Shown in activity, daily email messages.
1036    DailyEmails,
1037    /// Shown in activity, weekly email messages.
1038    WeeklyEmails,
1039}
1040
1041impl<'de> ::serde::de::Deserialize<'de> for FolderSubscriptionLevel {
1042    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1043        // union deserializer
1044        use serde::de::{self, MapAccess, Visitor};
1045        struct EnumVisitor;
1046        impl<'de> Visitor<'de> for EnumVisitor {
1047            type Value = FolderSubscriptionLevel;
1048            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1049                f.write_str("a FolderSubscriptionLevel structure")
1050            }
1051            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1052                let tag: &str = match map.next_key()? {
1053                    Some(".tag") => map.next_value()?,
1054                    _ => return Err(de::Error::missing_field(".tag"))
1055                };
1056                let value = match tag {
1057                    "none" => FolderSubscriptionLevel::None,
1058                    "activity_only" => FolderSubscriptionLevel::ActivityOnly,
1059                    "daily_emails" => FolderSubscriptionLevel::DailyEmails,
1060                    "weekly_emails" => FolderSubscriptionLevel::WeeklyEmails,
1061                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
1062                };
1063                crate::eat_json_fields(&mut map)?;
1064                Ok(value)
1065            }
1066        }
1067        const VARIANTS: &[&str] = &["none",
1068                                    "activity_only",
1069                                    "daily_emails",
1070                                    "weekly_emails"];
1071        deserializer.deserialize_struct("FolderSubscriptionLevel", VARIANTS, EnumVisitor)
1072    }
1073}
1074
1075impl ::serde::ser::Serialize for FolderSubscriptionLevel {
1076    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1077        // union serializer
1078        use serde::ser::SerializeStruct;
1079        match self {
1080            FolderSubscriptionLevel::None => {
1081                // unit
1082                let mut s = serializer.serialize_struct("FolderSubscriptionLevel", 1)?;
1083                s.serialize_field(".tag", "none")?;
1084                s.end()
1085            }
1086            FolderSubscriptionLevel::ActivityOnly => {
1087                // unit
1088                let mut s = serializer.serialize_struct("FolderSubscriptionLevel", 1)?;
1089                s.serialize_field(".tag", "activity_only")?;
1090                s.end()
1091            }
1092            FolderSubscriptionLevel::DailyEmails => {
1093                // unit
1094                let mut s = serializer.serialize_struct("FolderSubscriptionLevel", 1)?;
1095                s.serialize_field(".tag", "daily_emails")?;
1096                s.end()
1097            }
1098            FolderSubscriptionLevel::WeeklyEmails => {
1099                // unit
1100                let mut s = serializer.serialize_struct("FolderSubscriptionLevel", 1)?;
1101                s.serialize_field(".tag", "weekly_emails")?;
1102                s.end()
1103            }
1104        }
1105    }
1106}
1107
1108/// Metadata about Paper folders containing the specififed Paper doc.
1109#[derive(Debug, Clone, PartialEq, Eq, Default)]
1110#[non_exhaustive] // structs may have more fields added in the future.
1111pub struct FoldersContainingPaperDoc {
1112    /// The sharing policy of the folder containing the Paper doc.
1113    pub folder_sharing_policy_type: Option<FolderSharingPolicyType>,
1114    /// The folder path. If present the first folder is the root folder.
1115    pub folders: Option<Vec<Folder>>,
1116}
1117
1118impl FoldersContainingPaperDoc {
1119    pub fn with_folder_sharing_policy_type(mut self, value: FolderSharingPolicyType) -> Self {
1120        self.folder_sharing_policy_type = Some(value);
1121        self
1122    }
1123
1124    pub fn with_folders(mut self, value: Vec<Folder>) -> Self {
1125        self.folders = Some(value);
1126        self
1127    }
1128}
1129
1130const FOLDERS_CONTAINING_PAPER_DOC_FIELDS: &[&str] = &["folder_sharing_policy_type",
1131                                                       "folders"];
1132impl FoldersContainingPaperDoc {
1133    // no _opt deserializer
1134    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1135        mut map: V,
1136    ) -> Result<FoldersContainingPaperDoc, V::Error> {
1137        let mut field_folder_sharing_policy_type = None;
1138        let mut field_folders = None;
1139        while let Some(key) = map.next_key::<&str>()? {
1140            match key {
1141                "folder_sharing_policy_type" => {
1142                    if field_folder_sharing_policy_type.is_some() {
1143                        return Err(::serde::de::Error::duplicate_field("folder_sharing_policy_type"));
1144                    }
1145                    field_folder_sharing_policy_type = Some(map.next_value()?);
1146                }
1147                "folders" => {
1148                    if field_folders.is_some() {
1149                        return Err(::serde::de::Error::duplicate_field("folders"));
1150                    }
1151                    field_folders = Some(map.next_value()?);
1152                }
1153                _ => {
1154                    // unknown field allowed and ignored
1155                    map.next_value::<::serde_json::Value>()?;
1156                }
1157            }
1158        }
1159        let result = FoldersContainingPaperDoc {
1160            folder_sharing_policy_type: field_folder_sharing_policy_type.and_then(Option::flatten),
1161            folders: field_folders.and_then(Option::flatten),
1162        };
1163        Ok(result)
1164    }
1165
1166    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1167        &self,
1168        s: &mut S::SerializeStruct,
1169    ) -> Result<(), S::Error> {
1170        use serde::ser::SerializeStruct;
1171        if let Some(val) = &self.folder_sharing_policy_type {
1172            s.serialize_field("folder_sharing_policy_type", val)?;
1173        }
1174        if let Some(val) = &self.folders {
1175            s.serialize_field("folders", val)?;
1176        }
1177        Ok(())
1178    }
1179}
1180
1181impl<'de> ::serde::de::Deserialize<'de> for FoldersContainingPaperDoc {
1182    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1183        // struct deserializer
1184        use serde::de::{MapAccess, Visitor};
1185        struct StructVisitor;
1186        impl<'de> Visitor<'de> for StructVisitor {
1187            type Value = FoldersContainingPaperDoc;
1188            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1189                f.write_str("a FoldersContainingPaperDoc struct")
1190            }
1191            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1192                FoldersContainingPaperDoc::internal_deserialize(map)
1193            }
1194        }
1195        deserializer.deserialize_struct("FoldersContainingPaperDoc", FOLDERS_CONTAINING_PAPER_DOC_FIELDS, StructVisitor)
1196    }
1197}
1198
1199impl ::serde::ser::Serialize for FoldersContainingPaperDoc {
1200    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1201        // struct serializer
1202        use serde::ser::SerializeStruct;
1203        let mut s = serializer.serialize_struct("FoldersContainingPaperDoc", 2)?;
1204        self.internal_serialize::<S>(&mut s)?;
1205        s.end()
1206    }
1207}
1208
1209/// The import format of the incoming data.
1210#[derive(Debug, Clone, PartialEq, Eq)]
1211#[non_exhaustive] // variants may be added in the future
1212pub enum ImportFormat {
1213    /// The provided data is interpreted as standard HTML.
1214    Html,
1215    /// The provided data is interpreted as markdown. The first line of the provided document will
1216    /// be used as the doc title.
1217    Markdown,
1218    /// The provided data is interpreted as plain text. The first line of the provided document will
1219    /// be used as the doc title.
1220    PlainText,
1221    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1222    /// typically indicates that this SDK version is out of date.
1223    Other,
1224}
1225
1226impl<'de> ::serde::de::Deserialize<'de> for ImportFormat {
1227    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1228        // union deserializer
1229        use serde::de::{self, MapAccess, Visitor};
1230        struct EnumVisitor;
1231        impl<'de> Visitor<'de> for EnumVisitor {
1232            type Value = ImportFormat;
1233            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1234                f.write_str("a ImportFormat structure")
1235            }
1236            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1237                let tag: &str = match map.next_key()? {
1238                    Some(".tag") => map.next_value()?,
1239                    _ => return Err(de::Error::missing_field(".tag"))
1240                };
1241                let value = match tag {
1242                    "html" => ImportFormat::Html,
1243                    "markdown" => ImportFormat::Markdown,
1244                    "plain_text" => ImportFormat::PlainText,
1245                    _ => ImportFormat::Other,
1246                };
1247                crate::eat_json_fields(&mut map)?;
1248                Ok(value)
1249            }
1250        }
1251        const VARIANTS: &[&str] = &["html",
1252                                    "markdown",
1253                                    "plain_text",
1254                                    "other"];
1255        deserializer.deserialize_struct("ImportFormat", VARIANTS, EnumVisitor)
1256    }
1257}
1258
1259impl ::serde::ser::Serialize for ImportFormat {
1260    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1261        // union serializer
1262        use serde::ser::SerializeStruct;
1263        match self {
1264            ImportFormat::Html => {
1265                // unit
1266                let mut s = serializer.serialize_struct("ImportFormat", 1)?;
1267                s.serialize_field(".tag", "html")?;
1268                s.end()
1269            }
1270            ImportFormat::Markdown => {
1271                // unit
1272                let mut s = serializer.serialize_struct("ImportFormat", 1)?;
1273                s.serialize_field(".tag", "markdown")?;
1274                s.end()
1275            }
1276            ImportFormat::PlainText => {
1277                // unit
1278                let mut s = serializer.serialize_struct("ImportFormat", 1)?;
1279                s.serialize_field(".tag", "plain_text")?;
1280                s.end()
1281            }
1282            ImportFormat::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1283        }
1284    }
1285}
1286
1287#[derive(Debug, Clone, PartialEq, Eq)]
1288#[non_exhaustive] // structs may have more fields added in the future.
1289pub struct InviteeInfoWithPermissionLevel {
1290    /// Email address invited to the Paper doc.
1291    pub invitee: crate::types::sharing::InviteeInfo,
1292    /// Permission level for the invitee.
1293    pub permission_level: PaperDocPermissionLevel,
1294}
1295
1296impl InviteeInfoWithPermissionLevel {
1297    pub fn new(
1298        invitee: crate::types::sharing::InviteeInfo,
1299        permission_level: PaperDocPermissionLevel,
1300    ) -> Self {
1301        InviteeInfoWithPermissionLevel {
1302            invitee,
1303            permission_level,
1304        }
1305    }
1306}
1307
1308const INVITEE_INFO_WITH_PERMISSION_LEVEL_FIELDS: &[&str] = &["invitee",
1309                                                             "permission_level"];
1310impl InviteeInfoWithPermissionLevel {
1311    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1312        map: V,
1313    ) -> Result<InviteeInfoWithPermissionLevel, V::Error> {
1314        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1315    }
1316
1317    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1318        mut map: V,
1319        optional: bool,
1320    ) -> Result<Option<InviteeInfoWithPermissionLevel>, V::Error> {
1321        let mut field_invitee = None;
1322        let mut field_permission_level = None;
1323        let mut nothing = true;
1324        while let Some(key) = map.next_key::<&str>()? {
1325            nothing = false;
1326            match key {
1327                "invitee" => {
1328                    if field_invitee.is_some() {
1329                        return Err(::serde::de::Error::duplicate_field("invitee"));
1330                    }
1331                    field_invitee = Some(map.next_value()?);
1332                }
1333                "permission_level" => {
1334                    if field_permission_level.is_some() {
1335                        return Err(::serde::de::Error::duplicate_field("permission_level"));
1336                    }
1337                    field_permission_level = Some(map.next_value()?);
1338                }
1339                _ => {
1340                    // unknown field allowed and ignored
1341                    map.next_value::<::serde_json::Value>()?;
1342                }
1343            }
1344        }
1345        if optional && nothing {
1346            return Ok(None);
1347        }
1348        let result = InviteeInfoWithPermissionLevel {
1349            invitee: field_invitee.ok_or_else(|| ::serde::de::Error::missing_field("invitee"))?,
1350            permission_level: field_permission_level.ok_or_else(|| ::serde::de::Error::missing_field("permission_level"))?,
1351        };
1352        Ok(Some(result))
1353    }
1354
1355    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1356        &self,
1357        s: &mut S::SerializeStruct,
1358    ) -> Result<(), S::Error> {
1359        use serde::ser::SerializeStruct;
1360        s.serialize_field("invitee", &self.invitee)?;
1361        s.serialize_field("permission_level", &self.permission_level)?;
1362        Ok(())
1363    }
1364}
1365
1366impl<'de> ::serde::de::Deserialize<'de> for InviteeInfoWithPermissionLevel {
1367    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1368        // struct deserializer
1369        use serde::de::{MapAccess, Visitor};
1370        struct StructVisitor;
1371        impl<'de> Visitor<'de> for StructVisitor {
1372            type Value = InviteeInfoWithPermissionLevel;
1373            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1374                f.write_str("a InviteeInfoWithPermissionLevel struct")
1375            }
1376            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1377                InviteeInfoWithPermissionLevel::internal_deserialize(map)
1378            }
1379        }
1380        deserializer.deserialize_struct("InviteeInfoWithPermissionLevel", INVITEE_INFO_WITH_PERMISSION_LEVEL_FIELDS, StructVisitor)
1381    }
1382}
1383
1384impl ::serde::ser::Serialize for InviteeInfoWithPermissionLevel {
1385    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1386        // struct serializer
1387        use serde::ser::SerializeStruct;
1388        let mut s = serializer.serialize_struct("InviteeInfoWithPermissionLevel", 2)?;
1389        self.internal_serialize::<S>(&mut s)?;
1390        s.end()
1391    }
1392}
1393
1394#[derive(Debug, Clone, PartialEq, Eq)]
1395#[non_exhaustive] // variants may be added in the future
1396pub enum ListDocsCursorError {
1397    CursorError(PaperApiCursorError),
1398    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1399    /// typically indicates that this SDK version is out of date.
1400    Other,
1401}
1402
1403impl<'de> ::serde::de::Deserialize<'de> for ListDocsCursorError {
1404    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1405        // union deserializer
1406        use serde::de::{self, MapAccess, Visitor};
1407        struct EnumVisitor;
1408        impl<'de> Visitor<'de> for EnumVisitor {
1409            type Value = ListDocsCursorError;
1410            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1411                f.write_str("a ListDocsCursorError structure")
1412            }
1413            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1414                let tag: &str = match map.next_key()? {
1415                    Some(".tag") => map.next_value()?,
1416                    _ => return Err(de::Error::missing_field(".tag"))
1417                };
1418                let value = match tag {
1419                    "cursor_error" => {
1420                        match map.next_key()? {
1421                            Some("cursor_error") => ListDocsCursorError::CursorError(map.next_value()?),
1422                            None => return Err(de::Error::missing_field("cursor_error")),
1423                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
1424                        }
1425                    }
1426                    _ => ListDocsCursorError::Other,
1427                };
1428                crate::eat_json_fields(&mut map)?;
1429                Ok(value)
1430            }
1431        }
1432        const VARIANTS: &[&str] = &["cursor_error",
1433                                    "other"];
1434        deserializer.deserialize_struct("ListDocsCursorError", VARIANTS, EnumVisitor)
1435    }
1436}
1437
1438impl ::serde::ser::Serialize for ListDocsCursorError {
1439    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1440        // union serializer
1441        use serde::ser::SerializeStruct;
1442        match self {
1443            ListDocsCursorError::CursorError(x) => {
1444                // union or polymporphic struct
1445                let mut s = serializer.serialize_struct("ListDocsCursorError", 2)?;
1446                s.serialize_field(".tag", "cursor_error")?;
1447                s.serialize_field("cursor_error", x)?;
1448                s.end()
1449            }
1450            ListDocsCursorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1451        }
1452    }
1453}
1454
1455impl ::std::error::Error for ListDocsCursorError {
1456    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
1457        match self {
1458            ListDocsCursorError::CursorError(inner) => Some(inner),
1459            _ => None,
1460        }
1461    }
1462}
1463
1464impl ::std::fmt::Display for ListDocsCursorError {
1465    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1466        match self {
1467            ListDocsCursorError::CursorError(inner) => write!(f, "ListDocsCursorError: {}", inner),
1468            _ => write!(f, "{:?}", *self),
1469        }
1470    }
1471}
1472
1473#[derive(Debug, Clone, PartialEq, Eq)]
1474#[non_exhaustive] // structs may have more fields added in the future.
1475pub struct ListPaperDocsArgs {
1476    /// Allows user to specify how the Paper docs should be filtered.
1477    pub filter_by: ListPaperDocsFilterBy,
1478    /// Allows user to specify how the Paper docs should be sorted.
1479    pub sort_by: ListPaperDocsSortBy,
1480    /// Allows user to specify the sort order of the result.
1481    pub sort_order: ListPaperDocsSortOrder,
1482    /// Size limit per batch. The maximum number of docs that can be retrieved per batch is 1000.
1483    /// Higher value results in invalid arguments error.
1484    pub limit: i32,
1485}
1486
1487impl Default for ListPaperDocsArgs {
1488    fn default() -> Self {
1489        ListPaperDocsArgs {
1490            filter_by: ListPaperDocsFilterBy::DocsAccessed,
1491            sort_by: ListPaperDocsSortBy::Accessed,
1492            sort_order: ListPaperDocsSortOrder::Ascending,
1493            limit: 1000,
1494        }
1495    }
1496}
1497
1498impl ListPaperDocsArgs {
1499    pub fn with_filter_by(mut self, value: ListPaperDocsFilterBy) -> Self {
1500        self.filter_by = value;
1501        self
1502    }
1503
1504    pub fn with_sort_by(mut self, value: ListPaperDocsSortBy) -> Self {
1505        self.sort_by = value;
1506        self
1507    }
1508
1509    pub fn with_sort_order(mut self, value: ListPaperDocsSortOrder) -> Self {
1510        self.sort_order = value;
1511        self
1512    }
1513
1514    pub fn with_limit(mut self, value: i32) -> Self {
1515        self.limit = value;
1516        self
1517    }
1518}
1519
1520const LIST_PAPER_DOCS_ARGS_FIELDS: &[&str] = &["filter_by",
1521                                               "sort_by",
1522                                               "sort_order",
1523                                               "limit"];
1524impl ListPaperDocsArgs {
1525    // no _opt deserializer
1526    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1527        mut map: V,
1528    ) -> Result<ListPaperDocsArgs, V::Error> {
1529        let mut field_filter_by = None;
1530        let mut field_sort_by = None;
1531        let mut field_sort_order = None;
1532        let mut field_limit = None;
1533        while let Some(key) = map.next_key::<&str>()? {
1534            match key {
1535                "filter_by" => {
1536                    if field_filter_by.is_some() {
1537                        return Err(::serde::de::Error::duplicate_field("filter_by"));
1538                    }
1539                    field_filter_by = Some(map.next_value()?);
1540                }
1541                "sort_by" => {
1542                    if field_sort_by.is_some() {
1543                        return Err(::serde::de::Error::duplicate_field("sort_by"));
1544                    }
1545                    field_sort_by = Some(map.next_value()?);
1546                }
1547                "sort_order" => {
1548                    if field_sort_order.is_some() {
1549                        return Err(::serde::de::Error::duplicate_field("sort_order"));
1550                    }
1551                    field_sort_order = Some(map.next_value()?);
1552                }
1553                "limit" => {
1554                    if field_limit.is_some() {
1555                        return Err(::serde::de::Error::duplicate_field("limit"));
1556                    }
1557                    field_limit = Some(map.next_value()?);
1558                }
1559                _ => {
1560                    // unknown field allowed and ignored
1561                    map.next_value::<::serde_json::Value>()?;
1562                }
1563            }
1564        }
1565        let result = ListPaperDocsArgs {
1566            filter_by: field_filter_by.unwrap_or(ListPaperDocsFilterBy::DocsAccessed),
1567            sort_by: field_sort_by.unwrap_or(ListPaperDocsSortBy::Accessed),
1568            sort_order: field_sort_order.unwrap_or(ListPaperDocsSortOrder::Ascending),
1569            limit: field_limit.unwrap_or(1000),
1570        };
1571        Ok(result)
1572    }
1573
1574    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1575        &self,
1576        s: &mut S::SerializeStruct,
1577    ) -> Result<(), S::Error> {
1578        use serde::ser::SerializeStruct;
1579        if self.filter_by != ListPaperDocsFilterBy::DocsAccessed {
1580            s.serialize_field("filter_by", &self.filter_by)?;
1581        }
1582        if self.sort_by != ListPaperDocsSortBy::Accessed {
1583            s.serialize_field("sort_by", &self.sort_by)?;
1584        }
1585        if self.sort_order != ListPaperDocsSortOrder::Ascending {
1586            s.serialize_field("sort_order", &self.sort_order)?;
1587        }
1588        if self.limit != 1000 {
1589            s.serialize_field("limit", &self.limit)?;
1590        }
1591        Ok(())
1592    }
1593}
1594
1595impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsArgs {
1596    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1597        // struct deserializer
1598        use serde::de::{MapAccess, Visitor};
1599        struct StructVisitor;
1600        impl<'de> Visitor<'de> for StructVisitor {
1601            type Value = ListPaperDocsArgs;
1602            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1603                f.write_str("a ListPaperDocsArgs struct")
1604            }
1605            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1606                ListPaperDocsArgs::internal_deserialize(map)
1607            }
1608        }
1609        deserializer.deserialize_struct("ListPaperDocsArgs", LIST_PAPER_DOCS_ARGS_FIELDS, StructVisitor)
1610    }
1611}
1612
1613impl ::serde::ser::Serialize for ListPaperDocsArgs {
1614    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1615        // struct serializer
1616        use serde::ser::SerializeStruct;
1617        let mut s = serializer.serialize_struct("ListPaperDocsArgs", 4)?;
1618        self.internal_serialize::<S>(&mut s)?;
1619        s.end()
1620    }
1621}
1622
1623#[derive(Debug, Clone, PartialEq, Eq)]
1624#[non_exhaustive] // structs may have more fields added in the future.
1625pub struct ListPaperDocsContinueArgs {
1626    /// The cursor obtained from [`docs_list()`](crate::paper::docs_list) or
1627    /// [`docs_list_continue()`](crate::paper::docs_list_continue). Allows for pagination.
1628    pub cursor: String,
1629}
1630
1631impl ListPaperDocsContinueArgs {
1632    pub fn new(cursor: String) -> Self {
1633        ListPaperDocsContinueArgs {
1634            cursor,
1635        }
1636    }
1637}
1638
1639const LIST_PAPER_DOCS_CONTINUE_ARGS_FIELDS: &[&str] = &["cursor"];
1640impl ListPaperDocsContinueArgs {
1641    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1642        map: V,
1643    ) -> Result<ListPaperDocsContinueArgs, V::Error> {
1644        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1645    }
1646
1647    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1648        mut map: V,
1649        optional: bool,
1650    ) -> Result<Option<ListPaperDocsContinueArgs>, V::Error> {
1651        let mut field_cursor = None;
1652        let mut nothing = true;
1653        while let Some(key) = map.next_key::<&str>()? {
1654            nothing = false;
1655            match key {
1656                "cursor" => {
1657                    if field_cursor.is_some() {
1658                        return Err(::serde::de::Error::duplicate_field("cursor"));
1659                    }
1660                    field_cursor = Some(map.next_value()?);
1661                }
1662                _ => {
1663                    // unknown field allowed and ignored
1664                    map.next_value::<::serde_json::Value>()?;
1665                }
1666            }
1667        }
1668        if optional && nothing {
1669            return Ok(None);
1670        }
1671        let result = ListPaperDocsContinueArgs {
1672            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
1673        };
1674        Ok(Some(result))
1675    }
1676
1677    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1678        &self,
1679        s: &mut S::SerializeStruct,
1680    ) -> Result<(), S::Error> {
1681        use serde::ser::SerializeStruct;
1682        s.serialize_field("cursor", &self.cursor)?;
1683        Ok(())
1684    }
1685}
1686
1687impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsContinueArgs {
1688    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1689        // struct deserializer
1690        use serde::de::{MapAccess, Visitor};
1691        struct StructVisitor;
1692        impl<'de> Visitor<'de> for StructVisitor {
1693            type Value = ListPaperDocsContinueArgs;
1694            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1695                f.write_str("a ListPaperDocsContinueArgs struct")
1696            }
1697            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1698                ListPaperDocsContinueArgs::internal_deserialize(map)
1699            }
1700        }
1701        deserializer.deserialize_struct("ListPaperDocsContinueArgs", LIST_PAPER_DOCS_CONTINUE_ARGS_FIELDS, StructVisitor)
1702    }
1703}
1704
1705impl ::serde::ser::Serialize for ListPaperDocsContinueArgs {
1706    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1707        // struct serializer
1708        use serde::ser::SerializeStruct;
1709        let mut s = serializer.serialize_struct("ListPaperDocsContinueArgs", 1)?;
1710        self.internal_serialize::<S>(&mut s)?;
1711        s.end()
1712    }
1713}
1714
1715#[derive(Debug, Clone, PartialEq, Eq)]
1716#[non_exhaustive] // variants may be added in the future
1717pub enum ListPaperDocsFilterBy {
1718    /// Fetches all Paper doc IDs that the user has ever accessed.
1719    DocsAccessed,
1720    /// Fetches only the Paper doc IDs that the user has created.
1721    DocsCreated,
1722    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1723    /// typically indicates that this SDK version is out of date.
1724    Other,
1725}
1726
1727impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsFilterBy {
1728    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1729        // union deserializer
1730        use serde::de::{self, MapAccess, Visitor};
1731        struct EnumVisitor;
1732        impl<'de> Visitor<'de> for EnumVisitor {
1733            type Value = ListPaperDocsFilterBy;
1734            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1735                f.write_str("a ListPaperDocsFilterBy structure")
1736            }
1737            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1738                let tag: &str = match map.next_key()? {
1739                    Some(".tag") => map.next_value()?,
1740                    _ => return Err(de::Error::missing_field(".tag"))
1741                };
1742                let value = match tag {
1743                    "docs_accessed" => ListPaperDocsFilterBy::DocsAccessed,
1744                    "docs_created" => ListPaperDocsFilterBy::DocsCreated,
1745                    _ => ListPaperDocsFilterBy::Other,
1746                };
1747                crate::eat_json_fields(&mut map)?;
1748                Ok(value)
1749            }
1750        }
1751        const VARIANTS: &[&str] = &["docs_accessed",
1752                                    "docs_created",
1753                                    "other"];
1754        deserializer.deserialize_struct("ListPaperDocsFilterBy", VARIANTS, EnumVisitor)
1755    }
1756}
1757
1758impl ::serde::ser::Serialize for ListPaperDocsFilterBy {
1759    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1760        // union serializer
1761        use serde::ser::SerializeStruct;
1762        match self {
1763            ListPaperDocsFilterBy::DocsAccessed => {
1764                // unit
1765                let mut s = serializer.serialize_struct("ListPaperDocsFilterBy", 1)?;
1766                s.serialize_field(".tag", "docs_accessed")?;
1767                s.end()
1768            }
1769            ListPaperDocsFilterBy::DocsCreated => {
1770                // unit
1771                let mut s = serializer.serialize_struct("ListPaperDocsFilterBy", 1)?;
1772                s.serialize_field(".tag", "docs_created")?;
1773                s.end()
1774            }
1775            ListPaperDocsFilterBy::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1776        }
1777    }
1778}
1779
1780#[derive(Debug, Clone, PartialEq, Eq)]
1781#[non_exhaustive] // structs may have more fields added in the future.
1782pub struct ListPaperDocsResponse {
1783    /// The list of Paper doc IDs that can be used to access the given Paper docs or supplied to
1784    /// other API methods. The list is sorted in the order specified by the initial call to
1785    /// [`docs_list()`](crate::paper::docs_list).
1786    pub doc_ids: Vec<PaperDocId>,
1787    /// Pass the cursor into [`docs_list_continue()`](crate::paper::docs_list_continue) to paginate
1788    /// through all files. The cursor preserves all properties as specified in the original call to
1789    /// [`docs_list()`](crate::paper::docs_list).
1790    pub cursor: Cursor,
1791    /// Will be set to True if a subsequent call with the provided cursor to
1792    /// [`docs_list_continue()`](crate::paper::docs_list_continue) returns immediately with some
1793    /// results. If set to False please allow some delay before making another call to
1794    /// [`docs_list_continue()`](crate::paper::docs_list_continue).
1795    pub has_more: bool,
1796}
1797
1798impl ListPaperDocsResponse {
1799    pub fn new(doc_ids: Vec<PaperDocId>, cursor: Cursor, has_more: bool) -> Self {
1800        ListPaperDocsResponse {
1801            doc_ids,
1802            cursor,
1803            has_more,
1804        }
1805    }
1806}
1807
1808const LIST_PAPER_DOCS_RESPONSE_FIELDS: &[&str] = &["doc_ids",
1809                                                   "cursor",
1810                                                   "has_more"];
1811impl ListPaperDocsResponse {
1812    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
1813        map: V,
1814    ) -> Result<ListPaperDocsResponse, V::Error> {
1815        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
1816    }
1817
1818    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
1819        mut map: V,
1820        optional: bool,
1821    ) -> Result<Option<ListPaperDocsResponse>, V::Error> {
1822        let mut field_doc_ids = None;
1823        let mut field_cursor = None;
1824        let mut field_has_more = None;
1825        let mut nothing = true;
1826        while let Some(key) = map.next_key::<&str>()? {
1827            nothing = false;
1828            match key {
1829                "doc_ids" => {
1830                    if field_doc_ids.is_some() {
1831                        return Err(::serde::de::Error::duplicate_field("doc_ids"));
1832                    }
1833                    field_doc_ids = Some(map.next_value()?);
1834                }
1835                "cursor" => {
1836                    if field_cursor.is_some() {
1837                        return Err(::serde::de::Error::duplicate_field("cursor"));
1838                    }
1839                    field_cursor = Some(map.next_value()?);
1840                }
1841                "has_more" => {
1842                    if field_has_more.is_some() {
1843                        return Err(::serde::de::Error::duplicate_field("has_more"));
1844                    }
1845                    field_has_more = Some(map.next_value()?);
1846                }
1847                _ => {
1848                    // unknown field allowed and ignored
1849                    map.next_value::<::serde_json::Value>()?;
1850                }
1851            }
1852        }
1853        if optional && nothing {
1854            return Ok(None);
1855        }
1856        let result = ListPaperDocsResponse {
1857            doc_ids: field_doc_ids.ok_or_else(|| ::serde::de::Error::missing_field("doc_ids"))?,
1858            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
1859            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
1860        };
1861        Ok(Some(result))
1862    }
1863
1864    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
1865        &self,
1866        s: &mut S::SerializeStruct,
1867    ) -> Result<(), S::Error> {
1868        use serde::ser::SerializeStruct;
1869        s.serialize_field("doc_ids", &self.doc_ids)?;
1870        s.serialize_field("cursor", &self.cursor)?;
1871        s.serialize_field("has_more", &self.has_more)?;
1872        Ok(())
1873    }
1874}
1875
1876impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsResponse {
1877    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1878        // struct deserializer
1879        use serde::de::{MapAccess, Visitor};
1880        struct StructVisitor;
1881        impl<'de> Visitor<'de> for StructVisitor {
1882            type Value = ListPaperDocsResponse;
1883            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1884                f.write_str("a ListPaperDocsResponse struct")
1885            }
1886            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
1887                ListPaperDocsResponse::internal_deserialize(map)
1888            }
1889        }
1890        deserializer.deserialize_struct("ListPaperDocsResponse", LIST_PAPER_DOCS_RESPONSE_FIELDS, StructVisitor)
1891    }
1892}
1893
1894impl ::serde::ser::Serialize for ListPaperDocsResponse {
1895    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1896        // struct serializer
1897        use serde::ser::SerializeStruct;
1898        let mut s = serializer.serialize_struct("ListPaperDocsResponse", 3)?;
1899        self.internal_serialize::<S>(&mut s)?;
1900        s.end()
1901    }
1902}
1903
1904#[derive(Debug, Clone, PartialEq, Eq)]
1905#[non_exhaustive] // variants may be added in the future
1906pub enum ListPaperDocsSortBy {
1907    /// Sorts the Paper docs by the time they were last accessed.
1908    Accessed,
1909    /// Sorts the Paper docs by the time they were last modified.
1910    Modified,
1911    /// Sorts the Paper docs by the creation time.
1912    Created,
1913    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1914    /// typically indicates that this SDK version is out of date.
1915    Other,
1916}
1917
1918impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsSortBy {
1919    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1920        // union deserializer
1921        use serde::de::{self, MapAccess, Visitor};
1922        struct EnumVisitor;
1923        impl<'de> Visitor<'de> for EnumVisitor {
1924            type Value = ListPaperDocsSortBy;
1925            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1926                f.write_str("a ListPaperDocsSortBy structure")
1927            }
1928            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
1929                let tag: &str = match map.next_key()? {
1930                    Some(".tag") => map.next_value()?,
1931                    _ => return Err(de::Error::missing_field(".tag"))
1932                };
1933                let value = match tag {
1934                    "accessed" => ListPaperDocsSortBy::Accessed,
1935                    "modified" => ListPaperDocsSortBy::Modified,
1936                    "created" => ListPaperDocsSortBy::Created,
1937                    _ => ListPaperDocsSortBy::Other,
1938                };
1939                crate::eat_json_fields(&mut map)?;
1940                Ok(value)
1941            }
1942        }
1943        const VARIANTS: &[&str] = &["accessed",
1944                                    "modified",
1945                                    "created",
1946                                    "other"];
1947        deserializer.deserialize_struct("ListPaperDocsSortBy", VARIANTS, EnumVisitor)
1948    }
1949}
1950
1951impl ::serde::ser::Serialize for ListPaperDocsSortBy {
1952    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
1953        // union serializer
1954        use serde::ser::SerializeStruct;
1955        match self {
1956            ListPaperDocsSortBy::Accessed => {
1957                // unit
1958                let mut s = serializer.serialize_struct("ListPaperDocsSortBy", 1)?;
1959                s.serialize_field(".tag", "accessed")?;
1960                s.end()
1961            }
1962            ListPaperDocsSortBy::Modified => {
1963                // unit
1964                let mut s = serializer.serialize_struct("ListPaperDocsSortBy", 1)?;
1965                s.serialize_field(".tag", "modified")?;
1966                s.end()
1967            }
1968            ListPaperDocsSortBy::Created => {
1969                // unit
1970                let mut s = serializer.serialize_struct("ListPaperDocsSortBy", 1)?;
1971                s.serialize_field(".tag", "created")?;
1972                s.end()
1973            }
1974            ListPaperDocsSortBy::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
1975        }
1976    }
1977}
1978
1979#[derive(Debug, Clone, PartialEq, Eq)]
1980#[non_exhaustive] // variants may be added in the future
1981pub enum ListPaperDocsSortOrder {
1982    /// Sorts the search result in ascending order.
1983    Ascending,
1984    /// Sorts the search result in descending order.
1985    Descending,
1986    /// Catch-all used for unrecognized values returned from the server. Encountering this value
1987    /// typically indicates that this SDK version is out of date.
1988    Other,
1989}
1990
1991impl<'de> ::serde::de::Deserialize<'de> for ListPaperDocsSortOrder {
1992    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1993        // union deserializer
1994        use serde::de::{self, MapAccess, Visitor};
1995        struct EnumVisitor;
1996        impl<'de> Visitor<'de> for EnumVisitor {
1997            type Value = ListPaperDocsSortOrder;
1998            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
1999                f.write_str("a ListPaperDocsSortOrder structure")
2000            }
2001            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2002                let tag: &str = match map.next_key()? {
2003                    Some(".tag") => map.next_value()?,
2004                    _ => return Err(de::Error::missing_field(".tag"))
2005                };
2006                let value = match tag {
2007                    "ascending" => ListPaperDocsSortOrder::Ascending,
2008                    "descending" => ListPaperDocsSortOrder::Descending,
2009                    _ => ListPaperDocsSortOrder::Other,
2010                };
2011                crate::eat_json_fields(&mut map)?;
2012                Ok(value)
2013            }
2014        }
2015        const VARIANTS: &[&str] = &["ascending",
2016                                    "descending",
2017                                    "other"];
2018        deserializer.deserialize_struct("ListPaperDocsSortOrder", VARIANTS, EnumVisitor)
2019    }
2020}
2021
2022impl ::serde::ser::Serialize for ListPaperDocsSortOrder {
2023    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2024        // union serializer
2025        use serde::ser::SerializeStruct;
2026        match self {
2027            ListPaperDocsSortOrder::Ascending => {
2028                // unit
2029                let mut s = serializer.serialize_struct("ListPaperDocsSortOrder", 1)?;
2030                s.serialize_field(".tag", "ascending")?;
2031                s.end()
2032            }
2033            ListPaperDocsSortOrder::Descending => {
2034                // unit
2035                let mut s = serializer.serialize_struct("ListPaperDocsSortOrder", 1)?;
2036                s.serialize_field(".tag", "descending")?;
2037                s.end()
2038            }
2039            ListPaperDocsSortOrder::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2040        }
2041    }
2042}
2043
2044#[derive(Debug, Clone, PartialEq, Eq)]
2045#[non_exhaustive] // variants may be added in the future
2046pub enum ListUsersCursorError {
2047    /// Your account does not have permissions to perform this action. This may be due to it only
2048    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
2049    /// the [Paper Migration
2050    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
2051    InsufficientPermissions,
2052    /// The required doc was not found.
2053    DocNotFound,
2054    CursorError(PaperApiCursorError),
2055    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2056    /// typically indicates that this SDK version is out of date.
2057    Other,
2058}
2059
2060impl<'de> ::serde::de::Deserialize<'de> for ListUsersCursorError {
2061    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2062        // union deserializer
2063        use serde::de::{self, MapAccess, Visitor};
2064        struct EnumVisitor;
2065        impl<'de> Visitor<'de> for EnumVisitor {
2066            type Value = ListUsersCursorError;
2067            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2068                f.write_str("a ListUsersCursorError structure")
2069            }
2070            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2071                let tag: &str = match map.next_key()? {
2072                    Some(".tag") => map.next_value()?,
2073                    _ => return Err(de::Error::missing_field(".tag"))
2074                };
2075                let value = match tag {
2076                    "insufficient_permissions" => ListUsersCursorError::InsufficientPermissions,
2077                    "doc_not_found" => ListUsersCursorError::DocNotFound,
2078                    "cursor_error" => {
2079                        match map.next_key()? {
2080                            Some("cursor_error") => ListUsersCursorError::CursorError(map.next_value()?),
2081                            None => return Err(de::Error::missing_field("cursor_error")),
2082                            _ => return Err(de::Error::unknown_field(tag, VARIANTS))
2083                        }
2084                    }
2085                    _ => ListUsersCursorError::Other,
2086                };
2087                crate::eat_json_fields(&mut map)?;
2088                Ok(value)
2089            }
2090        }
2091        const VARIANTS: &[&str] = &["insufficient_permissions",
2092                                    "other",
2093                                    "doc_not_found",
2094                                    "cursor_error"];
2095        deserializer.deserialize_struct("ListUsersCursorError", VARIANTS, EnumVisitor)
2096    }
2097}
2098
2099impl ::serde::ser::Serialize for ListUsersCursorError {
2100    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2101        // union serializer
2102        use serde::ser::SerializeStruct;
2103        match self {
2104            ListUsersCursorError::InsufficientPermissions => {
2105                // unit
2106                let mut s = serializer.serialize_struct("ListUsersCursorError", 1)?;
2107                s.serialize_field(".tag", "insufficient_permissions")?;
2108                s.end()
2109            }
2110            ListUsersCursorError::DocNotFound => {
2111                // unit
2112                let mut s = serializer.serialize_struct("ListUsersCursorError", 1)?;
2113                s.serialize_field(".tag", "doc_not_found")?;
2114                s.end()
2115            }
2116            ListUsersCursorError::CursorError(x) => {
2117                // union or polymporphic struct
2118                let mut s = serializer.serialize_struct("ListUsersCursorError", 2)?;
2119                s.serialize_field(".tag", "cursor_error")?;
2120                s.serialize_field("cursor_error", x)?;
2121                s.end()
2122            }
2123            ListUsersCursorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2124        }
2125    }
2126}
2127
2128impl ::std::error::Error for ListUsersCursorError {
2129    fn source(&self) -> Option<&(dyn ::std::error::Error + 'static)> {
2130        match self {
2131            ListUsersCursorError::CursorError(inner) => Some(inner),
2132            _ => None,
2133        }
2134    }
2135}
2136
2137impl ::std::fmt::Display for ListUsersCursorError {
2138    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2139        match self {
2140            ListUsersCursorError::DocNotFound => f.write_str("The required doc was not found."),
2141            ListUsersCursorError::CursorError(inner) => write!(f, "ListUsersCursorError: {}", inner),
2142            _ => write!(f, "{:?}", *self),
2143        }
2144    }
2145}
2146
2147// union extends PaperApiBaseError
2148impl From<PaperApiBaseError> for ListUsersCursorError {
2149    fn from(parent: PaperApiBaseError) -> Self {
2150        match parent {
2151            PaperApiBaseError::InsufficientPermissions => ListUsersCursorError::InsufficientPermissions,
2152            PaperApiBaseError::Other => ListUsersCursorError::Other,
2153        }
2154    }
2155}
2156#[derive(Debug, Clone, PartialEq, Eq)]
2157#[non_exhaustive] // structs may have more fields added in the future.
2158pub struct ListUsersOnFolderArgs {
2159    /// The Paper doc ID.
2160    pub doc_id: PaperDocId,
2161    /// Size limit per batch. The maximum number of users that can be retrieved per batch is 1000.
2162    /// Higher value results in invalid arguments error.
2163    pub limit: i32,
2164}
2165
2166impl ListUsersOnFolderArgs {
2167    pub fn new(doc_id: PaperDocId) -> Self {
2168        ListUsersOnFolderArgs {
2169            doc_id,
2170            limit: 1000,
2171        }
2172    }
2173
2174    pub fn with_limit(mut self, value: i32) -> Self {
2175        self.limit = value;
2176        self
2177    }
2178}
2179
2180const LIST_USERS_ON_FOLDER_ARGS_FIELDS: &[&str] = &["doc_id",
2181                                                    "limit"];
2182impl ListUsersOnFolderArgs {
2183    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2184        map: V,
2185    ) -> Result<ListUsersOnFolderArgs, V::Error> {
2186        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2187    }
2188
2189    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2190        mut map: V,
2191        optional: bool,
2192    ) -> Result<Option<ListUsersOnFolderArgs>, V::Error> {
2193        let mut field_doc_id = None;
2194        let mut field_limit = None;
2195        let mut nothing = true;
2196        while let Some(key) = map.next_key::<&str>()? {
2197            nothing = false;
2198            match key {
2199                "doc_id" => {
2200                    if field_doc_id.is_some() {
2201                        return Err(::serde::de::Error::duplicate_field("doc_id"));
2202                    }
2203                    field_doc_id = Some(map.next_value()?);
2204                }
2205                "limit" => {
2206                    if field_limit.is_some() {
2207                        return Err(::serde::de::Error::duplicate_field("limit"));
2208                    }
2209                    field_limit = Some(map.next_value()?);
2210                }
2211                _ => {
2212                    // unknown field allowed and ignored
2213                    map.next_value::<::serde_json::Value>()?;
2214                }
2215            }
2216        }
2217        if optional && nothing {
2218            return Ok(None);
2219        }
2220        let result = ListUsersOnFolderArgs {
2221            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
2222            limit: field_limit.unwrap_or(1000),
2223        };
2224        Ok(Some(result))
2225    }
2226
2227    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2228        &self,
2229        s: &mut S::SerializeStruct,
2230    ) -> Result<(), S::Error> {
2231        use serde::ser::SerializeStruct;
2232        s.serialize_field("doc_id", &self.doc_id)?;
2233        if self.limit != 1000 {
2234            s.serialize_field("limit", &self.limit)?;
2235        }
2236        Ok(())
2237    }
2238}
2239
2240impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnFolderArgs {
2241    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2242        // struct deserializer
2243        use serde::de::{MapAccess, Visitor};
2244        struct StructVisitor;
2245        impl<'de> Visitor<'de> for StructVisitor {
2246            type Value = ListUsersOnFolderArgs;
2247            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2248                f.write_str("a ListUsersOnFolderArgs struct")
2249            }
2250            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2251                ListUsersOnFolderArgs::internal_deserialize(map)
2252            }
2253        }
2254        deserializer.deserialize_struct("ListUsersOnFolderArgs", LIST_USERS_ON_FOLDER_ARGS_FIELDS, StructVisitor)
2255    }
2256}
2257
2258impl ::serde::ser::Serialize for ListUsersOnFolderArgs {
2259    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2260        // struct serializer
2261        use serde::ser::SerializeStruct;
2262        let mut s = serializer.serialize_struct("ListUsersOnFolderArgs", 2)?;
2263        self.internal_serialize::<S>(&mut s)?;
2264        s.end()
2265    }
2266}
2267
2268// struct extends RefPaperDoc
2269impl From<ListUsersOnFolderArgs> for RefPaperDoc {
2270    fn from(subtype: ListUsersOnFolderArgs) -> Self {
2271        Self {
2272            doc_id: subtype.doc_id,
2273        }
2274    }
2275}
2276#[derive(Debug, Clone, PartialEq, Eq)]
2277#[non_exhaustive] // structs may have more fields added in the future.
2278pub struct ListUsersOnFolderContinueArgs {
2279    /// The Paper doc ID.
2280    pub doc_id: PaperDocId,
2281    /// The cursor obtained from [`docs_folder_users_list()`](crate::paper::docs_folder_users_list)
2282    /// or [`docs_folder_users_list_continue()`](crate::paper::docs_folder_users_list_continue).
2283    /// Allows for pagination.
2284    pub cursor: String,
2285}
2286
2287impl ListUsersOnFolderContinueArgs {
2288    pub fn new(doc_id: PaperDocId, cursor: String) -> Self {
2289        ListUsersOnFolderContinueArgs {
2290            doc_id,
2291            cursor,
2292        }
2293    }
2294}
2295
2296const LIST_USERS_ON_FOLDER_CONTINUE_ARGS_FIELDS: &[&str] = &["doc_id",
2297                                                             "cursor"];
2298impl ListUsersOnFolderContinueArgs {
2299    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2300        map: V,
2301    ) -> Result<ListUsersOnFolderContinueArgs, V::Error> {
2302        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2303    }
2304
2305    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2306        mut map: V,
2307        optional: bool,
2308    ) -> Result<Option<ListUsersOnFolderContinueArgs>, V::Error> {
2309        let mut field_doc_id = None;
2310        let mut field_cursor = None;
2311        let mut nothing = true;
2312        while let Some(key) = map.next_key::<&str>()? {
2313            nothing = false;
2314            match key {
2315                "doc_id" => {
2316                    if field_doc_id.is_some() {
2317                        return Err(::serde::de::Error::duplicate_field("doc_id"));
2318                    }
2319                    field_doc_id = Some(map.next_value()?);
2320                }
2321                "cursor" => {
2322                    if field_cursor.is_some() {
2323                        return Err(::serde::de::Error::duplicate_field("cursor"));
2324                    }
2325                    field_cursor = Some(map.next_value()?);
2326                }
2327                _ => {
2328                    // unknown field allowed and ignored
2329                    map.next_value::<::serde_json::Value>()?;
2330                }
2331            }
2332        }
2333        if optional && nothing {
2334            return Ok(None);
2335        }
2336        let result = ListUsersOnFolderContinueArgs {
2337            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
2338            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2339        };
2340        Ok(Some(result))
2341    }
2342
2343    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2344        &self,
2345        s: &mut S::SerializeStruct,
2346    ) -> Result<(), S::Error> {
2347        use serde::ser::SerializeStruct;
2348        s.serialize_field("doc_id", &self.doc_id)?;
2349        s.serialize_field("cursor", &self.cursor)?;
2350        Ok(())
2351    }
2352}
2353
2354impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnFolderContinueArgs {
2355    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2356        // struct deserializer
2357        use serde::de::{MapAccess, Visitor};
2358        struct StructVisitor;
2359        impl<'de> Visitor<'de> for StructVisitor {
2360            type Value = ListUsersOnFolderContinueArgs;
2361            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2362                f.write_str("a ListUsersOnFolderContinueArgs struct")
2363            }
2364            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2365                ListUsersOnFolderContinueArgs::internal_deserialize(map)
2366            }
2367        }
2368        deserializer.deserialize_struct("ListUsersOnFolderContinueArgs", LIST_USERS_ON_FOLDER_CONTINUE_ARGS_FIELDS, StructVisitor)
2369    }
2370}
2371
2372impl ::serde::ser::Serialize for ListUsersOnFolderContinueArgs {
2373    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2374        // struct serializer
2375        use serde::ser::SerializeStruct;
2376        let mut s = serializer.serialize_struct("ListUsersOnFolderContinueArgs", 2)?;
2377        self.internal_serialize::<S>(&mut s)?;
2378        s.end()
2379    }
2380}
2381
2382// struct extends RefPaperDoc
2383impl From<ListUsersOnFolderContinueArgs> for RefPaperDoc {
2384    fn from(subtype: ListUsersOnFolderContinueArgs) -> Self {
2385        Self {
2386            doc_id: subtype.doc_id,
2387        }
2388    }
2389}
2390#[derive(Debug, Clone, PartialEq, Eq)]
2391#[non_exhaustive] // structs may have more fields added in the future.
2392pub struct ListUsersOnFolderResponse {
2393    /// List of email addresses that are invited on the Paper folder.
2394    pub invitees: Vec<crate::types::sharing::InviteeInfo>,
2395    /// List of users that are invited on the Paper folder.
2396    pub users: Vec<crate::types::sharing::UserInfo>,
2397    /// Pass the cursor into
2398    /// [`docs_folder_users_list_continue()`](crate::paper::docs_folder_users_list_continue) to
2399    /// paginate through all users. The cursor preserves all properties as specified in the original
2400    /// call to [`docs_folder_users_list()`](crate::paper::docs_folder_users_list).
2401    pub cursor: Cursor,
2402    /// Will be set to True if a subsequent call with the provided cursor to
2403    /// [`docs_folder_users_list_continue()`](crate::paper::docs_folder_users_list_continue) returns
2404    /// immediately with some results. If set to False please allow some delay before making another
2405    /// call to
2406    /// [`docs_folder_users_list_continue()`](crate::paper::docs_folder_users_list_continue).
2407    pub has_more: bool,
2408}
2409
2410impl ListUsersOnFolderResponse {
2411    pub fn new(
2412        invitees: Vec<crate::types::sharing::InviteeInfo>,
2413        users: Vec<crate::types::sharing::UserInfo>,
2414        cursor: Cursor,
2415        has_more: bool,
2416    ) -> Self {
2417        ListUsersOnFolderResponse {
2418            invitees,
2419            users,
2420            cursor,
2421            has_more,
2422        }
2423    }
2424}
2425
2426const LIST_USERS_ON_FOLDER_RESPONSE_FIELDS: &[&str] = &["invitees",
2427                                                        "users",
2428                                                        "cursor",
2429                                                        "has_more"];
2430impl ListUsersOnFolderResponse {
2431    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2432        map: V,
2433    ) -> Result<ListUsersOnFolderResponse, V::Error> {
2434        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2435    }
2436
2437    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2438        mut map: V,
2439        optional: bool,
2440    ) -> Result<Option<ListUsersOnFolderResponse>, V::Error> {
2441        let mut field_invitees = None;
2442        let mut field_users = None;
2443        let mut field_cursor = None;
2444        let mut field_has_more = None;
2445        let mut nothing = true;
2446        while let Some(key) = map.next_key::<&str>()? {
2447            nothing = false;
2448            match key {
2449                "invitees" => {
2450                    if field_invitees.is_some() {
2451                        return Err(::serde::de::Error::duplicate_field("invitees"));
2452                    }
2453                    field_invitees = Some(map.next_value()?);
2454                }
2455                "users" => {
2456                    if field_users.is_some() {
2457                        return Err(::serde::de::Error::duplicate_field("users"));
2458                    }
2459                    field_users = Some(map.next_value()?);
2460                }
2461                "cursor" => {
2462                    if field_cursor.is_some() {
2463                        return Err(::serde::de::Error::duplicate_field("cursor"));
2464                    }
2465                    field_cursor = Some(map.next_value()?);
2466                }
2467                "has_more" => {
2468                    if field_has_more.is_some() {
2469                        return Err(::serde::de::Error::duplicate_field("has_more"));
2470                    }
2471                    field_has_more = Some(map.next_value()?);
2472                }
2473                _ => {
2474                    // unknown field allowed and ignored
2475                    map.next_value::<::serde_json::Value>()?;
2476                }
2477            }
2478        }
2479        if optional && nothing {
2480            return Ok(None);
2481        }
2482        let result = ListUsersOnFolderResponse {
2483            invitees: field_invitees.ok_or_else(|| ::serde::de::Error::missing_field("invitees"))?,
2484            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
2485            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2486            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
2487        };
2488        Ok(Some(result))
2489    }
2490
2491    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2492        &self,
2493        s: &mut S::SerializeStruct,
2494    ) -> Result<(), S::Error> {
2495        use serde::ser::SerializeStruct;
2496        s.serialize_field("invitees", &self.invitees)?;
2497        s.serialize_field("users", &self.users)?;
2498        s.serialize_field("cursor", &self.cursor)?;
2499        s.serialize_field("has_more", &self.has_more)?;
2500        Ok(())
2501    }
2502}
2503
2504impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnFolderResponse {
2505    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2506        // struct deserializer
2507        use serde::de::{MapAccess, Visitor};
2508        struct StructVisitor;
2509        impl<'de> Visitor<'de> for StructVisitor {
2510            type Value = ListUsersOnFolderResponse;
2511            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2512                f.write_str("a ListUsersOnFolderResponse struct")
2513            }
2514            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2515                ListUsersOnFolderResponse::internal_deserialize(map)
2516            }
2517        }
2518        deserializer.deserialize_struct("ListUsersOnFolderResponse", LIST_USERS_ON_FOLDER_RESPONSE_FIELDS, StructVisitor)
2519    }
2520}
2521
2522impl ::serde::ser::Serialize for ListUsersOnFolderResponse {
2523    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2524        // struct serializer
2525        use serde::ser::SerializeStruct;
2526        let mut s = serializer.serialize_struct("ListUsersOnFolderResponse", 4)?;
2527        self.internal_serialize::<S>(&mut s)?;
2528        s.end()
2529    }
2530}
2531
2532#[derive(Debug, Clone, PartialEq, Eq)]
2533#[non_exhaustive] // structs may have more fields added in the future.
2534pub struct ListUsersOnPaperDocArgs {
2535    /// The Paper doc ID.
2536    pub doc_id: PaperDocId,
2537    /// Size limit per batch. The maximum number of users that can be retrieved per batch is 1000.
2538    /// Higher value results in invalid arguments error.
2539    pub limit: i32,
2540    /// Specify this attribute if you want to obtain users that have already accessed the Paper doc.
2541    pub filter_by: UserOnPaperDocFilter,
2542}
2543
2544impl ListUsersOnPaperDocArgs {
2545    pub fn new(doc_id: PaperDocId) -> Self {
2546        ListUsersOnPaperDocArgs {
2547            doc_id,
2548            limit: 1000,
2549            filter_by: UserOnPaperDocFilter::Shared,
2550        }
2551    }
2552
2553    pub fn with_limit(mut self, value: i32) -> Self {
2554        self.limit = value;
2555        self
2556    }
2557
2558    pub fn with_filter_by(mut self, value: UserOnPaperDocFilter) -> Self {
2559        self.filter_by = value;
2560        self
2561    }
2562}
2563
2564const LIST_USERS_ON_PAPER_DOC_ARGS_FIELDS: &[&str] = &["doc_id",
2565                                                       "limit",
2566                                                       "filter_by"];
2567impl ListUsersOnPaperDocArgs {
2568    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2569        map: V,
2570    ) -> Result<ListUsersOnPaperDocArgs, V::Error> {
2571        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2572    }
2573
2574    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2575        mut map: V,
2576        optional: bool,
2577    ) -> Result<Option<ListUsersOnPaperDocArgs>, V::Error> {
2578        let mut field_doc_id = None;
2579        let mut field_limit = None;
2580        let mut field_filter_by = None;
2581        let mut nothing = true;
2582        while let Some(key) = map.next_key::<&str>()? {
2583            nothing = false;
2584            match key {
2585                "doc_id" => {
2586                    if field_doc_id.is_some() {
2587                        return Err(::serde::de::Error::duplicate_field("doc_id"));
2588                    }
2589                    field_doc_id = Some(map.next_value()?);
2590                }
2591                "limit" => {
2592                    if field_limit.is_some() {
2593                        return Err(::serde::de::Error::duplicate_field("limit"));
2594                    }
2595                    field_limit = Some(map.next_value()?);
2596                }
2597                "filter_by" => {
2598                    if field_filter_by.is_some() {
2599                        return Err(::serde::de::Error::duplicate_field("filter_by"));
2600                    }
2601                    field_filter_by = Some(map.next_value()?);
2602                }
2603                _ => {
2604                    // unknown field allowed and ignored
2605                    map.next_value::<::serde_json::Value>()?;
2606                }
2607            }
2608        }
2609        if optional && nothing {
2610            return Ok(None);
2611        }
2612        let result = ListUsersOnPaperDocArgs {
2613            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
2614            limit: field_limit.unwrap_or(1000),
2615            filter_by: field_filter_by.unwrap_or(UserOnPaperDocFilter::Shared),
2616        };
2617        Ok(Some(result))
2618    }
2619
2620    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2621        &self,
2622        s: &mut S::SerializeStruct,
2623    ) -> Result<(), S::Error> {
2624        use serde::ser::SerializeStruct;
2625        s.serialize_field("doc_id", &self.doc_id)?;
2626        if self.limit != 1000 {
2627            s.serialize_field("limit", &self.limit)?;
2628        }
2629        if self.filter_by != UserOnPaperDocFilter::Shared {
2630            s.serialize_field("filter_by", &self.filter_by)?;
2631        }
2632        Ok(())
2633    }
2634}
2635
2636impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnPaperDocArgs {
2637    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2638        // struct deserializer
2639        use serde::de::{MapAccess, Visitor};
2640        struct StructVisitor;
2641        impl<'de> Visitor<'de> for StructVisitor {
2642            type Value = ListUsersOnPaperDocArgs;
2643            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2644                f.write_str("a ListUsersOnPaperDocArgs struct")
2645            }
2646            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2647                ListUsersOnPaperDocArgs::internal_deserialize(map)
2648            }
2649        }
2650        deserializer.deserialize_struct("ListUsersOnPaperDocArgs", LIST_USERS_ON_PAPER_DOC_ARGS_FIELDS, StructVisitor)
2651    }
2652}
2653
2654impl ::serde::ser::Serialize for ListUsersOnPaperDocArgs {
2655    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2656        // struct serializer
2657        use serde::ser::SerializeStruct;
2658        let mut s = serializer.serialize_struct("ListUsersOnPaperDocArgs", 3)?;
2659        self.internal_serialize::<S>(&mut s)?;
2660        s.end()
2661    }
2662}
2663
2664// struct extends RefPaperDoc
2665impl From<ListUsersOnPaperDocArgs> for RefPaperDoc {
2666    fn from(subtype: ListUsersOnPaperDocArgs) -> Self {
2667        Self {
2668            doc_id: subtype.doc_id,
2669        }
2670    }
2671}
2672#[derive(Debug, Clone, PartialEq, Eq)]
2673#[non_exhaustive] // structs may have more fields added in the future.
2674pub struct ListUsersOnPaperDocContinueArgs {
2675    /// The Paper doc ID.
2676    pub doc_id: PaperDocId,
2677    /// The cursor obtained from [`docs_users_list()`](crate::paper::docs_users_list) or
2678    /// [`docs_users_list_continue()`](crate::paper::docs_users_list_continue). Allows for
2679    /// pagination.
2680    pub cursor: String,
2681}
2682
2683impl ListUsersOnPaperDocContinueArgs {
2684    pub fn new(doc_id: PaperDocId, cursor: String) -> Self {
2685        ListUsersOnPaperDocContinueArgs {
2686            doc_id,
2687            cursor,
2688        }
2689    }
2690}
2691
2692const LIST_USERS_ON_PAPER_DOC_CONTINUE_ARGS_FIELDS: &[&str] = &["doc_id",
2693                                                                "cursor"];
2694impl ListUsersOnPaperDocContinueArgs {
2695    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2696        map: V,
2697    ) -> Result<ListUsersOnPaperDocContinueArgs, V::Error> {
2698        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2699    }
2700
2701    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2702        mut map: V,
2703        optional: bool,
2704    ) -> Result<Option<ListUsersOnPaperDocContinueArgs>, V::Error> {
2705        let mut field_doc_id = None;
2706        let mut field_cursor = None;
2707        let mut nothing = true;
2708        while let Some(key) = map.next_key::<&str>()? {
2709            nothing = false;
2710            match key {
2711                "doc_id" => {
2712                    if field_doc_id.is_some() {
2713                        return Err(::serde::de::Error::duplicate_field("doc_id"));
2714                    }
2715                    field_doc_id = Some(map.next_value()?);
2716                }
2717                "cursor" => {
2718                    if field_cursor.is_some() {
2719                        return Err(::serde::de::Error::duplicate_field("cursor"));
2720                    }
2721                    field_cursor = Some(map.next_value()?);
2722                }
2723                _ => {
2724                    // unknown field allowed and ignored
2725                    map.next_value::<::serde_json::Value>()?;
2726                }
2727            }
2728        }
2729        if optional && nothing {
2730            return Ok(None);
2731        }
2732        let result = ListUsersOnPaperDocContinueArgs {
2733            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
2734            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2735        };
2736        Ok(Some(result))
2737    }
2738
2739    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2740        &self,
2741        s: &mut S::SerializeStruct,
2742    ) -> Result<(), S::Error> {
2743        use serde::ser::SerializeStruct;
2744        s.serialize_field("doc_id", &self.doc_id)?;
2745        s.serialize_field("cursor", &self.cursor)?;
2746        Ok(())
2747    }
2748}
2749
2750impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnPaperDocContinueArgs {
2751    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2752        // struct deserializer
2753        use serde::de::{MapAccess, Visitor};
2754        struct StructVisitor;
2755        impl<'de> Visitor<'de> for StructVisitor {
2756            type Value = ListUsersOnPaperDocContinueArgs;
2757            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2758                f.write_str("a ListUsersOnPaperDocContinueArgs struct")
2759            }
2760            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2761                ListUsersOnPaperDocContinueArgs::internal_deserialize(map)
2762            }
2763        }
2764        deserializer.deserialize_struct("ListUsersOnPaperDocContinueArgs", LIST_USERS_ON_PAPER_DOC_CONTINUE_ARGS_FIELDS, StructVisitor)
2765    }
2766}
2767
2768impl ::serde::ser::Serialize for ListUsersOnPaperDocContinueArgs {
2769    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2770        // struct serializer
2771        use serde::ser::SerializeStruct;
2772        let mut s = serializer.serialize_struct("ListUsersOnPaperDocContinueArgs", 2)?;
2773        self.internal_serialize::<S>(&mut s)?;
2774        s.end()
2775    }
2776}
2777
2778// struct extends RefPaperDoc
2779impl From<ListUsersOnPaperDocContinueArgs> for RefPaperDoc {
2780    fn from(subtype: ListUsersOnPaperDocContinueArgs) -> Self {
2781        Self {
2782            doc_id: subtype.doc_id,
2783        }
2784    }
2785}
2786#[derive(Debug, Clone, PartialEq, Eq)]
2787#[non_exhaustive] // structs may have more fields added in the future.
2788pub struct ListUsersOnPaperDocResponse {
2789    /// List of email addresses with their respective permission levels that are invited on the
2790    /// Paper doc.
2791    pub invitees: Vec<InviteeInfoWithPermissionLevel>,
2792    /// List of users with their respective permission levels that are invited on the Paper folder.
2793    pub users: Vec<UserInfoWithPermissionLevel>,
2794    /// The Paper doc owner. This field is populated on every single response.
2795    pub doc_owner: crate::types::sharing::UserInfo,
2796    /// Pass the cursor into [`docs_users_list_continue()`](crate::paper::docs_users_list_continue)
2797    /// to paginate through all users. The cursor preserves all properties as specified in the
2798    /// original call to [`docs_users_list()`](crate::paper::docs_users_list).
2799    pub cursor: Cursor,
2800    /// Will be set to True if a subsequent call with the provided cursor to
2801    /// [`docs_users_list_continue()`](crate::paper::docs_users_list_continue) returns immediately
2802    /// with some results. If set to False please allow some delay before making another call to
2803    /// [`docs_users_list_continue()`](crate::paper::docs_users_list_continue).
2804    pub has_more: bool,
2805}
2806
2807impl ListUsersOnPaperDocResponse {
2808    pub fn new(
2809        invitees: Vec<InviteeInfoWithPermissionLevel>,
2810        users: Vec<UserInfoWithPermissionLevel>,
2811        doc_owner: crate::types::sharing::UserInfo,
2812        cursor: Cursor,
2813        has_more: bool,
2814    ) -> Self {
2815        ListUsersOnPaperDocResponse {
2816            invitees,
2817            users,
2818            doc_owner,
2819            cursor,
2820            has_more,
2821        }
2822    }
2823}
2824
2825const LIST_USERS_ON_PAPER_DOC_RESPONSE_FIELDS: &[&str] = &["invitees",
2826                                                           "users",
2827                                                           "doc_owner",
2828                                                           "cursor",
2829                                                           "has_more"];
2830impl ListUsersOnPaperDocResponse {
2831    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
2832        map: V,
2833    ) -> Result<ListUsersOnPaperDocResponse, V::Error> {
2834        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
2835    }
2836
2837    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
2838        mut map: V,
2839        optional: bool,
2840    ) -> Result<Option<ListUsersOnPaperDocResponse>, V::Error> {
2841        let mut field_invitees = None;
2842        let mut field_users = None;
2843        let mut field_doc_owner = None;
2844        let mut field_cursor = None;
2845        let mut field_has_more = None;
2846        let mut nothing = true;
2847        while let Some(key) = map.next_key::<&str>()? {
2848            nothing = false;
2849            match key {
2850                "invitees" => {
2851                    if field_invitees.is_some() {
2852                        return Err(::serde::de::Error::duplicate_field("invitees"));
2853                    }
2854                    field_invitees = Some(map.next_value()?);
2855                }
2856                "users" => {
2857                    if field_users.is_some() {
2858                        return Err(::serde::de::Error::duplicate_field("users"));
2859                    }
2860                    field_users = Some(map.next_value()?);
2861                }
2862                "doc_owner" => {
2863                    if field_doc_owner.is_some() {
2864                        return Err(::serde::de::Error::duplicate_field("doc_owner"));
2865                    }
2866                    field_doc_owner = Some(map.next_value()?);
2867                }
2868                "cursor" => {
2869                    if field_cursor.is_some() {
2870                        return Err(::serde::de::Error::duplicate_field("cursor"));
2871                    }
2872                    field_cursor = Some(map.next_value()?);
2873                }
2874                "has_more" => {
2875                    if field_has_more.is_some() {
2876                        return Err(::serde::de::Error::duplicate_field("has_more"));
2877                    }
2878                    field_has_more = Some(map.next_value()?);
2879                }
2880                _ => {
2881                    // unknown field allowed and ignored
2882                    map.next_value::<::serde_json::Value>()?;
2883                }
2884            }
2885        }
2886        if optional && nothing {
2887            return Ok(None);
2888        }
2889        let result = ListUsersOnPaperDocResponse {
2890            invitees: field_invitees.ok_or_else(|| ::serde::de::Error::missing_field("invitees"))?,
2891            users: field_users.ok_or_else(|| ::serde::de::Error::missing_field("users"))?,
2892            doc_owner: field_doc_owner.ok_or_else(|| ::serde::de::Error::missing_field("doc_owner"))?,
2893            cursor: field_cursor.ok_or_else(|| ::serde::de::Error::missing_field("cursor"))?,
2894            has_more: field_has_more.ok_or_else(|| ::serde::de::Error::missing_field("has_more"))?,
2895        };
2896        Ok(Some(result))
2897    }
2898
2899    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
2900        &self,
2901        s: &mut S::SerializeStruct,
2902    ) -> Result<(), S::Error> {
2903        use serde::ser::SerializeStruct;
2904        s.serialize_field("invitees", &self.invitees)?;
2905        s.serialize_field("users", &self.users)?;
2906        s.serialize_field("doc_owner", &self.doc_owner)?;
2907        s.serialize_field("cursor", &self.cursor)?;
2908        s.serialize_field("has_more", &self.has_more)?;
2909        Ok(())
2910    }
2911}
2912
2913impl<'de> ::serde::de::Deserialize<'de> for ListUsersOnPaperDocResponse {
2914    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2915        // struct deserializer
2916        use serde::de::{MapAccess, Visitor};
2917        struct StructVisitor;
2918        impl<'de> Visitor<'de> for StructVisitor {
2919            type Value = ListUsersOnPaperDocResponse;
2920            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2921                f.write_str("a ListUsersOnPaperDocResponse struct")
2922            }
2923            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
2924                ListUsersOnPaperDocResponse::internal_deserialize(map)
2925            }
2926        }
2927        deserializer.deserialize_struct("ListUsersOnPaperDocResponse", LIST_USERS_ON_PAPER_DOC_RESPONSE_FIELDS, StructVisitor)
2928    }
2929}
2930
2931impl ::serde::ser::Serialize for ListUsersOnPaperDocResponse {
2932    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2933        // struct serializer
2934        use serde::ser::SerializeStruct;
2935        let mut s = serializer.serialize_struct("ListUsersOnPaperDocResponse", 5)?;
2936        self.internal_serialize::<S>(&mut s)?;
2937        s.end()
2938    }
2939}
2940
2941#[derive(Debug, Clone, PartialEq, Eq)]
2942#[non_exhaustive] // variants may be added in the future
2943pub enum PaperApiBaseError {
2944    /// Your account does not have permissions to perform this action. This may be due to it only
2945    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
2946    /// the [Paper Migration
2947    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
2948    InsufficientPermissions,
2949    /// Catch-all used for unrecognized values returned from the server. Encountering this value
2950    /// typically indicates that this SDK version is out of date.
2951    Other,
2952}
2953
2954impl<'de> ::serde::de::Deserialize<'de> for PaperApiBaseError {
2955    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
2956        // union deserializer
2957        use serde::de::{self, MapAccess, Visitor};
2958        struct EnumVisitor;
2959        impl<'de> Visitor<'de> for EnumVisitor {
2960            type Value = PaperApiBaseError;
2961            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
2962                f.write_str("a PaperApiBaseError structure")
2963            }
2964            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
2965                let tag: &str = match map.next_key()? {
2966                    Some(".tag") => map.next_value()?,
2967                    _ => return Err(de::Error::missing_field(".tag"))
2968                };
2969                let value = match tag {
2970                    "insufficient_permissions" => PaperApiBaseError::InsufficientPermissions,
2971                    _ => PaperApiBaseError::Other,
2972                };
2973                crate::eat_json_fields(&mut map)?;
2974                Ok(value)
2975            }
2976        }
2977        const VARIANTS: &[&str] = &["insufficient_permissions",
2978                                    "other"];
2979        deserializer.deserialize_struct("PaperApiBaseError", VARIANTS, EnumVisitor)
2980    }
2981}
2982
2983impl ::serde::ser::Serialize for PaperApiBaseError {
2984    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2985        // union serializer
2986        use serde::ser::SerializeStruct;
2987        match self {
2988            PaperApiBaseError::InsufficientPermissions => {
2989                // unit
2990                let mut s = serializer.serialize_struct("PaperApiBaseError", 1)?;
2991                s.serialize_field(".tag", "insufficient_permissions")?;
2992                s.end()
2993            }
2994            PaperApiBaseError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
2995        }
2996    }
2997}
2998
2999impl ::std::error::Error for PaperApiBaseError {
3000}
3001
3002impl ::std::fmt::Display for PaperApiBaseError {
3003    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3004        write!(f, "{:?}", *self)
3005    }
3006}
3007
3008#[derive(Debug, Clone, PartialEq, Eq)]
3009#[non_exhaustive] // variants may be added in the future
3010pub enum PaperApiCursorError {
3011    /// The provided cursor is expired.
3012    ExpiredCursor,
3013    /// The provided cursor is invalid.
3014    InvalidCursor,
3015    /// The provided cursor contains invalid user.
3016    WrongUserInCursor,
3017    /// Indicates that the cursor has been invalidated. Call the corresponding non-continue endpoint
3018    /// to obtain a new cursor.
3019    Reset,
3020    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3021    /// typically indicates that this SDK version is out of date.
3022    Other,
3023}
3024
3025impl<'de> ::serde::de::Deserialize<'de> for PaperApiCursorError {
3026    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3027        // union deserializer
3028        use serde::de::{self, MapAccess, Visitor};
3029        struct EnumVisitor;
3030        impl<'de> Visitor<'de> for EnumVisitor {
3031            type Value = PaperApiCursorError;
3032            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3033                f.write_str("a PaperApiCursorError structure")
3034            }
3035            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3036                let tag: &str = match map.next_key()? {
3037                    Some(".tag") => map.next_value()?,
3038                    _ => return Err(de::Error::missing_field(".tag"))
3039                };
3040                let value = match tag {
3041                    "expired_cursor" => PaperApiCursorError::ExpiredCursor,
3042                    "invalid_cursor" => PaperApiCursorError::InvalidCursor,
3043                    "wrong_user_in_cursor" => PaperApiCursorError::WrongUserInCursor,
3044                    "reset" => PaperApiCursorError::Reset,
3045                    _ => PaperApiCursorError::Other,
3046                };
3047                crate::eat_json_fields(&mut map)?;
3048                Ok(value)
3049            }
3050        }
3051        const VARIANTS: &[&str] = &["expired_cursor",
3052                                    "invalid_cursor",
3053                                    "wrong_user_in_cursor",
3054                                    "reset",
3055                                    "other"];
3056        deserializer.deserialize_struct("PaperApiCursorError", VARIANTS, EnumVisitor)
3057    }
3058}
3059
3060impl ::serde::ser::Serialize for PaperApiCursorError {
3061    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3062        // union serializer
3063        use serde::ser::SerializeStruct;
3064        match self {
3065            PaperApiCursorError::ExpiredCursor => {
3066                // unit
3067                let mut s = serializer.serialize_struct("PaperApiCursorError", 1)?;
3068                s.serialize_field(".tag", "expired_cursor")?;
3069                s.end()
3070            }
3071            PaperApiCursorError::InvalidCursor => {
3072                // unit
3073                let mut s = serializer.serialize_struct("PaperApiCursorError", 1)?;
3074                s.serialize_field(".tag", "invalid_cursor")?;
3075                s.end()
3076            }
3077            PaperApiCursorError::WrongUserInCursor => {
3078                // unit
3079                let mut s = serializer.serialize_struct("PaperApiCursorError", 1)?;
3080                s.serialize_field(".tag", "wrong_user_in_cursor")?;
3081                s.end()
3082            }
3083            PaperApiCursorError::Reset => {
3084                // unit
3085                let mut s = serializer.serialize_struct("PaperApiCursorError", 1)?;
3086                s.serialize_field(".tag", "reset")?;
3087                s.end()
3088            }
3089            PaperApiCursorError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3090        }
3091    }
3092}
3093
3094impl ::std::error::Error for PaperApiCursorError {
3095}
3096
3097impl ::std::fmt::Display for PaperApiCursorError {
3098    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3099        match self {
3100            PaperApiCursorError::ExpiredCursor => f.write_str("The provided cursor is expired."),
3101            PaperApiCursorError::InvalidCursor => f.write_str("The provided cursor is invalid."),
3102            PaperApiCursorError::WrongUserInCursor => f.write_str("The provided cursor contains invalid user."),
3103            PaperApiCursorError::Reset => f.write_str("Indicates that the cursor has been invalidated. Call the corresponding non-continue endpoint to obtain a new cursor."),
3104            _ => write!(f, "{:?}", *self),
3105        }
3106    }
3107}
3108
3109#[derive(Debug, Clone, PartialEq, Eq)]
3110#[non_exhaustive] // structs may have more fields added in the future.
3111pub struct PaperDocCreateArgs {
3112    /// The format of provided data.
3113    pub import_format: ImportFormat,
3114    /// The Paper folder ID where the Paper document should be created. The API user has to have
3115    /// write access to this folder or error is thrown.
3116    pub parent_folder_id: Option<String>,
3117}
3118
3119impl PaperDocCreateArgs {
3120    pub fn new(import_format: ImportFormat) -> Self {
3121        PaperDocCreateArgs {
3122            import_format,
3123            parent_folder_id: None,
3124        }
3125    }
3126
3127    pub fn with_parent_folder_id(mut self, value: String) -> Self {
3128        self.parent_folder_id = Some(value);
3129        self
3130    }
3131}
3132
3133const PAPER_DOC_CREATE_ARGS_FIELDS: &[&str] = &["import_format",
3134                                                "parent_folder_id"];
3135impl PaperDocCreateArgs {
3136    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3137        map: V,
3138    ) -> Result<PaperDocCreateArgs, V::Error> {
3139        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3140    }
3141
3142    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3143        mut map: V,
3144        optional: bool,
3145    ) -> Result<Option<PaperDocCreateArgs>, V::Error> {
3146        let mut field_import_format = None;
3147        let mut field_parent_folder_id = None;
3148        let mut nothing = true;
3149        while let Some(key) = map.next_key::<&str>()? {
3150            nothing = false;
3151            match key {
3152                "import_format" => {
3153                    if field_import_format.is_some() {
3154                        return Err(::serde::de::Error::duplicate_field("import_format"));
3155                    }
3156                    field_import_format = Some(map.next_value()?);
3157                }
3158                "parent_folder_id" => {
3159                    if field_parent_folder_id.is_some() {
3160                        return Err(::serde::de::Error::duplicate_field("parent_folder_id"));
3161                    }
3162                    field_parent_folder_id = Some(map.next_value()?);
3163                }
3164                _ => {
3165                    // unknown field allowed and ignored
3166                    map.next_value::<::serde_json::Value>()?;
3167                }
3168            }
3169        }
3170        if optional && nothing {
3171            return Ok(None);
3172        }
3173        let result = PaperDocCreateArgs {
3174            import_format: field_import_format.ok_or_else(|| ::serde::de::Error::missing_field("import_format"))?,
3175            parent_folder_id: field_parent_folder_id.and_then(Option::flatten),
3176        };
3177        Ok(Some(result))
3178    }
3179
3180    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3181        &self,
3182        s: &mut S::SerializeStruct,
3183    ) -> Result<(), S::Error> {
3184        use serde::ser::SerializeStruct;
3185        s.serialize_field("import_format", &self.import_format)?;
3186        if let Some(val) = &self.parent_folder_id {
3187            s.serialize_field("parent_folder_id", val)?;
3188        }
3189        Ok(())
3190    }
3191}
3192
3193impl<'de> ::serde::de::Deserialize<'de> for PaperDocCreateArgs {
3194    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3195        // struct deserializer
3196        use serde::de::{MapAccess, Visitor};
3197        struct StructVisitor;
3198        impl<'de> Visitor<'de> for StructVisitor {
3199            type Value = PaperDocCreateArgs;
3200            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3201                f.write_str("a PaperDocCreateArgs struct")
3202            }
3203            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3204                PaperDocCreateArgs::internal_deserialize(map)
3205            }
3206        }
3207        deserializer.deserialize_struct("PaperDocCreateArgs", PAPER_DOC_CREATE_ARGS_FIELDS, StructVisitor)
3208    }
3209}
3210
3211impl ::serde::ser::Serialize for PaperDocCreateArgs {
3212    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3213        // struct serializer
3214        use serde::ser::SerializeStruct;
3215        let mut s = serializer.serialize_struct("PaperDocCreateArgs", 2)?;
3216        self.internal_serialize::<S>(&mut s)?;
3217        s.end()
3218    }
3219}
3220
3221#[derive(Debug, Clone, PartialEq, Eq)]
3222#[non_exhaustive] // variants may be added in the future
3223pub enum PaperDocCreateError {
3224    /// Your account does not have permissions to perform this action. This may be due to it only
3225    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
3226    /// the [Paper Migration
3227    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
3228    InsufficientPermissions,
3229    /// The provided content was malformed and cannot be imported to Paper.
3230    ContentMalformed,
3231    /// The specified Paper folder is cannot be found.
3232    FolderNotFound,
3233    /// The newly created Paper doc would be too large. Please split the content into multiple docs.
3234    DocLengthExceeded,
3235    /// The imported document contains an image that is too large. The current limit is 1MB. This
3236    /// only applies to HTML with data URI.
3237    ImageSizeExceeded,
3238    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3239    /// typically indicates that this SDK version is out of date.
3240    Other,
3241}
3242
3243impl<'de> ::serde::de::Deserialize<'de> for PaperDocCreateError {
3244    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3245        // union deserializer
3246        use serde::de::{self, MapAccess, Visitor};
3247        struct EnumVisitor;
3248        impl<'de> Visitor<'de> for EnumVisitor {
3249            type Value = PaperDocCreateError;
3250            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3251                f.write_str("a PaperDocCreateError structure")
3252            }
3253            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3254                let tag: &str = match map.next_key()? {
3255                    Some(".tag") => map.next_value()?,
3256                    _ => return Err(de::Error::missing_field(".tag"))
3257                };
3258                let value = match tag {
3259                    "insufficient_permissions" => PaperDocCreateError::InsufficientPermissions,
3260                    "content_malformed" => PaperDocCreateError::ContentMalformed,
3261                    "folder_not_found" => PaperDocCreateError::FolderNotFound,
3262                    "doc_length_exceeded" => PaperDocCreateError::DocLengthExceeded,
3263                    "image_size_exceeded" => PaperDocCreateError::ImageSizeExceeded,
3264                    _ => PaperDocCreateError::Other,
3265                };
3266                crate::eat_json_fields(&mut map)?;
3267                Ok(value)
3268            }
3269        }
3270        const VARIANTS: &[&str] = &["insufficient_permissions",
3271                                    "other",
3272                                    "content_malformed",
3273                                    "folder_not_found",
3274                                    "doc_length_exceeded",
3275                                    "image_size_exceeded"];
3276        deserializer.deserialize_struct("PaperDocCreateError", VARIANTS, EnumVisitor)
3277    }
3278}
3279
3280impl ::serde::ser::Serialize for PaperDocCreateError {
3281    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3282        // union serializer
3283        use serde::ser::SerializeStruct;
3284        match self {
3285            PaperDocCreateError::InsufficientPermissions => {
3286                // unit
3287                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3288                s.serialize_field(".tag", "insufficient_permissions")?;
3289                s.end()
3290            }
3291            PaperDocCreateError::ContentMalformed => {
3292                // unit
3293                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3294                s.serialize_field(".tag", "content_malformed")?;
3295                s.end()
3296            }
3297            PaperDocCreateError::FolderNotFound => {
3298                // unit
3299                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3300                s.serialize_field(".tag", "folder_not_found")?;
3301                s.end()
3302            }
3303            PaperDocCreateError::DocLengthExceeded => {
3304                // unit
3305                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3306                s.serialize_field(".tag", "doc_length_exceeded")?;
3307                s.end()
3308            }
3309            PaperDocCreateError::ImageSizeExceeded => {
3310                // unit
3311                let mut s = serializer.serialize_struct("PaperDocCreateError", 1)?;
3312                s.serialize_field(".tag", "image_size_exceeded")?;
3313                s.end()
3314            }
3315            PaperDocCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3316        }
3317    }
3318}
3319
3320impl ::std::error::Error for PaperDocCreateError {
3321}
3322
3323impl ::std::fmt::Display for PaperDocCreateError {
3324    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3325        match self {
3326            PaperDocCreateError::ContentMalformed => f.write_str("The provided content was malformed and cannot be imported to Paper."),
3327            PaperDocCreateError::FolderNotFound => f.write_str("The specified Paper folder is cannot be found."),
3328            PaperDocCreateError::DocLengthExceeded => f.write_str("The newly created Paper doc would be too large. Please split the content into multiple docs."),
3329            PaperDocCreateError::ImageSizeExceeded => f.write_str("The imported document contains an image that is too large. The current limit is 1MB. This only applies to HTML with data URI."),
3330            _ => write!(f, "{:?}", *self),
3331        }
3332    }
3333}
3334
3335// union extends PaperApiBaseError
3336impl From<PaperApiBaseError> for PaperDocCreateError {
3337    fn from(parent: PaperApiBaseError) -> Self {
3338        match parent {
3339            PaperApiBaseError::InsufficientPermissions => PaperDocCreateError::InsufficientPermissions,
3340            PaperApiBaseError::Other => PaperDocCreateError::Other,
3341        }
3342    }
3343}
3344#[derive(Debug, Clone, PartialEq, Eq)]
3345#[non_exhaustive] // structs may have more fields added in the future.
3346pub struct PaperDocCreateUpdateResult {
3347    /// Doc ID of the newly created doc.
3348    pub doc_id: String,
3349    /// The Paper doc revision. Simply an ever increasing number.
3350    pub revision: i64,
3351    /// The Paper doc title.
3352    pub title: String,
3353}
3354
3355impl PaperDocCreateUpdateResult {
3356    pub fn new(doc_id: String, revision: i64, title: String) -> Self {
3357        PaperDocCreateUpdateResult {
3358            doc_id,
3359            revision,
3360            title,
3361        }
3362    }
3363}
3364
3365const PAPER_DOC_CREATE_UPDATE_RESULT_FIELDS: &[&str] = &["doc_id",
3366                                                         "revision",
3367                                                         "title"];
3368impl PaperDocCreateUpdateResult {
3369    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3370        map: V,
3371    ) -> Result<PaperDocCreateUpdateResult, V::Error> {
3372        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3373    }
3374
3375    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3376        mut map: V,
3377        optional: bool,
3378    ) -> Result<Option<PaperDocCreateUpdateResult>, V::Error> {
3379        let mut field_doc_id = None;
3380        let mut field_revision = None;
3381        let mut field_title = None;
3382        let mut nothing = true;
3383        while let Some(key) = map.next_key::<&str>()? {
3384            nothing = false;
3385            match key {
3386                "doc_id" => {
3387                    if field_doc_id.is_some() {
3388                        return Err(::serde::de::Error::duplicate_field("doc_id"));
3389                    }
3390                    field_doc_id = Some(map.next_value()?);
3391                }
3392                "revision" => {
3393                    if field_revision.is_some() {
3394                        return Err(::serde::de::Error::duplicate_field("revision"));
3395                    }
3396                    field_revision = Some(map.next_value()?);
3397                }
3398                "title" => {
3399                    if field_title.is_some() {
3400                        return Err(::serde::de::Error::duplicate_field("title"));
3401                    }
3402                    field_title = Some(map.next_value()?);
3403                }
3404                _ => {
3405                    // unknown field allowed and ignored
3406                    map.next_value::<::serde_json::Value>()?;
3407                }
3408            }
3409        }
3410        if optional && nothing {
3411            return Ok(None);
3412        }
3413        let result = PaperDocCreateUpdateResult {
3414            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
3415            revision: field_revision.ok_or_else(|| ::serde::de::Error::missing_field("revision"))?,
3416            title: field_title.ok_or_else(|| ::serde::de::Error::missing_field("title"))?,
3417        };
3418        Ok(Some(result))
3419    }
3420
3421    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3422        &self,
3423        s: &mut S::SerializeStruct,
3424    ) -> Result<(), S::Error> {
3425        use serde::ser::SerializeStruct;
3426        s.serialize_field("doc_id", &self.doc_id)?;
3427        s.serialize_field("revision", &self.revision)?;
3428        s.serialize_field("title", &self.title)?;
3429        Ok(())
3430    }
3431}
3432
3433impl<'de> ::serde::de::Deserialize<'de> for PaperDocCreateUpdateResult {
3434    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3435        // struct deserializer
3436        use serde::de::{MapAccess, Visitor};
3437        struct StructVisitor;
3438        impl<'de> Visitor<'de> for StructVisitor {
3439            type Value = PaperDocCreateUpdateResult;
3440            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3441                f.write_str("a PaperDocCreateUpdateResult struct")
3442            }
3443            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3444                PaperDocCreateUpdateResult::internal_deserialize(map)
3445            }
3446        }
3447        deserializer.deserialize_struct("PaperDocCreateUpdateResult", PAPER_DOC_CREATE_UPDATE_RESULT_FIELDS, StructVisitor)
3448    }
3449}
3450
3451impl ::serde::ser::Serialize for PaperDocCreateUpdateResult {
3452    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3453        // struct serializer
3454        use serde::ser::SerializeStruct;
3455        let mut s = serializer.serialize_struct("PaperDocCreateUpdateResult", 3)?;
3456        self.internal_serialize::<S>(&mut s)?;
3457        s.end()
3458    }
3459}
3460
3461#[derive(Debug, Clone, PartialEq, Eq)]
3462#[non_exhaustive] // structs may have more fields added in the future.
3463pub struct PaperDocExport {
3464    /// The Paper doc ID.
3465    pub doc_id: PaperDocId,
3466    pub export_format: ExportFormat,
3467}
3468
3469impl PaperDocExport {
3470    pub fn new(doc_id: PaperDocId, export_format: ExportFormat) -> Self {
3471        PaperDocExport {
3472            doc_id,
3473            export_format,
3474        }
3475    }
3476}
3477
3478const PAPER_DOC_EXPORT_FIELDS: &[&str] = &["doc_id",
3479                                           "export_format"];
3480impl PaperDocExport {
3481    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3482        map: V,
3483    ) -> Result<PaperDocExport, V::Error> {
3484        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3485    }
3486
3487    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3488        mut map: V,
3489        optional: bool,
3490    ) -> Result<Option<PaperDocExport>, V::Error> {
3491        let mut field_doc_id = None;
3492        let mut field_export_format = None;
3493        let mut nothing = true;
3494        while let Some(key) = map.next_key::<&str>()? {
3495            nothing = false;
3496            match key {
3497                "doc_id" => {
3498                    if field_doc_id.is_some() {
3499                        return Err(::serde::de::Error::duplicate_field("doc_id"));
3500                    }
3501                    field_doc_id = Some(map.next_value()?);
3502                }
3503                "export_format" => {
3504                    if field_export_format.is_some() {
3505                        return Err(::serde::de::Error::duplicate_field("export_format"));
3506                    }
3507                    field_export_format = Some(map.next_value()?);
3508                }
3509                _ => {
3510                    // unknown field allowed and ignored
3511                    map.next_value::<::serde_json::Value>()?;
3512                }
3513            }
3514        }
3515        if optional && nothing {
3516            return Ok(None);
3517        }
3518        let result = PaperDocExport {
3519            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
3520            export_format: field_export_format.ok_or_else(|| ::serde::de::Error::missing_field("export_format"))?,
3521        };
3522        Ok(Some(result))
3523    }
3524
3525    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3526        &self,
3527        s: &mut S::SerializeStruct,
3528    ) -> Result<(), S::Error> {
3529        use serde::ser::SerializeStruct;
3530        s.serialize_field("doc_id", &self.doc_id)?;
3531        s.serialize_field("export_format", &self.export_format)?;
3532        Ok(())
3533    }
3534}
3535
3536impl<'de> ::serde::de::Deserialize<'de> for PaperDocExport {
3537    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3538        // struct deserializer
3539        use serde::de::{MapAccess, Visitor};
3540        struct StructVisitor;
3541        impl<'de> Visitor<'de> for StructVisitor {
3542            type Value = PaperDocExport;
3543            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3544                f.write_str("a PaperDocExport struct")
3545            }
3546            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3547                PaperDocExport::internal_deserialize(map)
3548            }
3549        }
3550        deserializer.deserialize_struct("PaperDocExport", PAPER_DOC_EXPORT_FIELDS, StructVisitor)
3551    }
3552}
3553
3554impl ::serde::ser::Serialize for PaperDocExport {
3555    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3556        // struct serializer
3557        use serde::ser::SerializeStruct;
3558        let mut s = serializer.serialize_struct("PaperDocExport", 2)?;
3559        self.internal_serialize::<S>(&mut s)?;
3560        s.end()
3561    }
3562}
3563
3564// struct extends RefPaperDoc
3565impl From<PaperDocExport> for RefPaperDoc {
3566    fn from(subtype: PaperDocExport) -> Self {
3567        Self {
3568            doc_id: subtype.doc_id,
3569        }
3570    }
3571}
3572#[derive(Debug, Clone, PartialEq, Eq)]
3573#[non_exhaustive] // structs may have more fields added in the future.
3574pub struct PaperDocExportResult {
3575    /// The Paper doc owner's email address.
3576    pub owner: String,
3577    /// The Paper doc title.
3578    pub title: String,
3579    /// The Paper doc revision. Simply an ever increasing number.
3580    pub revision: i64,
3581    /// MIME type of the export. This corresponds to [`ExportFormat`] specified in the request.
3582    pub mime_type: String,
3583}
3584
3585impl PaperDocExportResult {
3586    pub fn new(owner: String, title: String, revision: i64, mime_type: String) -> Self {
3587        PaperDocExportResult {
3588            owner,
3589            title,
3590            revision,
3591            mime_type,
3592        }
3593    }
3594}
3595
3596const PAPER_DOC_EXPORT_RESULT_FIELDS: &[&str] = &["owner",
3597                                                  "title",
3598                                                  "revision",
3599                                                  "mime_type"];
3600impl PaperDocExportResult {
3601    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3602        map: V,
3603    ) -> Result<PaperDocExportResult, V::Error> {
3604        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3605    }
3606
3607    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3608        mut map: V,
3609        optional: bool,
3610    ) -> Result<Option<PaperDocExportResult>, V::Error> {
3611        let mut field_owner = None;
3612        let mut field_title = None;
3613        let mut field_revision = None;
3614        let mut field_mime_type = None;
3615        let mut nothing = true;
3616        while let Some(key) = map.next_key::<&str>()? {
3617            nothing = false;
3618            match key {
3619                "owner" => {
3620                    if field_owner.is_some() {
3621                        return Err(::serde::de::Error::duplicate_field("owner"));
3622                    }
3623                    field_owner = Some(map.next_value()?);
3624                }
3625                "title" => {
3626                    if field_title.is_some() {
3627                        return Err(::serde::de::Error::duplicate_field("title"));
3628                    }
3629                    field_title = Some(map.next_value()?);
3630                }
3631                "revision" => {
3632                    if field_revision.is_some() {
3633                        return Err(::serde::de::Error::duplicate_field("revision"));
3634                    }
3635                    field_revision = Some(map.next_value()?);
3636                }
3637                "mime_type" => {
3638                    if field_mime_type.is_some() {
3639                        return Err(::serde::de::Error::duplicate_field("mime_type"));
3640                    }
3641                    field_mime_type = Some(map.next_value()?);
3642                }
3643                _ => {
3644                    // unknown field allowed and ignored
3645                    map.next_value::<::serde_json::Value>()?;
3646                }
3647            }
3648        }
3649        if optional && nothing {
3650            return Ok(None);
3651        }
3652        let result = PaperDocExportResult {
3653            owner: field_owner.ok_or_else(|| ::serde::de::Error::missing_field("owner"))?,
3654            title: field_title.ok_or_else(|| ::serde::de::Error::missing_field("title"))?,
3655            revision: field_revision.ok_or_else(|| ::serde::de::Error::missing_field("revision"))?,
3656            mime_type: field_mime_type.ok_or_else(|| ::serde::de::Error::missing_field("mime_type"))?,
3657        };
3658        Ok(Some(result))
3659    }
3660
3661    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3662        &self,
3663        s: &mut S::SerializeStruct,
3664    ) -> Result<(), S::Error> {
3665        use serde::ser::SerializeStruct;
3666        s.serialize_field("owner", &self.owner)?;
3667        s.serialize_field("title", &self.title)?;
3668        s.serialize_field("revision", &self.revision)?;
3669        s.serialize_field("mime_type", &self.mime_type)?;
3670        Ok(())
3671    }
3672}
3673
3674impl<'de> ::serde::de::Deserialize<'de> for PaperDocExportResult {
3675    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3676        // struct deserializer
3677        use serde::de::{MapAccess, Visitor};
3678        struct StructVisitor;
3679        impl<'de> Visitor<'de> for StructVisitor {
3680            type Value = PaperDocExportResult;
3681            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3682                f.write_str("a PaperDocExportResult struct")
3683            }
3684            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3685                PaperDocExportResult::internal_deserialize(map)
3686            }
3687        }
3688        deserializer.deserialize_struct("PaperDocExportResult", PAPER_DOC_EXPORT_RESULT_FIELDS, StructVisitor)
3689    }
3690}
3691
3692impl ::serde::ser::Serialize for PaperDocExportResult {
3693    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3694        // struct serializer
3695        use serde::ser::SerializeStruct;
3696        let mut s = serializer.serialize_struct("PaperDocExportResult", 4)?;
3697        self.internal_serialize::<S>(&mut s)?;
3698        s.end()
3699    }
3700}
3701
3702#[derive(Debug, Clone, PartialEq, Eq)]
3703#[non_exhaustive] // variants may be added in the future
3704pub enum PaperDocPermissionLevel {
3705    /// User will be granted edit permissions.
3706    Edit,
3707    /// User will be granted view and comment permissions.
3708    ViewAndComment,
3709    /// Catch-all used for unrecognized values returned from the server. Encountering this value
3710    /// typically indicates that this SDK version is out of date.
3711    Other,
3712}
3713
3714impl<'de> ::serde::de::Deserialize<'de> for PaperDocPermissionLevel {
3715    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3716        // union deserializer
3717        use serde::de::{self, MapAccess, Visitor};
3718        struct EnumVisitor;
3719        impl<'de> Visitor<'de> for EnumVisitor {
3720            type Value = PaperDocPermissionLevel;
3721            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3722                f.write_str("a PaperDocPermissionLevel structure")
3723            }
3724            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
3725                let tag: &str = match map.next_key()? {
3726                    Some(".tag") => map.next_value()?,
3727                    _ => return Err(de::Error::missing_field(".tag"))
3728                };
3729                let value = match tag {
3730                    "edit" => PaperDocPermissionLevel::Edit,
3731                    "view_and_comment" => PaperDocPermissionLevel::ViewAndComment,
3732                    _ => PaperDocPermissionLevel::Other,
3733                };
3734                crate::eat_json_fields(&mut map)?;
3735                Ok(value)
3736            }
3737        }
3738        const VARIANTS: &[&str] = &["edit",
3739                                    "view_and_comment",
3740                                    "other"];
3741        deserializer.deserialize_struct("PaperDocPermissionLevel", VARIANTS, EnumVisitor)
3742    }
3743}
3744
3745impl ::serde::ser::Serialize for PaperDocPermissionLevel {
3746    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3747        // union serializer
3748        use serde::ser::SerializeStruct;
3749        match self {
3750            PaperDocPermissionLevel::Edit => {
3751                // unit
3752                let mut s = serializer.serialize_struct("PaperDocPermissionLevel", 1)?;
3753                s.serialize_field(".tag", "edit")?;
3754                s.end()
3755            }
3756            PaperDocPermissionLevel::ViewAndComment => {
3757                // unit
3758                let mut s = serializer.serialize_struct("PaperDocPermissionLevel", 1)?;
3759                s.serialize_field(".tag", "view_and_comment")?;
3760                s.end()
3761            }
3762            PaperDocPermissionLevel::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
3763        }
3764    }
3765}
3766
3767#[derive(Debug, Clone, PartialEq, Eq)]
3768#[non_exhaustive] // structs may have more fields added in the future.
3769pub struct PaperDocSharingPolicy {
3770    /// The Paper doc ID.
3771    pub doc_id: PaperDocId,
3772    /// The default sharing policy to be set for the Paper doc.
3773    pub sharing_policy: SharingPolicy,
3774}
3775
3776impl PaperDocSharingPolicy {
3777    pub fn new(doc_id: PaperDocId, sharing_policy: SharingPolicy) -> Self {
3778        PaperDocSharingPolicy {
3779            doc_id,
3780            sharing_policy,
3781        }
3782    }
3783}
3784
3785const PAPER_DOC_SHARING_POLICY_FIELDS: &[&str] = &["doc_id",
3786                                                   "sharing_policy"];
3787impl PaperDocSharingPolicy {
3788    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3789        map: V,
3790    ) -> Result<PaperDocSharingPolicy, V::Error> {
3791        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3792    }
3793
3794    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3795        mut map: V,
3796        optional: bool,
3797    ) -> Result<Option<PaperDocSharingPolicy>, V::Error> {
3798        let mut field_doc_id = None;
3799        let mut field_sharing_policy = None;
3800        let mut nothing = true;
3801        while let Some(key) = map.next_key::<&str>()? {
3802            nothing = false;
3803            match key {
3804                "doc_id" => {
3805                    if field_doc_id.is_some() {
3806                        return Err(::serde::de::Error::duplicate_field("doc_id"));
3807                    }
3808                    field_doc_id = Some(map.next_value()?);
3809                }
3810                "sharing_policy" => {
3811                    if field_sharing_policy.is_some() {
3812                        return Err(::serde::de::Error::duplicate_field("sharing_policy"));
3813                    }
3814                    field_sharing_policy = Some(map.next_value()?);
3815                }
3816                _ => {
3817                    // unknown field allowed and ignored
3818                    map.next_value::<::serde_json::Value>()?;
3819                }
3820            }
3821        }
3822        if optional && nothing {
3823            return Ok(None);
3824        }
3825        let result = PaperDocSharingPolicy {
3826            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
3827            sharing_policy: field_sharing_policy.ok_or_else(|| ::serde::de::Error::missing_field("sharing_policy"))?,
3828        };
3829        Ok(Some(result))
3830    }
3831
3832    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3833        &self,
3834        s: &mut S::SerializeStruct,
3835    ) -> Result<(), S::Error> {
3836        use serde::ser::SerializeStruct;
3837        s.serialize_field("doc_id", &self.doc_id)?;
3838        s.serialize_field("sharing_policy", &self.sharing_policy)?;
3839        Ok(())
3840    }
3841}
3842
3843impl<'de> ::serde::de::Deserialize<'de> for PaperDocSharingPolicy {
3844    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3845        // struct deserializer
3846        use serde::de::{MapAccess, Visitor};
3847        struct StructVisitor;
3848        impl<'de> Visitor<'de> for StructVisitor {
3849            type Value = PaperDocSharingPolicy;
3850            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3851                f.write_str("a PaperDocSharingPolicy struct")
3852            }
3853            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3854                PaperDocSharingPolicy::internal_deserialize(map)
3855            }
3856        }
3857        deserializer.deserialize_struct("PaperDocSharingPolicy", PAPER_DOC_SHARING_POLICY_FIELDS, StructVisitor)
3858    }
3859}
3860
3861impl ::serde::ser::Serialize for PaperDocSharingPolicy {
3862    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3863        // struct serializer
3864        use serde::ser::SerializeStruct;
3865        let mut s = serializer.serialize_struct("PaperDocSharingPolicy", 2)?;
3866        self.internal_serialize::<S>(&mut s)?;
3867        s.end()
3868    }
3869}
3870
3871// struct extends RefPaperDoc
3872impl From<PaperDocSharingPolicy> for RefPaperDoc {
3873    fn from(subtype: PaperDocSharingPolicy) -> Self {
3874        Self {
3875            doc_id: subtype.doc_id,
3876        }
3877    }
3878}
3879#[derive(Debug, Clone, PartialEq, Eq)]
3880#[non_exhaustive] // structs may have more fields added in the future.
3881pub struct PaperDocUpdateArgs {
3882    /// The Paper doc ID.
3883    pub doc_id: PaperDocId,
3884    /// The policy used for the current update call.
3885    pub doc_update_policy: PaperDocUpdatePolicy,
3886    /// The latest doc revision. This value must match the head revision or an error code will be
3887    /// returned. This is to prevent colliding writes.
3888    pub revision: i64,
3889    /// The format of provided data.
3890    pub import_format: ImportFormat,
3891}
3892
3893impl PaperDocUpdateArgs {
3894    pub fn new(
3895        doc_id: PaperDocId,
3896        doc_update_policy: PaperDocUpdatePolicy,
3897        revision: i64,
3898        import_format: ImportFormat,
3899    ) -> Self {
3900        PaperDocUpdateArgs {
3901            doc_id,
3902            doc_update_policy,
3903            revision,
3904            import_format,
3905        }
3906    }
3907}
3908
3909const PAPER_DOC_UPDATE_ARGS_FIELDS: &[&str] = &["doc_id",
3910                                                "doc_update_policy",
3911                                                "revision",
3912                                                "import_format"];
3913impl PaperDocUpdateArgs {
3914    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
3915        map: V,
3916    ) -> Result<PaperDocUpdateArgs, V::Error> {
3917        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
3918    }
3919
3920    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
3921        mut map: V,
3922        optional: bool,
3923    ) -> Result<Option<PaperDocUpdateArgs>, V::Error> {
3924        let mut field_doc_id = None;
3925        let mut field_doc_update_policy = None;
3926        let mut field_revision = None;
3927        let mut field_import_format = None;
3928        let mut nothing = true;
3929        while let Some(key) = map.next_key::<&str>()? {
3930            nothing = false;
3931            match key {
3932                "doc_id" => {
3933                    if field_doc_id.is_some() {
3934                        return Err(::serde::de::Error::duplicate_field("doc_id"));
3935                    }
3936                    field_doc_id = Some(map.next_value()?);
3937                }
3938                "doc_update_policy" => {
3939                    if field_doc_update_policy.is_some() {
3940                        return Err(::serde::de::Error::duplicate_field("doc_update_policy"));
3941                    }
3942                    field_doc_update_policy = Some(map.next_value()?);
3943                }
3944                "revision" => {
3945                    if field_revision.is_some() {
3946                        return Err(::serde::de::Error::duplicate_field("revision"));
3947                    }
3948                    field_revision = Some(map.next_value()?);
3949                }
3950                "import_format" => {
3951                    if field_import_format.is_some() {
3952                        return Err(::serde::de::Error::duplicate_field("import_format"));
3953                    }
3954                    field_import_format = Some(map.next_value()?);
3955                }
3956                _ => {
3957                    // unknown field allowed and ignored
3958                    map.next_value::<::serde_json::Value>()?;
3959                }
3960            }
3961        }
3962        if optional && nothing {
3963            return Ok(None);
3964        }
3965        let result = PaperDocUpdateArgs {
3966            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
3967            doc_update_policy: field_doc_update_policy.ok_or_else(|| ::serde::de::Error::missing_field("doc_update_policy"))?,
3968            revision: field_revision.ok_or_else(|| ::serde::de::Error::missing_field("revision"))?,
3969            import_format: field_import_format.ok_or_else(|| ::serde::de::Error::missing_field("import_format"))?,
3970        };
3971        Ok(Some(result))
3972    }
3973
3974    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
3975        &self,
3976        s: &mut S::SerializeStruct,
3977    ) -> Result<(), S::Error> {
3978        use serde::ser::SerializeStruct;
3979        s.serialize_field("doc_id", &self.doc_id)?;
3980        s.serialize_field("doc_update_policy", &self.doc_update_policy)?;
3981        s.serialize_field("revision", &self.revision)?;
3982        s.serialize_field("import_format", &self.import_format)?;
3983        Ok(())
3984    }
3985}
3986
3987impl<'de> ::serde::de::Deserialize<'de> for PaperDocUpdateArgs {
3988    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
3989        // struct deserializer
3990        use serde::de::{MapAccess, Visitor};
3991        struct StructVisitor;
3992        impl<'de> Visitor<'de> for StructVisitor {
3993            type Value = PaperDocUpdateArgs;
3994            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
3995                f.write_str("a PaperDocUpdateArgs struct")
3996            }
3997            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
3998                PaperDocUpdateArgs::internal_deserialize(map)
3999            }
4000        }
4001        deserializer.deserialize_struct("PaperDocUpdateArgs", PAPER_DOC_UPDATE_ARGS_FIELDS, StructVisitor)
4002    }
4003}
4004
4005impl ::serde::ser::Serialize for PaperDocUpdateArgs {
4006    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4007        // struct serializer
4008        use serde::ser::SerializeStruct;
4009        let mut s = serializer.serialize_struct("PaperDocUpdateArgs", 4)?;
4010        self.internal_serialize::<S>(&mut s)?;
4011        s.end()
4012    }
4013}
4014
4015// struct extends RefPaperDoc
4016impl From<PaperDocUpdateArgs> for RefPaperDoc {
4017    fn from(subtype: PaperDocUpdateArgs) -> Self {
4018        Self {
4019            doc_id: subtype.doc_id,
4020        }
4021    }
4022}
4023#[derive(Debug, Clone, PartialEq, Eq)]
4024#[non_exhaustive] // variants may be added in the future
4025pub enum PaperDocUpdateError {
4026    /// Your account does not have permissions to perform this action. This may be due to it only
4027    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
4028    /// the [Paper Migration
4029    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
4030    InsufficientPermissions,
4031    /// The required doc was not found.
4032    DocNotFound,
4033    /// The provided content was malformed and cannot be imported to Paper.
4034    ContentMalformed,
4035    /// The provided revision does not match the document head.
4036    RevisionMismatch,
4037    /// The newly created Paper doc would be too large, split the content into multiple docs.
4038    DocLengthExceeded,
4039    /// The imported document contains an image that is too large. The current limit is 1MB. This
4040    /// only applies to HTML with data URI.
4041    ImageSizeExceeded,
4042    /// This operation is not allowed on archived Paper docs.
4043    DocArchived,
4044    /// This operation is not allowed on deleted Paper docs.
4045    DocDeleted,
4046    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4047    /// typically indicates that this SDK version is out of date.
4048    Other,
4049}
4050
4051impl<'de> ::serde::de::Deserialize<'de> for PaperDocUpdateError {
4052    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4053        // union deserializer
4054        use serde::de::{self, MapAccess, Visitor};
4055        struct EnumVisitor;
4056        impl<'de> Visitor<'de> for EnumVisitor {
4057            type Value = PaperDocUpdateError;
4058            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4059                f.write_str("a PaperDocUpdateError structure")
4060            }
4061            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4062                let tag: &str = match map.next_key()? {
4063                    Some(".tag") => map.next_value()?,
4064                    _ => return Err(de::Error::missing_field(".tag"))
4065                };
4066                let value = match tag {
4067                    "insufficient_permissions" => PaperDocUpdateError::InsufficientPermissions,
4068                    "doc_not_found" => PaperDocUpdateError::DocNotFound,
4069                    "content_malformed" => PaperDocUpdateError::ContentMalformed,
4070                    "revision_mismatch" => PaperDocUpdateError::RevisionMismatch,
4071                    "doc_length_exceeded" => PaperDocUpdateError::DocLengthExceeded,
4072                    "image_size_exceeded" => PaperDocUpdateError::ImageSizeExceeded,
4073                    "doc_archived" => PaperDocUpdateError::DocArchived,
4074                    "doc_deleted" => PaperDocUpdateError::DocDeleted,
4075                    _ => PaperDocUpdateError::Other,
4076                };
4077                crate::eat_json_fields(&mut map)?;
4078                Ok(value)
4079            }
4080        }
4081        const VARIANTS: &[&str] = &["insufficient_permissions",
4082                                    "other",
4083                                    "doc_not_found",
4084                                    "content_malformed",
4085                                    "revision_mismatch",
4086                                    "doc_length_exceeded",
4087                                    "image_size_exceeded",
4088                                    "doc_archived",
4089                                    "doc_deleted"];
4090        deserializer.deserialize_struct("PaperDocUpdateError", VARIANTS, EnumVisitor)
4091    }
4092}
4093
4094impl ::serde::ser::Serialize for PaperDocUpdateError {
4095    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4096        // union serializer
4097        use serde::ser::SerializeStruct;
4098        match self {
4099            PaperDocUpdateError::InsufficientPermissions => {
4100                // unit
4101                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4102                s.serialize_field(".tag", "insufficient_permissions")?;
4103                s.end()
4104            }
4105            PaperDocUpdateError::DocNotFound => {
4106                // unit
4107                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4108                s.serialize_field(".tag", "doc_not_found")?;
4109                s.end()
4110            }
4111            PaperDocUpdateError::ContentMalformed => {
4112                // unit
4113                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4114                s.serialize_field(".tag", "content_malformed")?;
4115                s.end()
4116            }
4117            PaperDocUpdateError::RevisionMismatch => {
4118                // unit
4119                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4120                s.serialize_field(".tag", "revision_mismatch")?;
4121                s.end()
4122            }
4123            PaperDocUpdateError::DocLengthExceeded => {
4124                // unit
4125                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4126                s.serialize_field(".tag", "doc_length_exceeded")?;
4127                s.end()
4128            }
4129            PaperDocUpdateError::ImageSizeExceeded => {
4130                // unit
4131                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4132                s.serialize_field(".tag", "image_size_exceeded")?;
4133                s.end()
4134            }
4135            PaperDocUpdateError::DocArchived => {
4136                // unit
4137                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4138                s.serialize_field(".tag", "doc_archived")?;
4139                s.end()
4140            }
4141            PaperDocUpdateError::DocDeleted => {
4142                // unit
4143                let mut s = serializer.serialize_struct("PaperDocUpdateError", 1)?;
4144                s.serialize_field(".tag", "doc_deleted")?;
4145                s.end()
4146            }
4147            PaperDocUpdateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4148        }
4149    }
4150}
4151
4152impl ::std::error::Error for PaperDocUpdateError {
4153}
4154
4155impl ::std::fmt::Display for PaperDocUpdateError {
4156    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4157        match self {
4158            PaperDocUpdateError::DocNotFound => f.write_str("The required doc was not found."),
4159            PaperDocUpdateError::ContentMalformed => f.write_str("The provided content was malformed and cannot be imported to Paper."),
4160            PaperDocUpdateError::RevisionMismatch => f.write_str("The provided revision does not match the document head."),
4161            PaperDocUpdateError::DocLengthExceeded => f.write_str("The newly created Paper doc would be too large, split the content into multiple docs."),
4162            PaperDocUpdateError::ImageSizeExceeded => f.write_str("The imported document contains an image that is too large. The current limit is 1MB. This only applies to HTML with data URI."),
4163            PaperDocUpdateError::DocArchived => f.write_str("This operation is not allowed on archived Paper docs."),
4164            PaperDocUpdateError::DocDeleted => f.write_str("This operation is not allowed on deleted Paper docs."),
4165            _ => write!(f, "{:?}", *self),
4166        }
4167    }
4168}
4169
4170// union extends DocLookupError
4171impl From<DocLookupError> for PaperDocUpdateError {
4172    fn from(parent: DocLookupError) -> Self {
4173        match parent {
4174            DocLookupError::InsufficientPermissions => PaperDocUpdateError::InsufficientPermissions,
4175            DocLookupError::Other => PaperDocUpdateError::Other,
4176            DocLookupError::DocNotFound => PaperDocUpdateError::DocNotFound,
4177        }
4178    }
4179}
4180#[derive(Debug, Clone, PartialEq, Eq)]
4181#[non_exhaustive] // variants may be added in the future
4182pub enum PaperDocUpdatePolicy {
4183    /// The content will be appended to the doc.
4184    Append,
4185    /// The content will be prepended to the doc. The doc title will not be affected.
4186    Prepend,
4187    /// The document will be overwitten at the head with the provided content.
4188    OverwriteAll,
4189    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4190    /// typically indicates that this SDK version is out of date.
4191    Other,
4192}
4193
4194impl<'de> ::serde::de::Deserialize<'de> for PaperDocUpdatePolicy {
4195    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4196        // union deserializer
4197        use serde::de::{self, MapAccess, Visitor};
4198        struct EnumVisitor;
4199        impl<'de> Visitor<'de> for EnumVisitor {
4200            type Value = PaperDocUpdatePolicy;
4201            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4202                f.write_str("a PaperDocUpdatePolicy structure")
4203            }
4204            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4205                let tag: &str = match map.next_key()? {
4206                    Some(".tag") => map.next_value()?,
4207                    _ => return Err(de::Error::missing_field(".tag"))
4208                };
4209                let value = match tag {
4210                    "append" => PaperDocUpdatePolicy::Append,
4211                    "prepend" => PaperDocUpdatePolicy::Prepend,
4212                    "overwrite_all" => PaperDocUpdatePolicy::OverwriteAll,
4213                    _ => PaperDocUpdatePolicy::Other,
4214                };
4215                crate::eat_json_fields(&mut map)?;
4216                Ok(value)
4217            }
4218        }
4219        const VARIANTS: &[&str] = &["append",
4220                                    "prepend",
4221                                    "overwrite_all",
4222                                    "other"];
4223        deserializer.deserialize_struct("PaperDocUpdatePolicy", VARIANTS, EnumVisitor)
4224    }
4225}
4226
4227impl ::serde::ser::Serialize for PaperDocUpdatePolicy {
4228    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4229        // union serializer
4230        use serde::ser::SerializeStruct;
4231        match self {
4232            PaperDocUpdatePolicy::Append => {
4233                // unit
4234                let mut s = serializer.serialize_struct("PaperDocUpdatePolicy", 1)?;
4235                s.serialize_field(".tag", "append")?;
4236                s.end()
4237            }
4238            PaperDocUpdatePolicy::Prepend => {
4239                // unit
4240                let mut s = serializer.serialize_struct("PaperDocUpdatePolicy", 1)?;
4241                s.serialize_field(".tag", "prepend")?;
4242                s.end()
4243            }
4244            PaperDocUpdatePolicy::OverwriteAll => {
4245                // unit
4246                let mut s = serializer.serialize_struct("PaperDocUpdatePolicy", 1)?;
4247                s.serialize_field(".tag", "overwrite_all")?;
4248                s.end()
4249            }
4250            PaperDocUpdatePolicy::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4251        }
4252    }
4253}
4254
4255#[derive(Debug, Clone, PartialEq, Eq)]
4256#[non_exhaustive] // structs may have more fields added in the future.
4257pub struct PaperFolderCreateArg {
4258    /// The name of the new Paper folder.
4259    pub name: String,
4260    /// The encrypted Paper folder Id where the new Paper folder should be created. The API user has
4261    /// to have write access to this folder or error is thrown. If not supplied, the new folder will
4262    /// be created at top level.
4263    pub parent_folder_id: Option<String>,
4264    /// Whether the folder to be created should be a team folder. This value will be ignored if
4265    /// parent_folder_id is supplied, as the new folder will inherit the type (private or team
4266    /// folder) from its parent. We will by default create a top-level private folder if both
4267    /// parent_folder_id and is_team_folder are not supplied.
4268    pub is_team_folder: Option<bool>,
4269}
4270
4271impl PaperFolderCreateArg {
4272    pub fn new(name: String) -> Self {
4273        PaperFolderCreateArg {
4274            name,
4275            parent_folder_id: None,
4276            is_team_folder: None,
4277        }
4278    }
4279
4280    pub fn with_parent_folder_id(mut self, value: String) -> Self {
4281        self.parent_folder_id = Some(value);
4282        self
4283    }
4284
4285    pub fn with_is_team_folder(mut self, value: bool) -> Self {
4286        self.is_team_folder = Some(value);
4287        self
4288    }
4289}
4290
4291const PAPER_FOLDER_CREATE_ARG_FIELDS: &[&str] = &["name",
4292                                                  "parent_folder_id",
4293                                                  "is_team_folder"];
4294impl PaperFolderCreateArg {
4295    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4296        map: V,
4297    ) -> Result<PaperFolderCreateArg, V::Error> {
4298        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4299    }
4300
4301    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4302        mut map: V,
4303        optional: bool,
4304    ) -> Result<Option<PaperFolderCreateArg>, V::Error> {
4305        let mut field_name = None;
4306        let mut field_parent_folder_id = None;
4307        let mut field_is_team_folder = None;
4308        let mut nothing = true;
4309        while let Some(key) = map.next_key::<&str>()? {
4310            nothing = false;
4311            match key {
4312                "name" => {
4313                    if field_name.is_some() {
4314                        return Err(::serde::de::Error::duplicate_field("name"));
4315                    }
4316                    field_name = Some(map.next_value()?);
4317                }
4318                "parent_folder_id" => {
4319                    if field_parent_folder_id.is_some() {
4320                        return Err(::serde::de::Error::duplicate_field("parent_folder_id"));
4321                    }
4322                    field_parent_folder_id = Some(map.next_value()?);
4323                }
4324                "is_team_folder" => {
4325                    if field_is_team_folder.is_some() {
4326                        return Err(::serde::de::Error::duplicate_field("is_team_folder"));
4327                    }
4328                    field_is_team_folder = Some(map.next_value()?);
4329                }
4330                _ => {
4331                    // unknown field allowed and ignored
4332                    map.next_value::<::serde_json::Value>()?;
4333                }
4334            }
4335        }
4336        if optional && nothing {
4337            return Ok(None);
4338        }
4339        let result = PaperFolderCreateArg {
4340            name: field_name.ok_or_else(|| ::serde::de::Error::missing_field("name"))?,
4341            parent_folder_id: field_parent_folder_id.and_then(Option::flatten),
4342            is_team_folder: field_is_team_folder.and_then(Option::flatten),
4343        };
4344        Ok(Some(result))
4345    }
4346
4347    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4348        &self,
4349        s: &mut S::SerializeStruct,
4350    ) -> Result<(), S::Error> {
4351        use serde::ser::SerializeStruct;
4352        s.serialize_field("name", &self.name)?;
4353        if let Some(val) = &self.parent_folder_id {
4354            s.serialize_field("parent_folder_id", val)?;
4355        }
4356        if let Some(val) = &self.is_team_folder {
4357            s.serialize_field("is_team_folder", val)?;
4358        }
4359        Ok(())
4360    }
4361}
4362
4363impl<'de> ::serde::de::Deserialize<'de> for PaperFolderCreateArg {
4364    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4365        // struct deserializer
4366        use serde::de::{MapAccess, Visitor};
4367        struct StructVisitor;
4368        impl<'de> Visitor<'de> for StructVisitor {
4369            type Value = PaperFolderCreateArg;
4370            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4371                f.write_str("a PaperFolderCreateArg struct")
4372            }
4373            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4374                PaperFolderCreateArg::internal_deserialize(map)
4375            }
4376        }
4377        deserializer.deserialize_struct("PaperFolderCreateArg", PAPER_FOLDER_CREATE_ARG_FIELDS, StructVisitor)
4378    }
4379}
4380
4381impl ::serde::ser::Serialize for PaperFolderCreateArg {
4382    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4383        // struct serializer
4384        use serde::ser::SerializeStruct;
4385        let mut s = serializer.serialize_struct("PaperFolderCreateArg", 3)?;
4386        self.internal_serialize::<S>(&mut s)?;
4387        s.end()
4388    }
4389}
4390
4391#[derive(Debug, Clone, PartialEq, Eq)]
4392#[non_exhaustive] // variants may be added in the future
4393pub enum PaperFolderCreateError {
4394    /// Your account does not have permissions to perform this action. This may be due to it only
4395    /// having access to Paper as files in the Dropbox filesystem. For more information, refer to
4396    /// the [Paper Migration
4397    /// Guide](https://www.dropbox.com/lp/developers/reference/paper-migration-guide).
4398    InsufficientPermissions,
4399    /// The specified parent Paper folder cannot be found.
4400    FolderNotFound,
4401    /// The folder id cannot be decrypted to valid folder id.
4402    InvalidFolderId,
4403    /// Catch-all used for unrecognized values returned from the server. Encountering this value
4404    /// typically indicates that this SDK version is out of date.
4405    Other,
4406}
4407
4408impl<'de> ::serde::de::Deserialize<'de> for PaperFolderCreateError {
4409    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4410        // union deserializer
4411        use serde::de::{self, MapAccess, Visitor};
4412        struct EnumVisitor;
4413        impl<'de> Visitor<'de> for EnumVisitor {
4414            type Value = PaperFolderCreateError;
4415            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4416                f.write_str("a PaperFolderCreateError structure")
4417            }
4418            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4419                let tag: &str = match map.next_key()? {
4420                    Some(".tag") => map.next_value()?,
4421                    _ => return Err(de::Error::missing_field(".tag"))
4422                };
4423                let value = match tag {
4424                    "insufficient_permissions" => PaperFolderCreateError::InsufficientPermissions,
4425                    "folder_not_found" => PaperFolderCreateError::FolderNotFound,
4426                    "invalid_folder_id" => PaperFolderCreateError::InvalidFolderId,
4427                    _ => PaperFolderCreateError::Other,
4428                };
4429                crate::eat_json_fields(&mut map)?;
4430                Ok(value)
4431            }
4432        }
4433        const VARIANTS: &[&str] = &["insufficient_permissions",
4434                                    "other",
4435                                    "folder_not_found",
4436                                    "invalid_folder_id"];
4437        deserializer.deserialize_struct("PaperFolderCreateError", VARIANTS, EnumVisitor)
4438    }
4439}
4440
4441impl ::serde::ser::Serialize for PaperFolderCreateError {
4442    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4443        // union serializer
4444        use serde::ser::SerializeStruct;
4445        match self {
4446            PaperFolderCreateError::InsufficientPermissions => {
4447                // unit
4448                let mut s = serializer.serialize_struct("PaperFolderCreateError", 1)?;
4449                s.serialize_field(".tag", "insufficient_permissions")?;
4450                s.end()
4451            }
4452            PaperFolderCreateError::FolderNotFound => {
4453                // unit
4454                let mut s = serializer.serialize_struct("PaperFolderCreateError", 1)?;
4455                s.serialize_field(".tag", "folder_not_found")?;
4456                s.end()
4457            }
4458            PaperFolderCreateError::InvalidFolderId => {
4459                // unit
4460                let mut s = serializer.serialize_struct("PaperFolderCreateError", 1)?;
4461                s.serialize_field(".tag", "invalid_folder_id")?;
4462                s.end()
4463            }
4464            PaperFolderCreateError::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
4465        }
4466    }
4467}
4468
4469impl ::std::error::Error for PaperFolderCreateError {
4470}
4471
4472impl ::std::fmt::Display for PaperFolderCreateError {
4473    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4474        match self {
4475            PaperFolderCreateError::FolderNotFound => f.write_str("The specified parent Paper folder cannot be found."),
4476            PaperFolderCreateError::InvalidFolderId => f.write_str("The folder id cannot be decrypted to valid folder id."),
4477            _ => write!(f, "{:?}", *self),
4478        }
4479    }
4480}
4481
4482// union extends PaperApiBaseError
4483impl From<PaperApiBaseError> for PaperFolderCreateError {
4484    fn from(parent: PaperApiBaseError) -> Self {
4485        match parent {
4486            PaperApiBaseError::InsufficientPermissions => PaperFolderCreateError::InsufficientPermissions,
4487            PaperApiBaseError::Other => PaperFolderCreateError::Other,
4488        }
4489    }
4490}
4491#[derive(Debug, Clone, PartialEq, Eq)]
4492#[non_exhaustive] // structs may have more fields added in the future.
4493pub struct PaperFolderCreateResult {
4494    /// Folder ID of the newly created folder.
4495    pub folder_id: String,
4496}
4497
4498impl PaperFolderCreateResult {
4499    pub fn new(folder_id: String) -> Self {
4500        PaperFolderCreateResult {
4501            folder_id,
4502        }
4503    }
4504}
4505
4506const PAPER_FOLDER_CREATE_RESULT_FIELDS: &[&str] = &["folder_id"];
4507impl PaperFolderCreateResult {
4508    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4509        map: V,
4510    ) -> Result<PaperFolderCreateResult, V::Error> {
4511        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4512    }
4513
4514    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4515        mut map: V,
4516        optional: bool,
4517    ) -> Result<Option<PaperFolderCreateResult>, V::Error> {
4518        let mut field_folder_id = None;
4519        let mut nothing = true;
4520        while let Some(key) = map.next_key::<&str>()? {
4521            nothing = false;
4522            match key {
4523                "folder_id" => {
4524                    if field_folder_id.is_some() {
4525                        return Err(::serde::de::Error::duplicate_field("folder_id"));
4526                    }
4527                    field_folder_id = Some(map.next_value()?);
4528                }
4529                _ => {
4530                    // unknown field allowed and ignored
4531                    map.next_value::<::serde_json::Value>()?;
4532                }
4533            }
4534        }
4535        if optional && nothing {
4536            return Ok(None);
4537        }
4538        let result = PaperFolderCreateResult {
4539            folder_id: field_folder_id.ok_or_else(|| ::serde::de::Error::missing_field("folder_id"))?,
4540        };
4541        Ok(Some(result))
4542    }
4543
4544    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4545        &self,
4546        s: &mut S::SerializeStruct,
4547    ) -> Result<(), S::Error> {
4548        use serde::ser::SerializeStruct;
4549        s.serialize_field("folder_id", &self.folder_id)?;
4550        Ok(())
4551    }
4552}
4553
4554impl<'de> ::serde::de::Deserialize<'de> for PaperFolderCreateResult {
4555    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4556        // struct deserializer
4557        use serde::de::{MapAccess, Visitor};
4558        struct StructVisitor;
4559        impl<'de> Visitor<'de> for StructVisitor {
4560            type Value = PaperFolderCreateResult;
4561            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4562                f.write_str("a PaperFolderCreateResult struct")
4563            }
4564            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4565                PaperFolderCreateResult::internal_deserialize(map)
4566            }
4567        }
4568        deserializer.deserialize_struct("PaperFolderCreateResult", PAPER_FOLDER_CREATE_RESULT_FIELDS, StructVisitor)
4569    }
4570}
4571
4572impl ::serde::ser::Serialize for PaperFolderCreateResult {
4573    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4574        // struct serializer
4575        use serde::ser::SerializeStruct;
4576        let mut s = serializer.serialize_struct("PaperFolderCreateResult", 1)?;
4577        self.internal_serialize::<S>(&mut s)?;
4578        s.end()
4579    }
4580}
4581
4582#[derive(Debug, Clone, PartialEq, Eq)]
4583#[non_exhaustive] // structs may have more fields added in the future.
4584pub struct RefPaperDoc {
4585    /// The Paper doc ID.
4586    pub doc_id: PaperDocId,
4587}
4588
4589impl RefPaperDoc {
4590    pub fn new(doc_id: PaperDocId) -> Self {
4591        RefPaperDoc {
4592            doc_id,
4593        }
4594    }
4595}
4596
4597const REF_PAPER_DOC_FIELDS: &[&str] = &["doc_id"];
4598impl RefPaperDoc {
4599    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4600        map: V,
4601    ) -> Result<RefPaperDoc, V::Error> {
4602        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4603    }
4604
4605    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4606        mut map: V,
4607        optional: bool,
4608    ) -> Result<Option<RefPaperDoc>, V::Error> {
4609        let mut field_doc_id = None;
4610        let mut nothing = true;
4611        while let Some(key) = map.next_key::<&str>()? {
4612            nothing = false;
4613            match key {
4614                "doc_id" => {
4615                    if field_doc_id.is_some() {
4616                        return Err(::serde::de::Error::duplicate_field("doc_id"));
4617                    }
4618                    field_doc_id = Some(map.next_value()?);
4619                }
4620                _ => {
4621                    // unknown field allowed and ignored
4622                    map.next_value::<::serde_json::Value>()?;
4623                }
4624            }
4625        }
4626        if optional && nothing {
4627            return Ok(None);
4628        }
4629        let result = RefPaperDoc {
4630            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
4631        };
4632        Ok(Some(result))
4633    }
4634
4635    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4636        &self,
4637        s: &mut S::SerializeStruct,
4638    ) -> Result<(), S::Error> {
4639        use serde::ser::SerializeStruct;
4640        s.serialize_field("doc_id", &self.doc_id)?;
4641        Ok(())
4642    }
4643}
4644
4645impl<'de> ::serde::de::Deserialize<'de> for RefPaperDoc {
4646    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4647        // struct deserializer
4648        use serde::de::{MapAccess, Visitor};
4649        struct StructVisitor;
4650        impl<'de> Visitor<'de> for StructVisitor {
4651            type Value = RefPaperDoc;
4652            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4653                f.write_str("a RefPaperDoc struct")
4654            }
4655            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4656                RefPaperDoc::internal_deserialize(map)
4657            }
4658        }
4659        deserializer.deserialize_struct("RefPaperDoc", REF_PAPER_DOC_FIELDS, StructVisitor)
4660    }
4661}
4662
4663impl ::serde::ser::Serialize for RefPaperDoc {
4664    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4665        // struct serializer
4666        use serde::ser::SerializeStruct;
4667        let mut s = serializer.serialize_struct("RefPaperDoc", 1)?;
4668        self.internal_serialize::<S>(&mut s)?;
4669        s.end()
4670    }
4671}
4672
4673#[derive(Debug, Clone, PartialEq, Eq)]
4674#[non_exhaustive] // structs may have more fields added in the future.
4675pub struct RemovePaperDocUser {
4676    /// The Paper doc ID.
4677    pub doc_id: PaperDocId,
4678    /// User which should be removed from the Paper doc. Specify only email address or Dropbox
4679    /// account ID.
4680    pub member: crate::types::sharing::MemberSelector,
4681}
4682
4683impl RemovePaperDocUser {
4684    pub fn new(doc_id: PaperDocId, member: crate::types::sharing::MemberSelector) -> Self {
4685        RemovePaperDocUser {
4686            doc_id,
4687            member,
4688        }
4689    }
4690}
4691
4692const REMOVE_PAPER_DOC_USER_FIELDS: &[&str] = &["doc_id",
4693                                                "member"];
4694impl RemovePaperDocUser {
4695    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4696        map: V,
4697    ) -> Result<RemovePaperDocUser, V::Error> {
4698        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
4699    }
4700
4701    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
4702        mut map: V,
4703        optional: bool,
4704    ) -> Result<Option<RemovePaperDocUser>, V::Error> {
4705        let mut field_doc_id = None;
4706        let mut field_member = None;
4707        let mut nothing = true;
4708        while let Some(key) = map.next_key::<&str>()? {
4709            nothing = false;
4710            match key {
4711                "doc_id" => {
4712                    if field_doc_id.is_some() {
4713                        return Err(::serde::de::Error::duplicate_field("doc_id"));
4714                    }
4715                    field_doc_id = Some(map.next_value()?);
4716                }
4717                "member" => {
4718                    if field_member.is_some() {
4719                        return Err(::serde::de::Error::duplicate_field("member"));
4720                    }
4721                    field_member = Some(map.next_value()?);
4722                }
4723                _ => {
4724                    // unknown field allowed and ignored
4725                    map.next_value::<::serde_json::Value>()?;
4726                }
4727            }
4728        }
4729        if optional && nothing {
4730            return Ok(None);
4731        }
4732        let result = RemovePaperDocUser {
4733            doc_id: field_doc_id.ok_or_else(|| ::serde::de::Error::missing_field("doc_id"))?,
4734            member: field_member.ok_or_else(|| ::serde::de::Error::missing_field("member"))?,
4735        };
4736        Ok(Some(result))
4737    }
4738
4739    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4740        &self,
4741        s: &mut S::SerializeStruct,
4742    ) -> Result<(), S::Error> {
4743        use serde::ser::SerializeStruct;
4744        s.serialize_field("doc_id", &self.doc_id)?;
4745        s.serialize_field("member", &self.member)?;
4746        Ok(())
4747    }
4748}
4749
4750impl<'de> ::serde::de::Deserialize<'de> for RemovePaperDocUser {
4751    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4752        // struct deserializer
4753        use serde::de::{MapAccess, Visitor};
4754        struct StructVisitor;
4755        impl<'de> Visitor<'de> for StructVisitor {
4756            type Value = RemovePaperDocUser;
4757            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4758                f.write_str("a RemovePaperDocUser struct")
4759            }
4760            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4761                RemovePaperDocUser::internal_deserialize(map)
4762            }
4763        }
4764        deserializer.deserialize_struct("RemovePaperDocUser", REMOVE_PAPER_DOC_USER_FIELDS, StructVisitor)
4765    }
4766}
4767
4768impl ::serde::ser::Serialize for RemovePaperDocUser {
4769    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4770        // struct serializer
4771        use serde::ser::SerializeStruct;
4772        let mut s = serializer.serialize_struct("RemovePaperDocUser", 2)?;
4773        self.internal_serialize::<S>(&mut s)?;
4774        s.end()
4775    }
4776}
4777
4778// struct extends RefPaperDoc
4779impl From<RemovePaperDocUser> for RefPaperDoc {
4780    fn from(subtype: RemovePaperDocUser) -> Self {
4781        Self {
4782            doc_id: subtype.doc_id,
4783        }
4784    }
4785}
4786/// Sharing policy of Paper doc.
4787#[derive(Debug, Clone, PartialEq, Eq, Default)]
4788#[non_exhaustive] // structs may have more fields added in the future.
4789pub struct SharingPolicy {
4790    /// This value applies to the non-team members.
4791    pub public_sharing_policy: Option<SharingPublicPolicyType>,
4792    /// This value applies to the team members only. The value is null for all personal accounts.
4793    pub team_sharing_policy: Option<SharingTeamPolicyType>,
4794}
4795
4796impl SharingPolicy {
4797    pub fn with_public_sharing_policy(mut self, value: SharingPublicPolicyType) -> Self {
4798        self.public_sharing_policy = Some(value);
4799        self
4800    }
4801
4802    pub fn with_team_sharing_policy(mut self, value: SharingTeamPolicyType) -> Self {
4803        self.team_sharing_policy = Some(value);
4804        self
4805    }
4806}
4807
4808const SHARING_POLICY_FIELDS: &[&str] = &["public_sharing_policy",
4809                                         "team_sharing_policy"];
4810impl SharingPolicy {
4811    // no _opt deserializer
4812    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
4813        mut map: V,
4814    ) -> Result<SharingPolicy, V::Error> {
4815        let mut field_public_sharing_policy = None;
4816        let mut field_team_sharing_policy = None;
4817        while let Some(key) = map.next_key::<&str>()? {
4818            match key {
4819                "public_sharing_policy" => {
4820                    if field_public_sharing_policy.is_some() {
4821                        return Err(::serde::de::Error::duplicate_field("public_sharing_policy"));
4822                    }
4823                    field_public_sharing_policy = Some(map.next_value()?);
4824                }
4825                "team_sharing_policy" => {
4826                    if field_team_sharing_policy.is_some() {
4827                        return Err(::serde::de::Error::duplicate_field("team_sharing_policy"));
4828                    }
4829                    field_team_sharing_policy = Some(map.next_value()?);
4830                }
4831                _ => {
4832                    // unknown field allowed and ignored
4833                    map.next_value::<::serde_json::Value>()?;
4834                }
4835            }
4836        }
4837        let result = SharingPolicy {
4838            public_sharing_policy: field_public_sharing_policy.and_then(Option::flatten),
4839            team_sharing_policy: field_team_sharing_policy.and_then(Option::flatten),
4840        };
4841        Ok(result)
4842    }
4843
4844    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
4845        &self,
4846        s: &mut S::SerializeStruct,
4847    ) -> Result<(), S::Error> {
4848        use serde::ser::SerializeStruct;
4849        if let Some(val) = &self.public_sharing_policy {
4850            s.serialize_field("public_sharing_policy", val)?;
4851        }
4852        if let Some(val) = &self.team_sharing_policy {
4853            s.serialize_field("team_sharing_policy", val)?;
4854        }
4855        Ok(())
4856    }
4857}
4858
4859impl<'de> ::serde::de::Deserialize<'de> for SharingPolicy {
4860    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4861        // struct deserializer
4862        use serde::de::{MapAccess, Visitor};
4863        struct StructVisitor;
4864        impl<'de> Visitor<'de> for StructVisitor {
4865            type Value = SharingPolicy;
4866            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4867                f.write_str("a SharingPolicy struct")
4868            }
4869            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
4870                SharingPolicy::internal_deserialize(map)
4871            }
4872        }
4873        deserializer.deserialize_struct("SharingPolicy", SHARING_POLICY_FIELDS, StructVisitor)
4874    }
4875}
4876
4877impl ::serde::ser::Serialize for SharingPolicy {
4878    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4879        // struct serializer
4880        use serde::ser::SerializeStruct;
4881        let mut s = serializer.serialize_struct("SharingPolicy", 2)?;
4882        self.internal_serialize::<S>(&mut s)?;
4883        s.end()
4884    }
4885}
4886
4887#[derive(Debug, Clone, PartialEq, Eq)]
4888pub enum SharingPublicPolicyType {
4889    /// Users who have a link to this doc can edit it.
4890    PeopleWithLinkCanEdit,
4891    /// Users who have a link to this doc can view and comment on it.
4892    PeopleWithLinkCanViewAndComment,
4893    /// Users must be explicitly invited to this doc.
4894    InviteOnly,
4895    /// Value used to indicate that doc sharing is enabled only within team.
4896    Disabled,
4897}
4898
4899impl<'de> ::serde::de::Deserialize<'de> for SharingPublicPolicyType {
4900    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4901        // union deserializer
4902        use serde::de::{self, MapAccess, Visitor};
4903        struct EnumVisitor;
4904        impl<'de> Visitor<'de> for EnumVisitor {
4905            type Value = SharingPublicPolicyType;
4906            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4907                f.write_str("a SharingPublicPolicyType structure")
4908            }
4909            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4910                let tag: &str = match map.next_key()? {
4911                    Some(".tag") => map.next_value()?,
4912                    _ => return Err(de::Error::missing_field(".tag"))
4913                };
4914                let value = match tag {
4915                    "people_with_link_can_edit" => SharingPublicPolicyType::PeopleWithLinkCanEdit,
4916                    "people_with_link_can_view_and_comment" => SharingPublicPolicyType::PeopleWithLinkCanViewAndComment,
4917                    "invite_only" => SharingPublicPolicyType::InviteOnly,
4918                    "disabled" => SharingPublicPolicyType::Disabled,
4919                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
4920                };
4921                crate::eat_json_fields(&mut map)?;
4922                Ok(value)
4923            }
4924        }
4925        const VARIANTS: &[&str] = &["people_with_link_can_edit",
4926                                    "people_with_link_can_view_and_comment",
4927                                    "invite_only",
4928                                    "disabled"];
4929        deserializer.deserialize_struct("SharingPublicPolicyType", VARIANTS, EnumVisitor)
4930    }
4931}
4932
4933impl ::serde::ser::Serialize for SharingPublicPolicyType {
4934    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
4935        // union serializer
4936        use serde::ser::SerializeStruct;
4937        match self {
4938            SharingPublicPolicyType::PeopleWithLinkCanEdit => {
4939                // unit
4940                let mut s = serializer.serialize_struct("SharingPublicPolicyType", 1)?;
4941                s.serialize_field(".tag", "people_with_link_can_edit")?;
4942                s.end()
4943            }
4944            SharingPublicPolicyType::PeopleWithLinkCanViewAndComment => {
4945                // unit
4946                let mut s = serializer.serialize_struct("SharingPublicPolicyType", 1)?;
4947                s.serialize_field(".tag", "people_with_link_can_view_and_comment")?;
4948                s.end()
4949            }
4950            SharingPublicPolicyType::InviteOnly => {
4951                // unit
4952                let mut s = serializer.serialize_struct("SharingPublicPolicyType", 1)?;
4953                s.serialize_field(".tag", "invite_only")?;
4954                s.end()
4955            }
4956            SharingPublicPolicyType::Disabled => {
4957                // unit
4958                let mut s = serializer.serialize_struct("SharingPublicPolicyType", 1)?;
4959                s.serialize_field(".tag", "disabled")?;
4960                s.end()
4961            }
4962        }
4963    }
4964}
4965
4966// union extends SharingTeamPolicyType
4967impl From<SharingTeamPolicyType> for SharingPublicPolicyType {
4968    fn from(parent: SharingTeamPolicyType) -> Self {
4969        match parent {
4970            SharingTeamPolicyType::PeopleWithLinkCanEdit => SharingPublicPolicyType::PeopleWithLinkCanEdit,
4971            SharingTeamPolicyType::PeopleWithLinkCanViewAndComment => SharingPublicPolicyType::PeopleWithLinkCanViewAndComment,
4972            SharingTeamPolicyType::InviteOnly => SharingPublicPolicyType::InviteOnly,
4973        }
4974    }
4975}
4976/// The sharing policy type of the Paper doc.
4977#[derive(Debug, Clone, PartialEq, Eq)]
4978pub enum SharingTeamPolicyType {
4979    /// Users who have a link to this doc can edit it.
4980    PeopleWithLinkCanEdit,
4981    /// Users who have a link to this doc can view and comment on it.
4982    PeopleWithLinkCanViewAndComment,
4983    /// Users must be explicitly invited to this doc.
4984    InviteOnly,
4985}
4986
4987impl<'de> ::serde::de::Deserialize<'de> for SharingTeamPolicyType {
4988    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
4989        // union deserializer
4990        use serde::de::{self, MapAccess, Visitor};
4991        struct EnumVisitor;
4992        impl<'de> Visitor<'de> for EnumVisitor {
4993            type Value = SharingTeamPolicyType;
4994            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
4995                f.write_str("a SharingTeamPolicyType structure")
4996            }
4997            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
4998                let tag: &str = match map.next_key()? {
4999                    Some(".tag") => map.next_value()?,
5000                    _ => return Err(de::Error::missing_field(".tag"))
5001                };
5002                let value = match tag {
5003                    "people_with_link_can_edit" => SharingTeamPolicyType::PeopleWithLinkCanEdit,
5004                    "people_with_link_can_view_and_comment" => SharingTeamPolicyType::PeopleWithLinkCanViewAndComment,
5005                    "invite_only" => SharingTeamPolicyType::InviteOnly,
5006                    _ => return Err(de::Error::unknown_variant(tag, VARIANTS))
5007                };
5008                crate::eat_json_fields(&mut map)?;
5009                Ok(value)
5010            }
5011        }
5012        const VARIANTS: &[&str] = &["people_with_link_can_edit",
5013                                    "people_with_link_can_view_and_comment",
5014                                    "invite_only"];
5015        deserializer.deserialize_struct("SharingTeamPolicyType", VARIANTS, EnumVisitor)
5016    }
5017}
5018
5019impl ::serde::ser::Serialize for SharingTeamPolicyType {
5020    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5021        // union serializer
5022        use serde::ser::SerializeStruct;
5023        match self {
5024            SharingTeamPolicyType::PeopleWithLinkCanEdit => {
5025                // unit
5026                let mut s = serializer.serialize_struct("SharingTeamPolicyType", 1)?;
5027                s.serialize_field(".tag", "people_with_link_can_edit")?;
5028                s.end()
5029            }
5030            SharingTeamPolicyType::PeopleWithLinkCanViewAndComment => {
5031                // unit
5032                let mut s = serializer.serialize_struct("SharingTeamPolicyType", 1)?;
5033                s.serialize_field(".tag", "people_with_link_can_view_and_comment")?;
5034                s.end()
5035            }
5036            SharingTeamPolicyType::InviteOnly => {
5037                // unit
5038                let mut s = serializer.serialize_struct("SharingTeamPolicyType", 1)?;
5039                s.serialize_field(".tag", "invite_only")?;
5040                s.end()
5041            }
5042        }
5043    }
5044}
5045
5046#[derive(Debug, Clone, PartialEq, Eq)]
5047#[non_exhaustive] // structs may have more fields added in the future.
5048pub struct UserInfoWithPermissionLevel {
5049    /// User shared on the Paper doc.
5050    pub user: crate::types::sharing::UserInfo,
5051    /// Permission level for the user.
5052    pub permission_level: PaperDocPermissionLevel,
5053}
5054
5055impl UserInfoWithPermissionLevel {
5056    pub fn new(
5057        user: crate::types::sharing::UserInfo,
5058        permission_level: PaperDocPermissionLevel,
5059    ) -> Self {
5060        UserInfoWithPermissionLevel {
5061            user,
5062            permission_level,
5063        }
5064    }
5065}
5066
5067const USER_INFO_WITH_PERMISSION_LEVEL_FIELDS: &[&str] = &["user",
5068                                                          "permission_level"];
5069impl UserInfoWithPermissionLevel {
5070    pub(crate) fn internal_deserialize<'de, V: ::serde::de::MapAccess<'de>>(
5071        map: V,
5072    ) -> Result<UserInfoWithPermissionLevel, V::Error> {
5073        Self::internal_deserialize_opt(map, false).map(Option::unwrap)
5074    }
5075
5076    pub(crate) fn internal_deserialize_opt<'de, V: ::serde::de::MapAccess<'de>>(
5077        mut map: V,
5078        optional: bool,
5079    ) -> Result<Option<UserInfoWithPermissionLevel>, V::Error> {
5080        let mut field_user = None;
5081        let mut field_permission_level = None;
5082        let mut nothing = true;
5083        while let Some(key) = map.next_key::<&str>()? {
5084            nothing = false;
5085            match key {
5086                "user" => {
5087                    if field_user.is_some() {
5088                        return Err(::serde::de::Error::duplicate_field("user"));
5089                    }
5090                    field_user = Some(map.next_value()?);
5091                }
5092                "permission_level" => {
5093                    if field_permission_level.is_some() {
5094                        return Err(::serde::de::Error::duplicate_field("permission_level"));
5095                    }
5096                    field_permission_level = Some(map.next_value()?);
5097                }
5098                _ => {
5099                    // unknown field allowed and ignored
5100                    map.next_value::<::serde_json::Value>()?;
5101                }
5102            }
5103        }
5104        if optional && nothing {
5105            return Ok(None);
5106        }
5107        let result = UserInfoWithPermissionLevel {
5108            user: field_user.ok_or_else(|| ::serde::de::Error::missing_field("user"))?,
5109            permission_level: field_permission_level.ok_or_else(|| ::serde::de::Error::missing_field("permission_level"))?,
5110        };
5111        Ok(Some(result))
5112    }
5113
5114    pub(crate) fn internal_serialize<S: ::serde::ser::Serializer>(
5115        &self,
5116        s: &mut S::SerializeStruct,
5117    ) -> Result<(), S::Error> {
5118        use serde::ser::SerializeStruct;
5119        s.serialize_field("user", &self.user)?;
5120        s.serialize_field("permission_level", &self.permission_level)?;
5121        Ok(())
5122    }
5123}
5124
5125impl<'de> ::serde::de::Deserialize<'de> for UserInfoWithPermissionLevel {
5126    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5127        // struct deserializer
5128        use serde::de::{MapAccess, Visitor};
5129        struct StructVisitor;
5130        impl<'de> Visitor<'de> for StructVisitor {
5131            type Value = UserInfoWithPermissionLevel;
5132            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5133                f.write_str("a UserInfoWithPermissionLevel struct")
5134            }
5135            fn visit_map<V: MapAccess<'de>>(self, map: V) -> Result<Self::Value, V::Error> {
5136                UserInfoWithPermissionLevel::internal_deserialize(map)
5137            }
5138        }
5139        deserializer.deserialize_struct("UserInfoWithPermissionLevel", USER_INFO_WITH_PERMISSION_LEVEL_FIELDS, StructVisitor)
5140    }
5141}
5142
5143impl ::serde::ser::Serialize for UserInfoWithPermissionLevel {
5144    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5145        // struct serializer
5146        use serde::ser::SerializeStruct;
5147        let mut s = serializer.serialize_struct("UserInfoWithPermissionLevel", 2)?;
5148        self.internal_serialize::<S>(&mut s)?;
5149        s.end()
5150    }
5151}
5152
5153#[derive(Debug, Clone, PartialEq, Eq)]
5154#[non_exhaustive] // variants may be added in the future
5155pub enum UserOnPaperDocFilter {
5156    /// all users who have visited the Paper doc.
5157    Visited,
5158    /// All uses who are shared on the Paper doc. This includes all users who have visited the Paper
5159    /// doc as well as those who have not.
5160    Shared,
5161    /// Catch-all used for unrecognized values returned from the server. Encountering this value
5162    /// typically indicates that this SDK version is out of date.
5163    Other,
5164}
5165
5166impl<'de> ::serde::de::Deserialize<'de> for UserOnPaperDocFilter {
5167    fn deserialize<D: ::serde::de::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
5168        // union deserializer
5169        use serde::de::{self, MapAccess, Visitor};
5170        struct EnumVisitor;
5171        impl<'de> Visitor<'de> for EnumVisitor {
5172            type Value = UserOnPaperDocFilter;
5173            fn expecting(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
5174                f.write_str("a UserOnPaperDocFilter structure")
5175            }
5176            fn visit_map<V: MapAccess<'de>>(self, mut map: V) -> Result<Self::Value, V::Error> {
5177                let tag: &str = match map.next_key()? {
5178                    Some(".tag") => map.next_value()?,
5179                    _ => return Err(de::Error::missing_field(".tag"))
5180                };
5181                let value = match tag {
5182                    "visited" => UserOnPaperDocFilter::Visited,
5183                    "shared" => UserOnPaperDocFilter::Shared,
5184                    _ => UserOnPaperDocFilter::Other,
5185                };
5186                crate::eat_json_fields(&mut map)?;
5187                Ok(value)
5188            }
5189        }
5190        const VARIANTS: &[&str] = &["visited",
5191                                    "shared",
5192                                    "other"];
5193        deserializer.deserialize_struct("UserOnPaperDocFilter", VARIANTS, EnumVisitor)
5194    }
5195}
5196
5197impl ::serde::ser::Serialize for UserOnPaperDocFilter {
5198    fn serialize<S: ::serde::ser::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
5199        // union serializer
5200        use serde::ser::SerializeStruct;
5201        match self {
5202            UserOnPaperDocFilter::Visited => {
5203                // unit
5204                let mut s = serializer.serialize_struct("UserOnPaperDocFilter", 1)?;
5205                s.serialize_field(".tag", "visited")?;
5206                s.end()
5207            }
5208            UserOnPaperDocFilter::Shared => {
5209                // unit
5210                let mut s = serializer.serialize_struct("UserOnPaperDocFilter", 1)?;
5211                s.serialize_field(".tag", "shared")?;
5212                s.end()
5213            }
5214            UserOnPaperDocFilter::Other => Err(::serde::ser::Error::custom("cannot serialize 'Other' variant"))
5215        }
5216    }
5217}
5218