nominal_api/proto/
nominal.authorization.markings.v1.rs

1// This file is @generated by prost-build.
2#[derive(Clone, PartialEq, ::prost::Message)]
3pub struct AuthorizedGroups {
4    #[prost(string, repeated, tag = "1")]
5    pub group_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
6}
7#[derive(Clone, PartialEq, ::prost::Message)]
8pub struct Marking {
9    #[prost(string, tag = "1")]
10    pub rid: ::prost::alloc::string::String,
11    /// Human-readable identifier for this marking.
12    /// Must be unique within the organization.
13    /// Must be lower case alphanumeric characters, optionally separated by hyphens.
14    #[prost(string, tag = "2")]
15    pub id: ::prost::alloc::string::String,
16    #[prost(string, tag = "3")]
17    pub description: ::prost::alloc::string::String,
18    /// Group RIDs that are authorized to access data sources with this marking.
19    #[prost(message, optional, tag = "4")]
20    pub authorized_groups: ::core::option::Option<AuthorizedGroups>,
21    /// Symbol and color to identify markings
22    #[prost(message, optional, tag = "5")]
23    pub symbol: ::core::option::Option<super::super::super::scout::elements::v1::Symbol>,
24    #[prost(message, optional, tag = "6")]
25    pub color: ::core::option::Option<super::super::super::scout::elements::v1::Color>,
26    #[prost(message, optional, tag = "7")]
27    pub created_at: ::core::option::Option<
28        super::super::super::super::google::protobuf::Timestamp,
29    >,
30    #[prost(message, optional, tag = "8")]
31    pub updated_at: ::core::option::Option<
32        super::super::super::super::google::protobuf::Timestamp,
33    >,
34    #[prost(bool, tag = "9")]
35    pub is_archived: bool,
36}
37/// A leaner representation of a Marking that doesn't include the authorized groups.
38#[derive(Clone, PartialEq, ::prost::Message)]
39pub struct MarkingMetadata {
40    #[prost(string, tag = "1")]
41    pub rid: ::prost::alloc::string::String,
42    /// Human-readable identifier for this marking.
43    /// Must be unique within the organization.
44    /// Must be lower case alphanumeric characters, optionally separated by hyphens.
45    #[prost(string, tag = "2")]
46    pub id: ::prost::alloc::string::String,
47    #[prost(string, tag = "3")]
48    pub description: ::prost::alloc::string::String,
49    /// Symbol and color to identify markings
50    #[prost(message, optional, tag = "4")]
51    pub symbol: ::core::option::Option<super::super::super::scout::elements::v1::Symbol>,
52    #[prost(message, optional, tag = "5")]
53    pub color: ::core::option::Option<super::super::super::scout::elements::v1::Color>,
54    #[prost(message, optional, tag = "6")]
55    pub created_at: ::core::option::Option<
56        super::super::super::super::google::protobuf::Timestamp,
57    >,
58    #[prost(message, optional, tag = "7")]
59    pub updated_at: ::core::option::Option<
60        super::super::super::super::google::protobuf::Timestamp,
61    >,
62    #[prost(bool, tag = "8")]
63    pub is_archived: bool,
64}
65#[derive(Clone, PartialEq, ::prost::Message)]
66pub struct CreateMarkingRequest {
67    /// Human-readable identifier for this marking.
68    /// Must be unique within the organization.
69    /// Must be lower case alphanumeric characters, optionally separated by hyphens.
70    #[prost(string, tag = "1")]
71    pub id: ::prost::alloc::string::String,
72    #[prost(string, tag = "2")]
73    pub description: ::prost::alloc::string::String,
74    /// Group RIDs that are authorized to access data sources with this marking.
75    #[prost(message, optional, tag = "3")]
76    pub authorized_groups: ::core::option::Option<AuthorizedGroups>,
77    #[prost(message, optional, tag = "4")]
78    pub symbol: ::core::option::Option<super::super::super::scout::elements::v1::Symbol>,
79    #[prost(message, optional, tag = "5")]
80    pub color: ::core::option::Option<super::super::super::scout::elements::v1::Color>,
81}
82#[derive(Clone, PartialEq, ::prost::Message)]
83pub struct CreateMarkingResponse {
84    #[prost(message, optional, tag = "1")]
85    pub marking: ::core::option::Option<Marking>,
86}
87#[derive(Clone, PartialEq, ::prost::Message)]
88pub struct GetMarkingRequest {
89    #[prost(string, tag = "1")]
90    pub rid: ::prost::alloc::string::String,
91}
92#[derive(Clone, PartialEq, ::prost::Message)]
93pub struct GetMarkingResponse {
94    #[prost(message, optional, tag = "1")]
95    pub marking: ::core::option::Option<Marking>,
96}
97#[derive(Clone, PartialEq, ::prost::Message)]
98pub struct GetMarkingByIdRequest {
99    #[prost(string, tag = "1")]
100    pub id: ::prost::alloc::string::String,
101}
102#[derive(Clone, PartialEq, ::prost::Message)]
103pub struct GetMarkingByIdResponse {
104    #[prost(message, optional, tag = "1")]
105    pub marking: ::core::option::Option<Marking>,
106}
107#[derive(Clone, PartialEq, ::prost::Message)]
108pub struct BatchGetMarkingsRequest {
109    #[prost(string, repeated, tag = "1")]
110    pub marking_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
111}
112#[derive(Clone, PartialEq, ::prost::Message)]
113pub struct BatchGetMarkingsResponse {
114    #[prost(message, repeated, tag = "1")]
115    pub markings: ::prost::alloc::vec::Vec<Marking>,
116}
117#[derive(Clone, PartialEq, ::prost::Message)]
118pub struct BatchGetMarkingMetadataRequest {
119    #[prost(string, repeated, tag = "1")]
120    pub marking_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
121}
122#[derive(Clone, PartialEq, ::prost::Message)]
123pub struct BatchGetMarkingMetadataResponse {
124    #[prost(message, repeated, tag = "1")]
125    pub marking_metadatas: ::prost::alloc::vec::Vec<MarkingMetadata>,
126}
127#[derive(Clone, PartialEq, ::prost::Message)]
128pub struct GetAuthorizedGroupsByMarkingRequest {
129    #[prost(string, repeated, tag = "1")]
130    pub marking_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
131}
132#[derive(Clone, PartialEq, ::prost::Message)]
133pub struct GetAuthorizedGroupsByMarkingResponse {
134    #[prost(map = "string, message", tag = "1")]
135    pub authorized_groups_by_marking: ::std::collections::HashMap<
136        ::prost::alloc::string::String,
137        AuthorizedGroups,
138    >,
139}
140#[derive(Clone, PartialEq, ::prost::Message)]
141pub struct SearchMarkingsQuery {
142    #[prost(oneof = "search_markings_query::Query", tags = "1, 2, 3")]
143    pub query: ::core::option::Option<search_markings_query::Query>,
144}
145/// Nested message and enum types in `SearchMarkingsQuery`.
146pub mod search_markings_query {
147    #[derive(Clone, PartialEq, ::prost::Oneof)]
148    pub enum Query {
149        /// Search for markings with an ID that contains the given query as a substring.
150        #[prost(string, tag = "1")]
151        IdExactSubstringSearch(::prost::alloc::string::String),
152        #[prost(message, tag = "2")]
153        And(super::SearchMarkingsQueryList),
154        #[prost(message, tag = "3")]
155        Or(super::SearchMarkingsQueryList),
156    }
157}
158#[derive(Clone, PartialEq, ::prost::Message)]
159pub struct SearchMarkingsQueryList {
160    #[prost(message, repeated, tag = "1")]
161    pub queries: ::prost::alloc::vec::Vec<SearchMarkingsQuery>,
162}
163#[derive(Clone, PartialEq, ::prost::Message)]
164pub struct SearchMarkingsRequest {
165    #[prost(message, optional, tag = "1")]
166    pub query: ::core::option::Option<SearchMarkingsQuery>,
167    /// Page sizes greater than 1_000 will be rejected. Default pageSize is 100.
168    #[prost(int32, optional, tag = "2")]
169    pub page_size: ::core::option::Option<i32>,
170    #[prost(string, optional, tag = "3")]
171    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
172}
173#[derive(Clone, PartialEq, ::prost::Message)]
174pub struct SearchMarkingsResponse {
175    #[prost(message, repeated, tag = "1")]
176    pub marking_metadatas: ::prost::alloc::vec::Vec<MarkingMetadata>,
177    #[prost(string, optional, tag = "2")]
178    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
179}
180#[derive(Clone, PartialEq, ::prost::Message)]
181pub struct UpdateMarkingRequest {
182    #[prost(string, tag = "1")]
183    pub rid: ::prost::alloc::string::String,
184    /// Human-readable identifier for this marking.
185    /// Must be unique within the organization.
186    /// Must be lower case alphanumeric characters, optionally separated by hyphens.
187    #[prost(string, optional, tag = "2")]
188    pub id: ::core::option::Option<::prost::alloc::string::String>,
189    #[prost(string, optional, tag = "3")]
190    pub description: ::core::option::Option<::prost::alloc::string::String>,
191    /// Group RIDs that are authorized to access data sources with this marking.
192    #[prost(message, optional, tag = "4")]
193    pub authorized_groups: ::core::option::Option<AuthorizedGroups>,
194    #[prost(message, optional, tag = "5")]
195    pub symbol: ::core::option::Option<
196        update_marking_request::UpdateMarkingSymbolWrapper,
197    >,
198    #[prost(message, optional, tag = "6")]
199    pub color: ::core::option::Option<update_marking_request::UpdateMarkingColorWrapper>,
200}
201/// Nested message and enum types in `UpdateMarkingRequest`.
202pub mod update_marking_request {
203    #[derive(Clone, PartialEq, ::prost::Message)]
204    pub struct UpdateMarkingSymbolWrapper {
205        #[prost(message, optional, tag = "1")]
206        pub value: ::core::option::Option<
207            super::super::super::super::scout::elements::v1::Symbol,
208        >,
209    }
210    #[derive(Clone, PartialEq, ::prost::Message)]
211    pub struct UpdateMarkingColorWrapper {
212        #[prost(message, optional, tag = "1")]
213        pub value: ::core::option::Option<
214            super::super::super::super::scout::elements::v1::Color,
215        >,
216    }
217}
218#[derive(Clone, PartialEq, ::prost::Message)]
219pub struct UpdateMarkingResponse {
220    #[prost(message, optional, tag = "1")]
221    pub marking: ::core::option::Option<Marking>,
222}
223#[derive(Clone, PartialEq, ::prost::Message)]
224pub struct ArchiveMarkingsRequest {
225    #[prost(string, repeated, tag = "1")]
226    pub marking_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
227}
228/// intentionally empty
229#[derive(Clone, Copy, PartialEq, ::prost::Message)]
230pub struct ArchiveMarkingsResponse {}
231#[derive(Clone, PartialEq, ::prost::Message)]
232pub struct UnarchiveMarkingsRequest {
233    #[prost(string, repeated, tag = "1")]
234    pub marking_rids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
235}
236/// intentionally empty
237#[derive(Clone, Copy, PartialEq, ::prost::Message)]
238pub struct UnarchiveMarkingsResponse {}
239#[derive(Clone, PartialEq, ::prost::Message)]
240pub struct UpdateMarkingsOnResourceRequest {
241    #[prost(string, tag = "1")]
242    pub resource: ::prost::alloc::string::String,
243    #[prost(string, repeated, tag = "2")]
244    pub markings_to_apply: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
245    #[prost(string, repeated, tag = "3")]
246    pub markings_to_remove: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
247}
248/// intentionally empty
249#[derive(Clone, Copy, PartialEq, ::prost::Message)]
250pub struct UpdateMarkingsOnResourceResponse {}
251#[derive(Clone, PartialEq, ::prost::Message)]
252pub struct GetResourcesForMarkingRequest {
253    #[prost(string, tag = "1")]
254    pub marking_rid: ::prost::alloc::string::String,
255    /// Page sizes greater than 1_000 will be rejected. Default pageSize is 100.
256    #[prost(int32, optional, tag = "2")]
257    pub page_size: ::core::option::Option<i32>,
258    #[prost(string, optional, tag = "3")]
259    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
260}
261#[derive(Clone, PartialEq, ::prost::Message)]
262pub struct GetResourcesForMarkingResponse {
263    #[prost(message, repeated, tag = "1")]
264    pub resources: ::prost::alloc::vec::Vec<
265        get_resources_for_marking_response::MarkedResource,
266    >,
267    #[prost(string, optional, tag = "2")]
268    pub next_page_token: ::core::option::Option<::prost::alloc::string::String>,
269}
270/// Nested message and enum types in `GetResourcesForMarkingResponse`.
271pub mod get_resources_for_marking_response {
272    #[derive(Clone, PartialEq, ::prost::Message)]
273    pub struct MarkedResource {
274        /// nb: skipping field 1 in order to keep the door open to unify this message with "AppliedMarking" below
275        #[prost(string, tag = "2")]
276        pub resource: ::prost::alloc::string::String,
277        #[prost(message, optional, tag = "3")]
278        pub applied_at: ::core::option::Option<
279            super::super::super::super::super::google::protobuf::Timestamp,
280        >,
281    }
282}
283#[derive(Clone, PartialEq, ::prost::Message)]
284pub struct GetMarkingsForResourcesRequest {
285    /// The resources to get the markings for.
286    #[prost(string, repeated, tag = "1")]
287    pub resources: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
288}
289#[derive(Clone, PartialEq, ::prost::Message)]
290pub struct GetMarkingsForResourcesResponse {
291    /// A map from resource ID to the markings applied to them.
292    #[prost(map = "string, message", tag = "1")]
293    pub resource_to_markings: ::std::collections::HashMap<
294        ::prost::alloc::string::String,
295        get_markings_for_resources_response::ResourceMarkingsList,
296    >,
297}
298/// Nested message and enum types in `GetMarkingsForResourcesResponse`.
299pub mod get_markings_for_resources_response {
300    #[derive(Clone, PartialEq, ::prost::Message)]
301    pub struct ResourceMarkingsList {
302        #[prost(message, repeated, tag = "1")]
303        pub applied_markings: ::prost::alloc::vec::Vec<
304            resource_markings_list::AppliedMarking,
305        >,
306    }
307    /// Nested message and enum types in `ResourceMarkingsList`.
308    pub mod resource_markings_list {
309        #[derive(Clone, PartialEq, ::prost::Message)]
310        pub struct AppliedMarking {
311            #[prost(string, tag = "1")]
312            pub marking_rid: ::prost::alloc::string::String,
313            /// nb: skipping field 2 in order to keep the door open to unify this message with "MarkedResource" above
314            #[prost(message, optional, tag = "3")]
315            pub applied_at: ::core::option::Option<
316                super::super::super::super::super::super::google::protobuf::Timestamp,
317            >,
318        }
319    }
320}
321/// Generated client implementations.
322pub mod marking_service_client {
323    #![allow(
324        unused_variables,
325        dead_code,
326        missing_docs,
327        clippy::wildcard_imports,
328        clippy::let_unit_value,
329    )]
330    use tonic::codegen::*;
331    use tonic::codegen::http::Uri;
332    /// This service manages Markings, which are a mechanism to restrict access to data sources.
333    #[derive(Debug, Clone)]
334    pub struct MarkingServiceClient<T> {
335        inner: tonic::client::Grpc<T>,
336    }
337    impl MarkingServiceClient<tonic::transport::Channel> {
338        /// Attempt to create a new client by connecting to a given endpoint.
339        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
340        where
341            D: TryInto<tonic::transport::Endpoint>,
342            D::Error: Into<StdError>,
343        {
344            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
345            Ok(Self::new(conn))
346        }
347    }
348    impl<T> MarkingServiceClient<T>
349    where
350        T: tonic::client::GrpcService<tonic::body::Body>,
351        T::Error: Into<StdError>,
352        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
353        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
354    {
355        pub fn new(inner: T) -> Self {
356            let inner = tonic::client::Grpc::new(inner);
357            Self { inner }
358        }
359        pub fn with_origin(inner: T, origin: Uri) -> Self {
360            let inner = tonic::client::Grpc::with_origin(inner, origin);
361            Self { inner }
362        }
363        pub fn with_interceptor<F>(
364            inner: T,
365            interceptor: F,
366        ) -> MarkingServiceClient<InterceptedService<T, F>>
367        where
368            F: tonic::service::Interceptor,
369            T::ResponseBody: Default,
370            T: tonic::codegen::Service<
371                http::Request<tonic::body::Body>,
372                Response = http::Response<
373                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
374                >,
375            >,
376            <T as tonic::codegen::Service<
377                http::Request<tonic::body::Body>,
378            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
379        {
380            MarkingServiceClient::new(InterceptedService::new(inner, interceptor))
381        }
382        /// Compress requests with the given encoding.
383        ///
384        /// This requires the server to support it otherwise it might respond with an
385        /// error.
386        #[must_use]
387        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
388            self.inner = self.inner.send_compressed(encoding);
389            self
390        }
391        /// Enable decompressing responses.
392        #[must_use]
393        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
394            self.inner = self.inner.accept_compressed(encoding);
395            self
396        }
397        /// Limits the maximum size of a decoded message.
398        ///
399        /// Default: `4MB`
400        #[must_use]
401        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
402            self.inner = self.inner.max_decoding_message_size(limit);
403            self
404        }
405        /// Limits the maximum size of an encoded message.
406        ///
407        /// Default: `usize::MAX`
408        #[must_use]
409        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
410            self.inner = self.inner.max_encoding_message_size(limit);
411            self
412        }
413        /// Creates a marking.
414        /// Throws HTTP 409 / gRPC 6 if a marking with the same ID already exists.
415        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to create a marking.
416        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to read some of the specified groups.
417        pub async fn create_marking(
418            &mut self,
419            request: impl tonic::IntoRequest<super::CreateMarkingRequest>,
420        ) -> std::result::Result<
421            tonic::Response<super::CreateMarkingResponse>,
422            tonic::Status,
423        > {
424            self.inner
425                .ready()
426                .await
427                .map_err(|e| {
428                    tonic::Status::unknown(
429                        format!("Service was not ready: {}", e.into()),
430                    )
431                })?;
432            let codec = tonic::codec::ProstCodec::default();
433            let path = http::uri::PathAndQuery::from_static(
434                "/nominal.authorization.markings.v1.MarkingService/CreateMarking",
435            );
436            let mut req = request.into_request();
437            req.extensions_mut()
438                .insert(
439                    GrpcMethod::new(
440                        "nominal.authorization.markings.v1.MarkingService",
441                        "CreateMarking",
442                    ),
443                );
444            self.inner.unary(req, path, codec).await
445        }
446        /// Gets a marking by its RID.
447        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to read the marking.
448        /// Throws HTTP 403 / gRPC 5 if the marking is not found.
449        pub async fn get_marking(
450            &mut self,
451            request: impl tonic::IntoRequest<super::GetMarkingRequest>,
452        ) -> std::result::Result<
453            tonic::Response<super::GetMarkingResponse>,
454            tonic::Status,
455        > {
456            self.inner
457                .ready()
458                .await
459                .map_err(|e| {
460                    tonic::Status::unknown(
461                        format!("Service was not ready: {}", e.into()),
462                    )
463                })?;
464            let codec = tonic::codec::ProstCodec::default();
465            let path = http::uri::PathAndQuery::from_static(
466                "/nominal.authorization.markings.v1.MarkingService/GetMarking",
467            );
468            let mut req = request.into_request();
469            req.extensions_mut()
470                .insert(
471                    GrpcMethod::new(
472                        "nominal.authorization.markings.v1.MarkingService",
473                        "GetMarking",
474                    ),
475                );
476            self.inner.unary(req, path, codec).await
477        }
478        /// Gets a marking by its ID, a human-readable identifier unique within the org.
479        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to read the marking.
480        /// Throws HTTP 403 / gRPC 5 if the marking is not found.
481        pub async fn get_marking_by_id(
482            &mut self,
483            request: impl tonic::IntoRequest<super::GetMarkingByIdRequest>,
484        ) -> std::result::Result<
485            tonic::Response<super::GetMarkingByIdResponse>,
486            tonic::Status,
487        > {
488            self.inner
489                .ready()
490                .await
491                .map_err(|e| {
492                    tonic::Status::unknown(
493                        format!("Service was not ready: {}", e.into()),
494                    )
495                })?;
496            let codec = tonic::codec::ProstCodec::default();
497            let path = http::uri::PathAndQuery::from_static(
498                "/nominal.authorization.markings.v1.MarkingService/GetMarkingById",
499            );
500            let mut req = request.into_request();
501            req.extensions_mut()
502                .insert(
503                    GrpcMethod::new(
504                        "nominal.authorization.markings.v1.MarkingService",
505                        "GetMarkingById",
506                    ),
507                );
508            self.inner.unary(req, path, codec).await
509        }
510        /// Gets multiple markings by RID.
511        /// If a marking is not found or the user doesn't have permission to read it,
512        /// it will not be included in the response.
513        pub async fn batch_get_markings(
514            &mut self,
515            request: impl tonic::IntoRequest<super::BatchGetMarkingsRequest>,
516        ) -> std::result::Result<
517            tonic::Response<super::BatchGetMarkingsResponse>,
518            tonic::Status,
519        > {
520            self.inner
521                .ready()
522                .await
523                .map_err(|e| {
524                    tonic::Status::unknown(
525                        format!("Service was not ready: {}", e.into()),
526                    )
527                })?;
528            let codec = tonic::codec::ProstCodec::default();
529            let path = http::uri::PathAndQuery::from_static(
530                "/nominal.authorization.markings.v1.MarkingService/BatchGetMarkings",
531            );
532            let mut req = request.into_request();
533            req.extensions_mut()
534                .insert(
535                    GrpcMethod::new(
536                        "nominal.authorization.markings.v1.MarkingService",
537                        "BatchGetMarkings",
538                    ),
539                );
540            self.inner.unary(req, path, codec).await
541        }
542        /// Gets metadata for multiple markings by RID. Metadata does not include the authorized groups.
543        /// If a marking is not found or the user doesn't have permission to read it,
544        /// it will not be included in the response.
545        pub async fn batch_get_marking_metadata(
546            &mut self,
547            request: impl tonic::IntoRequest<super::BatchGetMarkingMetadataRequest>,
548        ) -> std::result::Result<
549            tonic::Response<super::BatchGetMarkingMetadataResponse>,
550            tonic::Status,
551        > {
552            self.inner
553                .ready()
554                .await
555                .map_err(|e| {
556                    tonic::Status::unknown(
557                        format!("Service was not ready: {}", e.into()),
558                    )
559                })?;
560            let codec = tonic::codec::ProstCodec::default();
561            let path = http::uri::PathAndQuery::from_static(
562                "/nominal.authorization.markings.v1.MarkingService/BatchGetMarkingMetadata",
563            );
564            let mut req = request.into_request();
565            req.extensions_mut()
566                .insert(
567                    GrpcMethod::new(
568                        "nominal.authorization.markings.v1.MarkingService",
569                        "BatchGetMarkingMetadata",
570                    ),
571                );
572            self.inner.unary(req, path, codec).await
573        }
574        /// Gets the authorized Groups for each of a set of Markings.
575        /// Markings that are not found or for which the user does not have permission to read
576        /// will be filtered from the response.
577        /// Groups for which the user does not have permission to read will be filtered from the response.
578        pub async fn get_authorized_groups_by_marking(
579            &mut self,
580            request: impl tonic::IntoRequest<super::GetAuthorizedGroupsByMarkingRequest>,
581        ) -> std::result::Result<
582            tonic::Response<super::GetAuthorizedGroupsByMarkingResponse>,
583            tonic::Status,
584        > {
585            self.inner
586                .ready()
587                .await
588                .map_err(|e| {
589                    tonic::Status::unknown(
590                        format!("Service was not ready: {}", e.into()),
591                    )
592                })?;
593            let codec = tonic::codec::ProstCodec::default();
594            let path = http::uri::PathAndQuery::from_static(
595                "/nominal.authorization.markings.v1.MarkingService/GetAuthorizedGroupsByMarking",
596            );
597            let mut req = request.into_request();
598            req.extensions_mut()
599                .insert(
600                    GrpcMethod::new(
601                        "nominal.authorization.markings.v1.MarkingService",
602                        "GetAuthorizedGroupsByMarking",
603                    ),
604                );
605            self.inner.unary(req, path, codec).await
606        }
607        /// Search Markings, returning paged results.
608        /// Throws HTTP 400 / gRPC 3 if the query is incorrectly formed.
609        pub async fn search_markings(
610            &mut self,
611            request: impl tonic::IntoRequest<super::SearchMarkingsRequest>,
612        ) -> std::result::Result<
613            tonic::Response<super::SearchMarkingsResponse>,
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.authorization.markings.v1.MarkingService/SearchMarkings",
627            );
628            let mut req = request.into_request();
629            req.extensions_mut()
630                .insert(
631                    GrpcMethod::new(
632                        "nominal.authorization.markings.v1.MarkingService",
633                        "SearchMarkings",
634                    ),
635                );
636            self.inner.unary(req, path, codec).await
637        }
638        /// Updates a marking.
639        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to update the marking.
640        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to read any of the specified groups.
641        /// Throws HTTP 403 / gRPC 5 if the marking is not found.
642        /// Throws HTTP 409 / gRPC 6 if trying to update the ID of a marking to an ID that already exists.
643        /// Throws HTTP 400 / gRPC 3 if trying to update an archived marking.
644        pub async fn update_marking(
645            &mut self,
646            request: impl tonic::IntoRequest<super::UpdateMarkingRequest>,
647        ) -> std::result::Result<
648            tonic::Response<super::UpdateMarkingResponse>,
649            tonic::Status,
650        > {
651            self.inner
652                .ready()
653                .await
654                .map_err(|e| {
655                    tonic::Status::unknown(
656                        format!("Service was not ready: {}", e.into()),
657                    )
658                })?;
659            let codec = tonic::codec::ProstCodec::default();
660            let path = http::uri::PathAndQuery::from_static(
661                "/nominal.authorization.markings.v1.MarkingService/UpdateMarking",
662            );
663            let mut req = request.into_request();
664            req.extensions_mut()
665                .insert(
666                    GrpcMethod::new(
667                        "nominal.authorization.markings.v1.MarkingService",
668                        "UpdateMarking",
669                    ),
670                );
671            self.inner.unary(req, path, codec).await
672        }
673        /// Archives markings. Archiving a marking is an idempotent operation that prevents further changes
674        /// or applications of the marking.
675        /// Archived markings will not appear in search but can be retrieved by `get` endpoints.
676        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to archive one or more of the markings
677        /// or if any of the markings are not found.
678        /// Throws HTTP 400 / gRPC 3 if the archived marking is currently applied to one or more resources.
679        /// TODO(MGMT-489): this will throw 403 if any of the Markings don't exist, but we should throw 404 instead.
680        pub async fn archive_markings(
681            &mut self,
682            request: impl tonic::IntoRequest<super::ArchiveMarkingsRequest>,
683        ) -> std::result::Result<
684            tonic::Response<super::ArchiveMarkingsResponse>,
685            tonic::Status,
686        > {
687            self.inner
688                .ready()
689                .await
690                .map_err(|e| {
691                    tonic::Status::unknown(
692                        format!("Service was not ready: {}", e.into()),
693                    )
694                })?;
695            let codec = tonic::codec::ProstCodec::default();
696            let path = http::uri::PathAndQuery::from_static(
697                "/nominal.authorization.markings.v1.MarkingService/ArchiveMarkings",
698            );
699            let mut req = request.into_request();
700            req.extensions_mut()
701                .insert(
702                    GrpcMethod::new(
703                        "nominal.authorization.markings.v1.MarkingService",
704                        "ArchiveMarkings",
705                    ),
706                );
707            self.inner.unary(req, path, codec).await
708        }
709        /// Unarchives markings. Restores ability to apply and modify marking.
710        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to unarchive one or more of the markings
711        /// or if any of the markings are not found.
712        /// TODO(MGMT-489): this will throw 403 if any of the Markings don't exist, but we should throw 404 instead.
713        pub async fn unarchive_markings(
714            &mut self,
715            request: impl tonic::IntoRequest<super::UnarchiveMarkingsRequest>,
716        ) -> std::result::Result<
717            tonic::Response<super::UnarchiveMarkingsResponse>,
718            tonic::Status,
719        > {
720            self.inner
721                .ready()
722                .await
723                .map_err(|e| {
724                    tonic::Status::unknown(
725                        format!("Service was not ready: {}", e.into()),
726                    )
727                })?;
728            let codec = tonic::codec::ProstCodec::default();
729            let path = http::uri::PathAndQuery::from_static(
730                "/nominal.authorization.markings.v1.MarkingService/UnarchiveMarkings",
731            );
732            let mut req = request.into_request();
733            req.extensions_mut()
734                .insert(
735                    GrpcMethod::new(
736                        "nominal.authorization.markings.v1.MarkingService",
737                        "UnarchiveMarkings",
738                    ),
739                );
740            self.inner.unary(req, path, codec).await
741        }
742        /// Update the markings that are applied on a resource. Supports applying and removing markings at once.
743        /// This endpoint can be used to atomically replace the markings on a resource, or bulk apply/remove markings.
744        /// This operation is idempotent and will not throw an error if the marking is already applied/removed on the resource.
745        /// If a resource marking pair is present in both `markings_to_apply` and `markings_to_remove`, this will throw.
746        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to change the markings on the resource.
747        /// Throws HTTP 400 / gRPC 3 if trying to apply an archived marking.
748        pub async fn update_markings_on_resource(
749            &mut self,
750            request: impl tonic::IntoRequest<super::UpdateMarkingsOnResourceRequest>,
751        ) -> std::result::Result<
752            tonic::Response<super::UpdateMarkingsOnResourceResponse>,
753            tonic::Status,
754        > {
755            self.inner
756                .ready()
757                .await
758                .map_err(|e| {
759                    tonic::Status::unknown(
760                        format!("Service was not ready: {}", e.into()),
761                    )
762                })?;
763            let codec = tonic::codec::ProstCodec::default();
764            let path = http::uri::PathAndQuery::from_static(
765                "/nominal.authorization.markings.v1.MarkingService/UpdateMarkingsOnResource",
766            );
767            let mut req = request.into_request();
768            req.extensions_mut()
769                .insert(
770                    GrpcMethod::new(
771                        "nominal.authorization.markings.v1.MarkingService",
772                        "UpdateMarkingsOnResource",
773                    ),
774                );
775            self.inner.unary(req, path, codec).await
776        }
777        /// Gets the resources that a Marking is applied to. This endpoint is paginated.
778        /// Any unauthorized resources will be filtered from the response.
779        /// Throws HTTP 403 / gRPC 7 if the user does not have permission to read the marking.
780        pub async fn get_resources_for_marking(
781            &mut self,
782            request: impl tonic::IntoRequest<super::GetResourcesForMarkingRequest>,
783        ) -> std::result::Result<
784            tonic::Response<super::GetResourcesForMarkingResponse>,
785            tonic::Status,
786        > {
787            self.inner
788                .ready()
789                .await
790                .map_err(|e| {
791                    tonic::Status::unknown(
792                        format!("Service was not ready: {}", e.into()),
793                    )
794                })?;
795            let codec = tonic::codec::ProstCodec::default();
796            let path = http::uri::PathAndQuery::from_static(
797                "/nominal.authorization.markings.v1.MarkingService/GetResourcesForMarking",
798            );
799            let mut req = request.into_request();
800            req.extensions_mut()
801                .insert(
802                    GrpcMethod::new(
803                        "nominal.authorization.markings.v1.MarkingService",
804                        "GetResourcesForMarking",
805                    ),
806                );
807            self.inner.unary(req, path, codec).await
808        }
809        /// Gets the requested resources and the markings applied to them. Since the number of markings applied
810        /// to a resource is typically small, this endpoint will return all markings for each resource.
811        /// Any unauthorized resources or markings will be filtered from the response.
812        pub async fn get_markings_for_resources(
813            &mut self,
814            request: impl tonic::IntoRequest<super::GetMarkingsForResourcesRequest>,
815        ) -> std::result::Result<
816            tonic::Response<super::GetMarkingsForResourcesResponse>,
817            tonic::Status,
818        > {
819            self.inner
820                .ready()
821                .await
822                .map_err(|e| {
823                    tonic::Status::unknown(
824                        format!("Service was not ready: {}", e.into()),
825                    )
826                })?;
827            let codec = tonic::codec::ProstCodec::default();
828            let path = http::uri::PathAndQuery::from_static(
829                "/nominal.authorization.markings.v1.MarkingService/GetMarkingsForResources",
830            );
831            let mut req = request.into_request();
832            req.extensions_mut()
833                .insert(
834                    GrpcMethod::new(
835                        "nominal.authorization.markings.v1.MarkingService",
836                        "GetMarkingsForResources",
837                    ),
838                );
839            self.inner.unary(req, path, codec).await
840        }
841    }
842}