Skip to main content

slim_controller/api/gen/
controller.proto.v1.rs

1// This file is @generated by prost-build.
2#[derive(Clone, PartialEq, ::prost::Message)]
3pub struct ControlMessage {
4    #[prost(string, tag = "1")]
5    pub message_id: ::prost::alloc::string::String,
6    #[prost(
7        oneof = "control_message::Payload",
8        tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20"
9    )]
10    pub payload: ::core::option::Option<control_message::Payload>,
11}
12/// Nested message and enum types in `ControlMessage`.
13pub mod control_message {
14    #[derive(Clone, PartialEq, ::prost::Oneof)]
15    pub enum Payload {
16        #[prost(message, tag = "2")]
17        ConfigCommand(super::ConfigurationCommand),
18        #[prost(message, tag = "3")]
19        Ack(super::Ack),
20        #[prost(message, tag = "4")]
21        SubscriptionListRequest(super::SubscriptionListRequest),
22        #[prost(message, tag = "5")]
23        SubscriptionListResponse(super::SubscriptionListResponse),
24        #[prost(message, tag = "6")]
25        ConnectionListRequest(super::ConnectionListRequest),
26        #[prost(message, tag = "7")]
27        ConnectionListResponse(super::ConnectionListResponse),
28        #[prost(message, tag = "8")]
29        RegisterNodeRequest(super::RegisterNodeRequest),
30        #[prost(message, tag = "9")]
31        RegisterNodeResponse(super::RegisterNodeResponse),
32        #[prost(message, tag = "10")]
33        DeregisterNodeRequest(super::DeregisterNodeRequest),
34        #[prost(message, tag = "11")]
35        DeregisterNodeResponse(super::DeregisterNodeResponse),
36        #[prost(message, tag = "12")]
37        CreateChannelRequest(super::CreateChannelRequest),
38        #[prost(message, tag = "13")]
39        DeleteChannelRequest(super::DeleteChannelRequest),
40        #[prost(message, tag = "14")]
41        AddParticipantRequest(super::AddParticipantRequest),
42        #[prost(message, tag = "15")]
43        DeleteParticipantRequest(super::DeleteParticipantRequest),
44        #[prost(message, tag = "16")]
45        ListChannelRequest(super::ListChannelsRequest),
46        #[prost(message, tag = "17")]
47        ListChannelResponse(super::ListChannelsResponse),
48        #[prost(message, tag = "18")]
49        ListParticipantsRequest(super::ListParticipantsRequest),
50        #[prost(message, tag = "19")]
51        ListParticipantsResponse(super::ListParticipantsResponse),
52        #[prost(message, tag = "20")]
53        ConfigCommandAck(super::ConfigurationCommandAck),
54    }
55}
56#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
57pub struct Connection {
58    #[prost(string, tag = "1")]
59    pub connection_id: ::prost::alloc::string::String,
60    #[prost(string, tag = "2")]
61    pub config_data: ::prost::alloc::string::String,
62}
63#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
64pub struct ConnectionAck {
65    #[prost(string, tag = "1")]
66    pub connection_id: ::prost::alloc::string::String,
67    #[prost(bool, tag = "2")]
68    pub success: bool,
69    #[prost(string, tag = "3")]
70    pub error_msg: ::prost::alloc::string::String,
71}
72#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
73pub struct Subscription {
74    #[prost(string, tag = "1")]
75    pub component_0: ::prost::alloc::string::String,
76    #[prost(string, tag = "2")]
77    pub component_1: ::prost::alloc::string::String,
78    #[prost(string, tag = "3")]
79    pub component_2: ::prost::alloc::string::String,
80    #[prost(message, optional, tag = "4")]
81    pub id: ::core::option::Option<u64>,
82    #[prost(string, tag = "5")]
83    pub connection_id: ::prost::alloc::string::String,
84    #[prost(string, optional, tag = "6")]
85    pub node_id: ::core::option::Option<::prost::alloc::string::String>,
86    #[prost(string, optional, tag = "7")]
87    pub link_id: ::core::option::Option<::prost::alloc::string::String>,
88    #[prost(enumeration = "ConnectionDirection", optional, tag = "8")]
89    pub direction: ::core::option::Option<i32>,
90}
91#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
92pub struct SubscriptionAck {
93    #[prost(message, optional, tag = "1")]
94    pub subscription: ::core::option::Option<Subscription>,
95    #[prost(bool, tag = "2")]
96    pub success: bool,
97    #[prost(string, tag = "3")]
98    pub error_msg: ::prost::alloc::string::String,
99}
100#[derive(Clone, PartialEq, ::prost::Message)]
101pub struct ConfigurationCommand {
102    #[prost(message, repeated, tag = "1")]
103    pub connections_to_create: ::prost::alloc::vec::Vec<Connection>,
104    #[prost(message, repeated, tag = "2")]
105    pub subscriptions_to_set: ::prost::alloc::vec::Vec<Subscription>,
106    #[prost(message, repeated, tag = "3")]
107    pub subscriptions_to_delete: ::prost::alloc::vec::Vec<Subscription>,
108    #[prost(string, repeated, tag = "4")]
109    pub connections_to_delete: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
110}
111#[derive(Clone, PartialEq, ::prost::Message)]
112pub struct ConfigurationCommandAck {
113    #[prost(string, tag = "1")]
114    pub original_message_id: ::prost::alloc::string::String,
115    #[prost(message, repeated, tag = "2")]
116    pub connections_status: ::prost::alloc::vec::Vec<ConnectionAck>,
117    #[prost(message, repeated, tag = "3")]
118    pub subscriptions_status: ::prost::alloc::vec::Vec<SubscriptionAck>,
119}
120#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
121pub struct Ack {
122    #[prost(string, tag = "1")]
123    pub original_message_id: ::prost::alloc::string::String,
124    #[prost(bool, tag = "2")]
125    pub success: bool,
126    #[prost(string, repeated, tag = "3")]
127    pub messages: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
128}
129#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
130pub struct SubscriptionListRequest {}
131#[derive(Clone, PartialEq, ::prost::Message)]
132pub struct SubscriptionListResponse {
133    #[prost(string, tag = "1")]
134    pub original_message_id: ::prost::alloc::string::String,
135    #[prost(message, repeated, tag = "2")]
136    pub entries: ::prost::alloc::vec::Vec<SubscriptionEntry>,
137}
138#[derive(Clone, PartialEq, ::prost::Message)]
139pub struct SubscriptionEntry {
140    #[prost(string, tag = "1")]
141    pub component_0: ::prost::alloc::string::String,
142    #[prost(string, tag = "2")]
143    pub component_1: ::prost::alloc::string::String,
144    #[prost(string, tag = "3")]
145    pub component_2: ::prost::alloc::string::String,
146    #[prost(message, optional, tag = "4")]
147    pub id: ::core::option::Option<u64>,
148    #[prost(message, repeated, tag = "5")]
149    pub local_connections: ::prost::alloc::vec::Vec<ConnectionEntry>,
150    #[prost(message, repeated, tag = "6")]
151    pub remote_connections: ::prost::alloc::vec::Vec<ConnectionEntry>,
152}
153#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
154pub struct ConnectionEntry {
155    #[prost(uint64, tag = "1")]
156    pub id: u64,
157    #[prost(enumeration = "ConnectionType", tag = "2")]
158    pub connection_type: i32,
159    #[prost(string, tag = "3")]
160    pub config_data: ::prost::alloc::string::String,
161    #[prost(string, optional, tag = "4")]
162    pub link_id: ::core::option::Option<::prost::alloc::string::String>,
163    #[prost(enumeration = "ConnectionDirection", tag = "5")]
164    pub direction: i32,
165}
166#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
167pub struct ConnectionListRequest {}
168#[derive(Clone, PartialEq, ::prost::Message)]
169pub struct ConnectionListResponse {
170    #[prost(string, tag = "1")]
171    pub original_message_id: ::prost::alloc::string::String,
172    #[prost(message, repeated, tag = "2")]
173    pub entries: ::prost::alloc::vec::Vec<ConnectionEntry>,
174}
175#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
176pub struct Node {
177    #[prost(string, tag = "1")]
178    pub id: ::prost::alloc::string::String,
179}
180#[derive(Clone, PartialEq, ::prost::Message)]
181pub struct ConnectionDetails {
182    #[prost(string, tag = "1")]
183    pub endpoint: ::prost::alloc::string::String,
184    #[prost(bool, tag = "2")]
185    pub mtls_required: bool,
186    #[prost(message, optional, tag = "3")]
187    pub metadata: ::core::option::Option<::prost_types::Struct>,
188    #[prost(string, optional, tag = "4")]
189    pub auth: ::core::option::Option<::prost::alloc::string::String>,
190    #[prost(string, optional, tag = "5")]
191    pub tls: ::core::option::Option<::prost::alloc::string::String>,
192}
193#[derive(Clone, PartialEq, ::prost::Message)]
194pub struct RegisterNodeRequest {
195    #[prost(string, tag = "1")]
196    pub node_id: ::prost::alloc::string::String,
197    #[prost(message, repeated, tag = "2")]
198    pub connection_details: ::prost::alloc::vec::Vec<ConnectionDetails>,
199    #[prost(string, optional, tag = "3")]
200    pub group_name: ::core::option::Option<::prost::alloc::string::String>,
201}
202#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
203pub struct RegisterNodeResponse {
204    #[prost(string, tag = "1")]
205    pub original_message_id: ::prost::alloc::string::String,
206    #[prost(bool, tag = "2")]
207    pub success: bool,
208}
209#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
210pub struct DeregisterNodeRequest {
211    #[prost(message, optional, tag = "1")]
212    pub node: ::core::option::Option<Node>,
213}
214#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
215pub struct DeregisterNodeResponse {
216    #[prost(string, tag = "1")]
217    pub original_message_id: ::prost::alloc::string::String,
218    #[prost(bool, tag = "2")]
219    pub success: bool,
220}
221#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
222pub struct CreateChannelRequest {
223    /// list of moderators for the channel
224    #[prost(string, repeated, tag = "1")]
225    pub moderators: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
226    /// The channel name in the form organization/namespace/channel_name
227    #[prost(string, tag = "2")]
228    pub channel_name: ::prost::alloc::string::String,
229}
230#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
231pub struct DeleteChannelRequest {
232    /// The channel name in the form organization/namespace/channel_name
233    #[prost(string, tag = "1")]
234    pub channel_name: ::prost::alloc::string::String,
235    /// list of moderators for the channel
236    #[prost(string, repeated, tag = "2")]
237    pub moderators: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
238}
239#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
240pub struct AddParticipantRequest {
241    /// The channel name in the form organization/namespace/channel_name
242    #[prost(string, tag = "1")]
243    pub channel_name: ::prost::alloc::string::String,
244    /// Name of the participant
245    #[prost(string, tag = "2")]
246    pub participant_name: ::prost::alloc::string::String,
247    /// list of moderators for the channel
248    #[prost(string, repeated, tag = "3")]
249    pub moderators: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
250}
251#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
252pub struct DeleteParticipantRequest {
253    /// The channel name in the form organization/namespace/channel_name
254    #[prost(string, tag = "1")]
255    pub channel_name: ::prost::alloc::string::String,
256    /// ID of participant
257    #[prost(string, tag = "2")]
258    pub participant_name: ::prost::alloc::string::String,
259    /// list of moderators for the channel
260    #[prost(string, repeated, tag = "3")]
261    pub moderators: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
262}
263#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]
264pub struct ListChannelsRequest {}
265#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
266pub struct ListChannelsResponse {
267    #[prost(string, tag = "1")]
268    pub original_message_id: ::prost::alloc::string::String,
269    /// IDs of the channels available in the control plane
270    #[prost(string, repeated, tag = "2")]
271    pub channel_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
272}
273#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
274pub struct ListParticipantsRequest {
275    /// name of the channel
276    #[prost(string, tag = "1")]
277    pub channel_name: ::prost::alloc::string::String,
278}
279#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
280pub struct ListParticipantsResponse {
281    #[prost(string, tag = "1")]
282    pub original_message_id: ::prost::alloc::string::String,
283    /// list of participants in the channel
284    #[prost(string, repeated, tag = "2")]
285    pub participant_name: ::prost::alloc::vec::Vec<::prost::alloc::string::String>,
286}
287#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
288#[repr(i32)]
289pub enum ConnectionType {
290    Local = 0,
291    Remote = 1,
292}
293impl ConnectionType {
294    /// String value of the enum field names used in the ProtoBuf definition.
295    ///
296    /// The values are not transformed in any way and thus are considered stable
297    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
298    pub fn as_str_name(&self) -> &'static str {
299        match self {
300            Self::Local => "CONNECTION_TYPE_LOCAL",
301            Self::Remote => "CONNECTION_TYPE_REMOTE",
302        }
303    }
304    /// Creates an enum from field names used in the ProtoBuf definition.
305    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
306        match value {
307            "CONNECTION_TYPE_LOCAL" => Some(Self::Local),
308            "CONNECTION_TYPE_REMOTE" => Some(Self::Remote),
309            _ => None,
310        }
311    }
312}
313#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
314#[repr(i32)]
315pub enum ConnectionDirection {
316    Outgoing = 0,
317    Incoming = 1,
318}
319impl ConnectionDirection {
320    /// String value of the enum field names used in the ProtoBuf definition.
321    ///
322    /// The values are not transformed in any way and thus are considered stable
323    /// (if the ProtoBuf definition does not change) and safe for programmatic use.
324    pub fn as_str_name(&self) -> &'static str {
325        match self {
326            Self::Outgoing => "CONNECTION_DIRECTION_OUTGOING",
327            Self::Incoming => "CONNECTION_DIRECTION_INCOMING",
328        }
329    }
330    /// Creates an enum from field names used in the ProtoBuf definition.
331    pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
332        match value {
333            "CONNECTION_DIRECTION_OUTGOING" => Some(Self::Outgoing),
334            "CONNECTION_DIRECTION_INCOMING" => Some(Self::Incoming),
335            _ => None,
336        }
337    }
338}
339/// Generated client implementations.
340pub mod controller_service_client {
341    #![allow(
342        unused_variables,
343        dead_code,
344        missing_docs,
345        clippy::wildcard_imports,
346        clippy::let_unit_value,
347    )]
348    use tonic::codegen::*;
349    use tonic::codegen::http::Uri;
350    #[derive(Debug, Clone)]
351    pub struct ControllerServiceClient<T> {
352        inner: tonic::client::Grpc<T>,
353    }
354    impl ControllerServiceClient<tonic::transport::Channel> {
355        /// Attempt to create a new client by connecting to a given endpoint.
356        pub async fn connect<D>(dst: D) -> Result<Self, tonic::transport::Error>
357        where
358            D: TryInto<tonic::transport::Endpoint>,
359            D::Error: Into<StdError>,
360        {
361            let conn = tonic::transport::Endpoint::new(dst)?.connect().await?;
362            Ok(Self::new(conn))
363        }
364    }
365    impl<T> ControllerServiceClient<T>
366    where
367        T: tonic::client::GrpcService<tonic::body::Body>,
368        T::Error: Into<StdError>,
369        T::ResponseBody: Body<Data = Bytes> + std::marker::Send + 'static,
370        <T::ResponseBody as Body>::Error: Into<StdError> + std::marker::Send,
371    {
372        pub fn new(inner: T) -> Self {
373            let inner = tonic::client::Grpc::new(inner);
374            Self { inner }
375        }
376        pub fn with_origin(inner: T, origin: Uri) -> Self {
377            let inner = tonic::client::Grpc::with_origin(inner, origin);
378            Self { inner }
379        }
380        pub fn with_interceptor<F>(
381            inner: T,
382            interceptor: F,
383        ) -> ControllerServiceClient<InterceptedService<T, F>>
384        where
385            F: tonic::service::Interceptor,
386            T::ResponseBody: Default,
387            T: tonic::codegen::Service<
388                http::Request<tonic::body::Body>,
389                Response = http::Response<
390                    <T as tonic::client::GrpcService<tonic::body::Body>>::ResponseBody,
391                >,
392            >,
393            <T as tonic::codegen::Service<
394                http::Request<tonic::body::Body>,
395            >>::Error: Into<StdError> + std::marker::Send + std::marker::Sync,
396        {
397            ControllerServiceClient::new(InterceptedService::new(inner, interceptor))
398        }
399        /// Compress requests with the given encoding.
400        ///
401        /// This requires the server to support it otherwise it might respond with an
402        /// error.
403        #[must_use]
404        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
405            self.inner = self.inner.send_compressed(encoding);
406            self
407        }
408        /// Enable decompressing responses.
409        #[must_use]
410        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
411            self.inner = self.inner.accept_compressed(encoding);
412            self
413        }
414        /// Limits the maximum size of a decoded message.
415        ///
416        /// Default: `4MB`
417        #[must_use]
418        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
419            self.inner = self.inner.max_decoding_message_size(limit);
420            self
421        }
422        /// Limits the maximum size of an encoded message.
423        ///
424        /// Default: `usize::MAX`
425        #[must_use]
426        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
427            self.inner = self.inner.max_encoding_message_size(limit);
428            self
429        }
430        pub async fn open_control_channel(
431            &mut self,
432            request: impl tonic::IntoStreamingRequest<Message = super::ControlMessage>,
433        ) -> std::result::Result<
434            tonic::Response<tonic::codec::Streaming<super::ControlMessage>>,
435            tonic::Status,
436        > {
437            self.inner
438                .ready()
439                .await
440                .map_err(|e| {
441                    tonic::Status::unknown(
442                        format!("Service was not ready: {}", e.into()),
443                    )
444                })?;
445            let codec = tonic_prost::ProstCodec::default();
446            let path = http::uri::PathAndQuery::from_static(
447                "/controller.proto.v1.ControllerService/OpenControlChannel",
448            );
449            let mut req = request.into_streaming_request();
450            req.extensions_mut()
451                .insert(
452                    GrpcMethod::new(
453                        "controller.proto.v1.ControllerService",
454                        "OpenControlChannel",
455                    ),
456                );
457            self.inner.streaming(req, path, codec).await
458        }
459    }
460}
461/// Generated server implementations.
462pub mod controller_service_server {
463    #![allow(
464        unused_variables,
465        dead_code,
466        missing_docs,
467        clippy::wildcard_imports,
468        clippy::let_unit_value,
469    )]
470    use tonic::codegen::*;
471    /// Generated trait containing gRPC methods that should be implemented for use with ControllerServiceServer.
472    #[async_trait]
473    pub trait ControllerService: std::marker::Send + std::marker::Sync + 'static {
474        /// Server streaming response type for the OpenControlChannel method.
475        type OpenControlChannelStream: tonic::codegen::tokio_stream::Stream<
476                Item = std::result::Result<super::ControlMessage, tonic::Status>,
477            >
478            + std::marker::Send
479            + 'static;
480        async fn open_control_channel(
481            &self,
482            request: tonic::Request<tonic::Streaming<super::ControlMessage>>,
483        ) -> std::result::Result<
484            tonic::Response<Self::OpenControlChannelStream>,
485            tonic::Status,
486        >;
487    }
488    #[derive(Debug)]
489    pub struct ControllerServiceServer<T> {
490        inner: Arc<T>,
491        accept_compression_encodings: EnabledCompressionEncodings,
492        send_compression_encodings: EnabledCompressionEncodings,
493        max_decoding_message_size: Option<usize>,
494        max_encoding_message_size: Option<usize>,
495    }
496    impl<T> ControllerServiceServer<T> {
497        pub fn new(inner: T) -> Self {
498            Self::from_arc(Arc::new(inner))
499        }
500        pub fn from_arc(inner: Arc<T>) -> Self {
501            Self {
502                inner,
503                accept_compression_encodings: Default::default(),
504                send_compression_encodings: Default::default(),
505                max_decoding_message_size: None,
506                max_encoding_message_size: None,
507            }
508        }
509        pub fn with_interceptor<F>(
510            inner: T,
511            interceptor: F,
512        ) -> InterceptedService<Self, F>
513        where
514            F: tonic::service::Interceptor,
515        {
516            InterceptedService::new(Self::new(inner), interceptor)
517        }
518        /// Enable decompressing requests with the given encoding.
519        #[must_use]
520        pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self {
521            self.accept_compression_encodings.enable(encoding);
522            self
523        }
524        /// Compress responses with the given encoding, if the client supports it.
525        #[must_use]
526        pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self {
527            self.send_compression_encodings.enable(encoding);
528            self
529        }
530        /// Limits the maximum size of a decoded message.
531        ///
532        /// Default: `4MB`
533        #[must_use]
534        pub fn max_decoding_message_size(mut self, limit: usize) -> Self {
535            self.max_decoding_message_size = Some(limit);
536            self
537        }
538        /// Limits the maximum size of an encoded message.
539        ///
540        /// Default: `usize::MAX`
541        #[must_use]
542        pub fn max_encoding_message_size(mut self, limit: usize) -> Self {
543            self.max_encoding_message_size = Some(limit);
544            self
545        }
546    }
547    impl<T, B> tonic::codegen::Service<http::Request<B>> for ControllerServiceServer<T>
548    where
549        T: ControllerService,
550        B: Body + std::marker::Send + 'static,
551        B::Error: Into<StdError> + std::marker::Send + 'static,
552    {
553        type Response = http::Response<tonic::body::Body>;
554        type Error = std::convert::Infallible;
555        type Future = BoxFuture<Self::Response, Self::Error>;
556        fn poll_ready(
557            &mut self,
558            _cx: &mut Context<'_>,
559        ) -> Poll<std::result::Result<(), Self::Error>> {
560            Poll::Ready(Ok(()))
561        }
562        fn call(&mut self, req: http::Request<B>) -> Self::Future {
563            match req.uri().path() {
564                "/controller.proto.v1.ControllerService/OpenControlChannel" => {
565                    #[allow(non_camel_case_types)]
566                    struct OpenControlChannelSvc<T: ControllerService>(pub Arc<T>);
567                    impl<
568                        T: ControllerService,
569                    > tonic::server::StreamingService<super::ControlMessage>
570                    for OpenControlChannelSvc<T> {
571                        type Response = super::ControlMessage;
572                        type ResponseStream = T::OpenControlChannelStream;
573                        type Future = BoxFuture<
574                            tonic::Response<Self::ResponseStream>,
575                            tonic::Status,
576                        >;
577                        fn call(
578                            &mut self,
579                            request: tonic::Request<
580                                tonic::Streaming<super::ControlMessage>,
581                            >,
582                        ) -> Self::Future {
583                            let inner = Arc::clone(&self.0);
584                            let fut = async move {
585                                <T as ControllerService>::open_control_channel(
586                                        &inner,
587                                        request,
588                                    )
589                                    .await
590                            };
591                            Box::pin(fut)
592                        }
593                    }
594                    let accept_compression_encodings = self.accept_compression_encodings;
595                    let send_compression_encodings = self.send_compression_encodings;
596                    let max_decoding_message_size = self.max_decoding_message_size;
597                    let max_encoding_message_size = self.max_encoding_message_size;
598                    let inner = self.inner.clone();
599                    let fut = async move {
600                        let method = OpenControlChannelSvc(inner);
601                        let codec = tonic_prost::ProstCodec::default();
602                        let mut grpc = tonic::server::Grpc::new(codec)
603                            .apply_compression_config(
604                                accept_compression_encodings,
605                                send_compression_encodings,
606                            )
607                            .apply_max_message_size_config(
608                                max_decoding_message_size,
609                                max_encoding_message_size,
610                            );
611                        let res = grpc.streaming(method, req).await;
612                        Ok(res)
613                    };
614                    Box::pin(fut)
615                }
616                _ => {
617                    Box::pin(async move {
618                        let mut response = http::Response::new(
619                            tonic::body::Body::default(),
620                        );
621                        let headers = response.headers_mut();
622                        headers
623                            .insert(
624                                tonic::Status::GRPC_STATUS,
625                                (tonic::Code::Unimplemented as i32).into(),
626                            );
627                        headers
628                            .insert(
629                                http::header::CONTENT_TYPE,
630                                tonic::metadata::GRPC_CONTENT_TYPE,
631                            );
632                        Ok(response)
633                    })
634                }
635            }
636        }
637    }
638    impl<T> Clone for ControllerServiceServer<T> {
639        fn clone(&self) -> Self {
640            let inner = self.inner.clone();
641            Self {
642                inner,
643                accept_compression_encodings: self.accept_compression_encodings,
644                send_compression_encodings: self.send_compression_encodings,
645                max_decoding_message_size: self.max_decoding_message_size,
646                max_encoding_message_size: self.max_encoding_message_size,
647            }
648        }
649    }
650    /// Generated gRPC service name
651    pub const SERVICE_NAME: &str = "controller.proto.v1.ControllerService";
652    impl<T> tonic::server::NamedService for ControllerServiceServer<T> {
653        const NAME: &'static str = SERVICE_NAME;
654    }
655}