Skip to main content

nominal_api_proto/proto/
nominal.comments.v1.rs

1// This file is @generated by prost-build.
2#[derive(Clone, PartialEq, ::prost::Message)]
3pub struct Comment {
4    #[prost(string, tag = "1")]
5    pub rid: ::prost::alloc::string::String,
6    #[prost(message, optional, tag = "2")]
7    pub parent: ::core::option::Option<CommentParent>,
8    #[prost(string, tag = "3")]
9    pub author_rid: ::prost::alloc::string::String,
10    #[prost(message, optional, tag = "4")]
11    pub created_at: ::core::option::Option<
12        super::super::super::google::protobuf::Timestamp,
13    >,
14    #[prost(message, optional, tag = "5")]
15    pub edited_at: ::core::option::Option<
16        super::super::super::google::protobuf::Timestamp,
17    >,
18    #[prost(message, optional, tag = "6")]
19    pub deleted_at: ::core::option::Option<
20        super::super::super::google::protobuf::Timestamp,
21    >,
22    #[prost(string, tag = "7")]
23    pub content: ::prost::alloc::string::String,
24    #[prost(string, optional, tag = "8")]
25    pub pinned_by: ::core::option::Option<::prost::alloc::string::String>,
26    #[prost(message, optional, tag = "9")]
27    pub pinned_at: ::core::option::Option<
28        super::super::super::google::protobuf::Timestamp,
29    >,
30    #[prost(message, repeated, tag = "10")]
31    pub reactions: ::prost::alloc::vec::Vec<Reaction>,
32    #[prost(string, repeated, tag = "11")]
33    pub attachments: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
34}
35#[derive(Clone, PartialEq, ::prost::Message)]
36pub struct CommentParent {
37    #[prost(oneof = "comment_parent::CommentParent", tags = "1, 2")]
38    pub comment_parent: ::core::option::Option<comment_parent::CommentParent>,
39}
40/// Nested message and enum types in `CommentParent`.
41pub mod comment_parent {
42    #[derive(Clone, PartialEq, ::prost::Oneof)]
43    pub enum CommentParent {
44        #[prost(message, tag = "1")]
45        Resource(super::CommentParentResource),
46        #[prost(message, tag = "2")]
47        Comment(super::CommentParentComment),
48    }
49}
50#[derive(Clone, PartialEq, ::prost::Message)]
51pub struct CommentParentComment {
52    #[prost(string, tag = "1")]
53    pub comment_rid: ::prost::alloc::string::String,
54}
55#[derive(Clone, PartialEq, ::prost::Message)]
56pub struct CommentParentResource {
57    #[prost(enumeration = "ResourceType", tag = "1")]
58    pub resource_type: i32,
59    #[prost(string, tag = "2")]
60    pub resource_rid: ::prost::alloc::string::String,
61}
62#[derive(Clone, PartialEq, ::prost::Message)]
63pub struct Conversation {
64    #[prost(string, tag = "1")]
65    pub resource_rid: ::prost::alloc::string::String,
66    #[prost(enumeration = "ResourceType", tag = "2")]
67    pub resource_type: i32,
68    #[prost(message, repeated, tag = "3")]
69    pub comments: ::prost::alloc::vec::Vec<ConversationNode>,
70}
71#[derive(Clone, PartialEq, ::prost::Message)]
72pub struct ConversationNode {
73    #[prost(message, optional, tag = "1")]
74    pub comment: ::core::option::Option<Comment>,
75    #[prost(message, repeated, tag = "2")]
76    pub replies: ::prost::alloc::vec::Vec<ConversationNode>,
77}
78#[derive(Clone, PartialEq, ::prost::Message)]
79pub struct CreateCommentRequest {
80    #[prost(message, optional, tag = "1")]
81    pub parent: ::core::option::Option<CommentParent>,
82    #[prost(string, tag = "2")]
83    pub content: ::prost::alloc::string::String,
84    #[prost(string, repeated, tag = "3")]
85    pub attachments: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
86}
87#[derive(Clone, PartialEq, ::prost::Message)]
88pub struct EditCommentRequest {
89    #[prost(string, tag = "1")]
90    pub content: ::prost::alloc::string::String,
91    #[prost(string, repeated, tag = "2")]
92    pub attachments: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
93}
94#[derive(Clone, PartialEq, ::prost::Message)]
95pub struct Reaction {
96    #[prost(string, tag = "1")]
97    pub rid: ::prost::alloc::string::String,
98    #[prost(string, tag = "2")]
99    pub user_rid: ::prost::alloc::string::String,
100    #[prost(message, optional, tag = "3")]
101    pub created_at: ::core::option::Option<
102        super::super::super::google::protobuf::Timestamp,
103    >,
104    #[prost(enumeration = "ReactionType", tag = "4")]
105    pub r#type: i32,
106}
107#[derive(Clone, PartialEq, ::prost::Message)]
108pub struct GetConversationRequest {
109    #[prost(enumeration = "ResourceType", tag = "1")]
110    pub resource_type: i32,
111    #[prost(string, tag = "2")]
112    pub resource_rid: ::prost::alloc::string::String,
113}
114#[derive(Clone, PartialEq, ::prost::Message)]
115pub struct GetConversationResponse {
116    #[prost(message, optional, tag = "1")]
117    pub conversation: ::core::option::Option<Conversation>,
118}
119#[derive(Clone, PartialEq, ::prost::Message)]
120pub struct GetConversationCountRequest {
121    #[prost(enumeration = "ResourceType", tag = "1")]
122    pub resource_type: i32,
123    #[prost(string, tag = "2")]
124    pub resource_rid: ::prost::alloc::string::String,
125    #[prost(bool, optional, tag = "3")]
126    pub include_deleted: ::core::option::Option<bool>,
127}
128#[derive(Clone, Copy, PartialEq, ::prost::Message)]
129pub struct GetConversationCountResponse {
130    #[prost(int32, tag = "1")]
131    pub count: i32,
132}
133#[derive(Clone, PartialEq, ::prost::Message)]
134pub struct GetCommentRequest {
135    #[prost(string, tag = "1")]
136    pub comment_rid: ::prost::alloc::string::String,
137}
138#[derive(Clone, PartialEq, ::prost::Message)]
139pub struct GetCommentResponse {
140    #[prost(message, optional, tag = "1")]
141    pub comment: ::core::option::Option<Comment>,
142}
143#[derive(Clone, PartialEq, ::prost::Message)]
144pub struct CreateCommentResponse {
145    #[prost(message, optional, tag = "1")]
146    pub comment: ::core::option::Option<Comment>,
147}
148#[derive(Clone, PartialEq, ::prost::Message)]
149pub struct EditCommentRequestWrapper {
150    #[prost(string, tag = "1")]
151    pub comment_rid: ::prost::alloc::string::String,
152    #[prost(message, optional, tag = "2")]
153    pub request: ::core::option::Option<EditCommentRequest>,
154}
155#[derive(Clone, PartialEq, ::prost::Message)]
156pub struct EditCommentResponse {
157    #[prost(message, optional, tag = "1")]
158    pub comment: ::core::option::Option<Comment>,
159}
160#[derive(Clone, PartialEq, ::prost::Message)]
161pub struct DeleteCommentRequest {
162    #[prost(string, tag = "1")]
163    pub comment_rid: ::prost::alloc::string::String,
164}
165#[derive(Clone, PartialEq, ::prost::Message)]
166pub struct DeleteCommentResponse {
167    #[prost(message, optional, tag = "1")]
168    pub comment: ::core::option::Option<Comment>,
169}
170#[derive(Clone, PartialEq, ::prost::Message)]
171pub struct PinCommentRequest {
172    #[prost(string, tag = "1")]
173    pub comment_rid: ::prost::alloc::string::String,
174}
175#[derive(Clone, PartialEq, ::prost::Message)]
176pub struct PinCommentResponse {
177    #[prost(message, optional, tag = "1")]
178    pub comment: ::core::option::Option<Comment>,
179}
180#[derive(Clone, PartialEq, ::prost::Message)]
181pub struct UnpinCommentRequest {
182    #[prost(string, tag = "1")]
183    pub comment_rid: ::prost::alloc::string::String,
184}
185#[derive(Clone, PartialEq, ::prost::Message)]
186pub struct UnpinCommentResponse {
187    #[prost(message, optional, tag = "1")]
188    pub comment: ::core::option::Option<Comment>,
189}
190#[derive(Clone, PartialEq, ::prost::Message)]
191pub struct AddReactionRequest {
192    #[prost(string, tag = "1")]
193    pub comment_rid: ::prost::alloc::string::String,
194    #[prost(enumeration = "ReactionType", tag = "2")]
195    pub r#type: i32,
196}
197#[derive(Clone, PartialEq, ::prost::Message)]
198pub struct AddReactionResponse {
199    #[prost(message, optional, tag = "1")]
200    pub comment: ::core::option::Option<Comment>,
201}
202#[derive(Clone, PartialEq, ::prost::Message)]
203pub struct RemoveReactionRequest {
204    #[prost(string, tag = "1")]
205    pub comment_rid: ::prost::alloc::string::String,
206    #[prost(enumeration = "ReactionType", tag = "2")]
207    pub r#type: i32,
208}
209#[derive(Clone, PartialEq, ::prost::Message)]
210pub struct RemoveReactionResponse {
211    #[prost(message, optional, tag = "1")]
212    pub comment: ::core::option::Option<Comment>,
213}
214#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
215#[repr(i32)]
216pub enum ReactionType {
217    Unspecified = 0,
218    Like = 1,
219    Dislike = 2,
220    Heart = 3,
221    Hooray = 4,
222    Rocket = 5,
223    Eyes = 6,
224}
225impl ReactionType {
226    /// String value of the enum field names used in the ProtoBuf definition.
227    ///
228    /// The values are not transformed in any way and thus are considered stable
229    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
230    pub fn as_str_name(&self) -> &'static str {
231        match self {
232            Self::Unspecified => "REACTION_TYPE_UNSPECIFIED",
233            Self::Like => "LIKE",
234            Self::Dislike => "DISLIKE",
235            Self::Heart => "HEART",
236            Self::Hooray => "HOORAY",
237            Self::Rocket => "ROCKET",
238            Self::Eyes => "EYES",
239        }
240    }
241    /// Creates an enum from field names used in the ProtoBuf definition.
242    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
243        match value {
244            "REACTION_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
245            "LIKE" => Some(Self::Like),
246            "DISLIKE" => Some(Self::Dislike),
247            "HEART" => Some(Self::Heart),
248            "HOORAY" => Some(Self::Hooray),
249            "ROCKET" => Some(Self::Rocket),
250            "EYES" => Some(Self::Eyes),
251            _ => None,
252        }
253    }
254}
255#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
256#[repr(i32)]
257pub enum ResourceType {
258    Unspecified = 0,
259    Run = 1,
260    Event = 2,
261}
262impl ResourceType {
263    /// String value of the enum field names used in the ProtoBuf definition.
264    ///
265    /// The values are not transformed in any way and thus are considered stable
266    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
267    pub fn as_str_name(&self) -> &'static str {
268        match self {
269            Self::Unspecified => "RESOURCE_TYPE_UNSPECIFIED",
270            Self::Run => "RUN",
271            Self::Event => "EVENT",
272        }
273    }
274    /// Creates an enum from field names used in the ProtoBuf definition.
275    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
276        match value {
277            "RESOURCE_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
278            "RUN" => Some(Self::Run),
279            "EVENT" => Some(Self::Event),
280            _ => None,
281        }
282    }
283}
284#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
285#[repr(i32)]
286pub enum CommentsError {
287    CommentNotFound = 0,
288    ContentTooLong = 1,
289    EmptyCommentContent = 2,
290    InvalidAttachment = 3,
291    MaxNestingDepthExceeded = 4,
292    Unauthorized = 5,
293}
294impl CommentsError {
295    /// String value of the enum field names used in the ProtoBuf definition.
296    ///
297    /// The values are not transformed in any way and thus are considered stable
298    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
299    pub fn as_str_name(&self) -> &'static str {
300        match self {
301            Self::CommentNotFound => "COMMENTS_ERROR_COMMENT_NOT_FOUND",
302            Self::ContentTooLong => "COMMENTS_ERROR_CONTENT_TOO_LONG",
303            Self::EmptyCommentContent => "COMMENTS_ERROR_EMPTY_COMMENT_CONTENT",
304            Self::InvalidAttachment => "COMMENTS_ERROR_INVALID_ATTACHMENT",
305            Self::MaxNestingDepthExceeded => "COMMENTS_ERROR_MAX_NESTING_DEPTH_EXCEEDED",
306            Self::Unauthorized => "COMMENTS_ERROR_UNAUTHORIZED",
307        }
308    }
309    /// Creates an enum from field names used in the ProtoBuf definition.
310    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
311        match value {
312            "COMMENTS_ERROR_COMMENT_NOT_FOUND" => Some(Self::CommentNotFound),
313            "COMMENTS_ERROR_CONTENT_TOO_LONG" => Some(Self::ContentTooLong),
314            "COMMENTS_ERROR_EMPTY_COMMENT_CONTENT" => Some(Self::EmptyCommentContent),
315            "COMMENTS_ERROR_INVALID_ATTACHMENT" => Some(Self::InvalidAttachment),
316            "COMMENTS_ERROR_MAX_NESTING_DEPTH_EXCEEDED" => {
317                Some(Self::MaxNestingDepthExceeded)
318            }
319            "COMMENTS_ERROR_UNAUTHORIZED" => Some(Self::Unauthorized),
320            _ => None,
321        }
322    }
323}
324/// Generated client implementations.
325pub mod comments_service_client {
326    #![allow(
327        unused_variables,
328        dead_code,
329        missing_docs,
330        clippy::wildcard_imports,
331        clippy::let_unit_value,
332    )]
333    use tonic::codegen::*;
334    use tonic::codegen::http::Uri;
335    #[derive(Debug, Clone)]
336    pub struct CommentsServiceClient<T> {
337        inner: tonic::client::Grpc<T>,
338    }
339    impl CommentsServiceClient<tonic::transport::Channel> {
340        /// Attempt to create a new client by connecting to a given endpoint.
341        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
342        where
343            D: TryInto<tonic::transport::Endpoint>,
344            D::Error: Into<StdError>,
345        {
346            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
347            Ok(Self::new(conn))
348        }
349    }
350    impl<T> CommentsServiceClient<T>
351    where
352        T: tonic::client::GrpcService<tonic::body::Body>,
353        T::Error: Into<StdError>,
354        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
355        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
356    {
357        pub fn new(inner: T) -> Self {
358            let inner = tonic::client::Grpc::new(inner);
359            Self { inner }
360        }
361        pub fn with_origin(inner: T, origin: Uri) -> Self {
362            let inner = tonic::client::Grpc::with_origin(inner, origin);
363            Self { inner }
364        }
365        pub fn with_interceptor<F>(
366            inner: T,
367            interceptor: F,
368        ) -> CommentsServiceClient<InterceptedService<T, F>>
369        where
370            F: tonic::service::Interceptor,
371            T::ResponseBody: Default,
372            T: tonic::codegen::Service<
373                http::Request<tonic::body::Body>,
374                Response = http::Response<
375                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
376                >,
377            >,
378            <T as tonic::codegen::Service<
379                http::Request<tonic::body::Body>,
380            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
381        {
382            CommentsServiceClient::new(InterceptedService::new(inner, interceptor))
383        }
384        /// Compress requests with the given encoding.
385        ///
386        /// This requires the server to support it otherwise it might respond with an
387        /// error.
388        #[must_use]
389        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
390            self.inner = self.inner.send_compressed(encoding);
391            self
392        }
393        /// Enable decompressing responses.
394        #[must_use]
395        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
396            self.inner = self.inner.accept_compressed(encoding);
397            self
398        }
399        /// Limits the maximum size of a decoded message.
400        ///
401        /// Default: `4MB`
402        #[must_use]
403        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
404            self.inner = self.inner.max_decoding_message_size(limit);
405            self
406        }
407        /// Limits the maximum size of an encoded message.
408        ///
409        /// Default: `usize::MAX`
410        #[must_use]
411        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
412            self.inner = self.inner.max_encoding_message_size(limit);
413            self
414        }
415        pub async fn get_conversation(
416            &mut self,
417            request: impl tonic::IntoRequest<super::GetConversationRequest>,
418        ) -> std::result::Result<
419            tonic::Response<super::GetConversationResponse>,
420            tonic::Status,
421        > {
422            self.inner
423                .ready()
424                .await
425                .map_err(|e| {
426                    tonic::Status::unknown(
427                        format!("Service was not ready: {}", e.into()),
428                    )
429                })?;
430            let codec = tonic::codec::ProstCodec::default();
431            let path = http::uri::PathAndQuery::from_static(
432                "/nominal.comments.v1.CommentsService/GetConversation",
433            );
434            let mut req = request.into_request();
435            req.extensions_mut()
436                .insert(
437                    GrpcMethod::new(
438                        "nominal.comments.v1.CommentsService",
439                        "GetConversation",
440                    ),
441                );
442            self.inner.unary(req, path, codec).await
443        }
444        pub async fn get_conversation_count(
445            &mut self,
446            request: impl tonic::IntoRequest<super::GetConversationCountRequest>,
447        ) -> std::result::Result<
448            tonic::Response<super::GetConversationCountResponse>,
449            tonic::Status,
450        > {
451            self.inner
452                .ready()
453                .await
454                .map_err(|e| {
455                    tonic::Status::unknown(
456                        format!("Service was not ready: {}", e.into()),
457                    )
458                })?;
459            let codec = tonic::codec::ProstCodec::default();
460            let path = http::uri::PathAndQuery::from_static(
461                "/nominal.comments.v1.CommentsService/GetConversationCount",
462            );
463            let mut req = request.into_request();
464            req.extensions_mut()
465                .insert(
466                    GrpcMethod::new(
467                        "nominal.comments.v1.CommentsService",
468                        "GetConversationCount",
469                    ),
470                );
471            self.inner.unary(req, path, codec).await
472        }
473        pub async fn get_comment(
474            &mut self,
475            request: impl tonic::IntoRequest<super::GetCommentRequest>,
476        ) -> std::result::Result<
477            tonic::Response<super::GetCommentResponse>,
478            tonic::Status,
479        > {
480            self.inner
481                .ready()
482                .await
483                .map_err(|e| {
484                    tonic::Status::unknown(
485                        format!("Service was not ready: {}", e.into()),
486                    )
487                })?;
488            let codec = tonic::codec::ProstCodec::default();
489            let path = http::uri::PathAndQuery::from_static(
490                "/nominal.comments.v1.CommentsService/GetComment",
491            );
492            let mut req = request.into_request();
493            req.extensions_mut()
494                .insert(
495                    GrpcMethod::new("nominal.comments.v1.CommentsService", "GetComment"),
496                );
497            self.inner.unary(req, path, codec).await
498        }
499        pub async fn create_comment(
500            &mut self,
501            request: impl tonic::IntoRequest<super::CreateCommentRequest>,
502        ) -> std::result::Result<
503            tonic::Response<super::CreateCommentResponse>,
504            tonic::Status,
505        > {
506            self.inner
507                .ready()
508                .await
509                .map_err(|e| {
510                    tonic::Status::unknown(
511                        format!("Service was not ready: {}", e.into()),
512                    )
513                })?;
514            let codec = tonic::codec::ProstCodec::default();
515            let path = http::uri::PathAndQuery::from_static(
516                "/nominal.comments.v1.CommentsService/CreateComment",
517            );
518            let mut req = request.into_request();
519            req.extensions_mut()
520                .insert(
521                    GrpcMethod::new(
522                        "nominal.comments.v1.CommentsService",
523                        "CreateComment",
524                    ),
525                );
526            self.inner.unary(req, path, codec).await
527        }
528        pub async fn edit_comment(
529            &mut self,
530            request: impl tonic::IntoRequest<super::EditCommentRequestWrapper>,
531        ) -> std::result::Result<
532            tonic::Response<super::EditCommentResponse>,
533            tonic::Status,
534        > {
535            self.inner
536                .ready()
537                .await
538                .map_err(|e| {
539                    tonic::Status::unknown(
540                        format!("Service was not ready: {}", e.into()),
541                    )
542                })?;
543            let codec = tonic::codec::ProstCodec::default();
544            let path = http::uri::PathAndQuery::from_static(
545                "/nominal.comments.v1.CommentsService/EditComment",
546            );
547            let mut req = request.into_request();
548            req.extensions_mut()
549                .insert(
550                    GrpcMethod::new("nominal.comments.v1.CommentsService", "EditComment"),
551                );
552            self.inner.unary(req, path, codec).await
553        }
554        pub async fn delete_comment(
555            &mut self,
556            request: impl tonic::IntoRequest<super::DeleteCommentRequest>,
557        ) -> std::result::Result<
558            tonic::Response<super::DeleteCommentResponse>,
559            tonic::Status,
560        > {
561            self.inner
562                .ready()
563                .await
564                .map_err(|e| {
565                    tonic::Status::unknown(
566                        format!("Service was not ready: {}", e.into()),
567                    )
568                })?;
569            let codec = tonic::codec::ProstCodec::default();
570            let path = http::uri::PathAndQuery::from_static(
571                "/nominal.comments.v1.CommentsService/DeleteComment",
572            );
573            let mut req = request.into_request();
574            req.extensions_mut()
575                .insert(
576                    GrpcMethod::new(
577                        "nominal.comments.v1.CommentsService",
578                        "DeleteComment",
579                    ),
580                );
581            self.inner.unary(req, path, codec).await
582        }
583        pub async fn pin_comment(
584            &mut self,
585            request: impl tonic::IntoRequest<super::PinCommentRequest>,
586        ) -> std::result::Result<
587            tonic::Response<super::PinCommentResponse>,
588            tonic::Status,
589        > {
590            self.inner
591                .ready()
592                .await
593                .map_err(|e| {
594                    tonic::Status::unknown(
595                        format!("Service was not ready: {}", e.into()),
596                    )
597                })?;
598            let codec = tonic::codec::ProstCodec::default();
599            let path = http::uri::PathAndQuery::from_static(
600                "/nominal.comments.v1.CommentsService/PinComment",
601            );
602            let mut req = request.into_request();
603            req.extensions_mut()
604                .insert(
605                    GrpcMethod::new("nominal.comments.v1.CommentsService", "PinComment"),
606                );
607            self.inner.unary(req, path, codec).await
608        }
609        pub async fn unpin_comment(
610            &mut self,
611            request: impl tonic::IntoRequest<super::UnpinCommentRequest>,
612        ) -> std::result::Result<
613            tonic::Response<super::UnpinCommentResponse>,
614            tonic::Status,
615        > {
616            self.inner
617                .ready()
618                .await
619                .map_err(|e| {
620                    tonic::Status::unknown(
621                        format!("Service was not ready: {}", e.into()),
622                    )
623                })?;
624            let codec = tonic::codec::ProstCodec::default();
625            let path = http::uri::PathAndQuery::from_static(
626                "/nominal.comments.v1.CommentsService/UnpinComment",
627            );
628            let mut req = request.into_request();
629            req.extensions_mut()
630                .insert(
631                    GrpcMethod::new(
632                        "nominal.comments.v1.CommentsService",
633                        "UnpinComment",
634                    ),
635                );
636            self.inner.unary(req, path, codec).await
637        }
638        pub async fn add_reaction(
639            &mut self,
640            request: impl tonic::IntoRequest<super::AddReactionRequest>,
641        ) -> std::result::Result<
642            tonic::Response<super::AddReactionResponse>,
643            tonic::Status,
644        > {
645            self.inner
646                .ready()
647                .await
648                .map_err(|e| {
649                    tonic::Status::unknown(
650                        format!("Service was not ready: {}", e.into()),
651                    )
652                })?;
653            let codec = tonic::codec::ProstCodec::default();
654            let path = http::uri::PathAndQuery::from_static(
655                "/nominal.comments.v1.CommentsService/AddReaction",
656            );
657            let mut req = request.into_request();
658            req.extensions_mut()
659                .insert(
660                    GrpcMethod::new("nominal.comments.v1.CommentsService", "AddReaction"),
661                );
662            self.inner.unary(req, path, codec).await
663        }
664        pub async fn remove_reaction(
665            &mut self,
666            request: impl tonic::IntoRequest<super::RemoveReactionRequest>,
667        ) -> std::result::Result<
668            tonic::Response<super::RemoveReactionResponse>,
669            tonic::Status,
670        > {
671            self.inner
672                .ready()
673                .await
674                .map_err(|e| {
675                    tonic::Status::unknown(
676                        format!("Service was not ready: {}", e.into()),
677                    )
678                })?;
679            let codec = tonic::codec::ProstCodec::default();
680            let path = http::uri::PathAndQuery::from_static(
681                "/nominal.comments.v1.CommentsService/RemoveReaction",
682            );
683            let mut req = request.into_request();
684            req.extensions_mut()
685                .insert(
686                    GrpcMethod::new(
687                        "nominal.comments.v1.CommentsService",
688                        "RemoveReaction",
689                    ),
690                );
691            self.inner.unary(req, path, codec).await
692        }
693    }
694}