Skip to main content

origincloud_support/generated/
origincloud.support.v1beta1.rs

1// Code generated by origincloud-sdk-generator. DO NOT EDIT.
2// source: origincloud/support/v1beta1/case.proto
3// source: origincloud/support/v1beta1/case_message.proto
4
5/// A support case: one question or problem, and the conversation about it.
6#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
7pub struct Case {
8    /// The case's resource name, `organizations/{organization}/cases/{case}`.
9    #[prost(string, tag = "1")]
10    pub name: ::prost::alloc::string::String,
11    /// The case's URN, the identifier access policies and the audit log use.
12    #[prost(string, tag = "2")]
13    pub urn: ::prost::alloc::string::String,
14    /// The project the case is about, `projects/{project}`, one of the
15    /// organization's. Empty for a case about the organization as a whole.
16    #[prost(string, tag = "3")]
17    pub project: ::prost::alloc::string::String,
18    /// A one-line summary. Not empty.
19    #[prost(string, tag = "4")]
20    pub subject: ::prost::alloc::string::String,
21    /// What the case is about, in full. Not empty.
22    #[prost(string, tag = "5")]
23    pub description: ::prost::alloc::string::String,
24    /// The email address every notification about the case is sent to, for
25    /// as long as the case exists: when support replies, and when its state
26    /// changes.
27    #[prost(string, tag = "6")]
28    pub contact_email: ::prost::alloc::string::String,
29    /// Where the case stands. Changed by support, and by `CloseCase` and
30    /// `ReopenCase`.
31    #[prost(enumeration = "case::State", tag = "7")]
32    pub state: i32,
33    /// The principal that opened the case, such as `user:<id>` or
34    /// `service_account:<id>`.
35    #[prost(string, tag = "8")]
36    pub creator: ::prost::alloc::string::String,
37    /// When the case was opened.
38    #[prost(message, optional, tag = "9")]
39    pub create_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
40    /// When the case last changed: a message added, or its state changed.
41    #[prost(message, optional, tag = "10")]
42    pub update_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
43}
44/// Nested message and enum types in `Case`.
45pub mod case {
46    /// Where the case stands.
47    #[derive(
48        Clone,
49        Copy,
50        Debug,
51        PartialEq,
52        Eq,
53        Hash,
54        PartialOrd,
55        Ord,
56        ::prost::Enumeration
57    )]
58    #[repr(i32)]
59    pub enum State {
60        /// Not set.
61        Unspecified = 0,
62        /// Opened, or opened again, and waiting for support.
63        Open = 1,
64        /// Support is working on it.
65        InProgress = 2,
66        /// Support considers it solved. Reopen it if it isn't.
67        Resolved = 3,
68        /// Finished. Reopen it to continue the conversation.
69        Closed = 4,
70    }
71    impl State {
72        /// String value of the enum field names used in the ProtoBuf definition.
73        ///
74        /// The values are not transformed in any way and thus are considered stable
75        /// (if the ProtoBuf definition does not change) and safe for programmatic use.
76        pub fn as_str_name(&self) -> &'static str {
77            match self {
78                Self::Unspecified => "STATE_UNSPECIFIED",
79                Self::Open => "OPEN",
80                Self::InProgress => "IN_PROGRESS",
81                Self::Resolved => "RESOLVED",
82                Self::Closed => "CLOSED",
83            }
84        }
85        /// Creates an enum from field names used in the ProtoBuf definition.
86        pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
87            match value {
88                "STATE_UNSPECIFIED" => Some(Self::Unspecified),
89                "OPEN" => Some(Self::Open),
90                "IN_PROGRESS" => Some(Self::InProgress),
91                "RESOLVED" => Some(Self::Resolved),
92                "CLOSED" => Some(Self::Closed),
93                _ => None,
94            }
95        }
96    }
97}
98/// The request for GetCase.
99#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
100pub struct GetCaseRequest {
101    /// The case to return.
102    #[prost(string, tag = "1")]
103    pub name: ::prost::alloc::string::String,
104}
105/// The request for ListCases.
106#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
107pub struct ListCasesRequest {
108    /// The organization whose cases to list, `organizations/{organization}`.
109    #[prost(string, tag = "1")]
110    pub parent: ::prost::alloc::string::String,
111    /// The most cases to return; the server clamps it, and 0 means its
112    /// default.
113    #[prost(int32, tag = "2")]
114    pub page_size: i32,
115    /// A previous response's `next_page_token`, for the page after it.
116    #[prost(string, tag = "3")]
117    pub page_token: ::prost::alloc::string::String,
118}
119/// The response for ListCases.
120#[derive(Clone, PartialEq, ::prost::Message)]
121pub struct ListCasesResponse {
122    /// The cases on this page.
123    #[prost(message, repeated, tag = "1")]
124    pub cases: ::prost::alloc::vec::Vec<Case>,
125    /// The token for the next page; empty on the last one.
126    #[prost(string, tag = "2")]
127    pub next_page_token: ::prost::alloc::string::String,
128}
129/// The request for CreateCase.
130#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
131pub struct CreateCaseRequest {
132    /// The organization to open the case in, `organizations/{organization}`.
133    #[prost(string, tag = "1")]
134    pub parent: ::prost::alloc::string::String,
135    /// The case to open: its `subject`, `description` and `contact_email`,
136    /// and its `project` if it is about one.
137    #[prost(message, optional, tag = "2")]
138    pub case: ::core::option::Option<Case>,
139    /// A UUID; a repeat with the same id returns the case the first request
140    /// opened instead of opening a second one.
141    #[prost(string, tag = "3")]
142    pub request_id: ::prost::alloc::string::String,
143}
144/// The request for CloseCase.
145#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
146pub struct CloseCaseRequest {
147    /// The case to close.
148    #[prost(string, tag = "1")]
149    pub name: ::prost::alloc::string::String,
150}
151/// The request for ReopenCase.
152#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
153pub struct ReopenCaseRequest {
154    /// The case to open again.
155    #[prost(string, tag = "1")]
156    pub name: ::prost::alloc::string::String,
157}
158/// One message of a case's conversation.
159#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
160pub struct CaseMessage {
161    /// The message's resource name,
162    /// `organizations/{organization}/cases/{case}/messages/{message}`.
163    #[prost(string, tag = "1")]
164    pub name: ::prost::alloc::string::String,
165    /// The message's text. Not empty.
166    #[prost(string, tag = "2")]
167    pub body: ::prost::alloc::string::String,
168    /// The principal that wrote the message, such as `user:<id>` or
169    /// `service_account:<id>`.
170    #[prost(string, tag = "3")]
171    pub author: ::prost::alloc::string::String,
172    /// When the message was added.
173    #[prost(message, optional, tag = "4")]
174    pub create_time: ::core::option::Option<::origincloud_core::protobuf::Timestamp>,
175}
176/// The request for GetCaseMessage.
177#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
178pub struct GetCaseMessageRequest {
179    /// The message to return.
180    #[prost(string, tag = "1")]
181    pub name: ::prost::alloc::string::String,
182}
183/// The request for ListCaseMessages.
184#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
185pub struct ListCaseMessagesRequest {
186    /// The case whose messages to list,
187    /// `organizations/{organization}/cases/{case}`.
188    #[prost(string, tag = "1")]
189    pub parent: ::prost::alloc::string::String,
190    /// The most messages to return; the server clamps it, and 0 means its
191    /// default.
192    #[prost(int32, tag = "2")]
193    pub page_size: i32,
194    /// A previous response's `next_page_token`, for the page after it.
195    #[prost(string, tag = "3")]
196    pub page_token: ::prost::alloc::string::String,
197}
198/// The response for ListCaseMessages.
199#[derive(Clone, PartialEq, ::prost::Message)]
200pub struct ListCaseMessagesResponse {
201    /// The messages on this page.
202    #[prost(message, repeated, tag = "1")]
203    pub case_messages: ::prost::alloc::vec::Vec<CaseMessage>,
204    /// The token for the next page; empty on the last one.
205    #[prost(string, tag = "2")]
206    pub next_page_token: ::prost::alloc::string::String,
207}
208/// The request for CreateCaseMessage.
209#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
210pub struct CreateCaseMessageRequest {
211    /// The case to add the message to,
212    /// `organizations/{organization}/cases/{case}`.
213    #[prost(string, tag = "1")]
214    pub parent: ::prost::alloc::string::String,
215    /// The message to add: its `body`.
216    #[prost(message, optional, tag = "2")]
217    pub case_message: ::core::option::Option<CaseMessage>,
218    /// A UUID; a repeat with the same id returns the message the first
219    /// request added instead of adding a second one.
220    #[prost(string, tag = "3")]
221    pub request_id: ::prost::alloc::string::String,
222}
223impl serde::Serialize for Case {
224    #[allow(deprecated)]
225    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
226    where
227        S: serde::Serializer,
228    {
229        use serde::ser::SerializeStruct;
230        let mut len = 0;
231        if !self.name.is_empty() {
232            len += 1;
233        }
234        if !self.urn.is_empty() {
235            len += 1;
236        }
237        if !self.project.is_empty() {
238            len += 1;
239        }
240        if !self.subject.is_empty() {
241            len += 1;
242        }
243        if !self.description.is_empty() {
244            len += 1;
245        }
246        if !self.contact_email.is_empty() {
247            len += 1;
248        }
249        if self.state != 0 {
250            len += 1;
251        }
252        if !self.creator.is_empty() {
253            len += 1;
254        }
255        if self.create_time.is_some() {
256            len += 1;
257        }
258        if self.update_time.is_some() {
259            len += 1;
260        }
261        let mut struct_ser = serializer
262            .serialize_struct("origincloud.support.v1beta1.Case", len)?;
263        if !self.name.is_empty() {
264            struct_ser.serialize_field("name", &self.name)?;
265        }
266        if !self.urn.is_empty() {
267            struct_ser.serialize_field("urn", &self.urn)?;
268        }
269        if !self.project.is_empty() {
270            struct_ser.serialize_field("project", &self.project)?;
271        }
272        if !self.subject.is_empty() {
273            struct_ser.serialize_field("subject", &self.subject)?;
274        }
275        if !self.description.is_empty() {
276            struct_ser.serialize_field("description", &self.description)?;
277        }
278        if !self.contact_email.is_empty() {
279            struct_ser.serialize_field("contactEmail", &self.contact_email)?;
280        }
281        if self.state != 0 {
282            let v = case::State::try_from(self.state)
283                .map_err(|_| serde::ser::Error::custom(
284                    format!("Invalid variant {}", self.state),
285                ))?;
286            struct_ser.serialize_field("state", &v)?;
287        }
288        if !self.creator.is_empty() {
289            struct_ser.serialize_field("creator", &self.creator)?;
290        }
291        if let Some(v) = self.create_time.as_ref() {
292            struct_ser.serialize_field("createTime", v)?;
293        }
294        if let Some(v) = self.update_time.as_ref() {
295            struct_ser.serialize_field("updateTime", v)?;
296        }
297        struct_ser.end()
298    }
299}
300impl<'de> serde::Deserialize<'de> for Case {
301    #[allow(deprecated)]
302    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
303    where
304        D: serde::Deserializer<'de>,
305    {
306        const FIELDS: &[&str] = &[
307            "name",
308            "urn",
309            "project",
310            "subject",
311            "description",
312            "contact_email",
313            "contactEmail",
314            "state",
315            "creator",
316            "create_time",
317            "createTime",
318            "update_time",
319            "updateTime",
320        ];
321        #[allow(clippy::enum_variant_names)]
322        enum GeneratedField {
323            Name,
324            Urn,
325            Project,
326            Subject,
327            Description,
328            ContactEmail,
329            State,
330            Creator,
331            CreateTime,
332            UpdateTime,
333            __SkipField__,
334        }
335        impl<'de> serde::Deserialize<'de> for GeneratedField {
336            fn deserialize<D>(
337                deserializer: D,
338            ) -> std::result::Result<GeneratedField, D::Error>
339            where
340                D: serde::Deserializer<'de>,
341            {
342                struct GeneratedVisitor;
343                impl serde::de::Visitor<'_> for GeneratedVisitor {
344                    type Value = GeneratedField;
345                    fn expecting(
346                        &self,
347                        formatter: &mut std::fmt::Formatter<'_>,
348                    ) -> std::fmt::Result {
349                        write!(formatter, "expected one of: {:?}", & FIELDS)
350                    }
351                    #[allow(unused_variables)]
352                    fn visit_str<E>(
353                        self,
354                        value: &str,
355                    ) -> std::result::Result<GeneratedField, E>
356                    where
357                        E: serde::de::Error,
358                    {
359                        match value {
360                            "name" => Ok(GeneratedField::Name),
361                            "urn" => Ok(GeneratedField::Urn),
362                            "project" => Ok(GeneratedField::Project),
363                            "subject" => Ok(GeneratedField::Subject),
364                            "description" => Ok(GeneratedField::Description),
365                            "contactEmail" | "contact_email" => {
366                                Ok(GeneratedField::ContactEmail)
367                            }
368                            "state" => Ok(GeneratedField::State),
369                            "creator" => Ok(GeneratedField::Creator),
370                            "createTime" | "create_time" => {
371                                Ok(GeneratedField::CreateTime)
372                            }
373                            "updateTime" | "update_time" => {
374                                Ok(GeneratedField::UpdateTime)
375                            }
376                            _ => Ok(GeneratedField::__SkipField__),
377                        }
378                    }
379                }
380                deserializer.deserialize_identifier(GeneratedVisitor)
381            }
382        }
383        struct GeneratedVisitor;
384        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
385            type Value = Case;
386            fn expecting(
387                &self,
388                formatter: &mut std::fmt::Formatter<'_>,
389            ) -> std::fmt::Result {
390                formatter.write_str("struct origincloud.support.v1beta1.Case")
391            }
392            fn visit_map<V>(self, mut map_: V) -> std::result::Result<Case, V::Error>
393            where
394                V: serde::de::MapAccess<'de>,
395            {
396                let mut name__ = None;
397                let mut urn__ = None;
398                let mut project__ = None;
399                let mut subject__ = None;
400                let mut description__ = None;
401                let mut contact_email__ = None;
402                let mut state__ = None;
403                let mut creator__ = None;
404                let mut create_time__ = None;
405                let mut update_time__ = None;
406                while let Some(k) = map_.next_key()? {
407                    match k {
408                        GeneratedField::Name => {
409                            if name__.is_some() {
410                                return Err(serde::de::Error::duplicate_field("name"));
411                            }
412                            name__ = Some(map_.next_value()?);
413                        }
414                        GeneratedField::Urn => {
415                            if urn__.is_some() {
416                                return Err(serde::de::Error::duplicate_field("urn"));
417                            }
418                            urn__ = Some(map_.next_value()?);
419                        }
420                        GeneratedField::Project => {
421                            if project__.is_some() {
422                                return Err(serde::de::Error::duplicate_field("project"));
423                            }
424                            project__ = Some(map_.next_value()?);
425                        }
426                        GeneratedField::Subject => {
427                            if subject__.is_some() {
428                                return Err(serde::de::Error::duplicate_field("subject"));
429                            }
430                            subject__ = Some(map_.next_value()?);
431                        }
432                        GeneratedField::Description => {
433                            if description__.is_some() {
434                                return Err(
435                                    serde::de::Error::duplicate_field("description"),
436                                );
437                            }
438                            description__ = Some(map_.next_value()?);
439                        }
440                        GeneratedField::ContactEmail => {
441                            if contact_email__.is_some() {
442                                return Err(
443                                    serde::de::Error::duplicate_field("contactEmail"),
444                                );
445                            }
446                            contact_email__ = Some(map_.next_value()?);
447                        }
448                        GeneratedField::State => {
449                            if state__.is_some() {
450                                return Err(serde::de::Error::duplicate_field("state"));
451                            }
452                            state__ = Some(map_.next_value::<case::State>()? as i32);
453                        }
454                        GeneratedField::Creator => {
455                            if creator__.is_some() {
456                                return Err(serde::de::Error::duplicate_field("creator"));
457                            }
458                            creator__ = Some(map_.next_value()?);
459                        }
460                        GeneratedField::CreateTime => {
461                            if create_time__.is_some() {
462                                return Err(serde::de::Error::duplicate_field("createTime"));
463                            }
464                            create_time__ = map_.next_value()?;
465                        }
466                        GeneratedField::UpdateTime => {
467                            if update_time__.is_some() {
468                                return Err(serde::de::Error::duplicate_field("updateTime"));
469                            }
470                            update_time__ = map_.next_value()?;
471                        }
472                        GeneratedField::__SkipField__ => {
473                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
474                        }
475                    }
476                }
477                Ok(Case {
478                    name: name__.unwrap_or_default(),
479                    urn: urn__.unwrap_or_default(),
480                    project: project__.unwrap_or_default(),
481                    subject: subject__.unwrap_or_default(),
482                    description: description__.unwrap_or_default(),
483                    contact_email: contact_email__.unwrap_or_default(),
484                    state: state__.unwrap_or_default(),
485                    creator: creator__.unwrap_or_default(),
486                    create_time: create_time__,
487                    update_time: update_time__,
488                })
489            }
490        }
491        deserializer
492            .deserialize_struct(
493                "origincloud.support.v1beta1.Case",
494                FIELDS,
495                GeneratedVisitor,
496            )
497    }
498}
499impl serde::Serialize for case::State {
500    #[allow(deprecated)]
501    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
502    where
503        S: serde::Serializer,
504    {
505        let variant = match self {
506            Self::Unspecified => "STATE_UNSPECIFIED",
507            Self::Open => "OPEN",
508            Self::InProgress => "IN_PROGRESS",
509            Self::Resolved => "RESOLVED",
510            Self::Closed => "CLOSED",
511        };
512        serializer.serialize_str(variant)
513    }
514}
515impl<'de> serde::Deserialize<'de> for case::State {
516    #[allow(deprecated)]
517    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
518    where
519        D: serde::Deserializer<'de>,
520    {
521        const FIELDS: &[&str] = &[
522            "STATE_UNSPECIFIED",
523            "OPEN",
524            "IN_PROGRESS",
525            "RESOLVED",
526            "CLOSED",
527        ];
528        struct GeneratedVisitor;
529        impl serde::de::Visitor<'_> for GeneratedVisitor {
530            type Value = case::State;
531            fn expecting(
532                &self,
533                formatter: &mut std::fmt::Formatter<'_>,
534            ) -> std::fmt::Result {
535                write!(formatter, "expected one of: {:?}", & FIELDS)
536            }
537            fn visit_i64<E>(self, v: i64) -> std::result::Result<Self::Value, E>
538            where
539                E: serde::de::Error,
540            {
541                i32::try_from(v)
542                    .ok()
543                    .and_then(|x| {
544                        x.try_into().ok().or_else(|| Some(case::State::default()))
545                    })
546                    .ok_or_else(|| {
547                        serde::de::Error::invalid_value(
548                            serde::de::Unexpected::Signed(v),
549                            &self,
550                        )
551                    })
552            }
553            fn visit_u64<E>(self, v: u64) -> std::result::Result<Self::Value, E>
554            where
555                E: serde::de::Error,
556            {
557                i32::try_from(v)
558                    .ok()
559                    .and_then(|x| {
560                        x.try_into().ok().or_else(|| Some(case::State::default()))
561                    })
562                    .ok_or_else(|| {
563                        serde::de::Error::invalid_value(
564                            serde::de::Unexpected::Unsigned(v),
565                            &self,
566                        )
567                    })
568            }
569            fn visit_str<E>(self, value: &str) -> std::result::Result<Self::Value, E>
570            where
571                E: serde::de::Error,
572            {
573                match value {
574                    "STATE_UNSPECIFIED" => Ok(case::State::Unspecified),
575                    "OPEN" => Ok(case::State::Open),
576                    "IN_PROGRESS" => Ok(case::State::InProgress),
577                    "RESOLVED" => Ok(case::State::Resolved),
578                    "CLOSED" => Ok(case::State::Closed),
579                    _ => Ok(case::State::default()),
580                }
581            }
582        }
583        deserializer.deserialize_any(GeneratedVisitor)
584    }
585}
586impl serde::Serialize for CaseMessage {
587    #[allow(deprecated)]
588    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
589    where
590        S: serde::Serializer,
591    {
592        use serde::ser::SerializeStruct;
593        let mut len = 0;
594        if !self.name.is_empty() {
595            len += 1;
596        }
597        if !self.body.is_empty() {
598            len += 1;
599        }
600        if !self.author.is_empty() {
601            len += 1;
602        }
603        if self.create_time.is_some() {
604            len += 1;
605        }
606        let mut struct_ser = serializer
607            .serialize_struct("origincloud.support.v1beta1.CaseMessage", len)?;
608        if !self.name.is_empty() {
609            struct_ser.serialize_field("name", &self.name)?;
610        }
611        if !self.body.is_empty() {
612            struct_ser.serialize_field("body", &self.body)?;
613        }
614        if !self.author.is_empty() {
615            struct_ser.serialize_field("author", &self.author)?;
616        }
617        if let Some(v) = self.create_time.as_ref() {
618            struct_ser.serialize_field("createTime", v)?;
619        }
620        struct_ser.end()
621    }
622}
623impl<'de> serde::Deserialize<'de> for CaseMessage {
624    #[allow(deprecated)]
625    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
626    where
627        D: serde::Deserializer<'de>,
628    {
629        const FIELDS: &[&str] = &["name", "body", "author", "create_time", "createTime"];
630        #[allow(clippy::enum_variant_names)]
631        enum GeneratedField {
632            Name,
633            Body,
634            Author,
635            CreateTime,
636            __SkipField__,
637        }
638        impl<'de> serde::Deserialize<'de> for GeneratedField {
639            fn deserialize<D>(
640                deserializer: D,
641            ) -> std::result::Result<GeneratedField, D::Error>
642            where
643                D: serde::Deserializer<'de>,
644            {
645                struct GeneratedVisitor;
646                impl serde::de::Visitor<'_> for GeneratedVisitor {
647                    type Value = GeneratedField;
648                    fn expecting(
649                        &self,
650                        formatter: &mut std::fmt::Formatter<'_>,
651                    ) -> std::fmt::Result {
652                        write!(formatter, "expected one of: {:?}", & FIELDS)
653                    }
654                    #[allow(unused_variables)]
655                    fn visit_str<E>(
656                        self,
657                        value: &str,
658                    ) -> std::result::Result<GeneratedField, E>
659                    where
660                        E: serde::de::Error,
661                    {
662                        match value {
663                            "name" => Ok(GeneratedField::Name),
664                            "body" => Ok(GeneratedField::Body),
665                            "author" => Ok(GeneratedField::Author),
666                            "createTime" | "create_time" => {
667                                Ok(GeneratedField::CreateTime)
668                            }
669                            _ => Ok(GeneratedField::__SkipField__),
670                        }
671                    }
672                }
673                deserializer.deserialize_identifier(GeneratedVisitor)
674            }
675        }
676        struct GeneratedVisitor;
677        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
678            type Value = CaseMessage;
679            fn expecting(
680                &self,
681                formatter: &mut std::fmt::Formatter<'_>,
682            ) -> std::fmt::Result {
683                formatter.write_str("struct origincloud.support.v1beta1.CaseMessage")
684            }
685            fn visit_map<V>(
686                self,
687                mut map_: V,
688            ) -> std::result::Result<CaseMessage, V::Error>
689            where
690                V: serde::de::MapAccess<'de>,
691            {
692                let mut name__ = None;
693                let mut body__ = None;
694                let mut author__ = None;
695                let mut create_time__ = None;
696                while let Some(k) = map_.next_key()? {
697                    match k {
698                        GeneratedField::Name => {
699                            if name__.is_some() {
700                                return Err(serde::de::Error::duplicate_field("name"));
701                            }
702                            name__ = Some(map_.next_value()?);
703                        }
704                        GeneratedField::Body => {
705                            if body__.is_some() {
706                                return Err(serde::de::Error::duplicate_field("body"));
707                            }
708                            body__ = Some(map_.next_value()?);
709                        }
710                        GeneratedField::Author => {
711                            if author__.is_some() {
712                                return Err(serde::de::Error::duplicate_field("author"));
713                            }
714                            author__ = Some(map_.next_value()?);
715                        }
716                        GeneratedField::CreateTime => {
717                            if create_time__.is_some() {
718                                return Err(serde::de::Error::duplicate_field("createTime"));
719                            }
720                            create_time__ = map_.next_value()?;
721                        }
722                        GeneratedField::__SkipField__ => {
723                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
724                        }
725                    }
726                }
727                Ok(CaseMessage {
728                    name: name__.unwrap_or_default(),
729                    body: body__.unwrap_or_default(),
730                    author: author__.unwrap_or_default(),
731                    create_time: create_time__,
732                })
733            }
734        }
735        deserializer
736            .deserialize_struct(
737                "origincloud.support.v1beta1.CaseMessage",
738                FIELDS,
739                GeneratedVisitor,
740            )
741    }
742}
743impl serde::Serialize for CloseCaseRequest {
744    #[allow(deprecated)]
745    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
746    where
747        S: serde::Serializer,
748    {
749        use serde::ser::SerializeStruct;
750        let mut len = 0;
751        if !self.name.is_empty() {
752            len += 1;
753        }
754        let mut struct_ser = serializer
755            .serialize_struct("origincloud.support.v1beta1.CloseCaseRequest", len)?;
756        if !self.name.is_empty() {
757            struct_ser.serialize_field("name", &self.name)?;
758        }
759        struct_ser.end()
760    }
761}
762impl<'de> serde::Deserialize<'de> for CloseCaseRequest {
763    #[allow(deprecated)]
764    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
765    where
766        D: serde::Deserializer<'de>,
767    {
768        const FIELDS: &[&str] = &["name"];
769        #[allow(clippy::enum_variant_names)]
770        enum GeneratedField {
771            Name,
772            __SkipField__,
773        }
774        impl<'de> serde::Deserialize<'de> for GeneratedField {
775            fn deserialize<D>(
776                deserializer: D,
777            ) -> std::result::Result<GeneratedField, D::Error>
778            where
779                D: serde::Deserializer<'de>,
780            {
781                struct GeneratedVisitor;
782                impl serde::de::Visitor<'_> for GeneratedVisitor {
783                    type Value = GeneratedField;
784                    fn expecting(
785                        &self,
786                        formatter: &mut std::fmt::Formatter<'_>,
787                    ) -> std::fmt::Result {
788                        write!(formatter, "expected one of: {:?}", & FIELDS)
789                    }
790                    #[allow(unused_variables)]
791                    fn visit_str<E>(
792                        self,
793                        value: &str,
794                    ) -> std::result::Result<GeneratedField, E>
795                    where
796                        E: serde::de::Error,
797                    {
798                        match value {
799                            "name" => Ok(GeneratedField::Name),
800                            _ => Ok(GeneratedField::__SkipField__),
801                        }
802                    }
803                }
804                deserializer.deserialize_identifier(GeneratedVisitor)
805            }
806        }
807        struct GeneratedVisitor;
808        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
809            type Value = CloseCaseRequest;
810            fn expecting(
811                &self,
812                formatter: &mut std::fmt::Formatter<'_>,
813            ) -> std::fmt::Result {
814                formatter
815                    .write_str("struct origincloud.support.v1beta1.CloseCaseRequest")
816            }
817            fn visit_map<V>(
818                self,
819                mut map_: V,
820            ) -> std::result::Result<CloseCaseRequest, V::Error>
821            where
822                V: serde::de::MapAccess<'de>,
823            {
824                let mut name__ = None;
825                while let Some(k) = map_.next_key()? {
826                    match k {
827                        GeneratedField::Name => {
828                            if name__.is_some() {
829                                return Err(serde::de::Error::duplicate_field("name"));
830                            }
831                            name__ = Some(map_.next_value()?);
832                        }
833                        GeneratedField::__SkipField__ => {
834                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
835                        }
836                    }
837                }
838                Ok(CloseCaseRequest {
839                    name: name__.unwrap_or_default(),
840                })
841            }
842        }
843        deserializer
844            .deserialize_struct(
845                "origincloud.support.v1beta1.CloseCaseRequest",
846                FIELDS,
847                GeneratedVisitor,
848            )
849    }
850}
851impl serde::Serialize for CreateCaseMessageRequest {
852    #[allow(deprecated)]
853    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
854    where
855        S: serde::Serializer,
856    {
857        use serde::ser::SerializeStruct;
858        let mut len = 0;
859        if !self.parent.is_empty() {
860            len += 1;
861        }
862        if self.case_message.is_some() {
863            len += 1;
864        }
865        if !self.request_id.is_empty() {
866            len += 1;
867        }
868        let mut struct_ser = serializer
869            .serialize_struct(
870                "origincloud.support.v1beta1.CreateCaseMessageRequest",
871                len,
872            )?;
873        if !self.parent.is_empty() {
874            struct_ser.serialize_field("parent", &self.parent)?;
875        }
876        if let Some(v) = self.case_message.as_ref() {
877            struct_ser.serialize_field("caseMessage", v)?;
878        }
879        if !self.request_id.is_empty() {
880            struct_ser.serialize_field("requestId", &self.request_id)?;
881        }
882        struct_ser.end()
883    }
884}
885impl<'de> serde::Deserialize<'de> for CreateCaseMessageRequest {
886    #[allow(deprecated)]
887    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
888    where
889        D: serde::Deserializer<'de>,
890    {
891        const FIELDS: &[&str] = &[
892            "parent",
893            "case_message",
894            "caseMessage",
895            "request_id",
896            "requestId",
897        ];
898        #[allow(clippy::enum_variant_names)]
899        enum GeneratedField {
900            Parent,
901            CaseMessage,
902            RequestId,
903            __SkipField__,
904        }
905        impl<'de> serde::Deserialize<'de> for GeneratedField {
906            fn deserialize<D>(
907                deserializer: D,
908            ) -> std::result::Result<GeneratedField, D::Error>
909            where
910                D: serde::Deserializer<'de>,
911            {
912                struct GeneratedVisitor;
913                impl serde::de::Visitor<'_> for GeneratedVisitor {
914                    type Value = GeneratedField;
915                    fn expecting(
916                        &self,
917                        formatter: &mut std::fmt::Formatter<'_>,
918                    ) -> std::fmt::Result {
919                        write!(formatter, "expected one of: {:?}", & FIELDS)
920                    }
921                    #[allow(unused_variables)]
922                    fn visit_str<E>(
923                        self,
924                        value: &str,
925                    ) -> std::result::Result<GeneratedField, E>
926                    where
927                        E: serde::de::Error,
928                    {
929                        match value {
930                            "parent" => Ok(GeneratedField::Parent),
931                            "caseMessage" | "case_message" => {
932                                Ok(GeneratedField::CaseMessage)
933                            }
934                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
935                            _ => Ok(GeneratedField::__SkipField__),
936                        }
937                    }
938                }
939                deserializer.deserialize_identifier(GeneratedVisitor)
940            }
941        }
942        struct GeneratedVisitor;
943        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
944            type Value = CreateCaseMessageRequest;
945            fn expecting(
946                &self,
947                formatter: &mut std::fmt::Formatter<'_>,
948            ) -> std::fmt::Result {
949                formatter
950                    .write_str(
951                        "struct origincloud.support.v1beta1.CreateCaseMessageRequest",
952                    )
953            }
954            fn visit_map<V>(
955                self,
956                mut map_: V,
957            ) -> std::result::Result<CreateCaseMessageRequest, V::Error>
958            where
959                V: serde::de::MapAccess<'de>,
960            {
961                let mut parent__ = None;
962                let mut case_message__ = None;
963                let mut request_id__ = None;
964                while let Some(k) = map_.next_key()? {
965                    match k {
966                        GeneratedField::Parent => {
967                            if parent__.is_some() {
968                                return Err(serde::de::Error::duplicate_field("parent"));
969                            }
970                            parent__ = Some(map_.next_value()?);
971                        }
972                        GeneratedField::CaseMessage => {
973                            if case_message__.is_some() {
974                                return Err(
975                                    serde::de::Error::duplicate_field("caseMessage"),
976                                );
977                            }
978                            case_message__ = map_.next_value()?;
979                        }
980                        GeneratedField::RequestId => {
981                            if request_id__.is_some() {
982                                return Err(serde::de::Error::duplicate_field("requestId"));
983                            }
984                            request_id__ = Some(map_.next_value()?);
985                        }
986                        GeneratedField::__SkipField__ => {
987                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
988                        }
989                    }
990                }
991                Ok(CreateCaseMessageRequest {
992                    parent: parent__.unwrap_or_default(),
993                    case_message: case_message__,
994                    request_id: request_id__.unwrap_or_default(),
995                })
996            }
997        }
998        deserializer
999            .deserialize_struct(
1000                "origincloud.support.v1beta1.CreateCaseMessageRequest",
1001                FIELDS,
1002                GeneratedVisitor,
1003            )
1004    }
1005}
1006impl serde::Serialize for CreateCaseRequest {
1007    #[allow(deprecated)]
1008    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1009    where
1010        S: serde::Serializer,
1011    {
1012        use serde::ser::SerializeStruct;
1013        let mut len = 0;
1014        if !self.parent.is_empty() {
1015            len += 1;
1016        }
1017        if self.case.is_some() {
1018            len += 1;
1019        }
1020        if !self.request_id.is_empty() {
1021            len += 1;
1022        }
1023        let mut struct_ser = serializer
1024            .serialize_struct("origincloud.support.v1beta1.CreateCaseRequest", len)?;
1025        if !self.parent.is_empty() {
1026            struct_ser.serialize_field("parent", &self.parent)?;
1027        }
1028        if let Some(v) = self.case.as_ref() {
1029            struct_ser.serialize_field("case", v)?;
1030        }
1031        if !self.request_id.is_empty() {
1032            struct_ser.serialize_field("requestId", &self.request_id)?;
1033        }
1034        struct_ser.end()
1035    }
1036}
1037impl<'de> serde::Deserialize<'de> for CreateCaseRequest {
1038    #[allow(deprecated)]
1039    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1040    where
1041        D: serde::Deserializer<'de>,
1042    {
1043        const FIELDS: &[&str] = &["parent", "case", "request_id", "requestId"];
1044        #[allow(clippy::enum_variant_names)]
1045        enum GeneratedField {
1046            Parent,
1047            Case,
1048            RequestId,
1049            __SkipField__,
1050        }
1051        impl<'de> serde::Deserialize<'de> for GeneratedField {
1052            fn deserialize<D>(
1053                deserializer: D,
1054            ) -> std::result::Result<GeneratedField, D::Error>
1055            where
1056                D: serde::Deserializer<'de>,
1057            {
1058                struct GeneratedVisitor;
1059                impl serde::de::Visitor<'_> for GeneratedVisitor {
1060                    type Value = GeneratedField;
1061                    fn expecting(
1062                        &self,
1063                        formatter: &mut std::fmt::Formatter<'_>,
1064                    ) -> std::fmt::Result {
1065                        write!(formatter, "expected one of: {:?}", & FIELDS)
1066                    }
1067                    #[allow(unused_variables)]
1068                    fn visit_str<E>(
1069                        self,
1070                        value: &str,
1071                    ) -> std::result::Result<GeneratedField, E>
1072                    where
1073                        E: serde::de::Error,
1074                    {
1075                        match value {
1076                            "parent" => Ok(GeneratedField::Parent),
1077                            "case" => Ok(GeneratedField::Case),
1078                            "requestId" | "request_id" => Ok(GeneratedField::RequestId),
1079                            _ => Ok(GeneratedField::__SkipField__),
1080                        }
1081                    }
1082                }
1083                deserializer.deserialize_identifier(GeneratedVisitor)
1084            }
1085        }
1086        struct GeneratedVisitor;
1087        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1088            type Value = CreateCaseRequest;
1089            fn expecting(
1090                &self,
1091                formatter: &mut std::fmt::Formatter<'_>,
1092            ) -> std::fmt::Result {
1093                formatter
1094                    .write_str("struct origincloud.support.v1beta1.CreateCaseRequest")
1095            }
1096            fn visit_map<V>(
1097                self,
1098                mut map_: V,
1099            ) -> std::result::Result<CreateCaseRequest, V::Error>
1100            where
1101                V: serde::de::MapAccess<'de>,
1102            {
1103                let mut parent__ = None;
1104                let mut case__ = None;
1105                let mut request_id__ = None;
1106                while let Some(k) = map_.next_key()? {
1107                    match k {
1108                        GeneratedField::Parent => {
1109                            if parent__.is_some() {
1110                                return Err(serde::de::Error::duplicate_field("parent"));
1111                            }
1112                            parent__ = Some(map_.next_value()?);
1113                        }
1114                        GeneratedField::Case => {
1115                            if case__.is_some() {
1116                                return Err(serde::de::Error::duplicate_field("case"));
1117                            }
1118                            case__ = map_.next_value()?;
1119                        }
1120                        GeneratedField::RequestId => {
1121                            if request_id__.is_some() {
1122                                return Err(serde::de::Error::duplicate_field("requestId"));
1123                            }
1124                            request_id__ = Some(map_.next_value()?);
1125                        }
1126                        GeneratedField::__SkipField__ => {
1127                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1128                        }
1129                    }
1130                }
1131                Ok(CreateCaseRequest {
1132                    parent: parent__.unwrap_or_default(),
1133                    case: case__,
1134                    request_id: request_id__.unwrap_or_default(),
1135                })
1136            }
1137        }
1138        deserializer
1139            .deserialize_struct(
1140                "origincloud.support.v1beta1.CreateCaseRequest",
1141                FIELDS,
1142                GeneratedVisitor,
1143            )
1144    }
1145}
1146impl serde::Serialize for GetCaseMessageRequest {
1147    #[allow(deprecated)]
1148    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1149    where
1150        S: serde::Serializer,
1151    {
1152        use serde::ser::SerializeStruct;
1153        let mut len = 0;
1154        if !self.name.is_empty() {
1155            len += 1;
1156        }
1157        let mut struct_ser = serializer
1158            .serialize_struct("origincloud.support.v1beta1.GetCaseMessageRequest", len)?;
1159        if !self.name.is_empty() {
1160            struct_ser.serialize_field("name", &self.name)?;
1161        }
1162        struct_ser.end()
1163    }
1164}
1165impl<'de> serde::Deserialize<'de> for GetCaseMessageRequest {
1166    #[allow(deprecated)]
1167    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1168    where
1169        D: serde::Deserializer<'de>,
1170    {
1171        const FIELDS: &[&str] = &["name"];
1172        #[allow(clippy::enum_variant_names)]
1173        enum GeneratedField {
1174            Name,
1175            __SkipField__,
1176        }
1177        impl<'de> serde::Deserialize<'de> for GeneratedField {
1178            fn deserialize<D>(
1179                deserializer: D,
1180            ) -> std::result::Result<GeneratedField, D::Error>
1181            where
1182                D: serde::Deserializer<'de>,
1183            {
1184                struct GeneratedVisitor;
1185                impl serde::de::Visitor<'_> for GeneratedVisitor {
1186                    type Value = GeneratedField;
1187                    fn expecting(
1188                        &self,
1189                        formatter: &mut std::fmt::Formatter<'_>,
1190                    ) -> std::fmt::Result {
1191                        write!(formatter, "expected one of: {:?}", & FIELDS)
1192                    }
1193                    #[allow(unused_variables)]
1194                    fn visit_str<E>(
1195                        self,
1196                        value: &str,
1197                    ) -> std::result::Result<GeneratedField, E>
1198                    where
1199                        E: serde::de::Error,
1200                    {
1201                        match value {
1202                            "name" => Ok(GeneratedField::Name),
1203                            _ => Ok(GeneratedField::__SkipField__),
1204                        }
1205                    }
1206                }
1207                deserializer.deserialize_identifier(GeneratedVisitor)
1208            }
1209        }
1210        struct GeneratedVisitor;
1211        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1212            type Value = GetCaseMessageRequest;
1213            fn expecting(
1214                &self,
1215                formatter: &mut std::fmt::Formatter<'_>,
1216            ) -> std::fmt::Result {
1217                formatter
1218                    .write_str(
1219                        "struct origincloud.support.v1beta1.GetCaseMessageRequest",
1220                    )
1221            }
1222            fn visit_map<V>(
1223                self,
1224                mut map_: V,
1225            ) -> std::result::Result<GetCaseMessageRequest, V::Error>
1226            where
1227                V: serde::de::MapAccess<'de>,
1228            {
1229                let mut name__ = None;
1230                while let Some(k) = map_.next_key()? {
1231                    match k {
1232                        GeneratedField::Name => {
1233                            if name__.is_some() {
1234                                return Err(serde::de::Error::duplicate_field("name"));
1235                            }
1236                            name__ = Some(map_.next_value()?);
1237                        }
1238                        GeneratedField::__SkipField__ => {
1239                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1240                        }
1241                    }
1242                }
1243                Ok(GetCaseMessageRequest {
1244                    name: name__.unwrap_or_default(),
1245                })
1246            }
1247        }
1248        deserializer
1249            .deserialize_struct(
1250                "origincloud.support.v1beta1.GetCaseMessageRequest",
1251                FIELDS,
1252                GeneratedVisitor,
1253            )
1254    }
1255}
1256impl serde::Serialize for GetCaseRequest {
1257    #[allow(deprecated)]
1258    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1259    where
1260        S: serde::Serializer,
1261    {
1262        use serde::ser::SerializeStruct;
1263        let mut len = 0;
1264        if !self.name.is_empty() {
1265            len += 1;
1266        }
1267        let mut struct_ser = serializer
1268            .serialize_struct("origincloud.support.v1beta1.GetCaseRequest", len)?;
1269        if !self.name.is_empty() {
1270            struct_ser.serialize_field("name", &self.name)?;
1271        }
1272        struct_ser.end()
1273    }
1274}
1275impl<'de> serde::Deserialize<'de> for GetCaseRequest {
1276    #[allow(deprecated)]
1277    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1278    where
1279        D: serde::Deserializer<'de>,
1280    {
1281        const FIELDS: &[&str] = &["name"];
1282        #[allow(clippy::enum_variant_names)]
1283        enum GeneratedField {
1284            Name,
1285            __SkipField__,
1286        }
1287        impl<'de> serde::Deserialize<'de> for GeneratedField {
1288            fn deserialize<D>(
1289                deserializer: D,
1290            ) -> std::result::Result<GeneratedField, D::Error>
1291            where
1292                D: serde::Deserializer<'de>,
1293            {
1294                struct GeneratedVisitor;
1295                impl serde::de::Visitor<'_> for GeneratedVisitor {
1296                    type Value = GeneratedField;
1297                    fn expecting(
1298                        &self,
1299                        formatter: &mut std::fmt::Formatter<'_>,
1300                    ) -> std::fmt::Result {
1301                        write!(formatter, "expected one of: {:?}", & FIELDS)
1302                    }
1303                    #[allow(unused_variables)]
1304                    fn visit_str<E>(
1305                        self,
1306                        value: &str,
1307                    ) -> std::result::Result<GeneratedField, E>
1308                    where
1309                        E: serde::de::Error,
1310                    {
1311                        match value {
1312                            "name" => Ok(GeneratedField::Name),
1313                            _ => Ok(GeneratedField::__SkipField__),
1314                        }
1315                    }
1316                }
1317                deserializer.deserialize_identifier(GeneratedVisitor)
1318            }
1319        }
1320        struct GeneratedVisitor;
1321        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1322            type Value = GetCaseRequest;
1323            fn expecting(
1324                &self,
1325                formatter: &mut std::fmt::Formatter<'_>,
1326            ) -> std::fmt::Result {
1327                formatter.write_str("struct origincloud.support.v1beta1.GetCaseRequest")
1328            }
1329            fn visit_map<V>(
1330                self,
1331                mut map_: V,
1332            ) -> std::result::Result<GetCaseRequest, V::Error>
1333            where
1334                V: serde::de::MapAccess<'de>,
1335            {
1336                let mut name__ = None;
1337                while let Some(k) = map_.next_key()? {
1338                    match k {
1339                        GeneratedField::Name => {
1340                            if name__.is_some() {
1341                                return Err(serde::de::Error::duplicate_field("name"));
1342                            }
1343                            name__ = Some(map_.next_value()?);
1344                        }
1345                        GeneratedField::__SkipField__ => {
1346                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1347                        }
1348                    }
1349                }
1350                Ok(GetCaseRequest {
1351                    name: name__.unwrap_or_default(),
1352                })
1353            }
1354        }
1355        deserializer
1356            .deserialize_struct(
1357                "origincloud.support.v1beta1.GetCaseRequest",
1358                FIELDS,
1359                GeneratedVisitor,
1360            )
1361    }
1362}
1363impl serde::Serialize for ListCaseMessagesRequest {
1364    #[allow(deprecated)]
1365    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1366    where
1367        S: serde::Serializer,
1368    {
1369        use serde::ser::SerializeStruct;
1370        let mut len = 0;
1371        if !self.parent.is_empty() {
1372            len += 1;
1373        }
1374        if self.page_size != 0 {
1375            len += 1;
1376        }
1377        if !self.page_token.is_empty() {
1378            len += 1;
1379        }
1380        let mut struct_ser = serializer
1381            .serialize_struct(
1382                "origincloud.support.v1beta1.ListCaseMessagesRequest",
1383                len,
1384            )?;
1385        if !self.parent.is_empty() {
1386            struct_ser.serialize_field("parent", &self.parent)?;
1387        }
1388        if self.page_size != 0 {
1389            struct_ser.serialize_field("pageSize", &self.page_size)?;
1390        }
1391        if !self.page_token.is_empty() {
1392            struct_ser.serialize_field("pageToken", &self.page_token)?;
1393        }
1394        struct_ser.end()
1395    }
1396}
1397impl<'de> serde::Deserialize<'de> for ListCaseMessagesRequest {
1398    #[allow(deprecated)]
1399    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1400    where
1401        D: serde::Deserializer<'de>,
1402    {
1403        const FIELDS: &[&str] = &[
1404            "parent",
1405            "page_size",
1406            "pageSize",
1407            "page_token",
1408            "pageToken",
1409        ];
1410        #[allow(clippy::enum_variant_names)]
1411        enum GeneratedField {
1412            Parent,
1413            PageSize,
1414            PageToken,
1415            __SkipField__,
1416        }
1417        impl<'de> serde::Deserialize<'de> for GeneratedField {
1418            fn deserialize<D>(
1419                deserializer: D,
1420            ) -> std::result::Result<GeneratedField, D::Error>
1421            where
1422                D: serde::Deserializer<'de>,
1423            {
1424                struct GeneratedVisitor;
1425                impl serde::de::Visitor<'_> for GeneratedVisitor {
1426                    type Value = GeneratedField;
1427                    fn expecting(
1428                        &self,
1429                        formatter: &mut std::fmt::Formatter<'_>,
1430                    ) -> std::fmt::Result {
1431                        write!(formatter, "expected one of: {:?}", & FIELDS)
1432                    }
1433                    #[allow(unused_variables)]
1434                    fn visit_str<E>(
1435                        self,
1436                        value: &str,
1437                    ) -> std::result::Result<GeneratedField, E>
1438                    where
1439                        E: serde::de::Error,
1440                    {
1441                        match value {
1442                            "parent" => Ok(GeneratedField::Parent),
1443                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
1444                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
1445                            _ => Ok(GeneratedField::__SkipField__),
1446                        }
1447                    }
1448                }
1449                deserializer.deserialize_identifier(GeneratedVisitor)
1450            }
1451        }
1452        struct GeneratedVisitor;
1453        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1454            type Value = ListCaseMessagesRequest;
1455            fn expecting(
1456                &self,
1457                formatter: &mut std::fmt::Formatter<'_>,
1458            ) -> std::fmt::Result {
1459                formatter
1460                    .write_str(
1461                        "struct origincloud.support.v1beta1.ListCaseMessagesRequest",
1462                    )
1463            }
1464            fn visit_map<V>(
1465                self,
1466                mut map_: V,
1467            ) -> std::result::Result<ListCaseMessagesRequest, V::Error>
1468            where
1469                V: serde::de::MapAccess<'de>,
1470            {
1471                let mut parent__ = None;
1472                let mut page_size__ = None;
1473                let mut page_token__ = None;
1474                while let Some(k) = map_.next_key()? {
1475                    match k {
1476                        GeneratedField::Parent => {
1477                            if parent__.is_some() {
1478                                return Err(serde::de::Error::duplicate_field("parent"));
1479                            }
1480                            parent__ = Some(map_.next_value()?);
1481                        }
1482                        GeneratedField::PageSize => {
1483                            if page_size__.is_some() {
1484                                return Err(serde::de::Error::duplicate_field("pageSize"));
1485                            }
1486                            page_size__ = Some(
1487                                map_
1488                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
1489                                    .0,
1490                            );
1491                        }
1492                        GeneratedField::PageToken => {
1493                            if page_token__.is_some() {
1494                                return Err(serde::de::Error::duplicate_field("pageToken"));
1495                            }
1496                            page_token__ = Some(map_.next_value()?);
1497                        }
1498                        GeneratedField::__SkipField__ => {
1499                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1500                        }
1501                    }
1502                }
1503                Ok(ListCaseMessagesRequest {
1504                    parent: parent__.unwrap_or_default(),
1505                    page_size: page_size__.unwrap_or_default(),
1506                    page_token: page_token__.unwrap_or_default(),
1507                })
1508            }
1509        }
1510        deserializer
1511            .deserialize_struct(
1512                "origincloud.support.v1beta1.ListCaseMessagesRequest",
1513                FIELDS,
1514                GeneratedVisitor,
1515            )
1516    }
1517}
1518impl serde::Serialize for ListCaseMessagesResponse {
1519    #[allow(deprecated)]
1520    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1521    where
1522        S: serde::Serializer,
1523    {
1524        use serde::ser::SerializeStruct;
1525        let mut len = 0;
1526        if !self.case_messages.is_empty() {
1527            len += 1;
1528        }
1529        if !self.next_page_token.is_empty() {
1530            len += 1;
1531        }
1532        let mut struct_ser = serializer
1533            .serialize_struct(
1534                "origincloud.support.v1beta1.ListCaseMessagesResponse",
1535                len,
1536            )?;
1537        if !self.case_messages.is_empty() {
1538            struct_ser.serialize_field("caseMessages", &self.case_messages)?;
1539        }
1540        if !self.next_page_token.is_empty() {
1541            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
1542        }
1543        struct_ser.end()
1544    }
1545}
1546impl<'de> serde::Deserialize<'de> for ListCaseMessagesResponse {
1547    #[allow(deprecated)]
1548    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1549    where
1550        D: serde::Deserializer<'de>,
1551    {
1552        const FIELDS: &[&str] = &[
1553            "case_messages",
1554            "caseMessages",
1555            "next_page_token",
1556            "nextPageToken",
1557        ];
1558        #[allow(clippy::enum_variant_names)]
1559        enum GeneratedField {
1560            CaseMessages,
1561            NextPageToken,
1562            __SkipField__,
1563        }
1564        impl<'de> serde::Deserialize<'de> for GeneratedField {
1565            fn deserialize<D>(
1566                deserializer: D,
1567            ) -> std::result::Result<GeneratedField, D::Error>
1568            where
1569                D: serde::Deserializer<'de>,
1570            {
1571                struct GeneratedVisitor;
1572                impl serde::de::Visitor<'_> for GeneratedVisitor {
1573                    type Value = GeneratedField;
1574                    fn expecting(
1575                        &self,
1576                        formatter: &mut std::fmt::Formatter<'_>,
1577                    ) -> std::fmt::Result {
1578                        write!(formatter, "expected one of: {:?}", & FIELDS)
1579                    }
1580                    #[allow(unused_variables)]
1581                    fn visit_str<E>(
1582                        self,
1583                        value: &str,
1584                    ) -> std::result::Result<GeneratedField, E>
1585                    where
1586                        E: serde::de::Error,
1587                    {
1588                        match value {
1589                            "caseMessages" | "case_messages" => {
1590                                Ok(GeneratedField::CaseMessages)
1591                            }
1592                            "nextPageToken" | "next_page_token" => {
1593                                Ok(GeneratedField::NextPageToken)
1594                            }
1595                            _ => Ok(GeneratedField::__SkipField__),
1596                        }
1597                    }
1598                }
1599                deserializer.deserialize_identifier(GeneratedVisitor)
1600            }
1601        }
1602        struct GeneratedVisitor;
1603        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1604            type Value = ListCaseMessagesResponse;
1605            fn expecting(
1606                &self,
1607                formatter: &mut std::fmt::Formatter<'_>,
1608            ) -> std::fmt::Result {
1609                formatter
1610                    .write_str(
1611                        "struct origincloud.support.v1beta1.ListCaseMessagesResponse",
1612                    )
1613            }
1614            fn visit_map<V>(
1615                self,
1616                mut map_: V,
1617            ) -> std::result::Result<ListCaseMessagesResponse, V::Error>
1618            where
1619                V: serde::de::MapAccess<'de>,
1620            {
1621                let mut case_messages__ = None;
1622                let mut next_page_token__ = None;
1623                while let Some(k) = map_.next_key()? {
1624                    match k {
1625                        GeneratedField::CaseMessages => {
1626                            if case_messages__.is_some() {
1627                                return Err(
1628                                    serde::de::Error::duplicate_field("caseMessages"),
1629                                );
1630                            }
1631                            case_messages__ = Some(map_.next_value()?);
1632                        }
1633                        GeneratedField::NextPageToken => {
1634                            if next_page_token__.is_some() {
1635                                return Err(
1636                                    serde::de::Error::duplicate_field("nextPageToken"),
1637                                );
1638                            }
1639                            next_page_token__ = Some(map_.next_value()?);
1640                        }
1641                        GeneratedField::__SkipField__ => {
1642                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1643                        }
1644                    }
1645                }
1646                Ok(ListCaseMessagesResponse {
1647                    case_messages: case_messages__.unwrap_or_default(),
1648                    next_page_token: next_page_token__.unwrap_or_default(),
1649                })
1650            }
1651        }
1652        deserializer
1653            .deserialize_struct(
1654                "origincloud.support.v1beta1.ListCaseMessagesResponse",
1655                FIELDS,
1656                GeneratedVisitor,
1657            )
1658    }
1659}
1660impl serde::Serialize for ListCasesRequest {
1661    #[allow(deprecated)]
1662    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1663    where
1664        S: serde::Serializer,
1665    {
1666        use serde::ser::SerializeStruct;
1667        let mut len = 0;
1668        if !self.parent.is_empty() {
1669            len += 1;
1670        }
1671        if self.page_size != 0 {
1672            len += 1;
1673        }
1674        if !self.page_token.is_empty() {
1675            len += 1;
1676        }
1677        let mut struct_ser = serializer
1678            .serialize_struct("origincloud.support.v1beta1.ListCasesRequest", len)?;
1679        if !self.parent.is_empty() {
1680            struct_ser.serialize_field("parent", &self.parent)?;
1681        }
1682        if self.page_size != 0 {
1683            struct_ser.serialize_field("pageSize", &self.page_size)?;
1684        }
1685        if !self.page_token.is_empty() {
1686            struct_ser.serialize_field("pageToken", &self.page_token)?;
1687        }
1688        struct_ser.end()
1689    }
1690}
1691impl<'de> serde::Deserialize<'de> for ListCasesRequest {
1692    #[allow(deprecated)]
1693    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1694    where
1695        D: serde::Deserializer<'de>,
1696    {
1697        const FIELDS: &[&str] = &[
1698            "parent",
1699            "page_size",
1700            "pageSize",
1701            "page_token",
1702            "pageToken",
1703        ];
1704        #[allow(clippy::enum_variant_names)]
1705        enum GeneratedField {
1706            Parent,
1707            PageSize,
1708            PageToken,
1709            __SkipField__,
1710        }
1711        impl<'de> serde::Deserialize<'de> for GeneratedField {
1712            fn deserialize<D>(
1713                deserializer: D,
1714            ) -> std::result::Result<GeneratedField, D::Error>
1715            where
1716                D: serde::Deserializer<'de>,
1717            {
1718                struct GeneratedVisitor;
1719                impl serde::de::Visitor<'_> for GeneratedVisitor {
1720                    type Value = GeneratedField;
1721                    fn expecting(
1722                        &self,
1723                        formatter: &mut std::fmt::Formatter<'_>,
1724                    ) -> std::fmt::Result {
1725                        write!(formatter, "expected one of: {:?}", & FIELDS)
1726                    }
1727                    #[allow(unused_variables)]
1728                    fn visit_str<E>(
1729                        self,
1730                        value: &str,
1731                    ) -> std::result::Result<GeneratedField, E>
1732                    where
1733                        E: serde::de::Error,
1734                    {
1735                        match value {
1736                            "parent" => Ok(GeneratedField::Parent),
1737                            "pageSize" | "page_size" => Ok(GeneratedField::PageSize),
1738                            "pageToken" | "page_token" => Ok(GeneratedField::PageToken),
1739                            _ => Ok(GeneratedField::__SkipField__),
1740                        }
1741                    }
1742                }
1743                deserializer.deserialize_identifier(GeneratedVisitor)
1744            }
1745        }
1746        struct GeneratedVisitor;
1747        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1748            type Value = ListCasesRequest;
1749            fn expecting(
1750                &self,
1751                formatter: &mut std::fmt::Formatter<'_>,
1752            ) -> std::fmt::Result {
1753                formatter
1754                    .write_str("struct origincloud.support.v1beta1.ListCasesRequest")
1755            }
1756            fn visit_map<V>(
1757                self,
1758                mut map_: V,
1759            ) -> std::result::Result<ListCasesRequest, V::Error>
1760            where
1761                V: serde::de::MapAccess<'de>,
1762            {
1763                let mut parent__ = None;
1764                let mut page_size__ = None;
1765                let mut page_token__ = None;
1766                while let Some(k) = map_.next_key()? {
1767                    match k {
1768                        GeneratedField::Parent => {
1769                            if parent__.is_some() {
1770                                return Err(serde::de::Error::duplicate_field("parent"));
1771                            }
1772                            parent__ = Some(map_.next_value()?);
1773                        }
1774                        GeneratedField::PageSize => {
1775                            if page_size__.is_some() {
1776                                return Err(serde::de::Error::duplicate_field("pageSize"));
1777                            }
1778                            page_size__ = Some(
1779                                map_
1780                                    .next_value::<::pbjson::private::NumberDeserialize<_>>()?
1781                                    .0,
1782                            );
1783                        }
1784                        GeneratedField::PageToken => {
1785                            if page_token__.is_some() {
1786                                return Err(serde::de::Error::duplicate_field("pageToken"));
1787                            }
1788                            page_token__ = Some(map_.next_value()?);
1789                        }
1790                        GeneratedField::__SkipField__ => {
1791                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1792                        }
1793                    }
1794                }
1795                Ok(ListCasesRequest {
1796                    parent: parent__.unwrap_or_default(),
1797                    page_size: page_size__.unwrap_or_default(),
1798                    page_token: page_token__.unwrap_or_default(),
1799                })
1800            }
1801        }
1802        deserializer
1803            .deserialize_struct(
1804                "origincloud.support.v1beta1.ListCasesRequest",
1805                FIELDS,
1806                GeneratedVisitor,
1807            )
1808    }
1809}
1810impl serde::Serialize for ListCasesResponse {
1811    #[allow(deprecated)]
1812    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1813    where
1814        S: serde::Serializer,
1815    {
1816        use serde::ser::SerializeStruct;
1817        let mut len = 0;
1818        if !self.cases.is_empty() {
1819            len += 1;
1820        }
1821        if !self.next_page_token.is_empty() {
1822            len += 1;
1823        }
1824        let mut struct_ser = serializer
1825            .serialize_struct("origincloud.support.v1beta1.ListCasesResponse", len)?;
1826        if !self.cases.is_empty() {
1827            struct_ser.serialize_field("cases", &self.cases)?;
1828        }
1829        if !self.next_page_token.is_empty() {
1830            struct_ser.serialize_field("nextPageToken", &self.next_page_token)?;
1831        }
1832        struct_ser.end()
1833    }
1834}
1835impl<'de> serde::Deserialize<'de> for ListCasesResponse {
1836    #[allow(deprecated)]
1837    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1838    where
1839        D: serde::Deserializer<'de>,
1840    {
1841        const FIELDS: &[&str] = &["cases", "next_page_token", "nextPageToken"];
1842        #[allow(clippy::enum_variant_names)]
1843        enum GeneratedField {
1844            Cases,
1845            NextPageToken,
1846            __SkipField__,
1847        }
1848        impl<'de> serde::Deserialize<'de> for GeneratedField {
1849            fn deserialize<D>(
1850                deserializer: D,
1851            ) -> std::result::Result<GeneratedField, D::Error>
1852            where
1853                D: serde::Deserializer<'de>,
1854            {
1855                struct GeneratedVisitor;
1856                impl serde::de::Visitor<'_> for GeneratedVisitor {
1857                    type Value = GeneratedField;
1858                    fn expecting(
1859                        &self,
1860                        formatter: &mut std::fmt::Formatter<'_>,
1861                    ) -> std::fmt::Result {
1862                        write!(formatter, "expected one of: {:?}", & FIELDS)
1863                    }
1864                    #[allow(unused_variables)]
1865                    fn visit_str<E>(
1866                        self,
1867                        value: &str,
1868                    ) -> std::result::Result<GeneratedField, E>
1869                    where
1870                        E: serde::de::Error,
1871                    {
1872                        match value {
1873                            "cases" => Ok(GeneratedField::Cases),
1874                            "nextPageToken" | "next_page_token" => {
1875                                Ok(GeneratedField::NextPageToken)
1876                            }
1877                            _ => Ok(GeneratedField::__SkipField__),
1878                        }
1879                    }
1880                }
1881                deserializer.deserialize_identifier(GeneratedVisitor)
1882            }
1883        }
1884        struct GeneratedVisitor;
1885        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
1886            type Value = ListCasesResponse;
1887            fn expecting(
1888                &self,
1889                formatter: &mut std::fmt::Formatter<'_>,
1890            ) -> std::fmt::Result {
1891                formatter
1892                    .write_str("struct origincloud.support.v1beta1.ListCasesResponse")
1893            }
1894            fn visit_map<V>(
1895                self,
1896                mut map_: V,
1897            ) -> std::result::Result<ListCasesResponse, V::Error>
1898            where
1899                V: serde::de::MapAccess<'de>,
1900            {
1901                let mut cases__ = None;
1902                let mut next_page_token__ = None;
1903                while let Some(k) = map_.next_key()? {
1904                    match k {
1905                        GeneratedField::Cases => {
1906                            if cases__.is_some() {
1907                                return Err(serde::de::Error::duplicate_field("cases"));
1908                            }
1909                            cases__ = Some(map_.next_value()?);
1910                        }
1911                        GeneratedField::NextPageToken => {
1912                            if next_page_token__.is_some() {
1913                                return Err(
1914                                    serde::de::Error::duplicate_field("nextPageToken"),
1915                                );
1916                            }
1917                            next_page_token__ = Some(map_.next_value()?);
1918                        }
1919                        GeneratedField::__SkipField__ => {
1920                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
1921                        }
1922                    }
1923                }
1924                Ok(ListCasesResponse {
1925                    cases: cases__.unwrap_or_default(),
1926                    next_page_token: next_page_token__.unwrap_or_default(),
1927                })
1928            }
1929        }
1930        deserializer
1931            .deserialize_struct(
1932                "origincloud.support.v1beta1.ListCasesResponse",
1933                FIELDS,
1934                GeneratedVisitor,
1935            )
1936    }
1937}
1938impl serde::Serialize for ReopenCaseRequest {
1939    #[allow(deprecated)]
1940    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
1941    where
1942        S: serde::Serializer,
1943    {
1944        use serde::ser::SerializeStruct;
1945        let mut len = 0;
1946        if !self.name.is_empty() {
1947            len += 1;
1948        }
1949        let mut struct_ser = serializer
1950            .serialize_struct("origincloud.support.v1beta1.ReopenCaseRequest", len)?;
1951        if !self.name.is_empty() {
1952            struct_ser.serialize_field("name", &self.name)?;
1953        }
1954        struct_ser.end()
1955    }
1956}
1957impl<'de> serde::Deserialize<'de> for ReopenCaseRequest {
1958    #[allow(deprecated)]
1959    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
1960    where
1961        D: serde::Deserializer<'de>,
1962    {
1963        const FIELDS: &[&str] = &["name"];
1964        #[allow(clippy::enum_variant_names)]
1965        enum GeneratedField {
1966            Name,
1967            __SkipField__,
1968        }
1969        impl<'de> serde::Deserialize<'de> for GeneratedField {
1970            fn deserialize<D>(
1971                deserializer: D,
1972            ) -> std::result::Result<GeneratedField, D::Error>
1973            where
1974                D: serde::Deserializer<'de>,
1975            {
1976                struct GeneratedVisitor;
1977                impl serde::de::Visitor<'_> for GeneratedVisitor {
1978                    type Value = GeneratedField;
1979                    fn expecting(
1980                        &self,
1981                        formatter: &mut std::fmt::Formatter<'_>,
1982                    ) -> std::fmt::Result {
1983                        write!(formatter, "expected one of: {:?}", & FIELDS)
1984                    }
1985                    #[allow(unused_variables)]
1986                    fn visit_str<E>(
1987                        self,
1988                        value: &str,
1989                    ) -> std::result::Result<GeneratedField, E>
1990                    where
1991                        E: serde::de::Error,
1992                    {
1993                        match value {
1994                            "name" => Ok(GeneratedField::Name),
1995                            _ => Ok(GeneratedField::__SkipField__),
1996                        }
1997                    }
1998                }
1999                deserializer.deserialize_identifier(GeneratedVisitor)
2000            }
2001        }
2002        struct GeneratedVisitor;
2003        impl<'de> serde::de::Visitor<'de> for GeneratedVisitor {
2004            type Value = ReopenCaseRequest;
2005            fn expecting(
2006                &self,
2007                formatter: &mut std::fmt::Formatter<'_>,
2008            ) -> std::fmt::Result {
2009                formatter
2010                    .write_str("struct origincloud.support.v1beta1.ReopenCaseRequest")
2011            }
2012            fn visit_map<V>(
2013                self,
2014                mut map_: V,
2015            ) -> std::result::Result<ReopenCaseRequest, V::Error>
2016            where
2017                V: serde::de::MapAccess<'de>,
2018            {
2019                let mut name__ = None;
2020                while let Some(k) = map_.next_key()? {
2021                    match k {
2022                        GeneratedField::Name => {
2023                            if name__.is_some() {
2024                                return Err(serde::de::Error::duplicate_field("name"));
2025                            }
2026                            name__ = Some(map_.next_value()?);
2027                        }
2028                        GeneratedField::__SkipField__ => {
2029                            let _ = map_.next_value::<serde::de::IgnoredAny>()?;
2030                        }
2031                    }
2032                }
2033                Ok(ReopenCaseRequest {
2034                    name: name__.unwrap_or_default(),
2035                })
2036            }
2037        }
2038        deserializer
2039            .deserialize_struct(
2040                "origincloud.support.v1beta1.ReopenCaseRequest",
2041                FIELDS,
2042                GeneratedVisitor,
2043            )
2044    }
2045}
2046/// Calls `CaseService`.
2047///
2048/// Support cases: an organization's questions and problems, and where each
2049/// one stands.
2050#[derive(Clone, Debug)]
2051pub struct CaseClient {
2052    service: ::origincloud_core::Service,
2053}
2054impl CaseClient {
2055    /// Returns a client of `CaseService` that sends its calls through `client`.
2056    pub fn new(client: &::origincloud_core::Client) -> Self {
2057        Self {
2058            service: client.service("support", false),
2059        }
2060    }
2061    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
2062    pub fn service(&self) -> &::origincloud_core::Service {
2063        &self.service
2064    }
2065    /// Returns a case. Needs `admin.support_case.get` on the organization.
2066    pub async fn get_case(
2067        &self,
2068        request: GetCaseRequest,
2069    ) -> ::core::result::Result<Case, ::origincloud_core::Error> {
2070        let p0 = ::origincloud_core::path_value(
2071            "name",
2072            &request.name,
2073            "organizations/*/cases/*",
2074        )?;
2075        let query = ::origincloud_core::query(&request, &["name"])?;
2076        let call = ::origincloud_core::Request::new(
2077                ::origincloud_core::Method::GET,
2078                format!("/v1beta1/{p0}"),
2079            )
2080            .with_query(query)
2081            .idempotent();
2082        self.service.call(call).await
2083    }
2084    /// Lists an organization's cases, newest first. Needs
2085    /// `admin.support_case.list` on the organization.
2086    pub async fn list_cases(
2087        &self,
2088        request: ListCasesRequest,
2089    ) -> ::core::result::Result<ListCasesResponse, ::origincloud_core::Error> {
2090        let p0 = ::origincloud_core::path_value(
2091            "parent",
2092            &request.parent,
2093            "organizations/*",
2094        )?;
2095        let query = ::origincloud_core::query(&request, &["parent"])?;
2096        let call = ::origincloud_core::Request::new(
2097                ::origincloud_core::Method::GET,
2098                format!("/v1beta1/{p0}/cases"),
2099            )
2100            .with_query(query)
2101            .idempotent();
2102        self.service.call(call).await
2103    }
2104    /// Returns everything [`list_cases`](Self::list_cases) lists from `request`'s page on, fetching the next page as the stream reaches it. A page that fails ends the stream with its error.
2105    pub fn all_cases(
2106        &self,
2107        request: ListCasesRequest,
2108    ) -> ::origincloud_core::Pages<Case> {
2109        let client = self.clone();
2110        ::origincloud_core::Pages::new(
2111            request,
2112            move |request: ListCasesRequest| {
2113                let client = client.clone();
2114                async move {
2115                    let page = client.list_cases(request).await?;
2116                    Ok((page.cases, page.next_page_token))
2117                }
2118            },
2119            |request: &mut ListCasesRequest, token: ::std::string::String| {
2120                request.page_token = token;
2121            },
2122        )
2123    }
2124    /// Opens a case, `case::State::Open`. Needs `admin.support_case.create` on the
2125    /// organization.
2126    pub async fn create_case(
2127        &self,
2128        mut request: CreateCaseRequest,
2129    ) -> ::core::result::Result<Case, ::origincloud_core::Error> {
2130        if request.request_id.is_empty() {
2131            request.request_id = ::origincloud_core::new_request_id();
2132        }
2133        let p0 = ::origincloud_core::path_value(
2134            "parent",
2135            &request.parent,
2136            "organizations/*",
2137        )?;
2138        let body = ::origincloud_core::json_body(
2139            request.case.as_ref().unwrap_or(&::core::default::Default::default()),
2140        )?;
2141        let query = ::origincloud_core::query(&request, &["parent", "case"])?;
2142        let call = ::origincloud_core::Request::new(
2143                ::origincloud_core::Method::POST,
2144                format!("/v1beta1/{p0}/cases"),
2145            )
2146            .with_body(body)
2147            .with_query(query)
2148            .idempotent();
2149        self.service.call(call).await
2150    }
2151    /// Closes a case: its `state` becomes `case::State::Closed`, and its contact email is
2152    /// notified. Closing a closed case succeeds and changes nothing. Needs
2153    /// `admin.support_case.update` on the organization.
2154    pub async fn close_case(
2155        &self,
2156        request: CloseCaseRequest,
2157    ) -> ::core::result::Result<Case, ::origincloud_core::Error> {
2158        let p0 = ::origincloud_core::path_value(
2159            "name",
2160            &request.name,
2161            "organizations/*/cases/*",
2162        )?;
2163        let body = ::origincloud_core::json_body(&request)?;
2164        let call = ::origincloud_core::Request::new(
2165                ::origincloud_core::Method::POST,
2166                format!("/v1beta1/{p0}:close"),
2167            )
2168            .with_body(body);
2169        self.service.call(call).await
2170    }
2171    /// Opens a resolved or closed case again: its `state` becomes `case::State::Open`, and
2172    /// its contact email is notified. Reopening a case that is `case::State::Open` or
2173    /// `case::State::InProgress` succeeds and changes nothing. Needs
2174    /// `admin.support_case.update` on the organization.
2175    pub async fn reopen_case(
2176        &self,
2177        request: ReopenCaseRequest,
2178    ) -> ::core::result::Result<Case, ::origincloud_core::Error> {
2179        let p0 = ::origincloud_core::path_value(
2180            "name",
2181            &request.name,
2182            "organizations/*/cases/*",
2183        )?;
2184        let body = ::origincloud_core::json_body(&request)?;
2185        let call = ::origincloud_core::Request::new(
2186                ::origincloud_core::Method::POST,
2187                format!("/v1beta1/{p0}:reopen"),
2188            )
2189            .with_body(body);
2190        self.service.call(call).await
2191    }
2192}
2193/// Calls `CaseMessageService`.
2194///
2195/// A case's messages: its conversation between the organization and
2196/// support, oldest first. A message is never changed or removed once added.
2197#[derive(Clone, Debug)]
2198pub struct CaseMessageClient {
2199    service: ::origincloud_core::Service,
2200}
2201impl CaseMessageClient {
2202    /// Returns a client of `CaseMessageService` that sends its calls through `client`.
2203    pub fn new(client: &::origincloud_core::Client) -> Self {
2204        Self {
2205            service: client.service("support", false),
2206        }
2207    }
2208    /// The endpoint the client sends its calls to, which also serves the operations its methods answer with.
2209    pub fn service(&self) -> &::origincloud_core::Service {
2210        &self.service
2211    }
2212    /// Returns one message of a case. Needs `admin.support_case.get` on the
2213    /// organization.
2214    pub async fn get_case_message(
2215        &self,
2216        request: GetCaseMessageRequest,
2217    ) -> ::core::result::Result<CaseMessage, ::origincloud_core::Error> {
2218        let p0 = ::origincloud_core::path_value(
2219            "name",
2220            &request.name,
2221            "organizations/*/cases/*/messages/*",
2222        )?;
2223        let query = ::origincloud_core::query(&request, &["name"])?;
2224        let call = ::origincloud_core::Request::new(
2225                ::origincloud_core::Method::GET,
2226                format!("/v1beta1/{p0}"),
2227            )
2228            .with_query(query)
2229            .idempotent();
2230        self.service.call(call).await
2231    }
2232    /// Lists a case's messages, oldest first. Needs `admin.support_case.get`
2233    /// on the organization.
2234    pub async fn list_case_messages(
2235        &self,
2236        request: ListCaseMessagesRequest,
2237    ) -> ::core::result::Result<ListCaseMessagesResponse, ::origincloud_core::Error> {
2238        let p0 = ::origincloud_core::path_value(
2239            "parent",
2240            &request.parent,
2241            "organizations/*/cases/*",
2242        )?;
2243        let query = ::origincloud_core::query(&request, &["parent"])?;
2244        let call = ::origincloud_core::Request::new(
2245                ::origincloud_core::Method::GET,
2246                format!("/v1beta1/{p0}/messages"),
2247            )
2248            .with_query(query)
2249            .idempotent();
2250        self.service.call(call).await
2251    }
2252    /// Returns everything [`list_case_messages`](Self::list_case_messages) lists from `request`'s page on, fetching the next page as the stream reaches it. A page that fails ends the stream with its error.
2253    pub fn all_case_messages(
2254        &self,
2255        request: ListCaseMessagesRequest,
2256    ) -> ::origincloud_core::Pages<CaseMessage> {
2257        let client = self.clone();
2258        ::origincloud_core::Pages::new(
2259            request,
2260            move |request: ListCaseMessagesRequest| {
2261                let client = client.clone();
2262                async move {
2263                    let page = client.list_case_messages(request).await?;
2264                    Ok((page.case_messages, page.next_page_token))
2265                }
2266            },
2267            |request: &mut ListCaseMessagesRequest, token: ::std::string::String| {
2268                request.page_token = token;
2269            },
2270        )
2271    }
2272    /// Adds a message to a case's conversation. The case's contact email is
2273    /// notified unless the message's author opened the case, so nobody is
2274    /// emailed their own messages. Needs `admin.support_case.create` on the
2275    /// organization.
2276    pub async fn create_case_message(
2277        &self,
2278        mut request: CreateCaseMessageRequest,
2279    ) -> ::core::result::Result<CaseMessage, ::origincloud_core::Error> {
2280        if request.request_id.is_empty() {
2281            request.request_id = ::origincloud_core::new_request_id();
2282        }
2283        let p0 = ::origincloud_core::path_value(
2284            "parent",
2285            &request.parent,
2286            "organizations/*/cases/*",
2287        )?;
2288        let body = ::origincloud_core::json_body(
2289            request.case_message.as_ref().unwrap_or(&::core::default::Default::default()),
2290        )?;
2291        let query = ::origincloud_core::query(&request, &["parent", "caseMessage"])?;
2292        let call = ::origincloud_core::Request::new(
2293                ::origincloud_core::Method::POST,
2294                format!("/v1beta1/{p0}/messages"),
2295            )
2296            .with_body(body)
2297            .with_query(query)
2298            .idempotent();
2299        self.service.call(call).await
2300    }
2301}