aruna_rust_api/aruna/
aruna.api.storage.services.v2.rs

1// This file is @generated by prost-build.
2#[derive(serde::Deserialize, serde::Serialize)]
3#[allow(clippy::derive_partial_eq_without_eq)]
4#[derive(Clone, PartialEq, ::prost::Message)]
5pub struct CreateEndpointRequest {
6    /// Endpoint name
7    #[prost(string, tag = "1")]
8    pub name: ::prost::alloc::string::String,
9    /// Endpoint type
10    #[prost(enumeration = "super::super::models::v2::EndpointVariant", tag = "2")]
11    pub ep_variant: i32,
12    /// Is this endpoint public
13    #[prost(bool, tag = "3")]
14    pub is_public: bool,
15    /// required public_key
16    #[prost(string, tag = "4")]
17    pub pubkey: ::prost::alloc::string::String,
18    /// List of EndpointHostConfigs
19    #[prost(message, repeated, tag = "5")]
20    pub host_configs: ::prost::alloc::vec::Vec<
21        super::super::models::v2::EndpointHostConfig,
22    >,
23}
24#[derive(serde::Deserialize, serde::Serialize)]
25#[allow(clippy::derive_partial_eq_without_eq)]
26#[derive(Clone, PartialEq, ::prost::Message)]
27pub struct CreateEndpointResponse {
28    /// Overview of the created endpoint
29    #[prost(message, optional, tag = "1")]
30    pub endpoint: ::core::option::Option<super::super::models::v2::Endpoint>,
31}
32#[derive(serde::Deserialize, serde::Serialize)]
33#[allow(clippy::derive_partial_eq_without_eq)]
34#[derive(Clone, PartialEq, ::prost::Message)]
35pub struct FullSyncEndpointRequest {}
36#[derive(serde::Deserialize, serde::Serialize)]
37#[allow(clippy::derive_partial_eq_without_eq)]
38#[derive(Clone, PartialEq, ::prost::Message)]
39pub struct FullSyncEndpointResponse {
40    #[prost(oneof = "full_sync_endpoint_response::Target", tags = "1, 2, 3")]
41    pub target: ::core::option::Option<full_sync_endpoint_response::Target>,
42}
43/// Nested message and enum types in `FullSyncEndpointResponse`.
44pub mod full_sync_endpoint_response {
45    #[derive(serde::Deserialize, serde::Serialize)]
46    #[allow(clippy::derive_partial_eq_without_eq)]
47    #[derive(Clone, PartialEq, ::prost::Oneof)]
48    pub enum Target {
49        #[prost(message, tag = "1")]
50        GenericResource(super::super::super::models::v2::GenericResource),
51        #[prost(message, tag = "2")]
52        User(super::super::super::models::v2::User),
53        #[prost(message, tag = "3")]
54        Pubkey(super::super::super::models::v2::Pubkey),
55    }
56}
57#[derive(serde::Deserialize, serde::Serialize)]
58#[allow(clippy::derive_partial_eq_without_eq)]
59#[derive(Clone, PartialEq, ::prost::Message)]
60pub struct GetEndpointRequest {
61    /// Either endpoint_name or id
62    #[prost(oneof = "get_endpoint_request::Endpoint", tags = "1, 2")]
63    pub endpoint: ::core::option::Option<get_endpoint_request::Endpoint>,
64}
65/// Nested message and enum types in `GetEndpointRequest`.
66pub mod get_endpoint_request {
67    /// Either endpoint_name or id
68    #[derive(serde::Deserialize, serde::Serialize)]
69    #[allow(clippy::derive_partial_eq_without_eq)]
70    #[derive(Clone, PartialEq, ::prost::Oneof)]
71    pub enum Endpoint {
72        /// The name of the endpoint
73        #[prost(string, tag = "1")]
74        EndpointName(::prost::alloc::string::String),
75        /// Id of the endpoint
76        #[prost(string, tag = "2")]
77        EndpointId(::prost::alloc::string::String),
78    }
79}
80#[derive(serde::Deserialize, serde::Serialize)]
81#[allow(clippy::derive_partial_eq_without_eq)]
82#[derive(Clone, PartialEq, ::prost::Message)]
83pub struct GetEndpointResponse {
84    /// Overview of the requested endpoint
85    #[prost(message, optional, tag = "1")]
86    pub endpoint: ::core::option::Option<super::super::models::v2::Endpoint>,
87}
88/// Requests all endpoints
89#[derive(serde::Deserialize, serde::Serialize)]
90#[allow(clippy::derive_partial_eq_without_eq)]
91#[derive(Clone, PartialEq, ::prost::Message)]
92pub struct GetEndpointsRequest {}
93#[derive(serde::Deserialize, serde::Serialize)]
94#[allow(clippy::derive_partial_eq_without_eq)]
95#[derive(Clone, PartialEq, ::prost::Message)]
96pub struct GetEndpointsResponse {
97    /// List of endpoints
98    #[prost(message, repeated, tag = "1")]
99    pub endpoints: ::prost::alloc::vec::Vec<super::super::models::v2::Endpoint>,
100}
101#[derive(serde::Deserialize, serde::Serialize)]
102#[allow(clippy::derive_partial_eq_without_eq)]
103#[derive(Clone, PartialEq, ::prost::Message)]
104pub struct DeleteEndpointRequest {
105    /// Endpoint_id to delete
106    #[prost(string, tag = "1")]
107    pub endpoint_id: ::prost::alloc::string::String,
108}
109#[derive(serde::Deserialize, serde::Serialize)]
110#[allow(clippy::derive_partial_eq_without_eq)]
111#[derive(Clone, PartialEq, ::prost::Message)]
112pub struct DeleteEndpointResponse {}
113#[derive(serde::Deserialize, serde::Serialize)]
114#[allow(clippy::derive_partial_eq_without_eq)]
115#[derive(Clone, PartialEq, ::prost::Message)]
116pub struct GetDefaultEndpointRequest {}
117#[derive(serde::Deserialize, serde::Serialize)]
118#[allow(clippy::derive_partial_eq_without_eq)]
119#[derive(Clone, PartialEq, ::prost::Message)]
120pub struct GetDefaultEndpointResponse {
121    /// Default endpoint of the server instance
122    #[prost(message, optional, tag = "1")]
123    pub endpoint: ::core::option::Option<super::super::models::v2::Endpoint>,
124}
125#[derive(serde::Deserialize, serde::Serialize)]
126#[allow(clippy::derive_partial_eq_without_eq)]
127#[derive(Clone, PartialEq, ::prost::Message)]
128pub struct SetEndpointStatusRequest {
129    #[prost(string, tag = "1")]
130    pub endpoint_id: ::prost::alloc::string::String,
131    #[prost(enumeration = "super::super::models::v2::ComponentStatus", tag = "2")]
132    pub status: i32,
133}
134#[derive(serde::Deserialize, serde::Serialize)]
135#[allow(clippy::derive_partial_eq_without_eq)]
136#[derive(Clone, PartialEq, ::prost::Message)]
137pub struct SetEndpointStatusResponse {
138    #[prost(message, optional, tag = "1")]
139    pub endpoint: ::core::option::Option<super::super::models::v2::Endpoint>,
140}
141/// Generated client implementations.
142pub mod endpoint_service_client {
143    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
144    use tonic::codegen::*;
145    use tonic::codegen::http::Uri;
146    /// EndpointService
147    ///
148    /// Status: BETA
149    ///
150    /// Contains all methods that get/create or update Endpoint (Dataproxies) and associated resources
151    #[derive(Debug, Clone)]
152    pub struct EndpointServiceClient<T> {
153        inner: tonic::client::Grpc<T>,
154    }
155    impl EndpointServiceClient<tonic::transport::Channel> {
156        /// Attempt to create a new client by connecting to a given endpoint.
157        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
158        where
159            D: TryInto<tonic::transport::Endpoint>,
160            D::Error: Into<StdError>,
161        {
162            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
163            Ok(Self::new(conn))
164        }
165    }
166    impl<T> EndpointServiceClient<T>
167    where
168        T: tonic::client::GrpcService<tonic::body::BoxBody>,
169        T::Error: Into<StdError>,
170        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
171        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
172    {
173        pub fn new(inner: T) -> Self {
174            let inner = tonic::client::Grpc::new(inner);
175            Self { inner }
176        }
177        pub fn with_origin(inner: T, origin: Uri) -> Self {
178            let inner = tonic::client::Grpc::with_origin(inner, origin);
179            Self { inner }
180        }
181        pub fn with_interceptor<F>(
182            inner: T,
183            interceptor: F,
184        ) -> EndpointServiceClient<InterceptedService<T, F>>
185        where
186            F: tonic::service::Interceptor,
187            T::ResponseBody: Default,
188            T: tonic::codegen::Service<
189                http::Request<tonic::body::BoxBody>,
190                Response = http::Response<
191                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
192                >,
193            >,
194            <T as tonic::codegen::Service<
195                http::Request<tonic::body::BoxBody>,
196            >>::Error: Into<StdError> + Send + Sync,
197        {
198            EndpointServiceClient::new(InterceptedService::new(inner, interceptor))
199        }
200        /// Compress requests with the given encoding.
201        ///
202        /// This requires the server to support it otherwise it might respond with an
203        /// error.
204        #[must_use]
205        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
206            self.inner = self.inner.send_compressed(encoding);
207            self
208        }
209        /// Enable decompressing responses.
210        #[must_use]
211        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
212            self.inner = self.inner.accept_compressed(encoding);
213            self
214        }
215        /// Limits the maximum size of a decoded message.
216        ///
217        /// Default: `4MB`
218        #[must_use]
219        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
220            self.inner = self.inner.max_decoding_message_size(limit);
221            self
222        }
223        /// Limits the maximum size of an encoded message.
224        ///
225        /// Default: `usize::MAX`
226        #[must_use]
227        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
228            self.inner = self.inner.max_encoding_message_size(limit);
229            self
230        }
231        /// CreateEndpoint
232        ///
233        /// Status: BETA
234        ///
235        /// Registers a new Endpoint (Aruna DataProxy) to the server
236        /// requires admin permissions
237        pub async fn create_endpoint(
238            &mut self,
239            request: impl tonic::IntoRequest<super::CreateEndpointRequest>,
240        ) -> std::result::Result<
241            tonic::Response<super::CreateEndpointResponse>,
242            tonic::Status,
243        > {
244            self.inner
245                .ready()
246                .await
247                .map_err(|e| {
248                    tonic::Status::new(
249                        tonic::Code::Unknown,
250                        format!("Service was not ready: {}", e.into()),
251                    )
252                })?;
253            let codec = tonic::codec::ProstCodec::default();
254            let path = http::uri::PathAndQuery::from_static(
255                "/aruna.api.storage.services.v2.EndpointService/CreateEndpoint",
256            );
257            let mut req = request.into_request();
258            req.extensions_mut()
259                .insert(
260                    GrpcMethod::new(
261                        "aruna.api.storage.services.v2.EndpointService",
262                        "CreateEndpoint",
263                    ),
264                );
265            self.inner.unary(req, path, codec).await
266        }
267        /// FullSyncEndpoint
268        ///
269        /// Status: BETA
270        ///
271        /// Requests a full sync of all endpoint related data
272        pub async fn full_sync_endpoint(
273            &mut self,
274            request: impl tonic::IntoRequest<super::FullSyncEndpointRequest>,
275        ) -> std::result::Result<
276            tonic::Response<tonic::codec::Streaming<super::FullSyncEndpointResponse>>,
277            tonic::Status,
278        > {
279            self.inner
280                .ready()
281                .await
282                .map_err(|e| {
283                    tonic::Status::new(
284                        tonic::Code::Unknown,
285                        format!("Service was not ready: {}", e.into()),
286                    )
287                })?;
288            let codec = tonic::codec::ProstCodec::default();
289            let path = http::uri::PathAndQuery::from_static(
290                "/aruna.api.storage.services.v2.EndpointService/FullSyncEndpoint",
291            );
292            let mut req = request.into_request();
293            req.extensions_mut()
294                .insert(
295                    GrpcMethod::new(
296                        "aruna.api.storage.services.v2.EndpointService",
297                        "FullSyncEndpoint",
298                    ),
299                );
300            self.inner.server_streaming(req, path, codec).await
301        }
302        /// SetEndpointStatus
303        ///
304        /// Status: BETA
305        ///
306        /// This request sets the status of a specific Endpoint
307        pub async fn set_endpoint_status(
308            &mut self,
309            request: impl tonic::IntoRequest<super::SetEndpointStatusRequest>,
310        ) -> std::result::Result<
311            tonic::Response<super::SetEndpointStatusResponse>,
312            tonic::Status,
313        > {
314            self.inner
315                .ready()
316                .await
317                .map_err(|e| {
318                    tonic::Status::new(
319                        tonic::Code::Unknown,
320                        format!("Service was not ready: {}", e.into()),
321                    )
322                })?;
323            let codec = tonic::codec::ProstCodec::default();
324            let path = http::uri::PathAndQuery::from_static(
325                "/aruna.api.storage.services.v2.EndpointService/SetEndpointStatus",
326            );
327            let mut req = request.into_request();
328            req.extensions_mut()
329                .insert(
330                    GrpcMethod::new(
331                        "aruna.api.storage.services.v2.EndpointService",
332                        "SetEndpointStatus",
333                    ),
334                );
335            self.inner.unary(req, path, codec).await
336        }
337        /// GetEndpoint
338        ///
339        /// Status: BETA
340        ///
341        /// Gets an specific endpoint by ID or Name
342        pub async fn get_endpoint(
343            &mut self,
344            request: impl tonic::IntoRequest<super::GetEndpointRequest>,
345        ) -> std::result::Result<
346            tonic::Response<super::GetEndpointResponse>,
347            tonic::Status,
348        > {
349            self.inner
350                .ready()
351                .await
352                .map_err(|e| {
353                    tonic::Status::new(
354                        tonic::Code::Unknown,
355                        format!("Service was not ready: {}", e.into()),
356                    )
357                })?;
358            let codec = tonic::codec::ProstCodec::default();
359            let path = http::uri::PathAndQuery::from_static(
360                "/aruna.api.storage.services.v2.EndpointService/GetEndpoint",
361            );
362            let mut req = request.into_request();
363            req.extensions_mut()
364                .insert(
365                    GrpcMethod::new(
366                        "aruna.api.storage.services.v2.EndpointService",
367                        "GetEndpoint",
368                    ),
369                );
370            self.inner.unary(req, path, codec).await
371        }
372        /// GetEndpoints
373        ///
374        /// Status: BETA
375        ///
376        /// Gets all available endpoints
377        pub async fn get_endpoints(
378            &mut self,
379            request: impl tonic::IntoRequest<super::GetEndpointsRequest>,
380        ) -> std::result::Result<
381            tonic::Response<super::GetEndpointsResponse>,
382            tonic::Status,
383        > {
384            self.inner
385                .ready()
386                .await
387                .map_err(|e| {
388                    tonic::Status::new(
389                        tonic::Code::Unknown,
390                        format!("Service was not ready: {}", e.into()),
391                    )
392                })?;
393            let codec = tonic::codec::ProstCodec::default();
394            let path = http::uri::PathAndQuery::from_static(
395                "/aruna.api.storage.services.v2.EndpointService/GetEndpoints",
396            );
397            let mut req = request.into_request();
398            req.extensions_mut()
399                .insert(
400                    GrpcMethod::new(
401                        "aruna.api.storage.services.v2.EndpointService",
402                        "GetEndpoints",
403                    ),
404                );
405            self.inner.unary(req, path, codec).await
406        }
407        /// DeleteEndpoint
408        ///
409        /// Status: BETA
410        ///
411        /// Deletes a specific endpoint by id
412        /// This needs admin permissions
413        pub async fn delete_endpoint(
414            &mut self,
415            request: impl tonic::IntoRequest<super::DeleteEndpointRequest>,
416        ) -> std::result::Result<
417            tonic::Response<super::DeleteEndpointResponse>,
418            tonic::Status,
419        > {
420            self.inner
421                .ready()
422                .await
423                .map_err(|e| {
424                    tonic::Status::new(
425                        tonic::Code::Unknown,
426                        format!("Service was not ready: {}", e.into()),
427                    )
428                })?;
429            let codec = tonic::codec::ProstCodec::default();
430            let path = http::uri::PathAndQuery::from_static(
431                "/aruna.api.storage.services.v2.EndpointService/DeleteEndpoint",
432            );
433            let mut req = request.into_request();
434            req.extensions_mut()
435                .insert(
436                    GrpcMethod::new(
437                        "aruna.api.storage.services.v2.EndpointService",
438                        "DeleteEndpoint",
439                    ),
440                );
441            self.inner.unary(req, path, codec).await
442        }
443        /// GetDefaultEndpoint
444        ///
445        /// Status: BETA
446        ///
447        /// This request returns the default endpoint for the current aruna_server
448        /// It may produce different results depending on the used server
449        pub async fn get_default_endpoint(
450            &mut self,
451            request: impl tonic::IntoRequest<super::GetDefaultEndpointRequest>,
452        ) -> std::result::Result<
453            tonic::Response<super::GetDefaultEndpointResponse>,
454            tonic::Status,
455        > {
456            self.inner
457                .ready()
458                .await
459                .map_err(|e| {
460                    tonic::Status::new(
461                        tonic::Code::Unknown,
462                        format!("Service was not ready: {}", e.into()),
463                    )
464                })?;
465            let codec = tonic::codec::ProstCodec::default();
466            let path = http::uri::PathAndQuery::from_static(
467                "/aruna.api.storage.services.v2.EndpointService/GetDefaultEndpoint",
468            );
469            let mut req = request.into_request();
470            req.extensions_mut()
471                .insert(
472                    GrpcMethod::new(
473                        "aruna.api.storage.services.v2.EndpointService",
474                        "GetDefaultEndpoint",
475                    ),
476                );
477            self.inner.unary(req, path, codec).await
478        }
479    }
480}
481/// Generated server implementations.
482pub mod endpoint_service_server {
483    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
484    use tonic::codegen::*;
485    /// Generated trait containing gRPC methods that should be implemented for use with EndpointServiceServer.
486    #[async_trait]
487    pub trait EndpointService: Send + Sync + 'static {
488        /// CreateEndpoint
489        ///
490        /// Status: BETA
491        ///
492        /// Registers a new Endpoint (Aruna DataProxy) to the server
493        /// requires admin permissions
494        async fn create_endpoint(
495            &self,
496            request: tonic::Request<super::CreateEndpointRequest>,
497        ) -> std::result::Result<
498            tonic::Response<super::CreateEndpointResponse>,
499            tonic::Status,
500        >;
501        /// Server streaming response type for the FullSyncEndpoint method.
502        type FullSyncEndpointStream: tonic::codegen::tokio_stream::Stream<
503                Item = std::result::Result<
504                    super::FullSyncEndpointResponse,
505                    tonic::Status,
506                >,
507            >
508            + Send
509            + 'static;
510        /// FullSyncEndpoint
511        ///
512        /// Status: BETA
513        ///
514        /// Requests a full sync of all endpoint related data
515        async fn full_sync_endpoint(
516            &self,
517            request: tonic::Request<super::FullSyncEndpointRequest>,
518        ) -> std::result::Result<
519            tonic::Response<Self::FullSyncEndpointStream>,
520            tonic::Status,
521        >;
522        /// SetEndpointStatus
523        ///
524        /// Status: BETA
525        ///
526        /// This request sets the status of a specific Endpoint
527        async fn set_endpoint_status(
528            &self,
529            request: tonic::Request<super::SetEndpointStatusRequest>,
530        ) -> std::result::Result<
531            tonic::Response<super::SetEndpointStatusResponse>,
532            tonic::Status,
533        >;
534        /// GetEndpoint
535        ///
536        /// Status: BETA
537        ///
538        /// Gets an specific endpoint by ID or Name
539        async fn get_endpoint(
540            &self,
541            request: tonic::Request<super::GetEndpointRequest>,
542        ) -> std::result::Result<
543            tonic::Response<super::GetEndpointResponse>,
544            tonic::Status,
545        >;
546        /// GetEndpoints
547        ///
548        /// Status: BETA
549        ///
550        /// Gets all available endpoints
551        async fn get_endpoints(
552            &self,
553            request: tonic::Request<super::GetEndpointsRequest>,
554        ) -> std::result::Result<
555            tonic::Response<super::GetEndpointsResponse>,
556            tonic::Status,
557        >;
558        /// DeleteEndpoint
559        ///
560        /// Status: BETA
561        ///
562        /// Deletes a specific endpoint by id
563        /// This needs admin permissions
564        async fn delete_endpoint(
565            &self,
566            request: tonic::Request<super::DeleteEndpointRequest>,
567        ) -> std::result::Result<
568            tonic::Response<super::DeleteEndpointResponse>,
569            tonic::Status,
570        >;
571        /// GetDefaultEndpoint
572        ///
573        /// Status: BETA
574        ///
575        /// This request returns the default endpoint for the current aruna_server
576        /// It may produce different results depending on the used server
577        async fn get_default_endpoint(
578            &self,
579            request: tonic::Request<super::GetDefaultEndpointRequest>,
580        ) -> std::result::Result<
581            tonic::Response<super::GetDefaultEndpointResponse>,
582            tonic::Status,
583        >;
584    }
585    /// EndpointService
586    ///
587    /// Status: BETA
588    ///
589    /// Contains all methods that get/create or update Endpoint (Dataproxies) and associated resources
590    #[derive(Debug)]
591    pub struct EndpointServiceServer<T: EndpointService> {
592        inner: _Inner<T>,
593        accept_compression_encodings: EnabledCompressionEncodings,
594        send_compression_encodings: EnabledCompressionEncodings,
595        max_decoding_message_size: Option<usize>,
596        max_encoding_message_size: Option<usize>,
597    }
598    struct _Inner<T>(Arc<T>);
599    impl<T: EndpointService> EndpointServiceServer<T> {
600        pub fn new(inner: T) -> Self {
601            Self::from_arc(Arc::new(inner))
602        }
603        pub fn from_arc(inner: Arc<T>) -> Self {
604            let inner = _Inner(inner);
605            Self {
606                inner,
607                accept_compression_encodings: Default::default(),
608                send_compression_encodings: Default::default(),
609                max_decoding_message_size: None,
610                max_encoding_message_size: None,
611            }
612        }
613        pub fn with_interceptor<F>(
614            inner: T,
615            interceptor: F,
616        ) -> InterceptedService<Self, F>
617        where
618            F: tonic::service::Interceptor,
619        {
620            InterceptedService::new(Self::new(inner), interceptor)
621        }
622        /// Enable decompressing requests with the given encoding.
623        #[must_use]
624        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
625            self.accept_compression_encodings.enable(encoding);
626            self
627        }
628        /// Compress responses with the given encoding, if the client supports it.
629        #[must_use]
630        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
631            self.send_compression_encodings.enable(encoding);
632            self
633        }
634        /// Limits the maximum size of a decoded message.
635        ///
636        /// Default: `4MB`
637        #[must_use]
638        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
639            self.max_decoding_message_size = Some(limit);
640            self
641        }
642        /// Limits the maximum size of an encoded message.
643        ///
644        /// Default: `usize::MAX`
645        #[must_use]
646        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
647            self.max_encoding_message_size = Some(limit);
648            self
649        }
650    }
651    impl<T, B> tonic::codegen::Service<http::Request<B>> for EndpointServiceServer<T>
652    where
653        T: EndpointService,
654        B: Body + Send + 'static,
655        B::Error: Into<StdError> + Send + 'static,
656    {
657        type Response = http::Response<tonic::body::BoxBody>;
658        type Error = std::convert::Infallible;
659        type Future = BoxFuture<Self::Response, Self::Error>;
660        fn poll_ready(
661            &mut self,
662            _cx: &mut Context<'_>,
663        ) -> Poll<std::result::Result<(), Self::Error>> {
664            Poll::Ready(Ok(()))
665        }
666        fn call(&mut self, req: http::Request<B>) -> Self::Future {
667            let inner = self.inner.clone();
668            match req.uri().path() {
669                "/aruna.api.storage.services.v2.EndpointService/CreateEndpoint" => {
670                    #[allow(non_camel_case_types)]
671                    struct CreateEndpointSvc<T: EndpointService>(pub Arc<T>);
672                    impl<
673                        T: EndpointService,
674                    > tonic::server::UnaryService<super::CreateEndpointRequest>
675                    for CreateEndpointSvc<T> {
676                        type Response = super::CreateEndpointResponse;
677                        type Future = BoxFuture<
678                            tonic::Response<Self::Response>,
679                            tonic::Status,
680                        >;
681                        fn call(
682                            &mut self,
683                            request: tonic::Request<super::CreateEndpointRequest>,
684                        ) -> Self::Future {
685                            let inner = Arc::clone(&self.0);
686                            let fut = async move {
687                                <T as EndpointService>::create_endpoint(&inner, request)
688                                    .await
689                            };
690                            Box::pin(fut)
691                        }
692                    }
693                    let accept_compression_encodings = self.accept_compression_encodings;
694                    let send_compression_encodings = self.send_compression_encodings;
695                    let max_decoding_message_size = self.max_decoding_message_size;
696                    let max_encoding_message_size = self.max_encoding_message_size;
697                    let inner = self.inner.clone();
698                    let fut = async move {
699                        let inner = inner.0;
700                        let method = CreateEndpointSvc(inner);
701                        let codec = tonic::codec::ProstCodec::default();
702                        let mut grpc = tonic::server::Grpc::new(codec)
703                            .apply_compression_config(
704                                accept_compression_encodings,
705                                send_compression_encodings,
706                            )
707                            .apply_max_message_size_config(
708                                max_decoding_message_size,
709                                max_encoding_message_size,
710                            );
711                        let res = grpc.unary(method, req).await;
712                        Ok(res)
713                    };
714                    Box::pin(fut)
715                }
716                "/aruna.api.storage.services.v2.EndpointService/FullSyncEndpoint" => {
717                    #[allow(non_camel_case_types)]
718                    struct FullSyncEndpointSvc<T: EndpointService>(pub Arc<T>);
719                    impl<
720                        T: EndpointService,
721                    > tonic::server::ServerStreamingService<
722                        super::FullSyncEndpointRequest,
723                    > for FullSyncEndpointSvc<T> {
724                        type Response = super::FullSyncEndpointResponse;
725                        type ResponseStream = T::FullSyncEndpointStream;
726                        type Future = BoxFuture<
727                            tonic::Response<Self::ResponseStream>,
728                            tonic::Status,
729                        >;
730                        fn call(
731                            &mut self,
732                            request: tonic::Request<super::FullSyncEndpointRequest>,
733                        ) -> Self::Future {
734                            let inner = Arc::clone(&self.0);
735                            let fut = async move {
736                                <T as EndpointService>::full_sync_endpoint(&inner, request)
737                                    .await
738                            };
739                            Box::pin(fut)
740                        }
741                    }
742                    let accept_compression_encodings = self.accept_compression_encodings;
743                    let send_compression_encodings = self.send_compression_encodings;
744                    let max_decoding_message_size = self.max_decoding_message_size;
745                    let max_encoding_message_size = self.max_encoding_message_size;
746                    let inner = self.inner.clone();
747                    let fut = async move {
748                        let inner = inner.0;
749                        let method = FullSyncEndpointSvc(inner);
750                        let codec = tonic::codec::ProstCodec::default();
751                        let mut grpc = tonic::server::Grpc::new(codec)
752                            .apply_compression_config(
753                                accept_compression_encodings,
754                                send_compression_encodings,
755                            )
756                            .apply_max_message_size_config(
757                                max_decoding_message_size,
758                                max_encoding_message_size,
759                            );
760                        let res = grpc.server_streaming(method, req).await;
761                        Ok(res)
762                    };
763                    Box::pin(fut)
764                }
765                "/aruna.api.storage.services.v2.EndpointService/SetEndpointStatus" => {
766                    #[allow(non_camel_case_types)]
767                    struct SetEndpointStatusSvc<T: EndpointService>(pub Arc<T>);
768                    impl<
769                        T: EndpointService,
770                    > tonic::server::UnaryService<super::SetEndpointStatusRequest>
771                    for SetEndpointStatusSvc<T> {
772                        type Response = super::SetEndpointStatusResponse;
773                        type Future = BoxFuture<
774                            tonic::Response<Self::Response>,
775                            tonic::Status,
776                        >;
777                        fn call(
778                            &mut self,
779                            request: tonic::Request<super::SetEndpointStatusRequest>,
780                        ) -> Self::Future {
781                            let inner = Arc::clone(&self.0);
782                            let fut = async move {
783                                <T as EndpointService>::set_endpoint_status(&inner, request)
784                                    .await
785                            };
786                            Box::pin(fut)
787                        }
788                    }
789                    let accept_compression_encodings = self.accept_compression_encodings;
790                    let send_compression_encodings = self.send_compression_encodings;
791                    let max_decoding_message_size = self.max_decoding_message_size;
792                    let max_encoding_message_size = self.max_encoding_message_size;
793                    let inner = self.inner.clone();
794                    let fut = async move {
795                        let inner = inner.0;
796                        let method = SetEndpointStatusSvc(inner);
797                        let codec = tonic::codec::ProstCodec::default();
798                        let mut grpc = tonic::server::Grpc::new(codec)
799                            .apply_compression_config(
800                                accept_compression_encodings,
801                                send_compression_encodings,
802                            )
803                            .apply_max_message_size_config(
804                                max_decoding_message_size,
805                                max_encoding_message_size,
806                            );
807                        let res = grpc.unary(method, req).await;
808                        Ok(res)
809                    };
810                    Box::pin(fut)
811                }
812                "/aruna.api.storage.services.v2.EndpointService/GetEndpoint" => {
813                    #[allow(non_camel_case_types)]
814                    struct GetEndpointSvc<T: EndpointService>(pub Arc<T>);
815                    impl<
816                        T: EndpointService,
817                    > tonic::server::UnaryService<super::GetEndpointRequest>
818                    for GetEndpointSvc<T> {
819                        type Response = super::GetEndpointResponse;
820                        type Future = BoxFuture<
821                            tonic::Response<Self::Response>,
822                            tonic::Status,
823                        >;
824                        fn call(
825                            &mut self,
826                            request: tonic::Request<super::GetEndpointRequest>,
827                        ) -> Self::Future {
828                            let inner = Arc::clone(&self.0);
829                            let fut = async move {
830                                <T as EndpointService>::get_endpoint(&inner, request).await
831                            };
832                            Box::pin(fut)
833                        }
834                    }
835                    let accept_compression_encodings = self.accept_compression_encodings;
836                    let send_compression_encodings = self.send_compression_encodings;
837                    let max_decoding_message_size = self.max_decoding_message_size;
838                    let max_encoding_message_size = self.max_encoding_message_size;
839                    let inner = self.inner.clone();
840                    let fut = async move {
841                        let inner = inner.0;
842                        let method = GetEndpointSvc(inner);
843                        let codec = tonic::codec::ProstCodec::default();
844                        let mut grpc = tonic::server::Grpc::new(codec)
845                            .apply_compression_config(
846                                accept_compression_encodings,
847                                send_compression_encodings,
848                            )
849                            .apply_max_message_size_config(
850                                max_decoding_message_size,
851                                max_encoding_message_size,
852                            );
853                        let res = grpc.unary(method, req).await;
854                        Ok(res)
855                    };
856                    Box::pin(fut)
857                }
858                "/aruna.api.storage.services.v2.EndpointService/GetEndpoints" => {
859                    #[allow(non_camel_case_types)]
860                    struct GetEndpointsSvc<T: EndpointService>(pub Arc<T>);
861                    impl<
862                        T: EndpointService,
863                    > tonic::server::UnaryService<super::GetEndpointsRequest>
864                    for GetEndpointsSvc<T> {
865                        type Response = super::GetEndpointsResponse;
866                        type Future = BoxFuture<
867                            tonic::Response<Self::Response>,
868                            tonic::Status,
869                        >;
870                        fn call(
871                            &mut self,
872                            request: tonic::Request<super::GetEndpointsRequest>,
873                        ) -> Self::Future {
874                            let inner = Arc::clone(&self.0);
875                            let fut = async move {
876                                <T as EndpointService>::get_endpoints(&inner, request).await
877                            };
878                            Box::pin(fut)
879                        }
880                    }
881                    let accept_compression_encodings = self.accept_compression_encodings;
882                    let send_compression_encodings = self.send_compression_encodings;
883                    let max_decoding_message_size = self.max_decoding_message_size;
884                    let max_encoding_message_size = self.max_encoding_message_size;
885                    let inner = self.inner.clone();
886                    let fut = async move {
887                        let inner = inner.0;
888                        let method = GetEndpointsSvc(inner);
889                        let codec = tonic::codec::ProstCodec::default();
890                        let mut grpc = tonic::server::Grpc::new(codec)
891                            .apply_compression_config(
892                                accept_compression_encodings,
893                                send_compression_encodings,
894                            )
895                            .apply_max_message_size_config(
896                                max_decoding_message_size,
897                                max_encoding_message_size,
898                            );
899                        let res = grpc.unary(method, req).await;
900                        Ok(res)
901                    };
902                    Box::pin(fut)
903                }
904                "/aruna.api.storage.services.v2.EndpointService/DeleteEndpoint" => {
905                    #[allow(non_camel_case_types)]
906                    struct DeleteEndpointSvc<T: EndpointService>(pub Arc<T>);
907                    impl<
908                        T: EndpointService,
909                    > tonic::server::UnaryService<super::DeleteEndpointRequest>
910                    for DeleteEndpointSvc<T> {
911                        type Response = super::DeleteEndpointResponse;
912                        type Future = BoxFuture<
913                            tonic::Response<Self::Response>,
914                            tonic::Status,
915                        >;
916                        fn call(
917                            &mut self,
918                            request: tonic::Request<super::DeleteEndpointRequest>,
919                        ) -> Self::Future {
920                            let inner = Arc::clone(&self.0);
921                            let fut = async move {
922                                <T as EndpointService>::delete_endpoint(&inner, request)
923                                    .await
924                            };
925                            Box::pin(fut)
926                        }
927                    }
928                    let accept_compression_encodings = self.accept_compression_encodings;
929                    let send_compression_encodings = self.send_compression_encodings;
930                    let max_decoding_message_size = self.max_decoding_message_size;
931                    let max_encoding_message_size = self.max_encoding_message_size;
932                    let inner = self.inner.clone();
933                    let fut = async move {
934                        let inner = inner.0;
935                        let method = DeleteEndpointSvc(inner);
936                        let codec = tonic::codec::ProstCodec::default();
937                        let mut grpc = tonic::server::Grpc::new(codec)
938                            .apply_compression_config(
939                                accept_compression_encodings,
940                                send_compression_encodings,
941                            )
942                            .apply_max_message_size_config(
943                                max_decoding_message_size,
944                                max_encoding_message_size,
945                            );
946                        let res = grpc.unary(method, req).await;
947                        Ok(res)
948                    };
949                    Box::pin(fut)
950                }
951                "/aruna.api.storage.services.v2.EndpointService/GetDefaultEndpoint" => {
952                    #[allow(non_camel_case_types)]
953                    struct GetDefaultEndpointSvc<T: EndpointService>(pub Arc<T>);
954                    impl<
955                        T: EndpointService,
956                    > tonic::server::UnaryService<super::GetDefaultEndpointRequest>
957                    for GetDefaultEndpointSvc<T> {
958                        type Response = super::GetDefaultEndpointResponse;
959                        type Future = BoxFuture<
960                            tonic::Response<Self::Response>,
961                            tonic::Status,
962                        >;
963                        fn call(
964                            &mut self,
965                            request: tonic::Request<super::GetDefaultEndpointRequest>,
966                        ) -> Self::Future {
967                            let inner = Arc::clone(&self.0);
968                            let fut = async move {
969                                <T as EndpointService>::get_default_endpoint(
970                                        &inner,
971                                        request,
972                                    )
973                                    .await
974                            };
975                            Box::pin(fut)
976                        }
977                    }
978                    let accept_compression_encodings = self.accept_compression_encodings;
979                    let send_compression_encodings = self.send_compression_encodings;
980                    let max_decoding_message_size = self.max_decoding_message_size;
981                    let max_encoding_message_size = self.max_encoding_message_size;
982                    let inner = self.inner.clone();
983                    let fut = async move {
984                        let inner = inner.0;
985                        let method = GetDefaultEndpointSvc(inner);
986                        let codec = tonic::codec::ProstCodec::default();
987                        let mut grpc = tonic::server::Grpc::new(codec)
988                            .apply_compression_config(
989                                accept_compression_encodings,
990                                send_compression_encodings,
991                            )
992                            .apply_max_message_size_config(
993                                max_decoding_message_size,
994                                max_encoding_message_size,
995                            );
996                        let res = grpc.unary(method, req).await;
997                        Ok(res)
998                    };
999                    Box::pin(fut)
1000                }
1001                _ => {
1002                    Box::pin(async move {
1003                        Ok(
1004                            http::Response::builder()
1005                                .status(200)
1006                                .header("grpc-status", "12")
1007                                .header("content-type", "application/grpc")
1008                                .body(empty_body())
1009                                .unwrap(),
1010                        )
1011                    })
1012                }
1013            }
1014        }
1015    }
1016    impl<T: EndpointService> Clone for EndpointServiceServer<T> {
1017        fn clone(&self) -> Self {
1018            let inner = self.inner.clone();
1019            Self {
1020                inner,
1021                accept_compression_encodings: self.accept_compression_encodings,
1022                send_compression_encodings: self.send_compression_encodings,
1023                max_decoding_message_size: self.max_decoding_message_size,
1024                max_encoding_message_size: self.max_encoding_message_size,
1025            }
1026        }
1027    }
1028    impl<T: EndpointService> Clone for _Inner<T> {
1029        fn clone(&self) -> Self {
1030            Self(Arc::clone(&self.0))
1031        }
1032    }
1033    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
1034        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1035            write!(f, "{:?}", self.0)
1036        }
1037    }
1038    impl<T: EndpointService> tonic::server::NamedService for EndpointServiceServer<T> {
1039        const NAME: &'static str = "aruna.api.storage.services.v2.EndpointService";
1040    }
1041}
1042#[derive(serde::Deserialize, serde::Serialize)]
1043#[allow(clippy::derive_partial_eq_without_eq)]
1044#[derive(Clone, PartialEq, ::prost::Message)]
1045pub struct CreateServiceAccountRequest {
1046    #[prost(string, tag = "1")]
1047    pub name: ::prost::alloc::string::String,
1048    #[prost(string, tag = "2")]
1049    pub project_id: ::prost::alloc::string::String,
1050    #[prost(enumeration = "super::super::models::v2::PermissionLevel", tag = "3")]
1051    pub permission_level: i32,
1052}
1053#[derive(serde::Deserialize, serde::Serialize)]
1054#[allow(clippy::derive_partial_eq_without_eq)]
1055#[derive(Clone, PartialEq, ::prost::Message)]
1056pub struct ServiceAccount {
1057    #[prost(string, tag = "1")]
1058    pub svc_account_id: ::prost::alloc::string::String,
1059    #[prost(string, tag = "2")]
1060    pub name: ::prost::alloc::string::String,
1061    #[prost(message, optional, tag = "3")]
1062    pub permission: ::core::option::Option<super::super::models::v2::Permission>,
1063}
1064#[derive(serde::Deserialize, serde::Serialize)]
1065#[allow(clippy::derive_partial_eq_without_eq)]
1066#[derive(Clone, PartialEq, ::prost::Message)]
1067pub struct CreateServiceAccountResponse {
1068    #[prost(message, optional, tag = "1")]
1069    pub service_account: ::core::option::Option<ServiceAccount>,
1070}
1071#[derive(serde::Deserialize, serde::Serialize)]
1072#[allow(clippy::derive_partial_eq_without_eq)]
1073#[derive(Clone, PartialEq, ::prost::Message)]
1074pub struct CreateServiceAccountTokenRequest {
1075    #[prost(string, tag = "1")]
1076    pub svc_account_id: ::prost::alloc::string::String,
1077    /// Token permissions
1078    #[prost(message, optional, tag = "2")]
1079    pub permission: ::core::option::Option<super::super::models::v2::Permission>,
1080    /// (optional) Token name
1081    #[prost(string, tag = "3")]
1082    pub name: ::prost::alloc::string::String,
1083    /// (optional) Token expiry
1084    #[prost(message, optional, tag = "4")]
1085    pub expires_at: ::core::option::Option<::prost_wkt_types::Timestamp>,
1086}
1087#[derive(serde::Deserialize, serde::Serialize)]
1088#[allow(clippy::derive_partial_eq_without_eq)]
1089#[derive(Clone, PartialEq, ::prost::Message)]
1090pub struct CreateServiceAccountTokenResponse {
1091    /// This contains only the token description
1092    #[prost(message, optional, tag = "1")]
1093    pub token: ::core::option::Option<super::super::models::v2::Token>,
1094    /// This is the actual secret API token
1095    #[prost(string, tag = "2")]
1096    pub token_secret: ::prost::alloc::string::String,
1097}
1098#[derive(serde::Deserialize, serde::Serialize)]
1099#[allow(clippy::derive_partial_eq_without_eq)]
1100#[derive(Clone, PartialEq, ::prost::Message)]
1101pub struct GetServiceAccountTokenRequest {
1102    #[prost(string, tag = "1")]
1103    pub svc_account_id: ::prost::alloc::string::String,
1104    #[prost(string, tag = "2")]
1105    pub token_id: ::prost::alloc::string::String,
1106}
1107#[derive(serde::Deserialize, serde::Serialize)]
1108#[allow(clippy::derive_partial_eq_without_eq)]
1109#[derive(Clone, PartialEq, ::prost::Message)]
1110pub struct GetServiceAccountTokenResponse {
1111    /// This contains only the token description
1112    #[prost(message, optional, tag = "1")]
1113    pub token: ::core::option::Option<super::super::models::v2::Token>,
1114}
1115#[derive(serde::Deserialize, serde::Serialize)]
1116#[allow(clippy::derive_partial_eq_without_eq)]
1117#[derive(Clone, PartialEq, ::prost::Message)]
1118pub struct GetServiceAccountTokensRequest {
1119    #[prost(string, tag = "1")]
1120    pub svc_account_id: ::prost::alloc::string::String,
1121}
1122#[derive(serde::Deserialize, serde::Serialize)]
1123#[allow(clippy::derive_partial_eq_without_eq)]
1124#[derive(Clone, PartialEq, ::prost::Message)]
1125pub struct GetServiceAccountTokensResponse {
1126    /// This contains only the token description
1127    #[prost(message, repeated, tag = "1")]
1128    pub tokens: ::prost::alloc::vec::Vec<super::super::models::v2::Token>,
1129}
1130#[derive(serde::Deserialize, serde::Serialize)]
1131#[allow(clippy::derive_partial_eq_without_eq)]
1132#[derive(Clone, PartialEq, ::prost::Message)]
1133pub struct DeleteServiceAccountTokenRequest {
1134    #[prost(string, tag = "1")]
1135    pub svc_account_id: ::prost::alloc::string::String,
1136    #[prost(string, tag = "2")]
1137    pub token_id: ::prost::alloc::string::String,
1138}
1139#[derive(serde::Deserialize, serde::Serialize)]
1140#[allow(clippy::derive_partial_eq_without_eq)]
1141#[derive(Clone, PartialEq, ::prost::Message)]
1142pub struct DeleteServiceAccountTokenResponse {}
1143#[derive(serde::Deserialize, serde::Serialize)]
1144#[allow(clippy::derive_partial_eq_without_eq)]
1145#[derive(Clone, PartialEq, ::prost::Message)]
1146pub struct DeleteServiceAccountTokensRequest {
1147    #[prost(string, tag = "1")]
1148    pub svc_account_id: ::prost::alloc::string::String,
1149}
1150#[derive(serde::Deserialize, serde::Serialize)]
1151#[allow(clippy::derive_partial_eq_without_eq)]
1152#[derive(Clone, PartialEq, ::prost::Message)]
1153pub struct DeleteServiceAccountTokensResponse {}
1154#[derive(serde::Deserialize, serde::Serialize)]
1155#[allow(clippy::derive_partial_eq_without_eq)]
1156#[derive(Clone, PartialEq, ::prost::Message)]
1157pub struct DeleteServiceAccountRequest {
1158    #[prost(string, tag = "1")]
1159    pub svc_account_id: ::prost::alloc::string::String,
1160}
1161#[derive(serde::Deserialize, serde::Serialize)]
1162#[allow(clippy::derive_partial_eq_without_eq)]
1163#[derive(Clone, PartialEq, ::prost::Message)]
1164pub struct DeleteServiceAccountResponse {}
1165#[derive(serde::Deserialize, serde::Serialize)]
1166#[allow(clippy::derive_partial_eq_without_eq)]
1167#[derive(Clone, PartialEq, ::prost::Message)]
1168pub struct CreateS3CredentialsSvcAccountRequest {
1169    #[prost(string, tag = "1")]
1170    pub svc_account_id: ::prost::alloc::string::String,
1171    #[prost(string, tag = "2")]
1172    pub endpoint_id: ::prost::alloc::string::String,
1173}
1174#[derive(serde::Deserialize, serde::Serialize)]
1175#[allow(clippy::derive_partial_eq_without_eq)]
1176#[derive(Clone, PartialEq, ::prost::Message)]
1177pub struct CreateS3CredentialsSvcAccountResponse {
1178    #[prost(string, tag = "1")]
1179    pub s3_access_key: ::prost::alloc::string::String,
1180    #[prost(string, tag = "2")]
1181    pub s3_secret_key: ::prost::alloc::string::String,
1182    #[prost(string, tag = "3")]
1183    pub s3_endpoint_url: ::prost::alloc::string::String,
1184}
1185#[derive(serde::Deserialize, serde::Serialize)]
1186#[allow(clippy::derive_partial_eq_without_eq)]
1187#[derive(Clone, PartialEq, ::prost::Message)]
1188pub struct GetS3CredentialsSvcAccountRequest {
1189    /// If called as admin, an id must be provided
1190    #[prost(string, tag = "1")]
1191    pub svc_account_id: ::prost::alloc::string::String,
1192    #[prost(string, tag = "2")]
1193    pub endpoint_id: ::prost::alloc::string::String,
1194}
1195#[derive(serde::Deserialize, serde::Serialize)]
1196#[allow(clippy::derive_partial_eq_without_eq)]
1197#[derive(Clone, PartialEq, ::prost::Message)]
1198pub struct GetS3CredentialsSvcAccountResponse {
1199    #[prost(string, tag = "1")]
1200    pub s3_access_key: ::prost::alloc::string::String,
1201    #[prost(string, tag = "2")]
1202    pub s3_secret_key: ::prost::alloc::string::String,
1203    #[prost(string, tag = "3")]
1204    pub s3_endpoint_url: ::prost::alloc::string::String,
1205}
1206#[derive(serde::Deserialize, serde::Serialize)]
1207#[allow(clippy::derive_partial_eq_without_eq)]
1208#[derive(Clone, PartialEq, ::prost::Message)]
1209pub struct DeleteS3CredentialsSvcAccountRequest {
1210    #[prost(string, tag = "1")]
1211    pub svc_account_id: ::prost::alloc::string::String,
1212    #[prost(string, tag = "2")]
1213    pub endpoint_id: ::prost::alloc::string::String,
1214}
1215#[derive(serde::Deserialize, serde::Serialize)]
1216#[allow(clippy::derive_partial_eq_without_eq)]
1217#[derive(Clone, PartialEq, ::prost::Message)]
1218pub struct DeleteS3CredentialsSvcAccountResponse {}
1219#[derive(serde::Deserialize, serde::Serialize)]
1220#[allow(clippy::derive_partial_eq_without_eq)]
1221#[derive(Clone, PartialEq, ::prost::Message)]
1222pub struct CreateDataproxyTokenSvcAccountRequest {
1223    /// Needs to be provided by project admins
1224    #[prost(string, tag = "1")]
1225    pub svc_account_id: ::prost::alloc::string::String,
1226    /// optional context to limit the scope
1227    #[prost(message, optional, tag = "3")]
1228    pub context: ::core::option::Option<super::super::models::v2::Context>,
1229    #[prost(string, tag = "2")]
1230    pub endpoint_id: ::prost::alloc::string::String,
1231}
1232#[derive(serde::Deserialize, serde::Serialize)]
1233#[allow(clippy::derive_partial_eq_without_eq)]
1234#[derive(Clone, PartialEq, ::prost::Message)]
1235pub struct CreateDataproxyTokenSvcAccountResponse {
1236    #[prost(string, tag = "1")]
1237    pub token: ::prost::alloc::string::String,
1238}
1239#[derive(serde::Deserialize, serde::Serialize)]
1240#[allow(clippy::derive_partial_eq_without_eq)]
1241#[derive(Clone, PartialEq, ::prost::Message)]
1242pub struct AddPubkeySvcAccountRequest {
1243    #[prost(string, tag = "1")]
1244    pub svc_account_id: ::prost::alloc::string::String,
1245    #[prost(string, tag = "2")]
1246    pub public_key: ::prost::alloc::string::String,
1247}
1248#[derive(serde::Deserialize, serde::Serialize)]
1249#[allow(clippy::derive_partial_eq_without_eq)]
1250#[derive(Clone, PartialEq, ::prost::Message)]
1251pub struct AddPubkeySvcAccountResponse {}
1252#[derive(serde::Deserialize, serde::Serialize)]
1253#[allow(clippy::derive_partial_eq_without_eq)]
1254#[derive(Clone, PartialEq, ::prost::Message)]
1255pub struct AddTrustedEndpointsSvcAccountRequest {
1256    #[prost(string, tag = "1")]
1257    pub svc_account_id: ::prost::alloc::string::String,
1258    #[prost(string, tag = "2")]
1259    pub endpoint_id: ::prost::alloc::string::String,
1260}
1261#[derive(serde::Deserialize, serde::Serialize)]
1262#[allow(clippy::derive_partial_eq_without_eq)]
1263#[derive(Clone, PartialEq, ::prost::Message)]
1264pub struct AddTrustedEndpointsSvcAccountResponse {}
1265#[derive(serde::Deserialize, serde::Serialize)]
1266#[allow(clippy::derive_partial_eq_without_eq)]
1267#[derive(Clone, PartialEq, ::prost::Message)]
1268pub struct RemoveTrustedEndpointsSvcAccountRequest {
1269    #[prost(string, tag = "1")]
1270    pub svc_account_id: ::prost::alloc::string::String,
1271    #[prost(string, tag = "2")]
1272    pub endpoint_id: ::prost::alloc::string::String,
1273}
1274#[derive(serde::Deserialize, serde::Serialize)]
1275#[allow(clippy::derive_partial_eq_without_eq)]
1276#[derive(Clone, PartialEq, ::prost::Message)]
1277pub struct RemoveTrustedEndpointsSvcAccountResponse {}
1278#[derive(serde::Deserialize, serde::Serialize)]
1279#[allow(clippy::derive_partial_eq_without_eq)]
1280#[derive(Clone, PartialEq, ::prost::Message)]
1281pub struct AddDataProxyAttributeSvcAccountRequest {
1282    #[prost(string, tag = "1")]
1283    pub svc_account_id: ::prost::alloc::string::String,
1284    #[prost(message, optional, tag = "2")]
1285    pub attribute: ::core::option::Option<super::super::models::v2::DataProxyAttribute>,
1286}
1287#[derive(serde::Deserialize, serde::Serialize)]
1288#[allow(clippy::derive_partial_eq_without_eq)]
1289#[derive(Clone, PartialEq, ::prost::Message)]
1290pub struct AddDataProxyAttributeSvcAccountResponse {}
1291#[derive(serde::Deserialize, serde::Serialize)]
1292#[allow(clippy::derive_partial_eq_without_eq)]
1293#[derive(Clone, PartialEq, ::prost::Message)]
1294pub struct RemoveDataProxyAttributeSvcAccountRequest {
1295    #[prost(string, tag = "1")]
1296    pub svc_account_id: ::prost::alloc::string::String,
1297    #[prost(string, tag = "2")]
1298    pub dataproxy_id: ::prost::alloc::string::String,
1299    #[prost(string, tag = "3")]
1300    pub attribute_name: ::prost::alloc::string::String,
1301}
1302#[derive(serde::Deserialize, serde::Serialize)]
1303#[allow(clippy::derive_partial_eq_without_eq)]
1304#[derive(Clone, PartialEq, ::prost::Message)]
1305pub struct RemoveDataProxyAttributeSvcAccountResponse {}
1306/// Generated client implementations.
1307pub mod service_account_service_client {
1308    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
1309    use tonic::codegen::*;
1310    use tonic::codegen::http::Uri;
1311    /// ServiceAccountService
1312    ///
1313    /// Status: BETA
1314    ///
1315    /// Service that contains CRUD operations for service_accounts.
1316    /// Service accounts are project specific accounts that can be used for automation.
1317    #[derive(Debug, Clone)]
1318    pub struct ServiceAccountServiceClient<T> {
1319        inner: tonic::client::Grpc<T>,
1320    }
1321    impl ServiceAccountServiceClient<tonic::transport::Channel> {
1322        /// Attempt to create a new client by connecting to a given endpoint.
1323        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
1324        where
1325            D: TryInto<tonic::transport::Endpoint>,
1326            D::Error: Into<StdError>,
1327        {
1328            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
1329            Ok(Self::new(conn))
1330        }
1331    }
1332    impl<T> ServiceAccountServiceClient<T>
1333    where
1334        T: tonic::client::GrpcService<tonic::body::BoxBody>,
1335        T::Error: Into<StdError>,
1336        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
1337        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
1338    {
1339        pub fn new(inner: T) -> Self {
1340            let inner = tonic::client::Grpc::new(inner);
1341            Self { inner }
1342        }
1343        pub fn with_origin(inner: T, origin: Uri) -> Self {
1344            let inner = tonic::client::Grpc::with_origin(inner, origin);
1345            Self { inner }
1346        }
1347        pub fn with_interceptor<F>(
1348            inner: T,
1349            interceptor: F,
1350        ) -> ServiceAccountServiceClient<InterceptedService<T, F>>
1351        where
1352            F: tonic::service::Interceptor,
1353            T::ResponseBody: Default,
1354            T: tonic::codegen::Service<
1355                http::Request<tonic::body::BoxBody>,
1356                Response = http::Response<
1357                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
1358                >,
1359            >,
1360            <T as tonic::codegen::Service<
1361                http::Request<tonic::body::BoxBody>,
1362            >>::Error: Into<StdError> + Send + Sync,
1363        {
1364            ServiceAccountServiceClient::new(InterceptedService::new(inner, interceptor))
1365        }
1366        /// Compress requests with the given encoding.
1367        ///
1368        /// This requires the server to support it otherwise it might respond with an
1369        /// error.
1370        #[must_use]
1371        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
1372            self.inner = self.inner.send_compressed(encoding);
1373            self
1374        }
1375        /// Enable decompressing responses.
1376        #[must_use]
1377        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
1378            self.inner = self.inner.accept_compressed(encoding);
1379            self
1380        }
1381        /// Limits the maximum size of a decoded message.
1382        ///
1383        /// Default: `4MB`
1384        #[must_use]
1385        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
1386            self.inner = self.inner.max_decoding_message_size(limit);
1387            self
1388        }
1389        /// Limits the maximum size of an encoded message.
1390        ///
1391        /// Default: `usize::MAX`
1392        #[must_use]
1393        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
1394            self.inner = self.inner.max_encoding_message_size(limit);
1395            self
1396        }
1397        /// CreateServiceAccount
1398        ///
1399        /// Status: BETA
1400        ///
1401        /// Creates a service account for a given project
1402        /// If the service account has permissions for the global Admin project
1403        /// it will be a global service account that can interact with any resource
1404        pub async fn create_service_account(
1405            &mut self,
1406            request: impl tonic::IntoRequest<super::CreateServiceAccountRequest>,
1407        ) -> std::result::Result<
1408            tonic::Response<super::CreateServiceAccountResponse>,
1409            tonic::Status,
1410        > {
1411            self.inner
1412                .ready()
1413                .await
1414                .map_err(|e| {
1415                    tonic::Status::new(
1416                        tonic::Code::Unknown,
1417                        format!("Service was not ready: {}", e.into()),
1418                    )
1419                })?;
1420            let codec = tonic::codec::ProstCodec::default();
1421            let path = http::uri::PathAndQuery::from_static(
1422                "/aruna.api.storage.services.v2.ServiceAccountService/CreateServiceAccount",
1423            );
1424            let mut req = request.into_request();
1425            req.extensions_mut()
1426                .insert(
1427                    GrpcMethod::new(
1428                        "aruna.api.storage.services.v2.ServiceAccountService",
1429                        "CreateServiceAccount",
1430                    ),
1431                );
1432            self.inner.unary(req, path, codec).await
1433        }
1434        /// CreateServiceAccountToken
1435        ///
1436        /// Status: BETA
1437        ///
1438        /// Creates a token for a service account
1439        /// Each service account can only have one permission -> The token will have the same permission as the
1440        /// service account or a subset of it.
1441        pub async fn create_service_account_token(
1442            &mut self,
1443            request: impl tonic::IntoRequest<super::CreateServiceAccountTokenRequest>,
1444        ) -> std::result::Result<
1445            tonic::Response<super::CreateServiceAccountTokenResponse>,
1446            tonic::Status,
1447        > {
1448            self.inner
1449                .ready()
1450                .await
1451                .map_err(|e| {
1452                    tonic::Status::new(
1453                        tonic::Code::Unknown,
1454                        format!("Service was not ready: {}", e.into()),
1455                    )
1456                })?;
1457            let codec = tonic::codec::ProstCodec::default();
1458            let path = http::uri::PathAndQuery::from_static(
1459                "/aruna.api.storage.services.v2.ServiceAccountService/CreateServiceAccountToken",
1460            );
1461            let mut req = request.into_request();
1462            req.extensions_mut()
1463                .insert(
1464                    GrpcMethod::new(
1465                        "aruna.api.storage.services.v2.ServiceAccountService",
1466                        "CreateServiceAccountToken",
1467                    ),
1468                );
1469            self.inner.unary(req, path, codec).await
1470        }
1471        /// GetServiceAccountToken
1472        ///
1473        /// Status: BETA
1474        ///
1475        /// This requests the overall information about a specifc service account token (by id)
1476        /// it will not contain the token itself.
1477        pub async fn get_service_account_token(
1478            &mut self,
1479            request: impl tonic::IntoRequest<super::GetServiceAccountTokenRequest>,
1480        ) -> std::result::Result<
1481            tonic::Response<super::GetServiceAccountTokenResponse>,
1482            tonic::Status,
1483        > {
1484            self.inner
1485                .ready()
1486                .await
1487                .map_err(|e| {
1488                    tonic::Status::new(
1489                        tonic::Code::Unknown,
1490                        format!("Service was not ready: {}", e.into()),
1491                    )
1492                })?;
1493            let codec = tonic::codec::ProstCodec::default();
1494            let path = http::uri::PathAndQuery::from_static(
1495                "/aruna.api.storage.services.v2.ServiceAccountService/GetServiceAccountToken",
1496            );
1497            let mut req = request.into_request();
1498            req.extensions_mut()
1499                .insert(
1500                    GrpcMethod::new(
1501                        "aruna.api.storage.services.v2.ServiceAccountService",
1502                        "GetServiceAccountToken",
1503                    ),
1504                );
1505            self.inner.unary(req, path, codec).await
1506        }
1507        /// GetServiceAccountTokens
1508        ///
1509        /// Status: BETA
1510        ///
1511        /// This requests the overall information about all service account tokens
1512        /// it will not contain the token itself.
1513        pub async fn get_service_account_tokens(
1514            &mut self,
1515            request: impl tonic::IntoRequest<super::GetServiceAccountTokensRequest>,
1516        ) -> std::result::Result<
1517            tonic::Response<super::GetServiceAccountTokensResponse>,
1518            tonic::Status,
1519        > {
1520            self.inner
1521                .ready()
1522                .await
1523                .map_err(|e| {
1524                    tonic::Status::new(
1525                        tonic::Code::Unknown,
1526                        format!("Service was not ready: {}", e.into()),
1527                    )
1528                })?;
1529            let codec = tonic::codec::ProstCodec::default();
1530            let path = http::uri::PathAndQuery::from_static(
1531                "/aruna.api.storage.services.v2.ServiceAccountService/GetServiceAccountTokens",
1532            );
1533            let mut req = request.into_request();
1534            req.extensions_mut()
1535                .insert(
1536                    GrpcMethod::new(
1537                        "aruna.api.storage.services.v2.ServiceAccountService",
1538                        "GetServiceAccountTokens",
1539                    ),
1540                );
1541            self.inner.unary(req, path, codec).await
1542        }
1543        /// DeleteServiceAccountToken
1544        ///
1545        /// Status: BETA
1546        ///
1547        /// Deletes one service account token by ID
1548        pub async fn delete_service_account_token(
1549            &mut self,
1550            request: impl tonic::IntoRequest<super::DeleteServiceAccountTokenRequest>,
1551        ) -> std::result::Result<
1552            tonic::Response<super::DeleteServiceAccountTokenResponse>,
1553            tonic::Status,
1554        > {
1555            self.inner
1556                .ready()
1557                .await
1558                .map_err(|e| {
1559                    tonic::Status::new(
1560                        tonic::Code::Unknown,
1561                        format!("Service was not ready: {}", e.into()),
1562                    )
1563                })?;
1564            let codec = tonic::codec::ProstCodec::default();
1565            let path = http::uri::PathAndQuery::from_static(
1566                "/aruna.api.storage.services.v2.ServiceAccountService/DeleteServiceAccountToken",
1567            );
1568            let mut req = request.into_request();
1569            req.extensions_mut()
1570                .insert(
1571                    GrpcMethod::new(
1572                        "aruna.api.storage.services.v2.ServiceAccountService",
1573                        "DeleteServiceAccountToken",
1574                    ),
1575                );
1576            self.inner.unary(req, path, codec).await
1577        }
1578        /// DeleteServiceAccountTokens
1579        ///
1580        /// Status: BETA
1581        ///
1582        /// Deletes all service account tokens
1583        pub async fn delete_service_account_tokens(
1584            &mut self,
1585            request: impl tonic::IntoRequest<super::DeleteServiceAccountTokensRequest>,
1586        ) -> std::result::Result<
1587            tonic::Response<super::DeleteServiceAccountTokensResponse>,
1588            tonic::Status,
1589        > {
1590            self.inner
1591                .ready()
1592                .await
1593                .map_err(|e| {
1594                    tonic::Status::new(
1595                        tonic::Code::Unknown,
1596                        format!("Service was not ready: {}", e.into()),
1597                    )
1598                })?;
1599            let codec = tonic::codec::ProstCodec::default();
1600            let path = http::uri::PathAndQuery::from_static(
1601                "/aruna.api.storage.services.v2.ServiceAccountService/DeleteServiceAccountTokens",
1602            );
1603            let mut req = request.into_request();
1604            req.extensions_mut()
1605                .insert(
1606                    GrpcMethod::new(
1607                        "aruna.api.storage.services.v2.ServiceAccountService",
1608                        "DeleteServiceAccountTokens",
1609                    ),
1610                );
1611            self.inner.unary(req, path, codec).await
1612        }
1613        /// DeleteServiceAccount
1614        ///
1615        /// Status: BETA
1616        ///
1617        /// Deletes a service account (by id)
1618        pub async fn delete_service_account(
1619            &mut self,
1620            request: impl tonic::IntoRequest<super::DeleteServiceAccountRequest>,
1621        ) -> std::result::Result<
1622            tonic::Response<super::DeleteServiceAccountResponse>,
1623            tonic::Status,
1624        > {
1625            self.inner
1626                .ready()
1627                .await
1628                .map_err(|e| {
1629                    tonic::Status::new(
1630                        tonic::Code::Unknown,
1631                        format!("Service was not ready: {}", e.into()),
1632                    )
1633                })?;
1634            let codec = tonic::codec::ProstCodec::default();
1635            let path = http::uri::PathAndQuery::from_static(
1636                "/aruna.api.storage.services.v2.ServiceAccountService/DeleteServiceAccount",
1637            );
1638            let mut req = request.into_request();
1639            req.extensions_mut()
1640                .insert(
1641                    GrpcMethod::new(
1642                        "aruna.api.storage.services.v2.ServiceAccountService",
1643                        "DeleteServiceAccount",
1644                    ),
1645                );
1646            self.inner.unary(req, path, codec).await
1647        }
1648        /// CreateS3CredentialsSvcAccount
1649        ///
1650        /// Status: ALPHA
1651        ///
1652        /// Creates or updates S3 credentials for a specific SvcAccount and data_proxy
1653        pub async fn create_s3_credentials_svc_account(
1654            &mut self,
1655            request: impl tonic::IntoRequest<super::CreateS3CredentialsSvcAccountRequest>,
1656        ) -> std::result::Result<
1657            tonic::Response<super::CreateS3CredentialsSvcAccountResponse>,
1658            tonic::Status,
1659        > {
1660            self.inner
1661                .ready()
1662                .await
1663                .map_err(|e| {
1664                    tonic::Status::new(
1665                        tonic::Code::Unknown,
1666                        format!("Service was not ready: {}", e.into()),
1667                    )
1668                })?;
1669            let codec = tonic::codec::ProstCodec::default();
1670            let path = http::uri::PathAndQuery::from_static(
1671                "/aruna.api.storage.services.v2.ServiceAccountService/CreateS3CredentialsSvcAccount",
1672            );
1673            let mut req = request.into_request();
1674            req.extensions_mut()
1675                .insert(
1676                    GrpcMethod::new(
1677                        "aruna.api.storage.services.v2.ServiceAccountService",
1678                        "CreateS3CredentialsSvcAccount",
1679                    ),
1680                );
1681            self.inner.unary(req, path, codec).await
1682        }
1683        /// GetS3CredentialsSvcAccount
1684        ///
1685        /// Status: ALPHA
1686        ///
1687        /// Gets S3 credentials for a specific svc_account and data_proxy
1688        pub async fn get_s3_credentials_svc_account(
1689            &mut self,
1690            request: impl tonic::IntoRequest<super::GetS3CredentialsSvcAccountRequest>,
1691        ) -> std::result::Result<
1692            tonic::Response<super::GetS3CredentialsSvcAccountResponse>,
1693            tonic::Status,
1694        > {
1695            self.inner
1696                .ready()
1697                .await
1698                .map_err(|e| {
1699                    tonic::Status::new(
1700                        tonic::Code::Unknown,
1701                        format!("Service was not ready: {}", e.into()),
1702                    )
1703                })?;
1704            let codec = tonic::codec::ProstCodec::default();
1705            let path = http::uri::PathAndQuery::from_static(
1706                "/aruna.api.storage.services.v2.ServiceAccountService/GetS3CredentialsSvcAccount",
1707            );
1708            let mut req = request.into_request();
1709            req.extensions_mut()
1710                .insert(
1711                    GrpcMethod::new(
1712                        "aruna.api.storage.services.v2.ServiceAccountService",
1713                        "GetS3CredentialsSvcAccount",
1714                    ),
1715                );
1716            self.inner.unary(req, path, codec).await
1717        }
1718        /// DeleteS3CredentialsSvcAccount
1719        ///
1720        /// Status: ALPHA
1721        ///
1722        /// Revokes existing S3 credentials for a specific user and data_proxy
1723        pub async fn delete_s3_credentials_svc_account(
1724            &mut self,
1725            request: impl tonic::IntoRequest<super::DeleteS3CredentialsSvcAccountRequest>,
1726        ) -> std::result::Result<
1727            tonic::Response<super::DeleteS3CredentialsSvcAccountResponse>,
1728            tonic::Status,
1729        > {
1730            self.inner
1731                .ready()
1732                .await
1733                .map_err(|e| {
1734                    tonic::Status::new(
1735                        tonic::Code::Unknown,
1736                        format!("Service was not ready: {}", e.into()),
1737                    )
1738                })?;
1739            let codec = tonic::codec::ProstCodec::default();
1740            let path = http::uri::PathAndQuery::from_static(
1741                "/aruna.api.storage.services.v2.ServiceAccountService/DeleteS3CredentialsSvcAccount",
1742            );
1743            let mut req = request.into_request();
1744            req.extensions_mut()
1745                .insert(
1746                    GrpcMethod::new(
1747                        "aruna.api.storage.services.v2.ServiceAccountService",
1748                        "DeleteS3CredentialsSvcAccount",
1749                    ),
1750                );
1751            self.inner.unary(req, path, codec).await
1752        }
1753        /// GetDataproxyToken
1754        ///
1755        /// Status: ALPHA
1756        ///
1757        /// Gets token for a specific SvcAccount and data_proxy
1758        pub async fn create_dataproxy_token_svc_account(
1759            &mut self,
1760            request: impl tonic::IntoRequest<
1761                super::CreateDataproxyTokenSvcAccountRequest,
1762            >,
1763        ) -> std::result::Result<
1764            tonic::Response<super::CreateDataproxyTokenSvcAccountResponse>,
1765            tonic::Status,
1766        > {
1767            self.inner
1768                .ready()
1769                .await
1770                .map_err(|e| {
1771                    tonic::Status::new(
1772                        tonic::Code::Unknown,
1773                        format!("Service was not ready: {}", e.into()),
1774                    )
1775                })?;
1776            let codec = tonic::codec::ProstCodec::default();
1777            let path = http::uri::PathAndQuery::from_static(
1778                "/aruna.api.storage.services.v2.ServiceAccountService/CreateDataproxyTokenSvcAccount",
1779            );
1780            let mut req = request.into_request();
1781            req.extensions_mut()
1782                .insert(
1783                    GrpcMethod::new(
1784                        "aruna.api.storage.services.v2.ServiceAccountService",
1785                        "CreateDataproxyTokenSvcAccount",
1786                    ),
1787                );
1788            self.inner.unary(req, path, codec).await
1789        }
1790        /// AddPubkeySvcAccount
1791        ///
1792        /// Status: ALPHA
1793        ///
1794        /// Adds an ED25519 public key for the SvcAccount
1795        pub async fn add_pubkey_svc_account(
1796            &mut self,
1797            request: impl tonic::IntoRequest<super::AddPubkeySvcAccountRequest>,
1798        ) -> std::result::Result<
1799            tonic::Response<super::AddPubkeySvcAccountResponse>,
1800            tonic::Status,
1801        > {
1802            self.inner
1803                .ready()
1804                .await
1805                .map_err(|e| {
1806                    tonic::Status::new(
1807                        tonic::Code::Unknown,
1808                        format!("Service was not ready: {}", e.into()),
1809                    )
1810                })?;
1811            let codec = tonic::codec::ProstCodec::default();
1812            let path = http::uri::PathAndQuery::from_static(
1813                "/aruna.api.storage.services.v2.ServiceAccountService/AddPubkeySvcAccount",
1814            );
1815            let mut req = request.into_request();
1816            req.extensions_mut()
1817                .insert(
1818                    GrpcMethod::new(
1819                        "aruna.api.storage.services.v2.ServiceAccountService",
1820                        "AddPubkeySvcAccount",
1821                    ),
1822                );
1823            self.inner.unary(req, path, codec).await
1824        }
1825        /// AddTrustedEndpointsSvcAccount
1826        ///
1827        /// Status: ALPHA
1828        ///
1829        /// Adds an endpoint to the trusted endpoints list of the SvcAccount
1830        pub async fn add_trusted_endpoints_svc_account(
1831            &mut self,
1832            request: impl tonic::IntoRequest<super::AddTrustedEndpointsSvcAccountRequest>,
1833        ) -> std::result::Result<
1834            tonic::Response<super::AddTrustedEndpointsSvcAccountResponse>,
1835            tonic::Status,
1836        > {
1837            self.inner
1838                .ready()
1839                .await
1840                .map_err(|e| {
1841                    tonic::Status::new(
1842                        tonic::Code::Unknown,
1843                        format!("Service was not ready: {}", e.into()),
1844                    )
1845                })?;
1846            let codec = tonic::codec::ProstCodec::default();
1847            let path = http::uri::PathAndQuery::from_static(
1848                "/aruna.api.storage.services.v2.ServiceAccountService/AddTrustedEndpointsSvcAccount",
1849            );
1850            let mut req = request.into_request();
1851            req.extensions_mut()
1852                .insert(
1853                    GrpcMethod::new(
1854                        "aruna.api.storage.services.v2.ServiceAccountService",
1855                        "AddTrustedEndpointsSvcAccount",
1856                    ),
1857                );
1858            self.inner.unary(req, path, codec).await
1859        }
1860        /// RemoveTrustedEndpointsSvcAccount
1861        ///
1862        /// Status: ALPHA
1863        ///
1864        /// Removes an endpoint from the trusted endpoints list of the SvcAccount
1865        pub async fn remove_trusted_endpoints_svc_account(
1866            &mut self,
1867            request: impl tonic::IntoRequest<
1868                super::RemoveTrustedEndpointsSvcAccountRequest,
1869            >,
1870        ) -> std::result::Result<
1871            tonic::Response<super::RemoveTrustedEndpointsSvcAccountResponse>,
1872            tonic::Status,
1873        > {
1874            self.inner
1875                .ready()
1876                .await
1877                .map_err(|e| {
1878                    tonic::Status::new(
1879                        tonic::Code::Unknown,
1880                        format!("Service was not ready: {}", e.into()),
1881                    )
1882                })?;
1883            let codec = tonic::codec::ProstCodec::default();
1884            let path = http::uri::PathAndQuery::from_static(
1885                "/aruna.api.storage.services.v2.ServiceAccountService/RemoveTrustedEndpointsSvcAccount",
1886            );
1887            let mut req = request.into_request();
1888            req.extensions_mut()
1889                .insert(
1890                    GrpcMethod::new(
1891                        "aruna.api.storage.services.v2.ServiceAccountService",
1892                        "RemoveTrustedEndpointsSvcAccount",
1893                    ),
1894                );
1895            self.inner.unary(req, path, codec).await
1896        }
1897        /// AddDataProxyAttributeSvcAccount
1898        ///
1899        /// Status: ALPHA
1900        ///
1901        /// Adds an data proxy specific attribute to the SvcAccount
1902        pub async fn add_data_proxy_attribute_svc_account(
1903            &mut self,
1904            request: impl tonic::IntoRequest<
1905                super::AddDataProxyAttributeSvcAccountRequest,
1906            >,
1907        ) -> std::result::Result<
1908            tonic::Response<super::AddDataProxyAttributeSvcAccountResponse>,
1909            tonic::Status,
1910        > {
1911            self.inner
1912                .ready()
1913                .await
1914                .map_err(|e| {
1915                    tonic::Status::new(
1916                        tonic::Code::Unknown,
1917                        format!("Service was not ready: {}", e.into()),
1918                    )
1919                })?;
1920            let codec = tonic::codec::ProstCodec::default();
1921            let path = http::uri::PathAndQuery::from_static(
1922                "/aruna.api.storage.services.v2.ServiceAccountService/AddDataProxyAttributeSvcAccount",
1923            );
1924            let mut req = request.into_request();
1925            req.extensions_mut()
1926                .insert(
1927                    GrpcMethod::new(
1928                        "aruna.api.storage.services.v2.ServiceAccountService",
1929                        "AddDataProxyAttributeSvcAccount",
1930                    ),
1931                );
1932            self.inner.unary(req, path, codec).await
1933        }
1934        /// RemoveDataProxyAttributeSvcAccount
1935        ///
1936        /// Status: ALPHA
1937        ///
1938        /// Removes an data proxy specific attribute from the SvcAccount
1939        pub async fn remove_data_proxy_attribute_svc_account(
1940            &mut self,
1941            request: impl tonic::IntoRequest<
1942                super::RemoveDataProxyAttributeSvcAccountRequest,
1943            >,
1944        ) -> std::result::Result<
1945            tonic::Response<super::RemoveDataProxyAttributeSvcAccountResponse>,
1946            tonic::Status,
1947        > {
1948            self.inner
1949                .ready()
1950                .await
1951                .map_err(|e| {
1952                    tonic::Status::new(
1953                        tonic::Code::Unknown,
1954                        format!("Service was not ready: {}", e.into()),
1955                    )
1956                })?;
1957            let codec = tonic::codec::ProstCodec::default();
1958            let path = http::uri::PathAndQuery::from_static(
1959                "/aruna.api.storage.services.v2.ServiceAccountService/RemoveDataProxyAttributeSvcAccount",
1960            );
1961            let mut req = request.into_request();
1962            req.extensions_mut()
1963                .insert(
1964                    GrpcMethod::new(
1965                        "aruna.api.storage.services.v2.ServiceAccountService",
1966                        "RemoveDataProxyAttributeSvcAccount",
1967                    ),
1968                );
1969            self.inner.unary(req, path, codec).await
1970        }
1971    }
1972}
1973/// Generated server implementations.
1974pub mod service_account_service_server {
1975    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
1976    use tonic::codegen::*;
1977    /// Generated trait containing gRPC methods that should be implemented for use with ServiceAccountServiceServer.
1978    #[async_trait]
1979    pub trait ServiceAccountService: Send + Sync + 'static {
1980        /// CreateServiceAccount
1981        ///
1982        /// Status: BETA
1983        ///
1984        /// Creates a service account for a given project
1985        /// If the service account has permissions for the global Admin project
1986        /// it will be a global service account that can interact with any resource
1987        async fn create_service_account(
1988            &self,
1989            request: tonic::Request<super::CreateServiceAccountRequest>,
1990        ) -> std::result::Result<
1991            tonic::Response<super::CreateServiceAccountResponse>,
1992            tonic::Status,
1993        >;
1994        /// CreateServiceAccountToken
1995        ///
1996        /// Status: BETA
1997        ///
1998        /// Creates a token for a service account
1999        /// Each service account can only have one permission -> The token will have the same permission as the
2000        /// service account or a subset of it.
2001        async fn create_service_account_token(
2002            &self,
2003            request: tonic::Request<super::CreateServiceAccountTokenRequest>,
2004        ) -> std::result::Result<
2005            tonic::Response<super::CreateServiceAccountTokenResponse>,
2006            tonic::Status,
2007        >;
2008        /// GetServiceAccountToken
2009        ///
2010        /// Status: BETA
2011        ///
2012        /// This requests the overall information about a specifc service account token (by id)
2013        /// it will not contain the token itself.
2014        async fn get_service_account_token(
2015            &self,
2016            request: tonic::Request<super::GetServiceAccountTokenRequest>,
2017        ) -> std::result::Result<
2018            tonic::Response<super::GetServiceAccountTokenResponse>,
2019            tonic::Status,
2020        >;
2021        /// GetServiceAccountTokens
2022        ///
2023        /// Status: BETA
2024        ///
2025        /// This requests the overall information about all service account tokens
2026        /// it will not contain the token itself.
2027        async fn get_service_account_tokens(
2028            &self,
2029            request: tonic::Request<super::GetServiceAccountTokensRequest>,
2030        ) -> std::result::Result<
2031            tonic::Response<super::GetServiceAccountTokensResponse>,
2032            tonic::Status,
2033        >;
2034        /// DeleteServiceAccountToken
2035        ///
2036        /// Status: BETA
2037        ///
2038        /// Deletes one service account token by ID
2039        async fn delete_service_account_token(
2040            &self,
2041            request: tonic::Request<super::DeleteServiceAccountTokenRequest>,
2042        ) -> std::result::Result<
2043            tonic::Response<super::DeleteServiceAccountTokenResponse>,
2044            tonic::Status,
2045        >;
2046        /// DeleteServiceAccountTokens
2047        ///
2048        /// Status: BETA
2049        ///
2050        /// Deletes all service account tokens
2051        async fn delete_service_account_tokens(
2052            &self,
2053            request: tonic::Request<super::DeleteServiceAccountTokensRequest>,
2054        ) -> std::result::Result<
2055            tonic::Response<super::DeleteServiceAccountTokensResponse>,
2056            tonic::Status,
2057        >;
2058        /// DeleteServiceAccount
2059        ///
2060        /// Status: BETA
2061        ///
2062        /// Deletes a service account (by id)
2063        async fn delete_service_account(
2064            &self,
2065            request: tonic::Request<super::DeleteServiceAccountRequest>,
2066        ) -> std::result::Result<
2067            tonic::Response<super::DeleteServiceAccountResponse>,
2068            tonic::Status,
2069        >;
2070        /// CreateS3CredentialsSvcAccount
2071        ///
2072        /// Status: ALPHA
2073        ///
2074        /// Creates or updates S3 credentials for a specific SvcAccount and data_proxy
2075        async fn create_s3_credentials_svc_account(
2076            &self,
2077            request: tonic::Request<super::CreateS3CredentialsSvcAccountRequest>,
2078        ) -> std::result::Result<
2079            tonic::Response<super::CreateS3CredentialsSvcAccountResponse>,
2080            tonic::Status,
2081        >;
2082        /// GetS3CredentialsSvcAccount
2083        ///
2084        /// Status: ALPHA
2085        ///
2086        /// Gets S3 credentials for a specific svc_account and data_proxy
2087        async fn get_s3_credentials_svc_account(
2088            &self,
2089            request: tonic::Request<super::GetS3CredentialsSvcAccountRequest>,
2090        ) -> std::result::Result<
2091            tonic::Response<super::GetS3CredentialsSvcAccountResponse>,
2092            tonic::Status,
2093        >;
2094        /// DeleteS3CredentialsSvcAccount
2095        ///
2096        /// Status: ALPHA
2097        ///
2098        /// Revokes existing S3 credentials for a specific user and data_proxy
2099        async fn delete_s3_credentials_svc_account(
2100            &self,
2101            request: tonic::Request<super::DeleteS3CredentialsSvcAccountRequest>,
2102        ) -> std::result::Result<
2103            tonic::Response<super::DeleteS3CredentialsSvcAccountResponse>,
2104            tonic::Status,
2105        >;
2106        /// GetDataproxyToken
2107        ///
2108        /// Status: ALPHA
2109        ///
2110        /// Gets token for a specific SvcAccount and data_proxy
2111        async fn create_dataproxy_token_svc_account(
2112            &self,
2113            request: tonic::Request<super::CreateDataproxyTokenSvcAccountRequest>,
2114        ) -> std::result::Result<
2115            tonic::Response<super::CreateDataproxyTokenSvcAccountResponse>,
2116            tonic::Status,
2117        >;
2118        /// AddPubkeySvcAccount
2119        ///
2120        /// Status: ALPHA
2121        ///
2122        /// Adds an ED25519 public key for the SvcAccount
2123        async fn add_pubkey_svc_account(
2124            &self,
2125            request: tonic::Request<super::AddPubkeySvcAccountRequest>,
2126        ) -> std::result::Result<
2127            tonic::Response<super::AddPubkeySvcAccountResponse>,
2128            tonic::Status,
2129        >;
2130        /// AddTrustedEndpointsSvcAccount
2131        ///
2132        /// Status: ALPHA
2133        ///
2134        /// Adds an endpoint to the trusted endpoints list of the SvcAccount
2135        async fn add_trusted_endpoints_svc_account(
2136            &self,
2137            request: tonic::Request<super::AddTrustedEndpointsSvcAccountRequest>,
2138        ) -> std::result::Result<
2139            tonic::Response<super::AddTrustedEndpointsSvcAccountResponse>,
2140            tonic::Status,
2141        >;
2142        /// RemoveTrustedEndpointsSvcAccount
2143        ///
2144        /// Status: ALPHA
2145        ///
2146        /// Removes an endpoint from the trusted endpoints list of the SvcAccount
2147        async fn remove_trusted_endpoints_svc_account(
2148            &self,
2149            request: tonic::Request<super::RemoveTrustedEndpointsSvcAccountRequest>,
2150        ) -> std::result::Result<
2151            tonic::Response<super::RemoveTrustedEndpointsSvcAccountResponse>,
2152            tonic::Status,
2153        >;
2154        /// AddDataProxyAttributeSvcAccount
2155        ///
2156        /// Status: ALPHA
2157        ///
2158        /// Adds an data proxy specific attribute to the SvcAccount
2159        async fn add_data_proxy_attribute_svc_account(
2160            &self,
2161            request: tonic::Request<super::AddDataProxyAttributeSvcAccountRequest>,
2162        ) -> std::result::Result<
2163            tonic::Response<super::AddDataProxyAttributeSvcAccountResponse>,
2164            tonic::Status,
2165        >;
2166        /// RemoveDataProxyAttributeSvcAccount
2167        ///
2168        /// Status: ALPHA
2169        ///
2170        /// Removes an data proxy specific attribute from the SvcAccount
2171        async fn remove_data_proxy_attribute_svc_account(
2172            &self,
2173            request: tonic::Request<super::RemoveDataProxyAttributeSvcAccountRequest>,
2174        ) -> std::result::Result<
2175            tonic::Response<super::RemoveDataProxyAttributeSvcAccountResponse>,
2176            tonic::Status,
2177        >;
2178    }
2179    /// ServiceAccountService
2180    ///
2181    /// Status: BETA
2182    ///
2183    /// Service that contains CRUD operations for service_accounts.
2184    /// Service accounts are project specific accounts that can be used for automation.
2185    #[derive(Debug)]
2186    pub struct ServiceAccountServiceServer<T: ServiceAccountService> {
2187        inner: _Inner<T>,
2188        accept_compression_encodings: EnabledCompressionEncodings,
2189        send_compression_encodings: EnabledCompressionEncodings,
2190        max_decoding_message_size: Option<usize>,
2191        max_encoding_message_size: Option<usize>,
2192    }
2193    struct _Inner<T>(Arc<T>);
2194    impl<T: ServiceAccountService> ServiceAccountServiceServer<T> {
2195        pub fn new(inner: T) -> Self {
2196            Self::from_arc(Arc::new(inner))
2197        }
2198        pub fn from_arc(inner: Arc<T>) -> Self {
2199            let inner = _Inner(inner);
2200            Self {
2201                inner,
2202                accept_compression_encodings: Default::default(),
2203                send_compression_encodings: Default::default(),
2204                max_decoding_message_size: None,
2205                max_encoding_message_size: None,
2206            }
2207        }
2208        pub fn with_interceptor<F>(
2209            inner: T,
2210            interceptor: F,
2211        ) -> InterceptedService<Self, F>
2212        where
2213            F: tonic::service::Interceptor,
2214        {
2215            InterceptedService::new(Self::new(inner), interceptor)
2216        }
2217        /// Enable decompressing requests with the given encoding.
2218        #[must_use]
2219        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
2220            self.accept_compression_encodings.enable(encoding);
2221            self
2222        }
2223        /// Compress responses with the given encoding, if the client supports it.
2224        #[must_use]
2225        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
2226            self.send_compression_encodings.enable(encoding);
2227            self
2228        }
2229        /// Limits the maximum size of a decoded message.
2230        ///
2231        /// Default: `4MB`
2232        #[must_use]
2233        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
2234            self.max_decoding_message_size = Some(limit);
2235            self
2236        }
2237        /// Limits the maximum size of an encoded message.
2238        ///
2239        /// Default: `usize::MAX`
2240        #[must_use]
2241        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
2242            self.max_encoding_message_size = Some(limit);
2243            self
2244        }
2245    }
2246    impl<T, B> tonic::codegen::Service<http::Request<B>>
2247    for ServiceAccountServiceServer<T>
2248    where
2249        T: ServiceAccountService,
2250        B: Body + Send + 'static,
2251        B::Error: Into<StdError> + Send + 'static,
2252    {
2253        type Response = http::Response<tonic::body::BoxBody>;
2254        type Error = std::convert::Infallible;
2255        type Future = BoxFuture<Self::Response, Self::Error>;
2256        fn poll_ready(
2257            &mut self,
2258            _cx: &mut Context<'_>,
2259        ) -> Poll<std::result::Result<(), Self::Error>> {
2260            Poll::Ready(Ok(()))
2261        }
2262        fn call(&mut self, req: http::Request<B>) -> Self::Future {
2263            let inner = self.inner.clone();
2264            match req.uri().path() {
2265                "/aruna.api.storage.services.v2.ServiceAccountService/CreateServiceAccount" => {
2266                    #[allow(non_camel_case_types)]
2267                    struct CreateServiceAccountSvc<T: ServiceAccountService>(pub Arc<T>);
2268                    impl<
2269                        T: ServiceAccountService,
2270                    > tonic::server::UnaryService<super::CreateServiceAccountRequest>
2271                    for CreateServiceAccountSvc<T> {
2272                        type Response = super::CreateServiceAccountResponse;
2273                        type Future = BoxFuture<
2274                            tonic::Response<Self::Response>,
2275                            tonic::Status,
2276                        >;
2277                        fn call(
2278                            &mut self,
2279                            request: tonic::Request<super::CreateServiceAccountRequest>,
2280                        ) -> Self::Future {
2281                            let inner = Arc::clone(&self.0);
2282                            let fut = async move {
2283                                <T as ServiceAccountService>::create_service_account(
2284                                        &inner,
2285                                        request,
2286                                    )
2287                                    .await
2288                            };
2289                            Box::pin(fut)
2290                        }
2291                    }
2292                    let accept_compression_encodings = self.accept_compression_encodings;
2293                    let send_compression_encodings = self.send_compression_encodings;
2294                    let max_decoding_message_size = self.max_decoding_message_size;
2295                    let max_encoding_message_size = self.max_encoding_message_size;
2296                    let inner = self.inner.clone();
2297                    let fut = async move {
2298                        let inner = inner.0;
2299                        let method = CreateServiceAccountSvc(inner);
2300                        let codec = tonic::codec::ProstCodec::default();
2301                        let mut grpc = tonic::server::Grpc::new(codec)
2302                            .apply_compression_config(
2303                                accept_compression_encodings,
2304                                send_compression_encodings,
2305                            )
2306                            .apply_max_message_size_config(
2307                                max_decoding_message_size,
2308                                max_encoding_message_size,
2309                            );
2310                        let res = grpc.unary(method, req).await;
2311                        Ok(res)
2312                    };
2313                    Box::pin(fut)
2314                }
2315                "/aruna.api.storage.services.v2.ServiceAccountService/CreateServiceAccountToken" => {
2316                    #[allow(non_camel_case_types)]
2317                    struct CreateServiceAccountTokenSvc<T: ServiceAccountService>(
2318                        pub Arc<T>,
2319                    );
2320                    impl<
2321                        T: ServiceAccountService,
2322                    > tonic::server::UnaryService<
2323                        super::CreateServiceAccountTokenRequest,
2324                    > for CreateServiceAccountTokenSvc<T> {
2325                        type Response = super::CreateServiceAccountTokenResponse;
2326                        type Future = BoxFuture<
2327                            tonic::Response<Self::Response>,
2328                            tonic::Status,
2329                        >;
2330                        fn call(
2331                            &mut self,
2332                            request: tonic::Request<
2333                                super::CreateServiceAccountTokenRequest,
2334                            >,
2335                        ) -> Self::Future {
2336                            let inner = Arc::clone(&self.0);
2337                            let fut = async move {
2338                                <T as ServiceAccountService>::create_service_account_token(
2339                                        &inner,
2340                                        request,
2341                                    )
2342                                    .await
2343                            };
2344                            Box::pin(fut)
2345                        }
2346                    }
2347                    let accept_compression_encodings = self.accept_compression_encodings;
2348                    let send_compression_encodings = self.send_compression_encodings;
2349                    let max_decoding_message_size = self.max_decoding_message_size;
2350                    let max_encoding_message_size = self.max_encoding_message_size;
2351                    let inner = self.inner.clone();
2352                    let fut = async move {
2353                        let inner = inner.0;
2354                        let method = CreateServiceAccountTokenSvc(inner);
2355                        let codec = tonic::codec::ProstCodec::default();
2356                        let mut grpc = tonic::server::Grpc::new(codec)
2357                            .apply_compression_config(
2358                                accept_compression_encodings,
2359                                send_compression_encodings,
2360                            )
2361                            .apply_max_message_size_config(
2362                                max_decoding_message_size,
2363                                max_encoding_message_size,
2364                            );
2365                        let res = grpc.unary(method, req).await;
2366                        Ok(res)
2367                    };
2368                    Box::pin(fut)
2369                }
2370                "/aruna.api.storage.services.v2.ServiceAccountService/GetServiceAccountToken" => {
2371                    #[allow(non_camel_case_types)]
2372                    struct GetServiceAccountTokenSvc<T: ServiceAccountService>(
2373                        pub Arc<T>,
2374                    );
2375                    impl<
2376                        T: ServiceAccountService,
2377                    > tonic::server::UnaryService<super::GetServiceAccountTokenRequest>
2378                    for GetServiceAccountTokenSvc<T> {
2379                        type Response = super::GetServiceAccountTokenResponse;
2380                        type Future = BoxFuture<
2381                            tonic::Response<Self::Response>,
2382                            tonic::Status,
2383                        >;
2384                        fn call(
2385                            &mut self,
2386                            request: tonic::Request<super::GetServiceAccountTokenRequest>,
2387                        ) -> Self::Future {
2388                            let inner = Arc::clone(&self.0);
2389                            let fut = async move {
2390                                <T as ServiceAccountService>::get_service_account_token(
2391                                        &inner,
2392                                        request,
2393                                    )
2394                                    .await
2395                            };
2396                            Box::pin(fut)
2397                        }
2398                    }
2399                    let accept_compression_encodings = self.accept_compression_encodings;
2400                    let send_compression_encodings = self.send_compression_encodings;
2401                    let max_decoding_message_size = self.max_decoding_message_size;
2402                    let max_encoding_message_size = self.max_encoding_message_size;
2403                    let inner = self.inner.clone();
2404                    let fut = async move {
2405                        let inner = inner.0;
2406                        let method = GetServiceAccountTokenSvc(inner);
2407                        let codec = tonic::codec::ProstCodec::default();
2408                        let mut grpc = tonic::server::Grpc::new(codec)
2409                            .apply_compression_config(
2410                                accept_compression_encodings,
2411                                send_compression_encodings,
2412                            )
2413                            .apply_max_message_size_config(
2414                                max_decoding_message_size,
2415                                max_encoding_message_size,
2416                            );
2417                        let res = grpc.unary(method, req).await;
2418                        Ok(res)
2419                    };
2420                    Box::pin(fut)
2421                }
2422                "/aruna.api.storage.services.v2.ServiceAccountService/GetServiceAccountTokens" => {
2423                    #[allow(non_camel_case_types)]
2424                    struct GetServiceAccountTokensSvc<T: ServiceAccountService>(
2425                        pub Arc<T>,
2426                    );
2427                    impl<
2428                        T: ServiceAccountService,
2429                    > tonic::server::UnaryService<super::GetServiceAccountTokensRequest>
2430                    for GetServiceAccountTokensSvc<T> {
2431                        type Response = super::GetServiceAccountTokensResponse;
2432                        type Future = BoxFuture<
2433                            tonic::Response<Self::Response>,
2434                            tonic::Status,
2435                        >;
2436                        fn call(
2437                            &mut self,
2438                            request: tonic::Request<
2439                                super::GetServiceAccountTokensRequest,
2440                            >,
2441                        ) -> Self::Future {
2442                            let inner = Arc::clone(&self.0);
2443                            let fut = async move {
2444                                <T as ServiceAccountService>::get_service_account_tokens(
2445                                        &inner,
2446                                        request,
2447                                    )
2448                                    .await
2449                            };
2450                            Box::pin(fut)
2451                        }
2452                    }
2453                    let accept_compression_encodings = self.accept_compression_encodings;
2454                    let send_compression_encodings = self.send_compression_encodings;
2455                    let max_decoding_message_size = self.max_decoding_message_size;
2456                    let max_encoding_message_size = self.max_encoding_message_size;
2457                    let inner = self.inner.clone();
2458                    let fut = async move {
2459                        let inner = inner.0;
2460                        let method = GetServiceAccountTokensSvc(inner);
2461                        let codec = tonic::codec::ProstCodec::default();
2462                        let mut grpc = tonic::server::Grpc::new(codec)
2463                            .apply_compression_config(
2464                                accept_compression_encodings,
2465                                send_compression_encodings,
2466                            )
2467                            .apply_max_message_size_config(
2468                                max_decoding_message_size,
2469                                max_encoding_message_size,
2470                            );
2471                        let res = grpc.unary(method, req).await;
2472                        Ok(res)
2473                    };
2474                    Box::pin(fut)
2475                }
2476                "/aruna.api.storage.services.v2.ServiceAccountService/DeleteServiceAccountToken" => {
2477                    #[allow(non_camel_case_types)]
2478                    struct DeleteServiceAccountTokenSvc<T: ServiceAccountService>(
2479                        pub Arc<T>,
2480                    );
2481                    impl<
2482                        T: ServiceAccountService,
2483                    > tonic::server::UnaryService<
2484                        super::DeleteServiceAccountTokenRequest,
2485                    > for DeleteServiceAccountTokenSvc<T> {
2486                        type Response = super::DeleteServiceAccountTokenResponse;
2487                        type Future = BoxFuture<
2488                            tonic::Response<Self::Response>,
2489                            tonic::Status,
2490                        >;
2491                        fn call(
2492                            &mut self,
2493                            request: tonic::Request<
2494                                super::DeleteServiceAccountTokenRequest,
2495                            >,
2496                        ) -> Self::Future {
2497                            let inner = Arc::clone(&self.0);
2498                            let fut = async move {
2499                                <T as ServiceAccountService>::delete_service_account_token(
2500                                        &inner,
2501                                        request,
2502                                    )
2503                                    .await
2504                            };
2505                            Box::pin(fut)
2506                        }
2507                    }
2508                    let accept_compression_encodings = self.accept_compression_encodings;
2509                    let send_compression_encodings = self.send_compression_encodings;
2510                    let max_decoding_message_size = self.max_decoding_message_size;
2511                    let max_encoding_message_size = self.max_encoding_message_size;
2512                    let inner = self.inner.clone();
2513                    let fut = async move {
2514                        let inner = inner.0;
2515                        let method = DeleteServiceAccountTokenSvc(inner);
2516                        let codec = tonic::codec::ProstCodec::default();
2517                        let mut grpc = tonic::server::Grpc::new(codec)
2518                            .apply_compression_config(
2519                                accept_compression_encodings,
2520                                send_compression_encodings,
2521                            )
2522                            .apply_max_message_size_config(
2523                                max_decoding_message_size,
2524                                max_encoding_message_size,
2525                            );
2526                        let res = grpc.unary(method, req).await;
2527                        Ok(res)
2528                    };
2529                    Box::pin(fut)
2530                }
2531                "/aruna.api.storage.services.v2.ServiceAccountService/DeleteServiceAccountTokens" => {
2532                    #[allow(non_camel_case_types)]
2533                    struct DeleteServiceAccountTokensSvc<T: ServiceAccountService>(
2534                        pub Arc<T>,
2535                    );
2536                    impl<
2537                        T: ServiceAccountService,
2538                    > tonic::server::UnaryService<
2539                        super::DeleteServiceAccountTokensRequest,
2540                    > for DeleteServiceAccountTokensSvc<T> {
2541                        type Response = super::DeleteServiceAccountTokensResponse;
2542                        type Future = BoxFuture<
2543                            tonic::Response<Self::Response>,
2544                            tonic::Status,
2545                        >;
2546                        fn call(
2547                            &mut self,
2548                            request: tonic::Request<
2549                                super::DeleteServiceAccountTokensRequest,
2550                            >,
2551                        ) -> Self::Future {
2552                            let inner = Arc::clone(&self.0);
2553                            let fut = async move {
2554                                <T as ServiceAccountService>::delete_service_account_tokens(
2555                                        &inner,
2556                                        request,
2557                                    )
2558                                    .await
2559                            };
2560                            Box::pin(fut)
2561                        }
2562                    }
2563                    let accept_compression_encodings = self.accept_compression_encodings;
2564                    let send_compression_encodings = self.send_compression_encodings;
2565                    let max_decoding_message_size = self.max_decoding_message_size;
2566                    let max_encoding_message_size = self.max_encoding_message_size;
2567                    let inner = self.inner.clone();
2568                    let fut = async move {
2569                        let inner = inner.0;
2570                        let method = DeleteServiceAccountTokensSvc(inner);
2571                        let codec = tonic::codec::ProstCodec::default();
2572                        let mut grpc = tonic::server::Grpc::new(codec)
2573                            .apply_compression_config(
2574                                accept_compression_encodings,
2575                                send_compression_encodings,
2576                            )
2577                            .apply_max_message_size_config(
2578                                max_decoding_message_size,
2579                                max_encoding_message_size,
2580                            );
2581                        let res = grpc.unary(method, req).await;
2582                        Ok(res)
2583                    };
2584                    Box::pin(fut)
2585                }
2586                "/aruna.api.storage.services.v2.ServiceAccountService/DeleteServiceAccount" => {
2587                    #[allow(non_camel_case_types)]
2588                    struct DeleteServiceAccountSvc<T: ServiceAccountService>(pub Arc<T>);
2589                    impl<
2590                        T: ServiceAccountService,
2591                    > tonic::server::UnaryService<super::DeleteServiceAccountRequest>
2592                    for DeleteServiceAccountSvc<T> {
2593                        type Response = super::DeleteServiceAccountResponse;
2594                        type Future = BoxFuture<
2595                            tonic::Response<Self::Response>,
2596                            tonic::Status,
2597                        >;
2598                        fn call(
2599                            &mut self,
2600                            request: tonic::Request<super::DeleteServiceAccountRequest>,
2601                        ) -> Self::Future {
2602                            let inner = Arc::clone(&self.0);
2603                            let fut = async move {
2604                                <T as ServiceAccountService>::delete_service_account(
2605                                        &inner,
2606                                        request,
2607                                    )
2608                                    .await
2609                            };
2610                            Box::pin(fut)
2611                        }
2612                    }
2613                    let accept_compression_encodings = self.accept_compression_encodings;
2614                    let send_compression_encodings = self.send_compression_encodings;
2615                    let max_decoding_message_size = self.max_decoding_message_size;
2616                    let max_encoding_message_size = self.max_encoding_message_size;
2617                    let inner = self.inner.clone();
2618                    let fut = async move {
2619                        let inner = inner.0;
2620                        let method = DeleteServiceAccountSvc(inner);
2621                        let codec = tonic::codec::ProstCodec::default();
2622                        let mut grpc = tonic::server::Grpc::new(codec)
2623                            .apply_compression_config(
2624                                accept_compression_encodings,
2625                                send_compression_encodings,
2626                            )
2627                            .apply_max_message_size_config(
2628                                max_decoding_message_size,
2629                                max_encoding_message_size,
2630                            );
2631                        let res = grpc.unary(method, req).await;
2632                        Ok(res)
2633                    };
2634                    Box::pin(fut)
2635                }
2636                "/aruna.api.storage.services.v2.ServiceAccountService/CreateS3CredentialsSvcAccount" => {
2637                    #[allow(non_camel_case_types)]
2638                    struct CreateS3CredentialsSvcAccountSvc<T: ServiceAccountService>(
2639                        pub Arc<T>,
2640                    );
2641                    impl<
2642                        T: ServiceAccountService,
2643                    > tonic::server::UnaryService<
2644                        super::CreateS3CredentialsSvcAccountRequest,
2645                    > for CreateS3CredentialsSvcAccountSvc<T> {
2646                        type Response = super::CreateS3CredentialsSvcAccountResponse;
2647                        type Future = BoxFuture<
2648                            tonic::Response<Self::Response>,
2649                            tonic::Status,
2650                        >;
2651                        fn call(
2652                            &mut self,
2653                            request: tonic::Request<
2654                                super::CreateS3CredentialsSvcAccountRequest,
2655                            >,
2656                        ) -> Self::Future {
2657                            let inner = Arc::clone(&self.0);
2658                            let fut = async move {
2659                                <T as ServiceAccountService>::create_s3_credentials_svc_account(
2660                                        &inner,
2661                                        request,
2662                                    )
2663                                    .await
2664                            };
2665                            Box::pin(fut)
2666                        }
2667                    }
2668                    let accept_compression_encodings = self.accept_compression_encodings;
2669                    let send_compression_encodings = self.send_compression_encodings;
2670                    let max_decoding_message_size = self.max_decoding_message_size;
2671                    let max_encoding_message_size = self.max_encoding_message_size;
2672                    let inner = self.inner.clone();
2673                    let fut = async move {
2674                        let inner = inner.0;
2675                        let method = CreateS3CredentialsSvcAccountSvc(inner);
2676                        let codec = tonic::codec::ProstCodec::default();
2677                        let mut grpc = tonic::server::Grpc::new(codec)
2678                            .apply_compression_config(
2679                                accept_compression_encodings,
2680                                send_compression_encodings,
2681                            )
2682                            .apply_max_message_size_config(
2683                                max_decoding_message_size,
2684                                max_encoding_message_size,
2685                            );
2686                        let res = grpc.unary(method, req).await;
2687                        Ok(res)
2688                    };
2689                    Box::pin(fut)
2690                }
2691                "/aruna.api.storage.services.v2.ServiceAccountService/GetS3CredentialsSvcAccount" => {
2692                    #[allow(non_camel_case_types)]
2693                    struct GetS3CredentialsSvcAccountSvc<T: ServiceAccountService>(
2694                        pub Arc<T>,
2695                    );
2696                    impl<
2697                        T: ServiceAccountService,
2698                    > tonic::server::UnaryService<
2699                        super::GetS3CredentialsSvcAccountRequest,
2700                    > for GetS3CredentialsSvcAccountSvc<T> {
2701                        type Response = super::GetS3CredentialsSvcAccountResponse;
2702                        type Future = BoxFuture<
2703                            tonic::Response<Self::Response>,
2704                            tonic::Status,
2705                        >;
2706                        fn call(
2707                            &mut self,
2708                            request: tonic::Request<
2709                                super::GetS3CredentialsSvcAccountRequest,
2710                            >,
2711                        ) -> Self::Future {
2712                            let inner = Arc::clone(&self.0);
2713                            let fut = async move {
2714                                <T as ServiceAccountService>::get_s3_credentials_svc_account(
2715                                        &inner,
2716                                        request,
2717                                    )
2718                                    .await
2719                            };
2720                            Box::pin(fut)
2721                        }
2722                    }
2723                    let accept_compression_encodings = self.accept_compression_encodings;
2724                    let send_compression_encodings = self.send_compression_encodings;
2725                    let max_decoding_message_size = self.max_decoding_message_size;
2726                    let max_encoding_message_size = self.max_encoding_message_size;
2727                    let inner = self.inner.clone();
2728                    let fut = async move {
2729                        let inner = inner.0;
2730                        let method = GetS3CredentialsSvcAccountSvc(inner);
2731                        let codec = tonic::codec::ProstCodec::default();
2732                        let mut grpc = tonic::server::Grpc::new(codec)
2733                            .apply_compression_config(
2734                                accept_compression_encodings,
2735                                send_compression_encodings,
2736                            )
2737                            .apply_max_message_size_config(
2738                                max_decoding_message_size,
2739                                max_encoding_message_size,
2740                            );
2741                        let res = grpc.unary(method, req).await;
2742                        Ok(res)
2743                    };
2744                    Box::pin(fut)
2745                }
2746                "/aruna.api.storage.services.v2.ServiceAccountService/DeleteS3CredentialsSvcAccount" => {
2747                    #[allow(non_camel_case_types)]
2748                    struct DeleteS3CredentialsSvcAccountSvc<T: ServiceAccountService>(
2749                        pub Arc<T>,
2750                    );
2751                    impl<
2752                        T: ServiceAccountService,
2753                    > tonic::server::UnaryService<
2754                        super::DeleteS3CredentialsSvcAccountRequest,
2755                    > for DeleteS3CredentialsSvcAccountSvc<T> {
2756                        type Response = super::DeleteS3CredentialsSvcAccountResponse;
2757                        type Future = BoxFuture<
2758                            tonic::Response<Self::Response>,
2759                            tonic::Status,
2760                        >;
2761                        fn call(
2762                            &mut self,
2763                            request: tonic::Request<
2764                                super::DeleteS3CredentialsSvcAccountRequest,
2765                            >,
2766                        ) -> Self::Future {
2767                            let inner = Arc::clone(&self.0);
2768                            let fut = async move {
2769                                <T as ServiceAccountService>::delete_s3_credentials_svc_account(
2770                                        &inner,
2771                                        request,
2772                                    )
2773                                    .await
2774                            };
2775                            Box::pin(fut)
2776                        }
2777                    }
2778                    let accept_compression_encodings = self.accept_compression_encodings;
2779                    let send_compression_encodings = self.send_compression_encodings;
2780                    let max_decoding_message_size = self.max_decoding_message_size;
2781                    let max_encoding_message_size = self.max_encoding_message_size;
2782                    let inner = self.inner.clone();
2783                    let fut = async move {
2784                        let inner = inner.0;
2785                        let method = DeleteS3CredentialsSvcAccountSvc(inner);
2786                        let codec = tonic::codec::ProstCodec::default();
2787                        let mut grpc = tonic::server::Grpc::new(codec)
2788                            .apply_compression_config(
2789                                accept_compression_encodings,
2790                                send_compression_encodings,
2791                            )
2792                            .apply_max_message_size_config(
2793                                max_decoding_message_size,
2794                                max_encoding_message_size,
2795                            );
2796                        let res = grpc.unary(method, req).await;
2797                        Ok(res)
2798                    };
2799                    Box::pin(fut)
2800                }
2801                "/aruna.api.storage.services.v2.ServiceAccountService/CreateDataproxyTokenSvcAccount" => {
2802                    #[allow(non_camel_case_types)]
2803                    struct CreateDataproxyTokenSvcAccountSvc<T: ServiceAccountService>(
2804                        pub Arc<T>,
2805                    );
2806                    impl<
2807                        T: ServiceAccountService,
2808                    > tonic::server::UnaryService<
2809                        super::CreateDataproxyTokenSvcAccountRequest,
2810                    > for CreateDataproxyTokenSvcAccountSvc<T> {
2811                        type Response = super::CreateDataproxyTokenSvcAccountResponse;
2812                        type Future = BoxFuture<
2813                            tonic::Response<Self::Response>,
2814                            tonic::Status,
2815                        >;
2816                        fn call(
2817                            &mut self,
2818                            request: tonic::Request<
2819                                super::CreateDataproxyTokenSvcAccountRequest,
2820                            >,
2821                        ) -> Self::Future {
2822                            let inner = Arc::clone(&self.0);
2823                            let fut = async move {
2824                                <T as ServiceAccountService>::create_dataproxy_token_svc_account(
2825                                        &inner,
2826                                        request,
2827                                    )
2828                                    .await
2829                            };
2830                            Box::pin(fut)
2831                        }
2832                    }
2833                    let accept_compression_encodings = self.accept_compression_encodings;
2834                    let send_compression_encodings = self.send_compression_encodings;
2835                    let max_decoding_message_size = self.max_decoding_message_size;
2836                    let max_encoding_message_size = self.max_encoding_message_size;
2837                    let inner = self.inner.clone();
2838                    let fut = async move {
2839                        let inner = inner.0;
2840                        let method = CreateDataproxyTokenSvcAccountSvc(inner);
2841                        let codec = tonic::codec::ProstCodec::default();
2842                        let mut grpc = tonic::server::Grpc::new(codec)
2843                            .apply_compression_config(
2844                                accept_compression_encodings,
2845                                send_compression_encodings,
2846                            )
2847                            .apply_max_message_size_config(
2848                                max_decoding_message_size,
2849                                max_encoding_message_size,
2850                            );
2851                        let res = grpc.unary(method, req).await;
2852                        Ok(res)
2853                    };
2854                    Box::pin(fut)
2855                }
2856                "/aruna.api.storage.services.v2.ServiceAccountService/AddPubkeySvcAccount" => {
2857                    #[allow(non_camel_case_types)]
2858                    struct AddPubkeySvcAccountSvc<T: ServiceAccountService>(pub Arc<T>);
2859                    impl<
2860                        T: ServiceAccountService,
2861                    > tonic::server::UnaryService<super::AddPubkeySvcAccountRequest>
2862                    for AddPubkeySvcAccountSvc<T> {
2863                        type Response = super::AddPubkeySvcAccountResponse;
2864                        type Future = BoxFuture<
2865                            tonic::Response<Self::Response>,
2866                            tonic::Status,
2867                        >;
2868                        fn call(
2869                            &mut self,
2870                            request: tonic::Request<super::AddPubkeySvcAccountRequest>,
2871                        ) -> Self::Future {
2872                            let inner = Arc::clone(&self.0);
2873                            let fut = async move {
2874                                <T as ServiceAccountService>::add_pubkey_svc_account(
2875                                        &inner,
2876                                        request,
2877                                    )
2878                                    .await
2879                            };
2880                            Box::pin(fut)
2881                        }
2882                    }
2883                    let accept_compression_encodings = self.accept_compression_encodings;
2884                    let send_compression_encodings = self.send_compression_encodings;
2885                    let max_decoding_message_size = self.max_decoding_message_size;
2886                    let max_encoding_message_size = self.max_encoding_message_size;
2887                    let inner = self.inner.clone();
2888                    let fut = async move {
2889                        let inner = inner.0;
2890                        let method = AddPubkeySvcAccountSvc(inner);
2891                        let codec = tonic::codec::ProstCodec::default();
2892                        let mut grpc = tonic::server::Grpc::new(codec)
2893                            .apply_compression_config(
2894                                accept_compression_encodings,
2895                                send_compression_encodings,
2896                            )
2897                            .apply_max_message_size_config(
2898                                max_decoding_message_size,
2899                                max_encoding_message_size,
2900                            );
2901                        let res = grpc.unary(method, req).await;
2902                        Ok(res)
2903                    };
2904                    Box::pin(fut)
2905                }
2906                "/aruna.api.storage.services.v2.ServiceAccountService/AddTrustedEndpointsSvcAccount" => {
2907                    #[allow(non_camel_case_types)]
2908                    struct AddTrustedEndpointsSvcAccountSvc<T: ServiceAccountService>(
2909                        pub Arc<T>,
2910                    );
2911                    impl<
2912                        T: ServiceAccountService,
2913                    > tonic::server::UnaryService<
2914                        super::AddTrustedEndpointsSvcAccountRequest,
2915                    > for AddTrustedEndpointsSvcAccountSvc<T> {
2916                        type Response = super::AddTrustedEndpointsSvcAccountResponse;
2917                        type Future = BoxFuture<
2918                            tonic::Response<Self::Response>,
2919                            tonic::Status,
2920                        >;
2921                        fn call(
2922                            &mut self,
2923                            request: tonic::Request<
2924                                super::AddTrustedEndpointsSvcAccountRequest,
2925                            >,
2926                        ) -> Self::Future {
2927                            let inner = Arc::clone(&self.0);
2928                            let fut = async move {
2929                                <T as ServiceAccountService>::add_trusted_endpoints_svc_account(
2930                                        &inner,
2931                                        request,
2932                                    )
2933                                    .await
2934                            };
2935                            Box::pin(fut)
2936                        }
2937                    }
2938                    let accept_compression_encodings = self.accept_compression_encodings;
2939                    let send_compression_encodings = self.send_compression_encodings;
2940                    let max_decoding_message_size = self.max_decoding_message_size;
2941                    let max_encoding_message_size = self.max_encoding_message_size;
2942                    let inner = self.inner.clone();
2943                    let fut = async move {
2944                        let inner = inner.0;
2945                        let method = AddTrustedEndpointsSvcAccountSvc(inner);
2946                        let codec = tonic::codec::ProstCodec::default();
2947                        let mut grpc = tonic::server::Grpc::new(codec)
2948                            .apply_compression_config(
2949                                accept_compression_encodings,
2950                                send_compression_encodings,
2951                            )
2952                            .apply_max_message_size_config(
2953                                max_decoding_message_size,
2954                                max_encoding_message_size,
2955                            );
2956                        let res = grpc.unary(method, req).await;
2957                        Ok(res)
2958                    };
2959                    Box::pin(fut)
2960                }
2961                "/aruna.api.storage.services.v2.ServiceAccountService/RemoveTrustedEndpointsSvcAccount" => {
2962                    #[allow(non_camel_case_types)]
2963                    struct RemoveTrustedEndpointsSvcAccountSvc<T: ServiceAccountService>(
2964                        pub Arc<T>,
2965                    );
2966                    impl<
2967                        T: ServiceAccountService,
2968                    > tonic::server::UnaryService<
2969                        super::RemoveTrustedEndpointsSvcAccountRequest,
2970                    > for RemoveTrustedEndpointsSvcAccountSvc<T> {
2971                        type Response = super::RemoveTrustedEndpointsSvcAccountResponse;
2972                        type Future = BoxFuture<
2973                            tonic::Response<Self::Response>,
2974                            tonic::Status,
2975                        >;
2976                        fn call(
2977                            &mut self,
2978                            request: tonic::Request<
2979                                super::RemoveTrustedEndpointsSvcAccountRequest,
2980                            >,
2981                        ) -> Self::Future {
2982                            let inner = Arc::clone(&self.0);
2983                            let fut = async move {
2984                                <T as ServiceAccountService>::remove_trusted_endpoints_svc_account(
2985                                        &inner,
2986                                        request,
2987                                    )
2988                                    .await
2989                            };
2990                            Box::pin(fut)
2991                        }
2992                    }
2993                    let accept_compression_encodings = self.accept_compression_encodings;
2994                    let send_compression_encodings = self.send_compression_encodings;
2995                    let max_decoding_message_size = self.max_decoding_message_size;
2996                    let max_encoding_message_size = self.max_encoding_message_size;
2997                    let inner = self.inner.clone();
2998                    let fut = async move {
2999                        let inner = inner.0;
3000                        let method = RemoveTrustedEndpointsSvcAccountSvc(inner);
3001                        let codec = tonic::codec::ProstCodec::default();
3002                        let mut grpc = tonic::server::Grpc::new(codec)
3003                            .apply_compression_config(
3004                                accept_compression_encodings,
3005                                send_compression_encodings,
3006                            )
3007                            .apply_max_message_size_config(
3008                                max_decoding_message_size,
3009                                max_encoding_message_size,
3010                            );
3011                        let res = grpc.unary(method, req).await;
3012                        Ok(res)
3013                    };
3014                    Box::pin(fut)
3015                }
3016                "/aruna.api.storage.services.v2.ServiceAccountService/AddDataProxyAttributeSvcAccount" => {
3017                    #[allow(non_camel_case_types)]
3018                    struct AddDataProxyAttributeSvcAccountSvc<T: ServiceAccountService>(
3019                        pub Arc<T>,
3020                    );
3021                    impl<
3022                        T: ServiceAccountService,
3023                    > tonic::server::UnaryService<
3024                        super::AddDataProxyAttributeSvcAccountRequest,
3025                    > for AddDataProxyAttributeSvcAccountSvc<T> {
3026                        type Response = super::AddDataProxyAttributeSvcAccountResponse;
3027                        type Future = BoxFuture<
3028                            tonic::Response<Self::Response>,
3029                            tonic::Status,
3030                        >;
3031                        fn call(
3032                            &mut self,
3033                            request: tonic::Request<
3034                                super::AddDataProxyAttributeSvcAccountRequest,
3035                            >,
3036                        ) -> Self::Future {
3037                            let inner = Arc::clone(&self.0);
3038                            let fut = async move {
3039                                <T as ServiceAccountService>::add_data_proxy_attribute_svc_account(
3040                                        &inner,
3041                                        request,
3042                                    )
3043                                    .await
3044                            };
3045                            Box::pin(fut)
3046                        }
3047                    }
3048                    let accept_compression_encodings = self.accept_compression_encodings;
3049                    let send_compression_encodings = self.send_compression_encodings;
3050                    let max_decoding_message_size = self.max_decoding_message_size;
3051                    let max_encoding_message_size = self.max_encoding_message_size;
3052                    let inner = self.inner.clone();
3053                    let fut = async move {
3054                        let inner = inner.0;
3055                        let method = AddDataProxyAttributeSvcAccountSvc(inner);
3056                        let codec = tonic::codec::ProstCodec::default();
3057                        let mut grpc = tonic::server::Grpc::new(codec)
3058                            .apply_compression_config(
3059                                accept_compression_encodings,
3060                                send_compression_encodings,
3061                            )
3062                            .apply_max_message_size_config(
3063                                max_decoding_message_size,
3064                                max_encoding_message_size,
3065                            );
3066                        let res = grpc.unary(method, req).await;
3067                        Ok(res)
3068                    };
3069                    Box::pin(fut)
3070                }
3071                "/aruna.api.storage.services.v2.ServiceAccountService/RemoveDataProxyAttributeSvcAccount" => {
3072                    #[allow(non_camel_case_types)]
3073                    struct RemoveDataProxyAttributeSvcAccountSvc<
3074                        T: ServiceAccountService,
3075                    >(
3076                        pub Arc<T>,
3077                    );
3078                    impl<
3079                        T: ServiceAccountService,
3080                    > tonic::server::UnaryService<
3081                        super::RemoveDataProxyAttributeSvcAccountRequest,
3082                    > for RemoveDataProxyAttributeSvcAccountSvc<T> {
3083                        type Response = super::RemoveDataProxyAttributeSvcAccountResponse;
3084                        type Future = BoxFuture<
3085                            tonic::Response<Self::Response>,
3086                            tonic::Status,
3087                        >;
3088                        fn call(
3089                            &mut self,
3090                            request: tonic::Request<
3091                                super::RemoveDataProxyAttributeSvcAccountRequest,
3092                            >,
3093                        ) -> Self::Future {
3094                            let inner = Arc::clone(&self.0);
3095                            let fut = async move {
3096                                <T as ServiceAccountService>::remove_data_proxy_attribute_svc_account(
3097                                        &inner,
3098                                        request,
3099                                    )
3100                                    .await
3101                            };
3102                            Box::pin(fut)
3103                        }
3104                    }
3105                    let accept_compression_encodings = self.accept_compression_encodings;
3106                    let send_compression_encodings = self.send_compression_encodings;
3107                    let max_decoding_message_size = self.max_decoding_message_size;
3108                    let max_encoding_message_size = self.max_encoding_message_size;
3109                    let inner = self.inner.clone();
3110                    let fut = async move {
3111                        let inner = inner.0;
3112                        let method = RemoveDataProxyAttributeSvcAccountSvc(inner);
3113                        let codec = tonic::codec::ProstCodec::default();
3114                        let mut grpc = tonic::server::Grpc::new(codec)
3115                            .apply_compression_config(
3116                                accept_compression_encodings,
3117                                send_compression_encodings,
3118                            )
3119                            .apply_max_message_size_config(
3120                                max_decoding_message_size,
3121                                max_encoding_message_size,
3122                            );
3123                        let res = grpc.unary(method, req).await;
3124                        Ok(res)
3125                    };
3126                    Box::pin(fut)
3127                }
3128                _ => {
3129                    Box::pin(async move {
3130                        Ok(
3131                            http::Response::builder()
3132                                .status(200)
3133                                .header("grpc-status", "12")
3134                                .header("content-type", "application/grpc")
3135                                .body(empty_body())
3136                                .unwrap(),
3137                        )
3138                    })
3139                }
3140            }
3141        }
3142    }
3143    impl<T: ServiceAccountService> Clone for ServiceAccountServiceServer<T> {
3144        fn clone(&self) -> Self {
3145            let inner = self.inner.clone();
3146            Self {
3147                inner,
3148                accept_compression_encodings: self.accept_compression_encodings,
3149                send_compression_encodings: self.send_compression_encodings,
3150                max_decoding_message_size: self.max_decoding_message_size,
3151                max_encoding_message_size: self.max_encoding_message_size,
3152            }
3153        }
3154    }
3155    impl<T: ServiceAccountService> Clone for _Inner<T> {
3156        fn clone(&self) -> Self {
3157            Self(Arc::clone(&self.0))
3158        }
3159    }
3160    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
3161        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3162            write!(f, "{:?}", self.0)
3163        }
3164    }
3165    impl<T: ServiceAccountService> tonic::server::NamedService
3166    for ServiceAccountServiceServer<T> {
3167        const NAME: &'static str = "aruna.api.storage.services.v2.ServiceAccountService";
3168    }
3169}
3170#[derive(serde::Deserialize, serde::Serialize)]
3171#[allow(clippy::derive_partial_eq_without_eq)]
3172#[derive(Clone, PartialEq, ::prost::Message)]
3173pub struct CreateCollectionRequest {
3174    /// collection name
3175    #[prost(string, tag = "1")]
3176    pub name: ::prost::alloc::string::String,
3177    #[prost(string, tag = "9")]
3178    pub title: ::prost::alloc::string::String,
3179    /// description
3180    #[prost(string, tag = "2")]
3181    pub description: ::prost::alloc::string::String,
3182    /// collection specific labels / hooks
3183    #[prost(message, repeated, tag = "3")]
3184    pub key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
3185    /// Internal /External relations (URLs / IDs from external sources)
3186    #[prost(message, repeated, tag = "4")]
3187    pub relations: ::prost::alloc::vec::Vec<super::super::models::v2::Relation>,
3188    /// DataClass
3189    #[prost(enumeration = "super::super::models::v2::DataClass", tag = "5")]
3190    pub data_class: i32,
3191    #[prost(string, optional, tag = "7")]
3192    pub metadata_license_tag: ::core::option::Option<::prost::alloc::string::String>,
3193    #[prost(string, optional, tag = "8")]
3194    pub default_data_license_tag: ::core::option::Option<::prost::alloc::string::String>,
3195    #[prost(message, repeated, tag = "10")]
3196    pub authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
3197    /// Parent_id MUST be project
3198    #[prost(oneof = "create_collection_request::Parent", tags = "6")]
3199    pub parent: ::core::option::Option<create_collection_request::Parent>,
3200}
3201/// Nested message and enum types in `CreateCollectionRequest`.
3202pub mod create_collection_request {
3203    /// Parent_id MUST be project
3204    #[derive(serde::Deserialize, serde::Serialize)]
3205    #[allow(clippy::derive_partial_eq_without_eq)]
3206    #[derive(Clone, PartialEq, ::prost::Oneof)]
3207    pub enum Parent {
3208        #[prost(string, tag = "6")]
3209        ProjectId(::prost::alloc::string::String),
3210    }
3211}
3212#[derive(serde::Deserialize, serde::Serialize)]
3213#[allow(clippy::derive_partial_eq_without_eq)]
3214#[derive(Clone, PartialEq, ::prost::Message)]
3215pub struct CreateCollectionResponse {
3216    /// The new collection_id
3217    #[prost(message, optional, tag = "1")]
3218    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3219}
3220#[derive(serde::Deserialize, serde::Serialize)]
3221#[allow(clippy::derive_partial_eq_without_eq)]
3222#[derive(Clone, PartialEq, ::prost::Message)]
3223pub struct GetCollectionRequest {
3224    /// Requested id
3225    #[prost(string, tag = "1")]
3226    pub collection_id: ::prost::alloc::string::String,
3227}
3228#[derive(serde::Deserialize, serde::Serialize)]
3229#[allow(clippy::derive_partial_eq_without_eq)]
3230#[derive(Clone, PartialEq, ::prost::Message)]
3231pub struct GetCollectionResponse {
3232    /// Overview of the requested collection
3233    #[prost(message, optional, tag = "1")]
3234    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3235}
3236#[derive(serde::Deserialize, serde::Serialize)]
3237#[allow(clippy::derive_partial_eq_without_eq)]
3238#[derive(Clone, PartialEq, ::prost::Message)]
3239pub struct GetCollectionsRequest {
3240    #[prost(string, repeated, tag = "1")]
3241    pub collection_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
3242}
3243#[derive(serde::Deserialize, serde::Serialize)]
3244#[allow(clippy::derive_partial_eq_without_eq)]
3245#[derive(Clone, PartialEq, ::prost::Message)]
3246pub struct GetCollectionsResponse {
3247    /// List of collection overviews
3248    #[prost(message, repeated, tag = "1")]
3249    pub collections: ::prost::alloc::vec::Vec<super::super::models::v2::Collection>,
3250}
3251#[derive(serde::Deserialize, serde::Serialize)]
3252#[allow(clippy::derive_partial_eq_without_eq)]
3253#[derive(Clone, PartialEq, ::prost::Message)]
3254pub struct DeleteCollectionRequest {
3255    #[prost(string, tag = "1")]
3256    pub collection_id: ::prost::alloc::string::String,
3257}
3258#[derive(serde::Deserialize, serde::Serialize)]
3259#[allow(clippy::derive_partial_eq_without_eq)]
3260#[derive(Clone, PartialEq, ::prost::Message)]
3261pub struct DeleteCollectionResponse {}
3262#[derive(serde::Deserialize, serde::Serialize)]
3263#[allow(clippy::derive_partial_eq_without_eq)]
3264#[derive(Clone, PartialEq, ::prost::Message)]
3265pub struct UpdateCollectionNameRequest {
3266    #[prost(string, tag = "1")]
3267    pub collection_id: ::prost::alloc::string::String,
3268    #[prost(string, tag = "2")]
3269    pub name: ::prost::alloc::string::String,
3270}
3271#[derive(serde::Deserialize, serde::Serialize)]
3272#[allow(clippy::derive_partial_eq_without_eq)]
3273#[derive(Clone, PartialEq, ::prost::Message)]
3274pub struct UpdateCollectionNameResponse {
3275    #[prost(message, optional, tag = "1")]
3276    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3277}
3278#[derive(serde::Deserialize, serde::Serialize)]
3279#[allow(clippy::derive_partial_eq_without_eq)]
3280#[derive(Clone, PartialEq, ::prost::Message)]
3281pub struct UpdateCollectionDescriptionRequest {
3282    #[prost(string, tag = "1")]
3283    pub collection_id: ::prost::alloc::string::String,
3284    #[prost(string, tag = "2")]
3285    pub description: ::prost::alloc::string::String,
3286}
3287#[derive(serde::Deserialize, serde::Serialize)]
3288#[allow(clippy::derive_partial_eq_without_eq)]
3289#[derive(Clone, PartialEq, ::prost::Message)]
3290pub struct UpdateCollectionDescriptionResponse {
3291    #[prost(message, optional, tag = "1")]
3292    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3293}
3294#[derive(serde::Deserialize, serde::Serialize)]
3295#[allow(clippy::derive_partial_eq_without_eq)]
3296#[derive(Clone, PartialEq, ::prost::Message)]
3297pub struct UpdateCollectionKeyValuesRequest {
3298    #[prost(string, tag = "1")]
3299    pub collection_id: ::prost::alloc::string::String,
3300    #[prost(message, repeated, tag = "2")]
3301    pub add_key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
3302    #[prost(message, repeated, tag = "3")]
3303    pub remove_key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
3304}
3305#[derive(serde::Deserialize, serde::Serialize)]
3306#[allow(clippy::derive_partial_eq_without_eq)]
3307#[derive(Clone, PartialEq, ::prost::Message)]
3308pub struct UpdateCollectionKeyValuesResponse {
3309    #[prost(message, optional, tag = "1")]
3310    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3311}
3312#[derive(serde::Deserialize, serde::Serialize)]
3313#[allow(clippy::derive_partial_eq_without_eq)]
3314#[derive(Clone, PartialEq, ::prost::Message)]
3315pub struct UpdateCollectionDataClassRequest {
3316    #[prost(string, tag = "1")]
3317    pub collection_id: ::prost::alloc::string::String,
3318    #[prost(enumeration = "super::super::models::v2::DataClass", tag = "2")]
3319    pub data_class: i32,
3320}
3321#[derive(serde::Deserialize, serde::Serialize)]
3322#[allow(clippy::derive_partial_eq_without_eq)]
3323#[derive(Clone, PartialEq, ::prost::Message)]
3324pub struct UpdateCollectionDataClassResponse {
3325    #[prost(message, optional, tag = "1")]
3326    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3327}
3328#[derive(serde::Deserialize, serde::Serialize)]
3329#[allow(clippy::derive_partial_eq_without_eq)]
3330#[derive(Clone, PartialEq, ::prost::Message)]
3331pub struct SnapshotCollectionRequest {
3332    #[prost(string, tag = "1")]
3333    pub collection_id: ::prost::alloc::string::String,
3334}
3335#[derive(serde::Deserialize, serde::Serialize)]
3336#[allow(clippy::derive_partial_eq_without_eq)]
3337#[derive(Clone, PartialEq, ::prost::Message)]
3338pub struct SnapshotCollectionResponse {
3339    /// This collection will be returned via an Persistent Identifier! Updates will be impossible
3340    #[prost(message, optional, tag = "1")]
3341    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3342}
3343#[derive(serde::Deserialize, serde::Serialize)]
3344#[allow(clippy::derive_partial_eq_without_eq)]
3345#[derive(Clone, PartialEq, ::prost::Message)]
3346pub struct UpdateCollectionLicensesRequest {
3347    #[prost(string, tag = "1")]
3348    pub collection_id: ::prost::alloc::string::String,
3349    #[prost(string, tag = "2")]
3350    pub metadata_license_tag: ::prost::alloc::string::String,
3351    #[prost(string, tag = "3")]
3352    pub default_data_license_tag: ::prost::alloc::string::String,
3353}
3354#[derive(serde::Deserialize, serde::Serialize)]
3355#[allow(clippy::derive_partial_eq_without_eq)]
3356#[derive(Clone, PartialEq, ::prost::Message)]
3357pub struct UpdateCollectionLicensesResponse {
3358    #[prost(message, optional, tag = "1")]
3359    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3360}
3361#[derive(serde::Deserialize, serde::Serialize)]
3362#[allow(clippy::derive_partial_eq_without_eq)]
3363#[derive(Clone, PartialEq, ::prost::Message)]
3364pub struct UpdateCollectionTitleRequest {
3365    #[prost(string, tag = "1")]
3366    pub collection_id: ::prost::alloc::string::String,
3367    #[prost(string, tag = "2")]
3368    pub title: ::prost::alloc::string::String,
3369}
3370#[derive(serde::Deserialize, serde::Serialize)]
3371#[allow(clippy::derive_partial_eq_without_eq)]
3372#[derive(Clone, PartialEq, ::prost::Message)]
3373pub struct UpdateCollectionTitleResponse {
3374    #[prost(message, optional, tag = "1")]
3375    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3376}
3377#[derive(serde::Deserialize, serde::Serialize)]
3378#[allow(clippy::derive_partial_eq_without_eq)]
3379#[derive(Clone, PartialEq, ::prost::Message)]
3380pub struct UpdateCollectionAuthorsRequest {
3381    #[prost(string, tag = "1")]
3382    pub collection_id: ::prost::alloc::string::String,
3383    #[prost(message, repeated, tag = "2")]
3384    pub add_authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
3385    #[prost(message, repeated, tag = "3")]
3386    pub remove_authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
3387}
3388#[derive(serde::Deserialize, serde::Serialize)]
3389#[allow(clippy::derive_partial_eq_without_eq)]
3390#[derive(Clone, PartialEq, ::prost::Message)]
3391pub struct UpdateCollectionAuthorsResponse {
3392    #[prost(message, optional, tag = "1")]
3393    pub collection: ::core::option::Option<super::super::models::v2::Collection>,
3394}
3395/// Generated client implementations.
3396pub mod collection_service_client {
3397    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
3398    use tonic::codegen::*;
3399    use tonic::codegen::http::Uri;
3400    /// CollectionService
3401    ///
3402    /// Status: BETA
3403    ///
3404    /// Contains all methods that get/create or update Collection and associated resources
3405    #[derive(Debug, Clone)]
3406    pub struct CollectionServiceClient<T> {
3407        inner: tonic::client::Grpc<T>,
3408    }
3409    impl CollectionServiceClient<tonic::transport::Channel> {
3410        /// Attempt to create a new client by connecting to a given endpoint.
3411        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
3412        where
3413            D: TryInto<tonic::transport::Endpoint>,
3414            D::Error: Into<StdError>,
3415        {
3416            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
3417            Ok(Self::new(conn))
3418        }
3419    }
3420    impl<T> CollectionServiceClient<T>
3421    where
3422        T: tonic::client::GrpcService<tonic::body::BoxBody>,
3423        T::Error: Into<StdError>,
3424        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
3425        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
3426    {
3427        pub fn new(inner: T) -> Self {
3428            let inner = tonic::client::Grpc::new(inner);
3429            Self { inner }
3430        }
3431        pub fn with_origin(inner: T, origin: Uri) -> Self {
3432            let inner = tonic::client::Grpc::with_origin(inner, origin);
3433            Self { inner }
3434        }
3435        pub fn with_interceptor<F>(
3436            inner: T,
3437            interceptor: F,
3438        ) -> CollectionServiceClient<InterceptedService<T, F>>
3439        where
3440            F: tonic::service::Interceptor,
3441            T::ResponseBody: Default,
3442            T: tonic::codegen::Service<
3443                http::Request<tonic::body::BoxBody>,
3444                Response = http::Response<
3445                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
3446                >,
3447            >,
3448            <T as tonic::codegen::Service<
3449                http::Request<tonic::body::BoxBody>,
3450            >>::Error: Into<StdError> + Send + Sync,
3451        {
3452            CollectionServiceClient::new(InterceptedService::new(inner, interceptor))
3453        }
3454        /// Compress requests with the given encoding.
3455        ///
3456        /// This requires the server to support it otherwise it might respond with an
3457        /// error.
3458        #[must_use]
3459        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
3460            self.inner = self.inner.send_compressed(encoding);
3461            self
3462        }
3463        /// Enable decompressing responses.
3464        #[must_use]
3465        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
3466            self.inner = self.inner.accept_compressed(encoding);
3467            self
3468        }
3469        /// Limits the maximum size of a decoded message.
3470        ///
3471        /// Default: `4MB`
3472        #[must_use]
3473        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
3474            self.inner = self.inner.max_decoding_message_size(limit);
3475            self
3476        }
3477        /// Limits the maximum size of an encoded message.
3478        ///
3479        /// Default: `usize::MAX`
3480        #[must_use]
3481        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
3482            self.inner = self.inner.max_encoding_message_size(limit);
3483            self
3484        }
3485        /// CreateNewCollection
3486        ///
3487        /// Status: BETA
3488        ///
3489        /// creates a new Collection
3490        pub async fn create_collection(
3491            &mut self,
3492            request: impl tonic::IntoRequest<super::CreateCollectionRequest>,
3493        ) -> std::result::Result<
3494            tonic::Response<super::CreateCollectionResponse>,
3495            tonic::Status,
3496        > {
3497            self.inner
3498                .ready()
3499                .await
3500                .map_err(|e| {
3501                    tonic::Status::new(
3502                        tonic::Code::Unknown,
3503                        format!("Service was not ready: {}", e.into()),
3504                    )
3505                })?;
3506            let codec = tonic::codec::ProstCodec::default();
3507            let path = http::uri::PathAndQuery::from_static(
3508                "/aruna.api.storage.services.v2.CollectionService/CreateCollection",
3509            );
3510            let mut req = request.into_request();
3511            req.extensions_mut()
3512                .insert(
3513                    GrpcMethod::new(
3514                        "aruna.api.storage.services.v2.CollectionService",
3515                        "CreateCollection",
3516                    ),
3517                );
3518            self.inner.unary(req, path, codec).await
3519        }
3520        /// GetCollection
3521        ///
3522        /// Status: BETA
3523        ///
3524        /// Request a specific collection by ID
3525        pub async fn get_collection(
3526            &mut self,
3527            request: impl tonic::IntoRequest<super::GetCollectionRequest>,
3528        ) -> std::result::Result<
3529            tonic::Response<super::GetCollectionResponse>,
3530            tonic::Status,
3531        > {
3532            self.inner
3533                .ready()
3534                .await
3535                .map_err(|e| {
3536                    tonic::Status::new(
3537                        tonic::Code::Unknown,
3538                        format!("Service was not ready: {}", e.into()),
3539                    )
3540                })?;
3541            let codec = tonic::codec::ProstCodec::default();
3542            let path = http::uri::PathAndQuery::from_static(
3543                "/aruna.api.storage.services.v2.CollectionService/GetCollection",
3544            );
3545            let mut req = request.into_request();
3546            req.extensions_mut()
3547                .insert(
3548                    GrpcMethod::new(
3549                        "aruna.api.storage.services.v2.CollectionService",
3550                        "GetCollection",
3551                    ),
3552                );
3553            self.inner.unary(req, path, codec).await
3554        }
3555        /// GetCollections
3556        ///
3557        /// Status: BETA
3558        ///
3559        /// Queries multiple collections by ID
3560        pub async fn get_collections(
3561            &mut self,
3562            request: impl tonic::IntoRequest<super::GetCollectionsRequest>,
3563        ) -> std::result::Result<
3564            tonic::Response<super::GetCollectionsResponse>,
3565            tonic::Status,
3566        > {
3567            self.inner
3568                .ready()
3569                .await
3570                .map_err(|e| {
3571                    tonic::Status::new(
3572                        tonic::Code::Unknown,
3573                        format!("Service was not ready: {}", e.into()),
3574                    )
3575                })?;
3576            let codec = tonic::codec::ProstCodec::default();
3577            let path = http::uri::PathAndQuery::from_static(
3578                "/aruna.api.storage.services.v2.CollectionService/GetCollections",
3579            );
3580            let mut req = request.into_request();
3581            req.extensions_mut()
3582                .insert(
3583                    GrpcMethod::new(
3584                        "aruna.api.storage.services.v2.CollectionService",
3585                        "GetCollections",
3586                    ),
3587                );
3588            self.inner.unary(req, path, codec).await
3589        }
3590        /// DeleteCollection
3591        ///
3592        /// Status: STABLE
3593        ///
3594        /// This request deletes the collection.
3595        pub async fn delete_collection(
3596            &mut self,
3597            request: impl tonic::IntoRequest<super::DeleteCollectionRequest>,
3598        ) -> std::result::Result<
3599            tonic::Response<super::DeleteCollectionResponse>,
3600            tonic::Status,
3601        > {
3602            self.inner
3603                .ready()
3604                .await
3605                .map_err(|e| {
3606                    tonic::Status::new(
3607                        tonic::Code::Unknown,
3608                        format!("Service was not ready: {}", e.into()),
3609                    )
3610                })?;
3611            let codec = tonic::codec::ProstCodec::default();
3612            let path = http::uri::PathAndQuery::from_static(
3613                "/aruna.api.storage.services.v2.CollectionService/DeleteCollection",
3614            );
3615            let mut req = request.into_request();
3616            req.extensions_mut()
3617                .insert(
3618                    GrpcMethod::new(
3619                        "aruna.api.storage.services.v2.CollectionService",
3620                        "DeleteCollection",
3621                    ),
3622                );
3623            self.inner.unary(req, path, codec).await
3624        }
3625        /// UpdateCollectionName
3626        ///
3627        /// Status: BETA
3628        ///
3629        /// Updates the collection name. Caveat! Will rename the "s3 bucket" for data proxies!
3630        pub async fn update_collection_name(
3631            &mut self,
3632            request: impl tonic::IntoRequest<super::UpdateCollectionNameRequest>,
3633        ) -> std::result::Result<
3634            tonic::Response<super::UpdateCollectionNameResponse>,
3635            tonic::Status,
3636        > {
3637            self.inner
3638                .ready()
3639                .await
3640                .map_err(|e| {
3641                    tonic::Status::new(
3642                        tonic::Code::Unknown,
3643                        format!("Service was not ready: {}", e.into()),
3644                    )
3645                })?;
3646            let codec = tonic::codec::ProstCodec::default();
3647            let path = http::uri::PathAndQuery::from_static(
3648                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionName",
3649            );
3650            let mut req = request.into_request();
3651            req.extensions_mut()
3652                .insert(
3653                    GrpcMethod::new(
3654                        "aruna.api.storage.services.v2.CollectionService",
3655                        "UpdateCollectionName",
3656                    ),
3657                );
3658            self.inner.unary(req, path, codec).await
3659        }
3660        /// UpdateCollectionDescription
3661        ///
3662        /// Status: BETA
3663        ///
3664        /// Updates the collection description.
3665        pub async fn update_collection_description(
3666            &mut self,
3667            request: impl tonic::IntoRequest<super::UpdateCollectionDescriptionRequest>,
3668        ) -> std::result::Result<
3669            tonic::Response<super::UpdateCollectionDescriptionResponse>,
3670            tonic::Status,
3671        > {
3672            self.inner
3673                .ready()
3674                .await
3675                .map_err(|e| {
3676                    tonic::Status::new(
3677                        tonic::Code::Unknown,
3678                        format!("Service was not ready: {}", e.into()),
3679                    )
3680                })?;
3681            let codec = tonic::codec::ProstCodec::default();
3682            let path = http::uri::PathAndQuery::from_static(
3683                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionDescription",
3684            );
3685            let mut req = request.into_request();
3686            req.extensions_mut()
3687                .insert(
3688                    GrpcMethod::new(
3689                        "aruna.api.storage.services.v2.CollectionService",
3690                        "UpdateCollectionDescription",
3691                    ),
3692                );
3693            self.inner.unary(req, path, codec).await
3694        }
3695        /// UpdateCollectionKeyValues
3696        ///
3697        /// Status: BETA
3698        ///
3699        /// Updates the collection key values.
3700        pub async fn update_collection_key_values(
3701            &mut self,
3702            request: impl tonic::IntoRequest<super::UpdateCollectionKeyValuesRequest>,
3703        ) -> std::result::Result<
3704            tonic::Response<super::UpdateCollectionKeyValuesResponse>,
3705            tonic::Status,
3706        > {
3707            self.inner
3708                .ready()
3709                .await
3710                .map_err(|e| {
3711                    tonic::Status::new(
3712                        tonic::Code::Unknown,
3713                        format!("Service was not ready: {}", e.into()),
3714                    )
3715                })?;
3716            let codec = tonic::codec::ProstCodec::default();
3717            let path = http::uri::PathAndQuery::from_static(
3718                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionKeyValues",
3719            );
3720            let mut req = request.into_request();
3721            req.extensions_mut()
3722                .insert(
3723                    GrpcMethod::new(
3724                        "aruna.api.storage.services.v2.CollectionService",
3725                        "UpdateCollectionKeyValues",
3726                    ),
3727                );
3728            self.inner.unary(req, path, codec).await
3729        }
3730        /// UpdateCollectionDataClass
3731        ///
3732        /// Status: BETA
3733        ///
3734        /// Updates the collection name. All (meta) data will be overwritten.
3735        pub async fn update_collection_data_class(
3736            &mut self,
3737            request: impl tonic::IntoRequest<super::UpdateCollectionDataClassRequest>,
3738        ) -> std::result::Result<
3739            tonic::Response<super::UpdateCollectionDataClassResponse>,
3740            tonic::Status,
3741        > {
3742            self.inner
3743                .ready()
3744                .await
3745                .map_err(|e| {
3746                    tonic::Status::new(
3747                        tonic::Code::Unknown,
3748                        format!("Service was not ready: {}", e.into()),
3749                    )
3750                })?;
3751            let codec = tonic::codec::ProstCodec::default();
3752            let path = http::uri::PathAndQuery::from_static(
3753                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionDataClass",
3754            );
3755            let mut req = request.into_request();
3756            req.extensions_mut()
3757                .insert(
3758                    GrpcMethod::new(
3759                        "aruna.api.storage.services.v2.CollectionService",
3760                        "UpdateCollectionDataClass",
3761                    ),
3762                );
3763            self.inner.unary(req, path, codec).await
3764        }
3765        /// SnapshotCollectionRequest
3766        ///
3767        /// Status: BETA
3768        ///
3769        /// Archives the full collection, rendering all downstream relations immutable
3770        pub async fn snapshot_collection(
3771            &mut self,
3772            request: impl tonic::IntoRequest<super::SnapshotCollectionRequest>,
3773        ) -> std::result::Result<
3774            tonic::Response<super::SnapshotCollectionResponse>,
3775            tonic::Status,
3776        > {
3777            self.inner
3778                .ready()
3779                .await
3780                .map_err(|e| {
3781                    tonic::Status::new(
3782                        tonic::Code::Unknown,
3783                        format!("Service was not ready: {}", e.into()),
3784                    )
3785                })?;
3786            let codec = tonic::codec::ProstCodec::default();
3787            let path = http::uri::PathAndQuery::from_static(
3788                "/aruna.api.storage.services.v2.CollectionService/SnapshotCollection",
3789            );
3790            let mut req = request.into_request();
3791            req.extensions_mut()
3792                .insert(
3793                    GrpcMethod::new(
3794                        "aruna.api.storage.services.v2.CollectionService",
3795                        "SnapshotCollection",
3796                    ),
3797                );
3798            self.inner.unary(req, path, codec).await
3799        }
3800        /// UpdateLicenses
3801        ///
3802        /// Status: BETA
3803        ///
3804        /// Updates the collections metadata license and/or default data license.
3805        pub async fn update_collection_licenses(
3806            &mut self,
3807            request: impl tonic::IntoRequest<super::UpdateCollectionLicensesRequest>,
3808        ) -> std::result::Result<
3809            tonic::Response<super::UpdateCollectionLicensesResponse>,
3810            tonic::Status,
3811        > {
3812            self.inner
3813                .ready()
3814                .await
3815                .map_err(|e| {
3816                    tonic::Status::new(
3817                        tonic::Code::Unknown,
3818                        format!("Service was not ready: {}", e.into()),
3819                    )
3820                })?;
3821            let codec = tonic::codec::ProstCodec::default();
3822            let path = http::uri::PathAndQuery::from_static(
3823                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionLicenses",
3824            );
3825            let mut req = request.into_request();
3826            req.extensions_mut()
3827                .insert(
3828                    GrpcMethod::new(
3829                        "aruna.api.storage.services.v2.CollectionService",
3830                        "UpdateCollectionLicenses",
3831                    ),
3832                );
3833            self.inner.unary(req, path, codec).await
3834        }
3835        /// UpdateTitle
3836        ///
3837        /// Status: ALPHA
3838        ///
3839        /// Updates the collections metadata title.
3840        pub async fn update_collection_title(
3841            &mut self,
3842            request: impl tonic::IntoRequest<super::UpdateCollectionTitleRequest>,
3843        ) -> std::result::Result<
3844            tonic::Response<super::UpdateCollectionTitleResponse>,
3845            tonic::Status,
3846        > {
3847            self.inner
3848                .ready()
3849                .await
3850                .map_err(|e| {
3851                    tonic::Status::new(
3852                        tonic::Code::Unknown,
3853                        format!("Service was not ready: {}", e.into()),
3854                    )
3855                })?;
3856            let codec = tonic::codec::ProstCodec::default();
3857            let path = http::uri::PathAndQuery::from_static(
3858                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionTitle",
3859            );
3860            let mut req = request.into_request();
3861            req.extensions_mut()
3862                .insert(
3863                    GrpcMethod::new(
3864                        "aruna.api.storage.services.v2.CollectionService",
3865                        "UpdateCollectionTitle",
3866                    ),
3867                );
3868            self.inner.unary(req, path, codec).await
3869        }
3870        /// UpdateAuthors
3871        ///
3872        /// Status: ALPHA
3873        ///
3874        /// Updates the collections metadata title.
3875        pub async fn update_collection_authors(
3876            &mut self,
3877            request: impl tonic::IntoRequest<super::UpdateCollectionAuthorsRequest>,
3878        ) -> std::result::Result<
3879            tonic::Response<super::UpdateCollectionAuthorsResponse>,
3880            tonic::Status,
3881        > {
3882            self.inner
3883                .ready()
3884                .await
3885                .map_err(|e| {
3886                    tonic::Status::new(
3887                        tonic::Code::Unknown,
3888                        format!("Service was not ready: {}", e.into()),
3889                    )
3890                })?;
3891            let codec = tonic::codec::ProstCodec::default();
3892            let path = http::uri::PathAndQuery::from_static(
3893                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionAuthors",
3894            );
3895            let mut req = request.into_request();
3896            req.extensions_mut()
3897                .insert(
3898                    GrpcMethod::new(
3899                        "aruna.api.storage.services.v2.CollectionService",
3900                        "UpdateCollectionAuthors",
3901                    ),
3902                );
3903            self.inner.unary(req, path, codec).await
3904        }
3905    }
3906}
3907/// Generated server implementations.
3908pub mod collection_service_server {
3909    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
3910    use tonic::codegen::*;
3911    /// Generated trait containing gRPC methods that should be implemented for use with CollectionServiceServer.
3912    #[async_trait]
3913    pub trait CollectionService: Send + Sync + 'static {
3914        /// CreateNewCollection
3915        ///
3916        /// Status: BETA
3917        ///
3918        /// creates a new Collection
3919        async fn create_collection(
3920            &self,
3921            request: tonic::Request<super::CreateCollectionRequest>,
3922        ) -> std::result::Result<
3923            tonic::Response<super::CreateCollectionResponse>,
3924            tonic::Status,
3925        >;
3926        /// GetCollection
3927        ///
3928        /// Status: BETA
3929        ///
3930        /// Request a specific collection by ID
3931        async fn get_collection(
3932            &self,
3933            request: tonic::Request<super::GetCollectionRequest>,
3934        ) -> std::result::Result<
3935            tonic::Response<super::GetCollectionResponse>,
3936            tonic::Status,
3937        >;
3938        /// GetCollections
3939        ///
3940        /// Status: BETA
3941        ///
3942        /// Queries multiple collections by ID
3943        async fn get_collections(
3944            &self,
3945            request: tonic::Request<super::GetCollectionsRequest>,
3946        ) -> std::result::Result<
3947            tonic::Response<super::GetCollectionsResponse>,
3948            tonic::Status,
3949        >;
3950        /// DeleteCollection
3951        ///
3952        /// Status: STABLE
3953        ///
3954        /// This request deletes the collection.
3955        async fn delete_collection(
3956            &self,
3957            request: tonic::Request<super::DeleteCollectionRequest>,
3958        ) -> std::result::Result<
3959            tonic::Response<super::DeleteCollectionResponse>,
3960            tonic::Status,
3961        >;
3962        /// UpdateCollectionName
3963        ///
3964        /// Status: BETA
3965        ///
3966        /// Updates the collection name. Caveat! Will rename the "s3 bucket" for data proxies!
3967        async fn update_collection_name(
3968            &self,
3969            request: tonic::Request<super::UpdateCollectionNameRequest>,
3970        ) -> std::result::Result<
3971            tonic::Response<super::UpdateCollectionNameResponse>,
3972            tonic::Status,
3973        >;
3974        /// UpdateCollectionDescription
3975        ///
3976        /// Status: BETA
3977        ///
3978        /// Updates the collection description.
3979        async fn update_collection_description(
3980            &self,
3981            request: tonic::Request<super::UpdateCollectionDescriptionRequest>,
3982        ) -> std::result::Result<
3983            tonic::Response<super::UpdateCollectionDescriptionResponse>,
3984            tonic::Status,
3985        >;
3986        /// UpdateCollectionKeyValues
3987        ///
3988        /// Status: BETA
3989        ///
3990        /// Updates the collection key values.
3991        async fn update_collection_key_values(
3992            &self,
3993            request: tonic::Request<super::UpdateCollectionKeyValuesRequest>,
3994        ) -> std::result::Result<
3995            tonic::Response<super::UpdateCollectionKeyValuesResponse>,
3996            tonic::Status,
3997        >;
3998        /// UpdateCollectionDataClass
3999        ///
4000        /// Status: BETA
4001        ///
4002        /// Updates the collection name. All (meta) data will be overwritten.
4003        async fn update_collection_data_class(
4004            &self,
4005            request: tonic::Request<super::UpdateCollectionDataClassRequest>,
4006        ) -> std::result::Result<
4007            tonic::Response<super::UpdateCollectionDataClassResponse>,
4008            tonic::Status,
4009        >;
4010        /// SnapshotCollectionRequest
4011        ///
4012        /// Status: BETA
4013        ///
4014        /// Archives the full collection, rendering all downstream relations immutable
4015        async fn snapshot_collection(
4016            &self,
4017            request: tonic::Request<super::SnapshotCollectionRequest>,
4018        ) -> std::result::Result<
4019            tonic::Response<super::SnapshotCollectionResponse>,
4020            tonic::Status,
4021        >;
4022        /// UpdateLicenses
4023        ///
4024        /// Status: BETA
4025        ///
4026        /// Updates the collections metadata license and/or default data license.
4027        async fn update_collection_licenses(
4028            &self,
4029            request: tonic::Request<super::UpdateCollectionLicensesRequest>,
4030        ) -> std::result::Result<
4031            tonic::Response<super::UpdateCollectionLicensesResponse>,
4032            tonic::Status,
4033        >;
4034        /// UpdateTitle
4035        ///
4036        /// Status: ALPHA
4037        ///
4038        /// Updates the collections metadata title.
4039        async fn update_collection_title(
4040            &self,
4041            request: tonic::Request<super::UpdateCollectionTitleRequest>,
4042        ) -> std::result::Result<
4043            tonic::Response<super::UpdateCollectionTitleResponse>,
4044            tonic::Status,
4045        >;
4046        /// UpdateAuthors
4047        ///
4048        /// Status: ALPHA
4049        ///
4050        /// Updates the collections metadata title.
4051        async fn update_collection_authors(
4052            &self,
4053            request: tonic::Request<super::UpdateCollectionAuthorsRequest>,
4054        ) -> std::result::Result<
4055            tonic::Response<super::UpdateCollectionAuthorsResponse>,
4056            tonic::Status,
4057        >;
4058    }
4059    /// CollectionService
4060    ///
4061    /// Status: BETA
4062    ///
4063    /// Contains all methods that get/create or update Collection and associated resources
4064    #[derive(Debug)]
4065    pub struct CollectionServiceServer<T: CollectionService> {
4066        inner: _Inner<T>,
4067        accept_compression_encodings: EnabledCompressionEncodings,
4068        send_compression_encodings: EnabledCompressionEncodings,
4069        max_decoding_message_size: Option<usize>,
4070        max_encoding_message_size: Option<usize>,
4071    }
4072    struct _Inner<T>(Arc<T>);
4073    impl<T: CollectionService> CollectionServiceServer<T> {
4074        pub fn new(inner: T) -> Self {
4075            Self::from_arc(Arc::new(inner))
4076        }
4077        pub fn from_arc(inner: Arc<T>) -> Self {
4078            let inner = _Inner(inner);
4079            Self {
4080                inner,
4081                accept_compression_encodings: Default::default(),
4082                send_compression_encodings: Default::default(),
4083                max_decoding_message_size: None,
4084                max_encoding_message_size: None,
4085            }
4086        }
4087        pub fn with_interceptor<F>(
4088            inner: T,
4089            interceptor: F,
4090        ) -> InterceptedService<Self, F>
4091        where
4092            F: tonic::service::Interceptor,
4093        {
4094            InterceptedService::new(Self::new(inner), interceptor)
4095        }
4096        /// Enable decompressing requests with the given encoding.
4097        #[must_use]
4098        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
4099            self.accept_compression_encodings.enable(encoding);
4100            self
4101        }
4102        /// Compress responses with the given encoding, if the client supports it.
4103        #[must_use]
4104        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
4105            self.send_compression_encodings.enable(encoding);
4106            self
4107        }
4108        /// Limits the maximum size of a decoded message.
4109        ///
4110        /// Default: `4MB`
4111        #[must_use]
4112        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
4113            self.max_decoding_message_size = Some(limit);
4114            self
4115        }
4116        /// Limits the maximum size of an encoded message.
4117        ///
4118        /// Default: `usize::MAX`
4119        #[must_use]
4120        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
4121            self.max_encoding_message_size = Some(limit);
4122            self
4123        }
4124    }
4125    impl<T, B> tonic::codegen::Service<http::Request<B>> for CollectionServiceServer<T>
4126    where
4127        T: CollectionService,
4128        B: Body + Send + 'static,
4129        B::Error: Into<StdError> + Send + 'static,
4130    {
4131        type Response = http::Response<tonic::body::BoxBody>;
4132        type Error = std::convert::Infallible;
4133        type Future = BoxFuture<Self::Response, Self::Error>;
4134        fn poll_ready(
4135            &mut self,
4136            _cx: &mut Context<'_>,
4137        ) -> Poll<std::result::Result<(), Self::Error>> {
4138            Poll::Ready(Ok(()))
4139        }
4140        fn call(&mut self, req: http::Request<B>) -> Self::Future {
4141            let inner = self.inner.clone();
4142            match req.uri().path() {
4143                "/aruna.api.storage.services.v2.CollectionService/CreateCollection" => {
4144                    #[allow(non_camel_case_types)]
4145                    struct CreateCollectionSvc<T: CollectionService>(pub Arc<T>);
4146                    impl<
4147                        T: CollectionService,
4148                    > tonic::server::UnaryService<super::CreateCollectionRequest>
4149                    for CreateCollectionSvc<T> {
4150                        type Response = super::CreateCollectionResponse;
4151                        type Future = BoxFuture<
4152                            tonic::Response<Self::Response>,
4153                            tonic::Status,
4154                        >;
4155                        fn call(
4156                            &mut self,
4157                            request: tonic::Request<super::CreateCollectionRequest>,
4158                        ) -> Self::Future {
4159                            let inner = Arc::clone(&self.0);
4160                            let fut = async move {
4161                                <T as CollectionService>::create_collection(&inner, request)
4162                                    .await
4163                            };
4164                            Box::pin(fut)
4165                        }
4166                    }
4167                    let accept_compression_encodings = self.accept_compression_encodings;
4168                    let send_compression_encodings = self.send_compression_encodings;
4169                    let max_decoding_message_size = self.max_decoding_message_size;
4170                    let max_encoding_message_size = self.max_encoding_message_size;
4171                    let inner = self.inner.clone();
4172                    let fut = async move {
4173                        let inner = inner.0;
4174                        let method = CreateCollectionSvc(inner);
4175                        let codec = tonic::codec::ProstCodec::default();
4176                        let mut grpc = tonic::server::Grpc::new(codec)
4177                            .apply_compression_config(
4178                                accept_compression_encodings,
4179                                send_compression_encodings,
4180                            )
4181                            .apply_max_message_size_config(
4182                                max_decoding_message_size,
4183                                max_encoding_message_size,
4184                            );
4185                        let res = grpc.unary(method, req).await;
4186                        Ok(res)
4187                    };
4188                    Box::pin(fut)
4189                }
4190                "/aruna.api.storage.services.v2.CollectionService/GetCollection" => {
4191                    #[allow(non_camel_case_types)]
4192                    struct GetCollectionSvc<T: CollectionService>(pub Arc<T>);
4193                    impl<
4194                        T: CollectionService,
4195                    > tonic::server::UnaryService<super::GetCollectionRequest>
4196                    for GetCollectionSvc<T> {
4197                        type Response = super::GetCollectionResponse;
4198                        type Future = BoxFuture<
4199                            tonic::Response<Self::Response>,
4200                            tonic::Status,
4201                        >;
4202                        fn call(
4203                            &mut self,
4204                            request: tonic::Request<super::GetCollectionRequest>,
4205                        ) -> Self::Future {
4206                            let inner = Arc::clone(&self.0);
4207                            let fut = async move {
4208                                <T as CollectionService>::get_collection(&inner, request)
4209                                    .await
4210                            };
4211                            Box::pin(fut)
4212                        }
4213                    }
4214                    let accept_compression_encodings = self.accept_compression_encodings;
4215                    let send_compression_encodings = self.send_compression_encodings;
4216                    let max_decoding_message_size = self.max_decoding_message_size;
4217                    let max_encoding_message_size = self.max_encoding_message_size;
4218                    let inner = self.inner.clone();
4219                    let fut = async move {
4220                        let inner = inner.0;
4221                        let method = GetCollectionSvc(inner);
4222                        let codec = tonic::codec::ProstCodec::default();
4223                        let mut grpc = tonic::server::Grpc::new(codec)
4224                            .apply_compression_config(
4225                                accept_compression_encodings,
4226                                send_compression_encodings,
4227                            )
4228                            .apply_max_message_size_config(
4229                                max_decoding_message_size,
4230                                max_encoding_message_size,
4231                            );
4232                        let res = grpc.unary(method, req).await;
4233                        Ok(res)
4234                    };
4235                    Box::pin(fut)
4236                }
4237                "/aruna.api.storage.services.v2.CollectionService/GetCollections" => {
4238                    #[allow(non_camel_case_types)]
4239                    struct GetCollectionsSvc<T: CollectionService>(pub Arc<T>);
4240                    impl<
4241                        T: CollectionService,
4242                    > tonic::server::UnaryService<super::GetCollectionsRequest>
4243                    for GetCollectionsSvc<T> {
4244                        type Response = super::GetCollectionsResponse;
4245                        type Future = BoxFuture<
4246                            tonic::Response<Self::Response>,
4247                            tonic::Status,
4248                        >;
4249                        fn call(
4250                            &mut self,
4251                            request: tonic::Request<super::GetCollectionsRequest>,
4252                        ) -> Self::Future {
4253                            let inner = Arc::clone(&self.0);
4254                            let fut = async move {
4255                                <T as CollectionService>::get_collections(&inner, request)
4256                                    .await
4257                            };
4258                            Box::pin(fut)
4259                        }
4260                    }
4261                    let accept_compression_encodings = self.accept_compression_encodings;
4262                    let send_compression_encodings = self.send_compression_encodings;
4263                    let max_decoding_message_size = self.max_decoding_message_size;
4264                    let max_encoding_message_size = self.max_encoding_message_size;
4265                    let inner = self.inner.clone();
4266                    let fut = async move {
4267                        let inner = inner.0;
4268                        let method = GetCollectionsSvc(inner);
4269                        let codec = tonic::codec::ProstCodec::default();
4270                        let mut grpc = tonic::server::Grpc::new(codec)
4271                            .apply_compression_config(
4272                                accept_compression_encodings,
4273                                send_compression_encodings,
4274                            )
4275                            .apply_max_message_size_config(
4276                                max_decoding_message_size,
4277                                max_encoding_message_size,
4278                            );
4279                        let res = grpc.unary(method, req).await;
4280                        Ok(res)
4281                    };
4282                    Box::pin(fut)
4283                }
4284                "/aruna.api.storage.services.v2.CollectionService/DeleteCollection" => {
4285                    #[allow(non_camel_case_types)]
4286                    struct DeleteCollectionSvc<T: CollectionService>(pub Arc<T>);
4287                    impl<
4288                        T: CollectionService,
4289                    > tonic::server::UnaryService<super::DeleteCollectionRequest>
4290                    for DeleteCollectionSvc<T> {
4291                        type Response = super::DeleteCollectionResponse;
4292                        type Future = BoxFuture<
4293                            tonic::Response<Self::Response>,
4294                            tonic::Status,
4295                        >;
4296                        fn call(
4297                            &mut self,
4298                            request: tonic::Request<super::DeleteCollectionRequest>,
4299                        ) -> Self::Future {
4300                            let inner = Arc::clone(&self.0);
4301                            let fut = async move {
4302                                <T as CollectionService>::delete_collection(&inner, request)
4303                                    .await
4304                            };
4305                            Box::pin(fut)
4306                        }
4307                    }
4308                    let accept_compression_encodings = self.accept_compression_encodings;
4309                    let send_compression_encodings = self.send_compression_encodings;
4310                    let max_decoding_message_size = self.max_decoding_message_size;
4311                    let max_encoding_message_size = self.max_encoding_message_size;
4312                    let inner = self.inner.clone();
4313                    let fut = async move {
4314                        let inner = inner.0;
4315                        let method = DeleteCollectionSvc(inner);
4316                        let codec = tonic::codec::ProstCodec::default();
4317                        let mut grpc = tonic::server::Grpc::new(codec)
4318                            .apply_compression_config(
4319                                accept_compression_encodings,
4320                                send_compression_encodings,
4321                            )
4322                            .apply_max_message_size_config(
4323                                max_decoding_message_size,
4324                                max_encoding_message_size,
4325                            );
4326                        let res = grpc.unary(method, req).await;
4327                        Ok(res)
4328                    };
4329                    Box::pin(fut)
4330                }
4331                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionName" => {
4332                    #[allow(non_camel_case_types)]
4333                    struct UpdateCollectionNameSvc<T: CollectionService>(pub Arc<T>);
4334                    impl<
4335                        T: CollectionService,
4336                    > tonic::server::UnaryService<super::UpdateCollectionNameRequest>
4337                    for UpdateCollectionNameSvc<T> {
4338                        type Response = super::UpdateCollectionNameResponse;
4339                        type Future = BoxFuture<
4340                            tonic::Response<Self::Response>,
4341                            tonic::Status,
4342                        >;
4343                        fn call(
4344                            &mut self,
4345                            request: tonic::Request<super::UpdateCollectionNameRequest>,
4346                        ) -> Self::Future {
4347                            let inner = Arc::clone(&self.0);
4348                            let fut = async move {
4349                                <T as CollectionService>::update_collection_name(
4350                                        &inner,
4351                                        request,
4352                                    )
4353                                    .await
4354                            };
4355                            Box::pin(fut)
4356                        }
4357                    }
4358                    let accept_compression_encodings = self.accept_compression_encodings;
4359                    let send_compression_encodings = self.send_compression_encodings;
4360                    let max_decoding_message_size = self.max_decoding_message_size;
4361                    let max_encoding_message_size = self.max_encoding_message_size;
4362                    let inner = self.inner.clone();
4363                    let fut = async move {
4364                        let inner = inner.0;
4365                        let method = UpdateCollectionNameSvc(inner);
4366                        let codec = tonic::codec::ProstCodec::default();
4367                        let mut grpc = tonic::server::Grpc::new(codec)
4368                            .apply_compression_config(
4369                                accept_compression_encodings,
4370                                send_compression_encodings,
4371                            )
4372                            .apply_max_message_size_config(
4373                                max_decoding_message_size,
4374                                max_encoding_message_size,
4375                            );
4376                        let res = grpc.unary(method, req).await;
4377                        Ok(res)
4378                    };
4379                    Box::pin(fut)
4380                }
4381                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionDescription" => {
4382                    #[allow(non_camel_case_types)]
4383                    struct UpdateCollectionDescriptionSvc<T: CollectionService>(
4384                        pub Arc<T>,
4385                    );
4386                    impl<
4387                        T: CollectionService,
4388                    > tonic::server::UnaryService<
4389                        super::UpdateCollectionDescriptionRequest,
4390                    > for UpdateCollectionDescriptionSvc<T> {
4391                        type Response = super::UpdateCollectionDescriptionResponse;
4392                        type Future = BoxFuture<
4393                            tonic::Response<Self::Response>,
4394                            tonic::Status,
4395                        >;
4396                        fn call(
4397                            &mut self,
4398                            request: tonic::Request<
4399                                super::UpdateCollectionDescriptionRequest,
4400                            >,
4401                        ) -> Self::Future {
4402                            let inner = Arc::clone(&self.0);
4403                            let fut = async move {
4404                                <T as CollectionService>::update_collection_description(
4405                                        &inner,
4406                                        request,
4407                                    )
4408                                    .await
4409                            };
4410                            Box::pin(fut)
4411                        }
4412                    }
4413                    let accept_compression_encodings = self.accept_compression_encodings;
4414                    let send_compression_encodings = self.send_compression_encodings;
4415                    let max_decoding_message_size = self.max_decoding_message_size;
4416                    let max_encoding_message_size = self.max_encoding_message_size;
4417                    let inner = self.inner.clone();
4418                    let fut = async move {
4419                        let inner = inner.0;
4420                        let method = UpdateCollectionDescriptionSvc(inner);
4421                        let codec = tonic::codec::ProstCodec::default();
4422                        let mut grpc = tonic::server::Grpc::new(codec)
4423                            .apply_compression_config(
4424                                accept_compression_encodings,
4425                                send_compression_encodings,
4426                            )
4427                            .apply_max_message_size_config(
4428                                max_decoding_message_size,
4429                                max_encoding_message_size,
4430                            );
4431                        let res = grpc.unary(method, req).await;
4432                        Ok(res)
4433                    };
4434                    Box::pin(fut)
4435                }
4436                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionKeyValues" => {
4437                    #[allow(non_camel_case_types)]
4438                    struct UpdateCollectionKeyValuesSvc<T: CollectionService>(
4439                        pub Arc<T>,
4440                    );
4441                    impl<
4442                        T: CollectionService,
4443                    > tonic::server::UnaryService<
4444                        super::UpdateCollectionKeyValuesRequest,
4445                    > for UpdateCollectionKeyValuesSvc<T> {
4446                        type Response = super::UpdateCollectionKeyValuesResponse;
4447                        type Future = BoxFuture<
4448                            tonic::Response<Self::Response>,
4449                            tonic::Status,
4450                        >;
4451                        fn call(
4452                            &mut self,
4453                            request: tonic::Request<
4454                                super::UpdateCollectionKeyValuesRequest,
4455                            >,
4456                        ) -> Self::Future {
4457                            let inner = Arc::clone(&self.0);
4458                            let fut = async move {
4459                                <T as CollectionService>::update_collection_key_values(
4460                                        &inner,
4461                                        request,
4462                                    )
4463                                    .await
4464                            };
4465                            Box::pin(fut)
4466                        }
4467                    }
4468                    let accept_compression_encodings = self.accept_compression_encodings;
4469                    let send_compression_encodings = self.send_compression_encodings;
4470                    let max_decoding_message_size = self.max_decoding_message_size;
4471                    let max_encoding_message_size = self.max_encoding_message_size;
4472                    let inner = self.inner.clone();
4473                    let fut = async move {
4474                        let inner = inner.0;
4475                        let method = UpdateCollectionKeyValuesSvc(inner);
4476                        let codec = tonic::codec::ProstCodec::default();
4477                        let mut grpc = tonic::server::Grpc::new(codec)
4478                            .apply_compression_config(
4479                                accept_compression_encodings,
4480                                send_compression_encodings,
4481                            )
4482                            .apply_max_message_size_config(
4483                                max_decoding_message_size,
4484                                max_encoding_message_size,
4485                            );
4486                        let res = grpc.unary(method, req).await;
4487                        Ok(res)
4488                    };
4489                    Box::pin(fut)
4490                }
4491                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionDataClass" => {
4492                    #[allow(non_camel_case_types)]
4493                    struct UpdateCollectionDataClassSvc<T: CollectionService>(
4494                        pub Arc<T>,
4495                    );
4496                    impl<
4497                        T: CollectionService,
4498                    > tonic::server::UnaryService<
4499                        super::UpdateCollectionDataClassRequest,
4500                    > for UpdateCollectionDataClassSvc<T> {
4501                        type Response = super::UpdateCollectionDataClassResponse;
4502                        type Future = BoxFuture<
4503                            tonic::Response<Self::Response>,
4504                            tonic::Status,
4505                        >;
4506                        fn call(
4507                            &mut self,
4508                            request: tonic::Request<
4509                                super::UpdateCollectionDataClassRequest,
4510                            >,
4511                        ) -> Self::Future {
4512                            let inner = Arc::clone(&self.0);
4513                            let fut = async move {
4514                                <T as CollectionService>::update_collection_data_class(
4515                                        &inner,
4516                                        request,
4517                                    )
4518                                    .await
4519                            };
4520                            Box::pin(fut)
4521                        }
4522                    }
4523                    let accept_compression_encodings = self.accept_compression_encodings;
4524                    let send_compression_encodings = self.send_compression_encodings;
4525                    let max_decoding_message_size = self.max_decoding_message_size;
4526                    let max_encoding_message_size = self.max_encoding_message_size;
4527                    let inner = self.inner.clone();
4528                    let fut = async move {
4529                        let inner = inner.0;
4530                        let method = UpdateCollectionDataClassSvc(inner);
4531                        let codec = tonic::codec::ProstCodec::default();
4532                        let mut grpc = tonic::server::Grpc::new(codec)
4533                            .apply_compression_config(
4534                                accept_compression_encodings,
4535                                send_compression_encodings,
4536                            )
4537                            .apply_max_message_size_config(
4538                                max_decoding_message_size,
4539                                max_encoding_message_size,
4540                            );
4541                        let res = grpc.unary(method, req).await;
4542                        Ok(res)
4543                    };
4544                    Box::pin(fut)
4545                }
4546                "/aruna.api.storage.services.v2.CollectionService/SnapshotCollection" => {
4547                    #[allow(non_camel_case_types)]
4548                    struct SnapshotCollectionSvc<T: CollectionService>(pub Arc<T>);
4549                    impl<
4550                        T: CollectionService,
4551                    > tonic::server::UnaryService<super::SnapshotCollectionRequest>
4552                    for SnapshotCollectionSvc<T> {
4553                        type Response = super::SnapshotCollectionResponse;
4554                        type Future = BoxFuture<
4555                            tonic::Response<Self::Response>,
4556                            tonic::Status,
4557                        >;
4558                        fn call(
4559                            &mut self,
4560                            request: tonic::Request<super::SnapshotCollectionRequest>,
4561                        ) -> Self::Future {
4562                            let inner = Arc::clone(&self.0);
4563                            let fut = async move {
4564                                <T as CollectionService>::snapshot_collection(
4565                                        &inner,
4566                                        request,
4567                                    )
4568                                    .await
4569                            };
4570                            Box::pin(fut)
4571                        }
4572                    }
4573                    let accept_compression_encodings = self.accept_compression_encodings;
4574                    let send_compression_encodings = self.send_compression_encodings;
4575                    let max_decoding_message_size = self.max_decoding_message_size;
4576                    let max_encoding_message_size = self.max_encoding_message_size;
4577                    let inner = self.inner.clone();
4578                    let fut = async move {
4579                        let inner = inner.0;
4580                        let method = SnapshotCollectionSvc(inner);
4581                        let codec = tonic::codec::ProstCodec::default();
4582                        let mut grpc = tonic::server::Grpc::new(codec)
4583                            .apply_compression_config(
4584                                accept_compression_encodings,
4585                                send_compression_encodings,
4586                            )
4587                            .apply_max_message_size_config(
4588                                max_decoding_message_size,
4589                                max_encoding_message_size,
4590                            );
4591                        let res = grpc.unary(method, req).await;
4592                        Ok(res)
4593                    };
4594                    Box::pin(fut)
4595                }
4596                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionLicenses" => {
4597                    #[allow(non_camel_case_types)]
4598                    struct UpdateCollectionLicensesSvc<T: CollectionService>(pub Arc<T>);
4599                    impl<
4600                        T: CollectionService,
4601                    > tonic::server::UnaryService<super::UpdateCollectionLicensesRequest>
4602                    for UpdateCollectionLicensesSvc<T> {
4603                        type Response = super::UpdateCollectionLicensesResponse;
4604                        type Future = BoxFuture<
4605                            tonic::Response<Self::Response>,
4606                            tonic::Status,
4607                        >;
4608                        fn call(
4609                            &mut self,
4610                            request: tonic::Request<
4611                                super::UpdateCollectionLicensesRequest,
4612                            >,
4613                        ) -> Self::Future {
4614                            let inner = Arc::clone(&self.0);
4615                            let fut = async move {
4616                                <T as CollectionService>::update_collection_licenses(
4617                                        &inner,
4618                                        request,
4619                                    )
4620                                    .await
4621                            };
4622                            Box::pin(fut)
4623                        }
4624                    }
4625                    let accept_compression_encodings = self.accept_compression_encodings;
4626                    let send_compression_encodings = self.send_compression_encodings;
4627                    let max_decoding_message_size = self.max_decoding_message_size;
4628                    let max_encoding_message_size = self.max_encoding_message_size;
4629                    let inner = self.inner.clone();
4630                    let fut = async move {
4631                        let inner = inner.0;
4632                        let method = UpdateCollectionLicensesSvc(inner);
4633                        let codec = tonic::codec::ProstCodec::default();
4634                        let mut grpc = tonic::server::Grpc::new(codec)
4635                            .apply_compression_config(
4636                                accept_compression_encodings,
4637                                send_compression_encodings,
4638                            )
4639                            .apply_max_message_size_config(
4640                                max_decoding_message_size,
4641                                max_encoding_message_size,
4642                            );
4643                        let res = grpc.unary(method, req).await;
4644                        Ok(res)
4645                    };
4646                    Box::pin(fut)
4647                }
4648                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionTitle" => {
4649                    #[allow(non_camel_case_types)]
4650                    struct UpdateCollectionTitleSvc<T: CollectionService>(pub Arc<T>);
4651                    impl<
4652                        T: CollectionService,
4653                    > tonic::server::UnaryService<super::UpdateCollectionTitleRequest>
4654                    for UpdateCollectionTitleSvc<T> {
4655                        type Response = super::UpdateCollectionTitleResponse;
4656                        type Future = BoxFuture<
4657                            tonic::Response<Self::Response>,
4658                            tonic::Status,
4659                        >;
4660                        fn call(
4661                            &mut self,
4662                            request: tonic::Request<super::UpdateCollectionTitleRequest>,
4663                        ) -> Self::Future {
4664                            let inner = Arc::clone(&self.0);
4665                            let fut = async move {
4666                                <T as CollectionService>::update_collection_title(
4667                                        &inner,
4668                                        request,
4669                                    )
4670                                    .await
4671                            };
4672                            Box::pin(fut)
4673                        }
4674                    }
4675                    let accept_compression_encodings = self.accept_compression_encodings;
4676                    let send_compression_encodings = self.send_compression_encodings;
4677                    let max_decoding_message_size = self.max_decoding_message_size;
4678                    let max_encoding_message_size = self.max_encoding_message_size;
4679                    let inner = self.inner.clone();
4680                    let fut = async move {
4681                        let inner = inner.0;
4682                        let method = UpdateCollectionTitleSvc(inner);
4683                        let codec = tonic::codec::ProstCodec::default();
4684                        let mut grpc = tonic::server::Grpc::new(codec)
4685                            .apply_compression_config(
4686                                accept_compression_encodings,
4687                                send_compression_encodings,
4688                            )
4689                            .apply_max_message_size_config(
4690                                max_decoding_message_size,
4691                                max_encoding_message_size,
4692                            );
4693                        let res = grpc.unary(method, req).await;
4694                        Ok(res)
4695                    };
4696                    Box::pin(fut)
4697                }
4698                "/aruna.api.storage.services.v2.CollectionService/UpdateCollectionAuthors" => {
4699                    #[allow(non_camel_case_types)]
4700                    struct UpdateCollectionAuthorsSvc<T: CollectionService>(pub Arc<T>);
4701                    impl<
4702                        T: CollectionService,
4703                    > tonic::server::UnaryService<super::UpdateCollectionAuthorsRequest>
4704                    for UpdateCollectionAuthorsSvc<T> {
4705                        type Response = super::UpdateCollectionAuthorsResponse;
4706                        type Future = BoxFuture<
4707                            tonic::Response<Self::Response>,
4708                            tonic::Status,
4709                        >;
4710                        fn call(
4711                            &mut self,
4712                            request: tonic::Request<
4713                                super::UpdateCollectionAuthorsRequest,
4714                            >,
4715                        ) -> Self::Future {
4716                            let inner = Arc::clone(&self.0);
4717                            let fut = async move {
4718                                <T as CollectionService>::update_collection_authors(
4719                                        &inner,
4720                                        request,
4721                                    )
4722                                    .await
4723                            };
4724                            Box::pin(fut)
4725                        }
4726                    }
4727                    let accept_compression_encodings = self.accept_compression_encodings;
4728                    let send_compression_encodings = self.send_compression_encodings;
4729                    let max_decoding_message_size = self.max_decoding_message_size;
4730                    let max_encoding_message_size = self.max_encoding_message_size;
4731                    let inner = self.inner.clone();
4732                    let fut = async move {
4733                        let inner = inner.0;
4734                        let method = UpdateCollectionAuthorsSvc(inner);
4735                        let codec = tonic::codec::ProstCodec::default();
4736                        let mut grpc = tonic::server::Grpc::new(codec)
4737                            .apply_compression_config(
4738                                accept_compression_encodings,
4739                                send_compression_encodings,
4740                            )
4741                            .apply_max_message_size_config(
4742                                max_decoding_message_size,
4743                                max_encoding_message_size,
4744                            );
4745                        let res = grpc.unary(method, req).await;
4746                        Ok(res)
4747                    };
4748                    Box::pin(fut)
4749                }
4750                _ => {
4751                    Box::pin(async move {
4752                        Ok(
4753                            http::Response::builder()
4754                                .status(200)
4755                                .header("grpc-status", "12")
4756                                .header("content-type", "application/grpc")
4757                                .body(empty_body())
4758                                .unwrap(),
4759                        )
4760                    })
4761                }
4762            }
4763        }
4764    }
4765    impl<T: CollectionService> Clone for CollectionServiceServer<T> {
4766        fn clone(&self) -> Self {
4767            let inner = self.inner.clone();
4768            Self {
4769                inner,
4770                accept_compression_encodings: self.accept_compression_encodings,
4771                send_compression_encodings: self.send_compression_encodings,
4772                max_decoding_message_size: self.max_decoding_message_size,
4773                max_encoding_message_size: self.max_encoding_message_size,
4774            }
4775        }
4776    }
4777    impl<T: CollectionService> Clone for _Inner<T> {
4778        fn clone(&self) -> Self {
4779            Self(Arc::clone(&self.0))
4780        }
4781    }
4782    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
4783        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4784            write!(f, "{:?}", self.0)
4785        }
4786    }
4787    impl<T: CollectionService> tonic::server::NamedService
4788    for CollectionServiceServer<T> {
4789        const NAME: &'static str = "aruna.api.storage.services.v2.CollectionService";
4790    }
4791}
4792#[derive(serde::Deserialize, serde::Serialize)]
4793#[allow(clippy::derive_partial_eq_without_eq)]
4794#[derive(Clone, PartialEq, ::prost::Message)]
4795pub struct ReplicateProjectDataRequest {
4796    #[prost(string, tag = "1")]
4797    pub project_id: ::prost::alloc::string::String,
4798    #[prost(string, tag = "2")]
4799    pub endpoint_id: ::prost::alloc::string::String,
4800}
4801#[derive(serde::Deserialize, serde::Serialize)]
4802#[allow(clippy::derive_partial_eq_without_eq)]
4803#[derive(Clone, PartialEq, ::prost::Message)]
4804pub struct ReplicateProjectDataResponse {
4805    #[prost(enumeration = "super::super::models::v2::ReplicationStatus", tag = "1")]
4806    pub status: i32,
4807}
4808#[derive(serde::Deserialize, serde::Serialize)]
4809#[allow(clippy::derive_partial_eq_without_eq)]
4810#[derive(Clone, PartialEq, ::prost::Message)]
4811pub struct PartialReplicateDataRequest {
4812    #[prost(string, tag = "4")]
4813    pub endpoint_id: ::prost::alloc::string::String,
4814    #[prost(oneof = "partial_replicate_data_request::DataVariant", tags = "1, 2, 3")]
4815    pub data_variant: ::core::option::Option<
4816        partial_replicate_data_request::DataVariant,
4817    >,
4818}
4819/// Nested message and enum types in `PartialReplicateDataRequest`.
4820pub mod partial_replicate_data_request {
4821    #[derive(serde::Deserialize, serde::Serialize)]
4822    #[allow(clippy::derive_partial_eq_without_eq)]
4823    #[derive(Clone, PartialEq, ::prost::Oneof)]
4824    pub enum DataVariant {
4825        #[prost(string, tag = "1")]
4826        CollectionId(::prost::alloc::string::String),
4827        #[prost(string, tag = "2")]
4828        DatasetId(::prost::alloc::string::String),
4829        #[prost(string, tag = "3")]
4830        ObjectId(::prost::alloc::string::String),
4831    }
4832}
4833#[derive(serde::Deserialize, serde::Serialize)]
4834#[allow(clippy::derive_partial_eq_without_eq)]
4835#[derive(Clone, PartialEq, ::prost::Message)]
4836pub struct PartialReplicateDataResponse {
4837    #[prost(enumeration = "super::super::models::v2::ReplicationStatus", tag = "1")]
4838    pub status: i32,
4839}
4840#[derive(serde::Deserialize, serde::Serialize)]
4841#[allow(clippy::derive_partial_eq_without_eq)]
4842#[derive(Clone, PartialEq, ::prost::Message)]
4843pub struct UpdateReplicationStatusRequest {
4844    #[prost(string, tag = "1")]
4845    pub object_id: ::prost::alloc::string::String,
4846    #[prost(string, tag = "2")]
4847    pub endpoint_id: ::prost::alloc::string::String,
4848    #[prost(enumeration = "super::super::models::v2::ReplicationStatus", tag = "3")]
4849    pub status: i32,
4850}
4851#[derive(serde::Deserialize, serde::Serialize)]
4852#[allow(clippy::derive_partial_eq_without_eq)]
4853#[derive(Clone, PartialEq, ::prost::Message)]
4854pub struct UpdateReplicationStatusResponse {}
4855#[derive(serde::Deserialize, serde::Serialize)]
4856#[allow(clippy::derive_partial_eq_without_eq)]
4857#[derive(Clone, PartialEq, ::prost::Message)]
4858pub struct GetReplicationStatusRequest {
4859    #[prost(string, tag = "1")]
4860    pub resource_id: ::prost::alloc::string::String,
4861    #[prost(string, tag = "2")]
4862    pub endpoint_id: ::prost::alloc::string::String,
4863}
4864#[derive(serde::Deserialize, serde::Serialize)]
4865#[allow(clippy::derive_partial_eq_without_eq)]
4866#[derive(Clone, PartialEq, ::prost::Message)]
4867pub struct GetReplicationStatusResponse {
4868    #[prost(message, repeated, tag = "1")]
4869    pub infos: ::prost::alloc::vec::Vec<ReplicationInfo>,
4870}
4871#[derive(serde::Deserialize, serde::Serialize)]
4872#[allow(clippy::derive_partial_eq_without_eq)]
4873#[derive(Clone, PartialEq, ::prost::Message)]
4874pub struct ReplicationInfo {
4875    #[prost(message, optional, tag = "5")]
4876    pub endpoint_info: ::core::option::Option<super::super::models::v2::DataEndpoint>,
4877    #[prost(oneof = "replication_info::Resource", tags = "1, 2, 3, 4")]
4878    pub resource: ::core::option::Option<replication_info::Resource>,
4879}
4880/// Nested message and enum types in `ReplicationInfo`.
4881pub mod replication_info {
4882    #[derive(serde::Deserialize, serde::Serialize)]
4883    #[allow(clippy::derive_partial_eq_without_eq)]
4884    #[derive(Clone, PartialEq, ::prost::Oneof)]
4885    pub enum Resource {
4886        #[prost(string, tag = "1")]
4887        ProjectId(::prost::alloc::string::String),
4888        #[prost(string, tag = "2")]
4889        CollectionId(::prost::alloc::string::String),
4890        #[prost(string, tag = "3")]
4891        DatasetId(::prost::alloc::string::String),
4892        #[prost(string, tag = "4")]
4893        ObjectId(::prost::alloc::string::String),
4894    }
4895}
4896#[derive(serde::Deserialize, serde::Serialize)]
4897#[allow(clippy::derive_partial_eq_without_eq)]
4898#[derive(Clone, PartialEq, ::prost::Message)]
4899pub struct DeleteReplicationRequest {
4900    #[prost(string, tag = "1")]
4901    pub resource_id: ::prost::alloc::string::String,
4902    #[prost(string, tag = "2")]
4903    pub endpoint_id: ::prost::alloc::string::String,
4904}
4905#[derive(serde::Deserialize, serde::Serialize)]
4906#[allow(clippy::derive_partial_eq_without_eq)]
4907#[derive(Clone, PartialEq, ::prost::Message)]
4908pub struct DeleteReplicationResponse {}
4909/// Generated client implementations.
4910pub mod data_replication_service_client {
4911    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
4912    use tonic::codegen::*;
4913    use tonic::codegen::http::Uri;
4914    /// DataReplicationService
4915    /// Endpoint specific methods for syncing data
4916    #[derive(Debug, Clone)]
4917    pub struct DataReplicationServiceClient<T> {
4918        inner: tonic::client::Grpc<T>,
4919    }
4920    impl DataReplicationServiceClient<tonic::transport::Channel> {
4921        /// Attempt to create a new client by connecting to a given endpoint.
4922        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
4923        where
4924            D: TryInto<tonic::transport::Endpoint>,
4925            D::Error: Into<StdError>,
4926        {
4927            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
4928            Ok(Self::new(conn))
4929        }
4930    }
4931    impl<T> DataReplicationServiceClient<T>
4932    where
4933        T: tonic::client::GrpcService<tonic::body::BoxBody>,
4934        T::Error: Into<StdError>,
4935        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
4936        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
4937    {
4938        pub fn new(inner: T) -> Self {
4939            let inner = tonic::client::Grpc::new(inner);
4940            Self { inner }
4941        }
4942        pub fn with_origin(inner: T, origin: Uri) -> Self {
4943            let inner = tonic::client::Grpc::with_origin(inner, origin);
4944            Self { inner }
4945        }
4946        pub fn with_interceptor<F>(
4947            inner: T,
4948            interceptor: F,
4949        ) -> DataReplicationServiceClient<InterceptedService<T, F>>
4950        where
4951            F: tonic::service::Interceptor,
4952            T::ResponseBody: Default,
4953            T: tonic::codegen::Service<
4954                http::Request<tonic::body::BoxBody>,
4955                Response = http::Response<
4956                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
4957                >,
4958            >,
4959            <T as tonic::codegen::Service<
4960                http::Request<tonic::body::BoxBody>,
4961            >>::Error: Into<StdError> + Send + Sync,
4962        {
4963            DataReplicationServiceClient::new(
4964                InterceptedService::new(inner, interceptor),
4965            )
4966        }
4967        /// Compress requests with the given encoding.
4968        ///
4969        /// This requires the server to support it otherwise it might respond with an
4970        /// error.
4971        #[must_use]
4972        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
4973            self.inner = self.inner.send_compressed(encoding);
4974            self
4975        }
4976        /// Enable decompressing responses.
4977        #[must_use]
4978        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
4979            self.inner = self.inner.accept_compressed(encoding);
4980            self
4981        }
4982        /// Limits the maximum size of a decoded message.
4983        ///
4984        /// Default: `4MB`
4985        #[must_use]
4986        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
4987            self.inner = self.inner.max_decoding_message_size(limit);
4988            self
4989        }
4990        /// Limits the maximum size of an encoded message.
4991        ///
4992        /// Default: `usize::MAX`
4993        #[must_use]
4994        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
4995            self.inner = self.inner.max_encoding_message_size(limit);
4996            self
4997        }
4998        /// ReplicateProjectData
4999        ///
5000        /// Status: ALPHA
5001        ///
5002        /// Replicates the (full) project data from one endpoint to another
5003        pub async fn replicate_project_data(
5004            &mut self,
5005            request: impl tonic::IntoRequest<super::ReplicateProjectDataRequest>,
5006        ) -> std::result::Result<
5007            tonic::Response<super::ReplicateProjectDataResponse>,
5008            tonic::Status,
5009        > {
5010            self.inner
5011                .ready()
5012                .await
5013                .map_err(|e| {
5014                    tonic::Status::new(
5015                        tonic::Code::Unknown,
5016                        format!("Service was not ready: {}", e.into()),
5017                    )
5018                })?;
5019            let codec = tonic::codec::ProstCodec::default();
5020            let path = http::uri::PathAndQuery::from_static(
5021                "/aruna.api.storage.services.v2.DataReplicationService/ReplicateProjectData",
5022            );
5023            let mut req = request.into_request();
5024            req.extensions_mut()
5025                .insert(
5026                    GrpcMethod::new(
5027                        "aruna.api.storage.services.v2.DataReplicationService",
5028                        "ReplicateProjectData",
5029                    ),
5030                );
5031            self.inner.unary(req, path, codec).await
5032        }
5033        /// PartialReplicateData
5034        ///
5035        /// Status: ALPHA
5036        ///
5037        /// Partial replicate data between endpoints
5038        pub async fn partial_replicate_data(
5039            &mut self,
5040            request: impl tonic::IntoRequest<super::PartialReplicateDataRequest>,
5041        ) -> std::result::Result<
5042            tonic::Response<super::PartialReplicateDataResponse>,
5043            tonic::Status,
5044        > {
5045            self.inner
5046                .ready()
5047                .await
5048                .map_err(|e| {
5049                    tonic::Status::new(
5050                        tonic::Code::Unknown,
5051                        format!("Service was not ready: {}", e.into()),
5052                    )
5053                })?;
5054            let codec = tonic::codec::ProstCodec::default();
5055            let path = http::uri::PathAndQuery::from_static(
5056                "/aruna.api.storage.services.v2.DataReplicationService/PartialReplicateData",
5057            );
5058            let mut req = request.into_request();
5059            req.extensions_mut()
5060                .insert(
5061                    GrpcMethod::new(
5062                        "aruna.api.storage.services.v2.DataReplicationService",
5063                        "PartialReplicateData",
5064                    ),
5065                );
5066            self.inner.unary(req, path, codec).await
5067        }
5068        /// UpdateReplicationStatus
5069        ///
5070        /// Status: ALPHA
5071        ///
5072        /// Update the replication status of a project
5073        pub async fn update_replication_status(
5074            &mut self,
5075            request: impl tonic::IntoRequest<super::UpdateReplicationStatusRequest>,
5076        ) -> std::result::Result<
5077            tonic::Response<super::UpdateReplicationStatusResponse>,
5078            tonic::Status,
5079        > {
5080            self.inner
5081                .ready()
5082                .await
5083                .map_err(|e| {
5084                    tonic::Status::new(
5085                        tonic::Code::Unknown,
5086                        format!("Service was not ready: {}", e.into()),
5087                    )
5088                })?;
5089            let codec = tonic::codec::ProstCodec::default();
5090            let path = http::uri::PathAndQuery::from_static(
5091                "/aruna.api.storage.services.v2.DataReplicationService/UpdateReplicationStatus",
5092            );
5093            let mut req = request.into_request();
5094            req.extensions_mut()
5095                .insert(
5096                    GrpcMethod::new(
5097                        "aruna.api.storage.services.v2.DataReplicationService",
5098                        "UpdateReplicationStatus",
5099                    ),
5100                );
5101            self.inner.unary(req, path, codec).await
5102        }
5103        /// GetReplicationStatus
5104        ///
5105        /// Status: ALPHA
5106        ///
5107        /// Get the replication status of a project
5108        pub async fn get_replication_status(
5109            &mut self,
5110            request: impl tonic::IntoRequest<super::GetReplicationStatusRequest>,
5111        ) -> std::result::Result<
5112            tonic::Response<super::GetReplicationStatusResponse>,
5113            tonic::Status,
5114        > {
5115            self.inner
5116                .ready()
5117                .await
5118                .map_err(|e| {
5119                    tonic::Status::new(
5120                        tonic::Code::Unknown,
5121                        format!("Service was not ready: {}", e.into()),
5122                    )
5123                })?;
5124            let codec = tonic::codec::ProstCodec::default();
5125            let path = http::uri::PathAndQuery::from_static(
5126                "/aruna.api.storage.services.v2.DataReplicationService/GetReplicationStatus",
5127            );
5128            let mut req = request.into_request();
5129            req.extensions_mut()
5130                .insert(
5131                    GrpcMethod::new(
5132                        "aruna.api.storage.services.v2.DataReplicationService",
5133                        "GetReplicationStatus",
5134                    ),
5135                );
5136            self.inner.unary(req, path, codec).await
5137        }
5138        /// DeleteReplication
5139        ///
5140        /// Status: ALPHA
5141        ///
5142        /// Delete the replication status of a project
5143        pub async fn delete_replication(
5144            &mut self,
5145            request: impl tonic::IntoRequest<super::DeleteReplicationRequest>,
5146        ) -> std::result::Result<
5147            tonic::Response<super::DeleteReplicationResponse>,
5148            tonic::Status,
5149        > {
5150            self.inner
5151                .ready()
5152                .await
5153                .map_err(|e| {
5154                    tonic::Status::new(
5155                        tonic::Code::Unknown,
5156                        format!("Service was not ready: {}", e.into()),
5157                    )
5158                })?;
5159            let codec = tonic::codec::ProstCodec::default();
5160            let path = http::uri::PathAndQuery::from_static(
5161                "/aruna.api.storage.services.v2.DataReplicationService/DeleteReplication",
5162            );
5163            let mut req = request.into_request();
5164            req.extensions_mut()
5165                .insert(
5166                    GrpcMethod::new(
5167                        "aruna.api.storage.services.v2.DataReplicationService",
5168                        "DeleteReplication",
5169                    ),
5170                );
5171            self.inner.unary(req, path, codec).await
5172        }
5173    }
5174}
5175/// Generated server implementations.
5176pub mod data_replication_service_server {
5177    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
5178    use tonic::codegen::*;
5179    /// Generated trait containing gRPC methods that should be implemented for use with DataReplicationServiceServer.
5180    #[async_trait]
5181    pub trait DataReplicationService: Send + Sync + 'static {
5182        /// ReplicateProjectData
5183        ///
5184        /// Status: ALPHA
5185        ///
5186        /// Replicates the (full) project data from one endpoint to another
5187        async fn replicate_project_data(
5188            &self,
5189            request: tonic::Request<super::ReplicateProjectDataRequest>,
5190        ) -> std::result::Result<
5191            tonic::Response<super::ReplicateProjectDataResponse>,
5192            tonic::Status,
5193        >;
5194        /// PartialReplicateData
5195        ///
5196        /// Status: ALPHA
5197        ///
5198        /// Partial replicate data between endpoints
5199        async fn partial_replicate_data(
5200            &self,
5201            request: tonic::Request<super::PartialReplicateDataRequest>,
5202        ) -> std::result::Result<
5203            tonic::Response<super::PartialReplicateDataResponse>,
5204            tonic::Status,
5205        >;
5206        /// UpdateReplicationStatus
5207        ///
5208        /// Status: ALPHA
5209        ///
5210        /// Update the replication status of a project
5211        async fn update_replication_status(
5212            &self,
5213            request: tonic::Request<super::UpdateReplicationStatusRequest>,
5214        ) -> std::result::Result<
5215            tonic::Response<super::UpdateReplicationStatusResponse>,
5216            tonic::Status,
5217        >;
5218        /// GetReplicationStatus
5219        ///
5220        /// Status: ALPHA
5221        ///
5222        /// Get the replication status of a project
5223        async fn get_replication_status(
5224            &self,
5225            request: tonic::Request<super::GetReplicationStatusRequest>,
5226        ) -> std::result::Result<
5227            tonic::Response<super::GetReplicationStatusResponse>,
5228            tonic::Status,
5229        >;
5230        /// DeleteReplication
5231        ///
5232        /// Status: ALPHA
5233        ///
5234        /// Delete the replication status of a project
5235        async fn delete_replication(
5236            &self,
5237            request: tonic::Request<super::DeleteReplicationRequest>,
5238        ) -> std::result::Result<
5239            tonic::Response<super::DeleteReplicationResponse>,
5240            tonic::Status,
5241        >;
5242    }
5243    /// DataReplicationService
5244    /// Endpoint specific methods for syncing data
5245    #[derive(Debug)]
5246    pub struct DataReplicationServiceServer<T: DataReplicationService> {
5247        inner: _Inner<T>,
5248        accept_compression_encodings: EnabledCompressionEncodings,
5249        send_compression_encodings: EnabledCompressionEncodings,
5250        max_decoding_message_size: Option<usize>,
5251        max_encoding_message_size: Option<usize>,
5252    }
5253    struct _Inner<T>(Arc<T>);
5254    impl<T: DataReplicationService> DataReplicationServiceServer<T> {
5255        pub fn new(inner: T) -> Self {
5256            Self::from_arc(Arc::new(inner))
5257        }
5258        pub fn from_arc(inner: Arc<T>) -> Self {
5259            let inner = _Inner(inner);
5260            Self {
5261                inner,
5262                accept_compression_encodings: Default::default(),
5263                send_compression_encodings: Default::default(),
5264                max_decoding_message_size: None,
5265                max_encoding_message_size: None,
5266            }
5267        }
5268        pub fn with_interceptor<F>(
5269            inner: T,
5270            interceptor: F,
5271        ) -> InterceptedService<Self, F>
5272        where
5273            F: tonic::service::Interceptor,
5274        {
5275            InterceptedService::new(Self::new(inner), interceptor)
5276        }
5277        /// Enable decompressing requests with the given encoding.
5278        #[must_use]
5279        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
5280            self.accept_compression_encodings.enable(encoding);
5281            self
5282        }
5283        /// Compress responses with the given encoding, if the client supports it.
5284        #[must_use]
5285        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
5286            self.send_compression_encodings.enable(encoding);
5287            self
5288        }
5289        /// Limits the maximum size of a decoded message.
5290        ///
5291        /// Default: `4MB`
5292        #[must_use]
5293        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
5294            self.max_decoding_message_size = Some(limit);
5295            self
5296        }
5297        /// Limits the maximum size of an encoded message.
5298        ///
5299        /// Default: `usize::MAX`
5300        #[must_use]
5301        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
5302            self.max_encoding_message_size = Some(limit);
5303            self
5304        }
5305    }
5306    impl<T, B> tonic::codegen::Service<http::Request<B>>
5307    for DataReplicationServiceServer<T>
5308    where
5309        T: DataReplicationService,
5310        B: Body + Send + 'static,
5311        B::Error: Into<StdError> + Send + 'static,
5312    {
5313        type Response = http::Response<tonic::body::BoxBody>;
5314        type Error = std::convert::Infallible;
5315        type Future = BoxFuture<Self::Response, Self::Error>;
5316        fn poll_ready(
5317            &mut self,
5318            _cx: &mut Context<'_>,
5319        ) -> Poll<std::result::Result<(), Self::Error>> {
5320            Poll::Ready(Ok(()))
5321        }
5322        fn call(&mut self, req: http::Request<B>) -> Self::Future {
5323            let inner = self.inner.clone();
5324            match req.uri().path() {
5325                "/aruna.api.storage.services.v2.DataReplicationService/ReplicateProjectData" => {
5326                    #[allow(non_camel_case_types)]
5327                    struct ReplicateProjectDataSvc<T: DataReplicationService>(
5328                        pub Arc<T>,
5329                    );
5330                    impl<
5331                        T: DataReplicationService,
5332                    > tonic::server::UnaryService<super::ReplicateProjectDataRequest>
5333                    for ReplicateProjectDataSvc<T> {
5334                        type Response = super::ReplicateProjectDataResponse;
5335                        type Future = BoxFuture<
5336                            tonic::Response<Self::Response>,
5337                            tonic::Status,
5338                        >;
5339                        fn call(
5340                            &mut self,
5341                            request: tonic::Request<super::ReplicateProjectDataRequest>,
5342                        ) -> Self::Future {
5343                            let inner = Arc::clone(&self.0);
5344                            let fut = async move {
5345                                <T as DataReplicationService>::replicate_project_data(
5346                                        &inner,
5347                                        request,
5348                                    )
5349                                    .await
5350                            };
5351                            Box::pin(fut)
5352                        }
5353                    }
5354                    let accept_compression_encodings = self.accept_compression_encodings;
5355                    let send_compression_encodings = self.send_compression_encodings;
5356                    let max_decoding_message_size = self.max_decoding_message_size;
5357                    let max_encoding_message_size = self.max_encoding_message_size;
5358                    let inner = self.inner.clone();
5359                    let fut = async move {
5360                        let inner = inner.0;
5361                        let method = ReplicateProjectDataSvc(inner);
5362                        let codec = tonic::codec::ProstCodec::default();
5363                        let mut grpc = tonic::server::Grpc::new(codec)
5364                            .apply_compression_config(
5365                                accept_compression_encodings,
5366                                send_compression_encodings,
5367                            )
5368                            .apply_max_message_size_config(
5369                                max_decoding_message_size,
5370                                max_encoding_message_size,
5371                            );
5372                        let res = grpc.unary(method, req).await;
5373                        Ok(res)
5374                    };
5375                    Box::pin(fut)
5376                }
5377                "/aruna.api.storage.services.v2.DataReplicationService/PartialReplicateData" => {
5378                    #[allow(non_camel_case_types)]
5379                    struct PartialReplicateDataSvc<T: DataReplicationService>(
5380                        pub Arc<T>,
5381                    );
5382                    impl<
5383                        T: DataReplicationService,
5384                    > tonic::server::UnaryService<super::PartialReplicateDataRequest>
5385                    for PartialReplicateDataSvc<T> {
5386                        type Response = super::PartialReplicateDataResponse;
5387                        type Future = BoxFuture<
5388                            tonic::Response<Self::Response>,
5389                            tonic::Status,
5390                        >;
5391                        fn call(
5392                            &mut self,
5393                            request: tonic::Request<super::PartialReplicateDataRequest>,
5394                        ) -> Self::Future {
5395                            let inner = Arc::clone(&self.0);
5396                            let fut = async move {
5397                                <T as DataReplicationService>::partial_replicate_data(
5398                                        &inner,
5399                                        request,
5400                                    )
5401                                    .await
5402                            };
5403                            Box::pin(fut)
5404                        }
5405                    }
5406                    let accept_compression_encodings = self.accept_compression_encodings;
5407                    let send_compression_encodings = self.send_compression_encodings;
5408                    let max_decoding_message_size = self.max_decoding_message_size;
5409                    let max_encoding_message_size = self.max_encoding_message_size;
5410                    let inner = self.inner.clone();
5411                    let fut = async move {
5412                        let inner = inner.0;
5413                        let method = PartialReplicateDataSvc(inner);
5414                        let codec = tonic::codec::ProstCodec::default();
5415                        let mut grpc = tonic::server::Grpc::new(codec)
5416                            .apply_compression_config(
5417                                accept_compression_encodings,
5418                                send_compression_encodings,
5419                            )
5420                            .apply_max_message_size_config(
5421                                max_decoding_message_size,
5422                                max_encoding_message_size,
5423                            );
5424                        let res = grpc.unary(method, req).await;
5425                        Ok(res)
5426                    };
5427                    Box::pin(fut)
5428                }
5429                "/aruna.api.storage.services.v2.DataReplicationService/UpdateReplicationStatus" => {
5430                    #[allow(non_camel_case_types)]
5431                    struct UpdateReplicationStatusSvc<T: DataReplicationService>(
5432                        pub Arc<T>,
5433                    );
5434                    impl<
5435                        T: DataReplicationService,
5436                    > tonic::server::UnaryService<super::UpdateReplicationStatusRequest>
5437                    for UpdateReplicationStatusSvc<T> {
5438                        type Response = super::UpdateReplicationStatusResponse;
5439                        type Future = BoxFuture<
5440                            tonic::Response<Self::Response>,
5441                            tonic::Status,
5442                        >;
5443                        fn call(
5444                            &mut self,
5445                            request: tonic::Request<
5446                                super::UpdateReplicationStatusRequest,
5447                            >,
5448                        ) -> Self::Future {
5449                            let inner = Arc::clone(&self.0);
5450                            let fut = async move {
5451                                <T as DataReplicationService>::update_replication_status(
5452                                        &inner,
5453                                        request,
5454                                    )
5455                                    .await
5456                            };
5457                            Box::pin(fut)
5458                        }
5459                    }
5460                    let accept_compression_encodings = self.accept_compression_encodings;
5461                    let send_compression_encodings = self.send_compression_encodings;
5462                    let max_decoding_message_size = self.max_decoding_message_size;
5463                    let max_encoding_message_size = self.max_encoding_message_size;
5464                    let inner = self.inner.clone();
5465                    let fut = async move {
5466                        let inner = inner.0;
5467                        let method = UpdateReplicationStatusSvc(inner);
5468                        let codec = tonic::codec::ProstCodec::default();
5469                        let mut grpc = tonic::server::Grpc::new(codec)
5470                            .apply_compression_config(
5471                                accept_compression_encodings,
5472                                send_compression_encodings,
5473                            )
5474                            .apply_max_message_size_config(
5475                                max_decoding_message_size,
5476                                max_encoding_message_size,
5477                            );
5478                        let res = grpc.unary(method, req).await;
5479                        Ok(res)
5480                    };
5481                    Box::pin(fut)
5482                }
5483                "/aruna.api.storage.services.v2.DataReplicationService/GetReplicationStatus" => {
5484                    #[allow(non_camel_case_types)]
5485                    struct GetReplicationStatusSvc<T: DataReplicationService>(
5486                        pub Arc<T>,
5487                    );
5488                    impl<
5489                        T: DataReplicationService,
5490                    > tonic::server::UnaryService<super::GetReplicationStatusRequest>
5491                    for GetReplicationStatusSvc<T> {
5492                        type Response = super::GetReplicationStatusResponse;
5493                        type Future = BoxFuture<
5494                            tonic::Response<Self::Response>,
5495                            tonic::Status,
5496                        >;
5497                        fn call(
5498                            &mut self,
5499                            request: tonic::Request<super::GetReplicationStatusRequest>,
5500                        ) -> Self::Future {
5501                            let inner = Arc::clone(&self.0);
5502                            let fut = async move {
5503                                <T as DataReplicationService>::get_replication_status(
5504                                        &inner,
5505                                        request,
5506                                    )
5507                                    .await
5508                            };
5509                            Box::pin(fut)
5510                        }
5511                    }
5512                    let accept_compression_encodings = self.accept_compression_encodings;
5513                    let send_compression_encodings = self.send_compression_encodings;
5514                    let max_decoding_message_size = self.max_decoding_message_size;
5515                    let max_encoding_message_size = self.max_encoding_message_size;
5516                    let inner = self.inner.clone();
5517                    let fut = async move {
5518                        let inner = inner.0;
5519                        let method = GetReplicationStatusSvc(inner);
5520                        let codec = tonic::codec::ProstCodec::default();
5521                        let mut grpc = tonic::server::Grpc::new(codec)
5522                            .apply_compression_config(
5523                                accept_compression_encodings,
5524                                send_compression_encodings,
5525                            )
5526                            .apply_max_message_size_config(
5527                                max_decoding_message_size,
5528                                max_encoding_message_size,
5529                            );
5530                        let res = grpc.unary(method, req).await;
5531                        Ok(res)
5532                    };
5533                    Box::pin(fut)
5534                }
5535                "/aruna.api.storage.services.v2.DataReplicationService/DeleteReplication" => {
5536                    #[allow(non_camel_case_types)]
5537                    struct DeleteReplicationSvc<T: DataReplicationService>(pub Arc<T>);
5538                    impl<
5539                        T: DataReplicationService,
5540                    > tonic::server::UnaryService<super::DeleteReplicationRequest>
5541                    for DeleteReplicationSvc<T> {
5542                        type Response = super::DeleteReplicationResponse;
5543                        type Future = BoxFuture<
5544                            tonic::Response<Self::Response>,
5545                            tonic::Status,
5546                        >;
5547                        fn call(
5548                            &mut self,
5549                            request: tonic::Request<super::DeleteReplicationRequest>,
5550                        ) -> Self::Future {
5551                            let inner = Arc::clone(&self.0);
5552                            let fut = async move {
5553                                <T as DataReplicationService>::delete_replication(
5554                                        &inner,
5555                                        request,
5556                                    )
5557                                    .await
5558                            };
5559                            Box::pin(fut)
5560                        }
5561                    }
5562                    let accept_compression_encodings = self.accept_compression_encodings;
5563                    let send_compression_encodings = self.send_compression_encodings;
5564                    let max_decoding_message_size = self.max_decoding_message_size;
5565                    let max_encoding_message_size = self.max_encoding_message_size;
5566                    let inner = self.inner.clone();
5567                    let fut = async move {
5568                        let inner = inner.0;
5569                        let method = DeleteReplicationSvc(inner);
5570                        let codec = tonic::codec::ProstCodec::default();
5571                        let mut grpc = tonic::server::Grpc::new(codec)
5572                            .apply_compression_config(
5573                                accept_compression_encodings,
5574                                send_compression_encodings,
5575                            )
5576                            .apply_max_message_size_config(
5577                                max_decoding_message_size,
5578                                max_encoding_message_size,
5579                            );
5580                        let res = grpc.unary(method, req).await;
5581                        Ok(res)
5582                    };
5583                    Box::pin(fut)
5584                }
5585                _ => {
5586                    Box::pin(async move {
5587                        Ok(
5588                            http::Response::builder()
5589                                .status(200)
5590                                .header("grpc-status", "12")
5591                                .header("content-type", "application/grpc")
5592                                .body(empty_body())
5593                                .unwrap(),
5594                        )
5595                    })
5596                }
5597            }
5598        }
5599    }
5600    impl<T: DataReplicationService> Clone for DataReplicationServiceServer<T> {
5601        fn clone(&self) -> Self {
5602            let inner = self.inner.clone();
5603            Self {
5604                inner,
5605                accept_compression_encodings: self.accept_compression_encodings,
5606                send_compression_encodings: self.send_compression_encodings,
5607                max_decoding_message_size: self.max_decoding_message_size,
5608                max_encoding_message_size: self.max_encoding_message_size,
5609            }
5610        }
5611    }
5612    impl<T: DataReplicationService> Clone for _Inner<T> {
5613        fn clone(&self) -> Self {
5614            Self(Arc::clone(&self.0))
5615        }
5616    }
5617    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
5618        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5619            write!(f, "{:?}", self.0)
5620        }
5621    }
5622    impl<T: DataReplicationService> tonic::server::NamedService
5623    for DataReplicationServiceServer<T> {
5624        const NAME: &'static str = "aruna.api.storage.services.v2.DataReplicationService";
5625    }
5626}
5627/// Models
5628/// These are the models for the above described requests and responses.
5629/// gRPC best practises advice each Request and Response message in a RPC to be
5630/// called {rpc_name}Request and {rpc_name}Response.
5631#[derive(serde::Deserialize, serde::Serialize)]
5632#[allow(clippy::derive_partial_eq_without_eq)]
5633#[derive(Clone, PartialEq, ::prost::Message)]
5634pub struct CreateObjectRequest {
5635    /// collection name
5636    #[prost(string, tag = "1")]
5637    pub name: ::prost::alloc::string::String,
5638    /// title
5639    #[prost(string, tag = "12")]
5640    pub title: ::prost::alloc::string::String,
5641    /// description
5642    #[prost(string, tag = "2")]
5643    pub description: ::prost::alloc::string::String,
5644    /// collection specific labels / hooks
5645    #[prost(message, repeated, tag = "3")]
5646    pub key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
5647    /// Internal / External relations (URLs / IDs from external sources)
5648    #[prost(message, repeated, tag = "4")]
5649    pub relations: ::prost::alloc::vec::Vec<super::super::models::v2::Relation>,
5650    /// DataClass
5651    #[prost(enumeration = "super::super::models::v2::DataClass", tag = "5")]
5652    pub data_class: i32,
5653    #[prost(message, repeated, tag = "9")]
5654    pub hashes: ::prost::alloc::vec::Vec<super::super::models::v2::Hash>,
5655    #[prost(string, tag = "10")]
5656    pub metadata_license_tag: ::prost::alloc::string::String,
5657    #[prost(string, tag = "11")]
5658    pub data_license_tag: ::prost::alloc::string::String,
5659    #[prost(message, repeated, tag = "13")]
5660    pub authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
5661    /// Parent can be one of all other resources
5662    #[prost(oneof = "create_object_request::Parent", tags = "6, 7, 8")]
5663    pub parent: ::core::option::Option<create_object_request::Parent>,
5664}
5665/// Nested message and enum types in `CreateObjectRequest`.
5666pub mod create_object_request {
5667    /// Parent can be one of all other resources
5668    #[derive(serde::Deserialize, serde::Serialize)]
5669    #[allow(clippy::derive_partial_eq_without_eq)]
5670    #[derive(Clone, PartialEq, ::prost::Oneof)]
5671    pub enum Parent {
5672        #[prost(string, tag = "6")]
5673        ProjectId(::prost::alloc::string::String),
5674        #[prost(string, tag = "7")]
5675        CollectionId(::prost::alloc::string::String),
5676        #[prost(string, tag = "8")]
5677        DatasetId(::prost::alloc::string::String),
5678    }
5679}
5680#[derive(serde::Deserialize, serde::Serialize)]
5681#[allow(clippy::derive_partial_eq_without_eq)]
5682#[derive(Clone, PartialEq, ::prost::Message)]
5683pub struct CreateObjectResponse {
5684    #[prost(message, optional, tag = "1")]
5685    pub object: ::core::option::Option<super::super::models::v2::Object>,
5686}
5687#[derive(serde::Deserialize, serde::Serialize)]
5688#[allow(clippy::derive_partial_eq_without_eq)]
5689#[derive(Clone, PartialEq, ::prost::Message)]
5690pub struct GetUploadUrlRequest {
5691    /// ObjectId
5692    #[prost(string, tag = "1")]
5693    pub object_id: ::prost::alloc::string::String,
5694    /// Is this a multipart upload?
5695    #[prost(bool, tag = "2")]
5696    pub multipart: bool,
5697    /// (optional) if multi was initialized
5698    #[prost(int32, tag = "3")]
5699    pub part_number: i32,
5700    /// (optional) if part_number > 1 and multipart = true
5701    #[prost(string, tag = "4")]
5702    pub upload_id: ::prost::alloc::string::String,
5703}
5704#[derive(serde::Deserialize, serde::Serialize)]
5705#[allow(clippy::derive_partial_eq_without_eq)]
5706#[derive(Clone, PartialEq, ::prost::Message)]
5707pub struct GetUploadUrlResponse {
5708    /// URL
5709    #[prost(string, tag = "1")]
5710    pub url: ::prost::alloc::string::String,
5711    /// Upload Id (can be ignored with single part uploads)
5712    #[prost(string, tag = "2")]
5713    pub upload_id: ::prost::alloc::string::String,
5714}
5715#[derive(serde::Deserialize, serde::Serialize)]
5716#[allow(clippy::derive_partial_eq_without_eq)]
5717#[derive(Clone, PartialEq, ::prost::Message)]
5718pub struct GetDownloadUrlRequest {
5719    #[prost(string, tag = "1")]
5720    pub object_id: ::prost::alloc::string::String,
5721}
5722#[derive(serde::Deserialize, serde::Serialize)]
5723#[allow(clippy::derive_partial_eq_without_eq)]
5724#[derive(Clone, PartialEq, ::prost::Message)]
5725pub struct GetDownloadUrlResponse {
5726    /// URL
5727    #[prost(string, tag = "1")]
5728    pub url: ::prost::alloc::string::String,
5729}
5730#[derive(serde::Deserialize, serde::Serialize)]
5731#[allow(clippy::derive_partial_eq_without_eq)]
5732#[derive(Clone, PartialEq, ::prost::Message)]
5733pub struct CompletedPart {
5734    /// Multipart identifier
5735    #[prost(string, tag = "1")]
5736    pub etag: ::prost::alloc::string::String,
5737    /// Part number
5738    #[prost(int64, tag = "2")]
5739    pub part: i64,
5740}
5741#[derive(serde::Deserialize, serde::Serialize)]
5742#[allow(clippy::derive_partial_eq_without_eq)]
5743#[derive(Clone, PartialEq, ::prost::Message)]
5744pub struct FinishObjectStagingRequest {
5745    /// ObjectId
5746    #[prost(string, tag = "1")]
5747    pub object_id: ::prost::alloc::string::String,
5748    /// Final content len
5749    #[prost(int64, tag = "2")]
5750    pub content_len: i64,
5751    /// Hash of the uploaded data - used to verify the data integrity.
5752    /// This supports multiple hashing algorithms.
5753    #[prost(message, repeated, tag = "3")]
5754    pub hashes: ::prost::alloc::vec::Vec<super::super::models::v2::Hash>,
5755    /// If the upload was multipart, this is the list of parts that were uploaded.
5756    /// Should be empty if the upload was not multipart.
5757    /// (optional)
5758    #[prost(message, repeated, tag = "4")]
5759    pub completed_parts: ::prost::alloc::vec::Vec<CompletedPart>,
5760    /// If the upload was multipart, this is the upload id which should be completed.
5761    /// Should be empty if the upload was not multipart.
5762    /// (optional)
5763    #[prost(string, tag = "5")]
5764    pub upload_id: ::prost::alloc::string::String,
5765}
5766#[derive(serde::Deserialize, serde::Serialize)]
5767#[allow(clippy::derive_partial_eq_without_eq)]
5768#[derive(Clone, PartialEq, ::prost::Message)]
5769pub struct FinishObjectStagingResponse {
5770    /// (new) Object overview
5771    #[prost(message, optional, tag = "1")]
5772    pub object: ::core::option::Option<super::super::models::v2::Object>,
5773}
5774#[derive(serde::Deserialize, serde::Serialize)]
5775#[allow(clippy::derive_partial_eq_without_eq)]
5776#[derive(Clone, PartialEq, ::prost::Message)]
5777pub struct UpdateObjectRequest {
5778    /// Existing object ID
5779    #[prost(string, tag = "1")]
5780    pub object_id: ::prost::alloc::string::String,
5781    /// object name
5782    #[prost(string, optional, tag = "2")]
5783    pub name: ::core::option::Option<::prost::alloc::string::String>,
5784    /// object description
5785    #[prost(string, optional, tag = "3")]
5786    pub description: ::core::option::Option<::prost::alloc::string::String>,
5787    /// key_values to add
5788    #[prost(message, repeated, tag = "4")]
5789    pub add_key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
5790    /// key_values to remove
5791    #[prost(message, repeated, tag = "5")]
5792    pub remove_key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
5793    /// New DataClass
5794    #[prost(enumeration = "super::super::models::v2::DataClass", tag = "7")]
5795    pub data_class: i32,
5796    #[prost(message, repeated, tag = "12")]
5797    pub hashes: ::prost::alloc::vec::Vec<super::super::models::v2::Hash>,
5798    /// Force new object revision
5799    #[prost(bool, tag = "13")]
5800    pub force_revision: bool,
5801    #[prost(string, optional, tag = "14")]
5802    pub metadata_license_tag: ::core::option::Option<::prost::alloc::string::String>,
5803    #[prost(string, optional, tag = "15")]
5804    pub data_license_tag: ::core::option::Option<::prost::alloc::string::String>,
5805    /// Parent can be one of all other resources
5806    #[prost(oneof = "update_object_request::Parent", tags = "8, 9, 10")]
5807    pub parent: ::core::option::Option<update_object_request::Parent>,
5808}
5809/// Nested message and enum types in `UpdateObjectRequest`.
5810pub mod update_object_request {
5811    /// Parent can be one of all other resources
5812    #[derive(serde::Deserialize, serde::Serialize)]
5813    #[allow(clippy::derive_partial_eq_without_eq)]
5814    #[derive(Clone, PartialEq, ::prost::Oneof)]
5815    pub enum Parent {
5816        #[prost(string, tag = "8")]
5817        ProjectId(::prost::alloc::string::String),
5818        #[prost(string, tag = "9")]
5819        CollectionId(::prost::alloc::string::String),
5820        #[prost(string, tag = "10")]
5821        DatasetId(::prost::alloc::string::String),
5822    }
5823}
5824#[derive(serde::Deserialize, serde::Serialize)]
5825#[allow(clippy::derive_partial_eq_without_eq)]
5826#[derive(Clone, PartialEq, ::prost::Message)]
5827pub struct UpdateObjectResponse {
5828    #[prost(message, optional, tag = "1")]
5829    pub object: ::core::option::Option<super::super::models::v2::Object>,
5830    #[prost(bool, tag = "2")]
5831    pub new_revision: bool,
5832}
5833#[derive(serde::Deserialize, serde::Serialize)]
5834#[allow(clippy::derive_partial_eq_without_eq)]
5835#[derive(Clone, PartialEq, ::prost::Message)]
5836pub struct CloneObjectRequest {
5837    /// ObjectId
5838    #[prost(string, tag = "1")]
5839    pub object_id: ::prost::alloc::string::String,
5840    ///
5841    #[prost(oneof = "clone_object_request::Parent", tags = "2, 3, 4")]
5842    pub parent: ::core::option::Option<clone_object_request::Parent>,
5843}
5844/// Nested message and enum types in `CloneObjectRequest`.
5845pub mod clone_object_request {
5846    ///
5847    #[derive(serde::Deserialize, serde::Serialize)]
5848    #[allow(clippy::derive_partial_eq_without_eq)]
5849    #[derive(Clone, PartialEq, ::prost::Oneof)]
5850    pub enum Parent {
5851        #[prost(string, tag = "2")]
5852        ProjectId(::prost::alloc::string::String),
5853        #[prost(string, tag = "3")]
5854        CollectionId(::prost::alloc::string::String),
5855        #[prost(string, tag = "4")]
5856        DatasetId(::prost::alloc::string::String),
5857    }
5858}
5859#[derive(serde::Deserialize, serde::Serialize)]
5860#[allow(clippy::derive_partial_eq_without_eq)]
5861#[derive(Clone, PartialEq, ::prost::Message)]
5862pub struct CloneObjectResponse {
5863    /// This describes the new object.
5864    #[prost(message, optional, tag = "1")]
5865    pub object: ::core::option::Option<super::super::models::v2::Object>,
5866}
5867#[derive(serde::Deserialize, serde::Serialize)]
5868#[allow(clippy::derive_partial_eq_without_eq)]
5869#[derive(Clone, PartialEq, ::prost::Message)]
5870pub struct DeleteObjectRequest {
5871    /// ObjectId
5872    #[prost(string, tag = "1")]
5873    pub object_id: ::prost::alloc::string::String,
5874    /// Delete including revisions
5875    #[prost(bool, tag = "2")]
5876    pub with_revisions: bool,
5877}
5878#[derive(serde::Deserialize, serde::Serialize)]
5879#[allow(clippy::derive_partial_eq_without_eq)]
5880#[derive(Clone, PartialEq, ::prost::Message)]
5881pub struct DeleteObjectResponse {}
5882#[derive(serde::Deserialize, serde::Serialize)]
5883#[allow(clippy::derive_partial_eq_without_eq)]
5884#[derive(Clone, PartialEq, ::prost::Message)]
5885pub struct GetObjectRequest {
5886    /// Object Id
5887    #[prost(string, tag = "1")]
5888    pub object_id: ::prost::alloc::string::String,
5889}
5890#[derive(serde::Deserialize, serde::Serialize)]
5891#[allow(clippy::derive_partial_eq_without_eq)]
5892#[derive(Clone, PartialEq, ::prost::Message)]
5893pub struct GetObjectResponse {
5894    #[prost(message, optional, tag = "1")]
5895    pub object: ::core::option::Option<super::super::models::v2::Object>,
5896}
5897#[derive(serde::Deserialize, serde::Serialize)]
5898#[allow(clippy::derive_partial_eq_without_eq)]
5899#[derive(Clone, PartialEq, ::prost::Message)]
5900pub struct GetObjectsRequest {
5901    /// Object ids
5902    #[prost(string, repeated, tag = "1")]
5903    pub object_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
5904}
5905#[derive(serde::Deserialize, serde::Serialize)]
5906#[allow(clippy::derive_partial_eq_without_eq)]
5907#[derive(Clone, PartialEq, ::prost::Message)]
5908pub struct GetObjectsResponse {
5909    /// A List of objects
5910    #[prost(message, repeated, tag = "1")]
5911    pub objects: ::prost::alloc::vec::Vec<super::super::models::v2::Object>,
5912}
5913#[derive(serde::Deserialize, serde::Serialize)]
5914#[allow(clippy::derive_partial_eq_without_eq)]
5915#[derive(Clone, PartialEq, ::prost::Message)]
5916pub struct GetObjectRevisionsRequest {
5917    /// Object id
5918    #[prost(string, tag = "2")]
5919    pub object_id: ::prost::alloc::string::String,
5920}
5921#[derive(serde::Deserialize, serde::Serialize)]
5922#[allow(clippy::derive_partial_eq_without_eq)]
5923#[derive(Clone, PartialEq, ::prost::Message)]
5924pub struct GetObjectRevisionsResponse {
5925    /// List of objects
5926    #[prost(message, repeated, tag = "1")]
5927    pub objects: ::prost::alloc::vec::Vec<super::super::models::v2::Object>,
5928}
5929#[derive(serde::Deserialize, serde::Serialize)]
5930#[allow(clippy::derive_partial_eq_without_eq)]
5931#[derive(Clone, PartialEq, ::prost::Message)]
5932pub struct GetLatestObjectRevisionRequest {
5933    /// Object id
5934    #[prost(string, tag = "1")]
5935    pub object_id: ::prost::alloc::string::String,
5936}
5937#[derive(serde::Deserialize, serde::Serialize)]
5938#[allow(clippy::derive_partial_eq_without_eq)]
5939#[derive(Clone, PartialEq, ::prost::Message)]
5940pub struct GetLatestObjectRevisionResponse {
5941    /// The object with the latest revision
5942    #[prost(message, optional, tag = "1")]
5943    pub object: ::core::option::Option<super::super::models::v2::Object>,
5944}
5945#[derive(serde::Deserialize, serde::Serialize)]
5946#[allow(clippy::derive_partial_eq_without_eq)]
5947#[derive(Clone, PartialEq, ::prost::Message)]
5948pub struct GetObjectEndpointsRequest {
5949    /// Collection id
5950    #[prost(string, tag = "1")]
5951    pub collection_id: ::prost::alloc::string::String,
5952    /// Object id
5953    #[prost(string, tag = "2")]
5954    pub object_id: ::prost::alloc::string::String,
5955}
5956#[derive(serde::Deserialize, serde::Serialize)]
5957#[allow(clippy::derive_partial_eq_without_eq)]
5958#[derive(Clone, PartialEq, ::prost::Message)]
5959pub struct UpdateObjectTitleRequest {
5960    /// Object id
5961    #[prost(string, tag = "1")]
5962    pub object_id: ::prost::alloc::string::String,
5963    /// New title
5964    #[prost(string, tag = "2")]
5965    pub title: ::prost::alloc::string::String,
5966}
5967#[derive(serde::Deserialize, serde::Serialize)]
5968#[allow(clippy::derive_partial_eq_without_eq)]
5969#[derive(Clone, PartialEq, ::prost::Message)]
5970pub struct UpdateObjectTitleResponse {
5971    /// The updated object
5972    #[prost(message, optional, tag = "1")]
5973    pub object: ::core::option::Option<super::super::models::v2::Object>,
5974}
5975#[derive(serde::Deserialize, serde::Serialize)]
5976#[allow(clippy::derive_partial_eq_without_eq)]
5977#[derive(Clone, PartialEq, ::prost::Message)]
5978pub struct UpdateObjectAuthorsRequest {
5979    /// Object id
5980    #[prost(string, tag = "1")]
5981    pub object_id: ::prost::alloc::string::String,
5982    /// Add authors
5983    #[prost(message, repeated, tag = "2")]
5984    pub add_authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
5985    /// Remove authors
5986    #[prost(message, repeated, tag = "3")]
5987    pub remove_authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
5988}
5989#[derive(serde::Deserialize, serde::Serialize)]
5990#[allow(clippy::derive_partial_eq_without_eq)]
5991#[derive(Clone, PartialEq, ::prost::Message)]
5992pub struct UpdateObjectAuthorsResponse {
5993    /// The updated object
5994    #[prost(message, optional, tag = "1")]
5995    pub object: ::core::option::Option<super::super::models::v2::Object>,
5996}
5997#[derive(serde::Deserialize, serde::Serialize)]
5998#[allow(clippy::derive_partial_eq_without_eq)]
5999#[derive(Clone, PartialEq, ::prost::Message)]
6000pub struct SetObjectHashesRequest {
6001    /// Object id
6002    #[prost(string, tag = "1")]
6003    pub object_id: ::prost::alloc::string::String,
6004    /// Hashes
6005    #[prost(message, repeated, tag = "2")]
6006    pub hashes: ::prost::alloc::vec::Vec<super::super::models::v2::Hash>,
6007}
6008#[derive(serde::Deserialize, serde::Serialize)]
6009#[allow(clippy::derive_partial_eq_without_eq)]
6010#[derive(Clone, PartialEq, ::prost::Message)]
6011pub struct SetObjectHashesResponse {
6012    /// The updated object (possibly with error status)
6013    #[prost(message, optional, tag = "1")]
6014    pub object: ::core::option::Option<super::super::models::v2::Object>,
6015}
6016/// Generated client implementations.
6017pub mod object_service_client {
6018    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
6019    use tonic::codegen::*;
6020    use tonic::codegen::http::Uri;
6021    /// ObjectService
6022    ///
6023    /// Status: BETA
6024    ///
6025    /// Contains all methods that get/create or update objects and associated resources
6026    #[derive(Debug, Clone)]
6027    pub struct ObjectServiceClient<T> {
6028        inner: tonic::client::Grpc<T>,
6029    }
6030    impl ObjectServiceClient<tonic::transport::Channel> {
6031        /// Attempt to create a new client by connecting to a given endpoint.
6032        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
6033        where
6034            D: TryInto<tonic::transport::Endpoint>,
6035            D::Error: Into<StdError>,
6036        {
6037            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
6038            Ok(Self::new(conn))
6039        }
6040    }
6041    impl<T> ObjectServiceClient<T>
6042    where
6043        T: tonic::client::GrpcService<tonic::body::BoxBody>,
6044        T::Error: Into<StdError>,
6045        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
6046        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
6047    {
6048        pub fn new(inner: T) -> Self {
6049            let inner = tonic::client::Grpc::new(inner);
6050            Self { inner }
6051        }
6052        pub fn with_origin(inner: T, origin: Uri) -> Self {
6053            let inner = tonic::client::Grpc::with_origin(inner, origin);
6054            Self { inner }
6055        }
6056        pub fn with_interceptor<F>(
6057            inner: T,
6058            interceptor: F,
6059        ) -> ObjectServiceClient<InterceptedService<T, F>>
6060        where
6061            F: tonic::service::Interceptor,
6062            T::ResponseBody: Default,
6063            T: tonic::codegen::Service<
6064                http::Request<tonic::body::BoxBody>,
6065                Response = http::Response<
6066                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
6067                >,
6068            >,
6069            <T as tonic::codegen::Service<
6070                http::Request<tonic::body::BoxBody>,
6071            >>::Error: Into<StdError> + Send + Sync,
6072        {
6073            ObjectServiceClient::new(InterceptedService::new(inner, interceptor))
6074        }
6075        /// Compress requests with the given encoding.
6076        ///
6077        /// This requires the server to support it otherwise it might respond with an
6078        /// error.
6079        #[must_use]
6080        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
6081            self.inner = self.inner.send_compressed(encoding);
6082            self
6083        }
6084        /// Enable decompressing responses.
6085        #[must_use]
6086        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
6087            self.inner = self.inner.accept_compressed(encoding);
6088            self
6089        }
6090        /// Limits the maximum size of a decoded message.
6091        ///
6092        /// Default: `4MB`
6093        #[must_use]
6094        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
6095            self.inner = self.inner.max_decoding_message_size(limit);
6096            self
6097        }
6098        /// Limits the maximum size of an encoded message.
6099        ///
6100        /// Default: `usize::MAX`
6101        #[must_use]
6102        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
6103            self.inner = self.inner.max_encoding_message_size(limit);
6104            self
6105        }
6106        /// CreateObject
6107        ///
6108        /// Status: BETA
6109        ///
6110        /// This creates a new object and puts it in a staging area.
6111        /// Staging objects have an "INITIALIZING" status
6112        /// and need to be finished either manually or by uploading data.
6113        pub async fn create_object(
6114            &mut self,
6115            request: impl tonic::IntoRequest<super::CreateObjectRequest>,
6116        ) -> std::result::Result<
6117            tonic::Response<super::CreateObjectResponse>,
6118            tonic::Status,
6119        > {
6120            self.inner
6121                .ready()
6122                .await
6123                .map_err(|e| {
6124                    tonic::Status::new(
6125                        tonic::Code::Unknown,
6126                        format!("Service was not ready: {}", e.into()),
6127                    )
6128                })?;
6129            let codec = tonic::codec::ProstCodec::default();
6130            let path = http::uri::PathAndQuery::from_static(
6131                "/aruna.api.storage.services.v2.ObjectService/CreateObject",
6132            );
6133            let mut req = request.into_request();
6134            req.extensions_mut()
6135                .insert(
6136                    GrpcMethod::new(
6137                        "aruna.api.storage.services.v2.ObjectService",
6138                        "CreateObject",
6139                    ),
6140                );
6141            self.inner.unary(req, path, codec).await
6142        }
6143        /// GetUploadURL
6144        ///
6145        /// Status: BETA
6146        ///
6147        /// This is a proxy method that will call the apropriate method at dataproxy level
6148        /// This method will return a (multi-part) url that can be used to upload a
6149        /// file to S3. Part is a optional query parameter that can be used to upload a
6150        /// part of the file / multipart upload.
6151        pub async fn get_upload_url(
6152            &mut self,
6153            request: impl tonic::IntoRequest<super::GetUploadUrlRequest>,
6154        ) -> std::result::Result<
6155            tonic::Response<super::GetUploadUrlResponse>,
6156            tonic::Status,
6157        > {
6158            self.inner
6159                .ready()
6160                .await
6161                .map_err(|e| {
6162                    tonic::Status::new(
6163                        tonic::Code::Unknown,
6164                        format!("Service was not ready: {}", e.into()),
6165                    )
6166                })?;
6167            let codec = tonic::codec::ProstCodec::default();
6168            let path = http::uri::PathAndQuery::from_static(
6169                "/aruna.api.storage.services.v2.ObjectService/GetUploadURL",
6170            );
6171            let mut req = request.into_request();
6172            req.extensions_mut()
6173                .insert(
6174                    GrpcMethod::new(
6175                        "aruna.api.storage.services.v2.ObjectService",
6176                        "GetUploadURL",
6177                    ),
6178                );
6179            self.inner.unary(req, path, codec).await
6180        }
6181        /// GetDownloadUrl
6182        ///
6183        /// Status: BETA
6184        ///
6185        /// This is a proxy method that will call the apropriate method at dataproxy level
6186        /// will return a url that can be used to download a file from S3.
6187        pub async fn get_download_url(
6188            &mut self,
6189            request: impl tonic::IntoRequest<super::GetDownloadUrlRequest>,
6190        ) -> std::result::Result<
6191            tonic::Response<super::GetDownloadUrlResponse>,
6192            tonic::Status,
6193        > {
6194            self.inner
6195                .ready()
6196                .await
6197                .map_err(|e| {
6198                    tonic::Status::new(
6199                        tonic::Code::Unknown,
6200                        format!("Service was not ready: {}", e.into()),
6201                    )
6202                })?;
6203            let codec = tonic::codec::ProstCodec::default();
6204            let path = http::uri::PathAndQuery::from_static(
6205                "/aruna.api.storage.services.v2.ObjectService/GetDownloadURL",
6206            );
6207            let mut req = request.into_request();
6208            req.extensions_mut()
6209                .insert(
6210                    GrpcMethod::new(
6211                        "aruna.api.storage.services.v2.ObjectService",
6212                        "GetDownloadURL",
6213                    ),
6214                );
6215            self.inner.unary(req, path, codec).await
6216        }
6217        /// FinishObjectStaging
6218        ///
6219        /// Status: BETA
6220        ///
6221        /// This method completes the staging of an object.
6222        pub async fn finish_object_staging(
6223            &mut self,
6224            request: impl tonic::IntoRequest<super::FinishObjectStagingRequest>,
6225        ) -> std::result::Result<
6226            tonic::Response<super::FinishObjectStagingResponse>,
6227            tonic::Status,
6228        > {
6229            self.inner
6230                .ready()
6231                .await
6232                .map_err(|e| {
6233                    tonic::Status::new(
6234                        tonic::Code::Unknown,
6235                        format!("Service was not ready: {}", e.into()),
6236                    )
6237                })?;
6238            let codec = tonic::codec::ProstCodec::default();
6239            let path = http::uri::PathAndQuery::from_static(
6240                "/aruna.api.storage.services.v2.ObjectService/FinishObjectStaging",
6241            );
6242            let mut req = request.into_request();
6243            req.extensions_mut()
6244                .insert(
6245                    GrpcMethod::new(
6246                        "aruna.api.storage.services.v2.ObjectService",
6247                        "FinishObjectStaging",
6248                    ),
6249                );
6250            self.inner.unary(req, path, codec).await
6251        }
6252        /// UpdateObject
6253        ///
6254        /// Status: BETA
6255        ///
6256        /// Objects are immutable!
6257        /// Updating an object will create a new revision for the object
6258        /// This method will put the new revision in a staging area.
6259        /// Staged objects will get a separate staging id and need to be finished
6260        /// before they can be used.
6261        pub async fn update_object(
6262            &mut self,
6263            request: impl tonic::IntoRequest<super::UpdateObjectRequest>,
6264        ) -> std::result::Result<
6265            tonic::Response<super::UpdateObjectResponse>,
6266            tonic::Status,
6267        > {
6268            self.inner
6269                .ready()
6270                .await
6271                .map_err(|e| {
6272                    tonic::Status::new(
6273                        tonic::Code::Unknown,
6274                        format!("Service was not ready: {}", e.into()),
6275                    )
6276                })?;
6277            let codec = tonic::codec::ProstCodec::default();
6278            let path = http::uri::PathAndQuery::from_static(
6279                "/aruna.api.storage.services.v2.ObjectService/UpdateObject",
6280            );
6281            let mut req = request.into_request();
6282            req.extensions_mut()
6283                .insert(
6284                    GrpcMethod::new(
6285                        "aruna.api.storage.services.v2.ObjectService",
6286                        "UpdateObject",
6287                    ),
6288                );
6289            self.inner.unary(req, path, codec).await
6290        }
6291        /// CloneObject
6292        ///
6293        /// Status: BETA
6294        ///
6295        /// This method clones an object and creates a copy in the same collection.
6296        /// This copy has a new id and revision and will not receive any updates from
6297        /// the original object.
6298        pub async fn clone_object(
6299            &mut self,
6300            request: impl tonic::IntoRequest<super::CloneObjectRequest>,
6301        ) -> std::result::Result<
6302            tonic::Response<super::CloneObjectResponse>,
6303            tonic::Status,
6304        > {
6305            self.inner
6306                .ready()
6307                .await
6308                .map_err(|e| {
6309                    tonic::Status::new(
6310                        tonic::Code::Unknown,
6311                        format!("Service was not ready: {}", e.into()),
6312                    )
6313                })?;
6314            let codec = tonic::codec::ProstCodec::default();
6315            let path = http::uri::PathAndQuery::from_static(
6316                "/aruna.api.storage.services.v2.ObjectService/CloneObject",
6317            );
6318            let mut req = request.into_request();
6319            req.extensions_mut()
6320                .insert(
6321                    GrpcMethod::new(
6322                        "aruna.api.storage.services.v2.ObjectService",
6323                        "CloneObject",
6324                    ),
6325                );
6326            self.inner.unary(req, path, codec).await
6327        }
6328        /// DeleteObject
6329        ///
6330        /// Status: BETA
6331        ///
6332        /// Deletes the object with the complete revision history.
6333        pub async fn delete_object(
6334            &mut self,
6335            request: impl tonic::IntoRequest<super::DeleteObjectRequest>,
6336        ) -> std::result::Result<
6337            tonic::Response<super::DeleteObjectResponse>,
6338            tonic::Status,
6339        > {
6340            self.inner
6341                .ready()
6342                .await
6343                .map_err(|e| {
6344                    tonic::Status::new(
6345                        tonic::Code::Unknown,
6346                        format!("Service was not ready: {}", e.into()),
6347                    )
6348                })?;
6349            let codec = tonic::codec::ProstCodec::default();
6350            let path = http::uri::PathAndQuery::from_static(
6351                "/aruna.api.storage.services.v2.ObjectService/DeleteObject",
6352            );
6353            let mut req = request.into_request();
6354            req.extensions_mut()
6355                .insert(
6356                    GrpcMethod::new(
6357                        "aruna.api.storage.services.v2.ObjectService",
6358                        "DeleteObject",
6359                    ),
6360                );
6361            self.inner.unary(req, path, codec).await
6362        }
6363        /// GetObject
6364        ///
6365        /// Status: BETA
6366        ///
6367        /// gets a specific Object by ID that is associated to the
6368        /// current collection By default only the latest revision of an object will be
6369        /// returned Specify a revision_number to select an older revision With the
6370        /// optional with_url boolean a download link can automatically be requested
6371        pub async fn get_object(
6372            &mut self,
6373            request: impl tonic::IntoRequest<super::GetObjectRequest>,
6374        ) -> std::result::Result<
6375            tonic::Response<super::GetObjectResponse>,
6376            tonic::Status,
6377        > {
6378            self.inner
6379                .ready()
6380                .await
6381                .map_err(|e| {
6382                    tonic::Status::new(
6383                        tonic::Code::Unknown,
6384                        format!("Service was not ready: {}", e.into()),
6385                    )
6386                })?;
6387            let codec = tonic::codec::ProstCodec::default();
6388            let path = http::uri::PathAndQuery::from_static(
6389                "/aruna.api.storage.services.v2.ObjectService/GetObject",
6390            );
6391            let mut req = request.into_request();
6392            req.extensions_mut()
6393                .insert(
6394                    GrpcMethod::new(
6395                        "aruna.api.storage.services.v2.ObjectService",
6396                        "GetObject",
6397                    ),
6398                );
6399            self.inner.unary(req, path, codec).await
6400        }
6401        /// GetObjects
6402        ///
6403        /// Status: BETA
6404        ///
6405        /// Get multiple objects by ID at once
6406        pub async fn get_objects(
6407            &mut self,
6408            request: impl tonic::IntoRequest<super::GetObjectsRequest>,
6409        ) -> std::result::Result<
6410            tonic::Response<super::GetObjectsResponse>,
6411            tonic::Status,
6412        > {
6413            self.inner
6414                .ready()
6415                .await
6416                .map_err(|e| {
6417                    tonic::Status::new(
6418                        tonic::Code::Unknown,
6419                        format!("Service was not ready: {}", e.into()),
6420                    )
6421                })?;
6422            let codec = tonic::codec::ProstCodec::default();
6423            let path = http::uri::PathAndQuery::from_static(
6424                "/aruna.api.storage.services.v2.ObjectService/GetObjects",
6425            );
6426            let mut req = request.into_request();
6427            req.extensions_mut()
6428                .insert(
6429                    GrpcMethod::new(
6430                        "aruna.api.storage.services.v2.ObjectService",
6431                        "GetObjects",
6432                    ),
6433                );
6434            self.inner.unary(req, path, codec).await
6435        }
6436        /// UpdateTitle
6437        ///
6438        /// Status: ALPHA
6439        ///
6440        /// This method updates the title of an object
6441        pub async fn update_object_title(
6442            &mut self,
6443            request: impl tonic::IntoRequest<super::UpdateObjectTitleRequest>,
6444        ) -> std::result::Result<
6445            tonic::Response<super::UpdateObjectTitleResponse>,
6446            tonic::Status,
6447        > {
6448            self.inner
6449                .ready()
6450                .await
6451                .map_err(|e| {
6452                    tonic::Status::new(
6453                        tonic::Code::Unknown,
6454                        format!("Service was not ready: {}", e.into()),
6455                    )
6456                })?;
6457            let codec = tonic::codec::ProstCodec::default();
6458            let path = http::uri::PathAndQuery::from_static(
6459                "/aruna.api.storage.services.v2.ObjectService/UpdateObjectTitle",
6460            );
6461            let mut req = request.into_request();
6462            req.extensions_mut()
6463                .insert(
6464                    GrpcMethod::new(
6465                        "aruna.api.storage.services.v2.ObjectService",
6466                        "UpdateObjectTitle",
6467                    ),
6468                );
6469            self.inner.unary(req, path, codec).await
6470        }
6471        /// UpdateAuthors
6472        ///
6473        /// Status: ALPHA
6474        ///
6475        /// This method updates the authors of an object
6476        pub async fn update_object_authors(
6477            &mut self,
6478            request: impl tonic::IntoRequest<super::UpdateObjectAuthorsRequest>,
6479        ) -> std::result::Result<
6480            tonic::Response<super::UpdateObjectAuthorsResponse>,
6481            tonic::Status,
6482        > {
6483            self.inner
6484                .ready()
6485                .await
6486                .map_err(|e| {
6487                    tonic::Status::new(
6488                        tonic::Code::Unknown,
6489                        format!("Service was not ready: {}", e.into()),
6490                    )
6491                })?;
6492            let codec = tonic::codec::ProstCodec::default();
6493            let path = http::uri::PathAndQuery::from_static(
6494                "/aruna.api.storage.services.v2.ObjectService/UpdateObjectAuthors",
6495            );
6496            let mut req = request.into_request();
6497            req.extensions_mut()
6498                .insert(
6499                    GrpcMethod::new(
6500                        "aruna.api.storage.services.v2.ObjectService",
6501                        "UpdateObjectAuthors",
6502                    ),
6503                );
6504            self.inner.unary(req, path, codec).await
6505        }
6506        /// SetObjectHashes
6507        ///
6508        /// Status: ALPHA
6509        ///
6510        /// This method sets the object hashes if not already set
6511        /// if a hash is already set, it will be compared to the new hash and
6512        /// set the status to ERROR if they do not match
6513        pub async fn set_object_hashes(
6514            &mut self,
6515            request: impl tonic::IntoRequest<super::SetObjectHashesRequest>,
6516        ) -> std::result::Result<
6517            tonic::Response<super::SetObjectHashesResponse>,
6518            tonic::Status,
6519        > {
6520            self.inner
6521                .ready()
6522                .await
6523                .map_err(|e| {
6524                    tonic::Status::new(
6525                        tonic::Code::Unknown,
6526                        format!("Service was not ready: {}", e.into()),
6527                    )
6528                })?;
6529            let codec = tonic::codec::ProstCodec::default();
6530            let path = http::uri::PathAndQuery::from_static(
6531                "/aruna.api.storage.services.v2.ObjectService/SetObjectHashes",
6532            );
6533            let mut req = request.into_request();
6534            req.extensions_mut()
6535                .insert(
6536                    GrpcMethod::new(
6537                        "aruna.api.storage.services.v2.ObjectService",
6538                        "SetObjectHashes",
6539                    ),
6540                );
6541            self.inner.unary(req, path, codec).await
6542        }
6543    }
6544}
6545/// Generated server implementations.
6546pub mod object_service_server {
6547    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
6548    use tonic::codegen::*;
6549    /// Generated trait containing gRPC methods that should be implemented for use with ObjectServiceServer.
6550    #[async_trait]
6551    pub trait ObjectService: Send + Sync + 'static {
6552        /// CreateObject
6553        ///
6554        /// Status: BETA
6555        ///
6556        /// This creates a new object and puts it in a staging area.
6557        /// Staging objects have an "INITIALIZING" status
6558        /// and need to be finished either manually or by uploading data.
6559        async fn create_object(
6560            &self,
6561            request: tonic::Request<super::CreateObjectRequest>,
6562        ) -> std::result::Result<
6563            tonic::Response<super::CreateObjectResponse>,
6564            tonic::Status,
6565        >;
6566        /// GetUploadURL
6567        ///
6568        /// Status: BETA
6569        ///
6570        /// This is a proxy method that will call the apropriate method at dataproxy level
6571        /// This method will return a (multi-part) url that can be used to upload a
6572        /// file to S3. Part is a optional query parameter that can be used to upload a
6573        /// part of the file / multipart upload.
6574        async fn get_upload_url(
6575            &self,
6576            request: tonic::Request<super::GetUploadUrlRequest>,
6577        ) -> std::result::Result<
6578            tonic::Response<super::GetUploadUrlResponse>,
6579            tonic::Status,
6580        >;
6581        /// GetDownloadUrl
6582        ///
6583        /// Status: BETA
6584        ///
6585        /// This is a proxy method that will call the apropriate method at dataproxy level
6586        /// will return a url that can be used to download a file from S3.
6587        async fn get_download_url(
6588            &self,
6589            request: tonic::Request<super::GetDownloadUrlRequest>,
6590        ) -> std::result::Result<
6591            tonic::Response<super::GetDownloadUrlResponse>,
6592            tonic::Status,
6593        >;
6594        /// FinishObjectStaging
6595        ///
6596        /// Status: BETA
6597        ///
6598        /// This method completes the staging of an object.
6599        async fn finish_object_staging(
6600            &self,
6601            request: tonic::Request<super::FinishObjectStagingRequest>,
6602        ) -> std::result::Result<
6603            tonic::Response<super::FinishObjectStagingResponse>,
6604            tonic::Status,
6605        >;
6606        /// UpdateObject
6607        ///
6608        /// Status: BETA
6609        ///
6610        /// Objects are immutable!
6611        /// Updating an object will create a new revision for the object
6612        /// This method will put the new revision in a staging area.
6613        /// Staged objects will get a separate staging id and need to be finished
6614        /// before they can be used.
6615        async fn update_object(
6616            &self,
6617            request: tonic::Request<super::UpdateObjectRequest>,
6618        ) -> std::result::Result<
6619            tonic::Response<super::UpdateObjectResponse>,
6620            tonic::Status,
6621        >;
6622        /// CloneObject
6623        ///
6624        /// Status: BETA
6625        ///
6626        /// This method clones an object and creates a copy in the same collection.
6627        /// This copy has a new id and revision and will not receive any updates from
6628        /// the original object.
6629        async fn clone_object(
6630            &self,
6631            request: tonic::Request<super::CloneObjectRequest>,
6632        ) -> std::result::Result<
6633            tonic::Response<super::CloneObjectResponse>,
6634            tonic::Status,
6635        >;
6636        /// DeleteObject
6637        ///
6638        /// Status: BETA
6639        ///
6640        /// Deletes the object with the complete revision history.
6641        async fn delete_object(
6642            &self,
6643            request: tonic::Request<super::DeleteObjectRequest>,
6644        ) -> std::result::Result<
6645            tonic::Response<super::DeleteObjectResponse>,
6646            tonic::Status,
6647        >;
6648        /// GetObject
6649        ///
6650        /// Status: BETA
6651        ///
6652        /// gets a specific Object by ID that is associated to the
6653        /// current collection By default only the latest revision of an object will be
6654        /// returned Specify a revision_number to select an older revision With the
6655        /// optional with_url boolean a download link can automatically be requested
6656        async fn get_object(
6657            &self,
6658            request: tonic::Request<super::GetObjectRequest>,
6659        ) -> std::result::Result<
6660            tonic::Response<super::GetObjectResponse>,
6661            tonic::Status,
6662        >;
6663        /// GetObjects
6664        ///
6665        /// Status: BETA
6666        ///
6667        /// Get multiple objects by ID at once
6668        async fn get_objects(
6669            &self,
6670            request: tonic::Request<super::GetObjectsRequest>,
6671        ) -> std::result::Result<
6672            tonic::Response<super::GetObjectsResponse>,
6673            tonic::Status,
6674        >;
6675        /// UpdateTitle
6676        ///
6677        /// Status: ALPHA
6678        ///
6679        /// This method updates the title of an object
6680        async fn update_object_title(
6681            &self,
6682            request: tonic::Request<super::UpdateObjectTitleRequest>,
6683        ) -> std::result::Result<
6684            tonic::Response<super::UpdateObjectTitleResponse>,
6685            tonic::Status,
6686        >;
6687        /// UpdateAuthors
6688        ///
6689        /// Status: ALPHA
6690        ///
6691        /// This method updates the authors of an object
6692        async fn update_object_authors(
6693            &self,
6694            request: tonic::Request<super::UpdateObjectAuthorsRequest>,
6695        ) -> std::result::Result<
6696            tonic::Response<super::UpdateObjectAuthorsResponse>,
6697            tonic::Status,
6698        >;
6699        /// SetObjectHashes
6700        ///
6701        /// Status: ALPHA
6702        ///
6703        /// This method sets the object hashes if not already set
6704        /// if a hash is already set, it will be compared to the new hash and
6705        /// set the status to ERROR if they do not match
6706        async fn set_object_hashes(
6707            &self,
6708            request: tonic::Request<super::SetObjectHashesRequest>,
6709        ) -> std::result::Result<
6710            tonic::Response<super::SetObjectHashesResponse>,
6711            tonic::Status,
6712        >;
6713    }
6714    /// ObjectService
6715    ///
6716    /// Status: BETA
6717    ///
6718    /// Contains all methods that get/create or update objects and associated resources
6719    #[derive(Debug)]
6720    pub struct ObjectServiceServer<T: ObjectService> {
6721        inner: _Inner<T>,
6722        accept_compression_encodings: EnabledCompressionEncodings,
6723        send_compression_encodings: EnabledCompressionEncodings,
6724        max_decoding_message_size: Option<usize>,
6725        max_encoding_message_size: Option<usize>,
6726    }
6727    struct _Inner<T>(Arc<T>);
6728    impl<T: ObjectService> ObjectServiceServer<T> {
6729        pub fn new(inner: T) -> Self {
6730            Self::from_arc(Arc::new(inner))
6731        }
6732        pub fn from_arc(inner: Arc<T>) -> Self {
6733            let inner = _Inner(inner);
6734            Self {
6735                inner,
6736                accept_compression_encodings: Default::default(),
6737                send_compression_encodings: Default::default(),
6738                max_decoding_message_size: None,
6739                max_encoding_message_size: None,
6740            }
6741        }
6742        pub fn with_interceptor<F>(
6743            inner: T,
6744            interceptor: F,
6745        ) -> InterceptedService<Self, F>
6746        where
6747            F: tonic::service::Interceptor,
6748        {
6749            InterceptedService::new(Self::new(inner), interceptor)
6750        }
6751        /// Enable decompressing requests with the given encoding.
6752        #[must_use]
6753        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
6754            self.accept_compression_encodings.enable(encoding);
6755            self
6756        }
6757        /// Compress responses with the given encoding, if the client supports it.
6758        #[must_use]
6759        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
6760            self.send_compression_encodings.enable(encoding);
6761            self
6762        }
6763        /// Limits the maximum size of a decoded message.
6764        ///
6765        /// Default: `4MB`
6766        #[must_use]
6767        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
6768            self.max_decoding_message_size = Some(limit);
6769            self
6770        }
6771        /// Limits the maximum size of an encoded message.
6772        ///
6773        /// Default: `usize::MAX`
6774        #[must_use]
6775        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
6776            self.max_encoding_message_size = Some(limit);
6777            self
6778        }
6779    }
6780    impl<T, B> tonic::codegen::Service<http::Request<B>> for ObjectServiceServer<T>
6781    where
6782        T: ObjectService,
6783        B: Body + Send + 'static,
6784        B::Error: Into<StdError> + Send + 'static,
6785    {
6786        type Response = http::Response<tonic::body::BoxBody>;
6787        type Error = std::convert::Infallible;
6788        type Future = BoxFuture<Self::Response, Self::Error>;
6789        fn poll_ready(
6790            &mut self,
6791            _cx: &mut Context<'_>,
6792        ) -> Poll<std::result::Result<(), Self::Error>> {
6793            Poll::Ready(Ok(()))
6794        }
6795        fn call(&mut self, req: http::Request<B>) -> Self::Future {
6796            let inner = self.inner.clone();
6797            match req.uri().path() {
6798                "/aruna.api.storage.services.v2.ObjectService/CreateObject" => {
6799                    #[allow(non_camel_case_types)]
6800                    struct CreateObjectSvc<T: ObjectService>(pub Arc<T>);
6801                    impl<
6802                        T: ObjectService,
6803                    > tonic::server::UnaryService<super::CreateObjectRequest>
6804                    for CreateObjectSvc<T> {
6805                        type Response = super::CreateObjectResponse;
6806                        type Future = BoxFuture<
6807                            tonic::Response<Self::Response>,
6808                            tonic::Status,
6809                        >;
6810                        fn call(
6811                            &mut self,
6812                            request: tonic::Request<super::CreateObjectRequest>,
6813                        ) -> Self::Future {
6814                            let inner = Arc::clone(&self.0);
6815                            let fut = async move {
6816                                <T as ObjectService>::create_object(&inner, request).await
6817                            };
6818                            Box::pin(fut)
6819                        }
6820                    }
6821                    let accept_compression_encodings = self.accept_compression_encodings;
6822                    let send_compression_encodings = self.send_compression_encodings;
6823                    let max_decoding_message_size = self.max_decoding_message_size;
6824                    let max_encoding_message_size = self.max_encoding_message_size;
6825                    let inner = self.inner.clone();
6826                    let fut = async move {
6827                        let inner = inner.0;
6828                        let method = CreateObjectSvc(inner);
6829                        let codec = tonic::codec::ProstCodec::default();
6830                        let mut grpc = tonic::server::Grpc::new(codec)
6831                            .apply_compression_config(
6832                                accept_compression_encodings,
6833                                send_compression_encodings,
6834                            )
6835                            .apply_max_message_size_config(
6836                                max_decoding_message_size,
6837                                max_encoding_message_size,
6838                            );
6839                        let res = grpc.unary(method, req).await;
6840                        Ok(res)
6841                    };
6842                    Box::pin(fut)
6843                }
6844                "/aruna.api.storage.services.v2.ObjectService/GetUploadURL" => {
6845                    #[allow(non_camel_case_types)]
6846                    struct GetUploadURLSvc<T: ObjectService>(pub Arc<T>);
6847                    impl<
6848                        T: ObjectService,
6849                    > tonic::server::UnaryService<super::GetUploadUrlRequest>
6850                    for GetUploadURLSvc<T> {
6851                        type Response = super::GetUploadUrlResponse;
6852                        type Future = BoxFuture<
6853                            tonic::Response<Self::Response>,
6854                            tonic::Status,
6855                        >;
6856                        fn call(
6857                            &mut self,
6858                            request: tonic::Request<super::GetUploadUrlRequest>,
6859                        ) -> Self::Future {
6860                            let inner = Arc::clone(&self.0);
6861                            let fut = async move {
6862                                <T as ObjectService>::get_upload_url(&inner, request).await
6863                            };
6864                            Box::pin(fut)
6865                        }
6866                    }
6867                    let accept_compression_encodings = self.accept_compression_encodings;
6868                    let send_compression_encodings = self.send_compression_encodings;
6869                    let max_decoding_message_size = self.max_decoding_message_size;
6870                    let max_encoding_message_size = self.max_encoding_message_size;
6871                    let inner = self.inner.clone();
6872                    let fut = async move {
6873                        let inner = inner.0;
6874                        let method = GetUploadURLSvc(inner);
6875                        let codec = tonic::codec::ProstCodec::default();
6876                        let mut grpc = tonic::server::Grpc::new(codec)
6877                            .apply_compression_config(
6878                                accept_compression_encodings,
6879                                send_compression_encodings,
6880                            )
6881                            .apply_max_message_size_config(
6882                                max_decoding_message_size,
6883                                max_encoding_message_size,
6884                            );
6885                        let res = grpc.unary(method, req).await;
6886                        Ok(res)
6887                    };
6888                    Box::pin(fut)
6889                }
6890                "/aruna.api.storage.services.v2.ObjectService/GetDownloadURL" => {
6891                    #[allow(non_camel_case_types)]
6892                    struct GetDownloadURLSvc<T: ObjectService>(pub Arc<T>);
6893                    impl<
6894                        T: ObjectService,
6895                    > tonic::server::UnaryService<super::GetDownloadUrlRequest>
6896                    for GetDownloadURLSvc<T> {
6897                        type Response = super::GetDownloadUrlResponse;
6898                        type Future = BoxFuture<
6899                            tonic::Response<Self::Response>,
6900                            tonic::Status,
6901                        >;
6902                        fn call(
6903                            &mut self,
6904                            request: tonic::Request<super::GetDownloadUrlRequest>,
6905                        ) -> Self::Future {
6906                            let inner = Arc::clone(&self.0);
6907                            let fut = async move {
6908                                <T as ObjectService>::get_download_url(&inner, request)
6909                                    .await
6910                            };
6911                            Box::pin(fut)
6912                        }
6913                    }
6914                    let accept_compression_encodings = self.accept_compression_encodings;
6915                    let send_compression_encodings = self.send_compression_encodings;
6916                    let max_decoding_message_size = self.max_decoding_message_size;
6917                    let max_encoding_message_size = self.max_encoding_message_size;
6918                    let inner = self.inner.clone();
6919                    let fut = async move {
6920                        let inner = inner.0;
6921                        let method = GetDownloadURLSvc(inner);
6922                        let codec = tonic::codec::ProstCodec::default();
6923                        let mut grpc = tonic::server::Grpc::new(codec)
6924                            .apply_compression_config(
6925                                accept_compression_encodings,
6926                                send_compression_encodings,
6927                            )
6928                            .apply_max_message_size_config(
6929                                max_decoding_message_size,
6930                                max_encoding_message_size,
6931                            );
6932                        let res = grpc.unary(method, req).await;
6933                        Ok(res)
6934                    };
6935                    Box::pin(fut)
6936                }
6937                "/aruna.api.storage.services.v2.ObjectService/FinishObjectStaging" => {
6938                    #[allow(non_camel_case_types)]
6939                    struct FinishObjectStagingSvc<T: ObjectService>(pub Arc<T>);
6940                    impl<
6941                        T: ObjectService,
6942                    > tonic::server::UnaryService<super::FinishObjectStagingRequest>
6943                    for FinishObjectStagingSvc<T> {
6944                        type Response = super::FinishObjectStagingResponse;
6945                        type Future = BoxFuture<
6946                            tonic::Response<Self::Response>,
6947                            tonic::Status,
6948                        >;
6949                        fn call(
6950                            &mut self,
6951                            request: tonic::Request<super::FinishObjectStagingRequest>,
6952                        ) -> Self::Future {
6953                            let inner = Arc::clone(&self.0);
6954                            let fut = async move {
6955                                <T as ObjectService>::finish_object_staging(&inner, request)
6956                                    .await
6957                            };
6958                            Box::pin(fut)
6959                        }
6960                    }
6961                    let accept_compression_encodings = self.accept_compression_encodings;
6962                    let send_compression_encodings = self.send_compression_encodings;
6963                    let max_decoding_message_size = self.max_decoding_message_size;
6964                    let max_encoding_message_size = self.max_encoding_message_size;
6965                    let inner = self.inner.clone();
6966                    let fut = async move {
6967                        let inner = inner.0;
6968                        let method = FinishObjectStagingSvc(inner);
6969                        let codec = tonic::codec::ProstCodec::default();
6970                        let mut grpc = tonic::server::Grpc::new(codec)
6971                            .apply_compression_config(
6972                                accept_compression_encodings,
6973                                send_compression_encodings,
6974                            )
6975                            .apply_max_message_size_config(
6976                                max_decoding_message_size,
6977                                max_encoding_message_size,
6978                            );
6979                        let res = grpc.unary(method, req).await;
6980                        Ok(res)
6981                    };
6982                    Box::pin(fut)
6983                }
6984                "/aruna.api.storage.services.v2.ObjectService/UpdateObject" => {
6985                    #[allow(non_camel_case_types)]
6986                    struct UpdateObjectSvc<T: ObjectService>(pub Arc<T>);
6987                    impl<
6988                        T: ObjectService,
6989                    > tonic::server::UnaryService<super::UpdateObjectRequest>
6990                    for UpdateObjectSvc<T> {
6991                        type Response = super::UpdateObjectResponse;
6992                        type Future = BoxFuture<
6993                            tonic::Response<Self::Response>,
6994                            tonic::Status,
6995                        >;
6996                        fn call(
6997                            &mut self,
6998                            request: tonic::Request<super::UpdateObjectRequest>,
6999                        ) -> Self::Future {
7000                            let inner = Arc::clone(&self.0);
7001                            let fut = async move {
7002                                <T as ObjectService>::update_object(&inner, request).await
7003                            };
7004                            Box::pin(fut)
7005                        }
7006                    }
7007                    let accept_compression_encodings = self.accept_compression_encodings;
7008                    let send_compression_encodings = self.send_compression_encodings;
7009                    let max_decoding_message_size = self.max_decoding_message_size;
7010                    let max_encoding_message_size = self.max_encoding_message_size;
7011                    let inner = self.inner.clone();
7012                    let fut = async move {
7013                        let inner = inner.0;
7014                        let method = UpdateObjectSvc(inner);
7015                        let codec = tonic::codec::ProstCodec::default();
7016                        let mut grpc = tonic::server::Grpc::new(codec)
7017                            .apply_compression_config(
7018                                accept_compression_encodings,
7019                                send_compression_encodings,
7020                            )
7021                            .apply_max_message_size_config(
7022                                max_decoding_message_size,
7023                                max_encoding_message_size,
7024                            );
7025                        let res = grpc.unary(method, req).await;
7026                        Ok(res)
7027                    };
7028                    Box::pin(fut)
7029                }
7030                "/aruna.api.storage.services.v2.ObjectService/CloneObject" => {
7031                    #[allow(non_camel_case_types)]
7032                    struct CloneObjectSvc<T: ObjectService>(pub Arc<T>);
7033                    impl<
7034                        T: ObjectService,
7035                    > tonic::server::UnaryService<super::CloneObjectRequest>
7036                    for CloneObjectSvc<T> {
7037                        type Response = super::CloneObjectResponse;
7038                        type Future = BoxFuture<
7039                            tonic::Response<Self::Response>,
7040                            tonic::Status,
7041                        >;
7042                        fn call(
7043                            &mut self,
7044                            request: tonic::Request<super::CloneObjectRequest>,
7045                        ) -> Self::Future {
7046                            let inner = Arc::clone(&self.0);
7047                            let fut = async move {
7048                                <T as ObjectService>::clone_object(&inner, request).await
7049                            };
7050                            Box::pin(fut)
7051                        }
7052                    }
7053                    let accept_compression_encodings = self.accept_compression_encodings;
7054                    let send_compression_encodings = self.send_compression_encodings;
7055                    let max_decoding_message_size = self.max_decoding_message_size;
7056                    let max_encoding_message_size = self.max_encoding_message_size;
7057                    let inner = self.inner.clone();
7058                    let fut = async move {
7059                        let inner = inner.0;
7060                        let method = CloneObjectSvc(inner);
7061                        let codec = tonic::codec::ProstCodec::default();
7062                        let mut grpc = tonic::server::Grpc::new(codec)
7063                            .apply_compression_config(
7064                                accept_compression_encodings,
7065                                send_compression_encodings,
7066                            )
7067                            .apply_max_message_size_config(
7068                                max_decoding_message_size,
7069                                max_encoding_message_size,
7070                            );
7071                        let res = grpc.unary(method, req).await;
7072                        Ok(res)
7073                    };
7074                    Box::pin(fut)
7075                }
7076                "/aruna.api.storage.services.v2.ObjectService/DeleteObject" => {
7077                    #[allow(non_camel_case_types)]
7078                    struct DeleteObjectSvc<T: ObjectService>(pub Arc<T>);
7079                    impl<
7080                        T: ObjectService,
7081                    > tonic::server::UnaryService<super::DeleteObjectRequest>
7082                    for DeleteObjectSvc<T> {
7083                        type Response = super::DeleteObjectResponse;
7084                        type Future = BoxFuture<
7085                            tonic::Response<Self::Response>,
7086                            tonic::Status,
7087                        >;
7088                        fn call(
7089                            &mut self,
7090                            request: tonic::Request<super::DeleteObjectRequest>,
7091                        ) -> Self::Future {
7092                            let inner = Arc::clone(&self.0);
7093                            let fut = async move {
7094                                <T as ObjectService>::delete_object(&inner, request).await
7095                            };
7096                            Box::pin(fut)
7097                        }
7098                    }
7099                    let accept_compression_encodings = self.accept_compression_encodings;
7100                    let send_compression_encodings = self.send_compression_encodings;
7101                    let max_decoding_message_size = self.max_decoding_message_size;
7102                    let max_encoding_message_size = self.max_encoding_message_size;
7103                    let inner = self.inner.clone();
7104                    let fut = async move {
7105                        let inner = inner.0;
7106                        let method = DeleteObjectSvc(inner);
7107                        let codec = tonic::codec::ProstCodec::default();
7108                        let mut grpc = tonic::server::Grpc::new(codec)
7109                            .apply_compression_config(
7110                                accept_compression_encodings,
7111                                send_compression_encodings,
7112                            )
7113                            .apply_max_message_size_config(
7114                                max_decoding_message_size,
7115                                max_encoding_message_size,
7116                            );
7117                        let res = grpc.unary(method, req).await;
7118                        Ok(res)
7119                    };
7120                    Box::pin(fut)
7121                }
7122                "/aruna.api.storage.services.v2.ObjectService/GetObject" => {
7123                    #[allow(non_camel_case_types)]
7124                    struct GetObjectSvc<T: ObjectService>(pub Arc<T>);
7125                    impl<
7126                        T: ObjectService,
7127                    > tonic::server::UnaryService<super::GetObjectRequest>
7128                    for GetObjectSvc<T> {
7129                        type Response = super::GetObjectResponse;
7130                        type Future = BoxFuture<
7131                            tonic::Response<Self::Response>,
7132                            tonic::Status,
7133                        >;
7134                        fn call(
7135                            &mut self,
7136                            request: tonic::Request<super::GetObjectRequest>,
7137                        ) -> Self::Future {
7138                            let inner = Arc::clone(&self.0);
7139                            let fut = async move {
7140                                <T as ObjectService>::get_object(&inner, request).await
7141                            };
7142                            Box::pin(fut)
7143                        }
7144                    }
7145                    let accept_compression_encodings = self.accept_compression_encodings;
7146                    let send_compression_encodings = self.send_compression_encodings;
7147                    let max_decoding_message_size = self.max_decoding_message_size;
7148                    let max_encoding_message_size = self.max_encoding_message_size;
7149                    let inner = self.inner.clone();
7150                    let fut = async move {
7151                        let inner = inner.0;
7152                        let method = GetObjectSvc(inner);
7153                        let codec = tonic::codec::ProstCodec::default();
7154                        let mut grpc = tonic::server::Grpc::new(codec)
7155                            .apply_compression_config(
7156                                accept_compression_encodings,
7157                                send_compression_encodings,
7158                            )
7159                            .apply_max_message_size_config(
7160                                max_decoding_message_size,
7161                                max_encoding_message_size,
7162                            );
7163                        let res = grpc.unary(method, req).await;
7164                        Ok(res)
7165                    };
7166                    Box::pin(fut)
7167                }
7168                "/aruna.api.storage.services.v2.ObjectService/GetObjects" => {
7169                    #[allow(non_camel_case_types)]
7170                    struct GetObjectsSvc<T: ObjectService>(pub Arc<T>);
7171                    impl<
7172                        T: ObjectService,
7173                    > tonic::server::UnaryService<super::GetObjectsRequest>
7174                    for GetObjectsSvc<T> {
7175                        type Response = super::GetObjectsResponse;
7176                        type Future = BoxFuture<
7177                            tonic::Response<Self::Response>,
7178                            tonic::Status,
7179                        >;
7180                        fn call(
7181                            &mut self,
7182                            request: tonic::Request<super::GetObjectsRequest>,
7183                        ) -> Self::Future {
7184                            let inner = Arc::clone(&self.0);
7185                            let fut = async move {
7186                                <T as ObjectService>::get_objects(&inner, request).await
7187                            };
7188                            Box::pin(fut)
7189                        }
7190                    }
7191                    let accept_compression_encodings = self.accept_compression_encodings;
7192                    let send_compression_encodings = self.send_compression_encodings;
7193                    let max_decoding_message_size = self.max_decoding_message_size;
7194                    let max_encoding_message_size = self.max_encoding_message_size;
7195                    let inner = self.inner.clone();
7196                    let fut = async move {
7197                        let inner = inner.0;
7198                        let method = GetObjectsSvc(inner);
7199                        let codec = tonic::codec::ProstCodec::default();
7200                        let mut grpc = tonic::server::Grpc::new(codec)
7201                            .apply_compression_config(
7202                                accept_compression_encodings,
7203                                send_compression_encodings,
7204                            )
7205                            .apply_max_message_size_config(
7206                                max_decoding_message_size,
7207                                max_encoding_message_size,
7208                            );
7209                        let res = grpc.unary(method, req).await;
7210                        Ok(res)
7211                    };
7212                    Box::pin(fut)
7213                }
7214                "/aruna.api.storage.services.v2.ObjectService/UpdateObjectTitle" => {
7215                    #[allow(non_camel_case_types)]
7216                    struct UpdateObjectTitleSvc<T: ObjectService>(pub Arc<T>);
7217                    impl<
7218                        T: ObjectService,
7219                    > tonic::server::UnaryService<super::UpdateObjectTitleRequest>
7220                    for UpdateObjectTitleSvc<T> {
7221                        type Response = super::UpdateObjectTitleResponse;
7222                        type Future = BoxFuture<
7223                            tonic::Response<Self::Response>,
7224                            tonic::Status,
7225                        >;
7226                        fn call(
7227                            &mut self,
7228                            request: tonic::Request<super::UpdateObjectTitleRequest>,
7229                        ) -> Self::Future {
7230                            let inner = Arc::clone(&self.0);
7231                            let fut = async move {
7232                                <T as ObjectService>::update_object_title(&inner, request)
7233                                    .await
7234                            };
7235                            Box::pin(fut)
7236                        }
7237                    }
7238                    let accept_compression_encodings = self.accept_compression_encodings;
7239                    let send_compression_encodings = self.send_compression_encodings;
7240                    let max_decoding_message_size = self.max_decoding_message_size;
7241                    let max_encoding_message_size = self.max_encoding_message_size;
7242                    let inner = self.inner.clone();
7243                    let fut = async move {
7244                        let inner = inner.0;
7245                        let method = UpdateObjectTitleSvc(inner);
7246                        let codec = tonic::codec::ProstCodec::default();
7247                        let mut grpc = tonic::server::Grpc::new(codec)
7248                            .apply_compression_config(
7249                                accept_compression_encodings,
7250                                send_compression_encodings,
7251                            )
7252                            .apply_max_message_size_config(
7253                                max_decoding_message_size,
7254                                max_encoding_message_size,
7255                            );
7256                        let res = grpc.unary(method, req).await;
7257                        Ok(res)
7258                    };
7259                    Box::pin(fut)
7260                }
7261                "/aruna.api.storage.services.v2.ObjectService/UpdateObjectAuthors" => {
7262                    #[allow(non_camel_case_types)]
7263                    struct UpdateObjectAuthorsSvc<T: ObjectService>(pub Arc<T>);
7264                    impl<
7265                        T: ObjectService,
7266                    > tonic::server::UnaryService<super::UpdateObjectAuthorsRequest>
7267                    for UpdateObjectAuthorsSvc<T> {
7268                        type Response = super::UpdateObjectAuthorsResponse;
7269                        type Future = BoxFuture<
7270                            tonic::Response<Self::Response>,
7271                            tonic::Status,
7272                        >;
7273                        fn call(
7274                            &mut self,
7275                            request: tonic::Request<super::UpdateObjectAuthorsRequest>,
7276                        ) -> Self::Future {
7277                            let inner = Arc::clone(&self.0);
7278                            let fut = async move {
7279                                <T as ObjectService>::update_object_authors(&inner, request)
7280                                    .await
7281                            };
7282                            Box::pin(fut)
7283                        }
7284                    }
7285                    let accept_compression_encodings = self.accept_compression_encodings;
7286                    let send_compression_encodings = self.send_compression_encodings;
7287                    let max_decoding_message_size = self.max_decoding_message_size;
7288                    let max_encoding_message_size = self.max_encoding_message_size;
7289                    let inner = self.inner.clone();
7290                    let fut = async move {
7291                        let inner = inner.0;
7292                        let method = UpdateObjectAuthorsSvc(inner);
7293                        let codec = tonic::codec::ProstCodec::default();
7294                        let mut grpc = tonic::server::Grpc::new(codec)
7295                            .apply_compression_config(
7296                                accept_compression_encodings,
7297                                send_compression_encodings,
7298                            )
7299                            .apply_max_message_size_config(
7300                                max_decoding_message_size,
7301                                max_encoding_message_size,
7302                            );
7303                        let res = grpc.unary(method, req).await;
7304                        Ok(res)
7305                    };
7306                    Box::pin(fut)
7307                }
7308                "/aruna.api.storage.services.v2.ObjectService/SetObjectHashes" => {
7309                    #[allow(non_camel_case_types)]
7310                    struct SetObjectHashesSvc<T: ObjectService>(pub Arc<T>);
7311                    impl<
7312                        T: ObjectService,
7313                    > tonic::server::UnaryService<super::SetObjectHashesRequest>
7314                    for SetObjectHashesSvc<T> {
7315                        type Response = super::SetObjectHashesResponse;
7316                        type Future = BoxFuture<
7317                            tonic::Response<Self::Response>,
7318                            tonic::Status,
7319                        >;
7320                        fn call(
7321                            &mut self,
7322                            request: tonic::Request<super::SetObjectHashesRequest>,
7323                        ) -> Self::Future {
7324                            let inner = Arc::clone(&self.0);
7325                            let fut = async move {
7326                                <T as ObjectService>::set_object_hashes(&inner, request)
7327                                    .await
7328                            };
7329                            Box::pin(fut)
7330                        }
7331                    }
7332                    let accept_compression_encodings = self.accept_compression_encodings;
7333                    let send_compression_encodings = self.send_compression_encodings;
7334                    let max_decoding_message_size = self.max_decoding_message_size;
7335                    let max_encoding_message_size = self.max_encoding_message_size;
7336                    let inner = self.inner.clone();
7337                    let fut = async move {
7338                        let inner = inner.0;
7339                        let method = SetObjectHashesSvc(inner);
7340                        let codec = tonic::codec::ProstCodec::default();
7341                        let mut grpc = tonic::server::Grpc::new(codec)
7342                            .apply_compression_config(
7343                                accept_compression_encodings,
7344                                send_compression_encodings,
7345                            )
7346                            .apply_max_message_size_config(
7347                                max_decoding_message_size,
7348                                max_encoding_message_size,
7349                            );
7350                        let res = grpc.unary(method, req).await;
7351                        Ok(res)
7352                    };
7353                    Box::pin(fut)
7354                }
7355                _ => {
7356                    Box::pin(async move {
7357                        Ok(
7358                            http::Response::builder()
7359                                .status(200)
7360                                .header("grpc-status", "12")
7361                                .header("content-type", "application/grpc")
7362                                .body(empty_body())
7363                                .unwrap(),
7364                        )
7365                    })
7366                }
7367            }
7368        }
7369    }
7370    impl<T: ObjectService> Clone for ObjectServiceServer<T> {
7371        fn clone(&self) -> Self {
7372            let inner = self.inner.clone();
7373            Self {
7374                inner,
7375                accept_compression_encodings: self.accept_compression_encodings,
7376                send_compression_encodings: self.send_compression_encodings,
7377                max_decoding_message_size: self.max_decoding_message_size,
7378                max_encoding_message_size: self.max_encoding_message_size,
7379            }
7380        }
7381    }
7382    impl<T: ObjectService> Clone for _Inner<T> {
7383        fn clone(&self) -> Self {
7384            Self(Arc::clone(&self.0))
7385        }
7386    }
7387    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
7388        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7389            write!(f, "{:?}", self.0)
7390        }
7391    }
7392    impl<T: ObjectService> tonic::server::NamedService for ObjectServiceServer<T> {
7393        const NAME: &'static str = "aruna.api.storage.services.v2.ObjectService";
7394    }
7395}
7396#[derive(serde::Deserialize, serde::Serialize)]
7397#[allow(clippy::derive_partial_eq_without_eq)]
7398#[derive(Clone, PartialEq, ::prost::Message)]
7399pub struct CreateDatasetRequest {
7400    /// dataset name
7401    #[prost(string, tag = "1")]
7402    pub name: ::prost::alloc::string::String,
7403    #[prost(string, tag = "10")]
7404    pub title: ::prost::alloc::string::String,
7405    /// Description
7406    #[prost(string, tag = "2")]
7407    pub description: ::prost::alloc::string::String,
7408    /// dataset specific labels / hooks
7409    #[prost(message, repeated, tag = "3")]
7410    pub key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
7411    /// Internal / External relations (URLs / IDs from external sources)
7412    #[prost(message, repeated, tag = "4")]
7413    pub relations: ::prost::alloc::vec::Vec<super::super::models::v2::Relation>,
7414    /// DataClass
7415    #[prost(enumeration = "super::super::models::v2::DataClass", tag = "5")]
7416    pub data_class: i32,
7417    #[prost(string, optional, tag = "8")]
7418    pub metadata_license_tag: ::core::option::Option<::prost::alloc::string::String>,
7419    #[prost(string, optional, tag = "9")]
7420    pub default_data_license_tag: ::core::option::Option<::prost::alloc::string::String>,
7421    #[prost(message, repeated, tag = "11")]
7422    pub authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
7423    /// Parent_id MUST be dataset
7424    #[prost(oneof = "create_dataset_request::Parent", tags = "6, 7")]
7425    pub parent: ::core::option::Option<create_dataset_request::Parent>,
7426}
7427/// Nested message and enum types in `CreateDatasetRequest`.
7428pub mod create_dataset_request {
7429    /// Parent_id MUST be dataset
7430    #[derive(serde::Deserialize, serde::Serialize)]
7431    #[allow(clippy::derive_partial_eq_without_eq)]
7432    #[derive(Clone, PartialEq, ::prost::Oneof)]
7433    pub enum Parent {
7434        #[prost(string, tag = "6")]
7435        ProjectId(::prost::alloc::string::String),
7436        #[prost(string, tag = "7")]
7437        CollectionId(::prost::alloc::string::String),
7438    }
7439}
7440#[derive(serde::Deserialize, serde::Serialize)]
7441#[allow(clippy::derive_partial_eq_without_eq)]
7442#[derive(Clone, PartialEq, ::prost::Message)]
7443pub struct CreateDatasetResponse {
7444    /// The new dataset_id
7445    #[prost(message, optional, tag = "1")]
7446    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7447}
7448#[derive(serde::Deserialize, serde::Serialize)]
7449#[allow(clippy::derive_partial_eq_without_eq)]
7450#[derive(Clone, PartialEq, ::prost::Message)]
7451pub struct GetDatasetRequest {
7452    /// Requested id
7453    #[prost(string, tag = "1")]
7454    pub dataset_id: ::prost::alloc::string::String,
7455}
7456#[derive(serde::Deserialize, serde::Serialize)]
7457#[allow(clippy::derive_partial_eq_without_eq)]
7458#[derive(Clone, PartialEq, ::prost::Message)]
7459pub struct GetDatasetResponse {
7460    /// Overview of the requested dataset
7461    #[prost(message, optional, tag = "1")]
7462    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7463}
7464#[derive(serde::Deserialize, serde::Serialize)]
7465#[allow(clippy::derive_partial_eq_without_eq)]
7466#[derive(Clone, PartialEq, ::prost::Message)]
7467pub struct GetDatasetsRequest {
7468    #[prost(string, repeated, tag = "1")]
7469    pub dataset_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
7470}
7471#[derive(serde::Deserialize, serde::Serialize)]
7472#[allow(clippy::derive_partial_eq_without_eq)]
7473#[derive(Clone, PartialEq, ::prost::Message)]
7474pub struct GetDatasetsResponse {
7475    /// List of dataset overviews
7476    #[prost(message, repeated, tag = "1")]
7477    pub datasets: ::prost::alloc::vec::Vec<super::super::models::v2::Dataset>,
7478}
7479#[derive(serde::Deserialize, serde::Serialize)]
7480#[allow(clippy::derive_partial_eq_without_eq)]
7481#[derive(Clone, PartialEq, ::prost::Message)]
7482pub struct DeleteDatasetRequest {
7483    #[prost(string, tag = "1")]
7484    pub dataset_id: ::prost::alloc::string::String,
7485}
7486#[derive(serde::Deserialize, serde::Serialize)]
7487#[allow(clippy::derive_partial_eq_without_eq)]
7488#[derive(Clone, PartialEq, ::prost::Message)]
7489pub struct DeleteDatasetResponse {}
7490#[derive(serde::Deserialize, serde::Serialize)]
7491#[allow(clippy::derive_partial_eq_without_eq)]
7492#[derive(Clone, PartialEq, ::prost::Message)]
7493pub struct UpdateDatasetNameRequest {
7494    #[prost(string, tag = "1")]
7495    pub dataset_id: ::prost::alloc::string::String,
7496    #[prost(string, tag = "2")]
7497    pub name: ::prost::alloc::string::String,
7498}
7499#[derive(serde::Deserialize, serde::Serialize)]
7500#[allow(clippy::derive_partial_eq_without_eq)]
7501#[derive(Clone, PartialEq, ::prost::Message)]
7502pub struct UpdateDatasetNameResponse {
7503    #[prost(message, optional, tag = "1")]
7504    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7505}
7506#[derive(serde::Deserialize, serde::Serialize)]
7507#[allow(clippy::derive_partial_eq_without_eq)]
7508#[derive(Clone, PartialEq, ::prost::Message)]
7509pub struct UpdateDatasetDescriptionRequest {
7510    #[prost(string, tag = "1")]
7511    pub dataset_id: ::prost::alloc::string::String,
7512    #[prost(string, tag = "2")]
7513    pub description: ::prost::alloc::string::String,
7514}
7515#[derive(serde::Deserialize, serde::Serialize)]
7516#[allow(clippy::derive_partial_eq_without_eq)]
7517#[derive(Clone, PartialEq, ::prost::Message)]
7518pub struct UpdateDatasetDescriptionResponse {
7519    #[prost(message, optional, tag = "1")]
7520    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7521}
7522#[derive(serde::Deserialize, serde::Serialize)]
7523#[allow(clippy::derive_partial_eq_without_eq)]
7524#[derive(Clone, PartialEq, ::prost::Message)]
7525pub struct UpdateDatasetKeyValuesRequest {
7526    #[prost(string, tag = "1")]
7527    pub dataset_id: ::prost::alloc::string::String,
7528    #[prost(message, repeated, tag = "2")]
7529    pub add_key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
7530    #[prost(message, repeated, tag = "3")]
7531    pub remove_key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
7532}
7533#[derive(serde::Deserialize, serde::Serialize)]
7534#[allow(clippy::derive_partial_eq_without_eq)]
7535#[derive(Clone, PartialEq, ::prost::Message)]
7536pub struct UpdateDatasetKeyValuesResponse {
7537    #[prost(message, optional, tag = "1")]
7538    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7539}
7540#[derive(serde::Deserialize, serde::Serialize)]
7541#[allow(clippy::derive_partial_eq_without_eq)]
7542#[derive(Clone, PartialEq, ::prost::Message)]
7543pub struct UpdateDatasetDataClassRequest {
7544    #[prost(string, tag = "1")]
7545    pub dataset_id: ::prost::alloc::string::String,
7546    #[prost(enumeration = "super::super::models::v2::DataClass", tag = "2")]
7547    pub data_class: i32,
7548}
7549#[derive(serde::Deserialize, serde::Serialize)]
7550#[allow(clippy::derive_partial_eq_without_eq)]
7551#[derive(Clone, PartialEq, ::prost::Message)]
7552pub struct UpdateDatasetDataClassResponse {
7553    #[prost(message, optional, tag = "1")]
7554    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7555}
7556#[derive(serde::Deserialize, serde::Serialize)]
7557#[allow(clippy::derive_partial_eq_without_eq)]
7558#[derive(Clone, PartialEq, ::prost::Message)]
7559pub struct SnapshotDatasetRequest {
7560    #[prost(string, tag = "1")]
7561    pub dataset_id: ::prost::alloc::string::String,
7562}
7563#[derive(serde::Deserialize, serde::Serialize)]
7564#[allow(clippy::derive_partial_eq_without_eq)]
7565#[derive(Clone, PartialEq, ::prost::Message)]
7566pub struct SnapshotDatasetResponse {
7567    /// This dataset will be returned via an Persistent Identifier! Updates will be impossible
7568    #[prost(message, optional, tag = "1")]
7569    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7570}
7571#[derive(serde::Deserialize, serde::Serialize)]
7572#[allow(clippy::derive_partial_eq_without_eq)]
7573#[derive(Clone, PartialEq, ::prost::Message)]
7574pub struct UpdateDatasetLicensesRequest {
7575    #[prost(string, tag = "1")]
7576    pub dataset_id: ::prost::alloc::string::String,
7577    #[prost(string, tag = "2")]
7578    pub metadata_license_tag: ::prost::alloc::string::String,
7579    #[prost(string, tag = "3")]
7580    pub default_data_license_tag: ::prost::alloc::string::String,
7581}
7582#[derive(serde::Deserialize, serde::Serialize)]
7583#[allow(clippy::derive_partial_eq_without_eq)]
7584#[derive(Clone, PartialEq, ::prost::Message)]
7585pub struct UpdateDatasetLicensesResponse {
7586    #[prost(message, optional, tag = "1")]
7587    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7588}
7589#[derive(serde::Deserialize, serde::Serialize)]
7590#[allow(clippy::derive_partial_eq_without_eq)]
7591#[derive(Clone, PartialEq, ::prost::Message)]
7592pub struct UpdateDatasetTitleRequest {
7593    #[prost(string, tag = "1")]
7594    pub dataset_id: ::prost::alloc::string::String,
7595    #[prost(string, tag = "2")]
7596    pub title: ::prost::alloc::string::String,
7597}
7598#[derive(serde::Deserialize, serde::Serialize)]
7599#[allow(clippy::derive_partial_eq_without_eq)]
7600#[derive(Clone, PartialEq, ::prost::Message)]
7601pub struct UpdateDatasetTitleResponse {
7602    #[prost(message, optional, tag = "1")]
7603    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7604}
7605#[derive(serde::Deserialize, serde::Serialize)]
7606#[allow(clippy::derive_partial_eq_without_eq)]
7607#[derive(Clone, PartialEq, ::prost::Message)]
7608pub struct UpdateDatasetAuthorsRequest {
7609    #[prost(string, tag = "1")]
7610    pub dataset_id: ::prost::alloc::string::String,
7611    #[prost(message, repeated, tag = "2")]
7612    pub add_authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
7613    #[prost(message, repeated, tag = "3")]
7614    pub remove_authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
7615}
7616#[derive(serde::Deserialize, serde::Serialize)]
7617#[allow(clippy::derive_partial_eq_without_eq)]
7618#[derive(Clone, PartialEq, ::prost::Message)]
7619pub struct UpdateDatasetAuthorsResponse {
7620    #[prost(message, optional, tag = "1")]
7621    pub dataset: ::core::option::Option<super::super::models::v2::Dataset>,
7622}
7623/// Generated client implementations.
7624pub mod dataset_service_client {
7625    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
7626    use tonic::codegen::*;
7627    use tonic::codegen::http::Uri;
7628    /// DatasetService
7629    ///
7630    /// Contains all methods that get/create or update Dataset and associated resources
7631    #[derive(Debug, Clone)]
7632    pub struct DatasetServiceClient<T> {
7633        inner: tonic::client::Grpc<T>,
7634    }
7635    impl DatasetServiceClient<tonic::transport::Channel> {
7636        /// Attempt to create a new client by connecting to a given endpoint.
7637        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
7638        where
7639            D: TryInto<tonic::transport::Endpoint>,
7640            D::Error: Into<StdError>,
7641        {
7642            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
7643            Ok(Self::new(conn))
7644        }
7645    }
7646    impl<T> DatasetServiceClient<T>
7647    where
7648        T: tonic::client::GrpcService<tonic::body::BoxBody>,
7649        T::Error: Into<StdError>,
7650        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
7651        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
7652    {
7653        pub fn new(inner: T) -> Self {
7654            let inner = tonic::client::Grpc::new(inner);
7655            Self { inner }
7656        }
7657        pub fn with_origin(inner: T, origin: Uri) -> Self {
7658            let inner = tonic::client::Grpc::with_origin(inner, origin);
7659            Self { inner }
7660        }
7661        pub fn with_interceptor<F>(
7662            inner: T,
7663            interceptor: F,
7664        ) -> DatasetServiceClient<InterceptedService<T, F>>
7665        where
7666            F: tonic::service::Interceptor,
7667            T::ResponseBody: Default,
7668            T: tonic::codegen::Service<
7669                http::Request<tonic::body::BoxBody>,
7670                Response = http::Response<
7671                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
7672                >,
7673            >,
7674            <T as tonic::codegen::Service<
7675                http::Request<tonic::body::BoxBody>,
7676            >>::Error: Into<StdError> + Send + Sync,
7677        {
7678            DatasetServiceClient::new(InterceptedService::new(inner, interceptor))
7679        }
7680        /// Compress requests with the given encoding.
7681        ///
7682        /// This requires the server to support it otherwise it might respond with an
7683        /// error.
7684        #[must_use]
7685        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
7686            self.inner = self.inner.send_compressed(encoding);
7687            self
7688        }
7689        /// Enable decompressing responses.
7690        #[must_use]
7691        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
7692            self.inner = self.inner.accept_compressed(encoding);
7693            self
7694        }
7695        /// Limits the maximum size of a decoded message.
7696        ///
7697        /// Default: `4MB`
7698        #[must_use]
7699        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
7700            self.inner = self.inner.max_decoding_message_size(limit);
7701            self
7702        }
7703        /// Limits the maximum size of an encoded message.
7704        ///
7705        /// Default: `usize::MAX`
7706        #[must_use]
7707        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
7708            self.inner = self.inner.max_encoding_message_size(limit);
7709            self
7710        }
7711        /// CreateNewDataset
7712        ///
7713        /// Status: BETA
7714        ///
7715        /// creates a new Dataset
7716        pub async fn create_dataset(
7717            &mut self,
7718            request: impl tonic::IntoRequest<super::CreateDatasetRequest>,
7719        ) -> std::result::Result<
7720            tonic::Response<super::CreateDatasetResponse>,
7721            tonic::Status,
7722        > {
7723            self.inner
7724                .ready()
7725                .await
7726                .map_err(|e| {
7727                    tonic::Status::new(
7728                        tonic::Code::Unknown,
7729                        format!("Service was not ready: {}", e.into()),
7730                    )
7731                })?;
7732            let codec = tonic::codec::ProstCodec::default();
7733            let path = http::uri::PathAndQuery::from_static(
7734                "/aruna.api.storage.services.v2.DatasetService/CreateDataset",
7735            );
7736            let mut req = request.into_request();
7737            req.extensions_mut()
7738                .insert(
7739                    GrpcMethod::new(
7740                        "aruna.api.storage.services.v2.DatasetService",
7741                        "CreateDataset",
7742                    ),
7743                );
7744            self.inner.unary(req, path, codec).await
7745        }
7746        /// GetDataset
7747        ///
7748        /// Status: BETA
7749        ///
7750        /// Request a specific dataset by ID
7751        pub async fn get_dataset(
7752            &mut self,
7753            request: impl tonic::IntoRequest<super::GetDatasetRequest>,
7754        ) -> std::result::Result<
7755            tonic::Response<super::GetDatasetResponse>,
7756            tonic::Status,
7757        > {
7758            self.inner
7759                .ready()
7760                .await
7761                .map_err(|e| {
7762                    tonic::Status::new(
7763                        tonic::Code::Unknown,
7764                        format!("Service was not ready: {}", e.into()),
7765                    )
7766                })?;
7767            let codec = tonic::codec::ProstCodec::default();
7768            let path = http::uri::PathAndQuery::from_static(
7769                "/aruna.api.storage.services.v2.DatasetService/GetDataset",
7770            );
7771            let mut req = request.into_request();
7772            req.extensions_mut()
7773                .insert(
7774                    GrpcMethod::new(
7775                        "aruna.api.storage.services.v2.DatasetService",
7776                        "GetDataset",
7777                    ),
7778                );
7779            self.inner.unary(req, path, codec).await
7780        }
7781        /// GetDatasets
7782        ///
7783        /// Status: BETA
7784        ///
7785        /// Queries multiple datasets by ID
7786        pub async fn get_datasets(
7787            &mut self,
7788            request: impl tonic::IntoRequest<super::GetDatasetsRequest>,
7789        ) -> std::result::Result<
7790            tonic::Response<super::GetDatasetsResponse>,
7791            tonic::Status,
7792        > {
7793            self.inner
7794                .ready()
7795                .await
7796                .map_err(|e| {
7797                    tonic::Status::new(
7798                        tonic::Code::Unknown,
7799                        format!("Service was not ready: {}", e.into()),
7800                    )
7801                })?;
7802            let codec = tonic::codec::ProstCodec::default();
7803            let path = http::uri::PathAndQuery::from_static(
7804                "/aruna.api.storage.services.v2.DatasetService/GetDatasets",
7805            );
7806            let mut req = request.into_request();
7807            req.extensions_mut()
7808                .insert(
7809                    GrpcMethod::new(
7810                        "aruna.api.storage.services.v2.DatasetService",
7811                        "GetDatasets",
7812                    ),
7813                );
7814            self.inner.unary(req, path, codec).await
7815        }
7816        /// DeleteDataset
7817        ///
7818        /// Status: STABLE
7819        ///
7820        /// This request deletes the dataset.
7821        pub async fn delete_dataset(
7822            &mut self,
7823            request: impl tonic::IntoRequest<super::DeleteDatasetRequest>,
7824        ) -> std::result::Result<
7825            tonic::Response<super::DeleteDatasetResponse>,
7826            tonic::Status,
7827        > {
7828            self.inner
7829                .ready()
7830                .await
7831                .map_err(|e| {
7832                    tonic::Status::new(
7833                        tonic::Code::Unknown,
7834                        format!("Service was not ready: {}", e.into()),
7835                    )
7836                })?;
7837            let codec = tonic::codec::ProstCodec::default();
7838            let path = http::uri::PathAndQuery::from_static(
7839                "/aruna.api.storage.services.v2.DatasetService/DeleteDataset",
7840            );
7841            let mut req = request.into_request();
7842            req.extensions_mut()
7843                .insert(
7844                    GrpcMethod::new(
7845                        "aruna.api.storage.services.v2.DatasetService",
7846                        "DeleteDataset",
7847                    ),
7848                );
7849            self.inner.unary(req, path, codec).await
7850        }
7851        /// UpdateDatasetName
7852        ///
7853        /// Status: BETA
7854        ///
7855        /// Updates the dataset name. Caveat! Will rename the "s3 bucket" for data proxies!
7856        pub async fn update_dataset_name(
7857            &mut self,
7858            request: impl tonic::IntoRequest<super::UpdateDatasetNameRequest>,
7859        ) -> std::result::Result<
7860            tonic::Response<super::UpdateDatasetNameResponse>,
7861            tonic::Status,
7862        > {
7863            self.inner
7864                .ready()
7865                .await
7866                .map_err(|e| {
7867                    tonic::Status::new(
7868                        tonic::Code::Unknown,
7869                        format!("Service was not ready: {}", e.into()),
7870                    )
7871                })?;
7872            let codec = tonic::codec::ProstCodec::default();
7873            let path = http::uri::PathAndQuery::from_static(
7874                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetName",
7875            );
7876            let mut req = request.into_request();
7877            req.extensions_mut()
7878                .insert(
7879                    GrpcMethod::new(
7880                        "aruna.api.storage.services.v2.DatasetService",
7881                        "UpdateDatasetName",
7882                    ),
7883                );
7884            self.inner.unary(req, path, codec).await
7885        }
7886        /// UpdateDatasetDescription
7887        ///
7888        /// Status: BETA
7889        ///
7890        /// Updates the dataset description.
7891        pub async fn update_dataset_description(
7892            &mut self,
7893            request: impl tonic::IntoRequest<super::UpdateDatasetDescriptionRequest>,
7894        ) -> std::result::Result<
7895            tonic::Response<super::UpdateDatasetDescriptionResponse>,
7896            tonic::Status,
7897        > {
7898            self.inner
7899                .ready()
7900                .await
7901                .map_err(|e| {
7902                    tonic::Status::new(
7903                        tonic::Code::Unknown,
7904                        format!("Service was not ready: {}", e.into()),
7905                    )
7906                })?;
7907            let codec = tonic::codec::ProstCodec::default();
7908            let path = http::uri::PathAndQuery::from_static(
7909                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetDescription",
7910            );
7911            let mut req = request.into_request();
7912            req.extensions_mut()
7913                .insert(
7914                    GrpcMethod::new(
7915                        "aruna.api.storage.services.v2.DatasetService",
7916                        "UpdateDatasetDescription",
7917                    ),
7918                );
7919            self.inner.unary(req, path, codec).await
7920        }
7921        /// UpdateDatasetKeyValues
7922        ///
7923        /// Status: BETA
7924        ///
7925        /// Updates the dataset key values.
7926        pub async fn update_dataset_key_values(
7927            &mut self,
7928            request: impl tonic::IntoRequest<super::UpdateDatasetKeyValuesRequest>,
7929        ) -> std::result::Result<
7930            tonic::Response<super::UpdateDatasetKeyValuesResponse>,
7931            tonic::Status,
7932        > {
7933            self.inner
7934                .ready()
7935                .await
7936                .map_err(|e| {
7937                    tonic::Status::new(
7938                        tonic::Code::Unknown,
7939                        format!("Service was not ready: {}", e.into()),
7940                    )
7941                })?;
7942            let codec = tonic::codec::ProstCodec::default();
7943            let path = http::uri::PathAndQuery::from_static(
7944                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetKeyValues",
7945            );
7946            let mut req = request.into_request();
7947            req.extensions_mut()
7948                .insert(
7949                    GrpcMethod::new(
7950                        "aruna.api.storage.services.v2.DatasetService",
7951                        "UpdateDatasetKeyValues",
7952                    ),
7953                );
7954            self.inner.unary(req, path, codec).await
7955        }
7956        /// UpdateDatasetDataClass
7957        ///
7958        /// Status: BETA
7959        ///
7960        /// Updates the dataset name. All (meta) data will be overwritten.
7961        pub async fn update_dataset_data_class(
7962            &mut self,
7963            request: impl tonic::IntoRequest<super::UpdateDatasetDataClassRequest>,
7964        ) -> std::result::Result<
7965            tonic::Response<super::UpdateDatasetDataClassResponse>,
7966            tonic::Status,
7967        > {
7968            self.inner
7969                .ready()
7970                .await
7971                .map_err(|e| {
7972                    tonic::Status::new(
7973                        tonic::Code::Unknown,
7974                        format!("Service was not ready: {}", e.into()),
7975                    )
7976                })?;
7977            let codec = tonic::codec::ProstCodec::default();
7978            let path = http::uri::PathAndQuery::from_static(
7979                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetDataClass",
7980            );
7981            let mut req = request.into_request();
7982            req.extensions_mut()
7983                .insert(
7984                    GrpcMethod::new(
7985                        "aruna.api.storage.services.v2.DatasetService",
7986                        "UpdateDatasetDataClass",
7987                    ),
7988                );
7989            self.inner.unary(req, path, codec).await
7990        }
7991        /// SnapshotDatasetRequest
7992        ///
7993        /// Status: BETA
7994        ///
7995        /// Archives the full dataset, rendering all downstream relations immutable
7996        pub async fn snapshot_dataset(
7997            &mut self,
7998            request: impl tonic::IntoRequest<super::SnapshotDatasetRequest>,
7999        ) -> std::result::Result<
8000            tonic::Response<super::SnapshotDatasetResponse>,
8001            tonic::Status,
8002        > {
8003            self.inner
8004                .ready()
8005                .await
8006                .map_err(|e| {
8007                    tonic::Status::new(
8008                        tonic::Code::Unknown,
8009                        format!("Service was not ready: {}", e.into()),
8010                    )
8011                })?;
8012            let codec = tonic::codec::ProstCodec::default();
8013            let path = http::uri::PathAndQuery::from_static(
8014                "/aruna.api.storage.services.v2.DatasetService/SnapshotDataset",
8015            );
8016            let mut req = request.into_request();
8017            req.extensions_mut()
8018                .insert(
8019                    GrpcMethod::new(
8020                        "aruna.api.storage.services.v2.DatasetService",
8021                        "SnapshotDataset",
8022                    ),
8023                );
8024            self.inner.unary(req, path, codec).await
8025        }
8026        /// UpdateLicenses
8027        ///
8028        /// Status: BETA
8029        ///
8030        /// Updates the dataset metadata license and/or default data license.
8031        pub async fn update_dataset_licenses(
8032            &mut self,
8033            request: impl tonic::IntoRequest<super::UpdateDatasetLicensesRequest>,
8034        ) -> std::result::Result<
8035            tonic::Response<super::UpdateDatasetLicensesResponse>,
8036            tonic::Status,
8037        > {
8038            self.inner
8039                .ready()
8040                .await
8041                .map_err(|e| {
8042                    tonic::Status::new(
8043                        tonic::Code::Unknown,
8044                        format!("Service was not ready: {}", e.into()),
8045                    )
8046                })?;
8047            let codec = tonic::codec::ProstCodec::default();
8048            let path = http::uri::PathAndQuery::from_static(
8049                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetLicenses",
8050            );
8051            let mut req = request.into_request();
8052            req.extensions_mut()
8053                .insert(
8054                    GrpcMethod::new(
8055                        "aruna.api.storage.services.v2.DatasetService",
8056                        "UpdateDatasetLicenses",
8057                    ),
8058                );
8059            self.inner.unary(req, path, codec).await
8060        }
8061        /// UpdateTitle
8062        ///
8063        /// Status: ALPHA
8064        ///
8065        /// Updates the datasets metadata title.
8066        pub async fn update_dataset_title(
8067            &mut self,
8068            request: impl tonic::IntoRequest<super::UpdateDatasetTitleRequest>,
8069        ) -> std::result::Result<
8070            tonic::Response<super::UpdateDatasetTitleResponse>,
8071            tonic::Status,
8072        > {
8073            self.inner
8074                .ready()
8075                .await
8076                .map_err(|e| {
8077                    tonic::Status::new(
8078                        tonic::Code::Unknown,
8079                        format!("Service was not ready: {}", e.into()),
8080                    )
8081                })?;
8082            let codec = tonic::codec::ProstCodec::default();
8083            let path = http::uri::PathAndQuery::from_static(
8084                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetTitle",
8085            );
8086            let mut req = request.into_request();
8087            req.extensions_mut()
8088                .insert(
8089                    GrpcMethod::new(
8090                        "aruna.api.storage.services.v2.DatasetService",
8091                        "UpdateDatasetTitle",
8092                    ),
8093                );
8094            self.inner.unary(req, path, codec).await
8095        }
8096        /// UpdateAuthors
8097        ///
8098        /// Status: ALPHA
8099        ///
8100        /// Updates the datasets metadata title.
8101        pub async fn update_dataset_authors(
8102            &mut self,
8103            request: impl tonic::IntoRequest<super::UpdateDatasetAuthorsRequest>,
8104        ) -> std::result::Result<
8105            tonic::Response<super::UpdateDatasetAuthorsResponse>,
8106            tonic::Status,
8107        > {
8108            self.inner
8109                .ready()
8110                .await
8111                .map_err(|e| {
8112                    tonic::Status::new(
8113                        tonic::Code::Unknown,
8114                        format!("Service was not ready: {}", e.into()),
8115                    )
8116                })?;
8117            let codec = tonic::codec::ProstCodec::default();
8118            let path = http::uri::PathAndQuery::from_static(
8119                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetAuthors",
8120            );
8121            let mut req = request.into_request();
8122            req.extensions_mut()
8123                .insert(
8124                    GrpcMethod::new(
8125                        "aruna.api.storage.services.v2.DatasetService",
8126                        "UpdateDatasetAuthors",
8127                    ),
8128                );
8129            self.inner.unary(req, path, codec).await
8130        }
8131    }
8132}
8133/// Generated server implementations.
8134pub mod dataset_service_server {
8135    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
8136    use tonic::codegen::*;
8137    /// Generated trait containing gRPC methods that should be implemented for use with DatasetServiceServer.
8138    #[async_trait]
8139    pub trait DatasetService: Send + Sync + 'static {
8140        /// CreateNewDataset
8141        ///
8142        /// Status: BETA
8143        ///
8144        /// creates a new Dataset
8145        async fn create_dataset(
8146            &self,
8147            request: tonic::Request<super::CreateDatasetRequest>,
8148        ) -> std::result::Result<
8149            tonic::Response<super::CreateDatasetResponse>,
8150            tonic::Status,
8151        >;
8152        /// GetDataset
8153        ///
8154        /// Status: BETA
8155        ///
8156        /// Request a specific dataset by ID
8157        async fn get_dataset(
8158            &self,
8159            request: tonic::Request<super::GetDatasetRequest>,
8160        ) -> std::result::Result<
8161            tonic::Response<super::GetDatasetResponse>,
8162            tonic::Status,
8163        >;
8164        /// GetDatasets
8165        ///
8166        /// Status: BETA
8167        ///
8168        /// Queries multiple datasets by ID
8169        async fn get_datasets(
8170            &self,
8171            request: tonic::Request<super::GetDatasetsRequest>,
8172        ) -> std::result::Result<
8173            tonic::Response<super::GetDatasetsResponse>,
8174            tonic::Status,
8175        >;
8176        /// DeleteDataset
8177        ///
8178        /// Status: STABLE
8179        ///
8180        /// This request deletes the dataset.
8181        async fn delete_dataset(
8182            &self,
8183            request: tonic::Request<super::DeleteDatasetRequest>,
8184        ) -> std::result::Result<
8185            tonic::Response<super::DeleteDatasetResponse>,
8186            tonic::Status,
8187        >;
8188        /// UpdateDatasetName
8189        ///
8190        /// Status: BETA
8191        ///
8192        /// Updates the dataset name. Caveat! Will rename the "s3 bucket" for data proxies!
8193        async fn update_dataset_name(
8194            &self,
8195            request: tonic::Request<super::UpdateDatasetNameRequest>,
8196        ) -> std::result::Result<
8197            tonic::Response<super::UpdateDatasetNameResponse>,
8198            tonic::Status,
8199        >;
8200        /// UpdateDatasetDescription
8201        ///
8202        /// Status: BETA
8203        ///
8204        /// Updates the dataset description.
8205        async fn update_dataset_description(
8206            &self,
8207            request: tonic::Request<super::UpdateDatasetDescriptionRequest>,
8208        ) -> std::result::Result<
8209            tonic::Response<super::UpdateDatasetDescriptionResponse>,
8210            tonic::Status,
8211        >;
8212        /// UpdateDatasetKeyValues
8213        ///
8214        /// Status: BETA
8215        ///
8216        /// Updates the dataset key values.
8217        async fn update_dataset_key_values(
8218            &self,
8219            request: tonic::Request<super::UpdateDatasetKeyValuesRequest>,
8220        ) -> std::result::Result<
8221            tonic::Response<super::UpdateDatasetKeyValuesResponse>,
8222            tonic::Status,
8223        >;
8224        /// UpdateDatasetDataClass
8225        ///
8226        /// Status: BETA
8227        ///
8228        /// Updates the dataset name. All (meta) data will be overwritten.
8229        async fn update_dataset_data_class(
8230            &self,
8231            request: tonic::Request<super::UpdateDatasetDataClassRequest>,
8232        ) -> std::result::Result<
8233            tonic::Response<super::UpdateDatasetDataClassResponse>,
8234            tonic::Status,
8235        >;
8236        /// SnapshotDatasetRequest
8237        ///
8238        /// Status: BETA
8239        ///
8240        /// Archives the full dataset, rendering all downstream relations immutable
8241        async fn snapshot_dataset(
8242            &self,
8243            request: tonic::Request<super::SnapshotDatasetRequest>,
8244        ) -> std::result::Result<
8245            tonic::Response<super::SnapshotDatasetResponse>,
8246            tonic::Status,
8247        >;
8248        /// UpdateLicenses
8249        ///
8250        /// Status: BETA
8251        ///
8252        /// Updates the dataset metadata license and/or default data license.
8253        async fn update_dataset_licenses(
8254            &self,
8255            request: tonic::Request<super::UpdateDatasetLicensesRequest>,
8256        ) -> std::result::Result<
8257            tonic::Response<super::UpdateDatasetLicensesResponse>,
8258            tonic::Status,
8259        >;
8260        /// UpdateTitle
8261        ///
8262        /// Status: ALPHA
8263        ///
8264        /// Updates the datasets metadata title.
8265        async fn update_dataset_title(
8266            &self,
8267            request: tonic::Request<super::UpdateDatasetTitleRequest>,
8268        ) -> std::result::Result<
8269            tonic::Response<super::UpdateDatasetTitleResponse>,
8270            tonic::Status,
8271        >;
8272        /// UpdateAuthors
8273        ///
8274        /// Status: ALPHA
8275        ///
8276        /// Updates the datasets metadata title.
8277        async fn update_dataset_authors(
8278            &self,
8279            request: tonic::Request<super::UpdateDatasetAuthorsRequest>,
8280        ) -> std::result::Result<
8281            tonic::Response<super::UpdateDatasetAuthorsResponse>,
8282            tonic::Status,
8283        >;
8284    }
8285    /// DatasetService
8286    ///
8287    /// Contains all methods that get/create or update Dataset and associated resources
8288    #[derive(Debug)]
8289    pub struct DatasetServiceServer<T: DatasetService> {
8290        inner: _Inner<T>,
8291        accept_compression_encodings: EnabledCompressionEncodings,
8292        send_compression_encodings: EnabledCompressionEncodings,
8293        max_decoding_message_size: Option<usize>,
8294        max_encoding_message_size: Option<usize>,
8295    }
8296    struct _Inner<T>(Arc<T>);
8297    impl<T: DatasetService> DatasetServiceServer<T> {
8298        pub fn new(inner: T) -> Self {
8299            Self::from_arc(Arc::new(inner))
8300        }
8301        pub fn from_arc(inner: Arc<T>) -> Self {
8302            let inner = _Inner(inner);
8303            Self {
8304                inner,
8305                accept_compression_encodings: Default::default(),
8306                send_compression_encodings: Default::default(),
8307                max_decoding_message_size: None,
8308                max_encoding_message_size: None,
8309            }
8310        }
8311        pub fn with_interceptor<F>(
8312            inner: T,
8313            interceptor: F,
8314        ) -> InterceptedService<Self, F>
8315        where
8316            F: tonic::service::Interceptor,
8317        {
8318            InterceptedService::new(Self::new(inner), interceptor)
8319        }
8320        /// Enable decompressing requests with the given encoding.
8321        #[must_use]
8322        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
8323            self.accept_compression_encodings.enable(encoding);
8324            self
8325        }
8326        /// Compress responses with the given encoding, if the client supports it.
8327        #[must_use]
8328        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
8329            self.send_compression_encodings.enable(encoding);
8330            self
8331        }
8332        /// Limits the maximum size of a decoded message.
8333        ///
8334        /// Default: `4MB`
8335        #[must_use]
8336        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
8337            self.max_decoding_message_size = Some(limit);
8338            self
8339        }
8340        /// Limits the maximum size of an encoded message.
8341        ///
8342        /// Default: `usize::MAX`
8343        #[must_use]
8344        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
8345            self.max_encoding_message_size = Some(limit);
8346            self
8347        }
8348    }
8349    impl<T, B> tonic::codegen::Service<http::Request<B>> for DatasetServiceServer<T>
8350    where
8351        T: DatasetService,
8352        B: Body + Send + 'static,
8353        B::Error: Into<StdError> + Send + 'static,
8354    {
8355        type Response = http::Response<tonic::body::BoxBody>;
8356        type Error = std::convert::Infallible;
8357        type Future = BoxFuture<Self::Response, Self::Error>;
8358        fn poll_ready(
8359            &mut self,
8360            _cx: &mut Context<'_>,
8361        ) -> Poll<std::result::Result<(), Self::Error>> {
8362            Poll::Ready(Ok(()))
8363        }
8364        fn call(&mut self, req: http::Request<B>) -> Self::Future {
8365            let inner = self.inner.clone();
8366            match req.uri().path() {
8367                "/aruna.api.storage.services.v2.DatasetService/CreateDataset" => {
8368                    #[allow(non_camel_case_types)]
8369                    struct CreateDatasetSvc<T: DatasetService>(pub Arc<T>);
8370                    impl<
8371                        T: DatasetService,
8372                    > tonic::server::UnaryService<super::CreateDatasetRequest>
8373                    for CreateDatasetSvc<T> {
8374                        type Response = super::CreateDatasetResponse;
8375                        type Future = BoxFuture<
8376                            tonic::Response<Self::Response>,
8377                            tonic::Status,
8378                        >;
8379                        fn call(
8380                            &mut self,
8381                            request: tonic::Request<super::CreateDatasetRequest>,
8382                        ) -> Self::Future {
8383                            let inner = Arc::clone(&self.0);
8384                            let fut = async move {
8385                                <T as DatasetService>::create_dataset(&inner, request).await
8386                            };
8387                            Box::pin(fut)
8388                        }
8389                    }
8390                    let accept_compression_encodings = self.accept_compression_encodings;
8391                    let send_compression_encodings = self.send_compression_encodings;
8392                    let max_decoding_message_size = self.max_decoding_message_size;
8393                    let max_encoding_message_size = self.max_encoding_message_size;
8394                    let inner = self.inner.clone();
8395                    let fut = async move {
8396                        let inner = inner.0;
8397                        let method = CreateDatasetSvc(inner);
8398                        let codec = tonic::codec::ProstCodec::default();
8399                        let mut grpc = tonic::server::Grpc::new(codec)
8400                            .apply_compression_config(
8401                                accept_compression_encodings,
8402                                send_compression_encodings,
8403                            )
8404                            .apply_max_message_size_config(
8405                                max_decoding_message_size,
8406                                max_encoding_message_size,
8407                            );
8408                        let res = grpc.unary(method, req).await;
8409                        Ok(res)
8410                    };
8411                    Box::pin(fut)
8412                }
8413                "/aruna.api.storage.services.v2.DatasetService/GetDataset" => {
8414                    #[allow(non_camel_case_types)]
8415                    struct GetDatasetSvc<T: DatasetService>(pub Arc<T>);
8416                    impl<
8417                        T: DatasetService,
8418                    > tonic::server::UnaryService<super::GetDatasetRequest>
8419                    for GetDatasetSvc<T> {
8420                        type Response = super::GetDatasetResponse;
8421                        type Future = BoxFuture<
8422                            tonic::Response<Self::Response>,
8423                            tonic::Status,
8424                        >;
8425                        fn call(
8426                            &mut self,
8427                            request: tonic::Request<super::GetDatasetRequest>,
8428                        ) -> Self::Future {
8429                            let inner = Arc::clone(&self.0);
8430                            let fut = async move {
8431                                <T as DatasetService>::get_dataset(&inner, request).await
8432                            };
8433                            Box::pin(fut)
8434                        }
8435                    }
8436                    let accept_compression_encodings = self.accept_compression_encodings;
8437                    let send_compression_encodings = self.send_compression_encodings;
8438                    let max_decoding_message_size = self.max_decoding_message_size;
8439                    let max_encoding_message_size = self.max_encoding_message_size;
8440                    let inner = self.inner.clone();
8441                    let fut = async move {
8442                        let inner = inner.0;
8443                        let method = GetDatasetSvc(inner);
8444                        let codec = tonic::codec::ProstCodec::default();
8445                        let mut grpc = tonic::server::Grpc::new(codec)
8446                            .apply_compression_config(
8447                                accept_compression_encodings,
8448                                send_compression_encodings,
8449                            )
8450                            .apply_max_message_size_config(
8451                                max_decoding_message_size,
8452                                max_encoding_message_size,
8453                            );
8454                        let res = grpc.unary(method, req).await;
8455                        Ok(res)
8456                    };
8457                    Box::pin(fut)
8458                }
8459                "/aruna.api.storage.services.v2.DatasetService/GetDatasets" => {
8460                    #[allow(non_camel_case_types)]
8461                    struct GetDatasetsSvc<T: DatasetService>(pub Arc<T>);
8462                    impl<
8463                        T: DatasetService,
8464                    > tonic::server::UnaryService<super::GetDatasetsRequest>
8465                    for GetDatasetsSvc<T> {
8466                        type Response = super::GetDatasetsResponse;
8467                        type Future = BoxFuture<
8468                            tonic::Response<Self::Response>,
8469                            tonic::Status,
8470                        >;
8471                        fn call(
8472                            &mut self,
8473                            request: tonic::Request<super::GetDatasetsRequest>,
8474                        ) -> Self::Future {
8475                            let inner = Arc::clone(&self.0);
8476                            let fut = async move {
8477                                <T as DatasetService>::get_datasets(&inner, request).await
8478                            };
8479                            Box::pin(fut)
8480                        }
8481                    }
8482                    let accept_compression_encodings = self.accept_compression_encodings;
8483                    let send_compression_encodings = self.send_compression_encodings;
8484                    let max_decoding_message_size = self.max_decoding_message_size;
8485                    let max_encoding_message_size = self.max_encoding_message_size;
8486                    let inner = self.inner.clone();
8487                    let fut = async move {
8488                        let inner = inner.0;
8489                        let method = GetDatasetsSvc(inner);
8490                        let codec = tonic::codec::ProstCodec::default();
8491                        let mut grpc = tonic::server::Grpc::new(codec)
8492                            .apply_compression_config(
8493                                accept_compression_encodings,
8494                                send_compression_encodings,
8495                            )
8496                            .apply_max_message_size_config(
8497                                max_decoding_message_size,
8498                                max_encoding_message_size,
8499                            );
8500                        let res = grpc.unary(method, req).await;
8501                        Ok(res)
8502                    };
8503                    Box::pin(fut)
8504                }
8505                "/aruna.api.storage.services.v2.DatasetService/DeleteDataset" => {
8506                    #[allow(non_camel_case_types)]
8507                    struct DeleteDatasetSvc<T: DatasetService>(pub Arc<T>);
8508                    impl<
8509                        T: DatasetService,
8510                    > tonic::server::UnaryService<super::DeleteDatasetRequest>
8511                    for DeleteDatasetSvc<T> {
8512                        type Response = super::DeleteDatasetResponse;
8513                        type Future = BoxFuture<
8514                            tonic::Response<Self::Response>,
8515                            tonic::Status,
8516                        >;
8517                        fn call(
8518                            &mut self,
8519                            request: tonic::Request<super::DeleteDatasetRequest>,
8520                        ) -> Self::Future {
8521                            let inner = Arc::clone(&self.0);
8522                            let fut = async move {
8523                                <T as DatasetService>::delete_dataset(&inner, request).await
8524                            };
8525                            Box::pin(fut)
8526                        }
8527                    }
8528                    let accept_compression_encodings = self.accept_compression_encodings;
8529                    let send_compression_encodings = self.send_compression_encodings;
8530                    let max_decoding_message_size = self.max_decoding_message_size;
8531                    let max_encoding_message_size = self.max_encoding_message_size;
8532                    let inner = self.inner.clone();
8533                    let fut = async move {
8534                        let inner = inner.0;
8535                        let method = DeleteDatasetSvc(inner);
8536                        let codec = tonic::codec::ProstCodec::default();
8537                        let mut grpc = tonic::server::Grpc::new(codec)
8538                            .apply_compression_config(
8539                                accept_compression_encodings,
8540                                send_compression_encodings,
8541                            )
8542                            .apply_max_message_size_config(
8543                                max_decoding_message_size,
8544                                max_encoding_message_size,
8545                            );
8546                        let res = grpc.unary(method, req).await;
8547                        Ok(res)
8548                    };
8549                    Box::pin(fut)
8550                }
8551                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetName" => {
8552                    #[allow(non_camel_case_types)]
8553                    struct UpdateDatasetNameSvc<T: DatasetService>(pub Arc<T>);
8554                    impl<
8555                        T: DatasetService,
8556                    > tonic::server::UnaryService<super::UpdateDatasetNameRequest>
8557                    for UpdateDatasetNameSvc<T> {
8558                        type Response = super::UpdateDatasetNameResponse;
8559                        type Future = BoxFuture<
8560                            tonic::Response<Self::Response>,
8561                            tonic::Status,
8562                        >;
8563                        fn call(
8564                            &mut self,
8565                            request: tonic::Request<super::UpdateDatasetNameRequest>,
8566                        ) -> Self::Future {
8567                            let inner = Arc::clone(&self.0);
8568                            let fut = async move {
8569                                <T as DatasetService>::update_dataset_name(&inner, request)
8570                                    .await
8571                            };
8572                            Box::pin(fut)
8573                        }
8574                    }
8575                    let accept_compression_encodings = self.accept_compression_encodings;
8576                    let send_compression_encodings = self.send_compression_encodings;
8577                    let max_decoding_message_size = self.max_decoding_message_size;
8578                    let max_encoding_message_size = self.max_encoding_message_size;
8579                    let inner = self.inner.clone();
8580                    let fut = async move {
8581                        let inner = inner.0;
8582                        let method = UpdateDatasetNameSvc(inner);
8583                        let codec = tonic::codec::ProstCodec::default();
8584                        let mut grpc = tonic::server::Grpc::new(codec)
8585                            .apply_compression_config(
8586                                accept_compression_encodings,
8587                                send_compression_encodings,
8588                            )
8589                            .apply_max_message_size_config(
8590                                max_decoding_message_size,
8591                                max_encoding_message_size,
8592                            );
8593                        let res = grpc.unary(method, req).await;
8594                        Ok(res)
8595                    };
8596                    Box::pin(fut)
8597                }
8598                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetDescription" => {
8599                    #[allow(non_camel_case_types)]
8600                    struct UpdateDatasetDescriptionSvc<T: DatasetService>(pub Arc<T>);
8601                    impl<
8602                        T: DatasetService,
8603                    > tonic::server::UnaryService<super::UpdateDatasetDescriptionRequest>
8604                    for UpdateDatasetDescriptionSvc<T> {
8605                        type Response = super::UpdateDatasetDescriptionResponse;
8606                        type Future = BoxFuture<
8607                            tonic::Response<Self::Response>,
8608                            tonic::Status,
8609                        >;
8610                        fn call(
8611                            &mut self,
8612                            request: tonic::Request<
8613                                super::UpdateDatasetDescriptionRequest,
8614                            >,
8615                        ) -> Self::Future {
8616                            let inner = Arc::clone(&self.0);
8617                            let fut = async move {
8618                                <T as DatasetService>::update_dataset_description(
8619                                        &inner,
8620                                        request,
8621                                    )
8622                                    .await
8623                            };
8624                            Box::pin(fut)
8625                        }
8626                    }
8627                    let accept_compression_encodings = self.accept_compression_encodings;
8628                    let send_compression_encodings = self.send_compression_encodings;
8629                    let max_decoding_message_size = self.max_decoding_message_size;
8630                    let max_encoding_message_size = self.max_encoding_message_size;
8631                    let inner = self.inner.clone();
8632                    let fut = async move {
8633                        let inner = inner.0;
8634                        let method = UpdateDatasetDescriptionSvc(inner);
8635                        let codec = tonic::codec::ProstCodec::default();
8636                        let mut grpc = tonic::server::Grpc::new(codec)
8637                            .apply_compression_config(
8638                                accept_compression_encodings,
8639                                send_compression_encodings,
8640                            )
8641                            .apply_max_message_size_config(
8642                                max_decoding_message_size,
8643                                max_encoding_message_size,
8644                            );
8645                        let res = grpc.unary(method, req).await;
8646                        Ok(res)
8647                    };
8648                    Box::pin(fut)
8649                }
8650                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetKeyValues" => {
8651                    #[allow(non_camel_case_types)]
8652                    struct UpdateDatasetKeyValuesSvc<T: DatasetService>(pub Arc<T>);
8653                    impl<
8654                        T: DatasetService,
8655                    > tonic::server::UnaryService<super::UpdateDatasetKeyValuesRequest>
8656                    for UpdateDatasetKeyValuesSvc<T> {
8657                        type Response = super::UpdateDatasetKeyValuesResponse;
8658                        type Future = BoxFuture<
8659                            tonic::Response<Self::Response>,
8660                            tonic::Status,
8661                        >;
8662                        fn call(
8663                            &mut self,
8664                            request: tonic::Request<super::UpdateDatasetKeyValuesRequest>,
8665                        ) -> Self::Future {
8666                            let inner = Arc::clone(&self.0);
8667                            let fut = async move {
8668                                <T as DatasetService>::update_dataset_key_values(
8669                                        &inner,
8670                                        request,
8671                                    )
8672                                    .await
8673                            };
8674                            Box::pin(fut)
8675                        }
8676                    }
8677                    let accept_compression_encodings = self.accept_compression_encodings;
8678                    let send_compression_encodings = self.send_compression_encodings;
8679                    let max_decoding_message_size = self.max_decoding_message_size;
8680                    let max_encoding_message_size = self.max_encoding_message_size;
8681                    let inner = self.inner.clone();
8682                    let fut = async move {
8683                        let inner = inner.0;
8684                        let method = UpdateDatasetKeyValuesSvc(inner);
8685                        let codec = tonic::codec::ProstCodec::default();
8686                        let mut grpc = tonic::server::Grpc::new(codec)
8687                            .apply_compression_config(
8688                                accept_compression_encodings,
8689                                send_compression_encodings,
8690                            )
8691                            .apply_max_message_size_config(
8692                                max_decoding_message_size,
8693                                max_encoding_message_size,
8694                            );
8695                        let res = grpc.unary(method, req).await;
8696                        Ok(res)
8697                    };
8698                    Box::pin(fut)
8699                }
8700                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetDataClass" => {
8701                    #[allow(non_camel_case_types)]
8702                    struct UpdateDatasetDataClassSvc<T: DatasetService>(pub Arc<T>);
8703                    impl<
8704                        T: DatasetService,
8705                    > tonic::server::UnaryService<super::UpdateDatasetDataClassRequest>
8706                    for UpdateDatasetDataClassSvc<T> {
8707                        type Response = super::UpdateDatasetDataClassResponse;
8708                        type Future = BoxFuture<
8709                            tonic::Response<Self::Response>,
8710                            tonic::Status,
8711                        >;
8712                        fn call(
8713                            &mut self,
8714                            request: tonic::Request<super::UpdateDatasetDataClassRequest>,
8715                        ) -> Self::Future {
8716                            let inner = Arc::clone(&self.0);
8717                            let fut = async move {
8718                                <T as DatasetService>::update_dataset_data_class(
8719                                        &inner,
8720                                        request,
8721                                    )
8722                                    .await
8723                            };
8724                            Box::pin(fut)
8725                        }
8726                    }
8727                    let accept_compression_encodings = self.accept_compression_encodings;
8728                    let send_compression_encodings = self.send_compression_encodings;
8729                    let max_decoding_message_size = self.max_decoding_message_size;
8730                    let max_encoding_message_size = self.max_encoding_message_size;
8731                    let inner = self.inner.clone();
8732                    let fut = async move {
8733                        let inner = inner.0;
8734                        let method = UpdateDatasetDataClassSvc(inner);
8735                        let codec = tonic::codec::ProstCodec::default();
8736                        let mut grpc = tonic::server::Grpc::new(codec)
8737                            .apply_compression_config(
8738                                accept_compression_encodings,
8739                                send_compression_encodings,
8740                            )
8741                            .apply_max_message_size_config(
8742                                max_decoding_message_size,
8743                                max_encoding_message_size,
8744                            );
8745                        let res = grpc.unary(method, req).await;
8746                        Ok(res)
8747                    };
8748                    Box::pin(fut)
8749                }
8750                "/aruna.api.storage.services.v2.DatasetService/SnapshotDataset" => {
8751                    #[allow(non_camel_case_types)]
8752                    struct SnapshotDatasetSvc<T: DatasetService>(pub Arc<T>);
8753                    impl<
8754                        T: DatasetService,
8755                    > tonic::server::UnaryService<super::SnapshotDatasetRequest>
8756                    for SnapshotDatasetSvc<T> {
8757                        type Response = super::SnapshotDatasetResponse;
8758                        type Future = BoxFuture<
8759                            tonic::Response<Self::Response>,
8760                            tonic::Status,
8761                        >;
8762                        fn call(
8763                            &mut self,
8764                            request: tonic::Request<super::SnapshotDatasetRequest>,
8765                        ) -> Self::Future {
8766                            let inner = Arc::clone(&self.0);
8767                            let fut = async move {
8768                                <T as DatasetService>::snapshot_dataset(&inner, request)
8769                                    .await
8770                            };
8771                            Box::pin(fut)
8772                        }
8773                    }
8774                    let accept_compression_encodings = self.accept_compression_encodings;
8775                    let send_compression_encodings = self.send_compression_encodings;
8776                    let max_decoding_message_size = self.max_decoding_message_size;
8777                    let max_encoding_message_size = self.max_encoding_message_size;
8778                    let inner = self.inner.clone();
8779                    let fut = async move {
8780                        let inner = inner.0;
8781                        let method = SnapshotDatasetSvc(inner);
8782                        let codec = tonic::codec::ProstCodec::default();
8783                        let mut grpc = tonic::server::Grpc::new(codec)
8784                            .apply_compression_config(
8785                                accept_compression_encodings,
8786                                send_compression_encodings,
8787                            )
8788                            .apply_max_message_size_config(
8789                                max_decoding_message_size,
8790                                max_encoding_message_size,
8791                            );
8792                        let res = grpc.unary(method, req).await;
8793                        Ok(res)
8794                    };
8795                    Box::pin(fut)
8796                }
8797                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetLicenses" => {
8798                    #[allow(non_camel_case_types)]
8799                    struct UpdateDatasetLicensesSvc<T: DatasetService>(pub Arc<T>);
8800                    impl<
8801                        T: DatasetService,
8802                    > tonic::server::UnaryService<super::UpdateDatasetLicensesRequest>
8803                    for UpdateDatasetLicensesSvc<T> {
8804                        type Response = super::UpdateDatasetLicensesResponse;
8805                        type Future = BoxFuture<
8806                            tonic::Response<Self::Response>,
8807                            tonic::Status,
8808                        >;
8809                        fn call(
8810                            &mut self,
8811                            request: tonic::Request<super::UpdateDatasetLicensesRequest>,
8812                        ) -> Self::Future {
8813                            let inner = Arc::clone(&self.0);
8814                            let fut = async move {
8815                                <T as DatasetService>::update_dataset_licenses(
8816                                        &inner,
8817                                        request,
8818                                    )
8819                                    .await
8820                            };
8821                            Box::pin(fut)
8822                        }
8823                    }
8824                    let accept_compression_encodings = self.accept_compression_encodings;
8825                    let send_compression_encodings = self.send_compression_encodings;
8826                    let max_decoding_message_size = self.max_decoding_message_size;
8827                    let max_encoding_message_size = self.max_encoding_message_size;
8828                    let inner = self.inner.clone();
8829                    let fut = async move {
8830                        let inner = inner.0;
8831                        let method = UpdateDatasetLicensesSvc(inner);
8832                        let codec = tonic::codec::ProstCodec::default();
8833                        let mut grpc = tonic::server::Grpc::new(codec)
8834                            .apply_compression_config(
8835                                accept_compression_encodings,
8836                                send_compression_encodings,
8837                            )
8838                            .apply_max_message_size_config(
8839                                max_decoding_message_size,
8840                                max_encoding_message_size,
8841                            );
8842                        let res = grpc.unary(method, req).await;
8843                        Ok(res)
8844                    };
8845                    Box::pin(fut)
8846                }
8847                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetTitle" => {
8848                    #[allow(non_camel_case_types)]
8849                    struct UpdateDatasetTitleSvc<T: DatasetService>(pub Arc<T>);
8850                    impl<
8851                        T: DatasetService,
8852                    > tonic::server::UnaryService<super::UpdateDatasetTitleRequest>
8853                    for UpdateDatasetTitleSvc<T> {
8854                        type Response = super::UpdateDatasetTitleResponse;
8855                        type Future = BoxFuture<
8856                            tonic::Response<Self::Response>,
8857                            tonic::Status,
8858                        >;
8859                        fn call(
8860                            &mut self,
8861                            request: tonic::Request<super::UpdateDatasetTitleRequest>,
8862                        ) -> Self::Future {
8863                            let inner = Arc::clone(&self.0);
8864                            let fut = async move {
8865                                <T as DatasetService>::update_dataset_title(&inner, request)
8866                                    .await
8867                            };
8868                            Box::pin(fut)
8869                        }
8870                    }
8871                    let accept_compression_encodings = self.accept_compression_encodings;
8872                    let send_compression_encodings = self.send_compression_encodings;
8873                    let max_decoding_message_size = self.max_decoding_message_size;
8874                    let max_encoding_message_size = self.max_encoding_message_size;
8875                    let inner = self.inner.clone();
8876                    let fut = async move {
8877                        let inner = inner.0;
8878                        let method = UpdateDatasetTitleSvc(inner);
8879                        let codec = tonic::codec::ProstCodec::default();
8880                        let mut grpc = tonic::server::Grpc::new(codec)
8881                            .apply_compression_config(
8882                                accept_compression_encodings,
8883                                send_compression_encodings,
8884                            )
8885                            .apply_max_message_size_config(
8886                                max_decoding_message_size,
8887                                max_encoding_message_size,
8888                            );
8889                        let res = grpc.unary(method, req).await;
8890                        Ok(res)
8891                    };
8892                    Box::pin(fut)
8893                }
8894                "/aruna.api.storage.services.v2.DatasetService/UpdateDatasetAuthors" => {
8895                    #[allow(non_camel_case_types)]
8896                    struct UpdateDatasetAuthorsSvc<T: DatasetService>(pub Arc<T>);
8897                    impl<
8898                        T: DatasetService,
8899                    > tonic::server::UnaryService<super::UpdateDatasetAuthorsRequest>
8900                    for UpdateDatasetAuthorsSvc<T> {
8901                        type Response = super::UpdateDatasetAuthorsResponse;
8902                        type Future = BoxFuture<
8903                            tonic::Response<Self::Response>,
8904                            tonic::Status,
8905                        >;
8906                        fn call(
8907                            &mut self,
8908                            request: tonic::Request<super::UpdateDatasetAuthorsRequest>,
8909                        ) -> Self::Future {
8910                            let inner = Arc::clone(&self.0);
8911                            let fut = async move {
8912                                <T as DatasetService>::update_dataset_authors(
8913                                        &inner,
8914                                        request,
8915                                    )
8916                                    .await
8917                            };
8918                            Box::pin(fut)
8919                        }
8920                    }
8921                    let accept_compression_encodings = self.accept_compression_encodings;
8922                    let send_compression_encodings = self.send_compression_encodings;
8923                    let max_decoding_message_size = self.max_decoding_message_size;
8924                    let max_encoding_message_size = self.max_encoding_message_size;
8925                    let inner = self.inner.clone();
8926                    let fut = async move {
8927                        let inner = inner.0;
8928                        let method = UpdateDatasetAuthorsSvc(inner);
8929                        let codec = tonic::codec::ProstCodec::default();
8930                        let mut grpc = tonic::server::Grpc::new(codec)
8931                            .apply_compression_config(
8932                                accept_compression_encodings,
8933                                send_compression_encodings,
8934                            )
8935                            .apply_max_message_size_config(
8936                                max_decoding_message_size,
8937                                max_encoding_message_size,
8938                            );
8939                        let res = grpc.unary(method, req).await;
8940                        Ok(res)
8941                    };
8942                    Box::pin(fut)
8943                }
8944                _ => {
8945                    Box::pin(async move {
8946                        Ok(
8947                            http::Response::builder()
8948                                .status(200)
8949                                .header("grpc-status", "12")
8950                                .header("content-type", "application/grpc")
8951                                .body(empty_body())
8952                                .unwrap(),
8953                        )
8954                    })
8955                }
8956            }
8957        }
8958    }
8959    impl<T: DatasetService> Clone for DatasetServiceServer<T> {
8960        fn clone(&self) -> Self {
8961            let inner = self.inner.clone();
8962            Self {
8963                inner,
8964                accept_compression_encodings: self.accept_compression_encodings,
8965                send_compression_encodings: self.send_compression_encodings,
8966                max_decoding_message_size: self.max_decoding_message_size,
8967                max_encoding_message_size: self.max_encoding_message_size,
8968            }
8969        }
8970    }
8971    impl<T: DatasetService> Clone for _Inner<T> {
8972        fn clone(&self) -> Self {
8973            Self(Arc::clone(&self.0))
8974        }
8975    }
8976    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
8977        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8978            write!(f, "{:?}", self.0)
8979        }
8980    }
8981    impl<T: DatasetService> tonic::server::NamedService for DatasetServiceServer<T> {
8982        const NAME: &'static str = "aruna.api.storage.services.v2.DatasetService";
8983    }
8984}
8985#[derive(serde::Deserialize, serde::Serialize)]
8986#[allow(clippy::derive_partial_eq_without_eq)]
8987#[derive(Clone, PartialEq, ::prost::Message)]
8988pub struct CreateRuleRequest {
8989    #[prost(string, tag = "1")]
8990    pub rule: ::prost::alloc::string::String,
8991    #[prost(string, tag = "2")]
8992    pub description: ::prost::alloc::string::String,
8993    #[prost(bool, tag = "3")]
8994    pub public: bool,
8995}
8996#[derive(serde::Deserialize, serde::Serialize)]
8997#[allow(clippy::derive_partial_eq_without_eq)]
8998#[derive(Clone, PartialEq, ::prost::Message)]
8999pub struct CreateRuleResponse {
9000    #[prost(string, tag = "1")]
9001    pub id: ::prost::alloc::string::String,
9002}
9003#[derive(serde::Deserialize, serde::Serialize)]
9004#[allow(clippy::derive_partial_eq_without_eq)]
9005#[derive(Clone, PartialEq, ::prost::Message)]
9006pub struct GetRuleRequest {
9007    #[prost(string, tag = "1")]
9008    pub id: ::prost::alloc::string::String,
9009}
9010#[derive(serde::Deserialize, serde::Serialize)]
9011#[allow(clippy::derive_partial_eq_without_eq)]
9012#[derive(Clone, PartialEq, ::prost::Message)]
9013pub struct Rule {
9014    #[prost(string, tag = "1")]
9015    pub id: ::prost::alloc::string::String,
9016    #[prost(string, tag = "2")]
9017    pub rule: ::prost::alloc::string::String,
9018    #[prost(string, tag = "3")]
9019    pub description: ::prost::alloc::string::String,
9020    #[prost(bool, tag = "4")]
9021    pub public: bool,
9022    #[prost(string, tag = "5")]
9023    pub owner: ::prost::alloc::string::String,
9024}
9025#[derive(serde::Deserialize, serde::Serialize)]
9026#[allow(clippy::derive_partial_eq_without_eq)]
9027#[derive(Clone, PartialEq, ::prost::Message)]
9028pub struct GetRuleResponse {
9029    #[prost(message, optional, tag = "1")]
9030    pub rule: ::core::option::Option<Rule>,
9031}
9032#[derive(serde::Deserialize, serde::Serialize)]
9033#[allow(clippy::derive_partial_eq_without_eq)]
9034#[derive(Clone, PartialEq, ::prost::Message)]
9035pub struct ListRuleRequest {}
9036#[derive(serde::Deserialize, serde::Serialize)]
9037#[allow(clippy::derive_partial_eq_without_eq)]
9038#[derive(Clone, PartialEq, ::prost::Message)]
9039pub struct ListRuleResponse {
9040    #[prost(message, repeated, tag = "1")]
9041    pub rules: ::prost::alloc::vec::Vec<Rule>,
9042}
9043#[derive(serde::Deserialize, serde::Serialize)]
9044#[allow(clippy::derive_partial_eq_without_eq)]
9045#[derive(Clone, PartialEq, ::prost::Message)]
9046pub struct UpdateRuleRequest {
9047    #[prost(string, tag = "1")]
9048    pub id: ::prost::alloc::string::String,
9049    #[prost(string, tag = "2")]
9050    pub rule: ::prost::alloc::string::String,
9051    #[prost(string, tag = "3")]
9052    pub description: ::prost::alloc::string::String,
9053    #[prost(bool, tag = "4")]
9054    pub public: bool,
9055}
9056#[derive(serde::Deserialize, serde::Serialize)]
9057#[allow(clippy::derive_partial_eq_without_eq)]
9058#[derive(Clone, PartialEq, ::prost::Message)]
9059pub struct UpdateRuleResponse {
9060    #[prost(message, optional, tag = "1")]
9061    pub rule: ::core::option::Option<Rule>,
9062}
9063#[derive(serde::Deserialize, serde::Serialize)]
9064#[allow(clippy::derive_partial_eq_without_eq)]
9065#[derive(Clone, PartialEq, ::prost::Message)]
9066pub struct DeleteRuleRequest {
9067    #[prost(string, tag = "1")]
9068    pub id: ::prost::alloc::string::String,
9069}
9070#[derive(serde::Deserialize, serde::Serialize)]
9071#[allow(clippy::derive_partial_eq_without_eq)]
9072#[derive(Clone, PartialEq, ::prost::Message)]
9073pub struct DeleteRuleResponse {}
9074#[derive(serde::Deserialize, serde::Serialize)]
9075#[allow(clippy::derive_partial_eq_without_eq)]
9076#[derive(Clone, PartialEq, ::prost::Message)]
9077pub struct CreateRuleBindingRequest {
9078    #[prost(string, tag = "1")]
9079    pub rule_id: ::prost::alloc::string::String,
9080    #[prost(string, tag = "2")]
9081    pub object_id: ::prost::alloc::string::String,
9082    #[prost(bool, tag = "3")]
9083    pub cascading: bool,
9084}
9085#[derive(serde::Deserialize, serde::Serialize)]
9086#[allow(clippy::derive_partial_eq_without_eq)]
9087#[derive(Clone, PartialEq, ::prost::Message)]
9088pub struct CreateRuleBindingResponse {
9089    #[prost(string, tag = "1")]
9090    pub rule_id: ::prost::alloc::string::String,
9091    #[prost(string, tag = "2")]
9092    pub object_id: ::prost::alloc::string::String,
9093    #[prost(bool, tag = "3")]
9094    pub cascading: bool,
9095}
9096#[derive(serde::Deserialize, serde::Serialize)]
9097#[allow(clippy::derive_partial_eq_without_eq)]
9098#[derive(Clone, PartialEq, ::prost::Message)]
9099pub struct DeleteRuleBindingRequest {
9100    #[prost(string, tag = "1")]
9101    pub rule_id: ::prost::alloc::string::String,
9102    #[prost(string, tag = "2")]
9103    pub object_id: ::prost::alloc::string::String,
9104}
9105#[derive(serde::Deserialize, serde::Serialize)]
9106#[allow(clippy::derive_partial_eq_without_eq)]
9107#[derive(Clone, PartialEq, ::prost::Message)]
9108pub struct DeleteRuleBindingResponse {}
9109/// Generated client implementations.
9110pub mod rules_service_client {
9111    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
9112    use tonic::codegen::*;
9113    use tonic::codegen::http::Uri;
9114    /// RulesService
9115    ///
9116    /// Status: BETA
9117    ///
9118    /// Contains all methods to edit and change rules
9119    #[derive(Debug, Clone)]
9120    pub struct RulesServiceClient<T> {
9121        inner: tonic::client::Grpc<T>,
9122    }
9123    impl RulesServiceClient<tonic::transport::Channel> {
9124        /// Attempt to create a new client by connecting to a given endpoint.
9125        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
9126        where
9127            D: TryInto<tonic::transport::Endpoint>,
9128            D::Error: Into<StdError>,
9129        {
9130            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
9131            Ok(Self::new(conn))
9132        }
9133    }
9134    impl<T> RulesServiceClient<T>
9135    where
9136        T: tonic::client::GrpcService<tonic::body::BoxBody>,
9137        T::Error: Into<StdError>,
9138        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
9139        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
9140    {
9141        pub fn new(inner: T) -> Self {
9142            let inner = tonic::client::Grpc::new(inner);
9143            Self { inner }
9144        }
9145        pub fn with_origin(inner: T, origin: Uri) -> Self {
9146            let inner = tonic::client::Grpc::with_origin(inner, origin);
9147            Self { inner }
9148        }
9149        pub fn with_interceptor<F>(
9150            inner: T,
9151            interceptor: F,
9152        ) -> RulesServiceClient<InterceptedService<T, F>>
9153        where
9154            F: tonic::service::Interceptor,
9155            T::ResponseBody: Default,
9156            T: tonic::codegen::Service<
9157                http::Request<tonic::body::BoxBody>,
9158                Response = http::Response<
9159                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
9160                >,
9161            >,
9162            <T as tonic::codegen::Service<
9163                http::Request<tonic::body::BoxBody>,
9164            >>::Error: Into<StdError> + Send + Sync,
9165        {
9166            RulesServiceClient::new(InterceptedService::new(inner, interceptor))
9167        }
9168        /// Compress requests with the given encoding.
9169        ///
9170        /// This requires the server to support it otherwise it might respond with an
9171        /// error.
9172        #[must_use]
9173        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
9174            self.inner = self.inner.send_compressed(encoding);
9175            self
9176        }
9177        /// Enable decompressing responses.
9178        #[must_use]
9179        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
9180            self.inner = self.inner.accept_compressed(encoding);
9181            self
9182        }
9183        /// Limits the maximum size of a decoded message.
9184        ///
9185        /// Default: `4MB`
9186        #[must_use]
9187        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
9188            self.inner = self.inner.max_decoding_message_size(limit);
9189            self
9190        }
9191        /// Limits the maximum size of an encoded message.
9192        ///
9193        /// Default: `usize::MAX`
9194        #[must_use]
9195        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
9196            self.inner = self.inner.max_encoding_message_size(limit);
9197            self
9198        }
9199        /// CreateRule
9200        ///
9201        /// Status: ALPHA
9202        ///
9203        /// Create a new rule
9204        pub async fn create_rule(
9205            &mut self,
9206            request: impl tonic::IntoRequest<super::CreateRuleRequest>,
9207        ) -> std::result::Result<
9208            tonic::Response<super::CreateRuleResponse>,
9209            tonic::Status,
9210        > {
9211            self.inner
9212                .ready()
9213                .await
9214                .map_err(|e| {
9215                    tonic::Status::new(
9216                        tonic::Code::Unknown,
9217                        format!("Service was not ready: {}", e.into()),
9218                    )
9219                })?;
9220            let codec = tonic::codec::ProstCodec::default();
9221            let path = http::uri::PathAndQuery::from_static(
9222                "/aruna.api.storage.services.v2.RulesService/CreateRule",
9223            );
9224            let mut req = request.into_request();
9225            req.extensions_mut()
9226                .insert(
9227                    GrpcMethod::new(
9228                        "aruna.api.storage.services.v2.RulesService",
9229                        "CreateRule",
9230                    ),
9231                );
9232            self.inner.unary(req, path, codec).await
9233        }
9234        /// GetRule
9235        ///
9236        /// Status: ALPHA
9237        ///
9238        /// Gets an existing rule
9239        pub async fn get_rule(
9240            &mut self,
9241            request: impl tonic::IntoRequest<super::GetRuleRequest>,
9242        ) -> std::result::Result<
9243            tonic::Response<super::GetRuleResponse>,
9244            tonic::Status,
9245        > {
9246            self.inner
9247                .ready()
9248                .await
9249                .map_err(|e| {
9250                    tonic::Status::new(
9251                        tonic::Code::Unknown,
9252                        format!("Service was not ready: {}", e.into()),
9253                    )
9254                })?;
9255            let codec = tonic::codec::ProstCodec::default();
9256            let path = http::uri::PathAndQuery::from_static(
9257                "/aruna.api.storage.services.v2.RulesService/GetRule",
9258            );
9259            let mut req = request.into_request();
9260            req.extensions_mut()
9261                .insert(
9262                    GrpcMethod::new(
9263                        "aruna.api.storage.services.v2.RulesService",
9264                        "GetRule",
9265                    ),
9266                );
9267            self.inner.unary(req, path, codec).await
9268        }
9269        /// ListRule
9270        ///
9271        /// Status: ALPHA
9272        ///
9273        /// Lists rules -> Owned and public rules
9274        pub async fn list_rule(
9275            &mut self,
9276            request: impl tonic::IntoRequest<super::ListRuleRequest>,
9277        ) -> std::result::Result<
9278            tonic::Response<super::ListRuleResponse>,
9279            tonic::Status,
9280        > {
9281            self.inner
9282                .ready()
9283                .await
9284                .map_err(|e| {
9285                    tonic::Status::new(
9286                        tonic::Code::Unknown,
9287                        format!("Service was not ready: {}", e.into()),
9288                    )
9289                })?;
9290            let codec = tonic::codec::ProstCodec::default();
9291            let path = http::uri::PathAndQuery::from_static(
9292                "/aruna.api.storage.services.v2.RulesService/ListRule",
9293            );
9294            let mut req = request.into_request();
9295            req.extensions_mut()
9296                .insert(
9297                    GrpcMethod::new(
9298                        "aruna.api.storage.services.v2.RulesService",
9299                        "ListRule",
9300                    ),
9301                );
9302            self.inner.unary(req, path, codec).await
9303        }
9304        /// UpdateRule
9305        ///
9306        /// Status: ALPHA
9307        ///
9308        /// Updates an existing rule
9309        pub async fn update_rule(
9310            &mut self,
9311            request: impl tonic::IntoRequest<super::UpdateRuleRequest>,
9312        ) -> std::result::Result<
9313            tonic::Response<super::UpdateRuleResponse>,
9314            tonic::Status,
9315        > {
9316            self.inner
9317                .ready()
9318                .await
9319                .map_err(|e| {
9320                    tonic::Status::new(
9321                        tonic::Code::Unknown,
9322                        format!("Service was not ready: {}", e.into()),
9323                    )
9324                })?;
9325            let codec = tonic::codec::ProstCodec::default();
9326            let path = http::uri::PathAndQuery::from_static(
9327                "/aruna.api.storage.services.v2.RulesService/UpdateRule",
9328            );
9329            let mut req = request.into_request();
9330            req.extensions_mut()
9331                .insert(
9332                    GrpcMethod::new(
9333                        "aruna.api.storage.services.v2.RulesService",
9334                        "UpdateRule",
9335                    ),
9336                );
9337            self.inner.unary(req, path, codec).await
9338        }
9339        /// DeleteRule
9340        ///
9341        /// Status: ALPHA
9342        ///
9343        /// Deletes an existing rule
9344        pub async fn delete_rule(
9345            &mut self,
9346            request: impl tonic::IntoRequest<super::DeleteRuleRequest>,
9347        ) -> std::result::Result<
9348            tonic::Response<super::DeleteRuleResponse>,
9349            tonic::Status,
9350        > {
9351            self.inner
9352                .ready()
9353                .await
9354                .map_err(|e| {
9355                    tonic::Status::new(
9356                        tonic::Code::Unknown,
9357                        format!("Service was not ready: {}", e.into()),
9358                    )
9359                })?;
9360            let codec = tonic::codec::ProstCodec::default();
9361            let path = http::uri::PathAndQuery::from_static(
9362                "/aruna.api.storage.services.v2.RulesService/DeleteRule",
9363            );
9364            let mut req = request.into_request();
9365            req.extensions_mut()
9366                .insert(
9367                    GrpcMethod::new(
9368                        "aruna.api.storage.services.v2.RulesService",
9369                        "DeleteRule",
9370                    ),
9371                );
9372            self.inner.unary(req, path, codec).await
9373        }
9374        /// CreateRuleBinding
9375        ///
9376        /// Status: ALPHA
9377        ///
9378        /// Associates a rule with an object, optionally cascading the rule to all children
9379        pub async fn create_rule_binding(
9380            &mut self,
9381            request: impl tonic::IntoRequest<super::CreateRuleBindingRequest>,
9382        ) -> std::result::Result<
9383            tonic::Response<super::CreateRuleBindingResponse>,
9384            tonic::Status,
9385        > {
9386            self.inner
9387                .ready()
9388                .await
9389                .map_err(|e| {
9390                    tonic::Status::new(
9391                        tonic::Code::Unknown,
9392                        format!("Service was not ready: {}", e.into()),
9393                    )
9394                })?;
9395            let codec = tonic::codec::ProstCodec::default();
9396            let path = http::uri::PathAndQuery::from_static(
9397                "/aruna.api.storage.services.v2.RulesService/CreateRuleBinding",
9398            );
9399            let mut req = request.into_request();
9400            req.extensions_mut()
9401                .insert(
9402                    GrpcMethod::new(
9403                        "aruna.api.storage.services.v2.RulesService",
9404                        "CreateRuleBinding",
9405                    ),
9406                );
9407            self.inner.unary(req, path, codec).await
9408        }
9409        /// DeleteRuleBinding
9410        ///
9411        /// Status: ALPHA
9412        ///
9413        /// Disassociates a rule from an object
9414        pub async fn delete_rule_binding(
9415            &mut self,
9416            request: impl tonic::IntoRequest<super::DeleteRuleBindingRequest>,
9417        ) -> std::result::Result<
9418            tonic::Response<super::DeleteRuleBindingResponse>,
9419            tonic::Status,
9420        > {
9421            self.inner
9422                .ready()
9423                .await
9424                .map_err(|e| {
9425                    tonic::Status::new(
9426                        tonic::Code::Unknown,
9427                        format!("Service was not ready: {}", e.into()),
9428                    )
9429                })?;
9430            let codec = tonic::codec::ProstCodec::default();
9431            let path = http::uri::PathAndQuery::from_static(
9432                "/aruna.api.storage.services.v2.RulesService/DeleteRuleBinding",
9433            );
9434            let mut req = request.into_request();
9435            req.extensions_mut()
9436                .insert(
9437                    GrpcMethod::new(
9438                        "aruna.api.storage.services.v2.RulesService",
9439                        "DeleteRuleBinding",
9440                    ),
9441                );
9442            self.inner.unary(req, path, codec).await
9443        }
9444    }
9445}
9446/// Generated server implementations.
9447pub mod rules_service_server {
9448    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
9449    use tonic::codegen::*;
9450    /// Generated trait containing gRPC methods that should be implemented for use with RulesServiceServer.
9451    #[async_trait]
9452    pub trait RulesService: Send + Sync + 'static {
9453        /// CreateRule
9454        ///
9455        /// Status: ALPHA
9456        ///
9457        /// Create a new rule
9458        async fn create_rule(
9459            &self,
9460            request: tonic::Request<super::CreateRuleRequest>,
9461        ) -> std::result::Result<
9462            tonic::Response<super::CreateRuleResponse>,
9463            tonic::Status,
9464        >;
9465        /// GetRule
9466        ///
9467        /// Status: ALPHA
9468        ///
9469        /// Gets an existing rule
9470        async fn get_rule(
9471            &self,
9472            request: tonic::Request<super::GetRuleRequest>,
9473        ) -> std::result::Result<tonic::Response<super::GetRuleResponse>, tonic::Status>;
9474        /// ListRule
9475        ///
9476        /// Status: ALPHA
9477        ///
9478        /// Lists rules -> Owned and public rules
9479        async fn list_rule(
9480            &self,
9481            request: tonic::Request<super::ListRuleRequest>,
9482        ) -> std::result::Result<
9483            tonic::Response<super::ListRuleResponse>,
9484            tonic::Status,
9485        >;
9486        /// UpdateRule
9487        ///
9488        /// Status: ALPHA
9489        ///
9490        /// Updates an existing rule
9491        async fn update_rule(
9492            &self,
9493            request: tonic::Request<super::UpdateRuleRequest>,
9494        ) -> std::result::Result<
9495            tonic::Response<super::UpdateRuleResponse>,
9496            tonic::Status,
9497        >;
9498        /// DeleteRule
9499        ///
9500        /// Status: ALPHA
9501        ///
9502        /// Deletes an existing rule
9503        async fn delete_rule(
9504            &self,
9505            request: tonic::Request<super::DeleteRuleRequest>,
9506        ) -> std::result::Result<
9507            tonic::Response<super::DeleteRuleResponse>,
9508            tonic::Status,
9509        >;
9510        /// CreateRuleBinding
9511        ///
9512        /// Status: ALPHA
9513        ///
9514        /// Associates a rule with an object, optionally cascading the rule to all children
9515        async fn create_rule_binding(
9516            &self,
9517            request: tonic::Request<super::CreateRuleBindingRequest>,
9518        ) -> std::result::Result<
9519            tonic::Response<super::CreateRuleBindingResponse>,
9520            tonic::Status,
9521        >;
9522        /// DeleteRuleBinding
9523        ///
9524        /// Status: ALPHA
9525        ///
9526        /// Disassociates a rule from an object
9527        async fn delete_rule_binding(
9528            &self,
9529            request: tonic::Request<super::DeleteRuleBindingRequest>,
9530        ) -> std::result::Result<
9531            tonic::Response<super::DeleteRuleBindingResponse>,
9532            tonic::Status,
9533        >;
9534    }
9535    /// RulesService
9536    ///
9537    /// Status: BETA
9538    ///
9539    /// Contains all methods to edit and change rules
9540    #[derive(Debug)]
9541    pub struct RulesServiceServer<T: RulesService> {
9542        inner: _Inner<T>,
9543        accept_compression_encodings: EnabledCompressionEncodings,
9544        send_compression_encodings: EnabledCompressionEncodings,
9545        max_decoding_message_size: Option<usize>,
9546        max_encoding_message_size: Option<usize>,
9547    }
9548    struct _Inner<T>(Arc<T>);
9549    impl<T: RulesService> RulesServiceServer<T> {
9550        pub fn new(inner: T) -> Self {
9551            Self::from_arc(Arc::new(inner))
9552        }
9553        pub fn from_arc(inner: Arc<T>) -> Self {
9554            let inner = _Inner(inner);
9555            Self {
9556                inner,
9557                accept_compression_encodings: Default::default(),
9558                send_compression_encodings: Default::default(),
9559                max_decoding_message_size: None,
9560                max_encoding_message_size: None,
9561            }
9562        }
9563        pub fn with_interceptor<F>(
9564            inner: T,
9565            interceptor: F,
9566        ) -> InterceptedService<Self, F>
9567        where
9568            F: tonic::service::Interceptor,
9569        {
9570            InterceptedService::new(Self::new(inner), interceptor)
9571        }
9572        /// Enable decompressing requests with the given encoding.
9573        #[must_use]
9574        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
9575            self.accept_compression_encodings.enable(encoding);
9576            self
9577        }
9578        /// Compress responses with the given encoding, if the client supports it.
9579        #[must_use]
9580        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
9581            self.send_compression_encodings.enable(encoding);
9582            self
9583        }
9584        /// Limits the maximum size of a decoded message.
9585        ///
9586        /// Default: `4MB`
9587        #[must_use]
9588        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
9589            self.max_decoding_message_size = Some(limit);
9590            self
9591        }
9592        /// Limits the maximum size of an encoded message.
9593        ///
9594        /// Default: `usize::MAX`
9595        #[must_use]
9596        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
9597            self.max_encoding_message_size = Some(limit);
9598            self
9599        }
9600    }
9601    impl<T, B> tonic::codegen::Service<http::Request<B>> for RulesServiceServer<T>
9602    where
9603        T: RulesService,
9604        B: Body + Send + 'static,
9605        B::Error: Into<StdError> + Send + 'static,
9606    {
9607        type Response = http::Response<tonic::body::BoxBody>;
9608        type Error = std::convert::Infallible;
9609        type Future = BoxFuture<Self::Response, Self::Error>;
9610        fn poll_ready(
9611            &mut self,
9612            _cx: &mut Context<'_>,
9613        ) -> Poll<std::result::Result<(), Self::Error>> {
9614            Poll::Ready(Ok(()))
9615        }
9616        fn call(&mut self, req: http::Request<B>) -> Self::Future {
9617            let inner = self.inner.clone();
9618            match req.uri().path() {
9619                "/aruna.api.storage.services.v2.RulesService/CreateRule" => {
9620                    #[allow(non_camel_case_types)]
9621                    struct CreateRuleSvc<T: RulesService>(pub Arc<T>);
9622                    impl<
9623                        T: RulesService,
9624                    > tonic::server::UnaryService<super::CreateRuleRequest>
9625                    for CreateRuleSvc<T> {
9626                        type Response = super::CreateRuleResponse;
9627                        type Future = BoxFuture<
9628                            tonic::Response<Self::Response>,
9629                            tonic::Status,
9630                        >;
9631                        fn call(
9632                            &mut self,
9633                            request: tonic::Request<super::CreateRuleRequest>,
9634                        ) -> Self::Future {
9635                            let inner = Arc::clone(&self.0);
9636                            let fut = async move {
9637                                <T as RulesService>::create_rule(&inner, request).await
9638                            };
9639                            Box::pin(fut)
9640                        }
9641                    }
9642                    let accept_compression_encodings = self.accept_compression_encodings;
9643                    let send_compression_encodings = self.send_compression_encodings;
9644                    let max_decoding_message_size = self.max_decoding_message_size;
9645                    let max_encoding_message_size = self.max_encoding_message_size;
9646                    let inner = self.inner.clone();
9647                    let fut = async move {
9648                        let inner = inner.0;
9649                        let method = CreateRuleSvc(inner);
9650                        let codec = tonic::codec::ProstCodec::default();
9651                        let mut grpc = tonic::server::Grpc::new(codec)
9652                            .apply_compression_config(
9653                                accept_compression_encodings,
9654                                send_compression_encodings,
9655                            )
9656                            .apply_max_message_size_config(
9657                                max_decoding_message_size,
9658                                max_encoding_message_size,
9659                            );
9660                        let res = grpc.unary(method, req).await;
9661                        Ok(res)
9662                    };
9663                    Box::pin(fut)
9664                }
9665                "/aruna.api.storage.services.v2.RulesService/GetRule" => {
9666                    #[allow(non_camel_case_types)]
9667                    struct GetRuleSvc<T: RulesService>(pub Arc<T>);
9668                    impl<
9669                        T: RulesService,
9670                    > tonic::server::UnaryService<super::GetRuleRequest>
9671                    for GetRuleSvc<T> {
9672                        type Response = super::GetRuleResponse;
9673                        type Future = BoxFuture<
9674                            tonic::Response<Self::Response>,
9675                            tonic::Status,
9676                        >;
9677                        fn call(
9678                            &mut self,
9679                            request: tonic::Request<super::GetRuleRequest>,
9680                        ) -> Self::Future {
9681                            let inner = Arc::clone(&self.0);
9682                            let fut = async move {
9683                                <T as RulesService>::get_rule(&inner, request).await
9684                            };
9685                            Box::pin(fut)
9686                        }
9687                    }
9688                    let accept_compression_encodings = self.accept_compression_encodings;
9689                    let send_compression_encodings = self.send_compression_encodings;
9690                    let max_decoding_message_size = self.max_decoding_message_size;
9691                    let max_encoding_message_size = self.max_encoding_message_size;
9692                    let inner = self.inner.clone();
9693                    let fut = async move {
9694                        let inner = inner.0;
9695                        let method = GetRuleSvc(inner);
9696                        let codec = tonic::codec::ProstCodec::default();
9697                        let mut grpc = tonic::server::Grpc::new(codec)
9698                            .apply_compression_config(
9699                                accept_compression_encodings,
9700                                send_compression_encodings,
9701                            )
9702                            .apply_max_message_size_config(
9703                                max_decoding_message_size,
9704                                max_encoding_message_size,
9705                            );
9706                        let res = grpc.unary(method, req).await;
9707                        Ok(res)
9708                    };
9709                    Box::pin(fut)
9710                }
9711                "/aruna.api.storage.services.v2.RulesService/ListRule" => {
9712                    #[allow(non_camel_case_types)]
9713                    struct ListRuleSvc<T: RulesService>(pub Arc<T>);
9714                    impl<
9715                        T: RulesService,
9716                    > tonic::server::UnaryService<super::ListRuleRequest>
9717                    for ListRuleSvc<T> {
9718                        type Response = super::ListRuleResponse;
9719                        type Future = BoxFuture<
9720                            tonic::Response<Self::Response>,
9721                            tonic::Status,
9722                        >;
9723                        fn call(
9724                            &mut self,
9725                            request: tonic::Request<super::ListRuleRequest>,
9726                        ) -> Self::Future {
9727                            let inner = Arc::clone(&self.0);
9728                            let fut = async move {
9729                                <T as RulesService>::list_rule(&inner, request).await
9730                            };
9731                            Box::pin(fut)
9732                        }
9733                    }
9734                    let accept_compression_encodings = self.accept_compression_encodings;
9735                    let send_compression_encodings = self.send_compression_encodings;
9736                    let max_decoding_message_size = self.max_decoding_message_size;
9737                    let max_encoding_message_size = self.max_encoding_message_size;
9738                    let inner = self.inner.clone();
9739                    let fut = async move {
9740                        let inner = inner.0;
9741                        let method = ListRuleSvc(inner);
9742                        let codec = tonic::codec::ProstCodec::default();
9743                        let mut grpc = tonic::server::Grpc::new(codec)
9744                            .apply_compression_config(
9745                                accept_compression_encodings,
9746                                send_compression_encodings,
9747                            )
9748                            .apply_max_message_size_config(
9749                                max_decoding_message_size,
9750                                max_encoding_message_size,
9751                            );
9752                        let res = grpc.unary(method, req).await;
9753                        Ok(res)
9754                    };
9755                    Box::pin(fut)
9756                }
9757                "/aruna.api.storage.services.v2.RulesService/UpdateRule" => {
9758                    #[allow(non_camel_case_types)]
9759                    struct UpdateRuleSvc<T: RulesService>(pub Arc<T>);
9760                    impl<
9761                        T: RulesService,
9762                    > tonic::server::UnaryService<super::UpdateRuleRequest>
9763                    for UpdateRuleSvc<T> {
9764                        type Response = super::UpdateRuleResponse;
9765                        type Future = BoxFuture<
9766                            tonic::Response<Self::Response>,
9767                            tonic::Status,
9768                        >;
9769                        fn call(
9770                            &mut self,
9771                            request: tonic::Request<super::UpdateRuleRequest>,
9772                        ) -> Self::Future {
9773                            let inner = Arc::clone(&self.0);
9774                            let fut = async move {
9775                                <T as RulesService>::update_rule(&inner, request).await
9776                            };
9777                            Box::pin(fut)
9778                        }
9779                    }
9780                    let accept_compression_encodings = self.accept_compression_encodings;
9781                    let send_compression_encodings = self.send_compression_encodings;
9782                    let max_decoding_message_size = self.max_decoding_message_size;
9783                    let max_encoding_message_size = self.max_encoding_message_size;
9784                    let inner = self.inner.clone();
9785                    let fut = async move {
9786                        let inner = inner.0;
9787                        let method = UpdateRuleSvc(inner);
9788                        let codec = tonic::codec::ProstCodec::default();
9789                        let mut grpc = tonic::server::Grpc::new(codec)
9790                            .apply_compression_config(
9791                                accept_compression_encodings,
9792                                send_compression_encodings,
9793                            )
9794                            .apply_max_message_size_config(
9795                                max_decoding_message_size,
9796                                max_encoding_message_size,
9797                            );
9798                        let res = grpc.unary(method, req).await;
9799                        Ok(res)
9800                    };
9801                    Box::pin(fut)
9802                }
9803                "/aruna.api.storage.services.v2.RulesService/DeleteRule" => {
9804                    #[allow(non_camel_case_types)]
9805                    struct DeleteRuleSvc<T: RulesService>(pub Arc<T>);
9806                    impl<
9807                        T: RulesService,
9808                    > tonic::server::UnaryService<super::DeleteRuleRequest>
9809                    for DeleteRuleSvc<T> {
9810                        type Response = super::DeleteRuleResponse;
9811                        type Future = BoxFuture<
9812                            tonic::Response<Self::Response>,
9813                            tonic::Status,
9814                        >;
9815                        fn call(
9816                            &mut self,
9817                            request: tonic::Request<super::DeleteRuleRequest>,
9818                        ) -> Self::Future {
9819                            let inner = Arc::clone(&self.0);
9820                            let fut = async move {
9821                                <T as RulesService>::delete_rule(&inner, request).await
9822                            };
9823                            Box::pin(fut)
9824                        }
9825                    }
9826                    let accept_compression_encodings = self.accept_compression_encodings;
9827                    let send_compression_encodings = self.send_compression_encodings;
9828                    let max_decoding_message_size = self.max_decoding_message_size;
9829                    let max_encoding_message_size = self.max_encoding_message_size;
9830                    let inner = self.inner.clone();
9831                    let fut = async move {
9832                        let inner = inner.0;
9833                        let method = DeleteRuleSvc(inner);
9834                        let codec = tonic::codec::ProstCodec::default();
9835                        let mut grpc = tonic::server::Grpc::new(codec)
9836                            .apply_compression_config(
9837                                accept_compression_encodings,
9838                                send_compression_encodings,
9839                            )
9840                            .apply_max_message_size_config(
9841                                max_decoding_message_size,
9842                                max_encoding_message_size,
9843                            );
9844                        let res = grpc.unary(method, req).await;
9845                        Ok(res)
9846                    };
9847                    Box::pin(fut)
9848                }
9849                "/aruna.api.storage.services.v2.RulesService/CreateRuleBinding" => {
9850                    #[allow(non_camel_case_types)]
9851                    struct CreateRuleBindingSvc<T: RulesService>(pub Arc<T>);
9852                    impl<
9853                        T: RulesService,
9854                    > tonic::server::UnaryService<super::CreateRuleBindingRequest>
9855                    for CreateRuleBindingSvc<T> {
9856                        type Response = super::CreateRuleBindingResponse;
9857                        type Future = BoxFuture<
9858                            tonic::Response<Self::Response>,
9859                            tonic::Status,
9860                        >;
9861                        fn call(
9862                            &mut self,
9863                            request: tonic::Request<super::CreateRuleBindingRequest>,
9864                        ) -> Self::Future {
9865                            let inner = Arc::clone(&self.0);
9866                            let fut = async move {
9867                                <T as RulesService>::create_rule_binding(&inner, request)
9868                                    .await
9869                            };
9870                            Box::pin(fut)
9871                        }
9872                    }
9873                    let accept_compression_encodings = self.accept_compression_encodings;
9874                    let send_compression_encodings = self.send_compression_encodings;
9875                    let max_decoding_message_size = self.max_decoding_message_size;
9876                    let max_encoding_message_size = self.max_encoding_message_size;
9877                    let inner = self.inner.clone();
9878                    let fut = async move {
9879                        let inner = inner.0;
9880                        let method = CreateRuleBindingSvc(inner);
9881                        let codec = tonic::codec::ProstCodec::default();
9882                        let mut grpc = tonic::server::Grpc::new(codec)
9883                            .apply_compression_config(
9884                                accept_compression_encodings,
9885                                send_compression_encodings,
9886                            )
9887                            .apply_max_message_size_config(
9888                                max_decoding_message_size,
9889                                max_encoding_message_size,
9890                            );
9891                        let res = grpc.unary(method, req).await;
9892                        Ok(res)
9893                    };
9894                    Box::pin(fut)
9895                }
9896                "/aruna.api.storage.services.v2.RulesService/DeleteRuleBinding" => {
9897                    #[allow(non_camel_case_types)]
9898                    struct DeleteRuleBindingSvc<T: RulesService>(pub Arc<T>);
9899                    impl<
9900                        T: RulesService,
9901                    > tonic::server::UnaryService<super::DeleteRuleBindingRequest>
9902                    for DeleteRuleBindingSvc<T> {
9903                        type Response = super::DeleteRuleBindingResponse;
9904                        type Future = BoxFuture<
9905                            tonic::Response<Self::Response>,
9906                            tonic::Status,
9907                        >;
9908                        fn call(
9909                            &mut self,
9910                            request: tonic::Request<super::DeleteRuleBindingRequest>,
9911                        ) -> Self::Future {
9912                            let inner = Arc::clone(&self.0);
9913                            let fut = async move {
9914                                <T as RulesService>::delete_rule_binding(&inner, request)
9915                                    .await
9916                            };
9917                            Box::pin(fut)
9918                        }
9919                    }
9920                    let accept_compression_encodings = self.accept_compression_encodings;
9921                    let send_compression_encodings = self.send_compression_encodings;
9922                    let max_decoding_message_size = self.max_decoding_message_size;
9923                    let max_encoding_message_size = self.max_encoding_message_size;
9924                    let inner = self.inner.clone();
9925                    let fut = async move {
9926                        let inner = inner.0;
9927                        let method = DeleteRuleBindingSvc(inner);
9928                        let codec = tonic::codec::ProstCodec::default();
9929                        let mut grpc = tonic::server::Grpc::new(codec)
9930                            .apply_compression_config(
9931                                accept_compression_encodings,
9932                                send_compression_encodings,
9933                            )
9934                            .apply_max_message_size_config(
9935                                max_decoding_message_size,
9936                                max_encoding_message_size,
9937                            );
9938                        let res = grpc.unary(method, req).await;
9939                        Ok(res)
9940                    };
9941                    Box::pin(fut)
9942                }
9943                _ => {
9944                    Box::pin(async move {
9945                        Ok(
9946                            http::Response::builder()
9947                                .status(200)
9948                                .header("grpc-status", "12")
9949                                .header("content-type", "application/grpc")
9950                                .body(empty_body())
9951                                .unwrap(),
9952                        )
9953                    })
9954                }
9955            }
9956        }
9957    }
9958    impl<T: RulesService> Clone for RulesServiceServer<T> {
9959        fn clone(&self) -> Self {
9960            let inner = self.inner.clone();
9961            Self {
9962                inner,
9963                accept_compression_encodings: self.accept_compression_encodings,
9964                send_compression_encodings: self.send_compression_encodings,
9965                max_decoding_message_size: self.max_decoding_message_size,
9966                max_encoding_message_size: self.max_encoding_message_size,
9967            }
9968        }
9969    }
9970    impl<T: RulesService> Clone for _Inner<T> {
9971        fn clone(&self) -> Self {
9972            Self(Arc::clone(&self.0))
9973        }
9974    }
9975    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
9976        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9977            write!(f, "{:?}", self.0)
9978        }
9979    }
9980    impl<T: RulesService> tonic::server::NamedService for RulesServiceServer<T> {
9981        const NAME: &'static str = "aruna.api.storage.services.v2.RulesService";
9982    }
9983}
9984#[derive(serde::Deserialize, serde::Serialize)]
9985#[allow(clippy::derive_partial_eq_without_eq)]
9986#[derive(Clone, PartialEq, ::prost::Message)]
9987pub struct CreateWorkspaceTemplateRequest {
9988    /// The user id of the template owner (will be automatically added as "admin" to each associated workspace)
9989    #[prost(string, tag = "1")]
9990    pub owner_id: ::prost::alloc::string::String,
9991    /// Short prefix for each workspace_project (will be prepended by a random id) example: test-i12ashj9g2
9992    #[prost(string, tag = "2")]
9993    pub prefix: ::prost::alloc::string::String,
9994    /// The name of the workspace template
9995    #[prost(string, tag = "3")]
9996    pub name: ::prost::alloc::string::String,
9997    /// Hooks that are added to created workspaces
9998    #[prost(string, repeated, tag = "5")]
9999    pub hook_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
10000    /// Description of the workspace
10001    #[prost(string, tag = "6")]
10002    pub description: ::prost::alloc::string::String,
10003    /// Endpoint ids that are used for this template
10004    #[prost(string, repeated, tag = "7")]
10005    pub endpoint_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
10006    /// Rule ids that are enforced on workspace-level
10007    #[prost(string, repeated, tag = "8")]
10008    pub rules: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
10009}
10010#[derive(serde::Deserialize, serde::Serialize)]
10011#[allow(clippy::derive_partial_eq_without_eq)]
10012#[derive(Clone, PartialEq, ::prost::Message)]
10013pub struct CreateWorkspaceTemplateResponse {
10014    #[prost(string, tag = "1")]
10015    pub template_id: ::prost::alloc::string::String,
10016}
10017#[derive(serde::Deserialize, serde::Serialize)]
10018#[allow(clippy::derive_partial_eq_without_eq)]
10019#[derive(Clone, PartialEq, ::prost::Message)]
10020pub struct GetWorkspaceTemplateRequest {
10021    #[prost(string, tag = "1")]
10022    pub template_id: ::prost::alloc::string::String,
10023}
10024#[derive(serde::Deserialize, serde::Serialize)]
10025#[allow(clippy::derive_partial_eq_without_eq)]
10026#[derive(Clone, PartialEq, ::prost::Message)]
10027pub struct GetWorkspaceTemplateResponse {
10028    #[prost(message, optional, tag = "1")]
10029    pub workspace: ::core::option::Option<WorkspaceInfo>,
10030}
10031#[derive(serde::Deserialize, serde::Serialize)]
10032#[allow(clippy::derive_partial_eq_without_eq)]
10033#[derive(Clone, PartialEq, ::prost::Message)]
10034pub struct DeleteWorkspaceTemplateRequest {
10035    #[prost(string, tag = "1")]
10036    pub template_id: ::prost::alloc::string::String,
10037}
10038#[derive(serde::Deserialize, serde::Serialize)]
10039#[allow(clippy::derive_partial_eq_without_eq)]
10040#[derive(Clone, PartialEq, ::prost::Message)]
10041pub struct DeleteWorkspaceTemplateResponse {}
10042#[derive(serde::Deserialize, serde::Serialize)]
10043#[allow(clippy::derive_partial_eq_without_eq)]
10044#[derive(Clone, PartialEq, ::prost::Message)]
10045pub struct ListOwnedWorkspaceTemplatesRequest {}
10046#[derive(serde::Deserialize, serde::Serialize)]
10047#[allow(clippy::derive_partial_eq_without_eq)]
10048#[derive(Clone, PartialEq, ::prost::Message)]
10049pub struct ListOwnedWorkspaceTemplatesResponse {
10050    #[prost(message, repeated, tag = "1")]
10051    pub workspaces: ::prost::alloc::vec::Vec<WorkspaceInfo>,
10052}
10053#[derive(serde::Deserialize, serde::Serialize)]
10054#[allow(clippy::derive_partial_eq_without_eq)]
10055#[derive(Clone, PartialEq, ::prost::Message)]
10056pub struct WorkspaceInfo {
10057    #[prost(string, tag = "1")]
10058    pub workspace_id: ::prost::alloc::string::String,
10059    #[prost(string, tag = "2")]
10060    pub name: ::prost::alloc::string::String,
10061    #[prost(string, tag = "3")]
10062    pub description: ::prost::alloc::string::String,
10063    #[prost(string, tag = "4")]
10064    pub owner: ::prost::alloc::string::String,
10065    #[prost(string, tag = "5")]
10066    pub prefix: ::prost::alloc::string::String,
10067    #[prost(string, tag = "6")]
10068    pub hook_ids: ::prost::alloc::string::String,
10069    #[prost(string, tag = "7")]
10070    pub endpoint_ids: ::prost::alloc::string::String,
10071}
10072#[derive(serde::Deserialize, serde::Serialize)]
10073#[allow(clippy::derive_partial_eq_without_eq)]
10074#[derive(Clone, PartialEq, ::prost::Message)]
10075pub struct CreateWorkspaceRequest {
10076    /// Workspace template id
10077    #[prost(string, tag = "1")]
10078    pub workspace_template: ::prost::alloc::string::String,
10079    /// Description of this workspace instance
10080    #[prost(string, tag = "2")]
10081    pub description: ::prost::alloc::string::String,
10082}
10083#[derive(serde::Deserialize, serde::Serialize)]
10084#[allow(clippy::derive_partial_eq_without_eq)]
10085#[derive(Clone, PartialEq, ::prost::Message)]
10086pub struct CreateWorkspaceResponse {
10087    #[prost(string, tag = "1")]
10088    pub workspace_id: ::prost::alloc::string::String,
10089    #[prost(string, tag = "2")]
10090    pub token: ::prost::alloc::string::String,
10091    #[prost(string, tag = "3")]
10092    pub access_key: ::prost::alloc::string::String,
10093    #[prost(string, tag = "4")]
10094    pub secret_key: ::prost::alloc::string::String,
10095}
10096#[derive(serde::Deserialize, serde::Serialize)]
10097#[allow(clippy::derive_partial_eq_without_eq)]
10098#[derive(Clone, PartialEq, ::prost::Message)]
10099pub struct DeleteWorkspaceRequest {
10100    #[prost(string, tag = "1")]
10101    pub workspace_id: ::prost::alloc::string::String,
10102}
10103#[derive(serde::Deserialize, serde::Serialize)]
10104#[allow(clippy::derive_partial_eq_without_eq)]
10105#[derive(Clone, PartialEq, ::prost::Message)]
10106pub struct DeleteWorkspaceResponse {}
10107#[derive(serde::Deserialize, serde::Serialize)]
10108#[allow(clippy::derive_partial_eq_without_eq)]
10109#[derive(Clone, PartialEq, ::prost::Message)]
10110pub struct ClaimWorkspaceRequest {
10111    /// This can only be called by an registered user,
10112    /// that is in possesion of the workspace_id and workspace token
10113    /// It will remove the service account and claim all references "as" the user.
10114    #[prost(string, tag = "1")]
10115    pub workspace_id: ::prost::alloc::string::String,
10116    #[prost(string, tag = "2")]
10117    pub token: ::prost::alloc::string::String,
10118}
10119#[derive(serde::Deserialize, serde::Serialize)]
10120#[allow(clippy::derive_partial_eq_without_eq)]
10121#[derive(Clone, PartialEq, ::prost::Message)]
10122pub struct ClaimWorkspaceResponse {}
10123/// Generated client implementations.
10124pub mod workspace_service_client {
10125    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
10126    use tonic::codegen::*;
10127    use tonic::codegen::http::Uri;
10128    /// WorkspaceService
10129    ///
10130    /// Status: BETA
10131    ///
10132    /// Service to manage anonymous "scratch" projects / workspaces
10133    #[derive(Debug, Clone)]
10134    pub struct WorkspaceServiceClient<T> {
10135        inner: tonic::client::Grpc<T>,
10136    }
10137    impl WorkspaceServiceClient<tonic::transport::Channel> {
10138        /// Attempt to create a new client by connecting to a given endpoint.
10139        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
10140        where
10141            D: TryInto<tonic::transport::Endpoint>,
10142            D::Error: Into<StdError>,
10143        {
10144            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
10145            Ok(Self::new(conn))
10146        }
10147    }
10148    impl<T> WorkspaceServiceClient<T>
10149    where
10150        T: tonic::client::GrpcService<tonic::body::BoxBody>,
10151        T::Error: Into<StdError>,
10152        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
10153        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
10154    {
10155        pub fn new(inner: T) -> Self {
10156            let inner = tonic::client::Grpc::new(inner);
10157            Self { inner }
10158        }
10159        pub fn with_origin(inner: T, origin: Uri) -> Self {
10160            let inner = tonic::client::Grpc::with_origin(inner, origin);
10161            Self { inner }
10162        }
10163        pub fn with_interceptor<F>(
10164            inner: T,
10165            interceptor: F,
10166        ) -> WorkspaceServiceClient<InterceptedService<T, F>>
10167        where
10168            F: tonic::service::Interceptor,
10169            T::ResponseBody: Default,
10170            T: tonic::codegen::Service<
10171                http::Request<tonic::body::BoxBody>,
10172                Response = http::Response<
10173                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
10174                >,
10175            >,
10176            <T as tonic::codegen::Service<
10177                http::Request<tonic::body::BoxBody>,
10178            >>::Error: Into<StdError> + Send + Sync,
10179        {
10180            WorkspaceServiceClient::new(InterceptedService::new(inner, interceptor))
10181        }
10182        /// Compress requests with the given encoding.
10183        ///
10184        /// This requires the server to support it otherwise it might respond with an
10185        /// error.
10186        #[must_use]
10187        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
10188            self.inner = self.inner.send_compressed(encoding);
10189            self
10190        }
10191        /// Enable decompressing responses.
10192        #[must_use]
10193        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
10194            self.inner = self.inner.accept_compressed(encoding);
10195            self
10196        }
10197        /// Limits the maximum size of a decoded message.
10198        ///
10199        /// Default: `4MB`
10200        #[must_use]
10201        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
10202            self.inner = self.inner.max_decoding_message_size(limit);
10203            self
10204        }
10205        /// Limits the maximum size of an encoded message.
10206        ///
10207        /// Default: `usize::MAX`
10208        #[must_use]
10209        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
10210            self.inner = self.inner.max_encoding_message_size(limit);
10211            self
10212        }
10213        /// CreatesNewWorkspaceTemplate
10214        ///
10215        /// Status: ALPHA
10216        ///
10217        /// This will create a new template for workspaces (admin only)
10218        pub async fn create_workspace_template(
10219            &mut self,
10220            request: impl tonic::IntoRequest<super::CreateWorkspaceTemplateRequest>,
10221        ) -> std::result::Result<
10222            tonic::Response<super::CreateWorkspaceTemplateResponse>,
10223            tonic::Status,
10224        > {
10225            self.inner
10226                .ready()
10227                .await
10228                .map_err(|e| {
10229                    tonic::Status::new(
10230                        tonic::Code::Unknown,
10231                        format!("Service was not ready: {}", e.into()),
10232                    )
10233                })?;
10234            let codec = tonic::codec::ProstCodec::default();
10235            let path = http::uri::PathAndQuery::from_static(
10236                "/aruna.api.storage.services.v2.WorkspaceService/CreateWorkspaceTemplate",
10237            );
10238            let mut req = request.into_request();
10239            req.extensions_mut()
10240                .insert(
10241                    GrpcMethod::new(
10242                        "aruna.api.storage.services.v2.WorkspaceService",
10243                        "CreateWorkspaceTemplate",
10244                    ),
10245                );
10246            self.inner.unary(req, path, codec).await
10247        }
10248        /// GetWorkspaceTemplatesById
10249        ///
10250        ///  Status: ALPHA
10251        ///
10252        /// Gets workspace template by id
10253        pub async fn get_workspace_template(
10254            &mut self,
10255            request: impl tonic::IntoRequest<super::GetWorkspaceTemplateRequest>,
10256        ) -> std::result::Result<
10257            tonic::Response<super::GetWorkspaceTemplateResponse>,
10258            tonic::Status,
10259        > {
10260            self.inner
10261                .ready()
10262                .await
10263                .map_err(|e| {
10264                    tonic::Status::new(
10265                        tonic::Code::Unknown,
10266                        format!("Service was not ready: {}", e.into()),
10267                    )
10268                })?;
10269            let codec = tonic::codec::ProstCodec::default();
10270            let path = http::uri::PathAndQuery::from_static(
10271                "/aruna.api.storage.services.v2.WorkspaceService/GetWorkspaceTemplate",
10272            );
10273            let mut req = request.into_request();
10274            req.extensions_mut()
10275                .insert(
10276                    GrpcMethod::new(
10277                        "aruna.api.storage.services.v2.WorkspaceService",
10278                        "GetWorkspaceTemplate",
10279                    ),
10280                );
10281            self.inner.unary(req, path, codec).await
10282        }
10283        /// ListOwnedWorkspaceTemplates
10284        ///
10285        ///  Status: ALPHA
10286        ///
10287        /// Lists owned workspace templates
10288        pub async fn list_owned_workspace_templates(
10289            &mut self,
10290            request: impl tonic::IntoRequest<super::ListOwnedWorkspaceTemplatesRequest>,
10291        ) -> std::result::Result<
10292            tonic::Response<super::ListOwnedWorkspaceTemplatesResponse>,
10293            tonic::Status,
10294        > {
10295            self.inner
10296                .ready()
10297                .await
10298                .map_err(|e| {
10299                    tonic::Status::new(
10300                        tonic::Code::Unknown,
10301                        format!("Service was not ready: {}", e.into()),
10302                    )
10303                })?;
10304            let codec = tonic::codec::ProstCodec::default();
10305            let path = http::uri::PathAndQuery::from_static(
10306                "/aruna.api.storage.services.v2.WorkspaceService/ListOwnedWorkspaceTemplates",
10307            );
10308            let mut req = request.into_request();
10309            req.extensions_mut()
10310                .insert(
10311                    GrpcMethod::new(
10312                        "aruna.api.storage.services.v2.WorkspaceService",
10313                        "ListOwnedWorkspaceTemplates",
10314                    ),
10315                );
10316            self.inner.unary(req, path, codec).await
10317        }
10318        /// DeleteWorkspaceTemplates
10319        ///
10320        ///  Status: ALPHA
10321        ///
10322        /// Deletes specified workspace templates
10323        pub async fn delete_workspace_template(
10324            &mut self,
10325            request: impl tonic::IntoRequest<super::DeleteWorkspaceTemplateRequest>,
10326        ) -> std::result::Result<
10327            tonic::Response<super::DeleteWorkspaceTemplateResponse>,
10328            tonic::Status,
10329        > {
10330            self.inner
10331                .ready()
10332                .await
10333                .map_err(|e| {
10334                    tonic::Status::new(
10335                        tonic::Code::Unknown,
10336                        format!("Service was not ready: {}", e.into()),
10337                    )
10338                })?;
10339            let codec = tonic::codec::ProstCodec::default();
10340            let path = http::uri::PathAndQuery::from_static(
10341                "/aruna.api.storage.services.v2.WorkspaceService/DeleteWorkspaceTemplate",
10342            );
10343            let mut req = request.into_request();
10344            req.extensions_mut()
10345                .insert(
10346                    GrpcMethod::new(
10347                        "aruna.api.storage.services.v2.WorkspaceService",
10348                        "DeleteWorkspaceTemplate",
10349                    ),
10350                );
10351            self.inner.unary(req, path, codec).await
10352        }
10353        /// CreateWorkspace
10354        ///
10355        /// Status: ALPHA
10356        ///
10357        /// Create a personal anonymous workspace
10358        pub async fn create_workspace(
10359            &mut self,
10360            request: impl tonic::IntoRequest<super::CreateWorkspaceRequest>,
10361        ) -> std::result::Result<
10362            tonic::Response<super::CreateWorkspaceResponse>,
10363            tonic::Status,
10364        > {
10365            self.inner
10366                .ready()
10367                .await
10368                .map_err(|e| {
10369                    tonic::Status::new(
10370                        tonic::Code::Unknown,
10371                        format!("Service was not ready: {}", e.into()),
10372                    )
10373                })?;
10374            let codec = tonic::codec::ProstCodec::default();
10375            let path = http::uri::PathAndQuery::from_static(
10376                "/aruna.api.storage.services.v2.WorkspaceService/CreateWorkspace",
10377            );
10378            let mut req = request.into_request();
10379            req.extensions_mut()
10380                .insert(
10381                    GrpcMethod::new(
10382                        "aruna.api.storage.services.v2.WorkspaceService",
10383                        "CreateWorkspace",
10384                    ),
10385                );
10386            self.inner.unary(req, path, codec).await
10387        }
10388        /// DeleteWorkspace
10389        ///
10390        /// Status: ALPHA
10391        ///
10392        /// Delete a workspace
10393        pub async fn delete_workspace(
10394            &mut self,
10395            request: impl tonic::IntoRequest<super::DeleteWorkspaceRequest>,
10396        ) -> std::result::Result<
10397            tonic::Response<super::DeleteWorkspaceResponse>,
10398            tonic::Status,
10399        > {
10400            self.inner
10401                .ready()
10402                .await
10403                .map_err(|e| {
10404                    tonic::Status::new(
10405                        tonic::Code::Unknown,
10406                        format!("Service was not ready: {}", e.into()),
10407                    )
10408                })?;
10409            let codec = tonic::codec::ProstCodec::default();
10410            let path = http::uri::PathAndQuery::from_static(
10411                "/aruna.api.storage.services.v2.WorkspaceService/DeleteWorkspace",
10412            );
10413            let mut req = request.into_request();
10414            req.extensions_mut()
10415                .insert(
10416                    GrpcMethod::new(
10417                        "aruna.api.storage.services.v2.WorkspaceService",
10418                        "DeleteWorkspace",
10419                    ),
10420                );
10421            self.inner.unary(req, path, codec).await
10422        }
10423        /// DeleteWorkspace
10424        ///
10425        /// Status: ALPHA
10426        ///
10427        /// Claims an anonymous workspace, and transfers the owner to a regular user account.
10428        pub async fn claim_workspace(
10429            &mut self,
10430            request: impl tonic::IntoRequest<super::ClaimWorkspaceRequest>,
10431        ) -> std::result::Result<
10432            tonic::Response<super::ClaimWorkspaceResponse>,
10433            tonic::Status,
10434        > {
10435            self.inner
10436                .ready()
10437                .await
10438                .map_err(|e| {
10439                    tonic::Status::new(
10440                        tonic::Code::Unknown,
10441                        format!("Service was not ready: {}", e.into()),
10442                    )
10443                })?;
10444            let codec = tonic::codec::ProstCodec::default();
10445            let path = http::uri::PathAndQuery::from_static(
10446                "/aruna.api.storage.services.v2.WorkspaceService/ClaimWorkspace",
10447            );
10448            let mut req = request.into_request();
10449            req.extensions_mut()
10450                .insert(
10451                    GrpcMethod::new(
10452                        "aruna.api.storage.services.v2.WorkspaceService",
10453                        "ClaimWorkspace",
10454                    ),
10455                );
10456            self.inner.unary(req, path, codec).await
10457        }
10458    }
10459}
10460/// Generated server implementations.
10461pub mod workspace_service_server {
10462    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
10463    use tonic::codegen::*;
10464    /// Generated trait containing gRPC methods that should be implemented for use with WorkspaceServiceServer.
10465    #[async_trait]
10466    pub trait WorkspaceService: Send + Sync + 'static {
10467        /// CreatesNewWorkspaceTemplate
10468        ///
10469        /// Status: ALPHA
10470        ///
10471        /// This will create a new template for workspaces (admin only)
10472        async fn create_workspace_template(
10473            &self,
10474            request: tonic::Request<super::CreateWorkspaceTemplateRequest>,
10475        ) -> std::result::Result<
10476            tonic::Response<super::CreateWorkspaceTemplateResponse>,
10477            tonic::Status,
10478        >;
10479        /// GetWorkspaceTemplatesById
10480        ///
10481        ///  Status: ALPHA
10482        ///
10483        /// Gets workspace template by id
10484        async fn get_workspace_template(
10485            &self,
10486            request: tonic::Request<super::GetWorkspaceTemplateRequest>,
10487        ) -> std::result::Result<
10488            tonic::Response<super::GetWorkspaceTemplateResponse>,
10489            tonic::Status,
10490        >;
10491        /// ListOwnedWorkspaceTemplates
10492        ///
10493        ///  Status: ALPHA
10494        ///
10495        /// Lists owned workspace templates
10496        async fn list_owned_workspace_templates(
10497            &self,
10498            request: tonic::Request<super::ListOwnedWorkspaceTemplatesRequest>,
10499        ) -> std::result::Result<
10500            tonic::Response<super::ListOwnedWorkspaceTemplatesResponse>,
10501            tonic::Status,
10502        >;
10503        /// DeleteWorkspaceTemplates
10504        ///
10505        ///  Status: ALPHA
10506        ///
10507        /// Deletes specified workspace templates
10508        async fn delete_workspace_template(
10509            &self,
10510            request: tonic::Request<super::DeleteWorkspaceTemplateRequest>,
10511        ) -> std::result::Result<
10512            tonic::Response<super::DeleteWorkspaceTemplateResponse>,
10513            tonic::Status,
10514        >;
10515        /// CreateWorkspace
10516        ///
10517        /// Status: ALPHA
10518        ///
10519        /// Create a personal anonymous workspace
10520        async fn create_workspace(
10521            &self,
10522            request: tonic::Request<super::CreateWorkspaceRequest>,
10523        ) -> std::result::Result<
10524            tonic::Response<super::CreateWorkspaceResponse>,
10525            tonic::Status,
10526        >;
10527        /// DeleteWorkspace
10528        ///
10529        /// Status: ALPHA
10530        ///
10531        /// Delete a workspace
10532        async fn delete_workspace(
10533            &self,
10534            request: tonic::Request<super::DeleteWorkspaceRequest>,
10535        ) -> std::result::Result<
10536            tonic::Response<super::DeleteWorkspaceResponse>,
10537            tonic::Status,
10538        >;
10539        /// DeleteWorkspace
10540        ///
10541        /// Status: ALPHA
10542        ///
10543        /// Claims an anonymous workspace, and transfers the owner to a regular user account.
10544        async fn claim_workspace(
10545            &self,
10546            request: tonic::Request<super::ClaimWorkspaceRequest>,
10547        ) -> std::result::Result<
10548            tonic::Response<super::ClaimWorkspaceResponse>,
10549            tonic::Status,
10550        >;
10551    }
10552    /// WorkspaceService
10553    ///
10554    /// Status: BETA
10555    ///
10556    /// Service to manage anonymous "scratch" projects / workspaces
10557    #[derive(Debug)]
10558    pub struct WorkspaceServiceServer<T: WorkspaceService> {
10559        inner: _Inner<T>,
10560        accept_compression_encodings: EnabledCompressionEncodings,
10561        send_compression_encodings: EnabledCompressionEncodings,
10562        max_decoding_message_size: Option<usize>,
10563        max_encoding_message_size: Option<usize>,
10564    }
10565    struct _Inner<T>(Arc<T>);
10566    impl<T: WorkspaceService> WorkspaceServiceServer<T> {
10567        pub fn new(inner: T) -> Self {
10568            Self::from_arc(Arc::new(inner))
10569        }
10570        pub fn from_arc(inner: Arc<T>) -> Self {
10571            let inner = _Inner(inner);
10572            Self {
10573                inner,
10574                accept_compression_encodings: Default::default(),
10575                send_compression_encodings: Default::default(),
10576                max_decoding_message_size: None,
10577                max_encoding_message_size: None,
10578            }
10579        }
10580        pub fn with_interceptor<F>(
10581            inner: T,
10582            interceptor: F,
10583        ) -> InterceptedService<Self, F>
10584        where
10585            F: tonic::service::Interceptor,
10586        {
10587            InterceptedService::new(Self::new(inner), interceptor)
10588        }
10589        /// Enable decompressing requests with the given encoding.
10590        #[must_use]
10591        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
10592            self.accept_compression_encodings.enable(encoding);
10593            self
10594        }
10595        /// Compress responses with the given encoding, if the client supports it.
10596        #[must_use]
10597        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
10598            self.send_compression_encodings.enable(encoding);
10599            self
10600        }
10601        /// Limits the maximum size of a decoded message.
10602        ///
10603        /// Default: `4MB`
10604        #[must_use]
10605        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
10606            self.max_decoding_message_size = Some(limit);
10607            self
10608        }
10609        /// Limits the maximum size of an encoded message.
10610        ///
10611        /// Default: `usize::MAX`
10612        #[must_use]
10613        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
10614            self.max_encoding_message_size = Some(limit);
10615            self
10616        }
10617    }
10618    impl<T, B> tonic::codegen::Service<http::Request<B>> for WorkspaceServiceServer<T>
10619    where
10620        T: WorkspaceService,
10621        B: Body + Send + 'static,
10622        B::Error: Into<StdError> + Send + 'static,
10623    {
10624        type Response = http::Response<tonic::body::BoxBody>;
10625        type Error = std::convert::Infallible;
10626        type Future = BoxFuture<Self::Response, Self::Error>;
10627        fn poll_ready(
10628            &mut self,
10629            _cx: &mut Context<'_>,
10630        ) -> Poll<std::result::Result<(), Self::Error>> {
10631            Poll::Ready(Ok(()))
10632        }
10633        fn call(&mut self, req: http::Request<B>) -> Self::Future {
10634            let inner = self.inner.clone();
10635            match req.uri().path() {
10636                "/aruna.api.storage.services.v2.WorkspaceService/CreateWorkspaceTemplate" => {
10637                    #[allow(non_camel_case_types)]
10638                    struct CreateWorkspaceTemplateSvc<T: WorkspaceService>(pub Arc<T>);
10639                    impl<
10640                        T: WorkspaceService,
10641                    > tonic::server::UnaryService<super::CreateWorkspaceTemplateRequest>
10642                    for CreateWorkspaceTemplateSvc<T> {
10643                        type Response = super::CreateWorkspaceTemplateResponse;
10644                        type Future = BoxFuture<
10645                            tonic::Response<Self::Response>,
10646                            tonic::Status,
10647                        >;
10648                        fn call(
10649                            &mut self,
10650                            request: tonic::Request<
10651                                super::CreateWorkspaceTemplateRequest,
10652                            >,
10653                        ) -> Self::Future {
10654                            let inner = Arc::clone(&self.0);
10655                            let fut = async move {
10656                                <T as WorkspaceService>::create_workspace_template(
10657                                        &inner,
10658                                        request,
10659                                    )
10660                                    .await
10661                            };
10662                            Box::pin(fut)
10663                        }
10664                    }
10665                    let accept_compression_encodings = self.accept_compression_encodings;
10666                    let send_compression_encodings = self.send_compression_encodings;
10667                    let max_decoding_message_size = self.max_decoding_message_size;
10668                    let max_encoding_message_size = self.max_encoding_message_size;
10669                    let inner = self.inner.clone();
10670                    let fut = async move {
10671                        let inner = inner.0;
10672                        let method = CreateWorkspaceTemplateSvc(inner);
10673                        let codec = tonic::codec::ProstCodec::default();
10674                        let mut grpc = tonic::server::Grpc::new(codec)
10675                            .apply_compression_config(
10676                                accept_compression_encodings,
10677                                send_compression_encodings,
10678                            )
10679                            .apply_max_message_size_config(
10680                                max_decoding_message_size,
10681                                max_encoding_message_size,
10682                            );
10683                        let res = grpc.unary(method, req).await;
10684                        Ok(res)
10685                    };
10686                    Box::pin(fut)
10687                }
10688                "/aruna.api.storage.services.v2.WorkspaceService/GetWorkspaceTemplate" => {
10689                    #[allow(non_camel_case_types)]
10690                    struct GetWorkspaceTemplateSvc<T: WorkspaceService>(pub Arc<T>);
10691                    impl<
10692                        T: WorkspaceService,
10693                    > tonic::server::UnaryService<super::GetWorkspaceTemplateRequest>
10694                    for GetWorkspaceTemplateSvc<T> {
10695                        type Response = super::GetWorkspaceTemplateResponse;
10696                        type Future = BoxFuture<
10697                            tonic::Response<Self::Response>,
10698                            tonic::Status,
10699                        >;
10700                        fn call(
10701                            &mut self,
10702                            request: tonic::Request<super::GetWorkspaceTemplateRequest>,
10703                        ) -> Self::Future {
10704                            let inner = Arc::clone(&self.0);
10705                            let fut = async move {
10706                                <T as WorkspaceService>::get_workspace_template(
10707                                        &inner,
10708                                        request,
10709                                    )
10710                                    .await
10711                            };
10712                            Box::pin(fut)
10713                        }
10714                    }
10715                    let accept_compression_encodings = self.accept_compression_encodings;
10716                    let send_compression_encodings = self.send_compression_encodings;
10717                    let max_decoding_message_size = self.max_decoding_message_size;
10718                    let max_encoding_message_size = self.max_encoding_message_size;
10719                    let inner = self.inner.clone();
10720                    let fut = async move {
10721                        let inner = inner.0;
10722                        let method = GetWorkspaceTemplateSvc(inner);
10723                        let codec = tonic::codec::ProstCodec::default();
10724                        let mut grpc = tonic::server::Grpc::new(codec)
10725                            .apply_compression_config(
10726                                accept_compression_encodings,
10727                                send_compression_encodings,
10728                            )
10729                            .apply_max_message_size_config(
10730                                max_decoding_message_size,
10731                                max_encoding_message_size,
10732                            );
10733                        let res = grpc.unary(method, req).await;
10734                        Ok(res)
10735                    };
10736                    Box::pin(fut)
10737                }
10738                "/aruna.api.storage.services.v2.WorkspaceService/ListOwnedWorkspaceTemplates" => {
10739                    #[allow(non_camel_case_types)]
10740                    struct ListOwnedWorkspaceTemplatesSvc<T: WorkspaceService>(
10741                        pub Arc<T>,
10742                    );
10743                    impl<
10744                        T: WorkspaceService,
10745                    > tonic::server::UnaryService<
10746                        super::ListOwnedWorkspaceTemplatesRequest,
10747                    > for ListOwnedWorkspaceTemplatesSvc<T> {
10748                        type Response = super::ListOwnedWorkspaceTemplatesResponse;
10749                        type Future = BoxFuture<
10750                            tonic::Response<Self::Response>,
10751                            tonic::Status,
10752                        >;
10753                        fn call(
10754                            &mut self,
10755                            request: tonic::Request<
10756                                super::ListOwnedWorkspaceTemplatesRequest,
10757                            >,
10758                        ) -> Self::Future {
10759                            let inner = Arc::clone(&self.0);
10760                            let fut = async move {
10761                                <T as WorkspaceService>::list_owned_workspace_templates(
10762                                        &inner,
10763                                        request,
10764                                    )
10765                                    .await
10766                            };
10767                            Box::pin(fut)
10768                        }
10769                    }
10770                    let accept_compression_encodings = self.accept_compression_encodings;
10771                    let send_compression_encodings = self.send_compression_encodings;
10772                    let max_decoding_message_size = self.max_decoding_message_size;
10773                    let max_encoding_message_size = self.max_encoding_message_size;
10774                    let inner = self.inner.clone();
10775                    let fut = async move {
10776                        let inner = inner.0;
10777                        let method = ListOwnedWorkspaceTemplatesSvc(inner);
10778                        let codec = tonic::codec::ProstCodec::default();
10779                        let mut grpc = tonic::server::Grpc::new(codec)
10780                            .apply_compression_config(
10781                                accept_compression_encodings,
10782                                send_compression_encodings,
10783                            )
10784                            .apply_max_message_size_config(
10785                                max_decoding_message_size,
10786                                max_encoding_message_size,
10787                            );
10788                        let res = grpc.unary(method, req).await;
10789                        Ok(res)
10790                    };
10791                    Box::pin(fut)
10792                }
10793                "/aruna.api.storage.services.v2.WorkspaceService/DeleteWorkspaceTemplate" => {
10794                    #[allow(non_camel_case_types)]
10795                    struct DeleteWorkspaceTemplateSvc<T: WorkspaceService>(pub Arc<T>);
10796                    impl<
10797                        T: WorkspaceService,
10798                    > tonic::server::UnaryService<super::DeleteWorkspaceTemplateRequest>
10799                    for DeleteWorkspaceTemplateSvc<T> {
10800                        type Response = super::DeleteWorkspaceTemplateResponse;
10801                        type Future = BoxFuture<
10802                            tonic::Response<Self::Response>,
10803                            tonic::Status,
10804                        >;
10805                        fn call(
10806                            &mut self,
10807                            request: tonic::Request<
10808                                super::DeleteWorkspaceTemplateRequest,
10809                            >,
10810                        ) -> Self::Future {
10811                            let inner = Arc::clone(&self.0);
10812                            let fut = async move {
10813                                <T as WorkspaceService>::delete_workspace_template(
10814                                        &inner,
10815                                        request,
10816                                    )
10817                                    .await
10818                            };
10819                            Box::pin(fut)
10820                        }
10821                    }
10822                    let accept_compression_encodings = self.accept_compression_encodings;
10823                    let send_compression_encodings = self.send_compression_encodings;
10824                    let max_decoding_message_size = self.max_decoding_message_size;
10825                    let max_encoding_message_size = self.max_encoding_message_size;
10826                    let inner = self.inner.clone();
10827                    let fut = async move {
10828                        let inner = inner.0;
10829                        let method = DeleteWorkspaceTemplateSvc(inner);
10830                        let codec = tonic::codec::ProstCodec::default();
10831                        let mut grpc = tonic::server::Grpc::new(codec)
10832                            .apply_compression_config(
10833                                accept_compression_encodings,
10834                                send_compression_encodings,
10835                            )
10836                            .apply_max_message_size_config(
10837                                max_decoding_message_size,
10838                                max_encoding_message_size,
10839                            );
10840                        let res = grpc.unary(method, req).await;
10841                        Ok(res)
10842                    };
10843                    Box::pin(fut)
10844                }
10845                "/aruna.api.storage.services.v2.WorkspaceService/CreateWorkspace" => {
10846                    #[allow(non_camel_case_types)]
10847                    struct CreateWorkspaceSvc<T: WorkspaceService>(pub Arc<T>);
10848                    impl<
10849                        T: WorkspaceService,
10850                    > tonic::server::UnaryService<super::CreateWorkspaceRequest>
10851                    for CreateWorkspaceSvc<T> {
10852                        type Response = super::CreateWorkspaceResponse;
10853                        type Future = BoxFuture<
10854                            tonic::Response<Self::Response>,
10855                            tonic::Status,
10856                        >;
10857                        fn call(
10858                            &mut self,
10859                            request: tonic::Request<super::CreateWorkspaceRequest>,
10860                        ) -> Self::Future {
10861                            let inner = Arc::clone(&self.0);
10862                            let fut = async move {
10863                                <T as WorkspaceService>::create_workspace(&inner, request)
10864                                    .await
10865                            };
10866                            Box::pin(fut)
10867                        }
10868                    }
10869                    let accept_compression_encodings = self.accept_compression_encodings;
10870                    let send_compression_encodings = self.send_compression_encodings;
10871                    let max_decoding_message_size = self.max_decoding_message_size;
10872                    let max_encoding_message_size = self.max_encoding_message_size;
10873                    let inner = self.inner.clone();
10874                    let fut = async move {
10875                        let inner = inner.0;
10876                        let method = CreateWorkspaceSvc(inner);
10877                        let codec = tonic::codec::ProstCodec::default();
10878                        let mut grpc = tonic::server::Grpc::new(codec)
10879                            .apply_compression_config(
10880                                accept_compression_encodings,
10881                                send_compression_encodings,
10882                            )
10883                            .apply_max_message_size_config(
10884                                max_decoding_message_size,
10885                                max_encoding_message_size,
10886                            );
10887                        let res = grpc.unary(method, req).await;
10888                        Ok(res)
10889                    };
10890                    Box::pin(fut)
10891                }
10892                "/aruna.api.storage.services.v2.WorkspaceService/DeleteWorkspace" => {
10893                    #[allow(non_camel_case_types)]
10894                    struct DeleteWorkspaceSvc<T: WorkspaceService>(pub Arc<T>);
10895                    impl<
10896                        T: WorkspaceService,
10897                    > tonic::server::UnaryService<super::DeleteWorkspaceRequest>
10898                    for DeleteWorkspaceSvc<T> {
10899                        type Response = super::DeleteWorkspaceResponse;
10900                        type Future = BoxFuture<
10901                            tonic::Response<Self::Response>,
10902                            tonic::Status,
10903                        >;
10904                        fn call(
10905                            &mut self,
10906                            request: tonic::Request<super::DeleteWorkspaceRequest>,
10907                        ) -> Self::Future {
10908                            let inner = Arc::clone(&self.0);
10909                            let fut = async move {
10910                                <T as WorkspaceService>::delete_workspace(&inner, request)
10911                                    .await
10912                            };
10913                            Box::pin(fut)
10914                        }
10915                    }
10916                    let accept_compression_encodings = self.accept_compression_encodings;
10917                    let send_compression_encodings = self.send_compression_encodings;
10918                    let max_decoding_message_size = self.max_decoding_message_size;
10919                    let max_encoding_message_size = self.max_encoding_message_size;
10920                    let inner = self.inner.clone();
10921                    let fut = async move {
10922                        let inner = inner.0;
10923                        let method = DeleteWorkspaceSvc(inner);
10924                        let codec = tonic::codec::ProstCodec::default();
10925                        let mut grpc = tonic::server::Grpc::new(codec)
10926                            .apply_compression_config(
10927                                accept_compression_encodings,
10928                                send_compression_encodings,
10929                            )
10930                            .apply_max_message_size_config(
10931                                max_decoding_message_size,
10932                                max_encoding_message_size,
10933                            );
10934                        let res = grpc.unary(method, req).await;
10935                        Ok(res)
10936                    };
10937                    Box::pin(fut)
10938                }
10939                "/aruna.api.storage.services.v2.WorkspaceService/ClaimWorkspace" => {
10940                    #[allow(non_camel_case_types)]
10941                    struct ClaimWorkspaceSvc<T: WorkspaceService>(pub Arc<T>);
10942                    impl<
10943                        T: WorkspaceService,
10944                    > tonic::server::UnaryService<super::ClaimWorkspaceRequest>
10945                    for ClaimWorkspaceSvc<T> {
10946                        type Response = super::ClaimWorkspaceResponse;
10947                        type Future = BoxFuture<
10948                            tonic::Response<Self::Response>,
10949                            tonic::Status,
10950                        >;
10951                        fn call(
10952                            &mut self,
10953                            request: tonic::Request<super::ClaimWorkspaceRequest>,
10954                        ) -> Self::Future {
10955                            let inner = Arc::clone(&self.0);
10956                            let fut = async move {
10957                                <T as WorkspaceService>::claim_workspace(&inner, request)
10958                                    .await
10959                            };
10960                            Box::pin(fut)
10961                        }
10962                    }
10963                    let accept_compression_encodings = self.accept_compression_encodings;
10964                    let send_compression_encodings = self.send_compression_encodings;
10965                    let max_decoding_message_size = self.max_decoding_message_size;
10966                    let max_encoding_message_size = self.max_encoding_message_size;
10967                    let inner = self.inner.clone();
10968                    let fut = async move {
10969                        let inner = inner.0;
10970                        let method = ClaimWorkspaceSvc(inner);
10971                        let codec = tonic::codec::ProstCodec::default();
10972                        let mut grpc = tonic::server::Grpc::new(codec)
10973                            .apply_compression_config(
10974                                accept_compression_encodings,
10975                                send_compression_encodings,
10976                            )
10977                            .apply_max_message_size_config(
10978                                max_decoding_message_size,
10979                                max_encoding_message_size,
10980                            );
10981                        let res = grpc.unary(method, req).await;
10982                        Ok(res)
10983                    };
10984                    Box::pin(fut)
10985                }
10986                _ => {
10987                    Box::pin(async move {
10988                        Ok(
10989                            http::Response::builder()
10990                                .status(200)
10991                                .header("grpc-status", "12")
10992                                .header("content-type", "application/grpc")
10993                                .body(empty_body())
10994                                .unwrap(),
10995                        )
10996                    })
10997                }
10998            }
10999        }
11000    }
11001    impl<T: WorkspaceService> Clone for WorkspaceServiceServer<T> {
11002        fn clone(&self) -> Self {
11003            let inner = self.inner.clone();
11004            Self {
11005                inner,
11006                accept_compression_encodings: self.accept_compression_encodings,
11007                send_compression_encodings: self.send_compression_encodings,
11008                max_decoding_message_size: self.max_decoding_message_size,
11009                max_encoding_message_size: self.max_encoding_message_size,
11010            }
11011        }
11012    }
11013    impl<T: WorkspaceService> Clone for _Inner<T> {
11014        fn clone(&self) -> Self {
11015            Self(Arc::clone(&self.0))
11016        }
11017    }
11018    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
11019        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11020            write!(f, "{:?}", self.0)
11021        }
11022    }
11023    impl<T: WorkspaceService> tonic::server::NamedService for WorkspaceServiceServer<T> {
11024        const NAME: &'static str = "aruna.api.storage.services.v2.WorkspaceService";
11025    }
11026}
11027#[derive(serde::Deserialize, serde::Serialize)]
11028#[allow(clippy::derive_partial_eq_without_eq)]
11029#[derive(Clone, PartialEq, ::prost::Message)]
11030pub struct ModifyRelationsRequest {
11031    #[prost(string, tag = "1")]
11032    pub resource_id: ::prost::alloc::string::String,
11033    #[prost(message, repeated, tag = "2")]
11034    pub add_relations: ::prost::alloc::vec::Vec<super::super::models::v2::Relation>,
11035    #[prost(message, repeated, tag = "3")]
11036    pub remove_relations: ::prost::alloc::vec::Vec<super::super::models::v2::Relation>,
11037}
11038#[derive(serde::Deserialize, serde::Serialize)]
11039#[allow(clippy::derive_partial_eq_without_eq)]
11040#[derive(Clone, PartialEq, ::prost::Message)]
11041pub struct ModifyRelationsResponse {}
11042#[derive(serde::Deserialize, serde::Serialize)]
11043#[allow(clippy::derive_partial_eq_without_eq)]
11044#[derive(Clone, PartialEq, ::prost::Message)]
11045pub struct GetHierarchyRequest {
11046    #[prost(string, tag = "1")]
11047    pub resource_id: ::prost::alloc::string::String,
11048}
11049#[derive(serde::Deserialize, serde::Serialize)]
11050#[allow(clippy::derive_partial_eq_without_eq)]
11051#[derive(Clone, PartialEq, ::prost::Message)]
11052pub struct DatasetRelations {
11053    #[prost(string, tag = "1")]
11054    pub origin: ::prost::alloc::string::String,
11055    #[prost(string, repeated, tag = "2")]
11056    pub object_children: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
11057}
11058#[derive(serde::Deserialize, serde::Serialize)]
11059#[allow(clippy::derive_partial_eq_without_eq)]
11060#[derive(Clone, PartialEq, ::prost::Message)]
11061pub struct CollectionRelations {
11062    #[prost(string, tag = "1")]
11063    pub origin: ::prost::alloc::string::String,
11064    #[prost(message, repeated, tag = "2")]
11065    pub dataset_children: ::prost::alloc::vec::Vec<DatasetRelations>,
11066    #[prost(string, repeated, tag = "3")]
11067    pub object_children: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
11068}
11069#[derive(serde::Deserialize, serde::Serialize)]
11070#[allow(clippy::derive_partial_eq_without_eq)]
11071#[derive(Clone, PartialEq, ::prost::Message)]
11072pub struct ProjectRelations {
11073    #[prost(string, tag = "1")]
11074    pub origin: ::prost::alloc::string::String,
11075    #[prost(message, repeated, tag = "2")]
11076    pub collection_children: ::prost::alloc::vec::Vec<CollectionRelations>,
11077    #[prost(message, repeated, tag = "3")]
11078    pub dataset_children: ::prost::alloc::vec::Vec<DatasetRelations>,
11079    #[prost(string, repeated, tag = "4")]
11080    pub object_children: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
11081}
11082#[derive(serde::Deserialize, serde::Serialize)]
11083#[allow(clippy::derive_partial_eq_without_eq)]
11084#[derive(Clone, PartialEq, ::prost::Message)]
11085pub struct GetHierarchyResponse {
11086    #[prost(oneof = "get_hierarchy_response::Graph", tags = "1, 2, 3")]
11087    pub graph: ::core::option::Option<get_hierarchy_response::Graph>,
11088}
11089/// Nested message and enum types in `GetHierarchyResponse`.
11090pub mod get_hierarchy_response {
11091    #[derive(serde::Deserialize, serde::Serialize)]
11092    #[allow(clippy::derive_partial_eq_without_eq)]
11093    #[derive(Clone, PartialEq, ::prost::Oneof)]
11094    pub enum Graph {
11095        #[prost(message, tag = "1")]
11096        Project(super::ProjectRelations),
11097        #[prost(message, tag = "2")]
11098        Collection(super::CollectionRelations),
11099        #[prost(message, tag = "3")]
11100        Dataset(super::DatasetRelations),
11101    }
11102}
11103/// Generated client implementations.
11104pub mod relations_service_client {
11105    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
11106    use tonic::codegen::*;
11107    use tonic::codegen::http::Uri;
11108    /// RelationsService
11109    ///
11110    /// Status: BETA
11111    ///
11112    /// Contains all methods to edit and change resource relations
11113    #[derive(Debug, Clone)]
11114    pub struct RelationsServiceClient<T> {
11115        inner: tonic::client::Grpc<T>,
11116    }
11117    impl RelationsServiceClient<tonic::transport::Channel> {
11118        /// Attempt to create a new client by connecting to a given endpoint.
11119        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
11120        where
11121            D: TryInto<tonic::transport::Endpoint>,
11122            D::Error: Into<StdError>,
11123        {
11124            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
11125            Ok(Self::new(conn))
11126        }
11127    }
11128    impl<T> RelationsServiceClient<T>
11129    where
11130        T: tonic::client::GrpcService<tonic::body::BoxBody>,
11131        T::Error: Into<StdError>,
11132        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
11133        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
11134    {
11135        pub fn new(inner: T) -> Self {
11136            let inner = tonic::client::Grpc::new(inner);
11137            Self { inner }
11138        }
11139        pub fn with_origin(inner: T, origin: Uri) -> Self {
11140            let inner = tonic::client::Grpc::with_origin(inner, origin);
11141            Self { inner }
11142        }
11143        pub fn with_interceptor<F>(
11144            inner: T,
11145            interceptor: F,
11146        ) -> RelationsServiceClient<InterceptedService<T, F>>
11147        where
11148            F: tonic::service::Interceptor,
11149            T::ResponseBody: Default,
11150            T: tonic::codegen::Service<
11151                http::Request<tonic::body::BoxBody>,
11152                Response = http::Response<
11153                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
11154                >,
11155            >,
11156            <T as tonic::codegen::Service<
11157                http::Request<tonic::body::BoxBody>,
11158            >>::Error: Into<StdError> + Send + Sync,
11159        {
11160            RelationsServiceClient::new(InterceptedService::new(inner, interceptor))
11161        }
11162        /// Compress requests with the given encoding.
11163        ///
11164        /// This requires the server to support it otherwise it might respond with an
11165        /// error.
11166        #[must_use]
11167        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
11168            self.inner = self.inner.send_compressed(encoding);
11169            self
11170        }
11171        /// Enable decompressing responses.
11172        #[must_use]
11173        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
11174            self.inner = self.inner.accept_compressed(encoding);
11175            self
11176        }
11177        /// Limits the maximum size of a decoded message.
11178        ///
11179        /// Default: `4MB`
11180        #[must_use]
11181        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
11182            self.inner = self.inner.max_decoding_message_size(limit);
11183            self
11184        }
11185        /// Limits the maximum size of an encoded message.
11186        ///
11187        /// Default: `usize::MAX`
11188        #[must_use]
11189        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
11190            self.inner = self.inner.max_encoding_message_size(limit);
11191            self
11192        }
11193        /// ModifyRelation
11194        ///
11195        /// Status: BETA
11196        ///
11197        /// Add/Remove/Modifies all relation types to / from a resource
11198        /// Works for internal and external relations
11199        pub async fn modify_relations(
11200            &mut self,
11201            request: impl tonic::IntoRequest<super::ModifyRelationsRequest>,
11202        ) -> std::result::Result<
11203            tonic::Response<super::ModifyRelationsResponse>,
11204            tonic::Status,
11205        > {
11206            self.inner
11207                .ready()
11208                .await
11209                .map_err(|e| {
11210                    tonic::Status::new(
11211                        tonic::Code::Unknown,
11212                        format!("Service was not ready: {}", e.into()),
11213                    )
11214                })?;
11215            let codec = tonic::codec::ProstCodec::default();
11216            let path = http::uri::PathAndQuery::from_static(
11217                "/aruna.api.storage.services.v2.RelationsService/ModifyRelations",
11218            );
11219            let mut req = request.into_request();
11220            req.extensions_mut()
11221                .insert(
11222                    GrpcMethod::new(
11223                        "aruna.api.storage.services.v2.RelationsService",
11224                        "ModifyRelations",
11225                    ),
11226                );
11227            self.inner.unary(req, path, codec).await
11228        }
11229        /// GetHierachy
11230        ///
11231        /// Status: BETA
11232        ///
11233        /// Gets all downstream hierarchy relations from a resource
11234        /// results in a tree structure
11235        pub async fn get_hierarchy(
11236            &mut self,
11237            request: impl tonic::IntoRequest<super::GetHierarchyRequest>,
11238        ) -> std::result::Result<
11239            tonic::Response<super::GetHierarchyResponse>,
11240            tonic::Status,
11241        > {
11242            self.inner
11243                .ready()
11244                .await
11245                .map_err(|e| {
11246                    tonic::Status::new(
11247                        tonic::Code::Unknown,
11248                        format!("Service was not ready: {}", e.into()),
11249                    )
11250                })?;
11251            let codec = tonic::codec::ProstCodec::default();
11252            let path = http::uri::PathAndQuery::from_static(
11253                "/aruna.api.storage.services.v2.RelationsService/GetHierarchy",
11254            );
11255            let mut req = request.into_request();
11256            req.extensions_mut()
11257                .insert(
11258                    GrpcMethod::new(
11259                        "aruna.api.storage.services.v2.RelationsService",
11260                        "GetHierarchy",
11261                    ),
11262                );
11263            self.inner.unary(req, path, codec).await
11264        }
11265    }
11266}
11267/// Generated server implementations.
11268pub mod relations_service_server {
11269    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
11270    use tonic::codegen::*;
11271    /// Generated trait containing gRPC methods that should be implemented for use with RelationsServiceServer.
11272    #[async_trait]
11273    pub trait RelationsService: Send + Sync + 'static {
11274        /// ModifyRelation
11275        ///
11276        /// Status: BETA
11277        ///
11278        /// Add/Remove/Modifies all relation types to / from a resource
11279        /// Works for internal and external relations
11280        async fn modify_relations(
11281            &self,
11282            request: tonic::Request<super::ModifyRelationsRequest>,
11283        ) -> std::result::Result<
11284            tonic::Response<super::ModifyRelationsResponse>,
11285            tonic::Status,
11286        >;
11287        /// GetHierachy
11288        ///
11289        /// Status: BETA
11290        ///
11291        /// Gets all downstream hierarchy relations from a resource
11292        /// results in a tree structure
11293        async fn get_hierarchy(
11294            &self,
11295            request: tonic::Request<super::GetHierarchyRequest>,
11296        ) -> std::result::Result<
11297            tonic::Response<super::GetHierarchyResponse>,
11298            tonic::Status,
11299        >;
11300    }
11301    /// RelationsService
11302    ///
11303    /// Status: BETA
11304    ///
11305    /// Contains all methods to edit and change resource relations
11306    #[derive(Debug)]
11307    pub struct RelationsServiceServer<T: RelationsService> {
11308        inner: _Inner<T>,
11309        accept_compression_encodings: EnabledCompressionEncodings,
11310        send_compression_encodings: EnabledCompressionEncodings,
11311        max_decoding_message_size: Option<usize>,
11312        max_encoding_message_size: Option<usize>,
11313    }
11314    struct _Inner<T>(Arc<T>);
11315    impl<T: RelationsService> RelationsServiceServer<T> {
11316        pub fn new(inner: T) -> Self {
11317            Self::from_arc(Arc::new(inner))
11318        }
11319        pub fn from_arc(inner: Arc<T>) -> Self {
11320            let inner = _Inner(inner);
11321            Self {
11322                inner,
11323                accept_compression_encodings: Default::default(),
11324                send_compression_encodings: Default::default(),
11325                max_decoding_message_size: None,
11326                max_encoding_message_size: None,
11327            }
11328        }
11329        pub fn with_interceptor<F>(
11330            inner: T,
11331            interceptor: F,
11332        ) -> InterceptedService<Self, F>
11333        where
11334            F: tonic::service::Interceptor,
11335        {
11336            InterceptedService::new(Self::new(inner), interceptor)
11337        }
11338        /// Enable decompressing requests with the given encoding.
11339        #[must_use]
11340        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
11341            self.accept_compression_encodings.enable(encoding);
11342            self
11343        }
11344        /// Compress responses with the given encoding, if the client supports it.
11345        #[must_use]
11346        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
11347            self.send_compression_encodings.enable(encoding);
11348            self
11349        }
11350        /// Limits the maximum size of a decoded message.
11351        ///
11352        /// Default: `4MB`
11353        #[must_use]
11354        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
11355            self.max_decoding_message_size = Some(limit);
11356            self
11357        }
11358        /// Limits the maximum size of an encoded message.
11359        ///
11360        /// Default: `usize::MAX`
11361        #[must_use]
11362        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
11363            self.max_encoding_message_size = Some(limit);
11364            self
11365        }
11366    }
11367    impl<T, B> tonic::codegen::Service<http::Request<B>> for RelationsServiceServer<T>
11368    where
11369        T: RelationsService,
11370        B: Body + Send + 'static,
11371        B::Error: Into<StdError> + Send + 'static,
11372    {
11373        type Response = http::Response<tonic::body::BoxBody>;
11374        type Error = std::convert::Infallible;
11375        type Future = BoxFuture<Self::Response, Self::Error>;
11376        fn poll_ready(
11377            &mut self,
11378            _cx: &mut Context<'_>,
11379        ) -> Poll<std::result::Result<(), Self::Error>> {
11380            Poll::Ready(Ok(()))
11381        }
11382        fn call(&mut self, req: http::Request<B>) -> Self::Future {
11383            let inner = self.inner.clone();
11384            match req.uri().path() {
11385                "/aruna.api.storage.services.v2.RelationsService/ModifyRelations" => {
11386                    #[allow(non_camel_case_types)]
11387                    struct ModifyRelationsSvc<T: RelationsService>(pub Arc<T>);
11388                    impl<
11389                        T: RelationsService,
11390                    > tonic::server::UnaryService<super::ModifyRelationsRequest>
11391                    for ModifyRelationsSvc<T> {
11392                        type Response = super::ModifyRelationsResponse;
11393                        type Future = BoxFuture<
11394                            tonic::Response<Self::Response>,
11395                            tonic::Status,
11396                        >;
11397                        fn call(
11398                            &mut self,
11399                            request: tonic::Request<super::ModifyRelationsRequest>,
11400                        ) -> Self::Future {
11401                            let inner = Arc::clone(&self.0);
11402                            let fut = async move {
11403                                <T as RelationsService>::modify_relations(&inner, request)
11404                                    .await
11405                            };
11406                            Box::pin(fut)
11407                        }
11408                    }
11409                    let accept_compression_encodings = self.accept_compression_encodings;
11410                    let send_compression_encodings = self.send_compression_encodings;
11411                    let max_decoding_message_size = self.max_decoding_message_size;
11412                    let max_encoding_message_size = self.max_encoding_message_size;
11413                    let inner = self.inner.clone();
11414                    let fut = async move {
11415                        let inner = inner.0;
11416                        let method = ModifyRelationsSvc(inner);
11417                        let codec = tonic::codec::ProstCodec::default();
11418                        let mut grpc = tonic::server::Grpc::new(codec)
11419                            .apply_compression_config(
11420                                accept_compression_encodings,
11421                                send_compression_encodings,
11422                            )
11423                            .apply_max_message_size_config(
11424                                max_decoding_message_size,
11425                                max_encoding_message_size,
11426                            );
11427                        let res = grpc.unary(method, req).await;
11428                        Ok(res)
11429                    };
11430                    Box::pin(fut)
11431                }
11432                "/aruna.api.storage.services.v2.RelationsService/GetHierarchy" => {
11433                    #[allow(non_camel_case_types)]
11434                    struct GetHierarchySvc<T: RelationsService>(pub Arc<T>);
11435                    impl<
11436                        T: RelationsService,
11437                    > tonic::server::UnaryService<super::GetHierarchyRequest>
11438                    for GetHierarchySvc<T> {
11439                        type Response = super::GetHierarchyResponse;
11440                        type Future = BoxFuture<
11441                            tonic::Response<Self::Response>,
11442                            tonic::Status,
11443                        >;
11444                        fn call(
11445                            &mut self,
11446                            request: tonic::Request<super::GetHierarchyRequest>,
11447                        ) -> Self::Future {
11448                            let inner = Arc::clone(&self.0);
11449                            let fut = async move {
11450                                <T as RelationsService>::get_hierarchy(&inner, request)
11451                                    .await
11452                            };
11453                            Box::pin(fut)
11454                        }
11455                    }
11456                    let accept_compression_encodings = self.accept_compression_encodings;
11457                    let send_compression_encodings = self.send_compression_encodings;
11458                    let max_decoding_message_size = self.max_decoding_message_size;
11459                    let max_encoding_message_size = self.max_encoding_message_size;
11460                    let inner = self.inner.clone();
11461                    let fut = async move {
11462                        let inner = inner.0;
11463                        let method = GetHierarchySvc(inner);
11464                        let codec = tonic::codec::ProstCodec::default();
11465                        let mut grpc = tonic::server::Grpc::new(codec)
11466                            .apply_compression_config(
11467                                accept_compression_encodings,
11468                                send_compression_encodings,
11469                            )
11470                            .apply_max_message_size_config(
11471                                max_decoding_message_size,
11472                                max_encoding_message_size,
11473                            );
11474                        let res = grpc.unary(method, req).await;
11475                        Ok(res)
11476                    };
11477                    Box::pin(fut)
11478                }
11479                _ => {
11480                    Box::pin(async move {
11481                        Ok(
11482                            http::Response::builder()
11483                                .status(200)
11484                                .header("grpc-status", "12")
11485                                .header("content-type", "application/grpc")
11486                                .body(empty_body())
11487                                .unwrap(),
11488                        )
11489                    })
11490                }
11491            }
11492        }
11493    }
11494    impl<T: RelationsService> Clone for RelationsServiceServer<T> {
11495        fn clone(&self) -> Self {
11496            let inner = self.inner.clone();
11497            Self {
11498                inner,
11499                accept_compression_encodings: self.accept_compression_encodings,
11500                send_compression_encodings: self.send_compression_encodings,
11501                max_decoding_message_size: self.max_decoding_message_size,
11502                max_encoding_message_size: self.max_encoding_message_size,
11503            }
11504        }
11505    }
11506    impl<T: RelationsService> Clone for _Inner<T> {
11507        fn clone(&self) -> Self {
11508            Self(Arc::clone(&self.0))
11509        }
11510    }
11511    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
11512        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11513            write!(f, "{:?}", self.0)
11514        }
11515    }
11516    impl<T: RelationsService> tonic::server::NamedService for RelationsServiceServer<T> {
11517        const NAME: &'static str = "aruna.api.storage.services.v2.RelationsService";
11518    }
11519}
11520#[derive(serde::Deserialize, serde::Serialize)]
11521#[allow(clippy::derive_partial_eq_without_eq)]
11522#[derive(Clone, PartialEq, ::prost::Message)]
11523pub struct GetStorageVersionRequest {}
11524#[derive(serde::Deserialize, serde::Serialize)]
11525#[allow(clippy::derive_partial_eq_without_eq)]
11526#[derive(Clone, PartialEq, ::prost::Message)]
11527pub struct SemanticVersion {
11528    /// Complete version string
11529    #[prost(string, tag = "1")]
11530    pub version_string: ::prost::alloc::string::String,
11531    /// Semver according to <https://semver.org/>
11532    #[prost(int32, tag = "2")]
11533    pub major: i32,
11534    #[prost(int32, tag = "3")]
11535    pub minor: i32,
11536    #[prost(int32, tag = "4")]
11537    pub patch: i32,
11538    #[prost(string, tag = "5")]
11539    pub labels: ::prost::alloc::string::String,
11540}
11541#[derive(serde::Deserialize, serde::Serialize)]
11542#[allow(clippy::derive_partial_eq_without_eq)]
11543#[derive(Clone, PartialEq, ::prost::Message)]
11544pub struct LocationVersion {
11545    /// Status of a specific Location e.g Gießen / dataproxy / 0.5.0-beta.1
11546    #[prost(string, tag = "1")]
11547    pub location: ::prost::alloc::string::String,
11548    #[prost(message, repeated, tag = "2")]
11549    pub version: ::prost::alloc::vec::Vec<ComponentVersion>,
11550}
11551#[derive(serde::Deserialize, serde::Serialize)]
11552#[allow(clippy::derive_partial_eq_without_eq)]
11553#[derive(Clone, PartialEq, ::prost::Message)]
11554pub struct ComponentVersion {
11555    /// Name of a specific component e.g. server, dataproxy etc. and their status by location
11556    #[prost(string, tag = "1")]
11557    pub name: ::prost::alloc::string::String,
11558    #[prost(message, optional, tag = "2")]
11559    pub version: ::core::option::Option<SemanticVersion>,
11560}
11561/// Version of each component by location
11562#[derive(serde::Deserialize, serde::Serialize)]
11563#[allow(clippy::derive_partial_eq_without_eq)]
11564#[derive(Clone, PartialEq, ::prost::Message)]
11565pub struct GetStorageVersionResponse {
11566    #[prost(message, repeated, tag = "1")]
11567    pub location_version: ::prost::alloc::vec::Vec<LocationVersion>,
11568}
11569#[derive(serde::Deserialize, serde::Serialize)]
11570#[allow(clippy::derive_partial_eq_without_eq)]
11571#[derive(Clone, PartialEq, ::prost::Message)]
11572pub struct GetStorageStatusRequest {}
11573#[derive(serde::Deserialize, serde::Serialize)]
11574#[allow(clippy::derive_partial_eq_without_eq)]
11575#[derive(Clone, PartialEq, ::prost::Message)]
11576pub struct LocationStatus {
11577    /// Status of a specific Location e.g Gießen / AVAILABLE
11578    #[prost(string, tag = "1")]
11579    pub location: ::prost::alloc::string::String,
11580    #[prost(message, repeated, tag = "2")]
11581    pub component_status: ::prost::alloc::vec::Vec<ComponentStatus>,
11582}
11583#[derive(serde::Deserialize, serde::Serialize)]
11584#[allow(clippy::derive_partial_eq_without_eq)]
11585#[derive(Clone, PartialEq, ::prost::Message)]
11586pub struct ComponentStatus {
11587    /// Name of a specific component e.g. server, dataproxy etc. and their status by location
11588    #[prost(string, tag = "1")]
11589    pub name: ::prost::alloc::string::String,
11590    #[prost(enumeration = "super::super::models::v2::ComponentStatus", tag = "2")]
11591    pub status: i32,
11592}
11593#[derive(serde::Deserialize, serde::Serialize)]
11594#[allow(clippy::derive_partial_eq_without_eq)]
11595#[derive(Clone, PartialEq, ::prost::Message)]
11596pub struct GetStorageStatusResponse {
11597    /// List of all locations and their component / status
11598    #[prost(message, repeated, tag = "1")]
11599    pub location_status: ::prost::alloc::vec::Vec<LocationStatus>,
11600}
11601#[derive(serde::Deserialize, serde::Serialize)]
11602#[allow(clippy::derive_partial_eq_without_eq)]
11603#[derive(Clone, PartialEq, ::prost::Message)]
11604pub struct GetPubkeysRequest {}
11605#[derive(serde::Deserialize, serde::Serialize)]
11606#[allow(clippy::derive_partial_eq_without_eq)]
11607#[derive(Clone, PartialEq, ::prost::Message)]
11608pub struct GetPubkeysResponse {
11609    #[prost(message, repeated, tag = "1")]
11610    pub pubkeys: ::prost::alloc::vec::Vec<super::super::models::v2::Pubkey>,
11611}
11612/// -------------------------------------
11613#[derive(serde::Deserialize, serde::Serialize)]
11614#[allow(clippy::derive_partial_eq_without_eq)]
11615#[derive(Clone, PartialEq, ::prost::Message)]
11616pub struct Announcement {
11617    /// Announcement id
11618    #[prost(string, tag = "1")]
11619    pub announcement_id: ::prost::alloc::string::String,
11620    /// Announcement type
11621    #[prost(enumeration = "super::super::models::v2::AnnouncementType", tag = "2")]
11622    pub announcement_type: i32,
11623    /// Announcement title
11624    #[prost(string, tag = "3")]
11625    pub title: ::prost::alloc::string::String,
11626    /// Short announcement summary
11627    #[prost(string, tag = "4")]
11628    pub teaser: ::prost::alloc::string::String,
11629    /// URL for announcement preview image
11630    #[prost(string, tag = "5")]
11631    pub image_url: ::prost::alloc::string::String,
11632    /// Announcement content text
11633    #[prost(string, tag = "6")]
11634    pub content: ::prost::alloc::string::String,
11635    /// Initial announcement author
11636    #[prost(string, tag = "7")]
11637    pub created_by: ::prost::alloc::string::String,
11638    /// Initial creation timestamp
11639    #[prost(message, optional, tag = "8")]
11640    pub created_at: ::core::option::Option<::prost_wkt_types::Timestamp>,
11641    /// Author responsible for the last modification
11642    #[prost(string, tag = "9")]
11643    pub modified_by: ::prost::alloc::string::String,
11644    /// Last modification timestamp
11645    #[prost(message, optional, tag = "10")]
11646    pub modified_at: ::core::option::Option<::prost_wkt_types::Timestamp>,
11647}
11648#[derive(serde::Deserialize, serde::Serialize)]
11649#[allow(clippy::derive_partial_eq_without_eq)]
11650#[derive(Clone, PartialEq, ::prost::Message)]
11651pub struct SetAnnouncementsRequest {
11652    #[prost(message, repeated, tag = "1")]
11653    pub announcements_upsert: ::prost::alloc::vec::Vec<Announcement>,
11654    #[prost(string, repeated, tag = "2")]
11655    pub announcements_delete: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
11656}
11657#[derive(serde::Deserialize, serde::Serialize)]
11658#[allow(clippy::derive_partial_eq_without_eq)]
11659#[derive(Clone, PartialEq, ::prost::Message)]
11660pub struct SetAnnouncementsResponse {
11661    #[prost(message, repeated, tag = "1")]
11662    pub announcements: ::prost::alloc::vec::Vec<Announcement>,
11663}
11664#[derive(serde::Deserialize, serde::Serialize)]
11665#[allow(clippy::derive_partial_eq_without_eq)]
11666#[derive(Clone, PartialEq, ::prost::Message)]
11667pub struct GetAnnouncementsRequest {
11668    #[prost(string, repeated, tag = "1")]
11669    pub announcement_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
11670    #[prost(message, optional, tag = "2")]
11671    pub page: ::core::option::Option<super::super::models::v2::PageRequest>,
11672}
11673#[derive(serde::Deserialize, serde::Serialize)]
11674#[allow(clippy::derive_partial_eq_without_eq)]
11675#[derive(Clone, PartialEq, ::prost::Message)]
11676pub struct GetAnnouncementsResponse {
11677    #[prost(message, repeated, tag = "1")]
11678    pub announcements: ::prost::alloc::vec::Vec<Announcement>,
11679}
11680#[derive(serde::Deserialize, serde::Serialize)]
11681#[allow(clippy::derive_partial_eq_without_eq)]
11682#[derive(Clone, PartialEq, ::prost::Message)]
11683pub struct GetAnnouncementsByTypeRequest {
11684    #[prost(enumeration = "super::super::models::v2::AnnouncementType", tag = "1")]
11685    pub announcement_type: i32,
11686    #[prost(message, optional, tag = "2")]
11687    pub page: ::core::option::Option<super::super::models::v2::PageRequest>,
11688}
11689#[derive(serde::Deserialize, serde::Serialize)]
11690#[allow(clippy::derive_partial_eq_without_eq)]
11691#[derive(Clone, PartialEq, ::prost::Message)]
11692pub struct GetAnnouncementsByTypeResponse {
11693    #[prost(message, repeated, tag = "1")]
11694    pub announcements: ::prost::alloc::vec::Vec<Announcement>,
11695}
11696#[derive(serde::Deserialize, serde::Serialize)]
11697#[allow(clippy::derive_partial_eq_without_eq)]
11698#[derive(Clone, PartialEq, ::prost::Message)]
11699pub struct GetAnnouncementRequest {
11700    #[prost(string, tag = "1")]
11701    pub announcement_id: ::prost::alloc::string::String,
11702}
11703#[derive(serde::Deserialize, serde::Serialize)]
11704#[allow(clippy::derive_partial_eq_without_eq)]
11705#[derive(Clone, PartialEq, ::prost::Message)]
11706pub struct GetAnnouncementResponse {
11707    #[prost(message, optional, tag = "1")]
11708    pub announcement: ::core::option::Option<Announcement>,
11709}
11710/// Generated client implementations.
11711pub mod storage_status_service_client {
11712    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
11713    use tonic::codegen::*;
11714    use tonic::codegen::http::Uri;
11715    /// StorageStatusService
11716    ///
11717    /// Status: BETA
11718    ///
11719    /// This is a generic service that contains utility functions
11720    /// these functions are used to query additional meta-information
11721    /// about the status of storage components
11722    #[derive(Debug, Clone)]
11723    pub struct StorageStatusServiceClient<T> {
11724        inner: tonic::client::Grpc<T>,
11725    }
11726    impl StorageStatusServiceClient<tonic::transport::Channel> {
11727        /// Attempt to create a new client by connecting to a given endpoint.
11728        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
11729        where
11730            D: TryInto<tonic::transport::Endpoint>,
11731            D::Error: Into<StdError>,
11732        {
11733            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
11734            Ok(Self::new(conn))
11735        }
11736    }
11737    impl<T> StorageStatusServiceClient<T>
11738    where
11739        T: tonic::client::GrpcService<tonic::body::BoxBody>,
11740        T::Error: Into<StdError>,
11741        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
11742        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
11743    {
11744        pub fn new(inner: T) -> Self {
11745            let inner = tonic::client::Grpc::new(inner);
11746            Self { inner }
11747        }
11748        pub fn with_origin(inner: T, origin: Uri) -> Self {
11749            let inner = tonic::client::Grpc::with_origin(inner, origin);
11750            Self { inner }
11751        }
11752        pub fn with_interceptor<F>(
11753            inner: T,
11754            interceptor: F,
11755        ) -> StorageStatusServiceClient<InterceptedService<T, F>>
11756        where
11757            F: tonic::service::Interceptor,
11758            T::ResponseBody: Default,
11759            T: tonic::codegen::Service<
11760                http::Request<tonic::body::BoxBody>,
11761                Response = http::Response<
11762                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
11763                >,
11764            >,
11765            <T as tonic::codegen::Service<
11766                http::Request<tonic::body::BoxBody>,
11767            >>::Error: Into<StdError> + Send + Sync,
11768        {
11769            StorageStatusServiceClient::new(InterceptedService::new(inner, interceptor))
11770        }
11771        /// Compress requests with the given encoding.
11772        ///
11773        /// This requires the server to support it otherwise it might respond with an
11774        /// error.
11775        #[must_use]
11776        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
11777            self.inner = self.inner.send_compressed(encoding);
11778            self
11779        }
11780        /// Enable decompressing responses.
11781        #[must_use]
11782        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
11783            self.inner = self.inner.accept_compressed(encoding);
11784            self
11785        }
11786        /// Limits the maximum size of a decoded message.
11787        ///
11788        /// Default: `4MB`
11789        #[must_use]
11790        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
11791            self.inner = self.inner.max_decoding_message_size(limit);
11792            self
11793        }
11794        /// Limits the maximum size of an encoded message.
11795        ///
11796        /// Default: `usize::MAX`
11797        #[must_use]
11798        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
11799            self.inner = self.inner.max_encoding_message_size(limit);
11800            self
11801        }
11802        /// GetStorageVersion
11803        ///
11804        /// Status: BETA
11805        ///
11806        /// A request to get the current version of the server application
11807        /// String representation and https://semver.org/
11808        pub async fn get_storage_version(
11809            &mut self,
11810            request: impl tonic::IntoRequest<super::GetStorageVersionRequest>,
11811        ) -> std::result::Result<
11812            tonic::Response<super::GetStorageVersionResponse>,
11813            tonic::Status,
11814        > {
11815            self.inner
11816                .ready()
11817                .await
11818                .map_err(|e| {
11819                    tonic::Status::new(
11820                        tonic::Code::Unknown,
11821                        format!("Service was not ready: {}", e.into()),
11822                    )
11823                })?;
11824            let codec = tonic::codec::ProstCodec::default();
11825            let path = http::uri::PathAndQuery::from_static(
11826                "/aruna.api.storage.services.v2.StorageStatusService/GetStorageVersion",
11827            );
11828            let mut req = request.into_request();
11829            req.extensions_mut()
11830                .insert(
11831                    GrpcMethod::new(
11832                        "aruna.api.storage.services.v2.StorageStatusService",
11833                        "GetStorageVersion",
11834                    ),
11835                );
11836            self.inner.unary(req, path, codec).await
11837        }
11838        /// GetStorageStatus
11839        ///
11840        /// Status: ALPHA
11841        ///
11842        /// A request to get the current status of the storage components by location(s)
11843        pub async fn get_storage_status(
11844            &mut self,
11845            request: impl tonic::IntoRequest<super::GetStorageStatusRequest>,
11846        ) -> std::result::Result<
11847            tonic::Response<super::GetStorageStatusResponse>,
11848            tonic::Status,
11849        > {
11850            self.inner
11851                .ready()
11852                .await
11853                .map_err(|e| {
11854                    tonic::Status::new(
11855                        tonic::Code::Unknown,
11856                        format!("Service was not ready: {}", e.into()),
11857                    )
11858                })?;
11859            let codec = tonic::codec::ProstCodec::default();
11860            let path = http::uri::PathAndQuery::from_static(
11861                "/aruna.api.storage.services.v2.StorageStatusService/GetStorageStatus",
11862            );
11863            let mut req = request.into_request();
11864            req.extensions_mut()
11865                .insert(
11866                    GrpcMethod::new(
11867                        "aruna.api.storage.services.v2.StorageStatusService",
11868                        "GetStorageStatus",
11869                    ),
11870                );
11871            self.inner.unary(req, path, codec).await
11872        }
11873        /// GetPubkeys
11874        ///
11875        /// Status: BETA
11876        ///
11877        /// Get all public keys of all storage components
11878        pub async fn get_pubkeys(
11879            &mut self,
11880            request: impl tonic::IntoRequest<super::GetPubkeysRequest>,
11881        ) -> std::result::Result<
11882            tonic::Response<super::GetPubkeysResponse>,
11883            tonic::Status,
11884        > {
11885            self.inner
11886                .ready()
11887                .await
11888                .map_err(|e| {
11889                    tonic::Status::new(
11890                        tonic::Code::Unknown,
11891                        format!("Service was not ready: {}", e.into()),
11892                    )
11893                })?;
11894            let codec = tonic::codec::ProstCodec::default();
11895            let path = http::uri::PathAndQuery::from_static(
11896                "/aruna.api.storage.services.v2.StorageStatusService/GetPubkeys",
11897            );
11898            let mut req = request.into_request();
11899            req.extensions_mut()
11900                .insert(
11901                    GrpcMethod::new(
11902                        "aruna.api.storage.services.v2.StorageStatusService",
11903                        "GetPubkeys",
11904                    ),
11905                );
11906            self.inner.unary(req, path, codec).await
11907        }
11908        /// Get Announcements
11909        ///
11910        /// Status: BETA
11911        ///
11912        /// Query global announcements optionally filtered by specific ids.
11913        ///  - Returns all announcements if no ids are provided
11914        ///  - Returns only the specific announcements if ids are provided
11915        pub async fn get_announcements(
11916            &mut self,
11917            request: impl tonic::IntoRequest<super::GetAnnouncementsRequest>,
11918        ) -> std::result::Result<
11919            tonic::Response<super::GetAnnouncementsResponse>,
11920            tonic::Status,
11921        > {
11922            self.inner
11923                .ready()
11924                .await
11925                .map_err(|e| {
11926                    tonic::Status::new(
11927                        tonic::Code::Unknown,
11928                        format!("Service was not ready: {}", e.into()),
11929                    )
11930                })?;
11931            let codec = tonic::codec::ProstCodec::default();
11932            let path = http::uri::PathAndQuery::from_static(
11933                "/aruna.api.storage.services.v2.StorageStatusService/GetAnnouncements",
11934            );
11935            let mut req = request.into_request();
11936            req.extensions_mut()
11937                .insert(
11938                    GrpcMethod::new(
11939                        "aruna.api.storage.services.v2.StorageStatusService",
11940                        "GetAnnouncements",
11941                    ),
11942                );
11943            self.inner.unary(req, path, codec).await
11944        }
11945        /// GetAnnouncementsByType
11946        ///
11947        /// Status: BETA
11948        ///
11949        /// Query global announcements by type
11950        pub async fn get_announcements_by_type(
11951            &mut self,
11952            request: impl tonic::IntoRequest<super::GetAnnouncementsByTypeRequest>,
11953        ) -> std::result::Result<
11954            tonic::Response<super::GetAnnouncementsByTypeResponse>,
11955            tonic::Status,
11956        > {
11957            self.inner
11958                .ready()
11959                .await
11960                .map_err(|e| {
11961                    tonic::Status::new(
11962                        tonic::Code::Unknown,
11963                        format!("Service was not ready: {}", e.into()),
11964                    )
11965                })?;
11966            let codec = tonic::codec::ProstCodec::default();
11967            let path = http::uri::PathAndQuery::from_static(
11968                "/aruna.api.storage.services.v2.StorageStatusService/GetAnnouncementsByType",
11969            );
11970            let mut req = request.into_request();
11971            req.extensions_mut()
11972                .insert(
11973                    GrpcMethod::new(
11974                        "aruna.api.storage.services.v2.StorageStatusService",
11975                        "GetAnnouncementsByType",
11976                    ),
11977                );
11978            self.inner.unary(req, path, codec).await
11979        }
11980        /// Get a specific Announcement
11981        ///
11982        /// Status: BETA
11983        ///
11984        /// Query a specific global announcement by its id
11985        pub async fn get_announcement(
11986            &mut self,
11987            request: impl tonic::IntoRequest<super::GetAnnouncementRequest>,
11988        ) -> std::result::Result<
11989            tonic::Response<super::GetAnnouncementResponse>,
11990            tonic::Status,
11991        > {
11992            self.inner
11993                .ready()
11994                .await
11995                .map_err(|e| {
11996                    tonic::Status::new(
11997                        tonic::Code::Unknown,
11998                        format!("Service was not ready: {}", e.into()),
11999                    )
12000                })?;
12001            let codec = tonic::codec::ProstCodec::default();
12002            let path = http::uri::PathAndQuery::from_static(
12003                "/aruna.api.storage.services.v2.StorageStatusService/GetAnnouncement",
12004            );
12005            let mut req = request.into_request();
12006            req.extensions_mut()
12007                .insert(
12008                    GrpcMethod::new(
12009                        "aruna.api.storage.services.v2.StorageStatusService",
12010                        "GetAnnouncement",
12011                    ),
12012                );
12013            self.inner.unary(req, path, codec).await
12014        }
12015        /// SetAnnouncements
12016        ///
12017        /// Status: BETA
12018        ///
12019        /// Update / add global announcements
12020        pub async fn set_announcements(
12021            &mut self,
12022            request: impl tonic::IntoRequest<super::SetAnnouncementsRequest>,
12023        ) -> std::result::Result<
12024            tonic::Response<super::SetAnnouncementsResponse>,
12025            tonic::Status,
12026        > {
12027            self.inner
12028                .ready()
12029                .await
12030                .map_err(|e| {
12031                    tonic::Status::new(
12032                        tonic::Code::Unknown,
12033                        format!("Service was not ready: {}", e.into()),
12034                    )
12035                })?;
12036            let codec = tonic::codec::ProstCodec::default();
12037            let path = http::uri::PathAndQuery::from_static(
12038                "/aruna.api.storage.services.v2.StorageStatusService/SetAnnouncements",
12039            );
12040            let mut req = request.into_request();
12041            req.extensions_mut()
12042                .insert(
12043                    GrpcMethod::new(
12044                        "aruna.api.storage.services.v2.StorageStatusService",
12045                        "SetAnnouncements",
12046                    ),
12047                );
12048            self.inner.unary(req, path, codec).await
12049        }
12050    }
12051}
12052/// Generated server implementations.
12053pub mod storage_status_service_server {
12054    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
12055    use tonic::codegen::*;
12056    /// Generated trait containing gRPC methods that should be implemented for use with StorageStatusServiceServer.
12057    #[async_trait]
12058    pub trait StorageStatusService: Send + Sync + 'static {
12059        /// GetStorageVersion
12060        ///
12061        /// Status: BETA
12062        ///
12063        /// A request to get the current version of the server application
12064        /// String representation and https://semver.org/
12065        async fn get_storage_version(
12066            &self,
12067            request: tonic::Request<super::GetStorageVersionRequest>,
12068        ) -> std::result::Result<
12069            tonic::Response<super::GetStorageVersionResponse>,
12070            tonic::Status,
12071        >;
12072        /// GetStorageStatus
12073        ///
12074        /// Status: ALPHA
12075        ///
12076        /// A request to get the current status of the storage components by location(s)
12077        async fn get_storage_status(
12078            &self,
12079            request: tonic::Request<super::GetStorageStatusRequest>,
12080        ) -> std::result::Result<
12081            tonic::Response<super::GetStorageStatusResponse>,
12082            tonic::Status,
12083        >;
12084        /// GetPubkeys
12085        ///
12086        /// Status: BETA
12087        ///
12088        /// Get all public keys of all storage components
12089        async fn get_pubkeys(
12090            &self,
12091            request: tonic::Request<super::GetPubkeysRequest>,
12092        ) -> std::result::Result<
12093            tonic::Response<super::GetPubkeysResponse>,
12094            tonic::Status,
12095        >;
12096        /// Get Announcements
12097        ///
12098        /// Status: BETA
12099        ///
12100        /// Query global announcements optionally filtered by specific ids.
12101        ///  - Returns all announcements if no ids are provided
12102        ///  - Returns only the specific announcements if ids are provided
12103        async fn get_announcements(
12104            &self,
12105            request: tonic::Request<super::GetAnnouncementsRequest>,
12106        ) -> std::result::Result<
12107            tonic::Response<super::GetAnnouncementsResponse>,
12108            tonic::Status,
12109        >;
12110        /// GetAnnouncementsByType
12111        ///
12112        /// Status: BETA
12113        ///
12114        /// Query global announcements by type
12115        async fn get_announcements_by_type(
12116            &self,
12117            request: tonic::Request<super::GetAnnouncementsByTypeRequest>,
12118        ) -> std::result::Result<
12119            tonic::Response<super::GetAnnouncementsByTypeResponse>,
12120            tonic::Status,
12121        >;
12122        /// Get a specific Announcement
12123        ///
12124        /// Status: BETA
12125        ///
12126        /// Query a specific global announcement by its id
12127        async fn get_announcement(
12128            &self,
12129            request: tonic::Request<super::GetAnnouncementRequest>,
12130        ) -> std::result::Result<
12131            tonic::Response<super::GetAnnouncementResponse>,
12132            tonic::Status,
12133        >;
12134        /// SetAnnouncements
12135        ///
12136        /// Status: BETA
12137        ///
12138        /// Update / add global announcements
12139        async fn set_announcements(
12140            &self,
12141            request: tonic::Request<super::SetAnnouncementsRequest>,
12142        ) -> std::result::Result<
12143            tonic::Response<super::SetAnnouncementsResponse>,
12144            tonic::Status,
12145        >;
12146    }
12147    /// StorageStatusService
12148    ///
12149    /// Status: BETA
12150    ///
12151    /// This is a generic service that contains utility functions
12152    /// these functions are used to query additional meta-information
12153    /// about the status of storage components
12154    #[derive(Debug)]
12155    pub struct StorageStatusServiceServer<T: StorageStatusService> {
12156        inner: _Inner<T>,
12157        accept_compression_encodings: EnabledCompressionEncodings,
12158        send_compression_encodings: EnabledCompressionEncodings,
12159        max_decoding_message_size: Option<usize>,
12160        max_encoding_message_size: Option<usize>,
12161    }
12162    struct _Inner<T>(Arc<T>);
12163    impl<T: StorageStatusService> StorageStatusServiceServer<T> {
12164        pub fn new(inner: T) -> Self {
12165            Self::from_arc(Arc::new(inner))
12166        }
12167        pub fn from_arc(inner: Arc<T>) -> Self {
12168            let inner = _Inner(inner);
12169            Self {
12170                inner,
12171                accept_compression_encodings: Default::default(),
12172                send_compression_encodings: Default::default(),
12173                max_decoding_message_size: None,
12174                max_encoding_message_size: None,
12175            }
12176        }
12177        pub fn with_interceptor<F>(
12178            inner: T,
12179            interceptor: F,
12180        ) -> InterceptedService<Self, F>
12181        where
12182            F: tonic::service::Interceptor,
12183        {
12184            InterceptedService::new(Self::new(inner), interceptor)
12185        }
12186        /// Enable decompressing requests with the given encoding.
12187        #[must_use]
12188        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
12189            self.accept_compression_encodings.enable(encoding);
12190            self
12191        }
12192        /// Compress responses with the given encoding, if the client supports it.
12193        #[must_use]
12194        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
12195            self.send_compression_encodings.enable(encoding);
12196            self
12197        }
12198        /// Limits the maximum size of a decoded message.
12199        ///
12200        /// Default: `4MB`
12201        #[must_use]
12202        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
12203            self.max_decoding_message_size = Some(limit);
12204            self
12205        }
12206        /// Limits the maximum size of an encoded message.
12207        ///
12208        /// Default: `usize::MAX`
12209        #[must_use]
12210        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
12211            self.max_encoding_message_size = Some(limit);
12212            self
12213        }
12214    }
12215    impl<T, B> tonic::codegen::Service<http::Request<B>>
12216    for StorageStatusServiceServer<T>
12217    where
12218        T: StorageStatusService,
12219        B: Body + Send + 'static,
12220        B::Error: Into<StdError> + Send + 'static,
12221    {
12222        type Response = http::Response<tonic::body::BoxBody>;
12223        type Error = std::convert::Infallible;
12224        type Future = BoxFuture<Self::Response, Self::Error>;
12225        fn poll_ready(
12226            &mut self,
12227            _cx: &mut Context<'_>,
12228        ) -> Poll<std::result::Result<(), Self::Error>> {
12229            Poll::Ready(Ok(()))
12230        }
12231        fn call(&mut self, req: http::Request<B>) -> Self::Future {
12232            let inner = self.inner.clone();
12233            match req.uri().path() {
12234                "/aruna.api.storage.services.v2.StorageStatusService/GetStorageVersion" => {
12235                    #[allow(non_camel_case_types)]
12236                    struct GetStorageVersionSvc<T: StorageStatusService>(pub Arc<T>);
12237                    impl<
12238                        T: StorageStatusService,
12239                    > tonic::server::UnaryService<super::GetStorageVersionRequest>
12240                    for GetStorageVersionSvc<T> {
12241                        type Response = super::GetStorageVersionResponse;
12242                        type Future = BoxFuture<
12243                            tonic::Response<Self::Response>,
12244                            tonic::Status,
12245                        >;
12246                        fn call(
12247                            &mut self,
12248                            request: tonic::Request<super::GetStorageVersionRequest>,
12249                        ) -> Self::Future {
12250                            let inner = Arc::clone(&self.0);
12251                            let fut = async move {
12252                                <T as StorageStatusService>::get_storage_version(
12253                                        &inner,
12254                                        request,
12255                                    )
12256                                    .await
12257                            };
12258                            Box::pin(fut)
12259                        }
12260                    }
12261                    let accept_compression_encodings = self.accept_compression_encodings;
12262                    let send_compression_encodings = self.send_compression_encodings;
12263                    let max_decoding_message_size = self.max_decoding_message_size;
12264                    let max_encoding_message_size = self.max_encoding_message_size;
12265                    let inner = self.inner.clone();
12266                    let fut = async move {
12267                        let inner = inner.0;
12268                        let method = GetStorageVersionSvc(inner);
12269                        let codec = tonic::codec::ProstCodec::default();
12270                        let mut grpc = tonic::server::Grpc::new(codec)
12271                            .apply_compression_config(
12272                                accept_compression_encodings,
12273                                send_compression_encodings,
12274                            )
12275                            .apply_max_message_size_config(
12276                                max_decoding_message_size,
12277                                max_encoding_message_size,
12278                            );
12279                        let res = grpc.unary(method, req).await;
12280                        Ok(res)
12281                    };
12282                    Box::pin(fut)
12283                }
12284                "/aruna.api.storage.services.v2.StorageStatusService/GetStorageStatus" => {
12285                    #[allow(non_camel_case_types)]
12286                    struct GetStorageStatusSvc<T: StorageStatusService>(pub Arc<T>);
12287                    impl<
12288                        T: StorageStatusService,
12289                    > tonic::server::UnaryService<super::GetStorageStatusRequest>
12290                    for GetStorageStatusSvc<T> {
12291                        type Response = super::GetStorageStatusResponse;
12292                        type Future = BoxFuture<
12293                            tonic::Response<Self::Response>,
12294                            tonic::Status,
12295                        >;
12296                        fn call(
12297                            &mut self,
12298                            request: tonic::Request<super::GetStorageStatusRequest>,
12299                        ) -> Self::Future {
12300                            let inner = Arc::clone(&self.0);
12301                            let fut = async move {
12302                                <T as StorageStatusService>::get_storage_status(
12303                                        &inner,
12304                                        request,
12305                                    )
12306                                    .await
12307                            };
12308                            Box::pin(fut)
12309                        }
12310                    }
12311                    let accept_compression_encodings = self.accept_compression_encodings;
12312                    let send_compression_encodings = self.send_compression_encodings;
12313                    let max_decoding_message_size = self.max_decoding_message_size;
12314                    let max_encoding_message_size = self.max_encoding_message_size;
12315                    let inner = self.inner.clone();
12316                    let fut = async move {
12317                        let inner = inner.0;
12318                        let method = GetStorageStatusSvc(inner);
12319                        let codec = tonic::codec::ProstCodec::default();
12320                        let mut grpc = tonic::server::Grpc::new(codec)
12321                            .apply_compression_config(
12322                                accept_compression_encodings,
12323                                send_compression_encodings,
12324                            )
12325                            .apply_max_message_size_config(
12326                                max_decoding_message_size,
12327                                max_encoding_message_size,
12328                            );
12329                        let res = grpc.unary(method, req).await;
12330                        Ok(res)
12331                    };
12332                    Box::pin(fut)
12333                }
12334                "/aruna.api.storage.services.v2.StorageStatusService/GetPubkeys" => {
12335                    #[allow(non_camel_case_types)]
12336                    struct GetPubkeysSvc<T: StorageStatusService>(pub Arc<T>);
12337                    impl<
12338                        T: StorageStatusService,
12339                    > tonic::server::UnaryService<super::GetPubkeysRequest>
12340                    for GetPubkeysSvc<T> {
12341                        type Response = super::GetPubkeysResponse;
12342                        type Future = BoxFuture<
12343                            tonic::Response<Self::Response>,
12344                            tonic::Status,
12345                        >;
12346                        fn call(
12347                            &mut self,
12348                            request: tonic::Request<super::GetPubkeysRequest>,
12349                        ) -> Self::Future {
12350                            let inner = Arc::clone(&self.0);
12351                            let fut = async move {
12352                                <T as StorageStatusService>::get_pubkeys(&inner, request)
12353                                    .await
12354                            };
12355                            Box::pin(fut)
12356                        }
12357                    }
12358                    let accept_compression_encodings = self.accept_compression_encodings;
12359                    let send_compression_encodings = self.send_compression_encodings;
12360                    let max_decoding_message_size = self.max_decoding_message_size;
12361                    let max_encoding_message_size = self.max_encoding_message_size;
12362                    let inner = self.inner.clone();
12363                    let fut = async move {
12364                        let inner = inner.0;
12365                        let method = GetPubkeysSvc(inner);
12366                        let codec = tonic::codec::ProstCodec::default();
12367                        let mut grpc = tonic::server::Grpc::new(codec)
12368                            .apply_compression_config(
12369                                accept_compression_encodings,
12370                                send_compression_encodings,
12371                            )
12372                            .apply_max_message_size_config(
12373                                max_decoding_message_size,
12374                                max_encoding_message_size,
12375                            );
12376                        let res = grpc.unary(method, req).await;
12377                        Ok(res)
12378                    };
12379                    Box::pin(fut)
12380                }
12381                "/aruna.api.storage.services.v2.StorageStatusService/GetAnnouncements" => {
12382                    #[allow(non_camel_case_types)]
12383                    struct GetAnnouncementsSvc<T: StorageStatusService>(pub Arc<T>);
12384                    impl<
12385                        T: StorageStatusService,
12386                    > tonic::server::UnaryService<super::GetAnnouncementsRequest>
12387                    for GetAnnouncementsSvc<T> {
12388                        type Response = super::GetAnnouncementsResponse;
12389                        type Future = BoxFuture<
12390                            tonic::Response<Self::Response>,
12391                            tonic::Status,
12392                        >;
12393                        fn call(
12394                            &mut self,
12395                            request: tonic::Request<super::GetAnnouncementsRequest>,
12396                        ) -> Self::Future {
12397                            let inner = Arc::clone(&self.0);
12398                            let fut = async move {
12399                                <T as StorageStatusService>::get_announcements(
12400                                        &inner,
12401                                        request,
12402                                    )
12403                                    .await
12404                            };
12405                            Box::pin(fut)
12406                        }
12407                    }
12408                    let accept_compression_encodings = self.accept_compression_encodings;
12409                    let send_compression_encodings = self.send_compression_encodings;
12410                    let max_decoding_message_size = self.max_decoding_message_size;
12411                    let max_encoding_message_size = self.max_encoding_message_size;
12412                    let inner = self.inner.clone();
12413                    let fut = async move {
12414                        let inner = inner.0;
12415                        let method = GetAnnouncementsSvc(inner);
12416                        let codec = tonic::codec::ProstCodec::default();
12417                        let mut grpc = tonic::server::Grpc::new(codec)
12418                            .apply_compression_config(
12419                                accept_compression_encodings,
12420                                send_compression_encodings,
12421                            )
12422                            .apply_max_message_size_config(
12423                                max_decoding_message_size,
12424                                max_encoding_message_size,
12425                            );
12426                        let res = grpc.unary(method, req).await;
12427                        Ok(res)
12428                    };
12429                    Box::pin(fut)
12430                }
12431                "/aruna.api.storage.services.v2.StorageStatusService/GetAnnouncementsByType" => {
12432                    #[allow(non_camel_case_types)]
12433                    struct GetAnnouncementsByTypeSvc<T: StorageStatusService>(
12434                        pub Arc<T>,
12435                    );
12436                    impl<
12437                        T: StorageStatusService,
12438                    > tonic::server::UnaryService<super::GetAnnouncementsByTypeRequest>
12439                    for GetAnnouncementsByTypeSvc<T> {
12440                        type Response = super::GetAnnouncementsByTypeResponse;
12441                        type Future = BoxFuture<
12442                            tonic::Response<Self::Response>,
12443                            tonic::Status,
12444                        >;
12445                        fn call(
12446                            &mut self,
12447                            request: tonic::Request<super::GetAnnouncementsByTypeRequest>,
12448                        ) -> Self::Future {
12449                            let inner = Arc::clone(&self.0);
12450                            let fut = async move {
12451                                <T as StorageStatusService>::get_announcements_by_type(
12452                                        &inner,
12453                                        request,
12454                                    )
12455                                    .await
12456                            };
12457                            Box::pin(fut)
12458                        }
12459                    }
12460                    let accept_compression_encodings = self.accept_compression_encodings;
12461                    let send_compression_encodings = self.send_compression_encodings;
12462                    let max_decoding_message_size = self.max_decoding_message_size;
12463                    let max_encoding_message_size = self.max_encoding_message_size;
12464                    let inner = self.inner.clone();
12465                    let fut = async move {
12466                        let inner = inner.0;
12467                        let method = GetAnnouncementsByTypeSvc(inner);
12468                        let codec = tonic::codec::ProstCodec::default();
12469                        let mut grpc = tonic::server::Grpc::new(codec)
12470                            .apply_compression_config(
12471                                accept_compression_encodings,
12472                                send_compression_encodings,
12473                            )
12474                            .apply_max_message_size_config(
12475                                max_decoding_message_size,
12476                                max_encoding_message_size,
12477                            );
12478                        let res = grpc.unary(method, req).await;
12479                        Ok(res)
12480                    };
12481                    Box::pin(fut)
12482                }
12483                "/aruna.api.storage.services.v2.StorageStatusService/GetAnnouncement" => {
12484                    #[allow(non_camel_case_types)]
12485                    struct GetAnnouncementSvc<T: StorageStatusService>(pub Arc<T>);
12486                    impl<
12487                        T: StorageStatusService,
12488                    > tonic::server::UnaryService<super::GetAnnouncementRequest>
12489                    for GetAnnouncementSvc<T> {
12490                        type Response = super::GetAnnouncementResponse;
12491                        type Future = BoxFuture<
12492                            tonic::Response<Self::Response>,
12493                            tonic::Status,
12494                        >;
12495                        fn call(
12496                            &mut self,
12497                            request: tonic::Request<super::GetAnnouncementRequest>,
12498                        ) -> Self::Future {
12499                            let inner = Arc::clone(&self.0);
12500                            let fut = async move {
12501                                <T as StorageStatusService>::get_announcement(
12502                                        &inner,
12503                                        request,
12504                                    )
12505                                    .await
12506                            };
12507                            Box::pin(fut)
12508                        }
12509                    }
12510                    let accept_compression_encodings = self.accept_compression_encodings;
12511                    let send_compression_encodings = self.send_compression_encodings;
12512                    let max_decoding_message_size = self.max_decoding_message_size;
12513                    let max_encoding_message_size = self.max_encoding_message_size;
12514                    let inner = self.inner.clone();
12515                    let fut = async move {
12516                        let inner = inner.0;
12517                        let method = GetAnnouncementSvc(inner);
12518                        let codec = tonic::codec::ProstCodec::default();
12519                        let mut grpc = tonic::server::Grpc::new(codec)
12520                            .apply_compression_config(
12521                                accept_compression_encodings,
12522                                send_compression_encodings,
12523                            )
12524                            .apply_max_message_size_config(
12525                                max_decoding_message_size,
12526                                max_encoding_message_size,
12527                            );
12528                        let res = grpc.unary(method, req).await;
12529                        Ok(res)
12530                    };
12531                    Box::pin(fut)
12532                }
12533                "/aruna.api.storage.services.v2.StorageStatusService/SetAnnouncements" => {
12534                    #[allow(non_camel_case_types)]
12535                    struct SetAnnouncementsSvc<T: StorageStatusService>(pub Arc<T>);
12536                    impl<
12537                        T: StorageStatusService,
12538                    > tonic::server::UnaryService<super::SetAnnouncementsRequest>
12539                    for SetAnnouncementsSvc<T> {
12540                        type Response = super::SetAnnouncementsResponse;
12541                        type Future = BoxFuture<
12542                            tonic::Response<Self::Response>,
12543                            tonic::Status,
12544                        >;
12545                        fn call(
12546                            &mut self,
12547                            request: tonic::Request<super::SetAnnouncementsRequest>,
12548                        ) -> Self::Future {
12549                            let inner = Arc::clone(&self.0);
12550                            let fut = async move {
12551                                <T as StorageStatusService>::set_announcements(
12552                                        &inner,
12553                                        request,
12554                                    )
12555                                    .await
12556                            };
12557                            Box::pin(fut)
12558                        }
12559                    }
12560                    let accept_compression_encodings = self.accept_compression_encodings;
12561                    let send_compression_encodings = self.send_compression_encodings;
12562                    let max_decoding_message_size = self.max_decoding_message_size;
12563                    let max_encoding_message_size = self.max_encoding_message_size;
12564                    let inner = self.inner.clone();
12565                    let fut = async move {
12566                        let inner = inner.0;
12567                        let method = SetAnnouncementsSvc(inner);
12568                        let codec = tonic::codec::ProstCodec::default();
12569                        let mut grpc = tonic::server::Grpc::new(codec)
12570                            .apply_compression_config(
12571                                accept_compression_encodings,
12572                                send_compression_encodings,
12573                            )
12574                            .apply_max_message_size_config(
12575                                max_decoding_message_size,
12576                                max_encoding_message_size,
12577                            );
12578                        let res = grpc.unary(method, req).await;
12579                        Ok(res)
12580                    };
12581                    Box::pin(fut)
12582                }
12583                _ => {
12584                    Box::pin(async move {
12585                        Ok(
12586                            http::Response::builder()
12587                                .status(200)
12588                                .header("grpc-status", "12")
12589                                .header("content-type", "application/grpc")
12590                                .body(empty_body())
12591                                .unwrap(),
12592                        )
12593                    })
12594                }
12595            }
12596        }
12597    }
12598    impl<T: StorageStatusService> Clone for StorageStatusServiceServer<T> {
12599        fn clone(&self) -> Self {
12600            let inner = self.inner.clone();
12601            Self {
12602                inner,
12603                accept_compression_encodings: self.accept_compression_encodings,
12604                send_compression_encodings: self.send_compression_encodings,
12605                max_decoding_message_size: self.max_decoding_message_size,
12606                max_encoding_message_size: self.max_encoding_message_size,
12607            }
12608        }
12609    }
12610    impl<T: StorageStatusService> Clone for _Inner<T> {
12611        fn clone(&self) -> Self {
12612            Self(Arc::clone(&self.0))
12613        }
12614    }
12615    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
12616        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12617            write!(f, "{:?}", self.0)
12618        }
12619    }
12620    impl<T: StorageStatusService> tonic::server::NamedService
12621    for StorageStatusServiceServer<T> {
12622        const NAME: &'static str = "aruna.api.storage.services.v2.StorageStatusService";
12623    }
12624}
12625#[derive(serde::Deserialize, serde::Serialize)]
12626#[allow(clippy::derive_partial_eq_without_eq)]
12627#[derive(Clone, PartialEq, ::prost::Message)]
12628pub struct UserPermission {
12629    #[prost(string, tag = "1")]
12630    pub user_id: ::prost::alloc::string::String,
12631    #[prost(string, tag = "2")]
12632    pub user_name: ::prost::alloc::string::String,
12633    #[prost(enumeration = "super::super::models::v2::PermissionLevel", tag = "3")]
12634    pub permission_level: i32,
12635}
12636#[derive(serde::Deserialize, serde::Serialize)]
12637#[allow(clippy::derive_partial_eq_without_eq)]
12638#[derive(Clone, PartialEq, ::prost::Message)]
12639pub struct ResourceAuthorization {
12640    #[prost(string, tag = "1")]
12641    pub resource_id: ::prost::alloc::string::String,
12642    #[prost(message, repeated, tag = "2")]
12643    pub user_permission: ::prost::alloc::vec::Vec<UserPermission>,
12644}
12645#[derive(serde::Deserialize, serde::Serialize)]
12646#[allow(clippy::derive_partial_eq_without_eq)]
12647#[derive(Clone, PartialEq, ::prost::Message)]
12648pub struct CreateAuthorizationRequest {
12649    #[prost(string, tag = "1")]
12650    pub resource_id: ::prost::alloc::string::String,
12651    #[prost(string, tag = "2")]
12652    pub user_id: ::prost::alloc::string::String,
12653    /// Can also include "deny"
12654    #[prost(enumeration = "super::super::models::v2::PermissionLevel", tag = "3")]
12655    pub permission_level: i32,
12656}
12657#[derive(serde::Deserialize, serde::Serialize)]
12658#[allow(clippy::derive_partial_eq_without_eq)]
12659#[derive(Clone, PartialEq, ::prost::Message)]
12660pub struct CreateAuthorizationResponse {
12661    #[prost(string, tag = "1")]
12662    pub resource_id: ::prost::alloc::string::String,
12663    #[prost(string, tag = "2")]
12664    pub user_id: ::prost::alloc::string::String,
12665    #[prost(string, tag = "3")]
12666    pub user_name: ::prost::alloc::string::String,
12667    #[prost(enumeration = "super::super::models::v2::PermissionLevel", tag = "4")]
12668    pub permission_level: i32,
12669}
12670#[derive(serde::Deserialize, serde::Serialize)]
12671#[allow(clippy::derive_partial_eq_without_eq)]
12672#[derive(Clone, PartialEq, ::prost::Message)]
12673pub struct GetAuthorizationsRequest {
12674    #[prost(string, tag = "1")]
12675    pub resource_id: ::prost::alloc::string::String,
12676    #[prost(bool, tag = "2")]
12677    pub recursive: bool,
12678}
12679#[derive(serde::Deserialize, serde::Serialize)]
12680#[allow(clippy::derive_partial_eq_without_eq)]
12681#[derive(Clone, PartialEq, ::prost::Message)]
12682pub struct GetAuthorizationsResponse {
12683    #[prost(message, repeated, tag = "1")]
12684    pub authorizations: ::prost::alloc::vec::Vec<ResourceAuthorization>,
12685}
12686#[derive(serde::Deserialize, serde::Serialize)]
12687#[allow(clippy::derive_partial_eq_without_eq)]
12688#[derive(Clone, PartialEq, ::prost::Message)]
12689pub struct DeleteAuthorizationRequest {
12690    #[prost(string, tag = "1")]
12691    pub resource_id: ::prost::alloc::string::String,
12692    #[prost(string, tag = "2")]
12693    pub user_id: ::prost::alloc::string::String,
12694}
12695#[derive(serde::Deserialize, serde::Serialize)]
12696#[allow(clippy::derive_partial_eq_without_eq)]
12697#[derive(Clone, PartialEq, ::prost::Message)]
12698pub struct DeleteAuthorizationResponse {}
12699#[derive(serde::Deserialize, serde::Serialize)]
12700#[allow(clippy::derive_partial_eq_without_eq)]
12701#[derive(Clone, PartialEq, ::prost::Message)]
12702pub struct UpdateAuthorizationRequest {
12703    #[prost(string, tag = "1")]
12704    pub resource_id: ::prost::alloc::string::String,
12705    #[prost(string, tag = "2")]
12706    pub user_id: ::prost::alloc::string::String,
12707    #[prost(enumeration = "super::super::models::v2::PermissionLevel", tag = "3")]
12708    pub permission_level: i32,
12709}
12710#[derive(serde::Deserialize, serde::Serialize)]
12711#[allow(clippy::derive_partial_eq_without_eq)]
12712#[derive(Clone, PartialEq, ::prost::Message)]
12713pub struct UpdateAuthorizationResponse {
12714    #[prost(message, optional, tag = "1")]
12715    pub user_permission: ::core::option::Option<UserPermission>,
12716}
12717/// Generated client implementations.
12718pub mod authorization_service_client {
12719    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
12720    use tonic::codegen::*;
12721    use tonic::codegen::http::Uri;
12722    /// AuthorizationService
12723    ///
12724    /// Status: BETA
12725    ///
12726    /// Contains all methods to edit and change user authorization
12727    #[derive(Debug, Clone)]
12728    pub struct AuthorizationServiceClient<T> {
12729        inner: tonic::client::Grpc<T>,
12730    }
12731    impl AuthorizationServiceClient<tonic::transport::Channel> {
12732        /// Attempt to create a new client by connecting to a given endpoint.
12733        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
12734        where
12735            D: TryInto<tonic::transport::Endpoint>,
12736            D::Error: Into<StdError>,
12737        {
12738            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
12739            Ok(Self::new(conn))
12740        }
12741    }
12742    impl<T> AuthorizationServiceClient<T>
12743    where
12744        T: tonic::client::GrpcService<tonic::body::BoxBody>,
12745        T::Error: Into<StdError>,
12746        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
12747        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
12748    {
12749        pub fn new(inner: T) -> Self {
12750            let inner = tonic::client::Grpc::new(inner);
12751            Self { inner }
12752        }
12753        pub fn with_origin(inner: T, origin: Uri) -> Self {
12754            let inner = tonic::client::Grpc::with_origin(inner, origin);
12755            Self { inner }
12756        }
12757        pub fn with_interceptor<F>(
12758            inner: T,
12759            interceptor: F,
12760        ) -> AuthorizationServiceClient<InterceptedService<T, F>>
12761        where
12762            F: tonic::service::Interceptor,
12763            T::ResponseBody: Default,
12764            T: tonic::codegen::Service<
12765                http::Request<tonic::body::BoxBody>,
12766                Response = http::Response<
12767                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
12768                >,
12769            >,
12770            <T as tonic::codegen::Service<
12771                http::Request<tonic::body::BoxBody>,
12772            >>::Error: Into<StdError> + Send + Sync,
12773        {
12774            AuthorizationServiceClient::new(InterceptedService::new(inner, interceptor))
12775        }
12776        /// Compress requests with the given encoding.
12777        ///
12778        /// This requires the server to support it otherwise it might respond with an
12779        /// error.
12780        #[must_use]
12781        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
12782            self.inner = self.inner.send_compressed(encoding);
12783            self
12784        }
12785        /// Enable decompressing responses.
12786        #[must_use]
12787        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
12788            self.inner = self.inner.accept_compressed(encoding);
12789            self
12790        }
12791        /// Limits the maximum size of a decoded message.
12792        ///
12793        /// Default: `4MB`
12794        #[must_use]
12795        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
12796            self.inner = self.inner.max_decoding_message_size(limit);
12797            self
12798        }
12799        /// Limits the maximum size of an encoded message.
12800        ///
12801        /// Default: `usize::MAX`
12802        #[must_use]
12803        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
12804            self.inner = self.inner.max_encoding_message_size(limit);
12805            self
12806        }
12807        /// CreateAuthorization
12808        ///
12809        /// Status: BETA
12810        ///
12811        /// This creates a user-specific attribute that handles permission for a
12812        /// specific resource
12813        pub async fn create_authorization(
12814            &mut self,
12815            request: impl tonic::IntoRequest<super::CreateAuthorizationRequest>,
12816        ) -> std::result::Result<
12817            tonic::Response<super::CreateAuthorizationResponse>,
12818            tonic::Status,
12819        > {
12820            self.inner
12821                .ready()
12822                .await
12823                .map_err(|e| {
12824                    tonic::Status::new(
12825                        tonic::Code::Unknown,
12826                        format!("Service was not ready: {}", e.into()),
12827                    )
12828                })?;
12829            let codec = tonic::codec::ProstCodec::default();
12830            let path = http::uri::PathAndQuery::from_static(
12831                "/aruna.api.storage.services.v2.AuthorizationService/CreateAuthorization",
12832            );
12833            let mut req = request.into_request();
12834            req.extensions_mut()
12835                .insert(
12836                    GrpcMethod::new(
12837                        "aruna.api.storage.services.v2.AuthorizationService",
12838                        "CreateAuthorization",
12839                    ),
12840                );
12841            self.inner.unary(req, path, codec).await
12842        }
12843        /// GetAuthorization
12844        ///
12845        /// Status: BETA
12846        ///
12847        /// This gets resource specific user authorizations
12848        pub async fn get_authorizations(
12849            &mut self,
12850            request: impl tonic::IntoRequest<super::GetAuthorizationsRequest>,
12851        ) -> std::result::Result<
12852            tonic::Response<super::GetAuthorizationsResponse>,
12853            tonic::Status,
12854        > {
12855            self.inner
12856                .ready()
12857                .await
12858                .map_err(|e| {
12859                    tonic::Status::new(
12860                        tonic::Code::Unknown,
12861                        format!("Service was not ready: {}", e.into()),
12862                    )
12863                })?;
12864            let codec = tonic::codec::ProstCodec::default();
12865            let path = http::uri::PathAndQuery::from_static(
12866                "/aruna.api.storage.services.v2.AuthorizationService/GetAuthorizations",
12867            );
12868            let mut req = request.into_request();
12869            req.extensions_mut()
12870                .insert(
12871                    GrpcMethod::new(
12872                        "aruna.api.storage.services.v2.AuthorizationService",
12873                        "GetAuthorizations",
12874                    ),
12875                );
12876            self.inner.unary(req, path, codec).await
12877        }
12878        /// DeleteAuthorization
12879        ///
12880        /// Status: BETA
12881        ///
12882        /// This deletes a user-specific attribute that handles permission for a
12883        /// specific resource
12884        pub async fn delete_authorization(
12885            &mut self,
12886            request: impl tonic::IntoRequest<super::DeleteAuthorizationRequest>,
12887        ) -> std::result::Result<
12888            tonic::Response<super::DeleteAuthorizationResponse>,
12889            tonic::Status,
12890        > {
12891            self.inner
12892                .ready()
12893                .await
12894                .map_err(|e| {
12895                    tonic::Status::new(
12896                        tonic::Code::Unknown,
12897                        format!("Service was not ready: {}", e.into()),
12898                    )
12899                })?;
12900            let codec = tonic::codec::ProstCodec::default();
12901            let path = http::uri::PathAndQuery::from_static(
12902                "/aruna.api.storage.services.v2.AuthorizationService/DeleteAuthorization",
12903            );
12904            let mut req = request.into_request();
12905            req.extensions_mut()
12906                .insert(
12907                    GrpcMethod::new(
12908                        "aruna.api.storage.services.v2.AuthorizationService",
12909                        "DeleteAuthorization",
12910                    ),
12911                );
12912            self.inner.unary(req, path, codec).await
12913        }
12914        /// UpdateAuthorization
12915        ///
12916        /// Status: BETA
12917        ///
12918        /// This creates a user-specific attribute that handles permission for a
12919        /// specific resource
12920        pub async fn update_authorization(
12921            &mut self,
12922            request: impl tonic::IntoRequest<super::UpdateAuthorizationRequest>,
12923        ) -> std::result::Result<
12924            tonic::Response<super::UpdateAuthorizationResponse>,
12925            tonic::Status,
12926        > {
12927            self.inner
12928                .ready()
12929                .await
12930                .map_err(|e| {
12931                    tonic::Status::new(
12932                        tonic::Code::Unknown,
12933                        format!("Service was not ready: {}", e.into()),
12934                    )
12935                })?;
12936            let codec = tonic::codec::ProstCodec::default();
12937            let path = http::uri::PathAndQuery::from_static(
12938                "/aruna.api.storage.services.v2.AuthorizationService/UpdateAuthorization",
12939            );
12940            let mut req = request.into_request();
12941            req.extensions_mut()
12942                .insert(
12943                    GrpcMethod::new(
12944                        "aruna.api.storage.services.v2.AuthorizationService",
12945                        "UpdateAuthorization",
12946                    ),
12947                );
12948            self.inner.unary(req, path, codec).await
12949        }
12950    }
12951}
12952/// Generated server implementations.
12953pub mod authorization_service_server {
12954    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
12955    use tonic::codegen::*;
12956    /// Generated trait containing gRPC methods that should be implemented for use with AuthorizationServiceServer.
12957    #[async_trait]
12958    pub trait AuthorizationService: Send + Sync + 'static {
12959        /// CreateAuthorization
12960        ///
12961        /// Status: BETA
12962        ///
12963        /// This creates a user-specific attribute that handles permission for a
12964        /// specific resource
12965        async fn create_authorization(
12966            &self,
12967            request: tonic::Request<super::CreateAuthorizationRequest>,
12968        ) -> std::result::Result<
12969            tonic::Response<super::CreateAuthorizationResponse>,
12970            tonic::Status,
12971        >;
12972        /// GetAuthorization
12973        ///
12974        /// Status: BETA
12975        ///
12976        /// This gets resource specific user authorizations
12977        async fn get_authorizations(
12978            &self,
12979            request: tonic::Request<super::GetAuthorizationsRequest>,
12980        ) -> std::result::Result<
12981            tonic::Response<super::GetAuthorizationsResponse>,
12982            tonic::Status,
12983        >;
12984        /// DeleteAuthorization
12985        ///
12986        /// Status: BETA
12987        ///
12988        /// This deletes a user-specific attribute that handles permission for a
12989        /// specific resource
12990        async fn delete_authorization(
12991            &self,
12992            request: tonic::Request<super::DeleteAuthorizationRequest>,
12993        ) -> std::result::Result<
12994            tonic::Response<super::DeleteAuthorizationResponse>,
12995            tonic::Status,
12996        >;
12997        /// UpdateAuthorization
12998        ///
12999        /// Status: BETA
13000        ///
13001        /// This creates a user-specific attribute that handles permission for a
13002        /// specific resource
13003        async fn update_authorization(
13004            &self,
13005            request: tonic::Request<super::UpdateAuthorizationRequest>,
13006        ) -> std::result::Result<
13007            tonic::Response<super::UpdateAuthorizationResponse>,
13008            tonic::Status,
13009        >;
13010    }
13011    /// AuthorizationService
13012    ///
13013    /// Status: BETA
13014    ///
13015    /// Contains all methods to edit and change user authorization
13016    #[derive(Debug)]
13017    pub struct AuthorizationServiceServer<T: AuthorizationService> {
13018        inner: _Inner<T>,
13019        accept_compression_encodings: EnabledCompressionEncodings,
13020        send_compression_encodings: EnabledCompressionEncodings,
13021        max_decoding_message_size: Option<usize>,
13022        max_encoding_message_size: Option<usize>,
13023    }
13024    struct _Inner<T>(Arc<T>);
13025    impl<T: AuthorizationService> AuthorizationServiceServer<T> {
13026        pub fn new(inner: T) -> Self {
13027            Self::from_arc(Arc::new(inner))
13028        }
13029        pub fn from_arc(inner: Arc<T>) -> Self {
13030            let inner = _Inner(inner);
13031            Self {
13032                inner,
13033                accept_compression_encodings: Default::default(),
13034                send_compression_encodings: Default::default(),
13035                max_decoding_message_size: None,
13036                max_encoding_message_size: None,
13037            }
13038        }
13039        pub fn with_interceptor<F>(
13040            inner: T,
13041            interceptor: F,
13042        ) -> InterceptedService<Self, F>
13043        where
13044            F: tonic::service::Interceptor,
13045        {
13046            InterceptedService::new(Self::new(inner), interceptor)
13047        }
13048        /// Enable decompressing requests with the given encoding.
13049        #[must_use]
13050        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
13051            self.accept_compression_encodings.enable(encoding);
13052            self
13053        }
13054        /// Compress responses with the given encoding, if the client supports it.
13055        #[must_use]
13056        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
13057            self.send_compression_encodings.enable(encoding);
13058            self
13059        }
13060        /// Limits the maximum size of a decoded message.
13061        ///
13062        /// Default: `4MB`
13063        #[must_use]
13064        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
13065            self.max_decoding_message_size = Some(limit);
13066            self
13067        }
13068        /// Limits the maximum size of an encoded message.
13069        ///
13070        /// Default: `usize::MAX`
13071        #[must_use]
13072        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
13073            self.max_encoding_message_size = Some(limit);
13074            self
13075        }
13076    }
13077    impl<T, B> tonic::codegen::Service<http::Request<B>>
13078    for AuthorizationServiceServer<T>
13079    where
13080        T: AuthorizationService,
13081        B: Body + Send + 'static,
13082        B::Error: Into<StdError> + Send + 'static,
13083    {
13084        type Response = http::Response<tonic::body::BoxBody>;
13085        type Error = std::convert::Infallible;
13086        type Future = BoxFuture<Self::Response, Self::Error>;
13087        fn poll_ready(
13088            &mut self,
13089            _cx: &mut Context<'_>,
13090        ) -> Poll<std::result::Result<(), Self::Error>> {
13091            Poll::Ready(Ok(()))
13092        }
13093        fn call(&mut self, req: http::Request<B>) -> Self::Future {
13094            let inner = self.inner.clone();
13095            match req.uri().path() {
13096                "/aruna.api.storage.services.v2.AuthorizationService/CreateAuthorization" => {
13097                    #[allow(non_camel_case_types)]
13098                    struct CreateAuthorizationSvc<T: AuthorizationService>(pub Arc<T>);
13099                    impl<
13100                        T: AuthorizationService,
13101                    > tonic::server::UnaryService<super::CreateAuthorizationRequest>
13102                    for CreateAuthorizationSvc<T> {
13103                        type Response = super::CreateAuthorizationResponse;
13104                        type Future = BoxFuture<
13105                            tonic::Response<Self::Response>,
13106                            tonic::Status,
13107                        >;
13108                        fn call(
13109                            &mut self,
13110                            request: tonic::Request<super::CreateAuthorizationRequest>,
13111                        ) -> Self::Future {
13112                            let inner = Arc::clone(&self.0);
13113                            let fut = async move {
13114                                <T as AuthorizationService>::create_authorization(
13115                                        &inner,
13116                                        request,
13117                                    )
13118                                    .await
13119                            };
13120                            Box::pin(fut)
13121                        }
13122                    }
13123                    let accept_compression_encodings = self.accept_compression_encodings;
13124                    let send_compression_encodings = self.send_compression_encodings;
13125                    let max_decoding_message_size = self.max_decoding_message_size;
13126                    let max_encoding_message_size = self.max_encoding_message_size;
13127                    let inner = self.inner.clone();
13128                    let fut = async move {
13129                        let inner = inner.0;
13130                        let method = CreateAuthorizationSvc(inner);
13131                        let codec = tonic::codec::ProstCodec::default();
13132                        let mut grpc = tonic::server::Grpc::new(codec)
13133                            .apply_compression_config(
13134                                accept_compression_encodings,
13135                                send_compression_encodings,
13136                            )
13137                            .apply_max_message_size_config(
13138                                max_decoding_message_size,
13139                                max_encoding_message_size,
13140                            );
13141                        let res = grpc.unary(method, req).await;
13142                        Ok(res)
13143                    };
13144                    Box::pin(fut)
13145                }
13146                "/aruna.api.storage.services.v2.AuthorizationService/GetAuthorizations" => {
13147                    #[allow(non_camel_case_types)]
13148                    struct GetAuthorizationsSvc<T: AuthorizationService>(pub Arc<T>);
13149                    impl<
13150                        T: AuthorizationService,
13151                    > tonic::server::UnaryService<super::GetAuthorizationsRequest>
13152                    for GetAuthorizationsSvc<T> {
13153                        type Response = super::GetAuthorizationsResponse;
13154                        type Future = BoxFuture<
13155                            tonic::Response<Self::Response>,
13156                            tonic::Status,
13157                        >;
13158                        fn call(
13159                            &mut self,
13160                            request: tonic::Request<super::GetAuthorizationsRequest>,
13161                        ) -> Self::Future {
13162                            let inner = Arc::clone(&self.0);
13163                            let fut = async move {
13164                                <T as AuthorizationService>::get_authorizations(
13165                                        &inner,
13166                                        request,
13167                                    )
13168                                    .await
13169                            };
13170                            Box::pin(fut)
13171                        }
13172                    }
13173                    let accept_compression_encodings = self.accept_compression_encodings;
13174                    let send_compression_encodings = self.send_compression_encodings;
13175                    let max_decoding_message_size = self.max_decoding_message_size;
13176                    let max_encoding_message_size = self.max_encoding_message_size;
13177                    let inner = self.inner.clone();
13178                    let fut = async move {
13179                        let inner = inner.0;
13180                        let method = GetAuthorizationsSvc(inner);
13181                        let codec = tonic::codec::ProstCodec::default();
13182                        let mut grpc = tonic::server::Grpc::new(codec)
13183                            .apply_compression_config(
13184                                accept_compression_encodings,
13185                                send_compression_encodings,
13186                            )
13187                            .apply_max_message_size_config(
13188                                max_decoding_message_size,
13189                                max_encoding_message_size,
13190                            );
13191                        let res = grpc.unary(method, req).await;
13192                        Ok(res)
13193                    };
13194                    Box::pin(fut)
13195                }
13196                "/aruna.api.storage.services.v2.AuthorizationService/DeleteAuthorization" => {
13197                    #[allow(non_camel_case_types)]
13198                    struct DeleteAuthorizationSvc<T: AuthorizationService>(pub Arc<T>);
13199                    impl<
13200                        T: AuthorizationService,
13201                    > tonic::server::UnaryService<super::DeleteAuthorizationRequest>
13202                    for DeleteAuthorizationSvc<T> {
13203                        type Response = super::DeleteAuthorizationResponse;
13204                        type Future = BoxFuture<
13205                            tonic::Response<Self::Response>,
13206                            tonic::Status,
13207                        >;
13208                        fn call(
13209                            &mut self,
13210                            request: tonic::Request<super::DeleteAuthorizationRequest>,
13211                        ) -> Self::Future {
13212                            let inner = Arc::clone(&self.0);
13213                            let fut = async move {
13214                                <T as AuthorizationService>::delete_authorization(
13215                                        &inner,
13216                                        request,
13217                                    )
13218                                    .await
13219                            };
13220                            Box::pin(fut)
13221                        }
13222                    }
13223                    let accept_compression_encodings = self.accept_compression_encodings;
13224                    let send_compression_encodings = self.send_compression_encodings;
13225                    let max_decoding_message_size = self.max_decoding_message_size;
13226                    let max_encoding_message_size = self.max_encoding_message_size;
13227                    let inner = self.inner.clone();
13228                    let fut = async move {
13229                        let inner = inner.0;
13230                        let method = DeleteAuthorizationSvc(inner);
13231                        let codec = tonic::codec::ProstCodec::default();
13232                        let mut grpc = tonic::server::Grpc::new(codec)
13233                            .apply_compression_config(
13234                                accept_compression_encodings,
13235                                send_compression_encodings,
13236                            )
13237                            .apply_max_message_size_config(
13238                                max_decoding_message_size,
13239                                max_encoding_message_size,
13240                            );
13241                        let res = grpc.unary(method, req).await;
13242                        Ok(res)
13243                    };
13244                    Box::pin(fut)
13245                }
13246                "/aruna.api.storage.services.v2.AuthorizationService/UpdateAuthorization" => {
13247                    #[allow(non_camel_case_types)]
13248                    struct UpdateAuthorizationSvc<T: AuthorizationService>(pub Arc<T>);
13249                    impl<
13250                        T: AuthorizationService,
13251                    > tonic::server::UnaryService<super::UpdateAuthorizationRequest>
13252                    for UpdateAuthorizationSvc<T> {
13253                        type Response = super::UpdateAuthorizationResponse;
13254                        type Future = BoxFuture<
13255                            tonic::Response<Self::Response>,
13256                            tonic::Status,
13257                        >;
13258                        fn call(
13259                            &mut self,
13260                            request: tonic::Request<super::UpdateAuthorizationRequest>,
13261                        ) -> Self::Future {
13262                            let inner = Arc::clone(&self.0);
13263                            let fut = async move {
13264                                <T as AuthorizationService>::update_authorization(
13265                                        &inner,
13266                                        request,
13267                                    )
13268                                    .await
13269                            };
13270                            Box::pin(fut)
13271                        }
13272                    }
13273                    let accept_compression_encodings = self.accept_compression_encodings;
13274                    let send_compression_encodings = self.send_compression_encodings;
13275                    let max_decoding_message_size = self.max_decoding_message_size;
13276                    let max_encoding_message_size = self.max_encoding_message_size;
13277                    let inner = self.inner.clone();
13278                    let fut = async move {
13279                        let inner = inner.0;
13280                        let method = UpdateAuthorizationSvc(inner);
13281                        let codec = tonic::codec::ProstCodec::default();
13282                        let mut grpc = tonic::server::Grpc::new(codec)
13283                            .apply_compression_config(
13284                                accept_compression_encodings,
13285                                send_compression_encodings,
13286                            )
13287                            .apply_max_message_size_config(
13288                                max_decoding_message_size,
13289                                max_encoding_message_size,
13290                            );
13291                        let res = grpc.unary(method, req).await;
13292                        Ok(res)
13293                    };
13294                    Box::pin(fut)
13295                }
13296                _ => {
13297                    Box::pin(async move {
13298                        Ok(
13299                            http::Response::builder()
13300                                .status(200)
13301                                .header("grpc-status", "12")
13302                                .header("content-type", "application/grpc")
13303                                .body(empty_body())
13304                                .unwrap(),
13305                        )
13306                    })
13307                }
13308            }
13309        }
13310    }
13311    impl<T: AuthorizationService> Clone for AuthorizationServiceServer<T> {
13312        fn clone(&self) -> Self {
13313            let inner = self.inner.clone();
13314            Self {
13315                inner,
13316                accept_compression_encodings: self.accept_compression_encodings,
13317                send_compression_encodings: self.send_compression_encodings,
13318                max_decoding_message_size: self.max_decoding_message_size,
13319                max_encoding_message_size: self.max_encoding_message_size,
13320            }
13321        }
13322    }
13323    impl<T: AuthorizationService> Clone for _Inner<T> {
13324        fn clone(&self) -> Self {
13325            Self(Arc::clone(&self.0))
13326        }
13327    }
13328    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
13329        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13330            write!(f, "{:?}", self.0)
13331        }
13332    }
13333    impl<T: AuthorizationService> tonic::server::NamedService
13334    for AuthorizationServiceServer<T> {
13335        const NAME: &'static str = "aruna.api.storage.services.v2.AuthorizationService";
13336    }
13337}
13338#[derive(serde::Deserialize, serde::Serialize)]
13339#[allow(clippy::derive_partial_eq_without_eq)]
13340#[derive(Clone, PartialEq, ::prost::Message)]
13341pub struct SearchResourcesRequest {
13342    #[prost(string, tag = "1")]
13343    pub query: ::prost::alloc::string::String,
13344    #[prost(string, tag = "2")]
13345    pub filter: ::prost::alloc::string::String,
13346    #[prost(int64, tag = "3")]
13347    pub limit: i64,
13348    #[prost(int64, tag = "4")]
13349    pub offset: i64,
13350}
13351#[derive(serde::Deserialize, serde::Serialize)]
13352#[allow(clippy::derive_partial_eq_without_eq)]
13353#[derive(Clone, PartialEq, ::prost::Message)]
13354pub struct SearchResourcesResponse {
13355    /// Json list for each found resource
13356    #[prost(message, repeated, tag = "1")]
13357    pub resources: ::prost::alloc::vec::Vec<super::super::models::v2::GenericResource>,
13358    /// How many results are expected to be found ?
13359    #[prost(int64, tag = "2")]
13360    pub estimated_total: i64,
13361    /// The last index returned
13362    #[prost(int64, tag = "3")]
13363    pub last_index: i64,
13364}
13365#[derive(serde::Deserialize, serde::Serialize)]
13366#[allow(clippy::derive_partial_eq_without_eq)]
13367#[derive(Clone, PartialEq, ::prost::Message)]
13368pub struct GetResourceRequest {
13369    #[prost(string, tag = "1")]
13370    pub resource_id: ::prost::alloc::string::String,
13371}
13372#[derive(serde::Deserialize, serde::Serialize)]
13373#[allow(clippy::derive_partial_eq_without_eq)]
13374#[derive(Clone, PartialEq, ::prost::Message)]
13375pub struct ResourceWithPermission {
13376    #[prost(message, optional, tag = "1")]
13377    pub resource: ::core::option::Option<super::super::models::v2::GenericResource>,
13378    #[prost(enumeration = "super::super::models::v2::PermissionLevel", tag = "2")]
13379    pub permission: i32,
13380}
13381#[derive(serde::Deserialize, serde::Serialize)]
13382#[allow(clippy::derive_partial_eq_without_eq)]
13383#[derive(Clone, PartialEq, ::prost::Message)]
13384pub struct GetResourceResponse {
13385    #[prost(message, optional, tag = "1")]
13386    pub resource: ::core::option::Option<ResourceWithPermission>,
13387}
13388#[derive(serde::Deserialize, serde::Serialize)]
13389#[allow(clippy::derive_partial_eq_without_eq)]
13390#[derive(Clone, PartialEq, ::prost::Message)]
13391pub struct GetResourcesRequest {
13392    #[prost(string, repeated, tag = "1")]
13393    pub resource_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
13394}
13395#[derive(serde::Deserialize, serde::Serialize)]
13396#[allow(clippy::derive_partial_eq_without_eq)]
13397#[derive(Clone, PartialEq, ::prost::Message)]
13398pub struct GetResourcesResponse {
13399    #[prost(message, repeated, tag = "1")]
13400    pub resources: ::prost::alloc::vec::Vec<ResourceWithPermission>,
13401}
13402#[derive(serde::Deserialize, serde::Serialize)]
13403#[allow(clippy::derive_partial_eq_without_eq)]
13404#[derive(Clone, PartialEq, ::prost::Message)]
13405pub struct RequestResourceAccessRequest {
13406    #[prost(string, tag = "1")]
13407    pub resource_id: ::prost::alloc::string::String,
13408    #[prost(string, tag = "2")]
13409    pub message: ::prost::alloc::string::String,
13410}
13411#[derive(serde::Deserialize, serde::Serialize)]
13412#[allow(clippy::derive_partial_eq_without_eq)]
13413#[derive(Clone, PartialEq, ::prost::Message)]
13414pub struct RequestResourceAccessResponse {}
13415/// Generated client implementations.
13416pub mod search_service_client {
13417    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
13418    use tonic::codegen::*;
13419    use tonic::codegen::http::Uri;
13420    /// SearchService
13421    ///
13422    /// Status: BETA
13423    ///
13424    /// SearchService is used to query resources in the index and get a public view of them.
13425    #[derive(Debug, Clone)]
13426    pub struct SearchServiceClient<T> {
13427        inner: tonic::client::Grpc<T>,
13428    }
13429    impl SearchServiceClient<tonic::transport::Channel> {
13430        /// Attempt to create a new client by connecting to a given endpoint.
13431        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
13432        where
13433            D: TryInto<tonic::transport::Endpoint>,
13434            D::Error: Into<StdError>,
13435        {
13436            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
13437            Ok(Self::new(conn))
13438        }
13439    }
13440    impl<T> SearchServiceClient<T>
13441    where
13442        T: tonic::client::GrpcService<tonic::body::BoxBody>,
13443        T::Error: Into<StdError>,
13444        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
13445        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
13446    {
13447        pub fn new(inner: T) -> Self {
13448            let inner = tonic::client::Grpc::new(inner);
13449            Self { inner }
13450        }
13451        pub fn with_origin(inner: T, origin: Uri) -> Self {
13452            let inner = tonic::client::Grpc::with_origin(inner, origin);
13453            Self { inner }
13454        }
13455        pub fn with_interceptor<F>(
13456            inner: T,
13457            interceptor: F,
13458        ) -> SearchServiceClient<InterceptedService<T, F>>
13459        where
13460            F: tonic::service::Interceptor,
13461            T::ResponseBody: Default,
13462            T: tonic::codegen::Service<
13463                http::Request<tonic::body::BoxBody>,
13464                Response = http::Response<
13465                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
13466                >,
13467            >,
13468            <T as tonic::codegen::Service<
13469                http::Request<tonic::body::BoxBody>,
13470            >>::Error: Into<StdError> + Send + Sync,
13471        {
13472            SearchServiceClient::new(InterceptedService::new(inner, interceptor))
13473        }
13474        /// Compress requests with the given encoding.
13475        ///
13476        /// This requires the server to support it otherwise it might respond with an
13477        /// error.
13478        #[must_use]
13479        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
13480            self.inner = self.inner.send_compressed(encoding);
13481            self
13482        }
13483        /// Enable decompressing responses.
13484        #[must_use]
13485        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
13486            self.inner = self.inner.accept_compressed(encoding);
13487            self
13488        }
13489        /// Limits the maximum size of a decoded message.
13490        ///
13491        /// Default: `4MB`
13492        #[must_use]
13493        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
13494            self.inner = self.inner.max_decoding_message_size(limit);
13495            self
13496        }
13497        /// Limits the maximum size of an encoded message.
13498        ///
13499        /// Default: `usize::MAX`
13500        #[must_use]
13501        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
13502            self.inner = self.inner.max_encoding_message_size(limit);
13503            self
13504        }
13505        /// SearchResources
13506        ///
13507        /// Status: BETA
13508        ///
13509        /// Searches the index for applicable resources (only public + private can be searched)
13510        pub async fn search_resources(
13511            &mut self,
13512            request: impl tonic::IntoRequest<super::SearchResourcesRequest>,
13513        ) -> std::result::Result<
13514            tonic::Response<super::SearchResourcesResponse>,
13515            tonic::Status,
13516        > {
13517            self.inner
13518                .ready()
13519                .await
13520                .map_err(|e| {
13521                    tonic::Status::new(
13522                        tonic::Code::Unknown,
13523                        format!("Service was not ready: {}", e.into()),
13524                    )
13525                })?;
13526            let codec = tonic::codec::ProstCodec::default();
13527            let path = http::uri::PathAndQuery::from_static(
13528                "/aruna.api.storage.services.v2.SearchService/SearchResources",
13529            );
13530            let mut req = request.into_request();
13531            req.extensions_mut()
13532                .insert(
13533                    GrpcMethod::new(
13534                        "aruna.api.storage.services.v2.SearchService",
13535                        "SearchResources",
13536                    ),
13537                );
13538            self.inner.unary(req, path, codec).await
13539        }
13540        /// GetResource
13541        ///
13542        /// Status: BETA
13543        ///
13544        /// Retrieves resource by its ID.
13545        pub async fn get_resource(
13546            &mut self,
13547            request: impl tonic::IntoRequest<super::GetResourceRequest>,
13548        ) -> std::result::Result<
13549            tonic::Response<super::GetResourceResponse>,
13550            tonic::Status,
13551        > {
13552            self.inner
13553                .ready()
13554                .await
13555                .map_err(|e| {
13556                    tonic::Status::new(
13557                        tonic::Code::Unknown,
13558                        format!("Service was not ready: {}", e.into()),
13559                    )
13560                })?;
13561            let codec = tonic::codec::ProstCodec::default();
13562            let path = http::uri::PathAndQuery::from_static(
13563                "/aruna.api.storage.services.v2.SearchService/GetResource",
13564            );
13565            let mut req = request.into_request();
13566            req.extensions_mut()
13567                .insert(
13568                    GrpcMethod::new(
13569                        "aruna.api.storage.services.v2.SearchService",
13570                        "GetResource",
13571                    ),
13572                );
13573            self.inner.unary(req, path, codec).await
13574        }
13575        /// GetResources
13576        ///
13577        /// Status: BETA
13578        ///
13579        /// Retrieves resources by a list of IDs.
13580        pub async fn get_resources(
13581            &mut self,
13582            request: impl tonic::IntoRequest<super::GetResourcesRequest>,
13583        ) -> std::result::Result<
13584            tonic::Response<super::GetResourcesResponse>,
13585            tonic::Status,
13586        > {
13587            self.inner
13588                .ready()
13589                .await
13590                .map_err(|e| {
13591                    tonic::Status::new(
13592                        tonic::Code::Unknown,
13593                        format!("Service was not ready: {}", e.into()),
13594                    )
13595                })?;
13596            let codec = tonic::codec::ProstCodec::default();
13597            let path = http::uri::PathAndQuery::from_static(
13598                "/aruna.api.storage.services.v2.SearchService/GetResources",
13599            );
13600            let mut req = request.into_request();
13601            req.extensions_mut()
13602                .insert(
13603                    GrpcMethod::new(
13604                        "aruna.api.storage.services.v2.SearchService",
13605                        "GetResources",
13606                    ),
13607                );
13608            self.inner.unary(req, path, codec).await
13609        }
13610        /// RequestResourceAccess
13611        ///
13612        /// Status: ALPHA
13613        ///
13614        /// Requests access to resources
13615        pub async fn request_resource_access(
13616            &mut self,
13617            request: impl tonic::IntoRequest<super::RequestResourceAccessRequest>,
13618        ) -> std::result::Result<
13619            tonic::Response<super::RequestResourceAccessResponse>,
13620            tonic::Status,
13621        > {
13622            self.inner
13623                .ready()
13624                .await
13625                .map_err(|e| {
13626                    tonic::Status::new(
13627                        tonic::Code::Unknown,
13628                        format!("Service was not ready: {}", e.into()),
13629                    )
13630                })?;
13631            let codec = tonic::codec::ProstCodec::default();
13632            let path = http::uri::PathAndQuery::from_static(
13633                "/aruna.api.storage.services.v2.SearchService/RequestResourceAccess",
13634            );
13635            let mut req = request.into_request();
13636            req.extensions_mut()
13637                .insert(
13638                    GrpcMethod::new(
13639                        "aruna.api.storage.services.v2.SearchService",
13640                        "RequestResourceAccess",
13641                    ),
13642                );
13643            self.inner.unary(req, path, codec).await
13644        }
13645    }
13646}
13647/// Generated server implementations.
13648pub mod search_service_server {
13649    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
13650    use tonic::codegen::*;
13651    /// Generated trait containing gRPC methods that should be implemented for use with SearchServiceServer.
13652    #[async_trait]
13653    pub trait SearchService: Send + Sync + 'static {
13654        /// SearchResources
13655        ///
13656        /// Status: BETA
13657        ///
13658        /// Searches the index for applicable resources (only public + private can be searched)
13659        async fn search_resources(
13660            &self,
13661            request: tonic::Request<super::SearchResourcesRequest>,
13662        ) -> std::result::Result<
13663            tonic::Response<super::SearchResourcesResponse>,
13664            tonic::Status,
13665        >;
13666        /// GetResource
13667        ///
13668        /// Status: BETA
13669        ///
13670        /// Retrieves resource by its ID.
13671        async fn get_resource(
13672            &self,
13673            request: tonic::Request<super::GetResourceRequest>,
13674        ) -> std::result::Result<
13675            tonic::Response<super::GetResourceResponse>,
13676            tonic::Status,
13677        >;
13678        /// GetResources
13679        ///
13680        /// Status: BETA
13681        ///
13682        /// Retrieves resources by a list of IDs.
13683        async fn get_resources(
13684            &self,
13685            request: tonic::Request<super::GetResourcesRequest>,
13686        ) -> std::result::Result<
13687            tonic::Response<super::GetResourcesResponse>,
13688            tonic::Status,
13689        >;
13690        /// RequestResourceAccess
13691        ///
13692        /// Status: ALPHA
13693        ///
13694        /// Requests access to resources
13695        async fn request_resource_access(
13696            &self,
13697            request: tonic::Request<super::RequestResourceAccessRequest>,
13698        ) -> std::result::Result<
13699            tonic::Response<super::RequestResourceAccessResponse>,
13700            tonic::Status,
13701        >;
13702    }
13703    /// SearchService
13704    ///
13705    /// Status: BETA
13706    ///
13707    /// SearchService is used to query resources in the index and get a public view of them.
13708    #[derive(Debug)]
13709    pub struct SearchServiceServer<T: SearchService> {
13710        inner: _Inner<T>,
13711        accept_compression_encodings: EnabledCompressionEncodings,
13712        send_compression_encodings: EnabledCompressionEncodings,
13713        max_decoding_message_size: Option<usize>,
13714        max_encoding_message_size: Option<usize>,
13715    }
13716    struct _Inner<T>(Arc<T>);
13717    impl<T: SearchService> SearchServiceServer<T> {
13718        pub fn new(inner: T) -> Self {
13719            Self::from_arc(Arc::new(inner))
13720        }
13721        pub fn from_arc(inner: Arc<T>) -> Self {
13722            let inner = _Inner(inner);
13723            Self {
13724                inner,
13725                accept_compression_encodings: Default::default(),
13726                send_compression_encodings: Default::default(),
13727                max_decoding_message_size: None,
13728                max_encoding_message_size: None,
13729            }
13730        }
13731        pub fn with_interceptor<F>(
13732            inner: T,
13733            interceptor: F,
13734        ) -> InterceptedService<Self, F>
13735        where
13736            F: tonic::service::Interceptor,
13737        {
13738            InterceptedService::new(Self::new(inner), interceptor)
13739        }
13740        /// Enable decompressing requests with the given encoding.
13741        #[must_use]
13742        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
13743            self.accept_compression_encodings.enable(encoding);
13744            self
13745        }
13746        /// Compress responses with the given encoding, if the client supports it.
13747        #[must_use]
13748        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
13749            self.send_compression_encodings.enable(encoding);
13750            self
13751        }
13752        /// Limits the maximum size of a decoded message.
13753        ///
13754        /// Default: `4MB`
13755        #[must_use]
13756        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
13757            self.max_decoding_message_size = Some(limit);
13758            self
13759        }
13760        /// Limits the maximum size of an encoded message.
13761        ///
13762        /// Default: `usize::MAX`
13763        #[must_use]
13764        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
13765            self.max_encoding_message_size = Some(limit);
13766            self
13767        }
13768    }
13769    impl<T, B> tonic::codegen::Service<http::Request<B>> for SearchServiceServer<T>
13770    where
13771        T: SearchService,
13772        B: Body + Send + 'static,
13773        B::Error: Into<StdError> + Send + 'static,
13774    {
13775        type Response = http::Response<tonic::body::BoxBody>;
13776        type Error = std::convert::Infallible;
13777        type Future = BoxFuture<Self::Response, Self::Error>;
13778        fn poll_ready(
13779            &mut self,
13780            _cx: &mut Context<'_>,
13781        ) -> Poll<std::result::Result<(), Self::Error>> {
13782            Poll::Ready(Ok(()))
13783        }
13784        fn call(&mut self, req: http::Request<B>) -> Self::Future {
13785            let inner = self.inner.clone();
13786            match req.uri().path() {
13787                "/aruna.api.storage.services.v2.SearchService/SearchResources" => {
13788                    #[allow(non_camel_case_types)]
13789                    struct SearchResourcesSvc<T: SearchService>(pub Arc<T>);
13790                    impl<
13791                        T: SearchService,
13792                    > tonic::server::UnaryService<super::SearchResourcesRequest>
13793                    for SearchResourcesSvc<T> {
13794                        type Response = super::SearchResourcesResponse;
13795                        type Future = BoxFuture<
13796                            tonic::Response<Self::Response>,
13797                            tonic::Status,
13798                        >;
13799                        fn call(
13800                            &mut self,
13801                            request: tonic::Request<super::SearchResourcesRequest>,
13802                        ) -> Self::Future {
13803                            let inner = Arc::clone(&self.0);
13804                            let fut = async move {
13805                                <T as SearchService>::search_resources(&inner, request)
13806                                    .await
13807                            };
13808                            Box::pin(fut)
13809                        }
13810                    }
13811                    let accept_compression_encodings = self.accept_compression_encodings;
13812                    let send_compression_encodings = self.send_compression_encodings;
13813                    let max_decoding_message_size = self.max_decoding_message_size;
13814                    let max_encoding_message_size = self.max_encoding_message_size;
13815                    let inner = self.inner.clone();
13816                    let fut = async move {
13817                        let inner = inner.0;
13818                        let method = SearchResourcesSvc(inner);
13819                        let codec = tonic::codec::ProstCodec::default();
13820                        let mut grpc = tonic::server::Grpc::new(codec)
13821                            .apply_compression_config(
13822                                accept_compression_encodings,
13823                                send_compression_encodings,
13824                            )
13825                            .apply_max_message_size_config(
13826                                max_decoding_message_size,
13827                                max_encoding_message_size,
13828                            );
13829                        let res = grpc.unary(method, req).await;
13830                        Ok(res)
13831                    };
13832                    Box::pin(fut)
13833                }
13834                "/aruna.api.storage.services.v2.SearchService/GetResource" => {
13835                    #[allow(non_camel_case_types)]
13836                    struct GetResourceSvc<T: SearchService>(pub Arc<T>);
13837                    impl<
13838                        T: SearchService,
13839                    > tonic::server::UnaryService<super::GetResourceRequest>
13840                    for GetResourceSvc<T> {
13841                        type Response = super::GetResourceResponse;
13842                        type Future = BoxFuture<
13843                            tonic::Response<Self::Response>,
13844                            tonic::Status,
13845                        >;
13846                        fn call(
13847                            &mut self,
13848                            request: tonic::Request<super::GetResourceRequest>,
13849                        ) -> Self::Future {
13850                            let inner = Arc::clone(&self.0);
13851                            let fut = async move {
13852                                <T as SearchService>::get_resource(&inner, request).await
13853                            };
13854                            Box::pin(fut)
13855                        }
13856                    }
13857                    let accept_compression_encodings = self.accept_compression_encodings;
13858                    let send_compression_encodings = self.send_compression_encodings;
13859                    let max_decoding_message_size = self.max_decoding_message_size;
13860                    let max_encoding_message_size = self.max_encoding_message_size;
13861                    let inner = self.inner.clone();
13862                    let fut = async move {
13863                        let inner = inner.0;
13864                        let method = GetResourceSvc(inner);
13865                        let codec = tonic::codec::ProstCodec::default();
13866                        let mut grpc = tonic::server::Grpc::new(codec)
13867                            .apply_compression_config(
13868                                accept_compression_encodings,
13869                                send_compression_encodings,
13870                            )
13871                            .apply_max_message_size_config(
13872                                max_decoding_message_size,
13873                                max_encoding_message_size,
13874                            );
13875                        let res = grpc.unary(method, req).await;
13876                        Ok(res)
13877                    };
13878                    Box::pin(fut)
13879                }
13880                "/aruna.api.storage.services.v2.SearchService/GetResources" => {
13881                    #[allow(non_camel_case_types)]
13882                    struct GetResourcesSvc<T: SearchService>(pub Arc<T>);
13883                    impl<
13884                        T: SearchService,
13885                    > tonic::server::UnaryService<super::GetResourcesRequest>
13886                    for GetResourcesSvc<T> {
13887                        type Response = super::GetResourcesResponse;
13888                        type Future = BoxFuture<
13889                            tonic::Response<Self::Response>,
13890                            tonic::Status,
13891                        >;
13892                        fn call(
13893                            &mut self,
13894                            request: tonic::Request<super::GetResourcesRequest>,
13895                        ) -> Self::Future {
13896                            let inner = Arc::clone(&self.0);
13897                            let fut = async move {
13898                                <T as SearchService>::get_resources(&inner, request).await
13899                            };
13900                            Box::pin(fut)
13901                        }
13902                    }
13903                    let accept_compression_encodings = self.accept_compression_encodings;
13904                    let send_compression_encodings = self.send_compression_encodings;
13905                    let max_decoding_message_size = self.max_decoding_message_size;
13906                    let max_encoding_message_size = self.max_encoding_message_size;
13907                    let inner = self.inner.clone();
13908                    let fut = async move {
13909                        let inner = inner.0;
13910                        let method = GetResourcesSvc(inner);
13911                        let codec = tonic::codec::ProstCodec::default();
13912                        let mut grpc = tonic::server::Grpc::new(codec)
13913                            .apply_compression_config(
13914                                accept_compression_encodings,
13915                                send_compression_encodings,
13916                            )
13917                            .apply_max_message_size_config(
13918                                max_decoding_message_size,
13919                                max_encoding_message_size,
13920                            );
13921                        let res = grpc.unary(method, req).await;
13922                        Ok(res)
13923                    };
13924                    Box::pin(fut)
13925                }
13926                "/aruna.api.storage.services.v2.SearchService/RequestResourceAccess" => {
13927                    #[allow(non_camel_case_types)]
13928                    struct RequestResourceAccessSvc<T: SearchService>(pub Arc<T>);
13929                    impl<
13930                        T: SearchService,
13931                    > tonic::server::UnaryService<super::RequestResourceAccessRequest>
13932                    for RequestResourceAccessSvc<T> {
13933                        type Response = super::RequestResourceAccessResponse;
13934                        type Future = BoxFuture<
13935                            tonic::Response<Self::Response>,
13936                            tonic::Status,
13937                        >;
13938                        fn call(
13939                            &mut self,
13940                            request: tonic::Request<super::RequestResourceAccessRequest>,
13941                        ) -> Self::Future {
13942                            let inner = Arc::clone(&self.0);
13943                            let fut = async move {
13944                                <T as SearchService>::request_resource_access(
13945                                        &inner,
13946                                        request,
13947                                    )
13948                                    .await
13949                            };
13950                            Box::pin(fut)
13951                        }
13952                    }
13953                    let accept_compression_encodings = self.accept_compression_encodings;
13954                    let send_compression_encodings = self.send_compression_encodings;
13955                    let max_decoding_message_size = self.max_decoding_message_size;
13956                    let max_encoding_message_size = self.max_encoding_message_size;
13957                    let inner = self.inner.clone();
13958                    let fut = async move {
13959                        let inner = inner.0;
13960                        let method = RequestResourceAccessSvc(inner);
13961                        let codec = tonic::codec::ProstCodec::default();
13962                        let mut grpc = tonic::server::Grpc::new(codec)
13963                            .apply_compression_config(
13964                                accept_compression_encodings,
13965                                send_compression_encodings,
13966                            )
13967                            .apply_max_message_size_config(
13968                                max_decoding_message_size,
13969                                max_encoding_message_size,
13970                            );
13971                        let res = grpc.unary(method, req).await;
13972                        Ok(res)
13973                    };
13974                    Box::pin(fut)
13975                }
13976                _ => {
13977                    Box::pin(async move {
13978                        Ok(
13979                            http::Response::builder()
13980                                .status(200)
13981                                .header("grpc-status", "12")
13982                                .header("content-type", "application/grpc")
13983                                .body(empty_body())
13984                                .unwrap(),
13985                        )
13986                    })
13987                }
13988            }
13989        }
13990    }
13991    impl<T: SearchService> Clone for SearchServiceServer<T> {
13992        fn clone(&self) -> Self {
13993            let inner = self.inner.clone();
13994            Self {
13995                inner,
13996                accept_compression_encodings: self.accept_compression_encodings,
13997                send_compression_encodings: self.send_compression_encodings,
13998                max_decoding_message_size: self.max_decoding_message_size,
13999                max_encoding_message_size: self.max_encoding_message_size,
14000            }
14001        }
14002    }
14003    impl<T: SearchService> Clone for _Inner<T> {
14004        fn clone(&self) -> Self {
14005            Self(Arc::clone(&self.0))
14006        }
14007    }
14008    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
14009        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14010            write!(f, "{:?}", self.0)
14011        }
14012    }
14013    impl<T: SearchService> tonic::server::NamedService for SearchServiceServer<T> {
14014        const NAME: &'static str = "aruna.api.storage.services.v2.SearchService";
14015    }
14016}
14017#[derive(serde::Deserialize, serde::Serialize)]
14018#[allow(clippy::derive_partial_eq_without_eq)]
14019#[derive(Clone, PartialEq, ::prost::Message)]
14020pub struct RegisterUserRequest {
14021    /// user_displayname
14022    #[prost(string, tag = "1")]
14023    pub display_name: ::prost::alloc::string::String,
14024    /// Mail address (optional)
14025    #[prost(string, tag = "2")]
14026    pub email: ::prost::alloc::string::String,
14027    /// Project hint description string (optional)
14028    #[prost(string, tag = "3")]
14029    pub project: ::prost::alloc::string::String,
14030}
14031#[derive(serde::Deserialize, serde::Serialize)]
14032#[allow(clippy::derive_partial_eq_without_eq)]
14033#[derive(Clone, PartialEq, ::prost::Message)]
14034pub struct RegisterUserResponse {
14035    /// Created user id
14036    #[prost(string, tag = "1")]
14037    pub user_id: ::prost::alloc::string::String,
14038}
14039#[derive(serde::Deserialize, serde::Serialize)]
14040#[allow(clippy::derive_partial_eq_without_eq)]
14041#[derive(Clone, PartialEq, ::prost::Message)]
14042pub struct CreateApiTokenRequest {
14043    /// Token name
14044    #[prost(string, tag = "1")]
14045    pub name: ::prost::alloc::string::String,
14046    /// Personal or resource specific
14047    #[prost(message, optional, tag = "2")]
14048    pub permission: ::core::option::Option<super::super::models::v2::Permission>,
14049    /// Token expiry
14050    #[prost(message, optional, tag = "3")]
14051    pub expires_at: ::core::option::Option<::prost_wkt_types::Timestamp>,
14052}
14053#[derive(serde::Deserialize, serde::Serialize)]
14054#[allow(clippy::derive_partial_eq_without_eq)]
14055#[derive(Clone, PartialEq, ::prost::Message)]
14056pub struct CreateApiTokenResponse {
14057    /// This contains only the token description
14058    #[prost(message, optional, tag = "1")]
14059    pub token: ::core::option::Option<super::super::models::v2::Token>,
14060    /// This is the actual secret token
14061    /// Attention, this can not be recreated and needs to be stored securely
14062    /// New tokens will always contain a new secret
14063    #[prost(string, tag = "2")]
14064    pub token_secret: ::prost::alloc::string::String,
14065}
14066#[derive(serde::Deserialize, serde::Serialize)]
14067#[allow(clippy::derive_partial_eq_without_eq)]
14068#[derive(Clone, PartialEq, ::prost::Message)]
14069pub struct GetApiTokenRequest {
14070    /// The token id
14071    #[prost(string, tag = "1")]
14072    pub token_id: ::prost::alloc::string::String,
14073}
14074#[derive(serde::Deserialize, serde::Serialize)]
14075#[allow(clippy::derive_partial_eq_without_eq)]
14076#[derive(Clone, PartialEq, ::prost::Message)]
14077pub struct GetApiTokenResponse {
14078    /// List of API tokens
14079    #[prost(message, optional, tag = "1")]
14080    pub token: ::core::option::Option<super::super::models::v2::Token>,
14081}
14082#[derive(serde::Deserialize, serde::Serialize)]
14083#[allow(clippy::derive_partial_eq_without_eq)]
14084#[derive(Clone, PartialEq, ::prost::Message)]
14085pub struct GetApiTokensRequest {}
14086#[derive(serde::Deserialize, serde::Serialize)]
14087#[allow(clippy::derive_partial_eq_without_eq)]
14088#[derive(Clone, PartialEq, ::prost::Message)]
14089pub struct GetApiTokensResponse {
14090    /// List of API tokens with redacted actual token
14091    #[prost(message, repeated, tag = "1")]
14092    pub tokens: ::prost::alloc::vec::Vec<super::super::models::v2::Token>,
14093}
14094#[derive(serde::Deserialize, serde::Serialize)]
14095#[allow(clippy::derive_partial_eq_without_eq)]
14096#[derive(Clone, PartialEq, ::prost::Message)]
14097pub struct DeleteApiTokenRequest {
14098    /// The token_id
14099    #[prost(string, tag = "1")]
14100    pub token_id: ::prost::alloc::string::String,
14101}
14102#[derive(serde::Deserialize, serde::Serialize)]
14103#[allow(clippy::derive_partial_eq_without_eq)]
14104#[derive(Clone, PartialEq, ::prost::Message)]
14105pub struct DeleteApiTokenResponse {}
14106#[derive(serde::Deserialize, serde::Serialize)]
14107#[allow(clippy::derive_partial_eq_without_eq)]
14108#[derive(Clone, PartialEq, ::prost::Message)]
14109pub struct DeleteApiTokensRequest {
14110    /// This request invalidates all tokens of a specific user
14111    /// usually the user_id is specified via the provided oidc or aruna token
14112    /// This user_id can be used by admins to invalidate all tokens of a specific
14113    /// user
14114    #[prost(string, tag = "1")]
14115    pub user_id: ::prost::alloc::string::String,
14116}
14117#[derive(serde::Deserialize, serde::Serialize)]
14118#[allow(clippy::derive_partial_eq_without_eq)]
14119#[derive(Clone, PartialEq, ::prost::Message)]
14120pub struct DeleteApiTokensResponse {}
14121#[derive(serde::Deserialize, serde::Serialize)]
14122#[allow(clippy::derive_partial_eq_without_eq)]
14123#[derive(Clone, PartialEq, ::prost::Message)]
14124pub struct GetUserRequest {
14125    /// Optional user_id
14126    #[prost(string, tag = "1")]
14127    pub user_id: ::prost::alloc::string::String,
14128}
14129#[derive(serde::Deserialize, serde::Serialize)]
14130#[allow(clippy::derive_partial_eq_without_eq)]
14131#[derive(Clone, PartialEq, ::prost::Message)]
14132pub struct GetUserResponse {
14133    /// User info
14134    #[prost(message, optional, tag = "1")]
14135    pub user: ::core::option::Option<super::super::models::v2::User>,
14136}
14137#[derive(serde::Deserialize, serde::Serialize)]
14138#[allow(clippy::derive_partial_eq_without_eq)]
14139#[derive(Clone, PartialEq, ::prost::Message)]
14140pub struct GetUserRedactedRequest {
14141    /// Optional user_id
14142    #[prost(string, tag = "1")]
14143    pub user_id: ::prost::alloc::string::String,
14144}
14145#[derive(serde::Deserialize, serde::Serialize)]
14146#[allow(clippy::derive_partial_eq_without_eq)]
14147#[derive(Clone, PartialEq, ::prost::Message)]
14148pub struct GetUserRedactedResponse {
14149    /// User info
14150    #[prost(message, optional, tag = "1")]
14151    pub user: ::core::option::Option<super::super::models::v2::User>,
14152}
14153#[derive(serde::Deserialize, serde::Serialize)]
14154#[allow(clippy::derive_partial_eq_without_eq)]
14155#[derive(Clone, PartialEq, ::prost::Message)]
14156pub struct UpdateUserDisplayNameRequest {
14157    /// New display name
14158    #[prost(string, tag = "1")]
14159    pub new_display_name: ::prost::alloc::string::String,
14160}
14161#[derive(serde::Deserialize, serde::Serialize)]
14162#[allow(clippy::derive_partial_eq_without_eq)]
14163#[derive(Clone, PartialEq, ::prost::Message)]
14164pub struct UpdateUserDisplayNameResponse {
14165    /// Updated user info
14166    #[prost(message, optional, tag = "1")]
14167    pub user: ::core::option::Option<super::super::models::v2::User>,
14168}
14169#[derive(serde::Deserialize, serde::Serialize)]
14170#[allow(clippy::derive_partial_eq_without_eq)]
14171#[derive(Clone, PartialEq, ::prost::Message)]
14172pub struct ActivateUserRequest {
14173    /// User to activate
14174    #[prost(string, tag = "1")]
14175    pub user_id: ::prost::alloc::string::String,
14176}
14177#[derive(serde::Deserialize, serde::Serialize)]
14178#[allow(clippy::derive_partial_eq_without_eq)]
14179#[derive(Clone, PartialEq, ::prost::Message)]
14180pub struct ActivateUserResponse {}
14181#[derive(serde::Deserialize, serde::Serialize)]
14182#[allow(clippy::derive_partial_eq_without_eq)]
14183#[derive(Clone, PartialEq, ::prost::Message)]
14184pub struct GetNotActivatedUsersRequest {}
14185#[derive(serde::Deserialize, serde::Serialize)]
14186#[allow(clippy::derive_partial_eq_without_eq)]
14187#[derive(Clone, PartialEq, ::prost::Message)]
14188pub struct GetNotActivatedUsersResponse {
14189    /// List of users that are not yet activated
14190    #[prost(message, repeated, tag = "1")]
14191    pub users: ::prost::alloc::vec::Vec<super::super::models::v2::User>,
14192}
14193#[derive(serde::Deserialize, serde::Serialize)]
14194#[allow(clippy::derive_partial_eq_without_eq)]
14195#[derive(Clone, PartialEq, ::prost::Message)]
14196pub struct GetAllUsersRequest {}
14197#[derive(serde::Deserialize, serde::Serialize)]
14198#[allow(clippy::derive_partial_eq_without_eq)]
14199#[derive(Clone, PartialEq, ::prost::Message)]
14200pub struct GetAllUsersResponse {
14201    #[prost(message, repeated, tag = "1")]
14202    pub user: ::prost::alloc::vec::Vec<super::super::models::v2::User>,
14203}
14204#[derive(serde::Deserialize, serde::Serialize)]
14205#[allow(clippy::derive_partial_eq_without_eq)]
14206#[derive(Clone, PartialEq, ::prost::Message)]
14207pub struct DeactivateUserRequest {
14208    /// User to activate
14209    #[prost(string, tag = "1")]
14210    pub user_id: ::prost::alloc::string::String,
14211}
14212#[derive(serde::Deserialize, serde::Serialize)]
14213#[allow(clippy::derive_partial_eq_without_eq)]
14214#[derive(Clone, PartialEq, ::prost::Message)]
14215pub struct DeactivateUserResponse {}
14216#[derive(serde::Deserialize, serde::Serialize)]
14217#[allow(clippy::derive_partial_eq_without_eq)]
14218#[derive(Clone, PartialEq, ::prost::Message)]
14219pub struct UpdateUserEmailRequest {
14220    #[prost(string, tag = "1")]
14221    pub user_id: ::prost::alloc::string::String,
14222    /// If new email is empty == unsubscribe
14223    #[prost(string, tag = "2")]
14224    pub new_email: ::prost::alloc::string::String,
14225}
14226#[derive(serde::Deserialize, serde::Serialize)]
14227#[allow(clippy::derive_partial_eq_without_eq)]
14228#[derive(Clone, PartialEq, ::prost::Message)]
14229pub struct UpdateUserEmailResponse {
14230    #[prost(message, optional, tag = "1")]
14231    pub user: ::core::option::Option<super::super::models::v2::User>,
14232}
14233#[derive(serde::Deserialize, serde::Serialize)]
14234#[allow(clippy::derive_partial_eq_without_eq)]
14235#[derive(Clone, PartialEq, ::prost::Message)]
14236pub struct CreateS3CredentialsUserTokenRequest {
14237    #[prost(string, tag = "1")]
14238    pub endpoint_id: ::prost::alloc::string::String,
14239}
14240#[derive(serde::Deserialize, serde::Serialize)]
14241#[allow(clippy::derive_partial_eq_without_eq)]
14242#[derive(Clone, PartialEq, ::prost::Message)]
14243pub struct CreateS3CredentialsUserTokenResponse {
14244    #[prost(string, tag = "1")]
14245    pub s3_access_key: ::prost::alloc::string::String,
14246    #[prost(string, tag = "2")]
14247    pub s3_secret_key: ::prost::alloc::string::String,
14248    #[prost(string, tag = "3")]
14249    pub s3_endpoint_url: ::prost::alloc::string::String,
14250}
14251#[derive(serde::Deserialize, serde::Serialize)]
14252#[allow(clippy::derive_partial_eq_without_eq)]
14253#[derive(Clone, PartialEq, ::prost::Message)]
14254pub struct GetS3CredentialsUserTokenRequest {
14255    #[prost(string, tag = "1")]
14256    pub endpoint_id: ::prost::alloc::string::String,
14257}
14258#[derive(serde::Deserialize, serde::Serialize)]
14259#[allow(clippy::derive_partial_eq_without_eq)]
14260#[derive(Clone, PartialEq, ::prost::Message)]
14261pub struct GetS3CredentialsUserTokenResponse {
14262    #[prost(string, tag = "1")]
14263    pub s3_access_key: ::prost::alloc::string::String,
14264    #[prost(string, tag = "2")]
14265    pub s3_secret_key: ::prost::alloc::string::String,
14266    #[prost(string, tag = "3")]
14267    pub s3_endpoint_url: ::prost::alloc::string::String,
14268}
14269#[derive(serde::Deserialize, serde::Serialize)]
14270#[allow(clippy::derive_partial_eq_without_eq)]
14271#[derive(Clone, PartialEq, ::prost::Message)]
14272pub struct DeleteS3CredentialsUserTokenRequest {
14273    #[prost(string, tag = "1")]
14274    pub endpoint_id: ::prost::alloc::string::String,
14275}
14276#[derive(serde::Deserialize, serde::Serialize)]
14277#[allow(clippy::derive_partial_eq_without_eq)]
14278#[derive(Clone, PartialEq, ::prost::Message)]
14279pub struct DeleteS3CredentialsUserResponse {}
14280#[derive(serde::Deserialize, serde::Serialize)]
14281#[allow(clippy::derive_partial_eq_without_eq)]
14282#[derive(Clone, PartialEq, ::prost::Message)]
14283pub struct GetDataproxyTokenUserRequest {
14284    #[prost(string, tag = "1")]
14285    pub user_id: ::prost::alloc::string::String,
14286    #[prost(string, tag = "2")]
14287    pub endpoint_id: ::prost::alloc::string::String,
14288    #[prost(message, optional, tag = "3")]
14289    pub context: ::core::option::Option<super::super::models::v2::Context>,
14290}
14291#[derive(serde::Deserialize, serde::Serialize)]
14292#[allow(clippy::derive_partial_eq_without_eq)]
14293#[derive(Clone, PartialEq, ::prost::Message)]
14294pub struct GetDataproxyTokenUserResponse {
14295    #[prost(string, tag = "1")]
14296    pub token: ::prost::alloc::string::String,
14297}
14298#[derive(serde::Deserialize, serde::Serialize)]
14299#[allow(clippy::derive_partial_eq_without_eq)]
14300#[derive(Clone, PartialEq, ::prost::Message)]
14301pub struct GetPersonalNotificationsRequest {}
14302#[derive(serde::Deserialize, serde::Serialize)]
14303#[allow(clippy::derive_partial_eq_without_eq)]
14304#[derive(Clone, PartialEq, ::prost::Message)]
14305pub struct GetPersonalNotificationsResponse {
14306    #[prost(message, repeated, tag = "1")]
14307    pub notifications: ::prost::alloc::vec::Vec<PersonalNotification>,
14308}
14309#[derive(serde::Deserialize, serde::Serialize)]
14310#[allow(clippy::derive_partial_eq_without_eq)]
14311#[derive(Clone, PartialEq, ::prost::Message)]
14312pub struct AcknowledgePersonalNotificationsRequest {
14313    #[prost(string, repeated, tag = "1")]
14314    pub notification_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
14315}
14316#[derive(serde::Deserialize, serde::Serialize)]
14317#[allow(clippy::derive_partial_eq_without_eq)]
14318#[derive(Clone, PartialEq, ::prost::Message)]
14319pub struct AcknowledgePersonalNotificationsResponse {}
14320#[derive(serde::Deserialize, serde::Serialize)]
14321#[allow(clippy::derive_partial_eq_without_eq)]
14322#[derive(Clone, PartialEq, ::prost::Message)]
14323pub struct Reference {
14324    #[prost(enumeration = "ReferenceType", tag = "1")]
14325    pub ref_type: i32,
14326    /// "User A" | file.txt
14327    #[prost(string, tag = "2")]
14328    pub ref_name: ::prost::alloc::string::String,
14329    /// 0123AAA123AAA (id)
14330    #[prost(string, tag = "3")]
14331    pub ref_value: ::prost::alloc::string::String,
14332}
14333#[derive(serde::Deserialize, serde::Serialize)]
14334#[allow(clippy::derive_partial_eq_without_eq)]
14335#[derive(Clone, PartialEq, ::prost::Message)]
14336pub struct PersonalNotification {
14337    #[prost(string, tag = "1")]
14338    pub id: ::prost::alloc::string::String,
14339    #[prost(enumeration = "PersonalNotificationVariant", tag = "2")]
14340    pub variant: i32,
14341    /// User A has requested access for resource B
14342    #[prost(string, tag = "3")]
14343    pub message: ::prost::alloc::string::String,
14344    /// References to resource in the "message"
14345    #[prost(message, repeated, tag = "4")]
14346    pub refs: ::prost::alloc::vec::Vec<Reference>,
14347}
14348#[derive(serde::Deserialize, serde::Serialize)]
14349#[allow(clippy::derive_partial_eq_without_eq)]
14350#[derive(Clone, PartialEq, ::prost::Message)]
14351pub struct AddOidcProviderRequest {
14352    #[prost(string, tag = "1")]
14353    pub new_access_token: ::prost::alloc::string::String,
14354}
14355#[derive(serde::Deserialize, serde::Serialize)]
14356#[allow(clippy::derive_partial_eq_without_eq)]
14357#[derive(Clone, PartialEq, ::prost::Message)]
14358pub struct AddOidcProviderResponse {
14359    #[prost(message, optional, tag = "1")]
14360    pub user: ::core::option::Option<super::super::models::v2::User>,
14361}
14362#[derive(serde::Deserialize, serde::Serialize)]
14363#[allow(clippy::derive_partial_eq_without_eq)]
14364#[derive(Clone, PartialEq, ::prost::Message)]
14365pub struct RemoveOidcProviderRequest {
14366    #[prost(string, tag = "1")]
14367    pub provider_url: ::prost::alloc::string::String,
14368}
14369#[derive(serde::Deserialize, serde::Serialize)]
14370#[allow(clippy::derive_partial_eq_without_eq)]
14371#[derive(Clone, PartialEq, ::prost::Message)]
14372pub struct RemoveOidcProviderResponse {
14373    #[prost(message, optional, tag = "1")]
14374    pub user: ::core::option::Option<super::super::models::v2::User>,
14375}
14376#[derive(serde::Deserialize, serde::Serialize)]
14377#[allow(clippy::derive_partial_eq_without_eq)]
14378#[derive(Clone, PartialEq, ::prost::Message)]
14379pub struct AddPubkeyUserRequest {
14380    #[prost(string, tag = "1")]
14381    pub public_key: ::prost::alloc::string::String,
14382}
14383#[derive(serde::Deserialize, serde::Serialize)]
14384#[allow(clippy::derive_partial_eq_without_eq)]
14385#[derive(Clone, PartialEq, ::prost::Message)]
14386pub struct AddPubkeyUserResponse {
14387    #[prost(message, optional, tag = "1")]
14388    pub user: ::core::option::Option<super::super::models::v2::User>,
14389}
14390#[derive(serde::Deserialize, serde::Serialize)]
14391#[allow(clippy::derive_partial_eq_without_eq)]
14392#[derive(Clone, PartialEq, ::prost::Message)]
14393pub struct AddTrustedEndpointsUserRequest {
14394    #[prost(string, tag = "1")]
14395    pub endpoint_id: ::prost::alloc::string::String,
14396}
14397#[derive(serde::Deserialize, serde::Serialize)]
14398#[allow(clippy::derive_partial_eq_without_eq)]
14399#[derive(Clone, PartialEq, ::prost::Message)]
14400pub struct AddTrustedEndpointsUserResponse {
14401    /// Here would be the place to add conditions
14402    /// why the request was denied
14403    #[prost(message, optional, tag = "1")]
14404    pub user: ::core::option::Option<super::super::models::v2::User>,
14405}
14406#[derive(serde::Deserialize, serde::Serialize)]
14407#[allow(clippy::derive_partial_eq_without_eq)]
14408#[derive(Clone, PartialEq, ::prost::Message)]
14409pub struct RemoveTrustedEndpointsUserRequest {
14410    #[prost(string, tag = "1")]
14411    pub endpoint_id: ::prost::alloc::string::String,
14412}
14413#[derive(serde::Deserialize, serde::Serialize)]
14414#[allow(clippy::derive_partial_eq_without_eq)]
14415#[derive(Clone, PartialEq, ::prost::Message)]
14416pub struct RemoveTrustedEndpointsUserResponse {
14417    #[prost(message, optional, tag = "1")]
14418    pub user: ::core::option::Option<super::super::models::v2::User>,
14419}
14420#[derive(serde::Deserialize, serde::Serialize)]
14421#[allow(clippy::derive_partial_eq_without_eq)]
14422#[derive(Clone, PartialEq, ::prost::Message)]
14423pub struct AddDataProxyAttributeUserRequest {
14424    #[prost(string, tag = "1")]
14425    pub user_id: ::prost::alloc::string::String,
14426    #[prost(message, optional, tag = "2")]
14427    pub attribute: ::core::option::Option<super::super::models::v2::DataProxyAttribute>,
14428}
14429#[derive(serde::Deserialize, serde::Serialize)]
14430#[allow(clippy::derive_partial_eq_without_eq)]
14431#[derive(Clone, PartialEq, ::prost::Message)]
14432pub struct AddDataProxyAttributeUserResponse {}
14433#[derive(serde::Deserialize, serde::Serialize)]
14434#[allow(clippy::derive_partial_eq_without_eq)]
14435#[derive(Clone, PartialEq, ::prost::Message)]
14436pub struct RemoveDataProxyAttributeUserRequest {
14437    #[prost(string, tag = "1")]
14438    pub user_id: ::prost::alloc::string::String,
14439    #[prost(string, tag = "2")]
14440    pub dataproxy_id: ::prost::alloc::string::String,
14441    #[prost(string, tag = "3")]
14442    pub attribute_name: ::prost::alloc::string::String,
14443}
14444#[derive(serde::Deserialize, serde::Serialize)]
14445#[allow(clippy::derive_partial_eq_without_eq)]
14446#[derive(Clone, PartialEq, ::prost::Message)]
14447pub struct RemoveDataProxyAttributeUserResponse {}
14448#[derive(serde::Deserialize, serde::Serialize)]
14449#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
14450#[repr(i32)]
14451pub enum ReferenceType {
14452    Unspecified = 0,
14453    User = 1,
14454    Resource = 2,
14455}
14456impl ReferenceType {
14457    /// String value of the enum field names used in the ProtoBuf definition.
14458    ///
14459    /// The values are not transformed in any way and thus are considered stable
14460    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
14461    pub fn as_str_name(&self) -> &'static str {
14462        match self {
14463            ReferenceType::Unspecified => "REFERENCE_TYPE_UNSPECIFIED",
14464            ReferenceType::User => "REFERENCE_TYPE_USER",
14465            ReferenceType::Resource => "REFERENCE_TYPE_RESOURCE",
14466        }
14467    }
14468    /// Creates an enum from field names used in the ProtoBuf definition.
14469    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
14470        match value {
14471            "REFERENCE_TYPE_UNSPECIFIED" => Some(Self::Unspecified),
14472            "REFERENCE_TYPE_USER" => Some(Self::User),
14473            "REFERENCE_TYPE_RESOURCE" => Some(Self::Resource),
14474            _ => None,
14475        }
14476    }
14477}
14478#[derive(serde::Deserialize, serde::Serialize)]
14479#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
14480#[repr(i32)]
14481pub enum PersonalNotificationVariant {
14482    Unspecified = 0,
14483    AccessRequested = 1,
14484    PermissionGranted = 2,
14485    PermissionRevoked = 3,
14486    PermissionUpdated = 4,
14487    Announcement = 5,
14488}
14489impl PersonalNotificationVariant {
14490    /// String value of the enum field names used in the ProtoBuf definition.
14491    ///
14492    /// The values are not transformed in any way and thus are considered stable
14493    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
14494    pub fn as_str_name(&self) -> &'static str {
14495        match self {
14496            PersonalNotificationVariant::Unspecified => {
14497                "PERSONAL_NOTIFICATION_VARIANT_UNSPECIFIED"
14498            }
14499            PersonalNotificationVariant::AccessRequested => {
14500                "PERSONAL_NOTIFICATION_VARIANT_ACCESS_REQUESTED"
14501            }
14502            PersonalNotificationVariant::PermissionGranted => {
14503                "PERSONAL_NOTIFICATION_VARIANT_PERMISSION_GRANTED"
14504            }
14505            PersonalNotificationVariant::PermissionRevoked => {
14506                "PERSONAL_NOTIFICATION_VARIANT_PERMISSION_REVOKED"
14507            }
14508            PersonalNotificationVariant::PermissionUpdated => {
14509                "PERSONAL_NOTIFICATION_VARIANT_PERMISSION_UPDATED"
14510            }
14511            PersonalNotificationVariant::Announcement => {
14512                "PERSONAL_NOTIFICATION_VARIANT_ANNOUNCEMENT"
14513            }
14514        }
14515    }
14516    /// Creates an enum from field names used in the ProtoBuf definition.
14517    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
14518        match value {
14519            "PERSONAL_NOTIFICATION_VARIANT_UNSPECIFIED" => Some(Self::Unspecified),
14520            "PERSONAL_NOTIFICATION_VARIANT_ACCESS_REQUESTED" => {
14521                Some(Self::AccessRequested)
14522            }
14523            "PERSONAL_NOTIFICATION_VARIANT_PERMISSION_GRANTED" => {
14524                Some(Self::PermissionGranted)
14525            }
14526            "PERSONAL_NOTIFICATION_VARIANT_PERMISSION_REVOKED" => {
14527                Some(Self::PermissionRevoked)
14528            }
14529            "PERSONAL_NOTIFICATION_VARIANT_PERMISSION_UPDATED" => {
14530                Some(Self::PermissionUpdated)
14531            }
14532            "PERSONAL_NOTIFICATION_VARIANT_ANNOUNCEMENT" => Some(Self::Announcement),
14533            _ => None,
14534        }
14535    }
14536}
14537/// Generated client implementations.
14538pub mod user_service_client {
14539    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
14540    use tonic::codegen::*;
14541    use tonic::codegen::http::Uri;
14542    /// UserService
14543    ///
14544    /// Status: BETA
14545    ///
14546    /// Contains all CRUD methods for users and associated resource
14547    #[derive(Debug, Clone)]
14548    pub struct UserServiceClient<T> {
14549        inner: tonic::client::Grpc<T>,
14550    }
14551    impl UserServiceClient<tonic::transport::Channel> {
14552        /// Attempt to create a new client by connecting to a given endpoint.
14553        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
14554        where
14555            D: TryInto<tonic::transport::Endpoint>,
14556            D::Error: Into<StdError>,
14557        {
14558            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
14559            Ok(Self::new(conn))
14560        }
14561    }
14562    impl<T> UserServiceClient<T>
14563    where
14564        T: tonic::client::GrpcService<tonic::body::BoxBody>,
14565        T::Error: Into<StdError>,
14566        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
14567        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
14568    {
14569        pub fn new(inner: T) -> Self {
14570            let inner = tonic::client::Grpc::new(inner);
14571            Self { inner }
14572        }
14573        pub fn with_origin(inner: T, origin: Uri) -> Self {
14574            let inner = tonic::client::Grpc::with_origin(inner, origin);
14575            Self { inner }
14576        }
14577        pub fn with_interceptor<F>(
14578            inner: T,
14579            interceptor: F,
14580        ) -> UserServiceClient<InterceptedService<T, F>>
14581        where
14582            F: tonic::service::Interceptor,
14583            T::ResponseBody: Default,
14584            T: tonic::codegen::Service<
14585                http::Request<tonic::body::BoxBody>,
14586                Response = http::Response<
14587                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
14588                >,
14589            >,
14590            <T as tonic::codegen::Service<
14591                http::Request<tonic::body::BoxBody>,
14592            >>::Error: Into<StdError> + Send + Sync,
14593        {
14594            UserServiceClient::new(InterceptedService::new(inner, interceptor))
14595        }
14596        /// Compress requests with the given encoding.
14597        ///
14598        /// This requires the server to support it otherwise it might respond with an
14599        /// error.
14600        #[must_use]
14601        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
14602            self.inner = self.inner.send_compressed(encoding);
14603            self
14604        }
14605        /// Enable decompressing responses.
14606        #[must_use]
14607        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
14608            self.inner = self.inner.accept_compressed(encoding);
14609            self
14610        }
14611        /// Limits the maximum size of a decoded message.
14612        ///
14613        /// Default: `4MB`
14614        #[must_use]
14615        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
14616            self.inner = self.inner.max_decoding_message_size(limit);
14617            self
14618        }
14619        /// Limits the maximum size of an encoded message.
14620        ///
14621        /// Default: `usize::MAX`
14622        #[must_use]
14623        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
14624            self.inner = self.inner.max_encoding_message_size(limit);
14625            self
14626        }
14627        /// RegisterUser
14628        ///
14629        /// Status: BETA
14630        ///
14631        /// This request should be called when a new user logs in for the first time
14632        pub async fn register_user(
14633            &mut self,
14634            request: impl tonic::IntoRequest<super::RegisterUserRequest>,
14635        ) -> std::result::Result<
14636            tonic::Response<super::RegisterUserResponse>,
14637            tonic::Status,
14638        > {
14639            self.inner
14640                .ready()
14641                .await
14642                .map_err(|e| {
14643                    tonic::Status::new(
14644                        tonic::Code::Unknown,
14645                        format!("Service was not ready: {}", e.into()),
14646                    )
14647                })?;
14648            let codec = tonic::codec::ProstCodec::default();
14649            let path = http::uri::PathAndQuery::from_static(
14650                "/aruna.api.storage.services.v2.UserService/RegisterUser",
14651            );
14652            let mut req = request.into_request();
14653            req.extensions_mut()
14654                .insert(
14655                    GrpcMethod::new(
14656                        "aruna.api.storage.services.v2.UserService",
14657                        "RegisterUser",
14658                    ),
14659                );
14660            self.inner.unary(req, path, codec).await
14661        }
14662        /// DeActivateUser
14663        ///
14664        /// Status: BETA
14665        ///
14666        /// This deactivates a specific user (Admin request)
14667        pub async fn deactivate_user(
14668            &mut self,
14669            request: impl tonic::IntoRequest<super::DeactivateUserRequest>,
14670        ) -> std::result::Result<
14671            tonic::Response<super::DeactivateUserResponse>,
14672            tonic::Status,
14673        > {
14674            self.inner
14675                .ready()
14676                .await
14677                .map_err(|e| {
14678                    tonic::Status::new(
14679                        tonic::Code::Unknown,
14680                        format!("Service was not ready: {}", e.into()),
14681                    )
14682                })?;
14683            let codec = tonic::codec::ProstCodec::default();
14684            let path = http::uri::PathAndQuery::from_static(
14685                "/aruna.api.storage.services.v2.UserService/DeactivateUser",
14686            );
14687            let mut req = request.into_request();
14688            req.extensions_mut()
14689                .insert(
14690                    GrpcMethod::new(
14691                        "aruna.api.storage.services.v2.UserService",
14692                        "DeactivateUser",
14693                    ),
14694                );
14695            self.inner.unary(req, path, codec).await
14696        }
14697        /// ActivateUser
14698        ///
14699        /// Status: BETA
14700        ///
14701        /// This activates a specific user (Admin request)
14702        pub async fn activate_user(
14703            &mut self,
14704            request: impl tonic::IntoRequest<super::ActivateUserRequest>,
14705        ) -> std::result::Result<
14706            tonic::Response<super::ActivateUserResponse>,
14707            tonic::Status,
14708        > {
14709            self.inner
14710                .ready()
14711                .await
14712                .map_err(|e| {
14713                    tonic::Status::new(
14714                        tonic::Code::Unknown,
14715                        format!("Service was not ready: {}", e.into()),
14716                    )
14717                })?;
14718            let codec = tonic::codec::ProstCodec::default();
14719            let path = http::uri::PathAndQuery::from_static(
14720                "/aruna.api.storage.services.v2.UserService/ActivateUser",
14721            );
14722            let mut req = request.into_request();
14723            req.extensions_mut()
14724                .insert(
14725                    GrpcMethod::new(
14726                        "aruna.api.storage.services.v2.UserService",
14727                        "ActivateUser",
14728                    ),
14729                );
14730            self.inner.unary(req, path, codec).await
14731        }
14732        /// CreateAPIToken
14733        ///
14734        /// Status: BETA
14735        ///
14736        /// Creates an API token to authenticate
14737        pub async fn create_api_token(
14738            &mut self,
14739            request: impl tonic::IntoRequest<super::CreateApiTokenRequest>,
14740        ) -> std::result::Result<
14741            tonic::Response<super::CreateApiTokenResponse>,
14742            tonic::Status,
14743        > {
14744            self.inner
14745                .ready()
14746                .await
14747                .map_err(|e| {
14748                    tonic::Status::new(
14749                        tonic::Code::Unknown,
14750                        format!("Service was not ready: {}", e.into()),
14751                    )
14752                })?;
14753            let codec = tonic::codec::ProstCodec::default();
14754            let path = http::uri::PathAndQuery::from_static(
14755                "/aruna.api.storage.services.v2.UserService/CreateAPIToken",
14756            );
14757            let mut req = request.into_request();
14758            req.extensions_mut()
14759                .insert(
14760                    GrpcMethod::new(
14761                        "aruna.api.storage.services.v2.UserService",
14762                        "CreateAPIToken",
14763                    ),
14764                );
14765            self.inner.unary(req, path, codec).await
14766        }
14767        /// GetAPIToken
14768        ///
14769        /// Status: BETA
14770        ///
14771        /// Returns one API token by id
14772        pub async fn get_api_token(
14773            &mut self,
14774            request: impl tonic::IntoRequest<super::GetApiTokenRequest>,
14775        ) -> std::result::Result<
14776            tonic::Response<super::GetApiTokenResponse>,
14777            tonic::Status,
14778        > {
14779            self.inner
14780                .ready()
14781                .await
14782                .map_err(|e| {
14783                    tonic::Status::new(
14784                        tonic::Code::Unknown,
14785                        format!("Service was not ready: {}", e.into()),
14786                    )
14787                })?;
14788            let codec = tonic::codec::ProstCodec::default();
14789            let path = http::uri::PathAndQuery::from_static(
14790                "/aruna.api.storage.services.v2.UserService/GetAPIToken",
14791            );
14792            let mut req = request.into_request();
14793            req.extensions_mut()
14794                .insert(
14795                    GrpcMethod::new(
14796                        "aruna.api.storage.services.v2.UserService",
14797                        "GetAPIToken",
14798                    ),
14799                );
14800            self.inner.unary(req, path, codec).await
14801        }
14802        /// GetAPITokens
14803        ///
14804        /// Status: STABLE
14805        ///
14806        /// Returns a list of API tokens for a specific user
14807        pub async fn get_api_tokens(
14808            &mut self,
14809            request: impl tonic::IntoRequest<super::GetApiTokensRequest>,
14810        ) -> std::result::Result<
14811            tonic::Response<super::GetApiTokensResponse>,
14812            tonic::Status,
14813        > {
14814            self.inner
14815                .ready()
14816                .await
14817                .map_err(|e| {
14818                    tonic::Status::new(
14819                        tonic::Code::Unknown,
14820                        format!("Service was not ready: {}", e.into()),
14821                    )
14822                })?;
14823            let codec = tonic::codec::ProstCodec::default();
14824            let path = http::uri::PathAndQuery::from_static(
14825                "/aruna.api.storage.services.v2.UserService/GetAPITokens",
14826            );
14827            let mut req = request.into_request();
14828            req.extensions_mut()
14829                .insert(
14830                    GrpcMethod::new(
14831                        "aruna.api.storage.services.v2.UserService",
14832                        "GetAPITokens",
14833                    ),
14834                );
14835            self.inner.unary(req, path, codec).await
14836        }
14837        /// DeleteAPIToken
14838        ///
14839        /// Status: STABLE
14840        ///
14841        /// Deletes the specified API Token
14842        pub async fn delete_api_token(
14843            &mut self,
14844            request: impl tonic::IntoRequest<super::DeleteApiTokenRequest>,
14845        ) -> std::result::Result<
14846            tonic::Response<super::DeleteApiTokenResponse>,
14847            tonic::Status,
14848        > {
14849            self.inner
14850                .ready()
14851                .await
14852                .map_err(|e| {
14853                    tonic::Status::new(
14854                        tonic::Code::Unknown,
14855                        format!("Service was not ready: {}", e.into()),
14856                    )
14857                })?;
14858            let codec = tonic::codec::ProstCodec::default();
14859            let path = http::uri::PathAndQuery::from_static(
14860                "/aruna.api.storage.services.v2.UserService/DeleteAPIToken",
14861            );
14862            let mut req = request.into_request();
14863            req.extensions_mut()
14864                .insert(
14865                    GrpcMethod::new(
14866                        "aruna.api.storage.services.v2.UserService",
14867                        "DeleteAPIToken",
14868                    ),
14869                );
14870            self.inner.unary(req, path, codec).await
14871        }
14872        /// DeleteAPITokens
14873        ///
14874        /// Status: BETA
14875        ///
14876        /// Deletes the specified API Token
14877        pub async fn delete_api_tokens(
14878            &mut self,
14879            request: impl tonic::IntoRequest<super::DeleteApiTokensRequest>,
14880        ) -> std::result::Result<
14881            tonic::Response<super::DeleteApiTokensResponse>,
14882            tonic::Status,
14883        > {
14884            self.inner
14885                .ready()
14886                .await
14887                .map_err(|e| {
14888                    tonic::Status::new(
14889                        tonic::Code::Unknown,
14890                        format!("Service was not ready: {}", e.into()),
14891                    )
14892                })?;
14893            let codec = tonic::codec::ProstCodec::default();
14894            let path = http::uri::PathAndQuery::from_static(
14895                "/aruna.api.storage.services.v2.UserService/DeleteAPITokens",
14896            );
14897            let mut req = request.into_request();
14898            req.extensions_mut()
14899                .insert(
14900                    GrpcMethod::new(
14901                        "aruna.api.storage.services.v2.UserService",
14902                        "DeleteAPITokens",
14903                    ),
14904                );
14905            self.inner.unary(req, path, codec).await
14906        }
14907        /// GetUserRequest
14908        ///
14909        /// Status: STABLE
14910        ///
14911        /// This is a request that returns the user information of the
14912        /// current user or if invoked by an admin from another user
14913        pub async fn get_user(
14914            &mut self,
14915            request: impl tonic::IntoRequest<super::GetUserRequest>,
14916        ) -> std::result::Result<
14917            tonic::Response<super::GetUserResponse>,
14918            tonic::Status,
14919        > {
14920            self.inner
14921                .ready()
14922                .await
14923                .map_err(|e| {
14924                    tonic::Status::new(
14925                        tonic::Code::Unknown,
14926                        format!("Service was not ready: {}", e.into()),
14927                    )
14928                })?;
14929            let codec = tonic::codec::ProstCodec::default();
14930            let path = http::uri::PathAndQuery::from_static(
14931                "/aruna.api.storage.services.v2.UserService/GetUser",
14932            );
14933            let mut req = request.into_request();
14934            req.extensions_mut()
14935                .insert(
14936                    GrpcMethod::new(
14937                        "aruna.api.storage.services.v2.UserService",
14938                        "GetUser",
14939                    ),
14940                );
14941            self.inner.unary(req, path, codec).await
14942        }
14943        /// GetUserRequestRedacted
14944        ///
14945        /// Status: STABLE
14946        ///
14947        /// This is a request that returns the user information of the
14948        /// current user or if invoked by an admin from another user
14949        /// Redacts personal information like name or email
14950        pub async fn get_user_redacted(
14951            &mut self,
14952            request: impl tonic::IntoRequest<super::GetUserRedactedRequest>,
14953        ) -> std::result::Result<
14954            tonic::Response<super::GetUserRedactedResponse>,
14955            tonic::Status,
14956        > {
14957            self.inner
14958                .ready()
14959                .await
14960                .map_err(|e| {
14961                    tonic::Status::new(
14962                        tonic::Code::Unknown,
14963                        format!("Service was not ready: {}", e.into()),
14964                    )
14965                })?;
14966            let codec = tonic::codec::ProstCodec::default();
14967            let path = http::uri::PathAndQuery::from_static(
14968                "/aruna.api.storage.services.v2.UserService/GetUserRedacted",
14969            );
14970            let mut req = request.into_request();
14971            req.extensions_mut()
14972                .insert(
14973                    GrpcMethod::new(
14974                        "aruna.api.storage.services.v2.UserService",
14975                        "GetUserRedacted",
14976                    ),
14977                );
14978            self.inner.unary(req, path, codec).await
14979        }
14980        /// UpdateUserDisplayName
14981        ///
14982        /// Status: STABLE
14983        ///
14984        /// Updates the Displayname for the user (Personal only)
14985        pub async fn update_user_display_name(
14986            &mut self,
14987            request: impl tonic::IntoRequest<super::UpdateUserDisplayNameRequest>,
14988        ) -> std::result::Result<
14989            tonic::Response<super::UpdateUserDisplayNameResponse>,
14990            tonic::Status,
14991        > {
14992            self.inner
14993                .ready()
14994                .await
14995                .map_err(|e| {
14996                    tonic::Status::new(
14997                        tonic::Code::Unknown,
14998                        format!("Service was not ready: {}", e.into()),
14999                    )
15000                })?;
15001            let codec = tonic::codec::ProstCodec::default();
15002            let path = http::uri::PathAndQuery::from_static(
15003                "/aruna.api.storage.services.v2.UserService/UpdateUserDisplayName",
15004            );
15005            let mut req = request.into_request();
15006            req.extensions_mut()
15007                .insert(
15008                    GrpcMethod::new(
15009                        "aruna.api.storage.services.v2.UserService",
15010                        "UpdateUserDisplayName",
15011                    ),
15012                );
15013            self.inner.unary(req, path, codec).await
15014        }
15015        /// UpdateUserDisplayName
15016        ///
15017        /// Status: ALPHA
15018        ///
15019        /// Updates the email for the user (Personal only)
15020        pub async fn update_user_email(
15021            &mut self,
15022            request: impl tonic::IntoRequest<super::UpdateUserEmailRequest>,
15023        ) -> std::result::Result<
15024            tonic::Response<super::UpdateUserEmailResponse>,
15025            tonic::Status,
15026        > {
15027            self.inner
15028                .ready()
15029                .await
15030                .map_err(|e| {
15031                    tonic::Status::new(
15032                        tonic::Code::Unknown,
15033                        format!("Service was not ready: {}", e.into()),
15034                    )
15035                })?;
15036            let codec = tonic::codec::ProstCodec::default();
15037            let path = http::uri::PathAndQuery::from_static(
15038                "/aruna.api.storage.services.v2.UserService/UpdateUserEmail",
15039            );
15040            let mut req = request.into_request();
15041            req.extensions_mut()
15042                .insert(
15043                    GrpcMethod::new(
15044                        "aruna.api.storage.services.v2.UserService",
15045                        "UpdateUserEmail",
15046                    ),
15047                );
15048            self.inner.unary(req, path, codec).await
15049        }
15050        /// GetNotActivatedUsers
15051        ///
15052        /// Status: STABLE
15053        ///
15054        /// Get all not activated users (Admin only)
15055        pub async fn get_not_activated_users(
15056            &mut self,
15057            request: impl tonic::IntoRequest<super::GetNotActivatedUsersRequest>,
15058        ) -> std::result::Result<
15059            tonic::Response<super::GetNotActivatedUsersResponse>,
15060            tonic::Status,
15061        > {
15062            self.inner
15063                .ready()
15064                .await
15065                .map_err(|e| {
15066                    tonic::Status::new(
15067                        tonic::Code::Unknown,
15068                        format!("Service was not ready: {}", e.into()),
15069                    )
15070                })?;
15071            let codec = tonic::codec::ProstCodec::default();
15072            let path = http::uri::PathAndQuery::from_static(
15073                "/aruna.api.storage.services.v2.UserService/GetNotActivatedUsers",
15074            );
15075            let mut req = request.into_request();
15076            req.extensions_mut()
15077                .insert(
15078                    GrpcMethod::new(
15079                        "aruna.api.storage.services.v2.UserService",
15080                        "GetNotActivatedUsers",
15081                    ),
15082                );
15083            self.inner.unary(req, path, codec).await
15084        }
15085        /// GetAllUsers
15086        ///
15087        /// Status: ALPHA
15088        ///
15089        /// Get all users including permissions (Admin only)
15090        pub async fn get_all_users(
15091            &mut self,
15092            request: impl tonic::IntoRequest<super::GetAllUsersRequest>,
15093        ) -> std::result::Result<
15094            tonic::Response<super::GetAllUsersResponse>,
15095            tonic::Status,
15096        > {
15097            self.inner
15098                .ready()
15099                .await
15100                .map_err(|e| {
15101                    tonic::Status::new(
15102                        tonic::Code::Unknown,
15103                        format!("Service was not ready: {}", e.into()),
15104                    )
15105                })?;
15106            let codec = tonic::codec::ProstCodec::default();
15107            let path = http::uri::PathAndQuery::from_static(
15108                "/aruna.api.storage.services.v2.UserService/GetAllUsers",
15109            );
15110            let mut req = request.into_request();
15111            req.extensions_mut()
15112                .insert(
15113                    GrpcMethod::new(
15114                        "aruna.api.storage.services.v2.UserService",
15115                        "GetAllUsers",
15116                    ),
15117                );
15118            self.inner.unary(req, path, codec).await
15119        }
15120        /// CreateS3CredentialsUserToken
15121        ///
15122        /// Status: ALPHA
15123        ///
15124        /// Creates or updates S3 credentials for a specific user and data_proxy
15125        pub async fn create_s3_credentials_user_token(
15126            &mut self,
15127            request: impl tonic::IntoRequest<super::CreateS3CredentialsUserTokenRequest>,
15128        ) -> std::result::Result<
15129            tonic::Response<super::CreateS3CredentialsUserTokenResponse>,
15130            tonic::Status,
15131        > {
15132            self.inner
15133                .ready()
15134                .await
15135                .map_err(|e| {
15136                    tonic::Status::new(
15137                        tonic::Code::Unknown,
15138                        format!("Service was not ready: {}", e.into()),
15139                    )
15140                })?;
15141            let codec = tonic::codec::ProstCodec::default();
15142            let path = http::uri::PathAndQuery::from_static(
15143                "/aruna.api.storage.services.v2.UserService/CreateS3CredentialsUserToken",
15144            );
15145            let mut req = request.into_request();
15146            req.extensions_mut()
15147                .insert(
15148                    GrpcMethod::new(
15149                        "aruna.api.storage.services.v2.UserService",
15150                        "CreateS3CredentialsUserToken",
15151                    ),
15152                );
15153            self.inner.unary(req, path, codec).await
15154        }
15155        /// GetS3CredentialsUserToken
15156        ///
15157        /// Status: ALPHA
15158        ///
15159        /// Gets S3 credentials for a specific token and data_proxy
15160        pub async fn get_s3_credentials_user_token(
15161            &mut self,
15162            request: impl tonic::IntoRequest<super::GetS3CredentialsUserTokenRequest>,
15163        ) -> std::result::Result<
15164            tonic::Response<super::GetS3CredentialsUserTokenResponse>,
15165            tonic::Status,
15166        > {
15167            self.inner
15168                .ready()
15169                .await
15170                .map_err(|e| {
15171                    tonic::Status::new(
15172                        tonic::Code::Unknown,
15173                        format!("Service was not ready: {}", e.into()),
15174                    )
15175                })?;
15176            let codec = tonic::codec::ProstCodec::default();
15177            let path = http::uri::PathAndQuery::from_static(
15178                "/aruna.api.storage.services.v2.UserService/GetS3CredentialsUserToken",
15179            );
15180            let mut req = request.into_request();
15181            req.extensions_mut()
15182                .insert(
15183                    GrpcMethod::new(
15184                        "aruna.api.storage.services.v2.UserService",
15185                        "GetS3CredentialsUserToken",
15186                    ),
15187                );
15188            self.inner.unary(req, path, codec).await
15189        }
15190        /// DeleteS3CredentialsUserToken
15191        ///
15192        /// Status: ALPHA
15193        ///
15194        /// Revokes existing S3 credentials for a specific user and data_proxy
15195        pub async fn delete_s3_credentials_user_token(
15196            &mut self,
15197            request: impl tonic::IntoRequest<super::DeleteS3CredentialsUserTokenRequest>,
15198        ) -> std::result::Result<
15199            tonic::Response<super::DeleteS3CredentialsUserResponse>,
15200            tonic::Status,
15201        > {
15202            self.inner
15203                .ready()
15204                .await
15205                .map_err(|e| {
15206                    tonic::Status::new(
15207                        tonic::Code::Unknown,
15208                        format!("Service was not ready: {}", e.into()),
15209                    )
15210                })?;
15211            let codec = tonic::codec::ProstCodec::default();
15212            let path = http::uri::PathAndQuery::from_static(
15213                "/aruna.api.storage.services.v2.UserService/DeleteS3CredentialsUserToken",
15214            );
15215            let mut req = request.into_request();
15216            req.extensions_mut()
15217                .insert(
15218                    GrpcMethod::new(
15219                        "aruna.api.storage.services.v2.UserService",
15220                        "DeleteS3CredentialsUserToken",
15221                    ),
15222                );
15223            self.inner.unary(req, path, codec).await
15224        }
15225        /// GetDataproxyToken
15226        ///
15227        /// Status: ALPHA
15228        ///
15229        /// Gets token for a specific user and data_proxy
15230        pub async fn get_dataproxy_token_user(
15231            &mut self,
15232            request: impl tonic::IntoRequest<super::GetDataproxyTokenUserRequest>,
15233        ) -> std::result::Result<
15234            tonic::Response<super::GetDataproxyTokenUserResponse>,
15235            tonic::Status,
15236        > {
15237            self.inner
15238                .ready()
15239                .await
15240                .map_err(|e| {
15241                    tonic::Status::new(
15242                        tonic::Code::Unknown,
15243                        format!("Service was not ready: {}", e.into()),
15244                    )
15245                })?;
15246            let codec = tonic::codec::ProstCodec::default();
15247            let path = http::uri::PathAndQuery::from_static(
15248                "/aruna.api.storage.services.v2.UserService/GetDataproxyTokenUser",
15249            );
15250            let mut req = request.into_request();
15251            req.extensions_mut()
15252                .insert(
15253                    GrpcMethod::new(
15254                        "aruna.api.storage.services.v2.UserService",
15255                        "GetDataproxyTokenUser",
15256                    ),
15257                );
15258            self.inner.unary(req, path, codec).await
15259        }
15260        /// GetPersonalNotifications
15261        ///
15262        /// Status: ALPHA
15263        ///
15264        /// Fetches personal notifications
15265        pub async fn get_personal_notifications(
15266            &mut self,
15267            request: impl tonic::IntoRequest<super::GetPersonalNotificationsRequest>,
15268        ) -> std::result::Result<
15269            tonic::Response<super::GetPersonalNotificationsResponse>,
15270            tonic::Status,
15271        > {
15272            self.inner
15273                .ready()
15274                .await
15275                .map_err(|e| {
15276                    tonic::Status::new(
15277                        tonic::Code::Unknown,
15278                        format!("Service was not ready: {}", e.into()),
15279                    )
15280                })?;
15281            let codec = tonic::codec::ProstCodec::default();
15282            let path = http::uri::PathAndQuery::from_static(
15283                "/aruna.api.storage.services.v2.UserService/GetPersonalNotifications",
15284            );
15285            let mut req = request.into_request();
15286            req.extensions_mut()
15287                .insert(
15288                    GrpcMethod::new(
15289                        "aruna.api.storage.services.v2.UserService",
15290                        "GetPersonalNotifications",
15291                    ),
15292                );
15293            self.inner.unary(req, path, codec).await
15294        }
15295        /// AcknowledgePersonalNotifications
15296        ///
15297        /// Status: ALPHA
15298        ///
15299        /// Acknowledges personal notifications
15300        pub async fn acknowledge_personal_notifications(
15301            &mut self,
15302            request: impl tonic::IntoRequest<
15303                super::AcknowledgePersonalNotificationsRequest,
15304            >,
15305        ) -> std::result::Result<
15306            tonic::Response<super::AcknowledgePersonalNotificationsResponse>,
15307            tonic::Status,
15308        > {
15309            self.inner
15310                .ready()
15311                .await
15312                .map_err(|e| {
15313                    tonic::Status::new(
15314                        tonic::Code::Unknown,
15315                        format!("Service was not ready: {}", e.into()),
15316                    )
15317                })?;
15318            let codec = tonic::codec::ProstCodec::default();
15319            let path = http::uri::PathAndQuery::from_static(
15320                "/aruna.api.storage.services.v2.UserService/AcknowledgePersonalNotifications",
15321            );
15322            let mut req = request.into_request();
15323            req.extensions_mut()
15324                .insert(
15325                    GrpcMethod::new(
15326                        "aruna.api.storage.services.v2.UserService",
15327                        "AcknowledgePersonalNotifications",
15328                    ),
15329                );
15330            self.inner.unary(req, path, codec).await
15331        }
15332        /// AddOidcProvider
15333        ///
15334        /// Status: BETA
15335        ///
15336        /// Add alternative oidc login method for user
15337        pub async fn add_oidc_provider(
15338            &mut self,
15339            request: impl tonic::IntoRequest<super::AddOidcProviderRequest>,
15340        ) -> std::result::Result<
15341            tonic::Response<super::AddOidcProviderResponse>,
15342            tonic::Status,
15343        > {
15344            self.inner
15345                .ready()
15346                .await
15347                .map_err(|e| {
15348                    tonic::Status::new(
15349                        tonic::Code::Unknown,
15350                        format!("Service was not ready: {}", e.into()),
15351                    )
15352                })?;
15353            let codec = tonic::codec::ProstCodec::default();
15354            let path = http::uri::PathAndQuery::from_static(
15355                "/aruna.api.storage.services.v2.UserService/AddOidcProvider",
15356            );
15357            let mut req = request.into_request();
15358            req.extensions_mut()
15359                .insert(
15360                    GrpcMethod::new(
15361                        "aruna.api.storage.services.v2.UserService",
15362                        "AddOidcProvider",
15363                    ),
15364                );
15365            self.inner.unary(req, path, codec).await
15366        }
15367        /// RemoveOidcProvider
15368        ///
15369        /// Status: BETA
15370        ///
15371        /// Remove alternative oidc login method from user
15372        /// (Only works if user has more than one oidc provider)
15373        pub async fn remove_oidc_provider(
15374            &mut self,
15375            request: impl tonic::IntoRequest<super::RemoveOidcProviderRequest>,
15376        ) -> std::result::Result<
15377            tonic::Response<super::RemoveOidcProviderResponse>,
15378            tonic::Status,
15379        > {
15380            self.inner
15381                .ready()
15382                .await
15383                .map_err(|e| {
15384                    tonic::Status::new(
15385                        tonic::Code::Unknown,
15386                        format!("Service was not ready: {}", e.into()),
15387                    )
15388                })?;
15389            let codec = tonic::codec::ProstCodec::default();
15390            let path = http::uri::PathAndQuery::from_static(
15391                "/aruna.api.storage.services.v2.UserService/RemoveOidcProvider",
15392            );
15393            let mut req = request.into_request();
15394            req.extensions_mut()
15395                .insert(
15396                    GrpcMethod::new(
15397                        "aruna.api.storage.services.v2.UserService",
15398                        "RemoveOidcProvider",
15399                    ),
15400                );
15401            self.inner.unary(req, path, codec).await
15402        }
15403        /// AddPubkeyUser
15404        ///
15405        /// Status: ALPHA
15406        ///
15407        /// Adds an ED25519 public key for the user
15408        pub async fn add_pubkey_user(
15409            &mut self,
15410            request: impl tonic::IntoRequest<super::AddPubkeyUserRequest>,
15411        ) -> std::result::Result<
15412            tonic::Response<super::AddPubkeyUserResponse>,
15413            tonic::Status,
15414        > {
15415            self.inner
15416                .ready()
15417                .await
15418                .map_err(|e| {
15419                    tonic::Status::new(
15420                        tonic::Code::Unknown,
15421                        format!("Service was not ready: {}", e.into()),
15422                    )
15423                })?;
15424            let codec = tonic::codec::ProstCodec::default();
15425            let path = http::uri::PathAndQuery::from_static(
15426                "/aruna.api.storage.services.v2.UserService/AddPubkeyUser",
15427            );
15428            let mut req = request.into_request();
15429            req.extensions_mut()
15430                .insert(
15431                    GrpcMethod::new(
15432                        "aruna.api.storage.services.v2.UserService",
15433                        "AddPubkeyUser",
15434                    ),
15435                );
15436            self.inner.unary(req, path, codec).await
15437        }
15438        /// AddTrustedEndpointsUser
15439        ///
15440        /// Status: ALPHA
15441        ///
15442        /// Adds an endpoint to the trusted endpoints list of the user
15443        pub async fn add_trusted_endpoints_user(
15444            &mut self,
15445            request: impl tonic::IntoRequest<super::AddTrustedEndpointsUserRequest>,
15446        ) -> std::result::Result<
15447            tonic::Response<super::AddTrustedEndpointsUserResponse>,
15448            tonic::Status,
15449        > {
15450            self.inner
15451                .ready()
15452                .await
15453                .map_err(|e| {
15454                    tonic::Status::new(
15455                        tonic::Code::Unknown,
15456                        format!("Service was not ready: {}", e.into()),
15457                    )
15458                })?;
15459            let codec = tonic::codec::ProstCodec::default();
15460            let path = http::uri::PathAndQuery::from_static(
15461                "/aruna.api.storage.services.v2.UserService/AddTrustedEndpointsUser",
15462            );
15463            let mut req = request.into_request();
15464            req.extensions_mut()
15465                .insert(
15466                    GrpcMethod::new(
15467                        "aruna.api.storage.services.v2.UserService",
15468                        "AddTrustedEndpointsUser",
15469                    ),
15470                );
15471            self.inner.unary(req, path, codec).await
15472        }
15473        /// RemoveTrustedEndpointsUser
15474        ///
15475        /// Status: ALPHA
15476        ///
15477        /// Removes an endpoint from the trusted endpoints list of the user
15478        pub async fn remove_trusted_endpoints_user(
15479            &mut self,
15480            request: impl tonic::IntoRequest<super::RemoveTrustedEndpointsUserRequest>,
15481        ) -> std::result::Result<
15482            tonic::Response<super::RemoveTrustedEndpointsUserResponse>,
15483            tonic::Status,
15484        > {
15485            self.inner
15486                .ready()
15487                .await
15488                .map_err(|e| {
15489                    tonic::Status::new(
15490                        tonic::Code::Unknown,
15491                        format!("Service was not ready: {}", e.into()),
15492                    )
15493                })?;
15494            let codec = tonic::codec::ProstCodec::default();
15495            let path = http::uri::PathAndQuery::from_static(
15496                "/aruna.api.storage.services.v2.UserService/RemoveTrustedEndpointsUser",
15497            );
15498            let mut req = request.into_request();
15499            req.extensions_mut()
15500                .insert(
15501                    GrpcMethod::new(
15502                        "aruna.api.storage.services.v2.UserService",
15503                        "RemoveTrustedEndpointsUser",
15504                    ),
15505                );
15506            self.inner.unary(req, path, codec).await
15507        }
15508        /// AddDataProxyAttributeUser
15509        ///
15510        /// Status: ALPHA
15511        ///
15512        /// Adds an data proxy specific attribute to the user
15513        pub async fn add_data_proxy_attribute_user(
15514            &mut self,
15515            request: impl tonic::IntoRequest<super::AddDataProxyAttributeUserRequest>,
15516        ) -> std::result::Result<
15517            tonic::Response<super::AddDataProxyAttributeUserResponse>,
15518            tonic::Status,
15519        > {
15520            self.inner
15521                .ready()
15522                .await
15523                .map_err(|e| {
15524                    tonic::Status::new(
15525                        tonic::Code::Unknown,
15526                        format!("Service was not ready: {}", e.into()),
15527                    )
15528                })?;
15529            let codec = tonic::codec::ProstCodec::default();
15530            let path = http::uri::PathAndQuery::from_static(
15531                "/aruna.api.storage.services.v2.UserService/AddDataProxyAttributeUser",
15532            );
15533            let mut req = request.into_request();
15534            req.extensions_mut()
15535                .insert(
15536                    GrpcMethod::new(
15537                        "aruna.api.storage.services.v2.UserService",
15538                        "AddDataProxyAttributeUser",
15539                    ),
15540                );
15541            self.inner.unary(req, path, codec).await
15542        }
15543        /// RemoveDataProxyAttributeUser
15544        ///
15545        /// Status: ALPHA
15546        ///
15547        /// Removes an data proxy specific attribute from the user
15548        pub async fn remove_data_proxy_attribute_user(
15549            &mut self,
15550            request: impl tonic::IntoRequest<super::RemoveDataProxyAttributeUserRequest>,
15551        ) -> std::result::Result<
15552            tonic::Response<super::RemoveDataProxyAttributeUserResponse>,
15553            tonic::Status,
15554        > {
15555            self.inner
15556                .ready()
15557                .await
15558                .map_err(|e| {
15559                    tonic::Status::new(
15560                        tonic::Code::Unknown,
15561                        format!("Service was not ready: {}", e.into()),
15562                    )
15563                })?;
15564            let codec = tonic::codec::ProstCodec::default();
15565            let path = http::uri::PathAndQuery::from_static(
15566                "/aruna.api.storage.services.v2.UserService/RemoveDataProxyAttributeUser",
15567            );
15568            let mut req = request.into_request();
15569            req.extensions_mut()
15570                .insert(
15571                    GrpcMethod::new(
15572                        "aruna.api.storage.services.v2.UserService",
15573                        "RemoveDataProxyAttributeUser",
15574                    ),
15575                );
15576            self.inner.unary(req, path, codec).await
15577        }
15578    }
15579}
15580/// Generated server implementations.
15581pub mod user_service_server {
15582    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
15583    use tonic::codegen::*;
15584    /// Generated trait containing gRPC methods that should be implemented for use with UserServiceServer.
15585    #[async_trait]
15586    pub trait UserService: Send + Sync + 'static {
15587        /// RegisterUser
15588        ///
15589        /// Status: BETA
15590        ///
15591        /// This request should be called when a new user logs in for the first time
15592        async fn register_user(
15593            &self,
15594            request: tonic::Request<super::RegisterUserRequest>,
15595        ) -> std::result::Result<
15596            tonic::Response<super::RegisterUserResponse>,
15597            tonic::Status,
15598        >;
15599        /// DeActivateUser
15600        ///
15601        /// Status: BETA
15602        ///
15603        /// This deactivates a specific user (Admin request)
15604        async fn deactivate_user(
15605            &self,
15606            request: tonic::Request<super::DeactivateUserRequest>,
15607        ) -> std::result::Result<
15608            tonic::Response<super::DeactivateUserResponse>,
15609            tonic::Status,
15610        >;
15611        /// ActivateUser
15612        ///
15613        /// Status: BETA
15614        ///
15615        /// This activates a specific user (Admin request)
15616        async fn activate_user(
15617            &self,
15618            request: tonic::Request<super::ActivateUserRequest>,
15619        ) -> std::result::Result<
15620            tonic::Response<super::ActivateUserResponse>,
15621            tonic::Status,
15622        >;
15623        /// CreateAPIToken
15624        ///
15625        /// Status: BETA
15626        ///
15627        /// Creates an API token to authenticate
15628        async fn create_api_token(
15629            &self,
15630            request: tonic::Request<super::CreateApiTokenRequest>,
15631        ) -> std::result::Result<
15632            tonic::Response<super::CreateApiTokenResponse>,
15633            tonic::Status,
15634        >;
15635        /// GetAPIToken
15636        ///
15637        /// Status: BETA
15638        ///
15639        /// Returns one API token by id
15640        async fn get_api_token(
15641            &self,
15642            request: tonic::Request<super::GetApiTokenRequest>,
15643        ) -> std::result::Result<
15644            tonic::Response<super::GetApiTokenResponse>,
15645            tonic::Status,
15646        >;
15647        /// GetAPITokens
15648        ///
15649        /// Status: STABLE
15650        ///
15651        /// Returns a list of API tokens for a specific user
15652        async fn get_api_tokens(
15653            &self,
15654            request: tonic::Request<super::GetApiTokensRequest>,
15655        ) -> std::result::Result<
15656            tonic::Response<super::GetApiTokensResponse>,
15657            tonic::Status,
15658        >;
15659        /// DeleteAPIToken
15660        ///
15661        /// Status: STABLE
15662        ///
15663        /// Deletes the specified API Token
15664        async fn delete_api_token(
15665            &self,
15666            request: tonic::Request<super::DeleteApiTokenRequest>,
15667        ) -> std::result::Result<
15668            tonic::Response<super::DeleteApiTokenResponse>,
15669            tonic::Status,
15670        >;
15671        /// DeleteAPITokens
15672        ///
15673        /// Status: BETA
15674        ///
15675        /// Deletes the specified API Token
15676        async fn delete_api_tokens(
15677            &self,
15678            request: tonic::Request<super::DeleteApiTokensRequest>,
15679        ) -> std::result::Result<
15680            tonic::Response<super::DeleteApiTokensResponse>,
15681            tonic::Status,
15682        >;
15683        /// GetUserRequest
15684        ///
15685        /// Status: STABLE
15686        ///
15687        /// This is a request that returns the user information of the
15688        /// current user or if invoked by an admin from another user
15689        async fn get_user(
15690            &self,
15691            request: tonic::Request<super::GetUserRequest>,
15692        ) -> std::result::Result<tonic::Response<super::GetUserResponse>, tonic::Status>;
15693        /// GetUserRequestRedacted
15694        ///
15695        /// Status: STABLE
15696        ///
15697        /// This is a request that returns the user information of the
15698        /// current user or if invoked by an admin from another user
15699        /// Redacts personal information like name or email
15700        async fn get_user_redacted(
15701            &self,
15702            request: tonic::Request<super::GetUserRedactedRequest>,
15703        ) -> std::result::Result<
15704            tonic::Response<super::GetUserRedactedResponse>,
15705            tonic::Status,
15706        >;
15707        /// UpdateUserDisplayName
15708        ///
15709        /// Status: STABLE
15710        ///
15711        /// Updates the Displayname for the user (Personal only)
15712        async fn update_user_display_name(
15713            &self,
15714            request: tonic::Request<super::UpdateUserDisplayNameRequest>,
15715        ) -> std::result::Result<
15716            tonic::Response<super::UpdateUserDisplayNameResponse>,
15717            tonic::Status,
15718        >;
15719        /// UpdateUserDisplayName
15720        ///
15721        /// Status: ALPHA
15722        ///
15723        /// Updates the email for the user (Personal only)
15724        async fn update_user_email(
15725            &self,
15726            request: tonic::Request<super::UpdateUserEmailRequest>,
15727        ) -> std::result::Result<
15728            tonic::Response<super::UpdateUserEmailResponse>,
15729            tonic::Status,
15730        >;
15731        /// GetNotActivatedUsers
15732        ///
15733        /// Status: STABLE
15734        ///
15735        /// Get all not activated users (Admin only)
15736        async fn get_not_activated_users(
15737            &self,
15738            request: tonic::Request<super::GetNotActivatedUsersRequest>,
15739        ) -> std::result::Result<
15740            tonic::Response<super::GetNotActivatedUsersResponse>,
15741            tonic::Status,
15742        >;
15743        /// GetAllUsers
15744        ///
15745        /// Status: ALPHA
15746        ///
15747        /// Get all users including permissions (Admin only)
15748        async fn get_all_users(
15749            &self,
15750            request: tonic::Request<super::GetAllUsersRequest>,
15751        ) -> std::result::Result<
15752            tonic::Response<super::GetAllUsersResponse>,
15753            tonic::Status,
15754        >;
15755        /// CreateS3CredentialsUserToken
15756        ///
15757        /// Status: ALPHA
15758        ///
15759        /// Creates or updates S3 credentials for a specific user and data_proxy
15760        async fn create_s3_credentials_user_token(
15761            &self,
15762            request: tonic::Request<super::CreateS3CredentialsUserTokenRequest>,
15763        ) -> std::result::Result<
15764            tonic::Response<super::CreateS3CredentialsUserTokenResponse>,
15765            tonic::Status,
15766        >;
15767        /// GetS3CredentialsUserToken
15768        ///
15769        /// Status: ALPHA
15770        ///
15771        /// Gets S3 credentials for a specific token and data_proxy
15772        async fn get_s3_credentials_user_token(
15773            &self,
15774            request: tonic::Request<super::GetS3CredentialsUserTokenRequest>,
15775        ) -> std::result::Result<
15776            tonic::Response<super::GetS3CredentialsUserTokenResponse>,
15777            tonic::Status,
15778        >;
15779        /// DeleteS3CredentialsUserToken
15780        ///
15781        /// Status: ALPHA
15782        ///
15783        /// Revokes existing S3 credentials for a specific user and data_proxy
15784        async fn delete_s3_credentials_user_token(
15785            &self,
15786            request: tonic::Request<super::DeleteS3CredentialsUserTokenRequest>,
15787        ) -> std::result::Result<
15788            tonic::Response<super::DeleteS3CredentialsUserResponse>,
15789            tonic::Status,
15790        >;
15791        /// GetDataproxyToken
15792        ///
15793        /// Status: ALPHA
15794        ///
15795        /// Gets token for a specific user and data_proxy
15796        async fn get_dataproxy_token_user(
15797            &self,
15798            request: tonic::Request<super::GetDataproxyTokenUserRequest>,
15799        ) -> std::result::Result<
15800            tonic::Response<super::GetDataproxyTokenUserResponse>,
15801            tonic::Status,
15802        >;
15803        /// GetPersonalNotifications
15804        ///
15805        /// Status: ALPHA
15806        ///
15807        /// Fetches personal notifications
15808        async fn get_personal_notifications(
15809            &self,
15810            request: tonic::Request<super::GetPersonalNotificationsRequest>,
15811        ) -> std::result::Result<
15812            tonic::Response<super::GetPersonalNotificationsResponse>,
15813            tonic::Status,
15814        >;
15815        /// AcknowledgePersonalNotifications
15816        ///
15817        /// Status: ALPHA
15818        ///
15819        /// Acknowledges personal notifications
15820        async fn acknowledge_personal_notifications(
15821            &self,
15822            request: tonic::Request<super::AcknowledgePersonalNotificationsRequest>,
15823        ) -> std::result::Result<
15824            tonic::Response<super::AcknowledgePersonalNotificationsResponse>,
15825            tonic::Status,
15826        >;
15827        /// AddOidcProvider
15828        ///
15829        /// Status: BETA
15830        ///
15831        /// Add alternative oidc login method for user
15832        async fn add_oidc_provider(
15833            &self,
15834            request: tonic::Request<super::AddOidcProviderRequest>,
15835        ) -> std::result::Result<
15836            tonic::Response<super::AddOidcProviderResponse>,
15837            tonic::Status,
15838        >;
15839        /// RemoveOidcProvider
15840        ///
15841        /// Status: BETA
15842        ///
15843        /// Remove alternative oidc login method from user
15844        /// (Only works if user has more than one oidc provider)
15845        async fn remove_oidc_provider(
15846            &self,
15847            request: tonic::Request<super::RemoveOidcProviderRequest>,
15848        ) -> std::result::Result<
15849            tonic::Response<super::RemoveOidcProviderResponse>,
15850            tonic::Status,
15851        >;
15852        /// AddPubkeyUser
15853        ///
15854        /// Status: ALPHA
15855        ///
15856        /// Adds an ED25519 public key for the user
15857        async fn add_pubkey_user(
15858            &self,
15859            request: tonic::Request<super::AddPubkeyUserRequest>,
15860        ) -> std::result::Result<
15861            tonic::Response<super::AddPubkeyUserResponse>,
15862            tonic::Status,
15863        >;
15864        /// AddTrustedEndpointsUser
15865        ///
15866        /// Status: ALPHA
15867        ///
15868        /// Adds an endpoint to the trusted endpoints list of the user
15869        async fn add_trusted_endpoints_user(
15870            &self,
15871            request: tonic::Request<super::AddTrustedEndpointsUserRequest>,
15872        ) -> std::result::Result<
15873            tonic::Response<super::AddTrustedEndpointsUserResponse>,
15874            tonic::Status,
15875        >;
15876        /// RemoveTrustedEndpointsUser
15877        ///
15878        /// Status: ALPHA
15879        ///
15880        /// Removes an endpoint from the trusted endpoints list of the user
15881        async fn remove_trusted_endpoints_user(
15882            &self,
15883            request: tonic::Request<super::RemoveTrustedEndpointsUserRequest>,
15884        ) -> std::result::Result<
15885            tonic::Response<super::RemoveTrustedEndpointsUserResponse>,
15886            tonic::Status,
15887        >;
15888        /// AddDataProxyAttributeUser
15889        ///
15890        /// Status: ALPHA
15891        ///
15892        /// Adds an data proxy specific attribute to the user
15893        async fn add_data_proxy_attribute_user(
15894            &self,
15895            request: tonic::Request<super::AddDataProxyAttributeUserRequest>,
15896        ) -> std::result::Result<
15897            tonic::Response<super::AddDataProxyAttributeUserResponse>,
15898            tonic::Status,
15899        >;
15900        /// RemoveDataProxyAttributeUser
15901        ///
15902        /// Status: ALPHA
15903        ///
15904        /// Removes an data proxy specific attribute from the user
15905        async fn remove_data_proxy_attribute_user(
15906            &self,
15907            request: tonic::Request<super::RemoveDataProxyAttributeUserRequest>,
15908        ) -> std::result::Result<
15909            tonic::Response<super::RemoveDataProxyAttributeUserResponse>,
15910            tonic::Status,
15911        >;
15912    }
15913    /// UserService
15914    ///
15915    /// Status: BETA
15916    ///
15917    /// Contains all CRUD methods for users and associated resource
15918    #[derive(Debug)]
15919    pub struct UserServiceServer<T: UserService> {
15920        inner: _Inner<T>,
15921        accept_compression_encodings: EnabledCompressionEncodings,
15922        send_compression_encodings: EnabledCompressionEncodings,
15923        max_decoding_message_size: Option<usize>,
15924        max_encoding_message_size: Option<usize>,
15925    }
15926    struct _Inner<T>(Arc<T>);
15927    impl<T: UserService> UserServiceServer<T> {
15928        pub fn new(inner: T) -> Self {
15929            Self::from_arc(Arc::new(inner))
15930        }
15931        pub fn from_arc(inner: Arc<T>) -> Self {
15932            let inner = _Inner(inner);
15933            Self {
15934                inner,
15935                accept_compression_encodings: Default::default(),
15936                send_compression_encodings: Default::default(),
15937                max_decoding_message_size: None,
15938                max_encoding_message_size: None,
15939            }
15940        }
15941        pub fn with_interceptor<F>(
15942            inner: T,
15943            interceptor: F,
15944        ) -> InterceptedService<Self, F>
15945        where
15946            F: tonic::service::Interceptor,
15947        {
15948            InterceptedService::new(Self::new(inner), interceptor)
15949        }
15950        /// Enable decompressing requests with the given encoding.
15951        #[must_use]
15952        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
15953            self.accept_compression_encodings.enable(encoding);
15954            self
15955        }
15956        /// Compress responses with the given encoding, if the client supports it.
15957        #[must_use]
15958        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
15959            self.send_compression_encodings.enable(encoding);
15960            self
15961        }
15962        /// Limits the maximum size of a decoded message.
15963        ///
15964        /// Default: `4MB`
15965        #[must_use]
15966        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
15967            self.max_decoding_message_size = Some(limit);
15968            self
15969        }
15970        /// Limits the maximum size of an encoded message.
15971        ///
15972        /// Default: `usize::MAX`
15973        #[must_use]
15974        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
15975            self.max_encoding_message_size = Some(limit);
15976            self
15977        }
15978    }
15979    impl<T, B> tonic::codegen::Service<http::Request<B>> for UserServiceServer<T>
15980    where
15981        T: UserService,
15982        B: Body + Send + 'static,
15983        B::Error: Into<StdError> + Send + 'static,
15984    {
15985        type Response = http::Response<tonic::body::BoxBody>;
15986        type Error = std::convert::Infallible;
15987        type Future = BoxFuture<Self::Response, Self::Error>;
15988        fn poll_ready(
15989            &mut self,
15990            _cx: &mut Context<'_>,
15991        ) -> Poll<std::result::Result<(), Self::Error>> {
15992            Poll::Ready(Ok(()))
15993        }
15994        fn call(&mut self, req: http::Request<B>) -> Self::Future {
15995            let inner = self.inner.clone();
15996            match req.uri().path() {
15997                "/aruna.api.storage.services.v2.UserService/RegisterUser" => {
15998                    #[allow(non_camel_case_types)]
15999                    struct RegisterUserSvc<T: UserService>(pub Arc<T>);
16000                    impl<
16001                        T: UserService,
16002                    > tonic::server::UnaryService<super::RegisterUserRequest>
16003                    for RegisterUserSvc<T> {
16004                        type Response = super::RegisterUserResponse;
16005                        type Future = BoxFuture<
16006                            tonic::Response<Self::Response>,
16007                            tonic::Status,
16008                        >;
16009                        fn call(
16010                            &mut self,
16011                            request: tonic::Request<super::RegisterUserRequest>,
16012                        ) -> Self::Future {
16013                            let inner = Arc::clone(&self.0);
16014                            let fut = async move {
16015                                <T as UserService>::register_user(&inner, request).await
16016                            };
16017                            Box::pin(fut)
16018                        }
16019                    }
16020                    let accept_compression_encodings = self.accept_compression_encodings;
16021                    let send_compression_encodings = self.send_compression_encodings;
16022                    let max_decoding_message_size = self.max_decoding_message_size;
16023                    let max_encoding_message_size = self.max_encoding_message_size;
16024                    let inner = self.inner.clone();
16025                    let fut = async move {
16026                        let inner = inner.0;
16027                        let method = RegisterUserSvc(inner);
16028                        let codec = tonic::codec::ProstCodec::default();
16029                        let mut grpc = tonic::server::Grpc::new(codec)
16030                            .apply_compression_config(
16031                                accept_compression_encodings,
16032                                send_compression_encodings,
16033                            )
16034                            .apply_max_message_size_config(
16035                                max_decoding_message_size,
16036                                max_encoding_message_size,
16037                            );
16038                        let res = grpc.unary(method, req).await;
16039                        Ok(res)
16040                    };
16041                    Box::pin(fut)
16042                }
16043                "/aruna.api.storage.services.v2.UserService/DeactivateUser" => {
16044                    #[allow(non_camel_case_types)]
16045                    struct DeactivateUserSvc<T: UserService>(pub Arc<T>);
16046                    impl<
16047                        T: UserService,
16048                    > tonic::server::UnaryService<super::DeactivateUserRequest>
16049                    for DeactivateUserSvc<T> {
16050                        type Response = super::DeactivateUserResponse;
16051                        type Future = BoxFuture<
16052                            tonic::Response<Self::Response>,
16053                            tonic::Status,
16054                        >;
16055                        fn call(
16056                            &mut self,
16057                            request: tonic::Request<super::DeactivateUserRequest>,
16058                        ) -> Self::Future {
16059                            let inner = Arc::clone(&self.0);
16060                            let fut = async move {
16061                                <T as UserService>::deactivate_user(&inner, request).await
16062                            };
16063                            Box::pin(fut)
16064                        }
16065                    }
16066                    let accept_compression_encodings = self.accept_compression_encodings;
16067                    let send_compression_encodings = self.send_compression_encodings;
16068                    let max_decoding_message_size = self.max_decoding_message_size;
16069                    let max_encoding_message_size = self.max_encoding_message_size;
16070                    let inner = self.inner.clone();
16071                    let fut = async move {
16072                        let inner = inner.0;
16073                        let method = DeactivateUserSvc(inner);
16074                        let codec = tonic::codec::ProstCodec::default();
16075                        let mut grpc = tonic::server::Grpc::new(codec)
16076                            .apply_compression_config(
16077                                accept_compression_encodings,
16078                                send_compression_encodings,
16079                            )
16080                            .apply_max_message_size_config(
16081                                max_decoding_message_size,
16082                                max_encoding_message_size,
16083                            );
16084                        let res = grpc.unary(method, req).await;
16085                        Ok(res)
16086                    };
16087                    Box::pin(fut)
16088                }
16089                "/aruna.api.storage.services.v2.UserService/ActivateUser" => {
16090                    #[allow(non_camel_case_types)]
16091                    struct ActivateUserSvc<T: UserService>(pub Arc<T>);
16092                    impl<
16093                        T: UserService,
16094                    > tonic::server::UnaryService<super::ActivateUserRequest>
16095                    for ActivateUserSvc<T> {
16096                        type Response = super::ActivateUserResponse;
16097                        type Future = BoxFuture<
16098                            tonic::Response<Self::Response>,
16099                            tonic::Status,
16100                        >;
16101                        fn call(
16102                            &mut self,
16103                            request: tonic::Request<super::ActivateUserRequest>,
16104                        ) -> Self::Future {
16105                            let inner = Arc::clone(&self.0);
16106                            let fut = async move {
16107                                <T as UserService>::activate_user(&inner, request).await
16108                            };
16109                            Box::pin(fut)
16110                        }
16111                    }
16112                    let accept_compression_encodings = self.accept_compression_encodings;
16113                    let send_compression_encodings = self.send_compression_encodings;
16114                    let max_decoding_message_size = self.max_decoding_message_size;
16115                    let max_encoding_message_size = self.max_encoding_message_size;
16116                    let inner = self.inner.clone();
16117                    let fut = async move {
16118                        let inner = inner.0;
16119                        let method = ActivateUserSvc(inner);
16120                        let codec = tonic::codec::ProstCodec::default();
16121                        let mut grpc = tonic::server::Grpc::new(codec)
16122                            .apply_compression_config(
16123                                accept_compression_encodings,
16124                                send_compression_encodings,
16125                            )
16126                            .apply_max_message_size_config(
16127                                max_decoding_message_size,
16128                                max_encoding_message_size,
16129                            );
16130                        let res = grpc.unary(method, req).await;
16131                        Ok(res)
16132                    };
16133                    Box::pin(fut)
16134                }
16135                "/aruna.api.storage.services.v2.UserService/CreateAPIToken" => {
16136                    #[allow(non_camel_case_types)]
16137                    struct CreateAPITokenSvc<T: UserService>(pub Arc<T>);
16138                    impl<
16139                        T: UserService,
16140                    > tonic::server::UnaryService<super::CreateApiTokenRequest>
16141                    for CreateAPITokenSvc<T> {
16142                        type Response = super::CreateApiTokenResponse;
16143                        type Future = BoxFuture<
16144                            tonic::Response<Self::Response>,
16145                            tonic::Status,
16146                        >;
16147                        fn call(
16148                            &mut self,
16149                            request: tonic::Request<super::CreateApiTokenRequest>,
16150                        ) -> Self::Future {
16151                            let inner = Arc::clone(&self.0);
16152                            let fut = async move {
16153                                <T as UserService>::create_api_token(&inner, request).await
16154                            };
16155                            Box::pin(fut)
16156                        }
16157                    }
16158                    let accept_compression_encodings = self.accept_compression_encodings;
16159                    let send_compression_encodings = self.send_compression_encodings;
16160                    let max_decoding_message_size = self.max_decoding_message_size;
16161                    let max_encoding_message_size = self.max_encoding_message_size;
16162                    let inner = self.inner.clone();
16163                    let fut = async move {
16164                        let inner = inner.0;
16165                        let method = CreateAPITokenSvc(inner);
16166                        let codec = tonic::codec::ProstCodec::default();
16167                        let mut grpc = tonic::server::Grpc::new(codec)
16168                            .apply_compression_config(
16169                                accept_compression_encodings,
16170                                send_compression_encodings,
16171                            )
16172                            .apply_max_message_size_config(
16173                                max_decoding_message_size,
16174                                max_encoding_message_size,
16175                            );
16176                        let res = grpc.unary(method, req).await;
16177                        Ok(res)
16178                    };
16179                    Box::pin(fut)
16180                }
16181                "/aruna.api.storage.services.v2.UserService/GetAPIToken" => {
16182                    #[allow(non_camel_case_types)]
16183                    struct GetAPITokenSvc<T: UserService>(pub Arc<T>);
16184                    impl<
16185                        T: UserService,
16186                    > tonic::server::UnaryService<super::GetApiTokenRequest>
16187                    for GetAPITokenSvc<T> {
16188                        type Response = super::GetApiTokenResponse;
16189                        type Future = BoxFuture<
16190                            tonic::Response<Self::Response>,
16191                            tonic::Status,
16192                        >;
16193                        fn call(
16194                            &mut self,
16195                            request: tonic::Request<super::GetApiTokenRequest>,
16196                        ) -> Self::Future {
16197                            let inner = Arc::clone(&self.0);
16198                            let fut = async move {
16199                                <T as UserService>::get_api_token(&inner, request).await
16200                            };
16201                            Box::pin(fut)
16202                        }
16203                    }
16204                    let accept_compression_encodings = self.accept_compression_encodings;
16205                    let send_compression_encodings = self.send_compression_encodings;
16206                    let max_decoding_message_size = self.max_decoding_message_size;
16207                    let max_encoding_message_size = self.max_encoding_message_size;
16208                    let inner = self.inner.clone();
16209                    let fut = async move {
16210                        let inner = inner.0;
16211                        let method = GetAPITokenSvc(inner);
16212                        let codec = tonic::codec::ProstCodec::default();
16213                        let mut grpc = tonic::server::Grpc::new(codec)
16214                            .apply_compression_config(
16215                                accept_compression_encodings,
16216                                send_compression_encodings,
16217                            )
16218                            .apply_max_message_size_config(
16219                                max_decoding_message_size,
16220                                max_encoding_message_size,
16221                            );
16222                        let res = grpc.unary(method, req).await;
16223                        Ok(res)
16224                    };
16225                    Box::pin(fut)
16226                }
16227                "/aruna.api.storage.services.v2.UserService/GetAPITokens" => {
16228                    #[allow(non_camel_case_types)]
16229                    struct GetAPITokensSvc<T: UserService>(pub Arc<T>);
16230                    impl<
16231                        T: UserService,
16232                    > tonic::server::UnaryService<super::GetApiTokensRequest>
16233                    for GetAPITokensSvc<T> {
16234                        type Response = super::GetApiTokensResponse;
16235                        type Future = BoxFuture<
16236                            tonic::Response<Self::Response>,
16237                            tonic::Status,
16238                        >;
16239                        fn call(
16240                            &mut self,
16241                            request: tonic::Request<super::GetApiTokensRequest>,
16242                        ) -> Self::Future {
16243                            let inner = Arc::clone(&self.0);
16244                            let fut = async move {
16245                                <T as UserService>::get_api_tokens(&inner, request).await
16246                            };
16247                            Box::pin(fut)
16248                        }
16249                    }
16250                    let accept_compression_encodings = self.accept_compression_encodings;
16251                    let send_compression_encodings = self.send_compression_encodings;
16252                    let max_decoding_message_size = self.max_decoding_message_size;
16253                    let max_encoding_message_size = self.max_encoding_message_size;
16254                    let inner = self.inner.clone();
16255                    let fut = async move {
16256                        let inner = inner.0;
16257                        let method = GetAPITokensSvc(inner);
16258                        let codec = tonic::codec::ProstCodec::default();
16259                        let mut grpc = tonic::server::Grpc::new(codec)
16260                            .apply_compression_config(
16261                                accept_compression_encodings,
16262                                send_compression_encodings,
16263                            )
16264                            .apply_max_message_size_config(
16265                                max_decoding_message_size,
16266                                max_encoding_message_size,
16267                            );
16268                        let res = grpc.unary(method, req).await;
16269                        Ok(res)
16270                    };
16271                    Box::pin(fut)
16272                }
16273                "/aruna.api.storage.services.v2.UserService/DeleteAPIToken" => {
16274                    #[allow(non_camel_case_types)]
16275                    struct DeleteAPITokenSvc<T: UserService>(pub Arc<T>);
16276                    impl<
16277                        T: UserService,
16278                    > tonic::server::UnaryService<super::DeleteApiTokenRequest>
16279                    for DeleteAPITokenSvc<T> {
16280                        type Response = super::DeleteApiTokenResponse;
16281                        type Future = BoxFuture<
16282                            tonic::Response<Self::Response>,
16283                            tonic::Status,
16284                        >;
16285                        fn call(
16286                            &mut self,
16287                            request: tonic::Request<super::DeleteApiTokenRequest>,
16288                        ) -> Self::Future {
16289                            let inner = Arc::clone(&self.0);
16290                            let fut = async move {
16291                                <T as UserService>::delete_api_token(&inner, request).await
16292                            };
16293                            Box::pin(fut)
16294                        }
16295                    }
16296                    let accept_compression_encodings = self.accept_compression_encodings;
16297                    let send_compression_encodings = self.send_compression_encodings;
16298                    let max_decoding_message_size = self.max_decoding_message_size;
16299                    let max_encoding_message_size = self.max_encoding_message_size;
16300                    let inner = self.inner.clone();
16301                    let fut = async move {
16302                        let inner = inner.0;
16303                        let method = DeleteAPITokenSvc(inner);
16304                        let codec = tonic::codec::ProstCodec::default();
16305                        let mut grpc = tonic::server::Grpc::new(codec)
16306                            .apply_compression_config(
16307                                accept_compression_encodings,
16308                                send_compression_encodings,
16309                            )
16310                            .apply_max_message_size_config(
16311                                max_decoding_message_size,
16312                                max_encoding_message_size,
16313                            );
16314                        let res = grpc.unary(method, req).await;
16315                        Ok(res)
16316                    };
16317                    Box::pin(fut)
16318                }
16319                "/aruna.api.storage.services.v2.UserService/DeleteAPITokens" => {
16320                    #[allow(non_camel_case_types)]
16321                    struct DeleteAPITokensSvc<T: UserService>(pub Arc<T>);
16322                    impl<
16323                        T: UserService,
16324                    > tonic::server::UnaryService<super::DeleteApiTokensRequest>
16325                    for DeleteAPITokensSvc<T> {
16326                        type Response = super::DeleteApiTokensResponse;
16327                        type Future = BoxFuture<
16328                            tonic::Response<Self::Response>,
16329                            tonic::Status,
16330                        >;
16331                        fn call(
16332                            &mut self,
16333                            request: tonic::Request<super::DeleteApiTokensRequest>,
16334                        ) -> Self::Future {
16335                            let inner = Arc::clone(&self.0);
16336                            let fut = async move {
16337                                <T as UserService>::delete_api_tokens(&inner, request).await
16338                            };
16339                            Box::pin(fut)
16340                        }
16341                    }
16342                    let accept_compression_encodings = self.accept_compression_encodings;
16343                    let send_compression_encodings = self.send_compression_encodings;
16344                    let max_decoding_message_size = self.max_decoding_message_size;
16345                    let max_encoding_message_size = self.max_encoding_message_size;
16346                    let inner = self.inner.clone();
16347                    let fut = async move {
16348                        let inner = inner.0;
16349                        let method = DeleteAPITokensSvc(inner);
16350                        let codec = tonic::codec::ProstCodec::default();
16351                        let mut grpc = tonic::server::Grpc::new(codec)
16352                            .apply_compression_config(
16353                                accept_compression_encodings,
16354                                send_compression_encodings,
16355                            )
16356                            .apply_max_message_size_config(
16357                                max_decoding_message_size,
16358                                max_encoding_message_size,
16359                            );
16360                        let res = grpc.unary(method, req).await;
16361                        Ok(res)
16362                    };
16363                    Box::pin(fut)
16364                }
16365                "/aruna.api.storage.services.v2.UserService/GetUser" => {
16366                    #[allow(non_camel_case_types)]
16367                    struct GetUserSvc<T: UserService>(pub Arc<T>);
16368                    impl<
16369                        T: UserService,
16370                    > tonic::server::UnaryService<super::GetUserRequest>
16371                    for GetUserSvc<T> {
16372                        type Response = super::GetUserResponse;
16373                        type Future = BoxFuture<
16374                            tonic::Response<Self::Response>,
16375                            tonic::Status,
16376                        >;
16377                        fn call(
16378                            &mut self,
16379                            request: tonic::Request<super::GetUserRequest>,
16380                        ) -> Self::Future {
16381                            let inner = Arc::clone(&self.0);
16382                            let fut = async move {
16383                                <T as UserService>::get_user(&inner, request).await
16384                            };
16385                            Box::pin(fut)
16386                        }
16387                    }
16388                    let accept_compression_encodings = self.accept_compression_encodings;
16389                    let send_compression_encodings = self.send_compression_encodings;
16390                    let max_decoding_message_size = self.max_decoding_message_size;
16391                    let max_encoding_message_size = self.max_encoding_message_size;
16392                    let inner = self.inner.clone();
16393                    let fut = async move {
16394                        let inner = inner.0;
16395                        let method = GetUserSvc(inner);
16396                        let codec = tonic::codec::ProstCodec::default();
16397                        let mut grpc = tonic::server::Grpc::new(codec)
16398                            .apply_compression_config(
16399                                accept_compression_encodings,
16400                                send_compression_encodings,
16401                            )
16402                            .apply_max_message_size_config(
16403                                max_decoding_message_size,
16404                                max_encoding_message_size,
16405                            );
16406                        let res = grpc.unary(method, req).await;
16407                        Ok(res)
16408                    };
16409                    Box::pin(fut)
16410                }
16411                "/aruna.api.storage.services.v2.UserService/GetUserRedacted" => {
16412                    #[allow(non_camel_case_types)]
16413                    struct GetUserRedactedSvc<T: UserService>(pub Arc<T>);
16414                    impl<
16415                        T: UserService,
16416                    > tonic::server::UnaryService<super::GetUserRedactedRequest>
16417                    for GetUserRedactedSvc<T> {
16418                        type Response = super::GetUserRedactedResponse;
16419                        type Future = BoxFuture<
16420                            tonic::Response<Self::Response>,
16421                            tonic::Status,
16422                        >;
16423                        fn call(
16424                            &mut self,
16425                            request: tonic::Request<super::GetUserRedactedRequest>,
16426                        ) -> Self::Future {
16427                            let inner = Arc::clone(&self.0);
16428                            let fut = async move {
16429                                <T as UserService>::get_user_redacted(&inner, request).await
16430                            };
16431                            Box::pin(fut)
16432                        }
16433                    }
16434                    let accept_compression_encodings = self.accept_compression_encodings;
16435                    let send_compression_encodings = self.send_compression_encodings;
16436                    let max_decoding_message_size = self.max_decoding_message_size;
16437                    let max_encoding_message_size = self.max_encoding_message_size;
16438                    let inner = self.inner.clone();
16439                    let fut = async move {
16440                        let inner = inner.0;
16441                        let method = GetUserRedactedSvc(inner);
16442                        let codec = tonic::codec::ProstCodec::default();
16443                        let mut grpc = tonic::server::Grpc::new(codec)
16444                            .apply_compression_config(
16445                                accept_compression_encodings,
16446                                send_compression_encodings,
16447                            )
16448                            .apply_max_message_size_config(
16449                                max_decoding_message_size,
16450                                max_encoding_message_size,
16451                            );
16452                        let res = grpc.unary(method, req).await;
16453                        Ok(res)
16454                    };
16455                    Box::pin(fut)
16456                }
16457                "/aruna.api.storage.services.v2.UserService/UpdateUserDisplayName" => {
16458                    #[allow(non_camel_case_types)]
16459                    struct UpdateUserDisplayNameSvc<T: UserService>(pub Arc<T>);
16460                    impl<
16461                        T: UserService,
16462                    > tonic::server::UnaryService<super::UpdateUserDisplayNameRequest>
16463                    for UpdateUserDisplayNameSvc<T> {
16464                        type Response = super::UpdateUserDisplayNameResponse;
16465                        type Future = BoxFuture<
16466                            tonic::Response<Self::Response>,
16467                            tonic::Status,
16468                        >;
16469                        fn call(
16470                            &mut self,
16471                            request: tonic::Request<super::UpdateUserDisplayNameRequest>,
16472                        ) -> Self::Future {
16473                            let inner = Arc::clone(&self.0);
16474                            let fut = async move {
16475                                <T as UserService>::update_user_display_name(
16476                                        &inner,
16477                                        request,
16478                                    )
16479                                    .await
16480                            };
16481                            Box::pin(fut)
16482                        }
16483                    }
16484                    let accept_compression_encodings = self.accept_compression_encodings;
16485                    let send_compression_encodings = self.send_compression_encodings;
16486                    let max_decoding_message_size = self.max_decoding_message_size;
16487                    let max_encoding_message_size = self.max_encoding_message_size;
16488                    let inner = self.inner.clone();
16489                    let fut = async move {
16490                        let inner = inner.0;
16491                        let method = UpdateUserDisplayNameSvc(inner);
16492                        let codec = tonic::codec::ProstCodec::default();
16493                        let mut grpc = tonic::server::Grpc::new(codec)
16494                            .apply_compression_config(
16495                                accept_compression_encodings,
16496                                send_compression_encodings,
16497                            )
16498                            .apply_max_message_size_config(
16499                                max_decoding_message_size,
16500                                max_encoding_message_size,
16501                            );
16502                        let res = grpc.unary(method, req).await;
16503                        Ok(res)
16504                    };
16505                    Box::pin(fut)
16506                }
16507                "/aruna.api.storage.services.v2.UserService/UpdateUserEmail" => {
16508                    #[allow(non_camel_case_types)]
16509                    struct UpdateUserEmailSvc<T: UserService>(pub Arc<T>);
16510                    impl<
16511                        T: UserService,
16512                    > tonic::server::UnaryService<super::UpdateUserEmailRequest>
16513                    for UpdateUserEmailSvc<T> {
16514                        type Response = super::UpdateUserEmailResponse;
16515                        type Future = BoxFuture<
16516                            tonic::Response<Self::Response>,
16517                            tonic::Status,
16518                        >;
16519                        fn call(
16520                            &mut self,
16521                            request: tonic::Request<super::UpdateUserEmailRequest>,
16522                        ) -> Self::Future {
16523                            let inner = Arc::clone(&self.0);
16524                            let fut = async move {
16525                                <T as UserService>::update_user_email(&inner, request).await
16526                            };
16527                            Box::pin(fut)
16528                        }
16529                    }
16530                    let accept_compression_encodings = self.accept_compression_encodings;
16531                    let send_compression_encodings = self.send_compression_encodings;
16532                    let max_decoding_message_size = self.max_decoding_message_size;
16533                    let max_encoding_message_size = self.max_encoding_message_size;
16534                    let inner = self.inner.clone();
16535                    let fut = async move {
16536                        let inner = inner.0;
16537                        let method = UpdateUserEmailSvc(inner);
16538                        let codec = tonic::codec::ProstCodec::default();
16539                        let mut grpc = tonic::server::Grpc::new(codec)
16540                            .apply_compression_config(
16541                                accept_compression_encodings,
16542                                send_compression_encodings,
16543                            )
16544                            .apply_max_message_size_config(
16545                                max_decoding_message_size,
16546                                max_encoding_message_size,
16547                            );
16548                        let res = grpc.unary(method, req).await;
16549                        Ok(res)
16550                    };
16551                    Box::pin(fut)
16552                }
16553                "/aruna.api.storage.services.v2.UserService/GetNotActivatedUsers" => {
16554                    #[allow(non_camel_case_types)]
16555                    struct GetNotActivatedUsersSvc<T: UserService>(pub Arc<T>);
16556                    impl<
16557                        T: UserService,
16558                    > tonic::server::UnaryService<super::GetNotActivatedUsersRequest>
16559                    for GetNotActivatedUsersSvc<T> {
16560                        type Response = super::GetNotActivatedUsersResponse;
16561                        type Future = BoxFuture<
16562                            tonic::Response<Self::Response>,
16563                            tonic::Status,
16564                        >;
16565                        fn call(
16566                            &mut self,
16567                            request: tonic::Request<super::GetNotActivatedUsersRequest>,
16568                        ) -> Self::Future {
16569                            let inner = Arc::clone(&self.0);
16570                            let fut = async move {
16571                                <T as UserService>::get_not_activated_users(&inner, request)
16572                                    .await
16573                            };
16574                            Box::pin(fut)
16575                        }
16576                    }
16577                    let accept_compression_encodings = self.accept_compression_encodings;
16578                    let send_compression_encodings = self.send_compression_encodings;
16579                    let max_decoding_message_size = self.max_decoding_message_size;
16580                    let max_encoding_message_size = self.max_encoding_message_size;
16581                    let inner = self.inner.clone();
16582                    let fut = async move {
16583                        let inner = inner.0;
16584                        let method = GetNotActivatedUsersSvc(inner);
16585                        let codec = tonic::codec::ProstCodec::default();
16586                        let mut grpc = tonic::server::Grpc::new(codec)
16587                            .apply_compression_config(
16588                                accept_compression_encodings,
16589                                send_compression_encodings,
16590                            )
16591                            .apply_max_message_size_config(
16592                                max_decoding_message_size,
16593                                max_encoding_message_size,
16594                            );
16595                        let res = grpc.unary(method, req).await;
16596                        Ok(res)
16597                    };
16598                    Box::pin(fut)
16599                }
16600                "/aruna.api.storage.services.v2.UserService/GetAllUsers" => {
16601                    #[allow(non_camel_case_types)]
16602                    struct GetAllUsersSvc<T: UserService>(pub Arc<T>);
16603                    impl<
16604                        T: UserService,
16605                    > tonic::server::UnaryService<super::GetAllUsersRequest>
16606                    for GetAllUsersSvc<T> {
16607                        type Response = super::GetAllUsersResponse;
16608                        type Future = BoxFuture<
16609                            tonic::Response<Self::Response>,
16610                            tonic::Status,
16611                        >;
16612                        fn call(
16613                            &mut self,
16614                            request: tonic::Request<super::GetAllUsersRequest>,
16615                        ) -> Self::Future {
16616                            let inner = Arc::clone(&self.0);
16617                            let fut = async move {
16618                                <T as UserService>::get_all_users(&inner, request).await
16619                            };
16620                            Box::pin(fut)
16621                        }
16622                    }
16623                    let accept_compression_encodings = self.accept_compression_encodings;
16624                    let send_compression_encodings = self.send_compression_encodings;
16625                    let max_decoding_message_size = self.max_decoding_message_size;
16626                    let max_encoding_message_size = self.max_encoding_message_size;
16627                    let inner = self.inner.clone();
16628                    let fut = async move {
16629                        let inner = inner.0;
16630                        let method = GetAllUsersSvc(inner);
16631                        let codec = tonic::codec::ProstCodec::default();
16632                        let mut grpc = tonic::server::Grpc::new(codec)
16633                            .apply_compression_config(
16634                                accept_compression_encodings,
16635                                send_compression_encodings,
16636                            )
16637                            .apply_max_message_size_config(
16638                                max_decoding_message_size,
16639                                max_encoding_message_size,
16640                            );
16641                        let res = grpc.unary(method, req).await;
16642                        Ok(res)
16643                    };
16644                    Box::pin(fut)
16645                }
16646                "/aruna.api.storage.services.v2.UserService/CreateS3CredentialsUserToken" => {
16647                    #[allow(non_camel_case_types)]
16648                    struct CreateS3CredentialsUserTokenSvc<T: UserService>(pub Arc<T>);
16649                    impl<
16650                        T: UserService,
16651                    > tonic::server::UnaryService<
16652                        super::CreateS3CredentialsUserTokenRequest,
16653                    > for CreateS3CredentialsUserTokenSvc<T> {
16654                        type Response = super::CreateS3CredentialsUserTokenResponse;
16655                        type Future = BoxFuture<
16656                            tonic::Response<Self::Response>,
16657                            tonic::Status,
16658                        >;
16659                        fn call(
16660                            &mut self,
16661                            request: tonic::Request<
16662                                super::CreateS3CredentialsUserTokenRequest,
16663                            >,
16664                        ) -> Self::Future {
16665                            let inner = Arc::clone(&self.0);
16666                            let fut = async move {
16667                                <T as UserService>::create_s3_credentials_user_token(
16668                                        &inner,
16669                                        request,
16670                                    )
16671                                    .await
16672                            };
16673                            Box::pin(fut)
16674                        }
16675                    }
16676                    let accept_compression_encodings = self.accept_compression_encodings;
16677                    let send_compression_encodings = self.send_compression_encodings;
16678                    let max_decoding_message_size = self.max_decoding_message_size;
16679                    let max_encoding_message_size = self.max_encoding_message_size;
16680                    let inner = self.inner.clone();
16681                    let fut = async move {
16682                        let inner = inner.0;
16683                        let method = CreateS3CredentialsUserTokenSvc(inner);
16684                        let codec = tonic::codec::ProstCodec::default();
16685                        let mut grpc = tonic::server::Grpc::new(codec)
16686                            .apply_compression_config(
16687                                accept_compression_encodings,
16688                                send_compression_encodings,
16689                            )
16690                            .apply_max_message_size_config(
16691                                max_decoding_message_size,
16692                                max_encoding_message_size,
16693                            );
16694                        let res = grpc.unary(method, req).await;
16695                        Ok(res)
16696                    };
16697                    Box::pin(fut)
16698                }
16699                "/aruna.api.storage.services.v2.UserService/GetS3CredentialsUserToken" => {
16700                    #[allow(non_camel_case_types)]
16701                    struct GetS3CredentialsUserTokenSvc<T: UserService>(pub Arc<T>);
16702                    impl<
16703                        T: UserService,
16704                    > tonic::server::UnaryService<
16705                        super::GetS3CredentialsUserTokenRequest,
16706                    > for GetS3CredentialsUserTokenSvc<T> {
16707                        type Response = super::GetS3CredentialsUserTokenResponse;
16708                        type Future = BoxFuture<
16709                            tonic::Response<Self::Response>,
16710                            tonic::Status,
16711                        >;
16712                        fn call(
16713                            &mut self,
16714                            request: tonic::Request<
16715                                super::GetS3CredentialsUserTokenRequest,
16716                            >,
16717                        ) -> Self::Future {
16718                            let inner = Arc::clone(&self.0);
16719                            let fut = async move {
16720                                <T as UserService>::get_s3_credentials_user_token(
16721                                        &inner,
16722                                        request,
16723                                    )
16724                                    .await
16725                            };
16726                            Box::pin(fut)
16727                        }
16728                    }
16729                    let accept_compression_encodings = self.accept_compression_encodings;
16730                    let send_compression_encodings = self.send_compression_encodings;
16731                    let max_decoding_message_size = self.max_decoding_message_size;
16732                    let max_encoding_message_size = self.max_encoding_message_size;
16733                    let inner = self.inner.clone();
16734                    let fut = async move {
16735                        let inner = inner.0;
16736                        let method = GetS3CredentialsUserTokenSvc(inner);
16737                        let codec = tonic::codec::ProstCodec::default();
16738                        let mut grpc = tonic::server::Grpc::new(codec)
16739                            .apply_compression_config(
16740                                accept_compression_encodings,
16741                                send_compression_encodings,
16742                            )
16743                            .apply_max_message_size_config(
16744                                max_decoding_message_size,
16745                                max_encoding_message_size,
16746                            );
16747                        let res = grpc.unary(method, req).await;
16748                        Ok(res)
16749                    };
16750                    Box::pin(fut)
16751                }
16752                "/aruna.api.storage.services.v2.UserService/DeleteS3CredentialsUserToken" => {
16753                    #[allow(non_camel_case_types)]
16754                    struct DeleteS3CredentialsUserTokenSvc<T: UserService>(pub Arc<T>);
16755                    impl<
16756                        T: UserService,
16757                    > tonic::server::UnaryService<
16758                        super::DeleteS3CredentialsUserTokenRequest,
16759                    > for DeleteS3CredentialsUserTokenSvc<T> {
16760                        type Response = super::DeleteS3CredentialsUserResponse;
16761                        type Future = BoxFuture<
16762                            tonic::Response<Self::Response>,
16763                            tonic::Status,
16764                        >;
16765                        fn call(
16766                            &mut self,
16767                            request: tonic::Request<
16768                                super::DeleteS3CredentialsUserTokenRequest,
16769                            >,
16770                        ) -> Self::Future {
16771                            let inner = Arc::clone(&self.0);
16772                            let fut = async move {
16773                                <T as UserService>::delete_s3_credentials_user_token(
16774                                        &inner,
16775                                        request,
16776                                    )
16777                                    .await
16778                            };
16779                            Box::pin(fut)
16780                        }
16781                    }
16782                    let accept_compression_encodings = self.accept_compression_encodings;
16783                    let send_compression_encodings = self.send_compression_encodings;
16784                    let max_decoding_message_size = self.max_decoding_message_size;
16785                    let max_encoding_message_size = self.max_encoding_message_size;
16786                    let inner = self.inner.clone();
16787                    let fut = async move {
16788                        let inner = inner.0;
16789                        let method = DeleteS3CredentialsUserTokenSvc(inner);
16790                        let codec = tonic::codec::ProstCodec::default();
16791                        let mut grpc = tonic::server::Grpc::new(codec)
16792                            .apply_compression_config(
16793                                accept_compression_encodings,
16794                                send_compression_encodings,
16795                            )
16796                            .apply_max_message_size_config(
16797                                max_decoding_message_size,
16798                                max_encoding_message_size,
16799                            );
16800                        let res = grpc.unary(method, req).await;
16801                        Ok(res)
16802                    };
16803                    Box::pin(fut)
16804                }
16805                "/aruna.api.storage.services.v2.UserService/GetDataproxyTokenUser" => {
16806                    #[allow(non_camel_case_types)]
16807                    struct GetDataproxyTokenUserSvc<T: UserService>(pub Arc<T>);
16808                    impl<
16809                        T: UserService,
16810                    > tonic::server::UnaryService<super::GetDataproxyTokenUserRequest>
16811                    for GetDataproxyTokenUserSvc<T> {
16812                        type Response = super::GetDataproxyTokenUserResponse;
16813                        type Future = BoxFuture<
16814                            tonic::Response<Self::Response>,
16815                            tonic::Status,
16816                        >;
16817                        fn call(
16818                            &mut self,
16819                            request: tonic::Request<super::GetDataproxyTokenUserRequest>,
16820                        ) -> Self::Future {
16821                            let inner = Arc::clone(&self.0);
16822                            let fut = async move {
16823                                <T as UserService>::get_dataproxy_token_user(
16824                                        &inner,
16825                                        request,
16826                                    )
16827                                    .await
16828                            };
16829                            Box::pin(fut)
16830                        }
16831                    }
16832                    let accept_compression_encodings = self.accept_compression_encodings;
16833                    let send_compression_encodings = self.send_compression_encodings;
16834                    let max_decoding_message_size = self.max_decoding_message_size;
16835                    let max_encoding_message_size = self.max_encoding_message_size;
16836                    let inner = self.inner.clone();
16837                    let fut = async move {
16838                        let inner = inner.0;
16839                        let method = GetDataproxyTokenUserSvc(inner);
16840                        let codec = tonic::codec::ProstCodec::default();
16841                        let mut grpc = tonic::server::Grpc::new(codec)
16842                            .apply_compression_config(
16843                                accept_compression_encodings,
16844                                send_compression_encodings,
16845                            )
16846                            .apply_max_message_size_config(
16847                                max_decoding_message_size,
16848                                max_encoding_message_size,
16849                            );
16850                        let res = grpc.unary(method, req).await;
16851                        Ok(res)
16852                    };
16853                    Box::pin(fut)
16854                }
16855                "/aruna.api.storage.services.v2.UserService/GetPersonalNotifications" => {
16856                    #[allow(non_camel_case_types)]
16857                    struct GetPersonalNotificationsSvc<T: UserService>(pub Arc<T>);
16858                    impl<
16859                        T: UserService,
16860                    > tonic::server::UnaryService<super::GetPersonalNotificationsRequest>
16861                    for GetPersonalNotificationsSvc<T> {
16862                        type Response = super::GetPersonalNotificationsResponse;
16863                        type Future = BoxFuture<
16864                            tonic::Response<Self::Response>,
16865                            tonic::Status,
16866                        >;
16867                        fn call(
16868                            &mut self,
16869                            request: tonic::Request<
16870                                super::GetPersonalNotificationsRequest,
16871                            >,
16872                        ) -> Self::Future {
16873                            let inner = Arc::clone(&self.0);
16874                            let fut = async move {
16875                                <T as UserService>::get_personal_notifications(
16876                                        &inner,
16877                                        request,
16878                                    )
16879                                    .await
16880                            };
16881                            Box::pin(fut)
16882                        }
16883                    }
16884                    let accept_compression_encodings = self.accept_compression_encodings;
16885                    let send_compression_encodings = self.send_compression_encodings;
16886                    let max_decoding_message_size = self.max_decoding_message_size;
16887                    let max_encoding_message_size = self.max_encoding_message_size;
16888                    let inner = self.inner.clone();
16889                    let fut = async move {
16890                        let inner = inner.0;
16891                        let method = GetPersonalNotificationsSvc(inner);
16892                        let codec = tonic::codec::ProstCodec::default();
16893                        let mut grpc = tonic::server::Grpc::new(codec)
16894                            .apply_compression_config(
16895                                accept_compression_encodings,
16896                                send_compression_encodings,
16897                            )
16898                            .apply_max_message_size_config(
16899                                max_decoding_message_size,
16900                                max_encoding_message_size,
16901                            );
16902                        let res = grpc.unary(method, req).await;
16903                        Ok(res)
16904                    };
16905                    Box::pin(fut)
16906                }
16907                "/aruna.api.storage.services.v2.UserService/AcknowledgePersonalNotifications" => {
16908                    #[allow(non_camel_case_types)]
16909                    struct AcknowledgePersonalNotificationsSvc<T: UserService>(
16910                        pub Arc<T>,
16911                    );
16912                    impl<
16913                        T: UserService,
16914                    > tonic::server::UnaryService<
16915                        super::AcknowledgePersonalNotificationsRequest,
16916                    > for AcknowledgePersonalNotificationsSvc<T> {
16917                        type Response = super::AcknowledgePersonalNotificationsResponse;
16918                        type Future = BoxFuture<
16919                            tonic::Response<Self::Response>,
16920                            tonic::Status,
16921                        >;
16922                        fn call(
16923                            &mut self,
16924                            request: tonic::Request<
16925                                super::AcknowledgePersonalNotificationsRequest,
16926                            >,
16927                        ) -> Self::Future {
16928                            let inner = Arc::clone(&self.0);
16929                            let fut = async move {
16930                                <T as UserService>::acknowledge_personal_notifications(
16931                                        &inner,
16932                                        request,
16933                                    )
16934                                    .await
16935                            };
16936                            Box::pin(fut)
16937                        }
16938                    }
16939                    let accept_compression_encodings = self.accept_compression_encodings;
16940                    let send_compression_encodings = self.send_compression_encodings;
16941                    let max_decoding_message_size = self.max_decoding_message_size;
16942                    let max_encoding_message_size = self.max_encoding_message_size;
16943                    let inner = self.inner.clone();
16944                    let fut = async move {
16945                        let inner = inner.0;
16946                        let method = AcknowledgePersonalNotificationsSvc(inner);
16947                        let codec = tonic::codec::ProstCodec::default();
16948                        let mut grpc = tonic::server::Grpc::new(codec)
16949                            .apply_compression_config(
16950                                accept_compression_encodings,
16951                                send_compression_encodings,
16952                            )
16953                            .apply_max_message_size_config(
16954                                max_decoding_message_size,
16955                                max_encoding_message_size,
16956                            );
16957                        let res = grpc.unary(method, req).await;
16958                        Ok(res)
16959                    };
16960                    Box::pin(fut)
16961                }
16962                "/aruna.api.storage.services.v2.UserService/AddOidcProvider" => {
16963                    #[allow(non_camel_case_types)]
16964                    struct AddOidcProviderSvc<T: UserService>(pub Arc<T>);
16965                    impl<
16966                        T: UserService,
16967                    > tonic::server::UnaryService<super::AddOidcProviderRequest>
16968                    for AddOidcProviderSvc<T> {
16969                        type Response = super::AddOidcProviderResponse;
16970                        type Future = BoxFuture<
16971                            tonic::Response<Self::Response>,
16972                            tonic::Status,
16973                        >;
16974                        fn call(
16975                            &mut self,
16976                            request: tonic::Request<super::AddOidcProviderRequest>,
16977                        ) -> Self::Future {
16978                            let inner = Arc::clone(&self.0);
16979                            let fut = async move {
16980                                <T as UserService>::add_oidc_provider(&inner, request).await
16981                            };
16982                            Box::pin(fut)
16983                        }
16984                    }
16985                    let accept_compression_encodings = self.accept_compression_encodings;
16986                    let send_compression_encodings = self.send_compression_encodings;
16987                    let max_decoding_message_size = self.max_decoding_message_size;
16988                    let max_encoding_message_size = self.max_encoding_message_size;
16989                    let inner = self.inner.clone();
16990                    let fut = async move {
16991                        let inner = inner.0;
16992                        let method = AddOidcProviderSvc(inner);
16993                        let codec = tonic::codec::ProstCodec::default();
16994                        let mut grpc = tonic::server::Grpc::new(codec)
16995                            .apply_compression_config(
16996                                accept_compression_encodings,
16997                                send_compression_encodings,
16998                            )
16999                            .apply_max_message_size_config(
17000                                max_decoding_message_size,
17001                                max_encoding_message_size,
17002                            );
17003                        let res = grpc.unary(method, req).await;
17004                        Ok(res)
17005                    };
17006                    Box::pin(fut)
17007                }
17008                "/aruna.api.storage.services.v2.UserService/RemoveOidcProvider" => {
17009                    #[allow(non_camel_case_types)]
17010                    struct RemoveOidcProviderSvc<T: UserService>(pub Arc<T>);
17011                    impl<
17012                        T: UserService,
17013                    > tonic::server::UnaryService<super::RemoveOidcProviderRequest>
17014                    for RemoveOidcProviderSvc<T> {
17015                        type Response = super::RemoveOidcProviderResponse;
17016                        type Future = BoxFuture<
17017                            tonic::Response<Self::Response>,
17018                            tonic::Status,
17019                        >;
17020                        fn call(
17021                            &mut self,
17022                            request: tonic::Request<super::RemoveOidcProviderRequest>,
17023                        ) -> Self::Future {
17024                            let inner = Arc::clone(&self.0);
17025                            let fut = async move {
17026                                <T as UserService>::remove_oidc_provider(&inner, request)
17027                                    .await
17028                            };
17029                            Box::pin(fut)
17030                        }
17031                    }
17032                    let accept_compression_encodings = self.accept_compression_encodings;
17033                    let send_compression_encodings = self.send_compression_encodings;
17034                    let max_decoding_message_size = self.max_decoding_message_size;
17035                    let max_encoding_message_size = self.max_encoding_message_size;
17036                    let inner = self.inner.clone();
17037                    let fut = async move {
17038                        let inner = inner.0;
17039                        let method = RemoveOidcProviderSvc(inner);
17040                        let codec = tonic::codec::ProstCodec::default();
17041                        let mut grpc = tonic::server::Grpc::new(codec)
17042                            .apply_compression_config(
17043                                accept_compression_encodings,
17044                                send_compression_encodings,
17045                            )
17046                            .apply_max_message_size_config(
17047                                max_decoding_message_size,
17048                                max_encoding_message_size,
17049                            );
17050                        let res = grpc.unary(method, req).await;
17051                        Ok(res)
17052                    };
17053                    Box::pin(fut)
17054                }
17055                "/aruna.api.storage.services.v2.UserService/AddPubkeyUser" => {
17056                    #[allow(non_camel_case_types)]
17057                    struct AddPubkeyUserSvc<T: UserService>(pub Arc<T>);
17058                    impl<
17059                        T: UserService,
17060                    > tonic::server::UnaryService<super::AddPubkeyUserRequest>
17061                    for AddPubkeyUserSvc<T> {
17062                        type Response = super::AddPubkeyUserResponse;
17063                        type Future = BoxFuture<
17064                            tonic::Response<Self::Response>,
17065                            tonic::Status,
17066                        >;
17067                        fn call(
17068                            &mut self,
17069                            request: tonic::Request<super::AddPubkeyUserRequest>,
17070                        ) -> Self::Future {
17071                            let inner = Arc::clone(&self.0);
17072                            let fut = async move {
17073                                <T as UserService>::add_pubkey_user(&inner, request).await
17074                            };
17075                            Box::pin(fut)
17076                        }
17077                    }
17078                    let accept_compression_encodings = self.accept_compression_encodings;
17079                    let send_compression_encodings = self.send_compression_encodings;
17080                    let max_decoding_message_size = self.max_decoding_message_size;
17081                    let max_encoding_message_size = self.max_encoding_message_size;
17082                    let inner = self.inner.clone();
17083                    let fut = async move {
17084                        let inner = inner.0;
17085                        let method = AddPubkeyUserSvc(inner);
17086                        let codec = tonic::codec::ProstCodec::default();
17087                        let mut grpc = tonic::server::Grpc::new(codec)
17088                            .apply_compression_config(
17089                                accept_compression_encodings,
17090                                send_compression_encodings,
17091                            )
17092                            .apply_max_message_size_config(
17093                                max_decoding_message_size,
17094                                max_encoding_message_size,
17095                            );
17096                        let res = grpc.unary(method, req).await;
17097                        Ok(res)
17098                    };
17099                    Box::pin(fut)
17100                }
17101                "/aruna.api.storage.services.v2.UserService/AddTrustedEndpointsUser" => {
17102                    #[allow(non_camel_case_types)]
17103                    struct AddTrustedEndpointsUserSvc<T: UserService>(pub Arc<T>);
17104                    impl<
17105                        T: UserService,
17106                    > tonic::server::UnaryService<super::AddTrustedEndpointsUserRequest>
17107                    for AddTrustedEndpointsUserSvc<T> {
17108                        type Response = super::AddTrustedEndpointsUserResponse;
17109                        type Future = BoxFuture<
17110                            tonic::Response<Self::Response>,
17111                            tonic::Status,
17112                        >;
17113                        fn call(
17114                            &mut self,
17115                            request: tonic::Request<
17116                                super::AddTrustedEndpointsUserRequest,
17117                            >,
17118                        ) -> Self::Future {
17119                            let inner = Arc::clone(&self.0);
17120                            let fut = async move {
17121                                <T as UserService>::add_trusted_endpoints_user(
17122                                        &inner,
17123                                        request,
17124                                    )
17125                                    .await
17126                            };
17127                            Box::pin(fut)
17128                        }
17129                    }
17130                    let accept_compression_encodings = self.accept_compression_encodings;
17131                    let send_compression_encodings = self.send_compression_encodings;
17132                    let max_decoding_message_size = self.max_decoding_message_size;
17133                    let max_encoding_message_size = self.max_encoding_message_size;
17134                    let inner = self.inner.clone();
17135                    let fut = async move {
17136                        let inner = inner.0;
17137                        let method = AddTrustedEndpointsUserSvc(inner);
17138                        let codec = tonic::codec::ProstCodec::default();
17139                        let mut grpc = tonic::server::Grpc::new(codec)
17140                            .apply_compression_config(
17141                                accept_compression_encodings,
17142                                send_compression_encodings,
17143                            )
17144                            .apply_max_message_size_config(
17145                                max_decoding_message_size,
17146                                max_encoding_message_size,
17147                            );
17148                        let res = grpc.unary(method, req).await;
17149                        Ok(res)
17150                    };
17151                    Box::pin(fut)
17152                }
17153                "/aruna.api.storage.services.v2.UserService/RemoveTrustedEndpointsUser" => {
17154                    #[allow(non_camel_case_types)]
17155                    struct RemoveTrustedEndpointsUserSvc<T: UserService>(pub Arc<T>);
17156                    impl<
17157                        T: UserService,
17158                    > tonic::server::UnaryService<
17159                        super::RemoveTrustedEndpointsUserRequest,
17160                    > for RemoveTrustedEndpointsUserSvc<T> {
17161                        type Response = super::RemoveTrustedEndpointsUserResponse;
17162                        type Future = BoxFuture<
17163                            tonic::Response<Self::Response>,
17164                            tonic::Status,
17165                        >;
17166                        fn call(
17167                            &mut self,
17168                            request: tonic::Request<
17169                                super::RemoveTrustedEndpointsUserRequest,
17170                            >,
17171                        ) -> Self::Future {
17172                            let inner = Arc::clone(&self.0);
17173                            let fut = async move {
17174                                <T as UserService>::remove_trusted_endpoints_user(
17175                                        &inner,
17176                                        request,
17177                                    )
17178                                    .await
17179                            };
17180                            Box::pin(fut)
17181                        }
17182                    }
17183                    let accept_compression_encodings = self.accept_compression_encodings;
17184                    let send_compression_encodings = self.send_compression_encodings;
17185                    let max_decoding_message_size = self.max_decoding_message_size;
17186                    let max_encoding_message_size = self.max_encoding_message_size;
17187                    let inner = self.inner.clone();
17188                    let fut = async move {
17189                        let inner = inner.0;
17190                        let method = RemoveTrustedEndpointsUserSvc(inner);
17191                        let codec = tonic::codec::ProstCodec::default();
17192                        let mut grpc = tonic::server::Grpc::new(codec)
17193                            .apply_compression_config(
17194                                accept_compression_encodings,
17195                                send_compression_encodings,
17196                            )
17197                            .apply_max_message_size_config(
17198                                max_decoding_message_size,
17199                                max_encoding_message_size,
17200                            );
17201                        let res = grpc.unary(method, req).await;
17202                        Ok(res)
17203                    };
17204                    Box::pin(fut)
17205                }
17206                "/aruna.api.storage.services.v2.UserService/AddDataProxyAttributeUser" => {
17207                    #[allow(non_camel_case_types)]
17208                    struct AddDataProxyAttributeUserSvc<T: UserService>(pub Arc<T>);
17209                    impl<
17210                        T: UserService,
17211                    > tonic::server::UnaryService<
17212                        super::AddDataProxyAttributeUserRequest,
17213                    > for AddDataProxyAttributeUserSvc<T> {
17214                        type Response = super::AddDataProxyAttributeUserResponse;
17215                        type Future = BoxFuture<
17216                            tonic::Response<Self::Response>,
17217                            tonic::Status,
17218                        >;
17219                        fn call(
17220                            &mut self,
17221                            request: tonic::Request<
17222                                super::AddDataProxyAttributeUserRequest,
17223                            >,
17224                        ) -> Self::Future {
17225                            let inner = Arc::clone(&self.0);
17226                            let fut = async move {
17227                                <T as UserService>::add_data_proxy_attribute_user(
17228                                        &inner,
17229                                        request,
17230                                    )
17231                                    .await
17232                            };
17233                            Box::pin(fut)
17234                        }
17235                    }
17236                    let accept_compression_encodings = self.accept_compression_encodings;
17237                    let send_compression_encodings = self.send_compression_encodings;
17238                    let max_decoding_message_size = self.max_decoding_message_size;
17239                    let max_encoding_message_size = self.max_encoding_message_size;
17240                    let inner = self.inner.clone();
17241                    let fut = async move {
17242                        let inner = inner.0;
17243                        let method = AddDataProxyAttributeUserSvc(inner);
17244                        let codec = tonic::codec::ProstCodec::default();
17245                        let mut grpc = tonic::server::Grpc::new(codec)
17246                            .apply_compression_config(
17247                                accept_compression_encodings,
17248                                send_compression_encodings,
17249                            )
17250                            .apply_max_message_size_config(
17251                                max_decoding_message_size,
17252                                max_encoding_message_size,
17253                            );
17254                        let res = grpc.unary(method, req).await;
17255                        Ok(res)
17256                    };
17257                    Box::pin(fut)
17258                }
17259                "/aruna.api.storage.services.v2.UserService/RemoveDataProxyAttributeUser" => {
17260                    #[allow(non_camel_case_types)]
17261                    struct RemoveDataProxyAttributeUserSvc<T: UserService>(pub Arc<T>);
17262                    impl<
17263                        T: UserService,
17264                    > tonic::server::UnaryService<
17265                        super::RemoveDataProxyAttributeUserRequest,
17266                    > for RemoveDataProxyAttributeUserSvc<T> {
17267                        type Response = super::RemoveDataProxyAttributeUserResponse;
17268                        type Future = BoxFuture<
17269                            tonic::Response<Self::Response>,
17270                            tonic::Status,
17271                        >;
17272                        fn call(
17273                            &mut self,
17274                            request: tonic::Request<
17275                                super::RemoveDataProxyAttributeUserRequest,
17276                            >,
17277                        ) -> Self::Future {
17278                            let inner = Arc::clone(&self.0);
17279                            let fut = async move {
17280                                <T as UserService>::remove_data_proxy_attribute_user(
17281                                        &inner,
17282                                        request,
17283                                    )
17284                                    .await
17285                            };
17286                            Box::pin(fut)
17287                        }
17288                    }
17289                    let accept_compression_encodings = self.accept_compression_encodings;
17290                    let send_compression_encodings = self.send_compression_encodings;
17291                    let max_decoding_message_size = self.max_decoding_message_size;
17292                    let max_encoding_message_size = self.max_encoding_message_size;
17293                    let inner = self.inner.clone();
17294                    let fut = async move {
17295                        let inner = inner.0;
17296                        let method = RemoveDataProxyAttributeUserSvc(inner);
17297                        let codec = tonic::codec::ProstCodec::default();
17298                        let mut grpc = tonic::server::Grpc::new(codec)
17299                            .apply_compression_config(
17300                                accept_compression_encodings,
17301                                send_compression_encodings,
17302                            )
17303                            .apply_max_message_size_config(
17304                                max_decoding_message_size,
17305                                max_encoding_message_size,
17306                            );
17307                        let res = grpc.unary(method, req).await;
17308                        Ok(res)
17309                    };
17310                    Box::pin(fut)
17311                }
17312                _ => {
17313                    Box::pin(async move {
17314                        Ok(
17315                            http::Response::builder()
17316                                .status(200)
17317                                .header("grpc-status", "12")
17318                                .header("content-type", "application/grpc")
17319                                .body(empty_body())
17320                                .unwrap(),
17321                        )
17322                    })
17323                }
17324            }
17325        }
17326    }
17327    impl<T: UserService> Clone for UserServiceServer<T> {
17328        fn clone(&self) -> Self {
17329            let inner = self.inner.clone();
17330            Self {
17331                inner,
17332                accept_compression_encodings: self.accept_compression_encodings,
17333                send_compression_encodings: self.send_compression_encodings,
17334                max_decoding_message_size: self.max_decoding_message_size,
17335                max_encoding_message_size: self.max_encoding_message_size,
17336            }
17337        }
17338    }
17339    impl<T: UserService> Clone for _Inner<T> {
17340        fn clone(&self) -> Self {
17341            Self(Arc::clone(&self.0))
17342        }
17343    }
17344    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
17345        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17346            write!(f, "{:?}", self.0)
17347        }
17348    }
17349    impl<T: UserService> tonic::server::NamedService for UserServiceServer<T> {
17350        const NAME: &'static str = "aruna.api.storage.services.v2.UserService";
17351    }
17352}
17353/// CreateLicenseRequest
17354///
17355/// Request object for CreateLicense
17356#[derive(serde::Deserialize, serde::Serialize)]
17357#[allow(clippy::derive_partial_eq_without_eq)]
17358#[derive(Clone, PartialEq, ::prost::Message)]
17359pub struct CreateLicenseRequest {
17360    /// CC-BY-SA-4.0
17361    #[prost(string, tag = "1")]
17362    pub tag: ::prost::alloc::string::String,
17363    /// Creative Commons Attribution-ShareAlike 4.0 International
17364    #[prost(string, tag = "2")]
17365    pub name: ::prost::alloc::string::String,
17366    #[prost(string, tag = "3")]
17367    pub text: ::prost::alloc::string::String,
17368    /// url is optional
17369    ///
17370    /// <https://creativecommons.org/licenses/by-sa/4.0/>
17371    #[prost(string, tag = "4")]
17372    pub url: ::prost::alloc::string::String,
17373}
17374/// CreateLicenseResponse
17375///
17376/// Response object for CreateLicense
17377#[derive(serde::Deserialize, serde::Serialize)]
17378#[allow(clippy::derive_partial_eq_without_eq)]
17379#[derive(Clone, PartialEq, ::prost::Message)]
17380pub struct CreateLicenseResponse {
17381    /// CC-BY-SA-4.0
17382    #[prost(string, tag = "1")]
17383    pub tag: ::prost::alloc::string::String,
17384}
17385/// GetLicenseRequest
17386///
17387/// Request object for GetLicense
17388#[derive(serde::Deserialize, serde::Serialize)]
17389#[allow(clippy::derive_partial_eq_without_eq)]
17390#[derive(Clone, PartialEq, ::prost::Message)]
17391pub struct GetLicenseRequest {
17392    /// 1234567890abcdef
17393    #[prost(string, tag = "1")]
17394    pub tag: ::prost::alloc::string::String,
17395}
17396/// GetLicenseResponse
17397///
17398/// Response object for GetLicense
17399#[derive(serde::Deserialize, serde::Serialize)]
17400#[allow(clippy::derive_partial_eq_without_eq)]
17401#[derive(Clone, PartialEq, ::prost::Message)]
17402pub struct GetLicenseResponse {
17403    #[prost(message, optional, tag = "1")]
17404    pub license: ::core::option::Option<super::super::models::v2::License>,
17405}
17406/// ListLicensesRequest
17407///
17408/// Request object for ListLicense
17409#[derive(serde::Deserialize, serde::Serialize)]
17410#[allow(clippy::derive_partial_eq_without_eq)]
17411#[derive(Clone, PartialEq, ::prost::Message)]
17412pub struct ListLicensesRequest {}
17413/// ListLicenseResponse
17414///
17415/// Response object for ListLicense
17416#[derive(serde::Deserialize, serde::Serialize)]
17417#[allow(clippy::derive_partial_eq_without_eq)]
17418#[derive(Clone, PartialEq, ::prost::Message)]
17419pub struct ListLicensesResponse {
17420    #[prost(message, repeated, tag = "1")]
17421    pub licenses: ::prost::alloc::vec::Vec<super::super::models::v2::License>,
17422}
17423/// Generated client implementations.
17424pub mod license_service_client {
17425    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
17426    use tonic::codegen::*;
17427    use tonic::codegen::http::Uri;
17428    /// LicenseService
17429    ///
17430    /// Status: BETA
17431    ///
17432    /// Contains all methods to add, get or list (custom) licenses
17433    #[derive(Debug, Clone)]
17434    pub struct LicenseServiceClient<T> {
17435        inner: tonic::client::Grpc<T>,
17436    }
17437    impl LicenseServiceClient<tonic::transport::Channel> {
17438        /// Attempt to create a new client by connecting to a given endpoint.
17439        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
17440        where
17441            D: TryInto<tonic::transport::Endpoint>,
17442            D::Error: Into<StdError>,
17443        {
17444            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
17445            Ok(Self::new(conn))
17446        }
17447    }
17448    impl<T> LicenseServiceClient<T>
17449    where
17450        T: tonic::client::GrpcService<tonic::body::BoxBody>,
17451        T::Error: Into<StdError>,
17452        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
17453        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
17454    {
17455        pub fn new(inner: T) -> Self {
17456            let inner = tonic::client::Grpc::new(inner);
17457            Self { inner }
17458        }
17459        pub fn with_origin(inner: T, origin: Uri) -> Self {
17460            let inner = tonic::client::Grpc::with_origin(inner, origin);
17461            Self { inner }
17462        }
17463        pub fn with_interceptor<F>(
17464            inner: T,
17465            interceptor: F,
17466        ) -> LicenseServiceClient<InterceptedService<T, F>>
17467        where
17468            F: tonic::service::Interceptor,
17469            T::ResponseBody: Default,
17470            T: tonic::codegen::Service<
17471                http::Request<tonic::body::BoxBody>,
17472                Response = http::Response<
17473                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
17474                >,
17475            >,
17476            <T as tonic::codegen::Service<
17477                http::Request<tonic::body::BoxBody>,
17478            >>::Error: Into<StdError> + Send + Sync,
17479        {
17480            LicenseServiceClient::new(InterceptedService::new(inner, interceptor))
17481        }
17482        /// Compress requests with the given encoding.
17483        ///
17484        /// This requires the server to support it otherwise it might respond with an
17485        /// error.
17486        #[must_use]
17487        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
17488            self.inner = self.inner.send_compressed(encoding);
17489            self
17490        }
17491        /// Enable decompressing responses.
17492        #[must_use]
17493        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
17494            self.inner = self.inner.accept_compressed(encoding);
17495            self
17496        }
17497        /// Limits the maximum size of a decoded message.
17498        ///
17499        /// Default: `4MB`
17500        #[must_use]
17501        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
17502            self.inner = self.inner.max_decoding_message_size(limit);
17503            self
17504        }
17505        /// Limits the maximum size of an encoded message.
17506        ///
17507        /// Default: `usize::MAX`
17508        #[must_use]
17509        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
17510            self.inner = self.inner.max_encoding_message_size(limit);
17511            self
17512        }
17513        /// CreateLicense
17514        ///
17515        /// Status: BETA
17516        ///
17517        /// This creates a new license
17518        pub async fn create_license(
17519            &mut self,
17520            request: impl tonic::IntoRequest<super::CreateLicenseRequest>,
17521        ) -> std::result::Result<
17522            tonic::Response<super::CreateLicenseResponse>,
17523            tonic::Status,
17524        > {
17525            self.inner
17526                .ready()
17527                .await
17528                .map_err(|e| {
17529                    tonic::Status::new(
17530                        tonic::Code::Unknown,
17531                        format!("Service was not ready: {}", e.into()),
17532                    )
17533                })?;
17534            let codec = tonic::codec::ProstCodec::default();
17535            let path = http::uri::PathAndQuery::from_static(
17536                "/aruna.api.storage.services.v2.LicenseService/CreateLicense",
17537            );
17538            let mut req = request.into_request();
17539            req.extensions_mut()
17540                .insert(
17541                    GrpcMethod::new(
17542                        "aruna.api.storage.services.v2.LicenseService",
17543                        "CreateLicense",
17544                    ),
17545                );
17546            self.inner.unary(req, path, codec).await
17547        }
17548        /// GetLicense
17549        ///
17550        /// Status: BETA
17551        ///
17552        /// This returns the license for a given tag
17553        pub async fn get_license(
17554            &mut self,
17555            request: impl tonic::IntoRequest<super::GetLicenseRequest>,
17556        ) -> std::result::Result<
17557            tonic::Response<super::GetLicenseResponse>,
17558            tonic::Status,
17559        > {
17560            self.inner
17561                .ready()
17562                .await
17563                .map_err(|e| {
17564                    tonic::Status::new(
17565                        tonic::Code::Unknown,
17566                        format!("Service was not ready: {}", e.into()),
17567                    )
17568                })?;
17569            let codec = tonic::codec::ProstCodec::default();
17570            let path = http::uri::PathAndQuery::from_static(
17571                "/aruna.api.storage.services.v2.LicenseService/GetLicense",
17572            );
17573            let mut req = request.into_request();
17574            req.extensions_mut()
17575                .insert(
17576                    GrpcMethod::new(
17577                        "aruna.api.storage.services.v2.LicenseService",
17578                        "GetLicense",
17579                    ),
17580                );
17581            self.inner.unary(req, path, codec).await
17582        }
17583        /// ListLicenses
17584        ///
17585        /// Status: BETA
17586        ///
17587        /// This returns a list of all licenses
17588        pub async fn list_licenses(
17589            &mut self,
17590            request: impl tonic::IntoRequest<super::ListLicensesRequest>,
17591        ) -> std::result::Result<
17592            tonic::Response<super::ListLicensesResponse>,
17593            tonic::Status,
17594        > {
17595            self.inner
17596                .ready()
17597                .await
17598                .map_err(|e| {
17599                    tonic::Status::new(
17600                        tonic::Code::Unknown,
17601                        format!("Service was not ready: {}", e.into()),
17602                    )
17603                })?;
17604            let codec = tonic::codec::ProstCodec::default();
17605            let path = http::uri::PathAndQuery::from_static(
17606                "/aruna.api.storage.services.v2.LicenseService/ListLicenses",
17607            );
17608            let mut req = request.into_request();
17609            req.extensions_mut()
17610                .insert(
17611                    GrpcMethod::new(
17612                        "aruna.api.storage.services.v2.LicenseService",
17613                        "ListLicenses",
17614                    ),
17615                );
17616            self.inner.unary(req, path, codec).await
17617        }
17618    }
17619}
17620/// Generated server implementations.
17621pub mod license_service_server {
17622    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
17623    use tonic::codegen::*;
17624    /// Generated trait containing gRPC methods that should be implemented for use with LicenseServiceServer.
17625    #[async_trait]
17626    pub trait LicenseService: Send + Sync + 'static {
17627        /// CreateLicense
17628        ///
17629        /// Status: BETA
17630        ///
17631        /// This creates a new license
17632        async fn create_license(
17633            &self,
17634            request: tonic::Request<super::CreateLicenseRequest>,
17635        ) -> std::result::Result<
17636            tonic::Response<super::CreateLicenseResponse>,
17637            tonic::Status,
17638        >;
17639        /// GetLicense
17640        ///
17641        /// Status: BETA
17642        ///
17643        /// This returns the license for a given tag
17644        async fn get_license(
17645            &self,
17646            request: tonic::Request<super::GetLicenseRequest>,
17647        ) -> std::result::Result<
17648            tonic::Response<super::GetLicenseResponse>,
17649            tonic::Status,
17650        >;
17651        /// ListLicenses
17652        ///
17653        /// Status: BETA
17654        ///
17655        /// This returns a list of all licenses
17656        async fn list_licenses(
17657            &self,
17658            request: tonic::Request<super::ListLicensesRequest>,
17659        ) -> std::result::Result<
17660            tonic::Response<super::ListLicensesResponse>,
17661            tonic::Status,
17662        >;
17663    }
17664    /// LicenseService
17665    ///
17666    /// Status: BETA
17667    ///
17668    /// Contains all methods to add, get or list (custom) licenses
17669    #[derive(Debug)]
17670    pub struct LicenseServiceServer<T: LicenseService> {
17671        inner: _Inner<T>,
17672        accept_compression_encodings: EnabledCompressionEncodings,
17673        send_compression_encodings: EnabledCompressionEncodings,
17674        max_decoding_message_size: Option<usize>,
17675        max_encoding_message_size: Option<usize>,
17676    }
17677    struct _Inner<T>(Arc<T>);
17678    impl<T: LicenseService> LicenseServiceServer<T> {
17679        pub fn new(inner: T) -> Self {
17680            Self::from_arc(Arc::new(inner))
17681        }
17682        pub fn from_arc(inner: Arc<T>) -> Self {
17683            let inner = _Inner(inner);
17684            Self {
17685                inner,
17686                accept_compression_encodings: Default::default(),
17687                send_compression_encodings: Default::default(),
17688                max_decoding_message_size: None,
17689                max_encoding_message_size: None,
17690            }
17691        }
17692        pub fn with_interceptor<F>(
17693            inner: T,
17694            interceptor: F,
17695        ) -> InterceptedService<Self, F>
17696        where
17697            F: tonic::service::Interceptor,
17698        {
17699            InterceptedService::new(Self::new(inner), interceptor)
17700        }
17701        /// Enable decompressing requests with the given encoding.
17702        #[must_use]
17703        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
17704            self.accept_compression_encodings.enable(encoding);
17705            self
17706        }
17707        /// Compress responses with the given encoding, if the client supports it.
17708        #[must_use]
17709        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
17710            self.send_compression_encodings.enable(encoding);
17711            self
17712        }
17713        /// Limits the maximum size of a decoded message.
17714        ///
17715        /// Default: `4MB`
17716        #[must_use]
17717        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
17718            self.max_decoding_message_size = Some(limit);
17719            self
17720        }
17721        /// Limits the maximum size of an encoded message.
17722        ///
17723        /// Default: `usize::MAX`
17724        #[must_use]
17725        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
17726            self.max_encoding_message_size = Some(limit);
17727            self
17728        }
17729    }
17730    impl<T, B> tonic::codegen::Service<http::Request<B>> for LicenseServiceServer<T>
17731    where
17732        T: LicenseService,
17733        B: Body + Send + 'static,
17734        B::Error: Into<StdError> + Send + 'static,
17735    {
17736        type Response = http::Response<tonic::body::BoxBody>;
17737        type Error = std::convert::Infallible;
17738        type Future = BoxFuture<Self::Response, Self::Error>;
17739        fn poll_ready(
17740            &mut self,
17741            _cx: &mut Context<'_>,
17742        ) -> Poll<std::result::Result<(), Self::Error>> {
17743            Poll::Ready(Ok(()))
17744        }
17745        fn call(&mut self, req: http::Request<B>) -> Self::Future {
17746            let inner = self.inner.clone();
17747            match req.uri().path() {
17748                "/aruna.api.storage.services.v2.LicenseService/CreateLicense" => {
17749                    #[allow(non_camel_case_types)]
17750                    struct CreateLicenseSvc<T: LicenseService>(pub Arc<T>);
17751                    impl<
17752                        T: LicenseService,
17753                    > tonic::server::UnaryService<super::CreateLicenseRequest>
17754                    for CreateLicenseSvc<T> {
17755                        type Response = super::CreateLicenseResponse;
17756                        type Future = BoxFuture<
17757                            tonic::Response<Self::Response>,
17758                            tonic::Status,
17759                        >;
17760                        fn call(
17761                            &mut self,
17762                            request: tonic::Request<super::CreateLicenseRequest>,
17763                        ) -> Self::Future {
17764                            let inner = Arc::clone(&self.0);
17765                            let fut = async move {
17766                                <T as LicenseService>::create_license(&inner, request).await
17767                            };
17768                            Box::pin(fut)
17769                        }
17770                    }
17771                    let accept_compression_encodings = self.accept_compression_encodings;
17772                    let send_compression_encodings = self.send_compression_encodings;
17773                    let max_decoding_message_size = self.max_decoding_message_size;
17774                    let max_encoding_message_size = self.max_encoding_message_size;
17775                    let inner = self.inner.clone();
17776                    let fut = async move {
17777                        let inner = inner.0;
17778                        let method = CreateLicenseSvc(inner);
17779                        let codec = tonic::codec::ProstCodec::default();
17780                        let mut grpc = tonic::server::Grpc::new(codec)
17781                            .apply_compression_config(
17782                                accept_compression_encodings,
17783                                send_compression_encodings,
17784                            )
17785                            .apply_max_message_size_config(
17786                                max_decoding_message_size,
17787                                max_encoding_message_size,
17788                            );
17789                        let res = grpc.unary(method, req).await;
17790                        Ok(res)
17791                    };
17792                    Box::pin(fut)
17793                }
17794                "/aruna.api.storage.services.v2.LicenseService/GetLicense" => {
17795                    #[allow(non_camel_case_types)]
17796                    struct GetLicenseSvc<T: LicenseService>(pub Arc<T>);
17797                    impl<
17798                        T: LicenseService,
17799                    > tonic::server::UnaryService<super::GetLicenseRequest>
17800                    for GetLicenseSvc<T> {
17801                        type Response = super::GetLicenseResponse;
17802                        type Future = BoxFuture<
17803                            tonic::Response<Self::Response>,
17804                            tonic::Status,
17805                        >;
17806                        fn call(
17807                            &mut self,
17808                            request: tonic::Request<super::GetLicenseRequest>,
17809                        ) -> Self::Future {
17810                            let inner = Arc::clone(&self.0);
17811                            let fut = async move {
17812                                <T as LicenseService>::get_license(&inner, request).await
17813                            };
17814                            Box::pin(fut)
17815                        }
17816                    }
17817                    let accept_compression_encodings = self.accept_compression_encodings;
17818                    let send_compression_encodings = self.send_compression_encodings;
17819                    let max_decoding_message_size = self.max_decoding_message_size;
17820                    let max_encoding_message_size = self.max_encoding_message_size;
17821                    let inner = self.inner.clone();
17822                    let fut = async move {
17823                        let inner = inner.0;
17824                        let method = GetLicenseSvc(inner);
17825                        let codec = tonic::codec::ProstCodec::default();
17826                        let mut grpc = tonic::server::Grpc::new(codec)
17827                            .apply_compression_config(
17828                                accept_compression_encodings,
17829                                send_compression_encodings,
17830                            )
17831                            .apply_max_message_size_config(
17832                                max_decoding_message_size,
17833                                max_encoding_message_size,
17834                            );
17835                        let res = grpc.unary(method, req).await;
17836                        Ok(res)
17837                    };
17838                    Box::pin(fut)
17839                }
17840                "/aruna.api.storage.services.v2.LicenseService/ListLicenses" => {
17841                    #[allow(non_camel_case_types)]
17842                    struct ListLicensesSvc<T: LicenseService>(pub Arc<T>);
17843                    impl<
17844                        T: LicenseService,
17845                    > tonic::server::UnaryService<super::ListLicensesRequest>
17846                    for ListLicensesSvc<T> {
17847                        type Response = super::ListLicensesResponse;
17848                        type Future = BoxFuture<
17849                            tonic::Response<Self::Response>,
17850                            tonic::Status,
17851                        >;
17852                        fn call(
17853                            &mut self,
17854                            request: tonic::Request<super::ListLicensesRequest>,
17855                        ) -> Self::Future {
17856                            let inner = Arc::clone(&self.0);
17857                            let fut = async move {
17858                                <T as LicenseService>::list_licenses(&inner, request).await
17859                            };
17860                            Box::pin(fut)
17861                        }
17862                    }
17863                    let accept_compression_encodings = self.accept_compression_encodings;
17864                    let send_compression_encodings = self.send_compression_encodings;
17865                    let max_decoding_message_size = self.max_decoding_message_size;
17866                    let max_encoding_message_size = self.max_encoding_message_size;
17867                    let inner = self.inner.clone();
17868                    let fut = async move {
17869                        let inner = inner.0;
17870                        let method = ListLicensesSvc(inner);
17871                        let codec = tonic::codec::ProstCodec::default();
17872                        let mut grpc = tonic::server::Grpc::new(codec)
17873                            .apply_compression_config(
17874                                accept_compression_encodings,
17875                                send_compression_encodings,
17876                            )
17877                            .apply_max_message_size_config(
17878                                max_decoding_message_size,
17879                                max_encoding_message_size,
17880                            );
17881                        let res = grpc.unary(method, req).await;
17882                        Ok(res)
17883                    };
17884                    Box::pin(fut)
17885                }
17886                _ => {
17887                    Box::pin(async move {
17888                        Ok(
17889                            http::Response::builder()
17890                                .status(200)
17891                                .header("grpc-status", "12")
17892                                .header("content-type", "application/grpc")
17893                                .body(empty_body())
17894                                .unwrap(),
17895                        )
17896                    })
17897                }
17898            }
17899        }
17900    }
17901    impl<T: LicenseService> Clone for LicenseServiceServer<T> {
17902        fn clone(&self) -> Self {
17903            let inner = self.inner.clone();
17904            Self {
17905                inner,
17906                accept_compression_encodings: self.accept_compression_encodings,
17907                send_compression_encodings: self.send_compression_encodings,
17908                max_decoding_message_size: self.max_decoding_message_size,
17909                max_encoding_message_size: self.max_encoding_message_size,
17910            }
17911        }
17912    }
17913    impl<T: LicenseService> Clone for _Inner<T> {
17914        fn clone(&self) -> Self {
17915            Self(Arc::clone(&self.0))
17916        }
17917    }
17918    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
17919        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17920            write!(f, "{:?}", self.0)
17921        }
17922    }
17923    impl<T: LicenseService> tonic::server::NamedService for LicenseServiceServer<T> {
17924        const NAME: &'static str = "aruna.api.storage.services.v2.LicenseService";
17925    }
17926}
17927#[derive(serde::Deserialize, serde::Serialize)]
17928#[allow(clippy::derive_partial_eq_without_eq)]
17929#[derive(Clone, PartialEq, ::prost::Message)]
17930pub struct CreateProjectRequest {
17931    /// Project name
17932    #[prost(string, tag = "1")]
17933    pub name: ::prost::alloc::string::String,
17934    /// title
17935    #[prost(string, tag = "9")]
17936    pub title: ::prost::alloc::string::String,
17937    /// Description
17938    #[prost(string, tag = "2")]
17939    pub description: ::prost::alloc::string::String,
17940    /// Project specific labels / hooks
17941    #[prost(message, repeated, tag = "3")]
17942    pub key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
17943    /// Internal / External relations (URLs / IDs from external sources)
17944    #[prost(message, repeated, tag = "4")]
17945    pub relations: ::prost::alloc::vec::Vec<super::super::models::v2::Relation>,
17946    /// DataClass
17947    #[prost(enumeration = "super::super::models::v2::DataClass", tag = "5")]
17948    pub data_class: i32,
17949    /// Preferred endpoint
17950    #[prost(string, tag = "6")]
17951    pub preferred_endpoint: ::prost::alloc::string::String,
17952    ///
17953    #[prost(string, tag = "7")]
17954    pub metadata_license_tag: ::prost::alloc::string::String,
17955    #[prost(string, tag = "8")]
17956    pub default_data_license_tag: ::prost::alloc::string::String,
17957    #[prost(message, repeated, tag = "10")]
17958    pub authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
17959}
17960#[derive(serde::Deserialize, serde::Serialize)]
17961#[allow(clippy::derive_partial_eq_without_eq)]
17962#[derive(Clone, PartialEq, ::prost::Message)]
17963pub struct CreateProjectResponse {
17964    /// The freshly created project
17965    #[prost(message, optional, tag = "1")]
17966    pub project: ::core::option::Option<super::super::models::v2::Project>,
17967}
17968#[derive(serde::Deserialize, serde::Serialize)]
17969#[allow(clippy::derive_partial_eq_without_eq)]
17970#[derive(Clone, PartialEq, ::prost::Message)]
17971pub struct GetProjectRequest {
17972    /// The id of the project to get
17973    #[prost(string, tag = "1")]
17974    pub project_id: ::prost::alloc::string::String,
17975}
17976#[derive(serde::Deserialize, serde::Serialize)]
17977#[allow(clippy::derive_partial_eq_without_eq)]
17978#[derive(Clone, PartialEq, ::prost::Message)]
17979pub struct GetProjectResponse {
17980    /// Overview of the projectroject
17981    #[prost(message, optional, tag = "1")]
17982    pub project: ::core::option::Option<super::super::models::v2::Project>,
17983}
17984#[derive(serde::Deserialize, serde::Serialize)]
17985#[allow(clippy::derive_partial_eq_without_eq)]
17986#[derive(Clone, PartialEq, ::prost::Message)]
17987pub struct GetProjectsRequest {
17988    /// optional filter for specific ids
17989    #[prost(string, repeated, tag = "1")]
17990    pub project_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
17991}
17992#[derive(serde::Deserialize, serde::Serialize)]
17993#[allow(clippy::derive_partial_eq_without_eq)]
17994#[derive(Clone, PartialEq, ::prost::Message)]
17995pub struct GetProjectsResponse {
17996    /// Overview of the projects
17997    #[prost(message, repeated, tag = "1")]
17998    pub projects: ::prost::alloc::vec::Vec<super::super::models::v2::Project>,
17999}
18000#[derive(serde::Deserialize, serde::Serialize)]
18001#[allow(clippy::derive_partial_eq_without_eq)]
18002#[derive(Clone, PartialEq, ::prost::Message)]
18003pub struct DeleteProjectRequest {
18004    /// The id of the project to destroy
18005    #[prost(string, tag = "1")]
18006    pub project_id: ::prost::alloc::string::String,
18007}
18008#[derive(serde::Deserialize, serde::Serialize)]
18009#[allow(clippy::derive_partial_eq_without_eq)]
18010#[derive(Clone, PartialEq, ::prost::Message)]
18011pub struct DeleteProjectResponse {}
18012#[derive(serde::Deserialize, serde::Serialize)]
18013#[allow(clippy::derive_partial_eq_without_eq)]
18014#[derive(Clone, PartialEq, ::prost::Message)]
18015pub struct UpdateProjectNameRequest {
18016    #[prost(string, tag = "1")]
18017    pub project_id: ::prost::alloc::string::String,
18018    #[prost(string, tag = "2")]
18019    pub name: ::prost::alloc::string::String,
18020}
18021#[derive(serde::Deserialize, serde::Serialize)]
18022#[allow(clippy::derive_partial_eq_without_eq)]
18023#[derive(Clone, PartialEq, ::prost::Message)]
18024pub struct UpdateProjectNameResponse {
18025    #[prost(message, optional, tag = "1")]
18026    pub project: ::core::option::Option<super::super::models::v2::Project>,
18027}
18028#[derive(serde::Deserialize, serde::Serialize)]
18029#[allow(clippy::derive_partial_eq_without_eq)]
18030#[derive(Clone, PartialEq, ::prost::Message)]
18031pub struct UpdateProjectDescriptionRequest {
18032    #[prost(string, tag = "1")]
18033    pub project_id: ::prost::alloc::string::String,
18034    #[prost(string, tag = "2")]
18035    pub description: ::prost::alloc::string::String,
18036}
18037#[derive(serde::Deserialize, serde::Serialize)]
18038#[allow(clippy::derive_partial_eq_without_eq)]
18039#[derive(Clone, PartialEq, ::prost::Message)]
18040pub struct UpdateProjectDescriptionResponse {
18041    #[prost(message, optional, tag = "1")]
18042    pub project: ::core::option::Option<super::super::models::v2::Project>,
18043}
18044#[derive(serde::Deserialize, serde::Serialize)]
18045#[allow(clippy::derive_partial_eq_without_eq)]
18046#[derive(Clone, PartialEq, ::prost::Message)]
18047pub struct UpdateProjectKeyValuesRequest {
18048    #[prost(string, tag = "1")]
18049    pub project_id: ::prost::alloc::string::String,
18050    #[prost(message, repeated, tag = "2")]
18051    pub add_key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
18052    #[prost(message, repeated, tag = "3")]
18053    pub remove_key_values: ::prost::alloc::vec::Vec<super::super::models::v2::KeyValue>,
18054}
18055#[derive(serde::Deserialize, serde::Serialize)]
18056#[allow(clippy::derive_partial_eq_without_eq)]
18057#[derive(Clone, PartialEq, ::prost::Message)]
18058pub struct UpdateProjectKeyValuesResponse {
18059    #[prost(message, optional, tag = "1")]
18060    pub project: ::core::option::Option<super::super::models::v2::Project>,
18061}
18062#[derive(serde::Deserialize, serde::Serialize)]
18063#[allow(clippy::derive_partial_eq_without_eq)]
18064#[derive(Clone, PartialEq, ::prost::Message)]
18065pub struct UpdateProjectDataClassRequest {
18066    #[prost(string, tag = "1")]
18067    pub project_id: ::prost::alloc::string::String,
18068    #[prost(enumeration = "super::super::models::v2::DataClass", tag = "2")]
18069    pub data_class: i32,
18070}
18071#[derive(serde::Deserialize, serde::Serialize)]
18072#[allow(clippy::derive_partial_eq_without_eq)]
18073#[derive(Clone, PartialEq, ::prost::Message)]
18074pub struct UpdateProjectDataClassResponse {
18075    #[prost(message, optional, tag = "1")]
18076    pub project: ::core::option::Option<super::super::models::v2::Project>,
18077}
18078#[derive(serde::Deserialize, serde::Serialize)]
18079#[allow(clippy::derive_partial_eq_without_eq)]
18080#[derive(Clone, PartialEq, ::prost::Message)]
18081pub struct ArchiveProjectRequest {
18082    #[prost(string, tag = "1")]
18083    pub project_id: ::prost::alloc::string::String,
18084}
18085#[derive(serde::Deserialize, serde::Serialize)]
18086#[allow(clippy::derive_partial_eq_without_eq)]
18087#[derive(Clone, PartialEq, ::prost::Message)]
18088pub struct ArchiveProjectResponse {
18089    /// This project will be returned via an Persistent Identifier! Updates will be impossible
18090    #[prost(message, optional, tag = "1")]
18091    pub project: ::core::option::Option<super::super::models::v2::Project>,
18092}
18093#[derive(serde::Deserialize, serde::Serialize)]
18094#[allow(clippy::derive_partial_eq_without_eq)]
18095#[derive(Clone, PartialEq, ::prost::Message)]
18096pub struct UpdateProjectLicensesRequest {
18097    #[prost(string, tag = "1")]
18098    pub project_id: ::prost::alloc::string::String,
18099    #[prost(string, tag = "2")]
18100    pub metadata_license_tag: ::prost::alloc::string::String,
18101    #[prost(string, tag = "3")]
18102    pub default_data_license_tag: ::prost::alloc::string::String,
18103}
18104#[derive(serde::Deserialize, serde::Serialize)]
18105#[allow(clippy::derive_partial_eq_without_eq)]
18106#[derive(Clone, PartialEq, ::prost::Message)]
18107pub struct UpdateProjectLicensesResponse {
18108    #[prost(message, optional, tag = "1")]
18109    pub project: ::core::option::Option<super::super::models::v2::Project>,
18110}
18111#[derive(serde::Deserialize, serde::Serialize)]
18112#[allow(clippy::derive_partial_eq_without_eq)]
18113#[derive(Clone, PartialEq, ::prost::Message)]
18114pub struct UpdateProjectTitleRequest {
18115    /// Project id
18116    #[prost(string, tag = "1")]
18117    pub project_id: ::prost::alloc::string::String,
18118    /// New title
18119    #[prost(string, tag = "2")]
18120    pub title: ::prost::alloc::string::String,
18121}
18122#[derive(serde::Deserialize, serde::Serialize)]
18123#[allow(clippy::derive_partial_eq_without_eq)]
18124#[derive(Clone, PartialEq, ::prost::Message)]
18125pub struct UpdateProjectTitleResponse {
18126    /// The updated object
18127    #[prost(message, optional, tag = "1")]
18128    pub project: ::core::option::Option<super::super::models::v2::Project>,
18129}
18130#[derive(serde::Deserialize, serde::Serialize)]
18131#[allow(clippy::derive_partial_eq_without_eq)]
18132#[derive(Clone, PartialEq, ::prost::Message)]
18133pub struct UpdateProjectAuthorsRequest {
18134    /// Project id
18135    #[prost(string, tag = "1")]
18136    pub project_id: ::prost::alloc::string::String,
18137    /// Add authors
18138    #[prost(message, repeated, tag = "2")]
18139    pub add_authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
18140    /// Remove authors
18141    #[prost(message, repeated, tag = "3")]
18142    pub remove_authors: ::prost::alloc::vec::Vec<super::super::models::v2::Author>,
18143}
18144#[derive(serde::Deserialize, serde::Serialize)]
18145#[allow(clippy::derive_partial_eq_without_eq)]
18146#[derive(Clone, PartialEq, ::prost::Message)]
18147pub struct UpdateProjectAuthorsResponse {
18148    /// The updated project
18149    #[prost(message, optional, tag = "1")]
18150    pub project: ::core::option::Option<super::super::models::v2::Project>,
18151}
18152/// Generated client implementations.
18153pub mod project_service_client {
18154    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
18155    use tonic::codegen::*;
18156    use tonic::codegen::http::Uri;
18157    /// ProjectService
18158    ///
18159    /// Status: BETA
18160    ///
18161    /// Contains all methods that get/create or update Projects and associated resources
18162    #[derive(Debug, Clone)]
18163    pub struct ProjectServiceClient<T> {
18164        inner: tonic::client::Grpc<T>,
18165    }
18166    impl ProjectServiceClient<tonic::transport::Channel> {
18167        /// Attempt to create a new client by connecting to a given endpoint.
18168        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
18169        where
18170            D: TryInto<tonic::transport::Endpoint>,
18171            D::Error: Into<StdError>,
18172        {
18173            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
18174            Ok(Self::new(conn))
18175        }
18176    }
18177    impl<T> ProjectServiceClient<T>
18178    where
18179        T: tonic::client::GrpcService<tonic::body::BoxBody>,
18180        T::Error: Into<StdError>,
18181        T::ResponseBody: Body<Data = Bytes> + Send + 'static,
18182        <T::ResponseBody as Body>::Error: Into<StdError> + Send,
18183    {
18184        pub fn new(inner: T) -> Self {
18185            let inner = tonic::client::Grpc::new(inner);
18186            Self { inner }
18187        }
18188        pub fn with_origin(inner: T, origin: Uri) -> Self {
18189            let inner = tonic::client::Grpc::with_origin(inner, origin);
18190            Self { inner }
18191        }
18192        pub fn with_interceptor<F>(
18193            inner: T,
18194            interceptor: F,
18195        ) -> ProjectServiceClient<InterceptedService<T, F>>
18196        where
18197            F: tonic::service::Interceptor,
18198            T::ResponseBody: Default,
18199            T: tonic::codegen::Service<
18200                http::Request<tonic::body::BoxBody>,
18201                Response = http::Response<
18202                    <T as tonic::client::GrpcService<tonic::body::BoxBody>>::ResponseBody,
18203                >,
18204            >,
18205            <T as tonic::codegen::Service<
18206                http::Request<tonic::body::BoxBody>,
18207            >>::Error: Into<StdError> + Send + Sync,
18208        {
18209            ProjectServiceClient::new(InterceptedService::new(inner, interceptor))
18210        }
18211        /// Compress requests with the given encoding.
18212        ///
18213        /// This requires the server to support it otherwise it might respond with an
18214        /// error.
18215        #[must_use]
18216        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
18217            self.inner = self.inner.send_compressed(encoding);
18218            self
18219        }
18220        /// Enable decompressing responses.
18221        #[must_use]
18222        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
18223            self.inner = self.inner.accept_compressed(encoding);
18224            self
18225        }
18226        /// Limits the maximum size of a decoded message.
18227        ///
18228        /// Default: `4MB`
18229        #[must_use]
18230        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
18231            self.inner = self.inner.max_decoding_message_size(limit);
18232            self
18233        }
18234        /// Limits the maximum size of an encoded message.
18235        ///
18236        /// Default: `usize::MAX`
18237        #[must_use]
18238        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
18239            self.inner = self.inner.max_encoding_message_size(limit);
18240            self
18241        }
18242        /// CreateProject
18243        ///
18244        /// Status: BETA
18245        ///
18246        /// Creates a new project. All subsequent resources are part of a project.
18247        pub async fn create_project(
18248            &mut self,
18249            request: impl tonic::IntoRequest<super::CreateProjectRequest>,
18250        ) -> std::result::Result<
18251            tonic::Response<super::CreateProjectResponse>,
18252            tonic::Status,
18253        > {
18254            self.inner
18255                .ready()
18256                .await
18257                .map_err(|e| {
18258                    tonic::Status::new(
18259                        tonic::Code::Unknown,
18260                        format!("Service was not ready: {}", e.into()),
18261                    )
18262                })?;
18263            let codec = tonic::codec::ProstCodec::default();
18264            let path = http::uri::PathAndQuery::from_static(
18265                "/aruna.api.storage.services.v2.ProjectService/CreateProject",
18266            );
18267            let mut req = request.into_request();
18268            req.extensions_mut()
18269                .insert(
18270                    GrpcMethod::new(
18271                        "aruna.api.storage.services.v2.ProjectService",
18272                        "CreateProject",
18273                    ),
18274                );
18275            self.inner.unary(req, path, codec).await
18276        }
18277        /// GetProject
18278        ///
18279        /// Status: BETA
18280        ///
18281        /// Requests a project (by id)
18282        pub async fn get_project(
18283            &mut self,
18284            request: impl tonic::IntoRequest<super::GetProjectRequest>,
18285        ) -> std::result::Result<
18286            tonic::Response<super::GetProjectResponse>,
18287            tonic::Status,
18288        > {
18289            self.inner
18290                .ready()
18291                .await
18292                .map_err(|e| {
18293                    tonic::Status::new(
18294                        tonic::Code::Unknown,
18295                        format!("Service was not ready: {}", e.into()),
18296                    )
18297                })?;
18298            let codec = tonic::codec::ProstCodec::default();
18299            let path = http::uri::PathAndQuery::from_static(
18300                "/aruna.api.storage.services.v2.ProjectService/GetProject",
18301            );
18302            let mut req = request.into_request();
18303            req.extensions_mut()
18304                .insert(
18305                    GrpcMethod::new(
18306                        "aruna.api.storage.services.v2.ProjectService",
18307                        "GetProject",
18308                    ),
18309                );
18310            self.inner.unary(req, path, codec).await
18311        }
18312        /// GetProjects
18313        ///
18314        /// Status: BETA
18315        ///
18316        /// Admin request to get all projects
18317        pub async fn get_projects(
18318            &mut self,
18319            request: impl tonic::IntoRequest<super::GetProjectsRequest>,
18320        ) -> std::result::Result<
18321            tonic::Response<super::GetProjectsResponse>,
18322            tonic::Status,
18323        > {
18324            self.inner
18325                .ready()
18326                .await
18327                .map_err(|e| {
18328                    tonic::Status::new(
18329                        tonic::Code::Unknown,
18330                        format!("Service was not ready: {}", e.into()),
18331                    )
18332                })?;
18333            let codec = tonic::codec::ProstCodec::default();
18334            let path = http::uri::PathAndQuery::from_static(
18335                "/aruna.api.storage.services.v2.ProjectService/GetProjects",
18336            );
18337            let mut req = request.into_request();
18338            req.extensions_mut()
18339                .insert(
18340                    GrpcMethod::new(
18341                        "aruna.api.storage.services.v2.ProjectService",
18342                        "GetProjects",
18343                    ),
18344                );
18345            self.inner.unary(req, path, codec).await
18346        }
18347        /// DeleteProject
18348        ///
18349        /// Status: BETA
18350        ///
18351        /// Deletes the project and all its associated data. Must be empty!
18352        pub async fn delete_project(
18353            &mut self,
18354            request: impl tonic::IntoRequest<super::DeleteProjectRequest>,
18355        ) -> std::result::Result<
18356            tonic::Response<super::DeleteProjectResponse>,
18357            tonic::Status,
18358        > {
18359            self.inner
18360                .ready()
18361                .await
18362                .map_err(|e| {
18363                    tonic::Status::new(
18364                        tonic::Code::Unknown,
18365                        format!("Service was not ready: {}", e.into()),
18366                    )
18367                })?;
18368            let codec = tonic::codec::ProstCodec::default();
18369            let path = http::uri::PathAndQuery::from_static(
18370                "/aruna.api.storage.services.v2.ProjectService/DeleteProject",
18371            );
18372            let mut req = request.into_request();
18373            req.extensions_mut()
18374                .insert(
18375                    GrpcMethod::new(
18376                        "aruna.api.storage.services.v2.ProjectService",
18377                        "DeleteProject",
18378                    ),
18379                );
18380            self.inner.unary(req, path, codec).await
18381        }
18382        /// UpdateProjectName
18383        ///
18384        /// Status: BETA
18385        ///
18386        /// Updates the project name. Caveat! Will rename the "s3 bucket" for data proxies!
18387        pub async fn update_project_name(
18388            &mut self,
18389            request: impl tonic::IntoRequest<super::UpdateProjectNameRequest>,
18390        ) -> std::result::Result<
18391            tonic::Response<super::UpdateProjectNameResponse>,
18392            tonic::Status,
18393        > {
18394            self.inner
18395                .ready()
18396                .await
18397                .map_err(|e| {
18398                    tonic::Status::new(
18399                        tonic::Code::Unknown,
18400                        format!("Service was not ready: {}", e.into()),
18401                    )
18402                })?;
18403            let codec = tonic::codec::ProstCodec::default();
18404            let path = http::uri::PathAndQuery::from_static(
18405                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectName",
18406            );
18407            let mut req = request.into_request();
18408            req.extensions_mut()
18409                .insert(
18410                    GrpcMethod::new(
18411                        "aruna.api.storage.services.v2.ProjectService",
18412                        "UpdateProjectName",
18413                    ),
18414                );
18415            self.inner.unary(req, path, codec).await
18416        }
18417        /// UpdateProjectDescription
18418        ///
18419        /// Status: BETA
18420        ///
18421        /// Updates the project name.
18422        pub async fn update_project_description(
18423            &mut self,
18424            request: impl tonic::IntoRequest<super::UpdateProjectDescriptionRequest>,
18425        ) -> std::result::Result<
18426            tonic::Response<super::UpdateProjectDescriptionResponse>,
18427            tonic::Status,
18428        > {
18429            self.inner
18430                .ready()
18431                .await
18432                .map_err(|e| {
18433                    tonic::Status::new(
18434                        tonic::Code::Unknown,
18435                        format!("Service was not ready: {}", e.into()),
18436                    )
18437                })?;
18438            let codec = tonic::codec::ProstCodec::default();
18439            let path = http::uri::PathAndQuery::from_static(
18440                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectDescription",
18441            );
18442            let mut req = request.into_request();
18443            req.extensions_mut()
18444                .insert(
18445                    GrpcMethod::new(
18446                        "aruna.api.storage.services.v2.ProjectService",
18447                        "UpdateProjectDescription",
18448                    ),
18449                );
18450            self.inner.unary(req, path, codec).await
18451        }
18452        /// UpdateProjectKeyValues
18453        ///
18454        /// Status: BETA
18455        ///
18456        /// Updates the project key values.
18457        pub async fn update_project_key_values(
18458            &mut self,
18459            request: impl tonic::IntoRequest<super::UpdateProjectKeyValuesRequest>,
18460        ) -> std::result::Result<
18461            tonic::Response<super::UpdateProjectKeyValuesResponse>,
18462            tonic::Status,
18463        > {
18464            self.inner
18465                .ready()
18466                .await
18467                .map_err(|e| {
18468                    tonic::Status::new(
18469                        tonic::Code::Unknown,
18470                        format!("Service was not ready: {}", e.into()),
18471                    )
18472                })?;
18473            let codec = tonic::codec::ProstCodec::default();
18474            let path = http::uri::PathAndQuery::from_static(
18475                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectKeyValues",
18476            );
18477            let mut req = request.into_request();
18478            req.extensions_mut()
18479                .insert(
18480                    GrpcMethod::new(
18481                        "aruna.api.storage.services.v2.ProjectService",
18482                        "UpdateProjectKeyValues",
18483                    ),
18484                );
18485            self.inner.unary(req, path, codec).await
18486        }
18487        /// UpdateProjectDataClass
18488        ///
18489        /// Status: BETA
18490        ///
18491        /// Updates the project name. All (meta) data will be overwritten.
18492        pub async fn update_project_data_class(
18493            &mut self,
18494            request: impl tonic::IntoRequest<super::UpdateProjectDataClassRequest>,
18495        ) -> std::result::Result<
18496            tonic::Response<super::UpdateProjectDataClassResponse>,
18497            tonic::Status,
18498        > {
18499            self.inner
18500                .ready()
18501                .await
18502                .map_err(|e| {
18503                    tonic::Status::new(
18504                        tonic::Code::Unknown,
18505                        format!("Service was not ready: {}", e.into()),
18506                    )
18507                })?;
18508            let codec = tonic::codec::ProstCodec::default();
18509            let path = http::uri::PathAndQuery::from_static(
18510                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectDataClass",
18511            );
18512            let mut req = request.into_request();
18513            req.extensions_mut()
18514                .insert(
18515                    GrpcMethod::new(
18516                        "aruna.api.storage.services.v2.ProjectService",
18517                        "UpdateProjectDataClass",
18518                    ),
18519                );
18520            self.inner.unary(req, path, codec).await
18521        }
18522        /// UpdateLicense
18523        ///
18524        /// Status: BETA
18525        ///
18526        /// Updates the project license. All (meta) data will be overwritten.
18527        pub async fn update_project_licenses(
18528            &mut self,
18529            request: impl tonic::IntoRequest<super::UpdateProjectLicensesRequest>,
18530        ) -> std::result::Result<
18531            tonic::Response<super::UpdateProjectLicensesResponse>,
18532            tonic::Status,
18533        > {
18534            self.inner
18535                .ready()
18536                .await
18537                .map_err(|e| {
18538                    tonic::Status::new(
18539                        tonic::Code::Unknown,
18540                        format!("Service was not ready: {}", e.into()),
18541                    )
18542                })?;
18543            let codec = tonic::codec::ProstCodec::default();
18544            let path = http::uri::PathAndQuery::from_static(
18545                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectLicenses",
18546            );
18547            let mut req = request.into_request();
18548            req.extensions_mut()
18549                .insert(
18550                    GrpcMethod::new(
18551                        "aruna.api.storage.services.v2.ProjectService",
18552                        "UpdateProjectLicenses",
18553                    ),
18554                );
18555            self.inner.unary(req, path, codec).await
18556        }
18557        /// ArchiveProjectRequest
18558        ///
18559        /// Status: BETA
18560        ///
18561        /// Archives the full project, rendering all downstream relations immutable
18562        pub async fn archive_project(
18563            &mut self,
18564            request: impl tonic::IntoRequest<super::ArchiveProjectRequest>,
18565        ) -> std::result::Result<
18566            tonic::Response<super::ArchiveProjectResponse>,
18567            tonic::Status,
18568        > {
18569            self.inner
18570                .ready()
18571                .await
18572                .map_err(|e| {
18573                    tonic::Status::new(
18574                        tonic::Code::Unknown,
18575                        format!("Service was not ready: {}", e.into()),
18576                    )
18577                })?;
18578            let codec = tonic::codec::ProstCodec::default();
18579            let path = http::uri::PathAndQuery::from_static(
18580                "/aruna.api.storage.services.v2.ProjectService/ArchiveProject",
18581            );
18582            let mut req = request.into_request();
18583            req.extensions_mut()
18584                .insert(
18585                    GrpcMethod::new(
18586                        "aruna.api.storage.services.v2.ProjectService",
18587                        "ArchiveProject",
18588                    ),
18589                );
18590            self.inner.unary(req, path, codec).await
18591        }
18592        /// UpdateTitle
18593        ///
18594        /// Status: ALPHA
18595        ///
18596        /// This method updates the title of a project
18597        pub async fn update_project_title(
18598            &mut self,
18599            request: impl tonic::IntoRequest<super::UpdateProjectTitleRequest>,
18600        ) -> std::result::Result<
18601            tonic::Response<super::UpdateProjectTitleResponse>,
18602            tonic::Status,
18603        > {
18604            self.inner
18605                .ready()
18606                .await
18607                .map_err(|e| {
18608                    tonic::Status::new(
18609                        tonic::Code::Unknown,
18610                        format!("Service was not ready: {}", e.into()),
18611                    )
18612                })?;
18613            let codec = tonic::codec::ProstCodec::default();
18614            let path = http::uri::PathAndQuery::from_static(
18615                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectTitle",
18616            );
18617            let mut req = request.into_request();
18618            req.extensions_mut()
18619                .insert(
18620                    GrpcMethod::new(
18621                        "aruna.api.storage.services.v2.ProjectService",
18622                        "UpdateProjectTitle",
18623                    ),
18624                );
18625            self.inner.unary(req, path, codec).await
18626        }
18627        /// UpdateAuthors
18628        ///
18629        /// Status: ALPHA
18630        ///
18631        /// This method updates the authors of an object
18632        pub async fn update_project_authors(
18633            &mut self,
18634            request: impl tonic::IntoRequest<super::UpdateProjectAuthorsRequest>,
18635        ) -> std::result::Result<
18636            tonic::Response<super::UpdateProjectAuthorsResponse>,
18637            tonic::Status,
18638        > {
18639            self.inner
18640                .ready()
18641                .await
18642                .map_err(|e| {
18643                    tonic::Status::new(
18644                        tonic::Code::Unknown,
18645                        format!("Service was not ready: {}", e.into()),
18646                    )
18647                })?;
18648            let codec = tonic::codec::ProstCodec::default();
18649            let path = http::uri::PathAndQuery::from_static(
18650                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectAuthors",
18651            );
18652            let mut req = request.into_request();
18653            req.extensions_mut()
18654                .insert(
18655                    GrpcMethod::new(
18656                        "aruna.api.storage.services.v2.ProjectService",
18657                        "UpdateProjectAuthors",
18658                    ),
18659                );
18660            self.inner.unary(req, path, codec).await
18661        }
18662    }
18663}
18664/// Generated server implementations.
18665pub mod project_service_server {
18666    #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
18667    use tonic::codegen::*;
18668    /// Generated trait containing gRPC methods that should be implemented for use with ProjectServiceServer.
18669    #[async_trait]
18670    pub trait ProjectService: Send + Sync + 'static {
18671        /// CreateProject
18672        ///
18673        /// Status: BETA
18674        ///
18675        /// Creates a new project. All subsequent resources are part of a project.
18676        async fn create_project(
18677            &self,
18678            request: tonic::Request<super::CreateProjectRequest>,
18679        ) -> std::result::Result<
18680            tonic::Response<super::CreateProjectResponse>,
18681            tonic::Status,
18682        >;
18683        /// GetProject
18684        ///
18685        /// Status: BETA
18686        ///
18687        /// Requests a project (by id)
18688        async fn get_project(
18689            &self,
18690            request: tonic::Request<super::GetProjectRequest>,
18691        ) -> std::result::Result<
18692            tonic::Response<super::GetProjectResponse>,
18693            tonic::Status,
18694        >;
18695        /// GetProjects
18696        ///
18697        /// Status: BETA
18698        ///
18699        /// Admin request to get all projects
18700        async fn get_projects(
18701            &self,
18702            request: tonic::Request<super::GetProjectsRequest>,
18703        ) -> std::result::Result<
18704            tonic::Response<super::GetProjectsResponse>,
18705            tonic::Status,
18706        >;
18707        /// DeleteProject
18708        ///
18709        /// Status: BETA
18710        ///
18711        /// Deletes the project and all its associated data. Must be empty!
18712        async fn delete_project(
18713            &self,
18714            request: tonic::Request<super::DeleteProjectRequest>,
18715        ) -> std::result::Result<
18716            tonic::Response<super::DeleteProjectResponse>,
18717            tonic::Status,
18718        >;
18719        /// UpdateProjectName
18720        ///
18721        /// Status: BETA
18722        ///
18723        /// Updates the project name. Caveat! Will rename the "s3 bucket" for data proxies!
18724        async fn update_project_name(
18725            &self,
18726            request: tonic::Request<super::UpdateProjectNameRequest>,
18727        ) -> std::result::Result<
18728            tonic::Response<super::UpdateProjectNameResponse>,
18729            tonic::Status,
18730        >;
18731        /// UpdateProjectDescription
18732        ///
18733        /// Status: BETA
18734        ///
18735        /// Updates the project name.
18736        async fn update_project_description(
18737            &self,
18738            request: tonic::Request<super::UpdateProjectDescriptionRequest>,
18739        ) -> std::result::Result<
18740            tonic::Response<super::UpdateProjectDescriptionResponse>,
18741            tonic::Status,
18742        >;
18743        /// UpdateProjectKeyValues
18744        ///
18745        /// Status: BETA
18746        ///
18747        /// Updates the project key values.
18748        async fn update_project_key_values(
18749            &self,
18750            request: tonic::Request<super::UpdateProjectKeyValuesRequest>,
18751        ) -> std::result::Result<
18752            tonic::Response<super::UpdateProjectKeyValuesResponse>,
18753            tonic::Status,
18754        >;
18755        /// UpdateProjectDataClass
18756        ///
18757        /// Status: BETA
18758        ///
18759        /// Updates the project name. All (meta) data will be overwritten.
18760        async fn update_project_data_class(
18761            &self,
18762            request: tonic::Request<super::UpdateProjectDataClassRequest>,
18763        ) -> std::result::Result<
18764            tonic::Response<super::UpdateProjectDataClassResponse>,
18765            tonic::Status,
18766        >;
18767        /// UpdateLicense
18768        ///
18769        /// Status: BETA
18770        ///
18771        /// Updates the project license. All (meta) data will be overwritten.
18772        async fn update_project_licenses(
18773            &self,
18774            request: tonic::Request<super::UpdateProjectLicensesRequest>,
18775        ) -> std::result::Result<
18776            tonic::Response<super::UpdateProjectLicensesResponse>,
18777            tonic::Status,
18778        >;
18779        /// ArchiveProjectRequest
18780        ///
18781        /// Status: BETA
18782        ///
18783        /// Archives the full project, rendering all downstream relations immutable
18784        async fn archive_project(
18785            &self,
18786            request: tonic::Request<super::ArchiveProjectRequest>,
18787        ) -> std::result::Result<
18788            tonic::Response<super::ArchiveProjectResponse>,
18789            tonic::Status,
18790        >;
18791        /// UpdateTitle
18792        ///
18793        /// Status: ALPHA
18794        ///
18795        /// This method updates the title of a project
18796        async fn update_project_title(
18797            &self,
18798            request: tonic::Request<super::UpdateProjectTitleRequest>,
18799        ) -> std::result::Result<
18800            tonic::Response<super::UpdateProjectTitleResponse>,
18801            tonic::Status,
18802        >;
18803        /// UpdateAuthors
18804        ///
18805        /// Status: ALPHA
18806        ///
18807        /// This method updates the authors of an object
18808        async fn update_project_authors(
18809            &self,
18810            request: tonic::Request<super::UpdateProjectAuthorsRequest>,
18811        ) -> std::result::Result<
18812            tonic::Response<super::UpdateProjectAuthorsResponse>,
18813            tonic::Status,
18814        >;
18815    }
18816    /// ProjectService
18817    ///
18818    /// Status: BETA
18819    ///
18820    /// Contains all methods that get/create or update Projects and associated resources
18821    #[derive(Debug)]
18822    pub struct ProjectServiceServer<T: ProjectService> {
18823        inner: _Inner<T>,
18824        accept_compression_encodings: EnabledCompressionEncodings,
18825        send_compression_encodings: EnabledCompressionEncodings,
18826        max_decoding_message_size: Option<usize>,
18827        max_encoding_message_size: Option<usize>,
18828    }
18829    struct _Inner<T>(Arc<T>);
18830    impl<T: ProjectService> ProjectServiceServer<T> {
18831        pub fn new(inner: T) -> Self {
18832            Self::from_arc(Arc::new(inner))
18833        }
18834        pub fn from_arc(inner: Arc<T>) -> Self {
18835            let inner = _Inner(inner);
18836            Self {
18837                inner,
18838                accept_compression_encodings: Default::default(),
18839                send_compression_encodings: Default::default(),
18840                max_decoding_message_size: None,
18841                max_encoding_message_size: None,
18842            }
18843        }
18844        pub fn with_interceptor<F>(
18845            inner: T,
18846            interceptor: F,
18847        ) -> InterceptedService<Self, F>
18848        where
18849            F: tonic::service::Interceptor,
18850        {
18851            InterceptedService::new(Self::new(inner), interceptor)
18852        }
18853        /// Enable decompressing requests with the given encoding.
18854        #[must_use]
18855        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
18856            self.accept_compression_encodings.enable(encoding);
18857            self
18858        }
18859        /// Compress responses with the given encoding, if the client supports it.
18860        #[must_use]
18861        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
18862            self.send_compression_encodings.enable(encoding);
18863            self
18864        }
18865        /// Limits the maximum size of a decoded message.
18866        ///
18867        /// Default: `4MB`
18868        #[must_use]
18869        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
18870            self.max_decoding_message_size = Some(limit);
18871            self
18872        }
18873        /// Limits the maximum size of an encoded message.
18874        ///
18875        /// Default: `usize::MAX`
18876        #[must_use]
18877        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
18878            self.max_encoding_message_size = Some(limit);
18879            self
18880        }
18881    }
18882    impl<T, B> tonic::codegen::Service<http::Request<B>> for ProjectServiceServer<T>
18883    where
18884        T: ProjectService,
18885        B: Body + Send + 'static,
18886        B::Error: Into<StdError> + Send + 'static,
18887    {
18888        type Response = http::Response<tonic::body::BoxBody>;
18889        type Error = std::convert::Infallible;
18890        type Future = BoxFuture<Self::Response, Self::Error>;
18891        fn poll_ready(
18892            &mut self,
18893            _cx: &mut Context<'_>,
18894        ) -> Poll<std::result::Result<(), Self::Error>> {
18895            Poll::Ready(Ok(()))
18896        }
18897        fn call(&mut self, req: http::Request<B>) -> Self::Future {
18898            let inner = self.inner.clone();
18899            match req.uri().path() {
18900                "/aruna.api.storage.services.v2.ProjectService/CreateProject" => {
18901                    #[allow(non_camel_case_types)]
18902                    struct CreateProjectSvc<T: ProjectService>(pub Arc<T>);
18903                    impl<
18904                        T: ProjectService,
18905                    > tonic::server::UnaryService<super::CreateProjectRequest>
18906                    for CreateProjectSvc<T> {
18907                        type Response = super::CreateProjectResponse;
18908                        type Future = BoxFuture<
18909                            tonic::Response<Self::Response>,
18910                            tonic::Status,
18911                        >;
18912                        fn call(
18913                            &mut self,
18914                            request: tonic::Request<super::CreateProjectRequest>,
18915                        ) -> Self::Future {
18916                            let inner = Arc::clone(&self.0);
18917                            let fut = async move {
18918                                <T as ProjectService>::create_project(&inner, request).await
18919                            };
18920                            Box::pin(fut)
18921                        }
18922                    }
18923                    let accept_compression_encodings = self.accept_compression_encodings;
18924                    let send_compression_encodings = self.send_compression_encodings;
18925                    let max_decoding_message_size = self.max_decoding_message_size;
18926                    let max_encoding_message_size = self.max_encoding_message_size;
18927                    let inner = self.inner.clone();
18928                    let fut = async move {
18929                        let inner = inner.0;
18930                        let method = CreateProjectSvc(inner);
18931                        let codec = tonic::codec::ProstCodec::default();
18932                        let mut grpc = tonic::server::Grpc::new(codec)
18933                            .apply_compression_config(
18934                                accept_compression_encodings,
18935                                send_compression_encodings,
18936                            )
18937                            .apply_max_message_size_config(
18938                                max_decoding_message_size,
18939                                max_encoding_message_size,
18940                            );
18941                        let res = grpc.unary(method, req).await;
18942                        Ok(res)
18943                    };
18944                    Box::pin(fut)
18945                }
18946                "/aruna.api.storage.services.v2.ProjectService/GetProject" => {
18947                    #[allow(non_camel_case_types)]
18948                    struct GetProjectSvc<T: ProjectService>(pub Arc<T>);
18949                    impl<
18950                        T: ProjectService,
18951                    > tonic::server::UnaryService<super::GetProjectRequest>
18952                    for GetProjectSvc<T> {
18953                        type Response = super::GetProjectResponse;
18954                        type Future = BoxFuture<
18955                            tonic::Response<Self::Response>,
18956                            tonic::Status,
18957                        >;
18958                        fn call(
18959                            &mut self,
18960                            request: tonic::Request<super::GetProjectRequest>,
18961                        ) -> Self::Future {
18962                            let inner = Arc::clone(&self.0);
18963                            let fut = async move {
18964                                <T as ProjectService>::get_project(&inner, request).await
18965                            };
18966                            Box::pin(fut)
18967                        }
18968                    }
18969                    let accept_compression_encodings = self.accept_compression_encodings;
18970                    let send_compression_encodings = self.send_compression_encodings;
18971                    let max_decoding_message_size = self.max_decoding_message_size;
18972                    let max_encoding_message_size = self.max_encoding_message_size;
18973                    let inner = self.inner.clone();
18974                    let fut = async move {
18975                        let inner = inner.0;
18976                        let method = GetProjectSvc(inner);
18977                        let codec = tonic::codec::ProstCodec::default();
18978                        let mut grpc = tonic::server::Grpc::new(codec)
18979                            .apply_compression_config(
18980                                accept_compression_encodings,
18981                                send_compression_encodings,
18982                            )
18983                            .apply_max_message_size_config(
18984                                max_decoding_message_size,
18985                                max_encoding_message_size,
18986                            );
18987                        let res = grpc.unary(method, req).await;
18988                        Ok(res)
18989                    };
18990                    Box::pin(fut)
18991                }
18992                "/aruna.api.storage.services.v2.ProjectService/GetProjects" => {
18993                    #[allow(non_camel_case_types)]
18994                    struct GetProjectsSvc<T: ProjectService>(pub Arc<T>);
18995                    impl<
18996                        T: ProjectService,
18997                    > tonic::server::UnaryService<super::GetProjectsRequest>
18998                    for GetProjectsSvc<T> {
18999                        type Response = super::GetProjectsResponse;
19000                        type Future = BoxFuture<
19001                            tonic::Response<Self::Response>,
19002                            tonic::Status,
19003                        >;
19004                        fn call(
19005                            &mut self,
19006                            request: tonic::Request<super::GetProjectsRequest>,
19007                        ) -> Self::Future {
19008                            let inner = Arc::clone(&self.0);
19009                            let fut = async move {
19010                                <T as ProjectService>::get_projects(&inner, request).await
19011                            };
19012                            Box::pin(fut)
19013                        }
19014                    }
19015                    let accept_compression_encodings = self.accept_compression_encodings;
19016                    let send_compression_encodings = self.send_compression_encodings;
19017                    let max_decoding_message_size = self.max_decoding_message_size;
19018                    let max_encoding_message_size = self.max_encoding_message_size;
19019                    let inner = self.inner.clone();
19020                    let fut = async move {
19021                        let inner = inner.0;
19022                        let method = GetProjectsSvc(inner);
19023                        let codec = tonic::codec::ProstCodec::default();
19024                        let mut grpc = tonic::server::Grpc::new(codec)
19025                            .apply_compression_config(
19026                                accept_compression_encodings,
19027                                send_compression_encodings,
19028                            )
19029                            .apply_max_message_size_config(
19030                                max_decoding_message_size,
19031                                max_encoding_message_size,
19032                            );
19033                        let res = grpc.unary(method, req).await;
19034                        Ok(res)
19035                    };
19036                    Box::pin(fut)
19037                }
19038                "/aruna.api.storage.services.v2.ProjectService/DeleteProject" => {
19039                    #[allow(non_camel_case_types)]
19040                    struct DeleteProjectSvc<T: ProjectService>(pub Arc<T>);
19041                    impl<
19042                        T: ProjectService,
19043                    > tonic::server::UnaryService<super::DeleteProjectRequest>
19044                    for DeleteProjectSvc<T> {
19045                        type Response = super::DeleteProjectResponse;
19046                        type Future = BoxFuture<
19047                            tonic::Response<Self::Response>,
19048                            tonic::Status,
19049                        >;
19050                        fn call(
19051                            &mut self,
19052                            request: tonic::Request<super::DeleteProjectRequest>,
19053                        ) -> Self::Future {
19054                            let inner = Arc::clone(&self.0);
19055                            let fut = async move {
19056                                <T as ProjectService>::delete_project(&inner, request).await
19057                            };
19058                            Box::pin(fut)
19059                        }
19060                    }
19061                    let accept_compression_encodings = self.accept_compression_encodings;
19062                    let send_compression_encodings = self.send_compression_encodings;
19063                    let max_decoding_message_size = self.max_decoding_message_size;
19064                    let max_encoding_message_size = self.max_encoding_message_size;
19065                    let inner = self.inner.clone();
19066                    let fut = async move {
19067                        let inner = inner.0;
19068                        let method = DeleteProjectSvc(inner);
19069                        let codec = tonic::codec::ProstCodec::default();
19070                        let mut grpc = tonic::server::Grpc::new(codec)
19071                            .apply_compression_config(
19072                                accept_compression_encodings,
19073                                send_compression_encodings,
19074                            )
19075                            .apply_max_message_size_config(
19076                                max_decoding_message_size,
19077                                max_encoding_message_size,
19078                            );
19079                        let res = grpc.unary(method, req).await;
19080                        Ok(res)
19081                    };
19082                    Box::pin(fut)
19083                }
19084                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectName" => {
19085                    #[allow(non_camel_case_types)]
19086                    struct UpdateProjectNameSvc<T: ProjectService>(pub Arc<T>);
19087                    impl<
19088                        T: ProjectService,
19089                    > tonic::server::UnaryService<super::UpdateProjectNameRequest>
19090                    for UpdateProjectNameSvc<T> {
19091                        type Response = super::UpdateProjectNameResponse;
19092                        type Future = BoxFuture<
19093                            tonic::Response<Self::Response>,
19094                            tonic::Status,
19095                        >;
19096                        fn call(
19097                            &mut self,
19098                            request: tonic::Request<super::UpdateProjectNameRequest>,
19099                        ) -> Self::Future {
19100                            let inner = Arc::clone(&self.0);
19101                            let fut = async move {
19102                                <T as ProjectService>::update_project_name(&inner, request)
19103                                    .await
19104                            };
19105                            Box::pin(fut)
19106                        }
19107                    }
19108                    let accept_compression_encodings = self.accept_compression_encodings;
19109                    let send_compression_encodings = self.send_compression_encodings;
19110                    let max_decoding_message_size = self.max_decoding_message_size;
19111                    let max_encoding_message_size = self.max_encoding_message_size;
19112                    let inner = self.inner.clone();
19113                    let fut = async move {
19114                        let inner = inner.0;
19115                        let method = UpdateProjectNameSvc(inner);
19116                        let codec = tonic::codec::ProstCodec::default();
19117                        let mut grpc = tonic::server::Grpc::new(codec)
19118                            .apply_compression_config(
19119                                accept_compression_encodings,
19120                                send_compression_encodings,
19121                            )
19122                            .apply_max_message_size_config(
19123                                max_decoding_message_size,
19124                                max_encoding_message_size,
19125                            );
19126                        let res = grpc.unary(method, req).await;
19127                        Ok(res)
19128                    };
19129                    Box::pin(fut)
19130                }
19131                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectDescription" => {
19132                    #[allow(non_camel_case_types)]
19133                    struct UpdateProjectDescriptionSvc<T: ProjectService>(pub Arc<T>);
19134                    impl<
19135                        T: ProjectService,
19136                    > tonic::server::UnaryService<super::UpdateProjectDescriptionRequest>
19137                    for UpdateProjectDescriptionSvc<T> {
19138                        type Response = super::UpdateProjectDescriptionResponse;
19139                        type Future = BoxFuture<
19140                            tonic::Response<Self::Response>,
19141                            tonic::Status,
19142                        >;
19143                        fn call(
19144                            &mut self,
19145                            request: tonic::Request<
19146                                super::UpdateProjectDescriptionRequest,
19147                            >,
19148                        ) -> Self::Future {
19149                            let inner = Arc::clone(&self.0);
19150                            let fut = async move {
19151                                <T as ProjectService>::update_project_description(
19152                                        &inner,
19153                                        request,
19154                                    )
19155                                    .await
19156                            };
19157                            Box::pin(fut)
19158                        }
19159                    }
19160                    let accept_compression_encodings = self.accept_compression_encodings;
19161                    let send_compression_encodings = self.send_compression_encodings;
19162                    let max_decoding_message_size = self.max_decoding_message_size;
19163                    let max_encoding_message_size = self.max_encoding_message_size;
19164                    let inner = self.inner.clone();
19165                    let fut = async move {
19166                        let inner = inner.0;
19167                        let method = UpdateProjectDescriptionSvc(inner);
19168                        let codec = tonic::codec::ProstCodec::default();
19169                        let mut grpc = tonic::server::Grpc::new(codec)
19170                            .apply_compression_config(
19171                                accept_compression_encodings,
19172                                send_compression_encodings,
19173                            )
19174                            .apply_max_message_size_config(
19175                                max_decoding_message_size,
19176                                max_encoding_message_size,
19177                            );
19178                        let res = grpc.unary(method, req).await;
19179                        Ok(res)
19180                    };
19181                    Box::pin(fut)
19182                }
19183                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectKeyValues" => {
19184                    #[allow(non_camel_case_types)]
19185                    struct UpdateProjectKeyValuesSvc<T: ProjectService>(pub Arc<T>);
19186                    impl<
19187                        T: ProjectService,
19188                    > tonic::server::UnaryService<super::UpdateProjectKeyValuesRequest>
19189                    for UpdateProjectKeyValuesSvc<T> {
19190                        type Response = super::UpdateProjectKeyValuesResponse;
19191                        type Future = BoxFuture<
19192                            tonic::Response<Self::Response>,
19193                            tonic::Status,
19194                        >;
19195                        fn call(
19196                            &mut self,
19197                            request: tonic::Request<super::UpdateProjectKeyValuesRequest>,
19198                        ) -> Self::Future {
19199                            let inner = Arc::clone(&self.0);
19200                            let fut = async move {
19201                                <T as ProjectService>::update_project_key_values(
19202                                        &inner,
19203                                        request,
19204                                    )
19205                                    .await
19206                            };
19207                            Box::pin(fut)
19208                        }
19209                    }
19210                    let accept_compression_encodings = self.accept_compression_encodings;
19211                    let send_compression_encodings = self.send_compression_encodings;
19212                    let max_decoding_message_size = self.max_decoding_message_size;
19213                    let max_encoding_message_size = self.max_encoding_message_size;
19214                    let inner = self.inner.clone();
19215                    let fut = async move {
19216                        let inner = inner.0;
19217                        let method = UpdateProjectKeyValuesSvc(inner);
19218                        let codec = tonic::codec::ProstCodec::default();
19219                        let mut grpc = tonic::server::Grpc::new(codec)
19220                            .apply_compression_config(
19221                                accept_compression_encodings,
19222                                send_compression_encodings,
19223                            )
19224                            .apply_max_message_size_config(
19225                                max_decoding_message_size,
19226                                max_encoding_message_size,
19227                            );
19228                        let res = grpc.unary(method, req).await;
19229                        Ok(res)
19230                    };
19231                    Box::pin(fut)
19232                }
19233                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectDataClass" => {
19234                    #[allow(non_camel_case_types)]
19235                    struct UpdateProjectDataClassSvc<T: ProjectService>(pub Arc<T>);
19236                    impl<
19237                        T: ProjectService,
19238                    > tonic::server::UnaryService<super::UpdateProjectDataClassRequest>
19239                    for UpdateProjectDataClassSvc<T> {
19240                        type Response = super::UpdateProjectDataClassResponse;
19241                        type Future = BoxFuture<
19242                            tonic::Response<Self::Response>,
19243                            tonic::Status,
19244                        >;
19245                        fn call(
19246                            &mut self,
19247                            request: tonic::Request<super::UpdateProjectDataClassRequest>,
19248                        ) -> Self::Future {
19249                            let inner = Arc::clone(&self.0);
19250                            let fut = async move {
19251                                <T as ProjectService>::update_project_data_class(
19252                                        &inner,
19253                                        request,
19254                                    )
19255                                    .await
19256                            };
19257                            Box::pin(fut)
19258                        }
19259                    }
19260                    let accept_compression_encodings = self.accept_compression_encodings;
19261                    let send_compression_encodings = self.send_compression_encodings;
19262                    let max_decoding_message_size = self.max_decoding_message_size;
19263                    let max_encoding_message_size = self.max_encoding_message_size;
19264                    let inner = self.inner.clone();
19265                    let fut = async move {
19266                        let inner = inner.0;
19267                        let method = UpdateProjectDataClassSvc(inner);
19268                        let codec = tonic::codec::ProstCodec::default();
19269                        let mut grpc = tonic::server::Grpc::new(codec)
19270                            .apply_compression_config(
19271                                accept_compression_encodings,
19272                                send_compression_encodings,
19273                            )
19274                            .apply_max_message_size_config(
19275                                max_decoding_message_size,
19276                                max_encoding_message_size,
19277                            );
19278                        let res = grpc.unary(method, req).await;
19279                        Ok(res)
19280                    };
19281                    Box::pin(fut)
19282                }
19283                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectLicenses" => {
19284                    #[allow(non_camel_case_types)]
19285                    struct UpdateProjectLicensesSvc<T: ProjectService>(pub Arc<T>);
19286                    impl<
19287                        T: ProjectService,
19288                    > tonic::server::UnaryService<super::UpdateProjectLicensesRequest>
19289                    for UpdateProjectLicensesSvc<T> {
19290                        type Response = super::UpdateProjectLicensesResponse;
19291                        type Future = BoxFuture<
19292                            tonic::Response<Self::Response>,
19293                            tonic::Status,
19294                        >;
19295                        fn call(
19296                            &mut self,
19297                            request: tonic::Request<super::UpdateProjectLicensesRequest>,
19298                        ) -> Self::Future {
19299                            let inner = Arc::clone(&self.0);
19300                            let fut = async move {
19301                                <T as ProjectService>::update_project_licenses(
19302                                        &inner,
19303                                        request,
19304                                    )
19305                                    .await
19306                            };
19307                            Box::pin(fut)
19308                        }
19309                    }
19310                    let accept_compression_encodings = self.accept_compression_encodings;
19311                    let send_compression_encodings = self.send_compression_encodings;
19312                    let max_decoding_message_size = self.max_decoding_message_size;
19313                    let max_encoding_message_size = self.max_encoding_message_size;
19314                    let inner = self.inner.clone();
19315                    let fut = async move {
19316                        let inner = inner.0;
19317                        let method = UpdateProjectLicensesSvc(inner);
19318                        let codec = tonic::codec::ProstCodec::default();
19319                        let mut grpc = tonic::server::Grpc::new(codec)
19320                            .apply_compression_config(
19321                                accept_compression_encodings,
19322                                send_compression_encodings,
19323                            )
19324                            .apply_max_message_size_config(
19325                                max_decoding_message_size,
19326                                max_encoding_message_size,
19327                            );
19328                        let res = grpc.unary(method, req).await;
19329                        Ok(res)
19330                    };
19331                    Box::pin(fut)
19332                }
19333                "/aruna.api.storage.services.v2.ProjectService/ArchiveProject" => {
19334                    #[allow(non_camel_case_types)]
19335                    struct ArchiveProjectSvc<T: ProjectService>(pub Arc<T>);
19336                    impl<
19337                        T: ProjectService,
19338                    > tonic::server::UnaryService<super::ArchiveProjectRequest>
19339                    for ArchiveProjectSvc<T> {
19340                        type Response = super::ArchiveProjectResponse;
19341                        type Future = BoxFuture<
19342                            tonic::Response<Self::Response>,
19343                            tonic::Status,
19344                        >;
19345                        fn call(
19346                            &mut self,
19347                            request: tonic::Request<super::ArchiveProjectRequest>,
19348                        ) -> Self::Future {
19349                            let inner = Arc::clone(&self.0);
19350                            let fut = async move {
19351                                <T as ProjectService>::archive_project(&inner, request)
19352                                    .await
19353                            };
19354                            Box::pin(fut)
19355                        }
19356                    }
19357                    let accept_compression_encodings = self.accept_compression_encodings;
19358                    let send_compression_encodings = self.send_compression_encodings;
19359                    let max_decoding_message_size = self.max_decoding_message_size;
19360                    let max_encoding_message_size = self.max_encoding_message_size;
19361                    let inner = self.inner.clone();
19362                    let fut = async move {
19363                        let inner = inner.0;
19364                        let method = ArchiveProjectSvc(inner);
19365                        let codec = tonic::codec::ProstCodec::default();
19366                        let mut grpc = tonic::server::Grpc::new(codec)
19367                            .apply_compression_config(
19368                                accept_compression_encodings,
19369                                send_compression_encodings,
19370                            )
19371                            .apply_max_message_size_config(
19372                                max_decoding_message_size,
19373                                max_encoding_message_size,
19374                            );
19375                        let res = grpc.unary(method, req).await;
19376                        Ok(res)
19377                    };
19378                    Box::pin(fut)
19379                }
19380                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectTitle" => {
19381                    #[allow(non_camel_case_types)]
19382                    struct UpdateProjectTitleSvc<T: ProjectService>(pub Arc<T>);
19383                    impl<
19384                        T: ProjectService,
19385                    > tonic::server::UnaryService<super::UpdateProjectTitleRequest>
19386                    for UpdateProjectTitleSvc<T> {
19387                        type Response = super::UpdateProjectTitleResponse;
19388                        type Future = BoxFuture<
19389                            tonic::Response<Self::Response>,
19390                            tonic::Status,
19391                        >;
19392                        fn call(
19393                            &mut self,
19394                            request: tonic::Request<super::UpdateProjectTitleRequest>,
19395                        ) -> Self::Future {
19396                            let inner = Arc::clone(&self.0);
19397                            let fut = async move {
19398                                <T as ProjectService>::update_project_title(&inner, request)
19399                                    .await
19400                            };
19401                            Box::pin(fut)
19402                        }
19403                    }
19404                    let accept_compression_encodings = self.accept_compression_encodings;
19405                    let send_compression_encodings = self.send_compression_encodings;
19406                    let max_decoding_message_size = self.max_decoding_message_size;
19407                    let max_encoding_message_size = self.max_encoding_message_size;
19408                    let inner = self.inner.clone();
19409                    let fut = async move {
19410                        let inner = inner.0;
19411                        let method = UpdateProjectTitleSvc(inner);
19412                        let codec = tonic::codec::ProstCodec::default();
19413                        let mut grpc = tonic::server::Grpc::new(codec)
19414                            .apply_compression_config(
19415                                accept_compression_encodings,
19416                                send_compression_encodings,
19417                            )
19418                            .apply_max_message_size_config(
19419                                max_decoding_message_size,
19420                                max_encoding_message_size,
19421                            );
19422                        let res = grpc.unary(method, req).await;
19423                        Ok(res)
19424                    };
19425                    Box::pin(fut)
19426                }
19427                "/aruna.api.storage.services.v2.ProjectService/UpdateProjectAuthors" => {
19428                    #[allow(non_camel_case_types)]
19429                    struct UpdateProjectAuthorsSvc<T: ProjectService>(pub Arc<T>);
19430                    impl<
19431                        T: ProjectService,
19432                    > tonic::server::UnaryService<super::UpdateProjectAuthorsRequest>
19433                    for UpdateProjectAuthorsSvc<T> {
19434                        type Response = super::UpdateProjectAuthorsResponse;
19435                        type Future = BoxFuture<
19436                            tonic::Response<Self::Response>,
19437                            tonic::Status,
19438                        >;
19439                        fn call(
19440                            &mut self,
19441                            request: tonic::Request<super::UpdateProjectAuthorsRequest>,
19442                        ) -> Self::Future {
19443                            let inner = Arc::clone(&self.0);
19444                            let fut = async move {
19445                                <T as ProjectService>::update_project_authors(
19446                                        &inner,
19447                                        request,
19448                                    )
19449                                    .await
19450                            };
19451                            Box::pin(fut)
19452                        }
19453                    }
19454                    let accept_compression_encodings = self.accept_compression_encodings;
19455                    let send_compression_encodings = self.send_compression_encodings;
19456                    let max_decoding_message_size = self.max_decoding_message_size;
19457                    let max_encoding_message_size = self.max_encoding_message_size;
19458                    let inner = self.inner.clone();
19459                    let fut = async move {
19460                        let inner = inner.0;
19461                        let method = UpdateProjectAuthorsSvc(inner);
19462                        let codec = tonic::codec::ProstCodec::default();
19463                        let mut grpc = tonic::server::Grpc::new(codec)
19464                            .apply_compression_config(
19465                                accept_compression_encodings,
19466                                send_compression_encodings,
19467                            )
19468                            .apply_max_message_size_config(
19469                                max_decoding_message_size,
19470                                max_encoding_message_size,
19471                            );
19472                        let res = grpc.unary(method, req).await;
19473                        Ok(res)
19474                    };
19475                    Box::pin(fut)
19476                }
19477                _ => {
19478                    Box::pin(async move {
19479                        Ok(
19480                            http::Response::builder()
19481                                .status(200)
19482                                .header("grpc-status", "12")
19483                                .header("content-type", "application/grpc")
19484                                .body(empty_body())
19485                                .unwrap(),
19486                        )
19487                    })
19488                }
19489            }
19490        }
19491    }
19492    impl<T: ProjectService> Clone for ProjectServiceServer<T> {
19493        fn clone(&self) -> Self {
19494            let inner = self.inner.clone();
19495            Self {
19496                inner,
19497                accept_compression_encodings: self.accept_compression_encodings,
19498                send_compression_encodings: self.send_compression_encodings,
19499                max_decoding_message_size: self.max_decoding_message_size,
19500                max_encoding_message_size: self.max_encoding_message_size,
19501            }
19502        }
19503    }
19504    impl<T: ProjectService> Clone for _Inner<T> {
19505        fn clone(&self) -> Self {
19506            Self(Arc::clone(&self.0))
19507        }
19508    }
19509    impl<T: std::fmt::Debug> std::fmt::Debug for _Inner<T> {
19510        fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19511            write!(f, "{:?}", self.0)
19512        }
19513    }
19514    impl<T: ProjectService> tonic::server::NamedService for ProjectServiceServer<T> {
19515        const NAME: &'static str = "aruna.api.storage.services.v2.ProjectService";
19516    }
19517}