nominal_api/proto/
nominal.comments.v1.rs

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