fidl_fuchsia_kms/
fidl_fuchsia_kms.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_fuchsia_kms_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct AsymmetricPrivateKeySignRequest {
16    pub data: fidl_fuchsia_mem::Buffer,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
20    for AsymmetricPrivateKeySignRequest
21{
22}
23
24#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
25pub struct KeyManagerGenerateAsymmetricKeyRequest {
26    pub key_name: String,
27    pub key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
28}
29
30impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
31    for KeyManagerGenerateAsymmetricKeyRequest
32{
33}
34
35#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
36pub struct KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest {
37    pub key_name: String,
38    pub key_algorithm: AsymmetricKeyAlgorithm,
39    pub key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
40}
41
42impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
43    for KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest
44{
45}
46
47#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
48pub struct KeyManagerGetAsymmetricPrivateKeyRequest {
49    pub key_name: String,
50    pub key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
51}
52
53impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
54    for KeyManagerGetAsymmetricPrivateKeyRequest
55{
56}
57
58#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
59pub struct KeyManagerImportAsymmetricPrivateKeyRequest {
60    pub data: Vec<u8>,
61    pub key_name: String,
62    pub key_algorithm: AsymmetricKeyAlgorithm,
63    pub key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
64}
65
66impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
67    for KeyManagerImportAsymmetricPrivateKeyRequest
68{
69}
70
71#[derive(Debug, PartialEq)]
72pub struct KeyManagerSealDataRequest {
73    pub plain_text: fidl_fuchsia_mem::Buffer,
74}
75
76impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for KeyManagerSealDataRequest {}
77
78#[derive(Debug, PartialEq)]
79pub struct KeyManagerUnsealDataRequest {
80    pub cipher_text: fidl_fuchsia_mem::Buffer,
81}
82
83impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
84    for KeyManagerUnsealDataRequest
85{
86}
87
88#[derive(Debug, PartialEq)]
89pub struct KeyManagerSealDataResponse {
90    pub cipher_text: fidl_fuchsia_mem::Buffer,
91}
92
93impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
94    for KeyManagerSealDataResponse
95{
96}
97
98#[derive(Debug, PartialEq)]
99pub struct KeyManagerUnsealDataResponse {
100    pub plain_text: fidl_fuchsia_mem::Buffer,
101}
102
103impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
104    for KeyManagerUnsealDataResponse
105{
106}
107
108#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
109pub struct AsymmetricPrivateKeyMarker;
110
111impl fidl::endpoints::ProtocolMarker for AsymmetricPrivateKeyMarker {
112    type Proxy = AsymmetricPrivateKeyProxy;
113    type RequestStream = AsymmetricPrivateKeyRequestStream;
114    #[cfg(target_os = "fuchsia")]
115    type SynchronousProxy = AsymmetricPrivateKeySynchronousProxy;
116
117    const DEBUG_NAME: &'static str = "(anonymous) AsymmetricPrivateKey";
118}
119pub type AsymmetricPrivateKeySignResult = Result<Signature, Error>;
120pub type AsymmetricPrivateKeyGetPublicKeyResult = Result<PublicKey, Error>;
121pub type AsymmetricPrivateKeyGetKeyAlgorithmResult = Result<AsymmetricKeyAlgorithm, Error>;
122
123pub trait AsymmetricPrivateKeyProxyInterface: Send + Sync {
124    type GetKeyOriginResponseFut: std::future::Future<Output = Result<KeyGetKeyOriginResult, fidl::Error>>
125        + Send;
126    fn r#get_key_origin(&self) -> Self::GetKeyOriginResponseFut;
127    type GetKeyProviderResponseFut: std::future::Future<Output = Result<KeyGetKeyProviderResult, fidl::Error>>
128        + Send;
129    fn r#get_key_provider(&self) -> Self::GetKeyProviderResponseFut;
130    type SignResponseFut: std::future::Future<Output = Result<AsymmetricPrivateKeySignResult, fidl::Error>>
131        + Send;
132    fn r#sign(&self, data: fidl_fuchsia_mem::Buffer) -> Self::SignResponseFut;
133    type GetPublicKeyResponseFut: std::future::Future<Output = Result<AsymmetricPrivateKeyGetPublicKeyResult, fidl::Error>>
134        + Send;
135    fn r#get_public_key(&self) -> Self::GetPublicKeyResponseFut;
136    type GetKeyAlgorithmResponseFut: std::future::Future<Output = Result<AsymmetricPrivateKeyGetKeyAlgorithmResult, fidl::Error>>
137        + Send;
138    fn r#get_key_algorithm(&self) -> Self::GetKeyAlgorithmResponseFut;
139}
140#[derive(Debug)]
141#[cfg(target_os = "fuchsia")]
142pub struct AsymmetricPrivateKeySynchronousProxy {
143    client: fidl::client::sync::Client,
144}
145
146#[cfg(target_os = "fuchsia")]
147impl fidl::endpoints::SynchronousProxy for AsymmetricPrivateKeySynchronousProxy {
148    type Proxy = AsymmetricPrivateKeyProxy;
149    type Protocol = AsymmetricPrivateKeyMarker;
150
151    fn from_channel(inner: fidl::Channel) -> Self {
152        Self::new(inner)
153    }
154
155    fn into_channel(self) -> fidl::Channel {
156        self.client.into_channel()
157    }
158
159    fn as_channel(&self) -> &fidl::Channel {
160        self.client.as_channel()
161    }
162}
163
164#[cfg(target_os = "fuchsia")]
165impl AsymmetricPrivateKeySynchronousProxy {
166    pub fn new(channel: fidl::Channel) -> Self {
167        let protocol_name =
168            <AsymmetricPrivateKeyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
169        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
170    }
171
172    pub fn into_channel(self) -> fidl::Channel {
173        self.client.into_channel()
174    }
175
176    /// Waits until an event arrives and returns it. It is safe for other
177    /// threads to make concurrent requests while waiting for an event.
178    pub fn wait_for_event(
179        &self,
180        deadline: zx::MonotonicInstant,
181    ) -> Result<AsymmetricPrivateKeyEvent, fidl::Error> {
182        AsymmetricPrivateKeyEvent::decode(self.client.wait_for_event(deadline)?)
183    }
184
185    /// Get the key origin (generated/imported).
186    pub fn r#get_key_origin(
187        &self,
188        ___deadline: zx::MonotonicInstant,
189    ) -> Result<KeyGetKeyOriginResult, fidl::Error> {
190        let _response = self.client.send_query::<
191            fidl::encoding::EmptyPayload,
192            fidl::encoding::ResultType<KeyGetKeyOriginResponse, Error>,
193        >(
194            (),
195            0x3e439554159e7b86,
196            fidl::encoding::DynamicFlags::empty(),
197            ___deadline,
198        )?;
199        Ok(_response.map(|x| x.key_origin))
200    }
201
202    /// Get the name for the crypto provider backing up the key.
203    pub fn r#get_key_provider(
204        &self,
205        ___deadline: zx::MonotonicInstant,
206    ) -> Result<KeyGetKeyProviderResult, fidl::Error> {
207        let _response = self.client.send_query::<
208            fidl::encoding::EmptyPayload,
209            fidl::encoding::ResultType<KeyGetKeyProviderResponse, Error>,
210        >(
211            (),
212            0x68e2cd7ec0532e0c,
213            fidl::encoding::DynamicFlags::empty(),
214            ___deadline,
215        )?;
216        Ok(_response.map(|x| x.key_provider))
217    }
218
219    /// Sign `data` using the current key. `data` needs to be less than `MAX_DATA_SIZE` bytes.
220    pub fn r#sign(
221        &self,
222        mut data: fidl_fuchsia_mem::Buffer,
223        ___deadline: zx::MonotonicInstant,
224    ) -> Result<AsymmetricPrivateKeySignResult, fidl::Error> {
225        let _response = self.client.send_query::<
226            AsymmetricPrivateKeySignRequest,
227            fidl::encoding::ResultType<AsymmetricPrivateKeySignResponse, Error>,
228        >(
229            (&mut data,),
230            0x524ba8b350c2542e,
231            fidl::encoding::DynamicFlags::empty(),
232            ___deadline,
233        )?;
234        Ok(_response.map(|x| x.signature))
235    }
236
237    /// Get the DER format public key for the current private key.
238    pub fn r#get_public_key(
239        &self,
240        ___deadline: zx::MonotonicInstant,
241    ) -> Result<AsymmetricPrivateKeyGetPublicKeyResult, fidl::Error> {
242        let _response =
243            self.client.send_query::<fidl::encoding::EmptyPayload, fidl::encoding::ResultType<
244                AsymmetricPrivateKeyGetPublicKeyResponse,
245                Error,
246            >>(
247                (),
248                0x5439aff00ed261f3,
249                fidl::encoding::DynamicFlags::empty(),
250                ___deadline,
251            )?;
252        Ok(_response.map(|x| x.public_key))
253    }
254
255    /// Get the key algorithm.
256    pub fn r#get_key_algorithm(
257        &self,
258        ___deadline: zx::MonotonicInstant,
259    ) -> Result<AsymmetricPrivateKeyGetKeyAlgorithmResult, fidl::Error> {
260        let _response =
261            self.client.send_query::<fidl::encoding::EmptyPayload, fidl::encoding::ResultType<
262                AsymmetricPrivateKeyGetKeyAlgorithmResponse,
263                Error,
264            >>(
265                (),
266                0xe0ce6b5b815b1ae,
267                fidl::encoding::DynamicFlags::empty(),
268                ___deadline,
269            )?;
270        Ok(_response.map(|x| x.key_algorithm))
271    }
272}
273
274#[derive(Debug, Clone)]
275pub struct AsymmetricPrivateKeyProxy {
276    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
277}
278
279impl fidl::endpoints::Proxy for AsymmetricPrivateKeyProxy {
280    type Protocol = AsymmetricPrivateKeyMarker;
281
282    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
283        Self::new(inner)
284    }
285
286    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
287        self.client.into_channel().map_err(|client| Self { client })
288    }
289
290    fn as_channel(&self) -> &::fidl::AsyncChannel {
291        self.client.as_channel()
292    }
293}
294
295impl AsymmetricPrivateKeyProxy {
296    /// Create a new Proxy for fuchsia.kms/AsymmetricPrivateKey.
297    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
298        let protocol_name =
299            <AsymmetricPrivateKeyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
300        Self { client: fidl::client::Client::new(channel, protocol_name) }
301    }
302
303    /// Get a Stream of events from the remote end of the protocol.
304    ///
305    /// # Panics
306    ///
307    /// Panics if the event stream was already taken.
308    pub fn take_event_stream(&self) -> AsymmetricPrivateKeyEventStream {
309        AsymmetricPrivateKeyEventStream { event_receiver: self.client.take_event_receiver() }
310    }
311
312    /// Get the key origin (generated/imported).
313    pub fn r#get_key_origin(
314        &self,
315    ) -> fidl::client::QueryResponseFut<
316        KeyGetKeyOriginResult,
317        fidl::encoding::DefaultFuchsiaResourceDialect,
318    > {
319        AsymmetricPrivateKeyProxyInterface::r#get_key_origin(self)
320    }
321
322    /// Get the name for the crypto provider backing up the key.
323    pub fn r#get_key_provider(
324        &self,
325    ) -> fidl::client::QueryResponseFut<
326        KeyGetKeyProviderResult,
327        fidl::encoding::DefaultFuchsiaResourceDialect,
328    > {
329        AsymmetricPrivateKeyProxyInterface::r#get_key_provider(self)
330    }
331
332    /// Sign `data` using the current key. `data` needs to be less than `MAX_DATA_SIZE` bytes.
333    pub fn r#sign(
334        &self,
335        mut data: fidl_fuchsia_mem::Buffer,
336    ) -> fidl::client::QueryResponseFut<
337        AsymmetricPrivateKeySignResult,
338        fidl::encoding::DefaultFuchsiaResourceDialect,
339    > {
340        AsymmetricPrivateKeyProxyInterface::r#sign(self, data)
341    }
342
343    /// Get the DER format public key for the current private key.
344    pub fn r#get_public_key(
345        &self,
346    ) -> fidl::client::QueryResponseFut<
347        AsymmetricPrivateKeyGetPublicKeyResult,
348        fidl::encoding::DefaultFuchsiaResourceDialect,
349    > {
350        AsymmetricPrivateKeyProxyInterface::r#get_public_key(self)
351    }
352
353    /// Get the key algorithm.
354    pub fn r#get_key_algorithm(
355        &self,
356    ) -> fidl::client::QueryResponseFut<
357        AsymmetricPrivateKeyGetKeyAlgorithmResult,
358        fidl::encoding::DefaultFuchsiaResourceDialect,
359    > {
360        AsymmetricPrivateKeyProxyInterface::r#get_key_algorithm(self)
361    }
362}
363
364impl AsymmetricPrivateKeyProxyInterface for AsymmetricPrivateKeyProxy {
365    type GetKeyOriginResponseFut = fidl::client::QueryResponseFut<
366        KeyGetKeyOriginResult,
367        fidl::encoding::DefaultFuchsiaResourceDialect,
368    >;
369    fn r#get_key_origin(&self) -> Self::GetKeyOriginResponseFut {
370        fn _decode(
371            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
372        ) -> Result<KeyGetKeyOriginResult, fidl::Error> {
373            let _response = fidl::client::decode_transaction_body::<
374                fidl::encoding::ResultType<KeyGetKeyOriginResponse, Error>,
375                fidl::encoding::DefaultFuchsiaResourceDialect,
376                0x3e439554159e7b86,
377            >(_buf?)?;
378            Ok(_response.map(|x| x.key_origin))
379        }
380        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, KeyGetKeyOriginResult>(
381            (),
382            0x3e439554159e7b86,
383            fidl::encoding::DynamicFlags::empty(),
384            _decode,
385        )
386    }
387
388    type GetKeyProviderResponseFut = fidl::client::QueryResponseFut<
389        KeyGetKeyProviderResult,
390        fidl::encoding::DefaultFuchsiaResourceDialect,
391    >;
392    fn r#get_key_provider(&self) -> Self::GetKeyProviderResponseFut {
393        fn _decode(
394            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
395        ) -> Result<KeyGetKeyProviderResult, fidl::Error> {
396            let _response = fidl::client::decode_transaction_body::<
397                fidl::encoding::ResultType<KeyGetKeyProviderResponse, Error>,
398                fidl::encoding::DefaultFuchsiaResourceDialect,
399                0x68e2cd7ec0532e0c,
400            >(_buf?)?;
401            Ok(_response.map(|x| x.key_provider))
402        }
403        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, KeyGetKeyProviderResult>(
404            (),
405            0x68e2cd7ec0532e0c,
406            fidl::encoding::DynamicFlags::empty(),
407            _decode,
408        )
409    }
410
411    type SignResponseFut = fidl::client::QueryResponseFut<
412        AsymmetricPrivateKeySignResult,
413        fidl::encoding::DefaultFuchsiaResourceDialect,
414    >;
415    fn r#sign(&self, mut data: fidl_fuchsia_mem::Buffer) -> Self::SignResponseFut {
416        fn _decode(
417            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
418        ) -> Result<AsymmetricPrivateKeySignResult, fidl::Error> {
419            let _response = fidl::client::decode_transaction_body::<
420                fidl::encoding::ResultType<AsymmetricPrivateKeySignResponse, Error>,
421                fidl::encoding::DefaultFuchsiaResourceDialect,
422                0x524ba8b350c2542e,
423            >(_buf?)?;
424            Ok(_response.map(|x| x.signature))
425        }
426        self.client.send_query_and_decode::<
427            AsymmetricPrivateKeySignRequest,
428            AsymmetricPrivateKeySignResult,
429        >(
430            (&mut data,),
431            0x524ba8b350c2542e,
432            fidl::encoding::DynamicFlags::empty(),
433            _decode,
434        )
435    }
436
437    type GetPublicKeyResponseFut = fidl::client::QueryResponseFut<
438        AsymmetricPrivateKeyGetPublicKeyResult,
439        fidl::encoding::DefaultFuchsiaResourceDialect,
440    >;
441    fn r#get_public_key(&self) -> Self::GetPublicKeyResponseFut {
442        fn _decode(
443            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
444        ) -> Result<AsymmetricPrivateKeyGetPublicKeyResult, fidl::Error> {
445            let _response = fidl::client::decode_transaction_body::<
446                fidl::encoding::ResultType<AsymmetricPrivateKeyGetPublicKeyResponse, Error>,
447                fidl::encoding::DefaultFuchsiaResourceDialect,
448                0x5439aff00ed261f3,
449            >(_buf?)?;
450            Ok(_response.map(|x| x.public_key))
451        }
452        self.client.send_query_and_decode::<
453            fidl::encoding::EmptyPayload,
454            AsymmetricPrivateKeyGetPublicKeyResult,
455        >(
456            (),
457            0x5439aff00ed261f3,
458            fidl::encoding::DynamicFlags::empty(),
459            _decode,
460        )
461    }
462
463    type GetKeyAlgorithmResponseFut = fidl::client::QueryResponseFut<
464        AsymmetricPrivateKeyGetKeyAlgorithmResult,
465        fidl::encoding::DefaultFuchsiaResourceDialect,
466    >;
467    fn r#get_key_algorithm(&self) -> Self::GetKeyAlgorithmResponseFut {
468        fn _decode(
469            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
470        ) -> Result<AsymmetricPrivateKeyGetKeyAlgorithmResult, fidl::Error> {
471            let _response = fidl::client::decode_transaction_body::<
472                fidl::encoding::ResultType<AsymmetricPrivateKeyGetKeyAlgorithmResponse, Error>,
473                fidl::encoding::DefaultFuchsiaResourceDialect,
474                0xe0ce6b5b815b1ae,
475            >(_buf?)?;
476            Ok(_response.map(|x| x.key_algorithm))
477        }
478        self.client.send_query_and_decode::<
479            fidl::encoding::EmptyPayload,
480            AsymmetricPrivateKeyGetKeyAlgorithmResult,
481        >(
482            (),
483            0xe0ce6b5b815b1ae,
484            fidl::encoding::DynamicFlags::empty(),
485            _decode,
486        )
487    }
488}
489
490pub struct AsymmetricPrivateKeyEventStream {
491    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
492}
493
494impl std::marker::Unpin for AsymmetricPrivateKeyEventStream {}
495
496impl futures::stream::FusedStream for AsymmetricPrivateKeyEventStream {
497    fn is_terminated(&self) -> bool {
498        self.event_receiver.is_terminated()
499    }
500}
501
502impl futures::Stream for AsymmetricPrivateKeyEventStream {
503    type Item = Result<AsymmetricPrivateKeyEvent, fidl::Error>;
504
505    fn poll_next(
506        mut self: std::pin::Pin<&mut Self>,
507        cx: &mut std::task::Context<'_>,
508    ) -> std::task::Poll<Option<Self::Item>> {
509        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
510            &mut self.event_receiver,
511            cx
512        )?) {
513            Some(buf) => std::task::Poll::Ready(Some(AsymmetricPrivateKeyEvent::decode(buf))),
514            None => std::task::Poll::Ready(None),
515        }
516    }
517}
518
519#[derive(Debug)]
520pub enum AsymmetricPrivateKeyEvent {}
521
522impl AsymmetricPrivateKeyEvent {
523    /// Decodes a message buffer as a [`AsymmetricPrivateKeyEvent`].
524    fn decode(
525        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
526    ) -> Result<AsymmetricPrivateKeyEvent, fidl::Error> {
527        let (bytes, _handles) = buf.split_mut();
528        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
529        debug_assert_eq!(tx_header.tx_id, 0);
530        match tx_header.ordinal {
531            _ => Err(fidl::Error::UnknownOrdinal {
532                ordinal: tx_header.ordinal,
533                protocol_name:
534                    <AsymmetricPrivateKeyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
535            }),
536        }
537    }
538}
539
540/// A Stream of incoming requests for fuchsia.kms/AsymmetricPrivateKey.
541pub struct AsymmetricPrivateKeyRequestStream {
542    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
543    is_terminated: bool,
544}
545
546impl std::marker::Unpin for AsymmetricPrivateKeyRequestStream {}
547
548impl futures::stream::FusedStream for AsymmetricPrivateKeyRequestStream {
549    fn is_terminated(&self) -> bool {
550        self.is_terminated
551    }
552}
553
554impl fidl::endpoints::RequestStream for AsymmetricPrivateKeyRequestStream {
555    type Protocol = AsymmetricPrivateKeyMarker;
556    type ControlHandle = AsymmetricPrivateKeyControlHandle;
557
558    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
559        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
560    }
561
562    fn control_handle(&self) -> Self::ControlHandle {
563        AsymmetricPrivateKeyControlHandle { inner: self.inner.clone() }
564    }
565
566    fn into_inner(
567        self,
568    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
569    {
570        (self.inner, self.is_terminated)
571    }
572
573    fn from_inner(
574        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
575        is_terminated: bool,
576    ) -> Self {
577        Self { inner, is_terminated }
578    }
579}
580
581impl futures::Stream for AsymmetricPrivateKeyRequestStream {
582    type Item = Result<AsymmetricPrivateKeyRequest, fidl::Error>;
583
584    fn poll_next(
585        mut self: std::pin::Pin<&mut Self>,
586        cx: &mut std::task::Context<'_>,
587    ) -> std::task::Poll<Option<Self::Item>> {
588        let this = &mut *self;
589        if this.inner.check_shutdown(cx) {
590            this.is_terminated = true;
591            return std::task::Poll::Ready(None);
592        }
593        if this.is_terminated {
594            panic!("polled AsymmetricPrivateKeyRequestStream after completion");
595        }
596        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
597            |bytes, handles| {
598                match this.inner.channel().read_etc(cx, bytes, handles) {
599                    std::task::Poll::Ready(Ok(())) => {}
600                    std::task::Poll::Pending => return std::task::Poll::Pending,
601                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
602                        this.is_terminated = true;
603                        return std::task::Poll::Ready(None);
604                    }
605                    std::task::Poll::Ready(Err(e)) => {
606                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
607                            e.into(),
608                        ))))
609                    }
610                }
611
612                // A message has been received from the channel
613                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
614
615                std::task::Poll::Ready(Some(match header.ordinal {
616                0x3e439554159e7b86 => {
617                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
618                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
619                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
620                    let control_handle = AsymmetricPrivateKeyControlHandle {
621                        inner: this.inner.clone(),
622                    };
623                    Ok(AsymmetricPrivateKeyRequest::GetKeyOrigin {
624                        responder: AsymmetricPrivateKeyGetKeyOriginResponder {
625                            control_handle: std::mem::ManuallyDrop::new(control_handle),
626                            tx_id: header.tx_id,
627                        },
628                    })
629                }
630                0x68e2cd7ec0532e0c => {
631                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
632                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
633                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
634                    let control_handle = AsymmetricPrivateKeyControlHandle {
635                        inner: this.inner.clone(),
636                    };
637                    Ok(AsymmetricPrivateKeyRequest::GetKeyProvider {
638                        responder: AsymmetricPrivateKeyGetKeyProviderResponder {
639                            control_handle: std::mem::ManuallyDrop::new(control_handle),
640                            tx_id: header.tx_id,
641                        },
642                    })
643                }
644                0x524ba8b350c2542e => {
645                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
646                    let mut req = fidl::new_empty!(AsymmetricPrivateKeySignRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
647                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<AsymmetricPrivateKeySignRequest>(&header, _body_bytes, handles, &mut req)?;
648                    let control_handle = AsymmetricPrivateKeyControlHandle {
649                        inner: this.inner.clone(),
650                    };
651                    Ok(AsymmetricPrivateKeyRequest::Sign {data: req.data,
652
653                        responder: AsymmetricPrivateKeySignResponder {
654                            control_handle: std::mem::ManuallyDrop::new(control_handle),
655                            tx_id: header.tx_id,
656                        },
657                    })
658                }
659                0x5439aff00ed261f3 => {
660                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
661                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
662                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
663                    let control_handle = AsymmetricPrivateKeyControlHandle {
664                        inner: this.inner.clone(),
665                    };
666                    Ok(AsymmetricPrivateKeyRequest::GetPublicKey {
667                        responder: AsymmetricPrivateKeyGetPublicKeyResponder {
668                            control_handle: std::mem::ManuallyDrop::new(control_handle),
669                            tx_id: header.tx_id,
670                        },
671                    })
672                }
673                0xe0ce6b5b815b1ae => {
674                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
675                    let mut req = fidl::new_empty!(fidl::encoding::EmptyPayload, fidl::encoding::DefaultFuchsiaResourceDialect);
676                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
677                    let control_handle = AsymmetricPrivateKeyControlHandle {
678                        inner: this.inner.clone(),
679                    };
680                    Ok(AsymmetricPrivateKeyRequest::GetKeyAlgorithm {
681                        responder: AsymmetricPrivateKeyGetKeyAlgorithmResponder {
682                            control_handle: std::mem::ManuallyDrop::new(control_handle),
683                            tx_id: header.tx_id,
684                        },
685                    })
686                }
687                _ => Err(fidl::Error::UnknownOrdinal {
688                    ordinal: header.ordinal,
689                    protocol_name: <AsymmetricPrivateKeyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
690                }),
691            }))
692            },
693        )
694    }
695}
696
697#[derive(Debug)]
698pub enum AsymmetricPrivateKeyRequest {
699    /// Get the key origin (generated/imported).
700    GetKeyOrigin { responder: AsymmetricPrivateKeyGetKeyOriginResponder },
701    /// Get the name for the crypto provider backing up the key.
702    GetKeyProvider { responder: AsymmetricPrivateKeyGetKeyProviderResponder },
703    /// Sign `data` using the current key. `data` needs to be less than `MAX_DATA_SIZE` bytes.
704    Sign { data: fidl_fuchsia_mem::Buffer, responder: AsymmetricPrivateKeySignResponder },
705    /// Get the DER format public key for the current private key.
706    GetPublicKey { responder: AsymmetricPrivateKeyGetPublicKeyResponder },
707    /// Get the key algorithm.
708    GetKeyAlgorithm { responder: AsymmetricPrivateKeyGetKeyAlgorithmResponder },
709}
710
711impl AsymmetricPrivateKeyRequest {
712    #[allow(irrefutable_let_patterns)]
713    pub fn into_get_key_origin(self) -> Option<(AsymmetricPrivateKeyGetKeyOriginResponder)> {
714        if let AsymmetricPrivateKeyRequest::GetKeyOrigin { responder } = self {
715            Some((responder))
716        } else {
717            None
718        }
719    }
720
721    #[allow(irrefutable_let_patterns)]
722    pub fn into_get_key_provider(self) -> Option<(AsymmetricPrivateKeyGetKeyProviderResponder)> {
723        if let AsymmetricPrivateKeyRequest::GetKeyProvider { responder } = self {
724            Some((responder))
725        } else {
726            None
727        }
728    }
729
730    #[allow(irrefutable_let_patterns)]
731    pub fn into_sign(
732        self,
733    ) -> Option<(fidl_fuchsia_mem::Buffer, AsymmetricPrivateKeySignResponder)> {
734        if let AsymmetricPrivateKeyRequest::Sign { data, responder } = self {
735            Some((data, responder))
736        } else {
737            None
738        }
739    }
740
741    #[allow(irrefutable_let_patterns)]
742    pub fn into_get_public_key(self) -> Option<(AsymmetricPrivateKeyGetPublicKeyResponder)> {
743        if let AsymmetricPrivateKeyRequest::GetPublicKey { responder } = self {
744            Some((responder))
745        } else {
746            None
747        }
748    }
749
750    #[allow(irrefutable_let_patterns)]
751    pub fn into_get_key_algorithm(self) -> Option<(AsymmetricPrivateKeyGetKeyAlgorithmResponder)> {
752        if let AsymmetricPrivateKeyRequest::GetKeyAlgorithm { responder } = self {
753            Some((responder))
754        } else {
755            None
756        }
757    }
758
759    /// Name of the method defined in FIDL
760    pub fn method_name(&self) -> &'static str {
761        match *self {
762            AsymmetricPrivateKeyRequest::GetKeyOrigin { .. } => "get_key_origin",
763            AsymmetricPrivateKeyRequest::GetKeyProvider { .. } => "get_key_provider",
764            AsymmetricPrivateKeyRequest::Sign { .. } => "sign",
765            AsymmetricPrivateKeyRequest::GetPublicKey { .. } => "get_public_key",
766            AsymmetricPrivateKeyRequest::GetKeyAlgorithm { .. } => "get_key_algorithm",
767        }
768    }
769}
770
771#[derive(Debug, Clone)]
772pub struct AsymmetricPrivateKeyControlHandle {
773    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
774}
775
776impl fidl::endpoints::ControlHandle for AsymmetricPrivateKeyControlHandle {
777    fn shutdown(&self) {
778        self.inner.shutdown()
779    }
780    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
781        self.inner.shutdown_with_epitaph(status)
782    }
783
784    fn is_closed(&self) -> bool {
785        self.inner.channel().is_closed()
786    }
787    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
788        self.inner.channel().on_closed()
789    }
790
791    #[cfg(target_os = "fuchsia")]
792    fn signal_peer(
793        &self,
794        clear_mask: zx::Signals,
795        set_mask: zx::Signals,
796    ) -> Result<(), zx_status::Status> {
797        use fidl::Peered;
798        self.inner.channel().signal_peer(clear_mask, set_mask)
799    }
800}
801
802impl AsymmetricPrivateKeyControlHandle {}
803
804#[must_use = "FIDL methods require a response to be sent"]
805#[derive(Debug)]
806pub struct AsymmetricPrivateKeyGetKeyOriginResponder {
807    control_handle: std::mem::ManuallyDrop<AsymmetricPrivateKeyControlHandle>,
808    tx_id: u32,
809}
810
811/// Set the the channel to be shutdown (see [`AsymmetricPrivateKeyControlHandle::shutdown`])
812/// if the responder is dropped without sending a response, so that the client
813/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
814impl std::ops::Drop for AsymmetricPrivateKeyGetKeyOriginResponder {
815    fn drop(&mut self) {
816        self.control_handle.shutdown();
817        // Safety: drops once, never accessed again
818        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
819    }
820}
821
822impl fidl::endpoints::Responder for AsymmetricPrivateKeyGetKeyOriginResponder {
823    type ControlHandle = AsymmetricPrivateKeyControlHandle;
824
825    fn control_handle(&self) -> &AsymmetricPrivateKeyControlHandle {
826        &self.control_handle
827    }
828
829    fn drop_without_shutdown(mut self) {
830        // Safety: drops once, never accessed again due to mem::forget
831        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
832        // Prevent Drop from running (which would shut down the channel)
833        std::mem::forget(self);
834    }
835}
836
837impl AsymmetricPrivateKeyGetKeyOriginResponder {
838    /// Sends a response to the FIDL transaction.
839    ///
840    /// Sets the channel to shutdown if an error occurs.
841    pub fn send(self, mut result: Result<KeyOrigin, Error>) -> Result<(), fidl::Error> {
842        let _result = self.send_raw(result);
843        if _result.is_err() {
844            self.control_handle.shutdown();
845        }
846        self.drop_without_shutdown();
847        _result
848    }
849
850    /// Similar to "send" but does not shutdown the channel if an error occurs.
851    pub fn send_no_shutdown_on_err(
852        self,
853        mut result: Result<KeyOrigin, Error>,
854    ) -> Result<(), fidl::Error> {
855        let _result = self.send_raw(result);
856        self.drop_without_shutdown();
857        _result
858    }
859
860    fn send_raw(&self, mut result: Result<KeyOrigin, Error>) -> Result<(), fidl::Error> {
861        self.control_handle
862            .inner
863            .send::<fidl::encoding::ResultType<KeyGetKeyOriginResponse, Error>>(
864                result.map(|key_origin| (key_origin,)),
865                self.tx_id,
866                0x3e439554159e7b86,
867                fidl::encoding::DynamicFlags::empty(),
868            )
869    }
870}
871
872#[must_use = "FIDL methods require a response to be sent"]
873#[derive(Debug)]
874pub struct AsymmetricPrivateKeyGetKeyProviderResponder {
875    control_handle: std::mem::ManuallyDrop<AsymmetricPrivateKeyControlHandle>,
876    tx_id: u32,
877}
878
879/// Set the the channel to be shutdown (see [`AsymmetricPrivateKeyControlHandle::shutdown`])
880/// if the responder is dropped without sending a response, so that the client
881/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
882impl std::ops::Drop for AsymmetricPrivateKeyGetKeyProviderResponder {
883    fn drop(&mut self) {
884        self.control_handle.shutdown();
885        // Safety: drops once, never accessed again
886        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
887    }
888}
889
890impl fidl::endpoints::Responder for AsymmetricPrivateKeyGetKeyProviderResponder {
891    type ControlHandle = AsymmetricPrivateKeyControlHandle;
892
893    fn control_handle(&self) -> &AsymmetricPrivateKeyControlHandle {
894        &self.control_handle
895    }
896
897    fn drop_without_shutdown(mut self) {
898        // Safety: drops once, never accessed again due to mem::forget
899        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
900        // Prevent Drop from running (which would shut down the channel)
901        std::mem::forget(self);
902    }
903}
904
905impl AsymmetricPrivateKeyGetKeyProviderResponder {
906    /// Sends a response to the FIDL transaction.
907    ///
908    /// Sets the channel to shutdown if an error occurs.
909    pub fn send(self, mut result: Result<KeyProvider, Error>) -> Result<(), fidl::Error> {
910        let _result = self.send_raw(result);
911        if _result.is_err() {
912            self.control_handle.shutdown();
913        }
914        self.drop_without_shutdown();
915        _result
916    }
917
918    /// Similar to "send" but does not shutdown the channel if an error occurs.
919    pub fn send_no_shutdown_on_err(
920        self,
921        mut result: Result<KeyProvider, Error>,
922    ) -> Result<(), fidl::Error> {
923        let _result = self.send_raw(result);
924        self.drop_without_shutdown();
925        _result
926    }
927
928    fn send_raw(&self, mut result: Result<KeyProvider, Error>) -> Result<(), fidl::Error> {
929        self.control_handle
930            .inner
931            .send::<fidl::encoding::ResultType<KeyGetKeyProviderResponse, Error>>(
932                result.map(|key_provider| (key_provider,)),
933                self.tx_id,
934                0x68e2cd7ec0532e0c,
935                fidl::encoding::DynamicFlags::empty(),
936            )
937    }
938}
939
940#[must_use = "FIDL methods require a response to be sent"]
941#[derive(Debug)]
942pub struct AsymmetricPrivateKeySignResponder {
943    control_handle: std::mem::ManuallyDrop<AsymmetricPrivateKeyControlHandle>,
944    tx_id: u32,
945}
946
947/// Set the the channel to be shutdown (see [`AsymmetricPrivateKeyControlHandle::shutdown`])
948/// if the responder is dropped without sending a response, so that the client
949/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
950impl std::ops::Drop for AsymmetricPrivateKeySignResponder {
951    fn drop(&mut self) {
952        self.control_handle.shutdown();
953        // Safety: drops once, never accessed again
954        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
955    }
956}
957
958impl fidl::endpoints::Responder for AsymmetricPrivateKeySignResponder {
959    type ControlHandle = AsymmetricPrivateKeyControlHandle;
960
961    fn control_handle(&self) -> &AsymmetricPrivateKeyControlHandle {
962        &self.control_handle
963    }
964
965    fn drop_without_shutdown(mut self) {
966        // Safety: drops once, never accessed again due to mem::forget
967        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
968        // Prevent Drop from running (which would shut down the channel)
969        std::mem::forget(self);
970    }
971}
972
973impl AsymmetricPrivateKeySignResponder {
974    /// Sends a response to the FIDL transaction.
975    ///
976    /// Sets the channel to shutdown if an error occurs.
977    pub fn send(self, mut result: Result<&Signature, Error>) -> Result<(), fidl::Error> {
978        let _result = self.send_raw(result);
979        if _result.is_err() {
980            self.control_handle.shutdown();
981        }
982        self.drop_without_shutdown();
983        _result
984    }
985
986    /// Similar to "send" but does not shutdown the channel if an error occurs.
987    pub fn send_no_shutdown_on_err(
988        self,
989        mut result: Result<&Signature, Error>,
990    ) -> Result<(), fidl::Error> {
991        let _result = self.send_raw(result);
992        self.drop_without_shutdown();
993        _result
994    }
995
996    fn send_raw(&self, mut result: Result<&Signature, Error>) -> Result<(), fidl::Error> {
997        self.control_handle
998            .inner
999            .send::<fidl::encoding::ResultType<AsymmetricPrivateKeySignResponse, Error>>(
1000                result.map(|signature| (signature,)),
1001                self.tx_id,
1002                0x524ba8b350c2542e,
1003                fidl::encoding::DynamicFlags::empty(),
1004            )
1005    }
1006}
1007
1008#[must_use = "FIDL methods require a response to be sent"]
1009#[derive(Debug)]
1010pub struct AsymmetricPrivateKeyGetPublicKeyResponder {
1011    control_handle: std::mem::ManuallyDrop<AsymmetricPrivateKeyControlHandle>,
1012    tx_id: u32,
1013}
1014
1015/// Set the the channel to be shutdown (see [`AsymmetricPrivateKeyControlHandle::shutdown`])
1016/// if the responder is dropped without sending a response, so that the client
1017/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1018impl std::ops::Drop for AsymmetricPrivateKeyGetPublicKeyResponder {
1019    fn drop(&mut self) {
1020        self.control_handle.shutdown();
1021        // Safety: drops once, never accessed again
1022        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1023    }
1024}
1025
1026impl fidl::endpoints::Responder for AsymmetricPrivateKeyGetPublicKeyResponder {
1027    type ControlHandle = AsymmetricPrivateKeyControlHandle;
1028
1029    fn control_handle(&self) -> &AsymmetricPrivateKeyControlHandle {
1030        &self.control_handle
1031    }
1032
1033    fn drop_without_shutdown(mut self) {
1034        // Safety: drops once, never accessed again due to mem::forget
1035        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1036        // Prevent Drop from running (which would shut down the channel)
1037        std::mem::forget(self);
1038    }
1039}
1040
1041impl AsymmetricPrivateKeyGetPublicKeyResponder {
1042    /// Sends a response to the FIDL transaction.
1043    ///
1044    /// Sets the channel to shutdown if an error occurs.
1045    pub fn send(self, mut result: Result<&PublicKey, Error>) -> Result<(), fidl::Error> {
1046        let _result = self.send_raw(result);
1047        if _result.is_err() {
1048            self.control_handle.shutdown();
1049        }
1050        self.drop_without_shutdown();
1051        _result
1052    }
1053
1054    /// Similar to "send" but does not shutdown the channel if an error occurs.
1055    pub fn send_no_shutdown_on_err(
1056        self,
1057        mut result: Result<&PublicKey, Error>,
1058    ) -> Result<(), fidl::Error> {
1059        let _result = self.send_raw(result);
1060        self.drop_without_shutdown();
1061        _result
1062    }
1063
1064    fn send_raw(&self, mut result: Result<&PublicKey, Error>) -> Result<(), fidl::Error> {
1065        self.control_handle.inner.send::<fidl::encoding::ResultType<
1066            AsymmetricPrivateKeyGetPublicKeyResponse,
1067            Error,
1068        >>(
1069            result.map(|public_key| (public_key,)),
1070            self.tx_id,
1071            0x5439aff00ed261f3,
1072            fidl::encoding::DynamicFlags::empty(),
1073        )
1074    }
1075}
1076
1077#[must_use = "FIDL methods require a response to be sent"]
1078#[derive(Debug)]
1079pub struct AsymmetricPrivateKeyGetKeyAlgorithmResponder {
1080    control_handle: std::mem::ManuallyDrop<AsymmetricPrivateKeyControlHandle>,
1081    tx_id: u32,
1082}
1083
1084/// Set the the channel to be shutdown (see [`AsymmetricPrivateKeyControlHandle::shutdown`])
1085/// if the responder is dropped without sending a response, so that the client
1086/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1087impl std::ops::Drop for AsymmetricPrivateKeyGetKeyAlgorithmResponder {
1088    fn drop(&mut self) {
1089        self.control_handle.shutdown();
1090        // Safety: drops once, never accessed again
1091        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1092    }
1093}
1094
1095impl fidl::endpoints::Responder for AsymmetricPrivateKeyGetKeyAlgorithmResponder {
1096    type ControlHandle = AsymmetricPrivateKeyControlHandle;
1097
1098    fn control_handle(&self) -> &AsymmetricPrivateKeyControlHandle {
1099        &self.control_handle
1100    }
1101
1102    fn drop_without_shutdown(mut self) {
1103        // Safety: drops once, never accessed again due to mem::forget
1104        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1105        // Prevent Drop from running (which would shut down the channel)
1106        std::mem::forget(self);
1107    }
1108}
1109
1110impl AsymmetricPrivateKeyGetKeyAlgorithmResponder {
1111    /// Sends a response to the FIDL transaction.
1112    ///
1113    /// Sets the channel to shutdown if an error occurs.
1114    pub fn send(
1115        self,
1116        mut result: Result<AsymmetricKeyAlgorithm, Error>,
1117    ) -> Result<(), fidl::Error> {
1118        let _result = self.send_raw(result);
1119        if _result.is_err() {
1120            self.control_handle.shutdown();
1121        }
1122        self.drop_without_shutdown();
1123        _result
1124    }
1125
1126    /// Similar to "send" but does not shutdown the channel if an error occurs.
1127    pub fn send_no_shutdown_on_err(
1128        self,
1129        mut result: Result<AsymmetricKeyAlgorithm, Error>,
1130    ) -> Result<(), fidl::Error> {
1131        let _result = self.send_raw(result);
1132        self.drop_without_shutdown();
1133        _result
1134    }
1135
1136    fn send_raw(
1137        &self,
1138        mut result: Result<AsymmetricKeyAlgorithm, Error>,
1139    ) -> Result<(), fidl::Error> {
1140        self.control_handle.inner.send::<fidl::encoding::ResultType<
1141            AsymmetricPrivateKeyGetKeyAlgorithmResponse,
1142            Error,
1143        >>(
1144            result.map(|key_algorithm| (key_algorithm,)),
1145            self.tx_id,
1146            0xe0ce6b5b815b1ae,
1147            fidl::encoding::DynamicFlags::empty(),
1148        )
1149    }
1150}
1151
1152#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1153pub struct KeyMarker;
1154
1155impl fidl::endpoints::ProtocolMarker for KeyMarker {
1156    type Proxy = KeyProxy;
1157    type RequestStream = KeyRequestStream;
1158    #[cfg(target_os = "fuchsia")]
1159    type SynchronousProxy = KeySynchronousProxy;
1160
1161    const DEBUG_NAME: &'static str = "(anonymous) Key";
1162}
1163pub type KeyGetKeyOriginResult = Result<KeyOrigin, Error>;
1164pub type KeyGetKeyProviderResult = Result<KeyProvider, Error>;
1165
1166pub trait KeyProxyInterface: Send + Sync {
1167    type GetKeyOriginResponseFut: std::future::Future<Output = Result<KeyGetKeyOriginResult, fidl::Error>>
1168        + Send;
1169    fn r#get_key_origin(&self) -> Self::GetKeyOriginResponseFut;
1170    type GetKeyProviderResponseFut: std::future::Future<Output = Result<KeyGetKeyProviderResult, fidl::Error>>
1171        + Send;
1172    fn r#get_key_provider(&self) -> Self::GetKeyProviderResponseFut;
1173}
1174#[derive(Debug)]
1175#[cfg(target_os = "fuchsia")]
1176pub struct KeySynchronousProxy {
1177    client: fidl::client::sync::Client,
1178}
1179
1180#[cfg(target_os = "fuchsia")]
1181impl fidl::endpoints::SynchronousProxy for KeySynchronousProxy {
1182    type Proxy = KeyProxy;
1183    type Protocol = KeyMarker;
1184
1185    fn from_channel(inner: fidl::Channel) -> Self {
1186        Self::new(inner)
1187    }
1188
1189    fn into_channel(self) -> fidl::Channel {
1190        self.client.into_channel()
1191    }
1192
1193    fn as_channel(&self) -> &fidl::Channel {
1194        self.client.as_channel()
1195    }
1196}
1197
1198#[cfg(target_os = "fuchsia")]
1199impl KeySynchronousProxy {
1200    pub fn new(channel: fidl::Channel) -> Self {
1201        let protocol_name = <KeyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1202        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1203    }
1204
1205    pub fn into_channel(self) -> fidl::Channel {
1206        self.client.into_channel()
1207    }
1208
1209    /// Waits until an event arrives and returns it. It is safe for other
1210    /// threads to make concurrent requests while waiting for an event.
1211    pub fn wait_for_event(&self, deadline: zx::MonotonicInstant) -> Result<KeyEvent, fidl::Error> {
1212        KeyEvent::decode(self.client.wait_for_event(deadline)?)
1213    }
1214
1215    /// Get the key origin (generated/imported).
1216    pub fn r#get_key_origin(
1217        &self,
1218        ___deadline: zx::MonotonicInstant,
1219    ) -> Result<KeyGetKeyOriginResult, fidl::Error> {
1220        let _response = self.client.send_query::<
1221            fidl::encoding::EmptyPayload,
1222            fidl::encoding::ResultType<KeyGetKeyOriginResponse, Error>,
1223        >(
1224            (),
1225            0x3e439554159e7b86,
1226            fidl::encoding::DynamicFlags::empty(),
1227            ___deadline,
1228        )?;
1229        Ok(_response.map(|x| x.key_origin))
1230    }
1231
1232    /// Get the name for the crypto provider backing up the key.
1233    pub fn r#get_key_provider(
1234        &self,
1235        ___deadline: zx::MonotonicInstant,
1236    ) -> Result<KeyGetKeyProviderResult, fidl::Error> {
1237        let _response = self.client.send_query::<
1238            fidl::encoding::EmptyPayload,
1239            fidl::encoding::ResultType<KeyGetKeyProviderResponse, Error>,
1240        >(
1241            (),
1242            0x68e2cd7ec0532e0c,
1243            fidl::encoding::DynamicFlags::empty(),
1244            ___deadline,
1245        )?;
1246        Ok(_response.map(|x| x.key_provider))
1247    }
1248}
1249
1250#[derive(Debug, Clone)]
1251pub struct KeyProxy {
1252    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1253}
1254
1255impl fidl::endpoints::Proxy for KeyProxy {
1256    type Protocol = KeyMarker;
1257
1258    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1259        Self::new(inner)
1260    }
1261
1262    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1263        self.client.into_channel().map_err(|client| Self { client })
1264    }
1265
1266    fn as_channel(&self) -> &::fidl::AsyncChannel {
1267        self.client.as_channel()
1268    }
1269}
1270
1271impl KeyProxy {
1272    /// Create a new Proxy for fuchsia.kms/Key.
1273    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1274        let protocol_name = <KeyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1275        Self { client: fidl::client::Client::new(channel, protocol_name) }
1276    }
1277
1278    /// Get a Stream of events from the remote end of the protocol.
1279    ///
1280    /// # Panics
1281    ///
1282    /// Panics if the event stream was already taken.
1283    pub fn take_event_stream(&self) -> KeyEventStream {
1284        KeyEventStream { event_receiver: self.client.take_event_receiver() }
1285    }
1286
1287    /// Get the key origin (generated/imported).
1288    pub fn r#get_key_origin(
1289        &self,
1290    ) -> fidl::client::QueryResponseFut<
1291        KeyGetKeyOriginResult,
1292        fidl::encoding::DefaultFuchsiaResourceDialect,
1293    > {
1294        KeyProxyInterface::r#get_key_origin(self)
1295    }
1296
1297    /// Get the name for the crypto provider backing up the key.
1298    pub fn r#get_key_provider(
1299        &self,
1300    ) -> fidl::client::QueryResponseFut<
1301        KeyGetKeyProviderResult,
1302        fidl::encoding::DefaultFuchsiaResourceDialect,
1303    > {
1304        KeyProxyInterface::r#get_key_provider(self)
1305    }
1306}
1307
1308impl KeyProxyInterface for KeyProxy {
1309    type GetKeyOriginResponseFut = fidl::client::QueryResponseFut<
1310        KeyGetKeyOriginResult,
1311        fidl::encoding::DefaultFuchsiaResourceDialect,
1312    >;
1313    fn r#get_key_origin(&self) -> Self::GetKeyOriginResponseFut {
1314        fn _decode(
1315            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1316        ) -> Result<KeyGetKeyOriginResult, fidl::Error> {
1317            let _response = fidl::client::decode_transaction_body::<
1318                fidl::encoding::ResultType<KeyGetKeyOriginResponse, Error>,
1319                fidl::encoding::DefaultFuchsiaResourceDialect,
1320                0x3e439554159e7b86,
1321            >(_buf?)?;
1322            Ok(_response.map(|x| x.key_origin))
1323        }
1324        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, KeyGetKeyOriginResult>(
1325            (),
1326            0x3e439554159e7b86,
1327            fidl::encoding::DynamicFlags::empty(),
1328            _decode,
1329        )
1330    }
1331
1332    type GetKeyProviderResponseFut = fidl::client::QueryResponseFut<
1333        KeyGetKeyProviderResult,
1334        fidl::encoding::DefaultFuchsiaResourceDialect,
1335    >;
1336    fn r#get_key_provider(&self) -> Self::GetKeyProviderResponseFut {
1337        fn _decode(
1338            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1339        ) -> Result<KeyGetKeyProviderResult, fidl::Error> {
1340            let _response = fidl::client::decode_transaction_body::<
1341                fidl::encoding::ResultType<KeyGetKeyProviderResponse, Error>,
1342                fidl::encoding::DefaultFuchsiaResourceDialect,
1343                0x68e2cd7ec0532e0c,
1344            >(_buf?)?;
1345            Ok(_response.map(|x| x.key_provider))
1346        }
1347        self.client.send_query_and_decode::<fidl::encoding::EmptyPayload, KeyGetKeyProviderResult>(
1348            (),
1349            0x68e2cd7ec0532e0c,
1350            fidl::encoding::DynamicFlags::empty(),
1351            _decode,
1352        )
1353    }
1354}
1355
1356pub struct KeyEventStream {
1357    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1358}
1359
1360impl std::marker::Unpin for KeyEventStream {}
1361
1362impl futures::stream::FusedStream for KeyEventStream {
1363    fn is_terminated(&self) -> bool {
1364        self.event_receiver.is_terminated()
1365    }
1366}
1367
1368impl futures::Stream for KeyEventStream {
1369    type Item = Result<KeyEvent, fidl::Error>;
1370
1371    fn poll_next(
1372        mut self: std::pin::Pin<&mut Self>,
1373        cx: &mut std::task::Context<'_>,
1374    ) -> std::task::Poll<Option<Self::Item>> {
1375        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1376            &mut self.event_receiver,
1377            cx
1378        )?) {
1379            Some(buf) => std::task::Poll::Ready(Some(KeyEvent::decode(buf))),
1380            None => std::task::Poll::Ready(None),
1381        }
1382    }
1383}
1384
1385#[derive(Debug)]
1386pub enum KeyEvent {}
1387
1388impl KeyEvent {
1389    /// Decodes a message buffer as a [`KeyEvent`].
1390    fn decode(
1391        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1392    ) -> Result<KeyEvent, fidl::Error> {
1393        let (bytes, _handles) = buf.split_mut();
1394        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1395        debug_assert_eq!(tx_header.tx_id, 0);
1396        match tx_header.ordinal {
1397            _ => Err(fidl::Error::UnknownOrdinal {
1398                ordinal: tx_header.ordinal,
1399                protocol_name: <KeyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1400            }),
1401        }
1402    }
1403}
1404
1405/// A Stream of incoming requests for fuchsia.kms/Key.
1406pub struct KeyRequestStream {
1407    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1408    is_terminated: bool,
1409}
1410
1411impl std::marker::Unpin for KeyRequestStream {}
1412
1413impl futures::stream::FusedStream for KeyRequestStream {
1414    fn is_terminated(&self) -> bool {
1415        self.is_terminated
1416    }
1417}
1418
1419impl fidl::endpoints::RequestStream for KeyRequestStream {
1420    type Protocol = KeyMarker;
1421    type ControlHandle = KeyControlHandle;
1422
1423    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1424        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1425    }
1426
1427    fn control_handle(&self) -> Self::ControlHandle {
1428        KeyControlHandle { inner: self.inner.clone() }
1429    }
1430
1431    fn into_inner(
1432        self,
1433    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1434    {
1435        (self.inner, self.is_terminated)
1436    }
1437
1438    fn from_inner(
1439        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1440        is_terminated: bool,
1441    ) -> Self {
1442        Self { inner, is_terminated }
1443    }
1444}
1445
1446impl futures::Stream for KeyRequestStream {
1447    type Item = Result<KeyRequest, fidl::Error>;
1448
1449    fn poll_next(
1450        mut self: std::pin::Pin<&mut Self>,
1451        cx: &mut std::task::Context<'_>,
1452    ) -> std::task::Poll<Option<Self::Item>> {
1453        let this = &mut *self;
1454        if this.inner.check_shutdown(cx) {
1455            this.is_terminated = true;
1456            return std::task::Poll::Ready(None);
1457        }
1458        if this.is_terminated {
1459            panic!("polled KeyRequestStream after completion");
1460        }
1461        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1462            |bytes, handles| {
1463                match this.inner.channel().read_etc(cx, bytes, handles) {
1464                    std::task::Poll::Ready(Ok(())) => {}
1465                    std::task::Poll::Pending => return std::task::Poll::Pending,
1466                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1467                        this.is_terminated = true;
1468                        return std::task::Poll::Ready(None);
1469                    }
1470                    std::task::Poll::Ready(Err(e)) => {
1471                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1472                            e.into(),
1473                        ))))
1474                    }
1475                }
1476
1477                // A message has been received from the channel
1478                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1479
1480                std::task::Poll::Ready(Some(match header.ordinal {
1481                    0x3e439554159e7b86 => {
1482                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1483                        let mut req = fidl::new_empty!(
1484                            fidl::encoding::EmptyPayload,
1485                            fidl::encoding::DefaultFuchsiaResourceDialect
1486                        );
1487                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1488                        let control_handle = KeyControlHandle { inner: this.inner.clone() };
1489                        Ok(KeyRequest::GetKeyOrigin {
1490                            responder: KeyGetKeyOriginResponder {
1491                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1492                                tx_id: header.tx_id,
1493                            },
1494                        })
1495                    }
1496                    0x68e2cd7ec0532e0c => {
1497                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1498                        let mut req = fidl::new_empty!(
1499                            fidl::encoding::EmptyPayload,
1500                            fidl::encoding::DefaultFuchsiaResourceDialect
1501                        );
1502                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
1503                        let control_handle = KeyControlHandle { inner: this.inner.clone() };
1504                        Ok(KeyRequest::GetKeyProvider {
1505                            responder: KeyGetKeyProviderResponder {
1506                                control_handle: std::mem::ManuallyDrop::new(control_handle),
1507                                tx_id: header.tx_id,
1508                            },
1509                        })
1510                    }
1511                    _ => Err(fidl::Error::UnknownOrdinal {
1512                        ordinal: header.ordinal,
1513                        protocol_name: <KeyMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1514                    }),
1515                }))
1516            },
1517        )
1518    }
1519}
1520
1521#[derive(Debug)]
1522pub enum KeyRequest {
1523    /// Get the key origin (generated/imported).
1524    GetKeyOrigin { responder: KeyGetKeyOriginResponder },
1525    /// Get the name for the crypto provider backing up the key.
1526    GetKeyProvider { responder: KeyGetKeyProviderResponder },
1527}
1528
1529impl KeyRequest {
1530    #[allow(irrefutable_let_patterns)]
1531    pub fn into_get_key_origin(self) -> Option<(KeyGetKeyOriginResponder)> {
1532        if let KeyRequest::GetKeyOrigin { responder } = self {
1533            Some((responder))
1534        } else {
1535            None
1536        }
1537    }
1538
1539    #[allow(irrefutable_let_patterns)]
1540    pub fn into_get_key_provider(self) -> Option<(KeyGetKeyProviderResponder)> {
1541        if let KeyRequest::GetKeyProvider { responder } = self {
1542            Some((responder))
1543        } else {
1544            None
1545        }
1546    }
1547
1548    /// Name of the method defined in FIDL
1549    pub fn method_name(&self) -> &'static str {
1550        match *self {
1551            KeyRequest::GetKeyOrigin { .. } => "get_key_origin",
1552            KeyRequest::GetKeyProvider { .. } => "get_key_provider",
1553        }
1554    }
1555}
1556
1557#[derive(Debug, Clone)]
1558pub struct KeyControlHandle {
1559    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1560}
1561
1562impl fidl::endpoints::ControlHandle for KeyControlHandle {
1563    fn shutdown(&self) {
1564        self.inner.shutdown()
1565    }
1566    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1567        self.inner.shutdown_with_epitaph(status)
1568    }
1569
1570    fn is_closed(&self) -> bool {
1571        self.inner.channel().is_closed()
1572    }
1573    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1574        self.inner.channel().on_closed()
1575    }
1576
1577    #[cfg(target_os = "fuchsia")]
1578    fn signal_peer(
1579        &self,
1580        clear_mask: zx::Signals,
1581        set_mask: zx::Signals,
1582    ) -> Result<(), zx_status::Status> {
1583        use fidl::Peered;
1584        self.inner.channel().signal_peer(clear_mask, set_mask)
1585    }
1586}
1587
1588impl KeyControlHandle {}
1589
1590#[must_use = "FIDL methods require a response to be sent"]
1591#[derive(Debug)]
1592pub struct KeyGetKeyOriginResponder {
1593    control_handle: std::mem::ManuallyDrop<KeyControlHandle>,
1594    tx_id: u32,
1595}
1596
1597/// Set the the channel to be shutdown (see [`KeyControlHandle::shutdown`])
1598/// if the responder is dropped without sending a response, so that the client
1599/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1600impl std::ops::Drop for KeyGetKeyOriginResponder {
1601    fn drop(&mut self) {
1602        self.control_handle.shutdown();
1603        // Safety: drops once, never accessed again
1604        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1605    }
1606}
1607
1608impl fidl::endpoints::Responder for KeyGetKeyOriginResponder {
1609    type ControlHandle = KeyControlHandle;
1610
1611    fn control_handle(&self) -> &KeyControlHandle {
1612        &self.control_handle
1613    }
1614
1615    fn drop_without_shutdown(mut self) {
1616        // Safety: drops once, never accessed again due to mem::forget
1617        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1618        // Prevent Drop from running (which would shut down the channel)
1619        std::mem::forget(self);
1620    }
1621}
1622
1623impl KeyGetKeyOriginResponder {
1624    /// Sends a response to the FIDL transaction.
1625    ///
1626    /// Sets the channel to shutdown if an error occurs.
1627    pub fn send(self, mut result: Result<KeyOrigin, Error>) -> Result<(), fidl::Error> {
1628        let _result = self.send_raw(result);
1629        if _result.is_err() {
1630            self.control_handle.shutdown();
1631        }
1632        self.drop_without_shutdown();
1633        _result
1634    }
1635
1636    /// Similar to "send" but does not shutdown the channel if an error occurs.
1637    pub fn send_no_shutdown_on_err(
1638        self,
1639        mut result: Result<KeyOrigin, Error>,
1640    ) -> Result<(), fidl::Error> {
1641        let _result = self.send_raw(result);
1642        self.drop_without_shutdown();
1643        _result
1644    }
1645
1646    fn send_raw(&self, mut result: Result<KeyOrigin, Error>) -> Result<(), fidl::Error> {
1647        self.control_handle
1648            .inner
1649            .send::<fidl::encoding::ResultType<KeyGetKeyOriginResponse, Error>>(
1650                result.map(|key_origin| (key_origin,)),
1651                self.tx_id,
1652                0x3e439554159e7b86,
1653                fidl::encoding::DynamicFlags::empty(),
1654            )
1655    }
1656}
1657
1658#[must_use = "FIDL methods require a response to be sent"]
1659#[derive(Debug)]
1660pub struct KeyGetKeyProviderResponder {
1661    control_handle: std::mem::ManuallyDrop<KeyControlHandle>,
1662    tx_id: u32,
1663}
1664
1665/// Set the the channel to be shutdown (see [`KeyControlHandle::shutdown`])
1666/// if the responder is dropped without sending a response, so that the client
1667/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1668impl std::ops::Drop for KeyGetKeyProviderResponder {
1669    fn drop(&mut self) {
1670        self.control_handle.shutdown();
1671        // Safety: drops once, never accessed again
1672        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1673    }
1674}
1675
1676impl fidl::endpoints::Responder for KeyGetKeyProviderResponder {
1677    type ControlHandle = KeyControlHandle;
1678
1679    fn control_handle(&self) -> &KeyControlHandle {
1680        &self.control_handle
1681    }
1682
1683    fn drop_without_shutdown(mut self) {
1684        // Safety: drops once, never accessed again due to mem::forget
1685        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1686        // Prevent Drop from running (which would shut down the channel)
1687        std::mem::forget(self);
1688    }
1689}
1690
1691impl KeyGetKeyProviderResponder {
1692    /// Sends a response to the FIDL transaction.
1693    ///
1694    /// Sets the channel to shutdown if an error occurs.
1695    pub fn send(self, mut result: Result<KeyProvider, Error>) -> Result<(), fidl::Error> {
1696        let _result = self.send_raw(result);
1697        if _result.is_err() {
1698            self.control_handle.shutdown();
1699        }
1700        self.drop_without_shutdown();
1701        _result
1702    }
1703
1704    /// Similar to "send" but does not shutdown the channel if an error occurs.
1705    pub fn send_no_shutdown_on_err(
1706        self,
1707        mut result: Result<KeyProvider, Error>,
1708    ) -> Result<(), fidl::Error> {
1709        let _result = self.send_raw(result);
1710        self.drop_without_shutdown();
1711        _result
1712    }
1713
1714    fn send_raw(&self, mut result: Result<KeyProvider, Error>) -> Result<(), fidl::Error> {
1715        self.control_handle
1716            .inner
1717            .send::<fidl::encoding::ResultType<KeyGetKeyProviderResponse, Error>>(
1718                result.map(|key_provider| (key_provider,)),
1719                self.tx_id,
1720                0x68e2cd7ec0532e0c,
1721                fidl::encoding::DynamicFlags::empty(),
1722            )
1723    }
1724}
1725
1726#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1727pub struct KeyManagerMarker;
1728
1729impl fidl::endpoints::ProtocolMarker for KeyManagerMarker {
1730    type Proxy = KeyManagerProxy;
1731    type RequestStream = KeyManagerRequestStream;
1732    #[cfg(target_os = "fuchsia")]
1733    type SynchronousProxy = KeyManagerSynchronousProxy;
1734
1735    const DEBUG_NAME: &'static str = "fuchsia.kms.KeyManager";
1736}
1737impl fidl::endpoints::DiscoverableProtocolMarker for KeyManagerMarker {}
1738pub type KeyManagerSealDataResult = Result<fidl_fuchsia_mem::Buffer, Error>;
1739pub type KeyManagerUnsealDataResult = Result<fidl_fuchsia_mem::Buffer, Error>;
1740pub type KeyManagerGenerateAsymmetricKeyResult = Result<(), Error>;
1741pub type KeyManagerGenerateAsymmetricKeyWithAlgorithmResult = Result<(), Error>;
1742pub type KeyManagerImportAsymmetricPrivateKeyResult = Result<(), Error>;
1743pub type KeyManagerGetAsymmetricPrivateKeyResult = Result<(), Error>;
1744pub type KeyManagerDeleteKeyResult = Result<(), Error>;
1745
1746pub trait KeyManagerProxyInterface: Send + Sync {
1747    type SealDataResponseFut: std::future::Future<Output = Result<KeyManagerSealDataResult, fidl::Error>>
1748        + Send;
1749    fn r#seal_data(&self, plain_text: fidl_fuchsia_mem::Buffer) -> Self::SealDataResponseFut;
1750    type UnsealDataResponseFut: std::future::Future<Output = Result<KeyManagerUnsealDataResult, fidl::Error>>
1751        + Send;
1752    fn r#unseal_data(&self, cipher_text: fidl_fuchsia_mem::Buffer) -> Self::UnsealDataResponseFut;
1753    type GenerateAsymmetricKeyResponseFut: std::future::Future<Output = Result<KeyManagerGenerateAsymmetricKeyResult, fidl::Error>>
1754        + Send;
1755    fn r#generate_asymmetric_key(
1756        &self,
1757        key_name: &str,
1758        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1759    ) -> Self::GenerateAsymmetricKeyResponseFut;
1760    type GenerateAsymmetricKeyWithAlgorithmResponseFut: std::future::Future<
1761            Output = Result<KeyManagerGenerateAsymmetricKeyWithAlgorithmResult, fidl::Error>,
1762        > + Send;
1763    fn r#generate_asymmetric_key_with_algorithm(
1764        &self,
1765        key_name: &str,
1766        key_algorithm: AsymmetricKeyAlgorithm,
1767        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1768    ) -> Self::GenerateAsymmetricKeyWithAlgorithmResponseFut;
1769    type ImportAsymmetricPrivateKeyResponseFut: std::future::Future<
1770            Output = Result<KeyManagerImportAsymmetricPrivateKeyResult, fidl::Error>,
1771        > + Send;
1772    fn r#import_asymmetric_private_key(
1773        &self,
1774        data: &[u8],
1775        key_name: &str,
1776        key_algorithm: AsymmetricKeyAlgorithm,
1777        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1778    ) -> Self::ImportAsymmetricPrivateKeyResponseFut;
1779    type GetAsymmetricPrivateKeyResponseFut: std::future::Future<Output = Result<KeyManagerGetAsymmetricPrivateKeyResult, fidl::Error>>
1780        + Send;
1781    fn r#get_asymmetric_private_key(
1782        &self,
1783        key_name: &str,
1784        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1785    ) -> Self::GetAsymmetricPrivateKeyResponseFut;
1786    type DeleteKeyResponseFut: std::future::Future<Output = Result<KeyManagerDeleteKeyResult, fidl::Error>>
1787        + Send;
1788    fn r#delete_key(&self, key_name: &str) -> Self::DeleteKeyResponseFut;
1789}
1790#[derive(Debug)]
1791#[cfg(target_os = "fuchsia")]
1792pub struct KeyManagerSynchronousProxy {
1793    client: fidl::client::sync::Client,
1794}
1795
1796#[cfg(target_os = "fuchsia")]
1797impl fidl::endpoints::SynchronousProxy for KeyManagerSynchronousProxy {
1798    type Proxy = KeyManagerProxy;
1799    type Protocol = KeyManagerMarker;
1800
1801    fn from_channel(inner: fidl::Channel) -> Self {
1802        Self::new(inner)
1803    }
1804
1805    fn into_channel(self) -> fidl::Channel {
1806        self.client.into_channel()
1807    }
1808
1809    fn as_channel(&self) -> &fidl::Channel {
1810        self.client.as_channel()
1811    }
1812}
1813
1814#[cfg(target_os = "fuchsia")]
1815impl KeyManagerSynchronousProxy {
1816    pub fn new(channel: fidl::Channel) -> Self {
1817        let protocol_name = <KeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1818        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1819    }
1820
1821    pub fn into_channel(self) -> fidl::Channel {
1822        self.client.into_channel()
1823    }
1824
1825    /// Waits until an event arrives and returns it. It is safe for other
1826    /// threads to make concurrent requests while waiting for an event.
1827    pub fn wait_for_event(
1828        &self,
1829        deadline: zx::MonotonicInstant,
1830    ) -> Result<KeyManagerEvent, fidl::Error> {
1831        KeyManagerEvent::decode(self.client.wait_for_event(deadline)?)
1832    }
1833
1834    /// Seal data to an encrypted form.
1835    ///
1836    /// Seal data to an encrypted form. The sealed data can only be unsealed by the same KMS instance
1837    /// by using UnsealData. `plain_text` needs to be less than `MAX_DATA_SIZE` bytes.
1838    pub fn r#seal_data(
1839        &self,
1840        mut plain_text: fidl_fuchsia_mem::Buffer,
1841        ___deadline: zx::MonotonicInstant,
1842    ) -> Result<KeyManagerSealDataResult, fidl::Error> {
1843        let _response = self.client.send_query::<
1844            KeyManagerSealDataRequest,
1845            fidl::encoding::ResultType<KeyManagerSealDataResponse, Error>,
1846        >(
1847            (&mut plain_text,),
1848            0x3d2fcd85d11c96bb,
1849            fidl::encoding::DynamicFlags::empty(),
1850            ___deadline,
1851        )?;
1852        Ok(_response.map(|x| x.cipher_text))
1853    }
1854
1855    /// Unseal sealed data.
1856    ///
1857    /// Unseal data previously sealed by this KMS instance.
1858    pub fn r#unseal_data(
1859        &self,
1860        mut cipher_text: fidl_fuchsia_mem::Buffer,
1861        ___deadline: zx::MonotonicInstant,
1862    ) -> Result<KeyManagerUnsealDataResult, fidl::Error> {
1863        let _response = self.client.send_query::<
1864            KeyManagerUnsealDataRequest,
1865            fidl::encoding::ResultType<KeyManagerUnsealDataResponse, Error>,
1866        >(
1867            (&mut cipher_text,),
1868            0x72dafc3131c1bca6,
1869            fidl::encoding::DynamicFlags::empty(),
1870            ___deadline,
1871        )?;
1872        Ok(_response.map(|x| x.plain_text))
1873    }
1874
1875    /// Generate an asymmetric key.
1876    ///
1877    /// Generate an asymmetric key using `key_name` as the unique name. `key` is the generated
1878    /// asymmetric key interface request. If the `key_name` is not unique, you would get
1879    /// `KEY_ALREADY_EXISTS`. The generated key can be used to sign data. The algorithm used for
1880    /// generating asymmetric key is `ECDSA_SHA512_P521`.
1881    pub fn r#generate_asymmetric_key(
1882        &self,
1883        mut key_name: &str,
1884        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1885        ___deadline: zx::MonotonicInstant,
1886    ) -> Result<KeyManagerGenerateAsymmetricKeyResult, fidl::Error> {
1887        let _response = self.client.send_query::<
1888            KeyManagerGenerateAsymmetricKeyRequest,
1889            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1890        >(
1891            (key_name, key,),
1892            0x66f1aa7ff5eb183d,
1893            fidl::encoding::DynamicFlags::empty(),
1894            ___deadline,
1895        )?;
1896        Ok(_response.map(|x| x))
1897    }
1898
1899    /// Generate an asymmetric key with a specific algorithm.
1900    ///
1901    /// Generate an asymmetric key using `key_name` as the unique name and `key_algorithm` as
1902    /// algorithm. `key` is the generated asymmetric key interface request. If the `key_name` is not
1903    /// unique, you would get `KEY_ALREADY_EXISTS`.
1904    pub fn r#generate_asymmetric_key_with_algorithm(
1905        &self,
1906        mut key_name: &str,
1907        mut key_algorithm: AsymmetricKeyAlgorithm,
1908        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1909        ___deadline: zx::MonotonicInstant,
1910    ) -> Result<KeyManagerGenerateAsymmetricKeyWithAlgorithmResult, fidl::Error> {
1911        let _response = self.client.send_query::<
1912            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
1913            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1914        >(
1915            (key_name, key_algorithm, key,),
1916            0x2b9eac3ad0bc8a45,
1917            fidl::encoding::DynamicFlags::empty(),
1918            ___deadline,
1919        )?;
1920        Ok(_response.map(|x| x))
1921    }
1922
1923    /// Import an asymmetric private key with a specific algorithm.
1924    ///
1925    /// Import an asymmetric private key using `key_name` as the unique name, `key_algorithm` as
1926    /// algorithm and `data` as key data. `key` is imported asymmetric key interface request. Key
1927    /// data should be in asn.1 encoded DER format. If the `key_name` is not unique, you would get
1928    /// `KEY_ALREADY_EXISTS`.
1929    pub fn r#import_asymmetric_private_key(
1930        &self,
1931        mut data: &[u8],
1932        mut key_name: &str,
1933        mut key_algorithm: AsymmetricKeyAlgorithm,
1934        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1935        ___deadline: zx::MonotonicInstant,
1936    ) -> Result<KeyManagerImportAsymmetricPrivateKeyResult, fidl::Error> {
1937        let _response = self.client.send_query::<
1938            KeyManagerImportAsymmetricPrivateKeyRequest,
1939            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1940        >(
1941            (data, key_name, key_algorithm, key,),
1942            0x14c78f1ebb4eee71,
1943            fidl::encoding::DynamicFlags::empty(),
1944            ___deadline,
1945        )?;
1946        Ok(_response.map(|x| x))
1947    }
1948
1949    /// Get an asymmetric private key handle.
1950    ///
1951    /// Get an asymmetric private key handle using the `key_name`. If such key is not found, would
1952    /// return `KEY_NOT_FOUND`.
1953    pub fn r#get_asymmetric_private_key(
1954        &self,
1955        mut key_name: &str,
1956        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1957        ___deadline: zx::MonotonicInstant,
1958    ) -> Result<KeyManagerGetAsymmetricPrivateKeyResult, fidl::Error> {
1959        let _response = self.client.send_query::<
1960            KeyManagerGetAsymmetricPrivateKeyRequest,
1961            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1962        >(
1963            (key_name, key,),
1964            0x3a257fc6b6ccc5cd,
1965            fidl::encoding::DynamicFlags::empty(),
1966            ___deadline,
1967        )?;
1968        Ok(_response.map(|x| x))
1969    }
1970
1971    /// Delete a key.
1972    ///
1973    /// Delete a key for `key_name`.  For all the current handle to the deleted key, they would
1974    /// become invalid and all following requests on those handles would return `KEY_NOT_FOUND`, user
1975    /// should close the invalid handles once get `KEY_NOT_FOUND` error.
1976    pub fn r#delete_key(
1977        &self,
1978        mut key_name: &str,
1979        ___deadline: zx::MonotonicInstant,
1980    ) -> Result<KeyManagerDeleteKeyResult, fidl::Error> {
1981        let _response = self.client.send_query::<
1982            KeyManagerDeleteKeyRequest,
1983            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1984        >(
1985            (key_name,),
1986            0x55521e617d023aad,
1987            fidl::encoding::DynamicFlags::empty(),
1988            ___deadline,
1989        )?;
1990        Ok(_response.map(|x| x))
1991    }
1992}
1993
1994#[derive(Debug, Clone)]
1995pub struct KeyManagerProxy {
1996    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1997}
1998
1999impl fidl::endpoints::Proxy for KeyManagerProxy {
2000    type Protocol = KeyManagerMarker;
2001
2002    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2003        Self::new(inner)
2004    }
2005
2006    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2007        self.client.into_channel().map_err(|client| Self { client })
2008    }
2009
2010    fn as_channel(&self) -> &::fidl::AsyncChannel {
2011        self.client.as_channel()
2012    }
2013}
2014
2015impl KeyManagerProxy {
2016    /// Create a new Proxy for fuchsia.kms/KeyManager.
2017    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2018        let protocol_name = <KeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2019        Self { client: fidl::client::Client::new(channel, protocol_name) }
2020    }
2021
2022    /// Get a Stream of events from the remote end of the protocol.
2023    ///
2024    /// # Panics
2025    ///
2026    /// Panics if the event stream was already taken.
2027    pub fn take_event_stream(&self) -> KeyManagerEventStream {
2028        KeyManagerEventStream { event_receiver: self.client.take_event_receiver() }
2029    }
2030
2031    /// Seal data to an encrypted form.
2032    ///
2033    /// Seal data to an encrypted form. The sealed data can only be unsealed by the same KMS instance
2034    /// by using UnsealData. `plain_text` needs to be less than `MAX_DATA_SIZE` bytes.
2035    pub fn r#seal_data(
2036        &self,
2037        mut plain_text: fidl_fuchsia_mem::Buffer,
2038    ) -> fidl::client::QueryResponseFut<
2039        KeyManagerSealDataResult,
2040        fidl::encoding::DefaultFuchsiaResourceDialect,
2041    > {
2042        KeyManagerProxyInterface::r#seal_data(self, plain_text)
2043    }
2044
2045    /// Unseal sealed data.
2046    ///
2047    /// Unseal data previously sealed by this KMS instance.
2048    pub fn r#unseal_data(
2049        &self,
2050        mut cipher_text: fidl_fuchsia_mem::Buffer,
2051    ) -> fidl::client::QueryResponseFut<
2052        KeyManagerUnsealDataResult,
2053        fidl::encoding::DefaultFuchsiaResourceDialect,
2054    > {
2055        KeyManagerProxyInterface::r#unseal_data(self, cipher_text)
2056    }
2057
2058    /// Generate an asymmetric key.
2059    ///
2060    /// Generate an asymmetric key using `key_name` as the unique name. `key` is the generated
2061    /// asymmetric key interface request. If the `key_name` is not unique, you would get
2062    /// `KEY_ALREADY_EXISTS`. The generated key can be used to sign data. The algorithm used for
2063    /// generating asymmetric key is `ECDSA_SHA512_P521`.
2064    pub fn r#generate_asymmetric_key(
2065        &self,
2066        mut key_name: &str,
2067        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2068    ) -> fidl::client::QueryResponseFut<
2069        KeyManagerGenerateAsymmetricKeyResult,
2070        fidl::encoding::DefaultFuchsiaResourceDialect,
2071    > {
2072        KeyManagerProxyInterface::r#generate_asymmetric_key(self, key_name, key)
2073    }
2074
2075    /// Generate an asymmetric key with a specific algorithm.
2076    ///
2077    /// Generate an asymmetric key using `key_name` as the unique name and `key_algorithm` as
2078    /// algorithm. `key` is the generated asymmetric key interface request. If the `key_name` is not
2079    /// unique, you would get `KEY_ALREADY_EXISTS`.
2080    pub fn r#generate_asymmetric_key_with_algorithm(
2081        &self,
2082        mut key_name: &str,
2083        mut key_algorithm: AsymmetricKeyAlgorithm,
2084        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2085    ) -> fidl::client::QueryResponseFut<
2086        KeyManagerGenerateAsymmetricKeyWithAlgorithmResult,
2087        fidl::encoding::DefaultFuchsiaResourceDialect,
2088    > {
2089        KeyManagerProxyInterface::r#generate_asymmetric_key_with_algorithm(
2090            self,
2091            key_name,
2092            key_algorithm,
2093            key,
2094        )
2095    }
2096
2097    /// Import an asymmetric private key with a specific algorithm.
2098    ///
2099    /// Import an asymmetric private key using `key_name` as the unique name, `key_algorithm` as
2100    /// algorithm and `data` as key data. `key` is imported asymmetric key interface request. Key
2101    /// data should be in asn.1 encoded DER format. If the `key_name` is not unique, you would get
2102    /// `KEY_ALREADY_EXISTS`.
2103    pub fn r#import_asymmetric_private_key(
2104        &self,
2105        mut data: &[u8],
2106        mut key_name: &str,
2107        mut key_algorithm: AsymmetricKeyAlgorithm,
2108        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2109    ) -> fidl::client::QueryResponseFut<
2110        KeyManagerImportAsymmetricPrivateKeyResult,
2111        fidl::encoding::DefaultFuchsiaResourceDialect,
2112    > {
2113        KeyManagerProxyInterface::r#import_asymmetric_private_key(
2114            self,
2115            data,
2116            key_name,
2117            key_algorithm,
2118            key,
2119        )
2120    }
2121
2122    /// Get an asymmetric private key handle.
2123    ///
2124    /// Get an asymmetric private key handle using the `key_name`. If such key is not found, would
2125    /// return `KEY_NOT_FOUND`.
2126    pub fn r#get_asymmetric_private_key(
2127        &self,
2128        mut key_name: &str,
2129        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2130    ) -> fidl::client::QueryResponseFut<
2131        KeyManagerGetAsymmetricPrivateKeyResult,
2132        fidl::encoding::DefaultFuchsiaResourceDialect,
2133    > {
2134        KeyManagerProxyInterface::r#get_asymmetric_private_key(self, key_name, key)
2135    }
2136
2137    /// Delete a key.
2138    ///
2139    /// Delete a key for `key_name`.  For all the current handle to the deleted key, they would
2140    /// become invalid and all following requests on those handles would return `KEY_NOT_FOUND`, user
2141    /// should close the invalid handles once get `KEY_NOT_FOUND` error.
2142    pub fn r#delete_key(
2143        &self,
2144        mut key_name: &str,
2145    ) -> fidl::client::QueryResponseFut<
2146        KeyManagerDeleteKeyResult,
2147        fidl::encoding::DefaultFuchsiaResourceDialect,
2148    > {
2149        KeyManagerProxyInterface::r#delete_key(self, key_name)
2150    }
2151}
2152
2153impl KeyManagerProxyInterface for KeyManagerProxy {
2154    type SealDataResponseFut = fidl::client::QueryResponseFut<
2155        KeyManagerSealDataResult,
2156        fidl::encoding::DefaultFuchsiaResourceDialect,
2157    >;
2158    fn r#seal_data(&self, mut plain_text: fidl_fuchsia_mem::Buffer) -> Self::SealDataResponseFut {
2159        fn _decode(
2160            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2161        ) -> Result<KeyManagerSealDataResult, fidl::Error> {
2162            let _response = fidl::client::decode_transaction_body::<
2163                fidl::encoding::ResultType<KeyManagerSealDataResponse, Error>,
2164                fidl::encoding::DefaultFuchsiaResourceDialect,
2165                0x3d2fcd85d11c96bb,
2166            >(_buf?)?;
2167            Ok(_response.map(|x| x.cipher_text))
2168        }
2169        self.client.send_query_and_decode::<KeyManagerSealDataRequest, KeyManagerSealDataResult>(
2170            (&mut plain_text,),
2171            0x3d2fcd85d11c96bb,
2172            fidl::encoding::DynamicFlags::empty(),
2173            _decode,
2174        )
2175    }
2176
2177    type UnsealDataResponseFut = fidl::client::QueryResponseFut<
2178        KeyManagerUnsealDataResult,
2179        fidl::encoding::DefaultFuchsiaResourceDialect,
2180    >;
2181    fn r#unseal_data(
2182        &self,
2183        mut cipher_text: fidl_fuchsia_mem::Buffer,
2184    ) -> Self::UnsealDataResponseFut {
2185        fn _decode(
2186            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2187        ) -> Result<KeyManagerUnsealDataResult, fidl::Error> {
2188            let _response = fidl::client::decode_transaction_body::<
2189                fidl::encoding::ResultType<KeyManagerUnsealDataResponse, Error>,
2190                fidl::encoding::DefaultFuchsiaResourceDialect,
2191                0x72dafc3131c1bca6,
2192            >(_buf?)?;
2193            Ok(_response.map(|x| x.plain_text))
2194        }
2195        self.client
2196            .send_query_and_decode::<KeyManagerUnsealDataRequest, KeyManagerUnsealDataResult>(
2197                (&mut cipher_text,),
2198                0x72dafc3131c1bca6,
2199                fidl::encoding::DynamicFlags::empty(),
2200                _decode,
2201            )
2202    }
2203
2204    type GenerateAsymmetricKeyResponseFut = fidl::client::QueryResponseFut<
2205        KeyManagerGenerateAsymmetricKeyResult,
2206        fidl::encoding::DefaultFuchsiaResourceDialect,
2207    >;
2208    fn r#generate_asymmetric_key(
2209        &self,
2210        mut key_name: &str,
2211        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2212    ) -> Self::GenerateAsymmetricKeyResponseFut {
2213        fn _decode(
2214            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2215        ) -> Result<KeyManagerGenerateAsymmetricKeyResult, fidl::Error> {
2216            let _response = fidl::client::decode_transaction_body::<
2217                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2218                fidl::encoding::DefaultFuchsiaResourceDialect,
2219                0x66f1aa7ff5eb183d,
2220            >(_buf?)?;
2221            Ok(_response.map(|x| x))
2222        }
2223        self.client.send_query_and_decode::<
2224            KeyManagerGenerateAsymmetricKeyRequest,
2225            KeyManagerGenerateAsymmetricKeyResult,
2226        >(
2227            (key_name, key,),
2228            0x66f1aa7ff5eb183d,
2229            fidl::encoding::DynamicFlags::empty(),
2230            _decode,
2231        )
2232    }
2233
2234    type GenerateAsymmetricKeyWithAlgorithmResponseFut = fidl::client::QueryResponseFut<
2235        KeyManagerGenerateAsymmetricKeyWithAlgorithmResult,
2236        fidl::encoding::DefaultFuchsiaResourceDialect,
2237    >;
2238    fn r#generate_asymmetric_key_with_algorithm(
2239        &self,
2240        mut key_name: &str,
2241        mut key_algorithm: AsymmetricKeyAlgorithm,
2242        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2243    ) -> Self::GenerateAsymmetricKeyWithAlgorithmResponseFut {
2244        fn _decode(
2245            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2246        ) -> Result<KeyManagerGenerateAsymmetricKeyWithAlgorithmResult, fidl::Error> {
2247            let _response = fidl::client::decode_transaction_body::<
2248                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2249                fidl::encoding::DefaultFuchsiaResourceDialect,
2250                0x2b9eac3ad0bc8a45,
2251            >(_buf?)?;
2252            Ok(_response.map(|x| x))
2253        }
2254        self.client.send_query_and_decode::<
2255            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
2256            KeyManagerGenerateAsymmetricKeyWithAlgorithmResult,
2257        >(
2258            (key_name, key_algorithm, key,),
2259            0x2b9eac3ad0bc8a45,
2260            fidl::encoding::DynamicFlags::empty(),
2261            _decode,
2262        )
2263    }
2264
2265    type ImportAsymmetricPrivateKeyResponseFut = fidl::client::QueryResponseFut<
2266        KeyManagerImportAsymmetricPrivateKeyResult,
2267        fidl::encoding::DefaultFuchsiaResourceDialect,
2268    >;
2269    fn r#import_asymmetric_private_key(
2270        &self,
2271        mut data: &[u8],
2272        mut key_name: &str,
2273        mut key_algorithm: AsymmetricKeyAlgorithm,
2274        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2275    ) -> Self::ImportAsymmetricPrivateKeyResponseFut {
2276        fn _decode(
2277            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2278        ) -> Result<KeyManagerImportAsymmetricPrivateKeyResult, fidl::Error> {
2279            let _response = fidl::client::decode_transaction_body::<
2280                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2281                fidl::encoding::DefaultFuchsiaResourceDialect,
2282                0x14c78f1ebb4eee71,
2283            >(_buf?)?;
2284            Ok(_response.map(|x| x))
2285        }
2286        self.client.send_query_and_decode::<
2287            KeyManagerImportAsymmetricPrivateKeyRequest,
2288            KeyManagerImportAsymmetricPrivateKeyResult,
2289        >(
2290            (data, key_name, key_algorithm, key,),
2291            0x14c78f1ebb4eee71,
2292            fidl::encoding::DynamicFlags::empty(),
2293            _decode,
2294        )
2295    }
2296
2297    type GetAsymmetricPrivateKeyResponseFut = fidl::client::QueryResponseFut<
2298        KeyManagerGetAsymmetricPrivateKeyResult,
2299        fidl::encoding::DefaultFuchsiaResourceDialect,
2300    >;
2301    fn r#get_asymmetric_private_key(
2302        &self,
2303        mut key_name: &str,
2304        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2305    ) -> Self::GetAsymmetricPrivateKeyResponseFut {
2306        fn _decode(
2307            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2308        ) -> Result<KeyManagerGetAsymmetricPrivateKeyResult, fidl::Error> {
2309            let _response = fidl::client::decode_transaction_body::<
2310                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2311                fidl::encoding::DefaultFuchsiaResourceDialect,
2312                0x3a257fc6b6ccc5cd,
2313            >(_buf?)?;
2314            Ok(_response.map(|x| x))
2315        }
2316        self.client.send_query_and_decode::<
2317            KeyManagerGetAsymmetricPrivateKeyRequest,
2318            KeyManagerGetAsymmetricPrivateKeyResult,
2319        >(
2320            (key_name, key,),
2321            0x3a257fc6b6ccc5cd,
2322            fidl::encoding::DynamicFlags::empty(),
2323            _decode,
2324        )
2325    }
2326
2327    type DeleteKeyResponseFut = fidl::client::QueryResponseFut<
2328        KeyManagerDeleteKeyResult,
2329        fidl::encoding::DefaultFuchsiaResourceDialect,
2330    >;
2331    fn r#delete_key(&self, mut key_name: &str) -> Self::DeleteKeyResponseFut {
2332        fn _decode(
2333            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2334        ) -> Result<KeyManagerDeleteKeyResult, fidl::Error> {
2335            let _response = fidl::client::decode_transaction_body::<
2336                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2337                fidl::encoding::DefaultFuchsiaResourceDialect,
2338                0x55521e617d023aad,
2339            >(_buf?)?;
2340            Ok(_response.map(|x| x))
2341        }
2342        self.client.send_query_and_decode::<KeyManagerDeleteKeyRequest, KeyManagerDeleteKeyResult>(
2343            (key_name,),
2344            0x55521e617d023aad,
2345            fidl::encoding::DynamicFlags::empty(),
2346            _decode,
2347        )
2348    }
2349}
2350
2351pub struct KeyManagerEventStream {
2352    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2353}
2354
2355impl std::marker::Unpin for KeyManagerEventStream {}
2356
2357impl futures::stream::FusedStream for KeyManagerEventStream {
2358    fn is_terminated(&self) -> bool {
2359        self.event_receiver.is_terminated()
2360    }
2361}
2362
2363impl futures::Stream for KeyManagerEventStream {
2364    type Item = Result<KeyManagerEvent, fidl::Error>;
2365
2366    fn poll_next(
2367        mut self: std::pin::Pin<&mut Self>,
2368        cx: &mut std::task::Context<'_>,
2369    ) -> std::task::Poll<Option<Self::Item>> {
2370        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2371            &mut self.event_receiver,
2372            cx
2373        )?) {
2374            Some(buf) => std::task::Poll::Ready(Some(KeyManagerEvent::decode(buf))),
2375            None => std::task::Poll::Ready(None),
2376        }
2377    }
2378}
2379
2380#[derive(Debug)]
2381pub enum KeyManagerEvent {}
2382
2383impl KeyManagerEvent {
2384    /// Decodes a message buffer as a [`KeyManagerEvent`].
2385    fn decode(
2386        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2387    ) -> Result<KeyManagerEvent, fidl::Error> {
2388        let (bytes, _handles) = buf.split_mut();
2389        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2390        debug_assert_eq!(tx_header.tx_id, 0);
2391        match tx_header.ordinal {
2392            _ => Err(fidl::Error::UnknownOrdinal {
2393                ordinal: tx_header.ordinal,
2394                protocol_name: <KeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2395            }),
2396        }
2397    }
2398}
2399
2400/// A Stream of incoming requests for fuchsia.kms/KeyManager.
2401pub struct KeyManagerRequestStream {
2402    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2403    is_terminated: bool,
2404}
2405
2406impl std::marker::Unpin for KeyManagerRequestStream {}
2407
2408impl futures::stream::FusedStream for KeyManagerRequestStream {
2409    fn is_terminated(&self) -> bool {
2410        self.is_terminated
2411    }
2412}
2413
2414impl fidl::endpoints::RequestStream for KeyManagerRequestStream {
2415    type Protocol = KeyManagerMarker;
2416    type ControlHandle = KeyManagerControlHandle;
2417
2418    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2419        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2420    }
2421
2422    fn control_handle(&self) -> Self::ControlHandle {
2423        KeyManagerControlHandle { inner: self.inner.clone() }
2424    }
2425
2426    fn into_inner(
2427        self,
2428    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2429    {
2430        (self.inner, self.is_terminated)
2431    }
2432
2433    fn from_inner(
2434        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2435        is_terminated: bool,
2436    ) -> Self {
2437        Self { inner, is_terminated }
2438    }
2439}
2440
2441impl futures::Stream for KeyManagerRequestStream {
2442    type Item = Result<KeyManagerRequest, fidl::Error>;
2443
2444    fn poll_next(
2445        mut self: std::pin::Pin<&mut Self>,
2446        cx: &mut std::task::Context<'_>,
2447    ) -> std::task::Poll<Option<Self::Item>> {
2448        let this = &mut *self;
2449        if this.inner.check_shutdown(cx) {
2450            this.is_terminated = true;
2451            return std::task::Poll::Ready(None);
2452        }
2453        if this.is_terminated {
2454            panic!("polled KeyManagerRequestStream after completion");
2455        }
2456        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2457            |bytes, handles| {
2458                match this.inner.channel().read_etc(cx, bytes, handles) {
2459                    std::task::Poll::Ready(Ok(())) => {}
2460                    std::task::Poll::Pending => return std::task::Poll::Pending,
2461                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2462                        this.is_terminated = true;
2463                        return std::task::Poll::Ready(None);
2464                    }
2465                    std::task::Poll::Ready(Err(e)) => {
2466                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2467                            e.into(),
2468                        ))))
2469                    }
2470                }
2471
2472                // A message has been received from the channel
2473                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2474
2475                std::task::Poll::Ready(Some(match header.ordinal {
2476                    0x3d2fcd85d11c96bb => {
2477                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2478                        let mut req = fidl::new_empty!(
2479                            KeyManagerSealDataRequest,
2480                            fidl::encoding::DefaultFuchsiaResourceDialect
2481                        );
2482                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerSealDataRequest>(&header, _body_bytes, handles, &mut req)?;
2483                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2484                        Ok(KeyManagerRequest::SealData {
2485                            plain_text: req.plain_text,
2486
2487                            responder: KeyManagerSealDataResponder {
2488                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2489                                tx_id: header.tx_id,
2490                            },
2491                        })
2492                    }
2493                    0x72dafc3131c1bca6 => {
2494                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2495                        let mut req = fidl::new_empty!(
2496                            KeyManagerUnsealDataRequest,
2497                            fidl::encoding::DefaultFuchsiaResourceDialect
2498                        );
2499                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerUnsealDataRequest>(&header, _body_bytes, handles, &mut req)?;
2500                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2501                        Ok(KeyManagerRequest::UnsealData {
2502                            cipher_text: req.cipher_text,
2503
2504                            responder: KeyManagerUnsealDataResponder {
2505                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2506                                tx_id: header.tx_id,
2507                            },
2508                        })
2509                    }
2510                    0x66f1aa7ff5eb183d => {
2511                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2512                        let mut req = fidl::new_empty!(
2513                            KeyManagerGenerateAsymmetricKeyRequest,
2514                            fidl::encoding::DefaultFuchsiaResourceDialect
2515                        );
2516                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerGenerateAsymmetricKeyRequest>(&header, _body_bytes, handles, &mut req)?;
2517                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2518                        Ok(KeyManagerRequest::GenerateAsymmetricKey {
2519                            key_name: req.key_name,
2520                            key: req.key,
2521
2522                            responder: KeyManagerGenerateAsymmetricKeyResponder {
2523                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2524                                tx_id: header.tx_id,
2525                            },
2526                        })
2527                    }
2528                    0x2b9eac3ad0bc8a45 => {
2529                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2530                        let mut req = fidl::new_empty!(
2531                            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
2532                            fidl::encoding::DefaultFuchsiaResourceDialect
2533                        );
2534                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest>(&header, _body_bytes, handles, &mut req)?;
2535                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2536                        Ok(KeyManagerRequest::GenerateAsymmetricKeyWithAlgorithm {
2537                            key_name: req.key_name,
2538                            key_algorithm: req.key_algorithm,
2539                            key: req.key,
2540
2541                            responder: KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
2542                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2543                                tx_id: header.tx_id,
2544                            },
2545                        })
2546                    }
2547                    0x14c78f1ebb4eee71 => {
2548                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2549                        let mut req = fidl::new_empty!(
2550                            KeyManagerImportAsymmetricPrivateKeyRequest,
2551                            fidl::encoding::DefaultFuchsiaResourceDialect
2552                        );
2553                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerImportAsymmetricPrivateKeyRequest>(&header, _body_bytes, handles, &mut req)?;
2554                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2555                        Ok(KeyManagerRequest::ImportAsymmetricPrivateKey {
2556                            data: req.data,
2557                            key_name: req.key_name,
2558                            key_algorithm: req.key_algorithm,
2559                            key: req.key,
2560
2561                            responder: KeyManagerImportAsymmetricPrivateKeyResponder {
2562                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2563                                tx_id: header.tx_id,
2564                            },
2565                        })
2566                    }
2567                    0x3a257fc6b6ccc5cd => {
2568                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2569                        let mut req = fidl::new_empty!(
2570                            KeyManagerGetAsymmetricPrivateKeyRequest,
2571                            fidl::encoding::DefaultFuchsiaResourceDialect
2572                        );
2573                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerGetAsymmetricPrivateKeyRequest>(&header, _body_bytes, handles, &mut req)?;
2574                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2575                        Ok(KeyManagerRequest::GetAsymmetricPrivateKey {
2576                            key_name: req.key_name,
2577                            key: req.key,
2578
2579                            responder: KeyManagerGetAsymmetricPrivateKeyResponder {
2580                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2581                                tx_id: header.tx_id,
2582                            },
2583                        })
2584                    }
2585                    0x55521e617d023aad => {
2586                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2587                        let mut req = fidl::new_empty!(
2588                            KeyManagerDeleteKeyRequest,
2589                            fidl::encoding::DefaultFuchsiaResourceDialect
2590                        );
2591                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerDeleteKeyRequest>(&header, _body_bytes, handles, &mut req)?;
2592                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2593                        Ok(KeyManagerRequest::DeleteKey {
2594                            key_name: req.key_name,
2595
2596                            responder: KeyManagerDeleteKeyResponder {
2597                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2598                                tx_id: header.tx_id,
2599                            },
2600                        })
2601                    }
2602                    _ => Err(fidl::Error::UnknownOrdinal {
2603                        ordinal: header.ordinal,
2604                        protocol_name:
2605                            <KeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2606                    }),
2607                }))
2608            },
2609        )
2610    }
2611}
2612
2613#[derive(Debug)]
2614pub enum KeyManagerRequest {
2615    /// Seal data to an encrypted form.
2616    ///
2617    /// Seal data to an encrypted form. The sealed data can only be unsealed by the same KMS instance
2618    /// by using UnsealData. `plain_text` needs to be less than `MAX_DATA_SIZE` bytes.
2619    SealData { plain_text: fidl_fuchsia_mem::Buffer, responder: KeyManagerSealDataResponder },
2620    /// Unseal sealed data.
2621    ///
2622    /// Unseal data previously sealed by this KMS instance.
2623    UnsealData { cipher_text: fidl_fuchsia_mem::Buffer, responder: KeyManagerUnsealDataResponder },
2624    /// Generate an asymmetric key.
2625    ///
2626    /// Generate an asymmetric key using `key_name` as the unique name. `key` is the generated
2627    /// asymmetric key interface request. If the `key_name` is not unique, you would get
2628    /// `KEY_ALREADY_EXISTS`. The generated key can be used to sign data. The algorithm used for
2629    /// generating asymmetric key is `ECDSA_SHA512_P521`.
2630    GenerateAsymmetricKey {
2631        key_name: String,
2632        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2633        responder: KeyManagerGenerateAsymmetricKeyResponder,
2634    },
2635    /// Generate an asymmetric key with a specific algorithm.
2636    ///
2637    /// Generate an asymmetric key using `key_name` as the unique name and `key_algorithm` as
2638    /// algorithm. `key` is the generated asymmetric key interface request. If the `key_name` is not
2639    /// unique, you would get `KEY_ALREADY_EXISTS`.
2640    GenerateAsymmetricKeyWithAlgorithm {
2641        key_name: String,
2642        key_algorithm: AsymmetricKeyAlgorithm,
2643        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2644        responder: KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder,
2645    },
2646    /// Import an asymmetric private key with a specific algorithm.
2647    ///
2648    /// Import an asymmetric private key using `key_name` as the unique name, `key_algorithm` as
2649    /// algorithm and `data` as key data. `key` is imported asymmetric key interface request. Key
2650    /// data should be in asn.1 encoded DER format. If the `key_name` is not unique, you would get
2651    /// `KEY_ALREADY_EXISTS`.
2652    ImportAsymmetricPrivateKey {
2653        data: Vec<u8>,
2654        key_name: String,
2655        key_algorithm: AsymmetricKeyAlgorithm,
2656        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2657        responder: KeyManagerImportAsymmetricPrivateKeyResponder,
2658    },
2659    /// Get an asymmetric private key handle.
2660    ///
2661    /// Get an asymmetric private key handle using the `key_name`. If such key is not found, would
2662    /// return `KEY_NOT_FOUND`.
2663    GetAsymmetricPrivateKey {
2664        key_name: String,
2665        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2666        responder: KeyManagerGetAsymmetricPrivateKeyResponder,
2667    },
2668    /// Delete a key.
2669    ///
2670    /// Delete a key for `key_name`.  For all the current handle to the deleted key, they would
2671    /// become invalid and all following requests on those handles would return `KEY_NOT_FOUND`, user
2672    /// should close the invalid handles once get `KEY_NOT_FOUND` error.
2673    DeleteKey { key_name: String, responder: KeyManagerDeleteKeyResponder },
2674}
2675
2676impl KeyManagerRequest {
2677    #[allow(irrefutable_let_patterns)]
2678    pub fn into_seal_data(self) -> Option<(fidl_fuchsia_mem::Buffer, KeyManagerSealDataResponder)> {
2679        if let KeyManagerRequest::SealData { plain_text, responder } = self {
2680            Some((plain_text, responder))
2681        } else {
2682            None
2683        }
2684    }
2685
2686    #[allow(irrefutable_let_patterns)]
2687    pub fn into_unseal_data(
2688        self,
2689    ) -> Option<(fidl_fuchsia_mem::Buffer, KeyManagerUnsealDataResponder)> {
2690        if let KeyManagerRequest::UnsealData { cipher_text, responder } = self {
2691            Some((cipher_text, responder))
2692        } else {
2693            None
2694        }
2695    }
2696
2697    #[allow(irrefutable_let_patterns)]
2698    pub fn into_generate_asymmetric_key(
2699        self,
2700    ) -> Option<(
2701        String,
2702        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2703        KeyManagerGenerateAsymmetricKeyResponder,
2704    )> {
2705        if let KeyManagerRequest::GenerateAsymmetricKey { key_name, key, responder } = self {
2706            Some((key_name, key, responder))
2707        } else {
2708            None
2709        }
2710    }
2711
2712    #[allow(irrefutable_let_patterns)]
2713    pub fn into_generate_asymmetric_key_with_algorithm(
2714        self,
2715    ) -> Option<(
2716        String,
2717        AsymmetricKeyAlgorithm,
2718        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2719        KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder,
2720    )> {
2721        if let KeyManagerRequest::GenerateAsymmetricKeyWithAlgorithm {
2722            key_name,
2723            key_algorithm,
2724            key,
2725            responder,
2726        } = self
2727        {
2728            Some((key_name, key_algorithm, key, responder))
2729        } else {
2730            None
2731        }
2732    }
2733
2734    #[allow(irrefutable_let_patterns)]
2735    pub fn into_import_asymmetric_private_key(
2736        self,
2737    ) -> Option<(
2738        Vec<u8>,
2739        String,
2740        AsymmetricKeyAlgorithm,
2741        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2742        KeyManagerImportAsymmetricPrivateKeyResponder,
2743    )> {
2744        if let KeyManagerRequest::ImportAsymmetricPrivateKey {
2745            data,
2746            key_name,
2747            key_algorithm,
2748            key,
2749            responder,
2750        } = self
2751        {
2752            Some((data, key_name, key_algorithm, key, responder))
2753        } else {
2754            None
2755        }
2756    }
2757
2758    #[allow(irrefutable_let_patterns)]
2759    pub fn into_get_asymmetric_private_key(
2760        self,
2761    ) -> Option<(
2762        String,
2763        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2764        KeyManagerGetAsymmetricPrivateKeyResponder,
2765    )> {
2766        if let KeyManagerRequest::GetAsymmetricPrivateKey { key_name, key, responder } = self {
2767            Some((key_name, key, responder))
2768        } else {
2769            None
2770        }
2771    }
2772
2773    #[allow(irrefutable_let_patterns)]
2774    pub fn into_delete_key(self) -> Option<(String, KeyManagerDeleteKeyResponder)> {
2775        if let KeyManagerRequest::DeleteKey { key_name, responder } = self {
2776            Some((key_name, responder))
2777        } else {
2778            None
2779        }
2780    }
2781
2782    /// Name of the method defined in FIDL
2783    pub fn method_name(&self) -> &'static str {
2784        match *self {
2785            KeyManagerRequest::SealData { .. } => "seal_data",
2786            KeyManagerRequest::UnsealData { .. } => "unseal_data",
2787            KeyManagerRequest::GenerateAsymmetricKey { .. } => "generate_asymmetric_key",
2788            KeyManagerRequest::GenerateAsymmetricKeyWithAlgorithm { .. } => {
2789                "generate_asymmetric_key_with_algorithm"
2790            }
2791            KeyManagerRequest::ImportAsymmetricPrivateKey { .. } => "import_asymmetric_private_key",
2792            KeyManagerRequest::GetAsymmetricPrivateKey { .. } => "get_asymmetric_private_key",
2793            KeyManagerRequest::DeleteKey { .. } => "delete_key",
2794        }
2795    }
2796}
2797
2798#[derive(Debug, Clone)]
2799pub struct KeyManagerControlHandle {
2800    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2801}
2802
2803impl fidl::endpoints::ControlHandle for KeyManagerControlHandle {
2804    fn shutdown(&self) {
2805        self.inner.shutdown()
2806    }
2807    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2808        self.inner.shutdown_with_epitaph(status)
2809    }
2810
2811    fn is_closed(&self) -> bool {
2812        self.inner.channel().is_closed()
2813    }
2814    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2815        self.inner.channel().on_closed()
2816    }
2817
2818    #[cfg(target_os = "fuchsia")]
2819    fn signal_peer(
2820        &self,
2821        clear_mask: zx::Signals,
2822        set_mask: zx::Signals,
2823    ) -> Result<(), zx_status::Status> {
2824        use fidl::Peered;
2825        self.inner.channel().signal_peer(clear_mask, set_mask)
2826    }
2827}
2828
2829impl KeyManagerControlHandle {}
2830
2831#[must_use = "FIDL methods require a response to be sent"]
2832#[derive(Debug)]
2833pub struct KeyManagerSealDataResponder {
2834    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
2835    tx_id: u32,
2836}
2837
2838/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
2839/// if the responder is dropped without sending a response, so that the client
2840/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2841impl std::ops::Drop for KeyManagerSealDataResponder {
2842    fn drop(&mut self) {
2843        self.control_handle.shutdown();
2844        // Safety: drops once, never accessed again
2845        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2846    }
2847}
2848
2849impl fidl::endpoints::Responder for KeyManagerSealDataResponder {
2850    type ControlHandle = KeyManagerControlHandle;
2851
2852    fn control_handle(&self) -> &KeyManagerControlHandle {
2853        &self.control_handle
2854    }
2855
2856    fn drop_without_shutdown(mut self) {
2857        // Safety: drops once, never accessed again due to mem::forget
2858        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2859        // Prevent Drop from running (which would shut down the channel)
2860        std::mem::forget(self);
2861    }
2862}
2863
2864impl KeyManagerSealDataResponder {
2865    /// Sends a response to the FIDL transaction.
2866    ///
2867    /// Sets the channel to shutdown if an error occurs.
2868    pub fn send(
2869        self,
2870        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2871    ) -> Result<(), fidl::Error> {
2872        let _result = self.send_raw(result);
2873        if _result.is_err() {
2874            self.control_handle.shutdown();
2875        }
2876        self.drop_without_shutdown();
2877        _result
2878    }
2879
2880    /// Similar to "send" but does not shutdown the channel if an error occurs.
2881    pub fn send_no_shutdown_on_err(
2882        self,
2883        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2884    ) -> Result<(), fidl::Error> {
2885        let _result = self.send_raw(result);
2886        self.drop_without_shutdown();
2887        _result
2888    }
2889
2890    fn send_raw(
2891        &self,
2892        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2893    ) -> Result<(), fidl::Error> {
2894        self.control_handle
2895            .inner
2896            .send::<fidl::encoding::ResultType<KeyManagerSealDataResponse, Error>>(
2897                result.as_mut().map_err(|e| *e).map(|cipher_text| (cipher_text,)),
2898                self.tx_id,
2899                0x3d2fcd85d11c96bb,
2900                fidl::encoding::DynamicFlags::empty(),
2901            )
2902    }
2903}
2904
2905#[must_use = "FIDL methods require a response to be sent"]
2906#[derive(Debug)]
2907pub struct KeyManagerUnsealDataResponder {
2908    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
2909    tx_id: u32,
2910}
2911
2912/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
2913/// if the responder is dropped without sending a response, so that the client
2914/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2915impl std::ops::Drop for KeyManagerUnsealDataResponder {
2916    fn drop(&mut self) {
2917        self.control_handle.shutdown();
2918        // Safety: drops once, never accessed again
2919        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2920    }
2921}
2922
2923impl fidl::endpoints::Responder for KeyManagerUnsealDataResponder {
2924    type ControlHandle = KeyManagerControlHandle;
2925
2926    fn control_handle(&self) -> &KeyManagerControlHandle {
2927        &self.control_handle
2928    }
2929
2930    fn drop_without_shutdown(mut self) {
2931        // Safety: drops once, never accessed again due to mem::forget
2932        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2933        // Prevent Drop from running (which would shut down the channel)
2934        std::mem::forget(self);
2935    }
2936}
2937
2938impl KeyManagerUnsealDataResponder {
2939    /// Sends a response to the FIDL transaction.
2940    ///
2941    /// Sets the channel to shutdown if an error occurs.
2942    pub fn send(
2943        self,
2944        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2945    ) -> Result<(), fidl::Error> {
2946        let _result = self.send_raw(result);
2947        if _result.is_err() {
2948            self.control_handle.shutdown();
2949        }
2950        self.drop_without_shutdown();
2951        _result
2952    }
2953
2954    /// Similar to "send" but does not shutdown the channel if an error occurs.
2955    pub fn send_no_shutdown_on_err(
2956        self,
2957        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2958    ) -> Result<(), fidl::Error> {
2959        let _result = self.send_raw(result);
2960        self.drop_without_shutdown();
2961        _result
2962    }
2963
2964    fn send_raw(
2965        &self,
2966        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2967    ) -> Result<(), fidl::Error> {
2968        self.control_handle
2969            .inner
2970            .send::<fidl::encoding::ResultType<KeyManagerUnsealDataResponse, Error>>(
2971                result.as_mut().map_err(|e| *e).map(|plain_text| (plain_text,)),
2972                self.tx_id,
2973                0x72dafc3131c1bca6,
2974                fidl::encoding::DynamicFlags::empty(),
2975            )
2976    }
2977}
2978
2979#[must_use = "FIDL methods require a response to be sent"]
2980#[derive(Debug)]
2981pub struct KeyManagerGenerateAsymmetricKeyResponder {
2982    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
2983    tx_id: u32,
2984}
2985
2986/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
2987/// if the responder is dropped without sending a response, so that the client
2988/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2989impl std::ops::Drop for KeyManagerGenerateAsymmetricKeyResponder {
2990    fn drop(&mut self) {
2991        self.control_handle.shutdown();
2992        // Safety: drops once, never accessed again
2993        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2994    }
2995}
2996
2997impl fidl::endpoints::Responder for KeyManagerGenerateAsymmetricKeyResponder {
2998    type ControlHandle = KeyManagerControlHandle;
2999
3000    fn control_handle(&self) -> &KeyManagerControlHandle {
3001        &self.control_handle
3002    }
3003
3004    fn drop_without_shutdown(mut self) {
3005        // Safety: drops once, never accessed again due to mem::forget
3006        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3007        // Prevent Drop from running (which would shut down the channel)
3008        std::mem::forget(self);
3009    }
3010}
3011
3012impl KeyManagerGenerateAsymmetricKeyResponder {
3013    /// Sends a response to the FIDL transaction.
3014    ///
3015    /// Sets the channel to shutdown if an error occurs.
3016    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3017        let _result = self.send_raw(result);
3018        if _result.is_err() {
3019            self.control_handle.shutdown();
3020        }
3021        self.drop_without_shutdown();
3022        _result
3023    }
3024
3025    /// Similar to "send" but does not shutdown the channel if an error occurs.
3026    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3027        let _result = self.send_raw(result);
3028        self.drop_without_shutdown();
3029        _result
3030    }
3031
3032    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3033        self.control_handle
3034            .inner
3035            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3036                result,
3037                self.tx_id,
3038                0x66f1aa7ff5eb183d,
3039                fidl::encoding::DynamicFlags::empty(),
3040            )
3041    }
3042}
3043
3044#[must_use = "FIDL methods require a response to be sent"]
3045#[derive(Debug)]
3046pub struct KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
3047    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3048    tx_id: u32,
3049}
3050
3051/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3052/// if the responder is dropped without sending a response, so that the client
3053/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3054impl std::ops::Drop for KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
3055    fn drop(&mut self) {
3056        self.control_handle.shutdown();
3057        // Safety: drops once, never accessed again
3058        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3059    }
3060}
3061
3062impl fidl::endpoints::Responder for KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
3063    type ControlHandle = KeyManagerControlHandle;
3064
3065    fn control_handle(&self) -> &KeyManagerControlHandle {
3066        &self.control_handle
3067    }
3068
3069    fn drop_without_shutdown(mut self) {
3070        // Safety: drops once, never accessed again due to mem::forget
3071        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3072        // Prevent Drop from running (which would shut down the channel)
3073        std::mem::forget(self);
3074    }
3075}
3076
3077impl KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
3078    /// Sends a response to the FIDL transaction.
3079    ///
3080    /// Sets the channel to shutdown if an error occurs.
3081    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3082        let _result = self.send_raw(result);
3083        if _result.is_err() {
3084            self.control_handle.shutdown();
3085        }
3086        self.drop_without_shutdown();
3087        _result
3088    }
3089
3090    /// Similar to "send" but does not shutdown the channel if an error occurs.
3091    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3092        let _result = self.send_raw(result);
3093        self.drop_without_shutdown();
3094        _result
3095    }
3096
3097    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3098        self.control_handle
3099            .inner
3100            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3101                result,
3102                self.tx_id,
3103                0x2b9eac3ad0bc8a45,
3104                fidl::encoding::DynamicFlags::empty(),
3105            )
3106    }
3107}
3108
3109#[must_use = "FIDL methods require a response to be sent"]
3110#[derive(Debug)]
3111pub struct KeyManagerImportAsymmetricPrivateKeyResponder {
3112    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3113    tx_id: u32,
3114}
3115
3116/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3117/// if the responder is dropped without sending a response, so that the client
3118/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3119impl std::ops::Drop for KeyManagerImportAsymmetricPrivateKeyResponder {
3120    fn drop(&mut self) {
3121        self.control_handle.shutdown();
3122        // Safety: drops once, never accessed again
3123        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3124    }
3125}
3126
3127impl fidl::endpoints::Responder for KeyManagerImportAsymmetricPrivateKeyResponder {
3128    type ControlHandle = KeyManagerControlHandle;
3129
3130    fn control_handle(&self) -> &KeyManagerControlHandle {
3131        &self.control_handle
3132    }
3133
3134    fn drop_without_shutdown(mut self) {
3135        // Safety: drops once, never accessed again due to mem::forget
3136        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3137        // Prevent Drop from running (which would shut down the channel)
3138        std::mem::forget(self);
3139    }
3140}
3141
3142impl KeyManagerImportAsymmetricPrivateKeyResponder {
3143    /// Sends a response to the FIDL transaction.
3144    ///
3145    /// Sets the channel to shutdown if an error occurs.
3146    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3147        let _result = self.send_raw(result);
3148        if _result.is_err() {
3149            self.control_handle.shutdown();
3150        }
3151        self.drop_without_shutdown();
3152        _result
3153    }
3154
3155    /// Similar to "send" but does not shutdown the channel if an error occurs.
3156    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3157        let _result = self.send_raw(result);
3158        self.drop_without_shutdown();
3159        _result
3160    }
3161
3162    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3163        self.control_handle
3164            .inner
3165            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3166                result,
3167                self.tx_id,
3168                0x14c78f1ebb4eee71,
3169                fidl::encoding::DynamicFlags::empty(),
3170            )
3171    }
3172}
3173
3174#[must_use = "FIDL methods require a response to be sent"]
3175#[derive(Debug)]
3176pub struct KeyManagerGetAsymmetricPrivateKeyResponder {
3177    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3178    tx_id: u32,
3179}
3180
3181/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3182/// if the responder is dropped without sending a response, so that the client
3183/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3184impl std::ops::Drop for KeyManagerGetAsymmetricPrivateKeyResponder {
3185    fn drop(&mut self) {
3186        self.control_handle.shutdown();
3187        // Safety: drops once, never accessed again
3188        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3189    }
3190}
3191
3192impl fidl::endpoints::Responder for KeyManagerGetAsymmetricPrivateKeyResponder {
3193    type ControlHandle = KeyManagerControlHandle;
3194
3195    fn control_handle(&self) -> &KeyManagerControlHandle {
3196        &self.control_handle
3197    }
3198
3199    fn drop_without_shutdown(mut self) {
3200        // Safety: drops once, never accessed again due to mem::forget
3201        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3202        // Prevent Drop from running (which would shut down the channel)
3203        std::mem::forget(self);
3204    }
3205}
3206
3207impl KeyManagerGetAsymmetricPrivateKeyResponder {
3208    /// Sends a response to the FIDL transaction.
3209    ///
3210    /// Sets the channel to shutdown if an error occurs.
3211    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3212        let _result = self.send_raw(result);
3213        if _result.is_err() {
3214            self.control_handle.shutdown();
3215        }
3216        self.drop_without_shutdown();
3217        _result
3218    }
3219
3220    /// Similar to "send" but does not shutdown the channel if an error occurs.
3221    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3222        let _result = self.send_raw(result);
3223        self.drop_without_shutdown();
3224        _result
3225    }
3226
3227    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3228        self.control_handle
3229            .inner
3230            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3231                result,
3232                self.tx_id,
3233                0x3a257fc6b6ccc5cd,
3234                fidl::encoding::DynamicFlags::empty(),
3235            )
3236    }
3237}
3238
3239#[must_use = "FIDL methods require a response to be sent"]
3240#[derive(Debug)]
3241pub struct KeyManagerDeleteKeyResponder {
3242    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3243    tx_id: u32,
3244}
3245
3246/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3247/// if the responder is dropped without sending a response, so that the client
3248/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3249impl std::ops::Drop for KeyManagerDeleteKeyResponder {
3250    fn drop(&mut self) {
3251        self.control_handle.shutdown();
3252        // Safety: drops once, never accessed again
3253        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3254    }
3255}
3256
3257impl fidl::endpoints::Responder for KeyManagerDeleteKeyResponder {
3258    type ControlHandle = KeyManagerControlHandle;
3259
3260    fn control_handle(&self) -> &KeyManagerControlHandle {
3261        &self.control_handle
3262    }
3263
3264    fn drop_without_shutdown(mut self) {
3265        // Safety: drops once, never accessed again due to mem::forget
3266        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3267        // Prevent Drop from running (which would shut down the channel)
3268        std::mem::forget(self);
3269    }
3270}
3271
3272impl KeyManagerDeleteKeyResponder {
3273    /// Sends a response to the FIDL transaction.
3274    ///
3275    /// Sets the channel to shutdown if an error occurs.
3276    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3277        let _result = self.send_raw(result);
3278        if _result.is_err() {
3279            self.control_handle.shutdown();
3280        }
3281        self.drop_without_shutdown();
3282        _result
3283    }
3284
3285    /// Similar to "send" but does not shutdown the channel if an error occurs.
3286    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3287        let _result = self.send_raw(result);
3288        self.drop_without_shutdown();
3289        _result
3290    }
3291
3292    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3293        self.control_handle
3294            .inner
3295            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3296                result,
3297                self.tx_id,
3298                0x55521e617d023aad,
3299                fidl::encoding::DynamicFlags::empty(),
3300            )
3301    }
3302}
3303
3304#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
3305pub struct StatelessKeyManagerMarker;
3306
3307impl fidl::endpoints::ProtocolMarker for StatelessKeyManagerMarker {
3308    type Proxy = StatelessKeyManagerProxy;
3309    type RequestStream = StatelessKeyManagerRequestStream;
3310    #[cfg(target_os = "fuchsia")]
3311    type SynchronousProxy = StatelessKeyManagerSynchronousProxy;
3312
3313    const DEBUG_NAME: &'static str = "fuchsia.kms.StatelessKeyManager";
3314}
3315impl fidl::endpoints::DiscoverableProtocolMarker for StatelessKeyManagerMarker {}
3316pub type StatelessKeyManagerGetHardwareDerivedKeyResult = Result<Vec<u8>, Error>;
3317
3318pub trait StatelessKeyManagerProxyInterface: Send + Sync {
3319    type GetHardwareDerivedKeyResponseFut: std::future::Future<
3320            Output = Result<StatelessKeyManagerGetHardwareDerivedKeyResult, fidl::Error>,
3321        > + Send;
3322    fn r#get_hardware_derived_key(&self, key_info: &[u8])
3323        -> Self::GetHardwareDerivedKeyResponseFut;
3324}
3325#[derive(Debug)]
3326#[cfg(target_os = "fuchsia")]
3327pub struct StatelessKeyManagerSynchronousProxy {
3328    client: fidl::client::sync::Client,
3329}
3330
3331#[cfg(target_os = "fuchsia")]
3332impl fidl::endpoints::SynchronousProxy for StatelessKeyManagerSynchronousProxy {
3333    type Proxy = StatelessKeyManagerProxy;
3334    type Protocol = StatelessKeyManagerMarker;
3335
3336    fn from_channel(inner: fidl::Channel) -> Self {
3337        Self::new(inner)
3338    }
3339
3340    fn into_channel(self) -> fidl::Channel {
3341        self.client.into_channel()
3342    }
3343
3344    fn as_channel(&self) -> &fidl::Channel {
3345        self.client.as_channel()
3346    }
3347}
3348
3349#[cfg(target_os = "fuchsia")]
3350impl StatelessKeyManagerSynchronousProxy {
3351    pub fn new(channel: fidl::Channel) -> Self {
3352        let protocol_name =
3353            <StatelessKeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3354        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
3355    }
3356
3357    pub fn into_channel(self) -> fidl::Channel {
3358        self.client.into_channel()
3359    }
3360
3361    /// Waits until an event arrives and returns it. It is safe for other
3362    /// threads to make concurrent requests while waiting for an event.
3363    pub fn wait_for_event(
3364        &self,
3365        deadline: zx::MonotonicInstant,
3366    ) -> Result<StatelessKeyManagerEvent, fidl::Error> {
3367        StatelessKeyManagerEvent::decode(self.client.wait_for_event(deadline)?)
3368    }
3369
3370    /// Get a hardware key derived key.
3371    ///
3372    /// Get a key derived from hardware root key using `key_info` as info and the trusted app ID
3373    /// as salt. This call is deterministic and always returns the same result if given the same
3374    /// `key_info` on the same device and would be different across different devices if they have
3375    /// different hardware keys.
3376    pub fn r#get_hardware_derived_key(
3377        &self,
3378        mut key_info: &[u8],
3379        ___deadline: zx::MonotonicInstant,
3380    ) -> Result<StatelessKeyManagerGetHardwareDerivedKeyResult, fidl::Error> {
3381        let _response = self.client.send_query::<
3382            StatelessKeyManagerGetHardwareDerivedKeyRequest,
3383            fidl::encoding::ResultType<StatelessKeyManagerGetHardwareDerivedKeyResponse, Error>,
3384        >(
3385            (key_info,),
3386            0x685043d9e68d5f86,
3387            fidl::encoding::DynamicFlags::empty(),
3388            ___deadline,
3389        )?;
3390        Ok(_response.map(|x| x.derived_key))
3391    }
3392}
3393
3394#[derive(Debug, Clone)]
3395pub struct StatelessKeyManagerProxy {
3396    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3397}
3398
3399impl fidl::endpoints::Proxy for StatelessKeyManagerProxy {
3400    type Protocol = StatelessKeyManagerMarker;
3401
3402    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3403        Self::new(inner)
3404    }
3405
3406    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3407        self.client.into_channel().map_err(|client| Self { client })
3408    }
3409
3410    fn as_channel(&self) -> &::fidl::AsyncChannel {
3411        self.client.as_channel()
3412    }
3413}
3414
3415impl StatelessKeyManagerProxy {
3416    /// Create a new Proxy for fuchsia.kms/StatelessKeyManager.
3417    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3418        let protocol_name =
3419            <StatelessKeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3420        Self { client: fidl::client::Client::new(channel, protocol_name) }
3421    }
3422
3423    /// Get a Stream of events from the remote end of the protocol.
3424    ///
3425    /// # Panics
3426    ///
3427    /// Panics if the event stream was already taken.
3428    pub fn take_event_stream(&self) -> StatelessKeyManagerEventStream {
3429        StatelessKeyManagerEventStream { event_receiver: self.client.take_event_receiver() }
3430    }
3431
3432    /// Get a hardware key derived key.
3433    ///
3434    /// Get a key derived from hardware root key using `key_info` as info and the trusted app ID
3435    /// as salt. This call is deterministic and always returns the same result if given the same
3436    /// `key_info` on the same device and would be different across different devices if they have
3437    /// different hardware keys.
3438    pub fn r#get_hardware_derived_key(
3439        &self,
3440        mut key_info: &[u8],
3441    ) -> fidl::client::QueryResponseFut<
3442        StatelessKeyManagerGetHardwareDerivedKeyResult,
3443        fidl::encoding::DefaultFuchsiaResourceDialect,
3444    > {
3445        StatelessKeyManagerProxyInterface::r#get_hardware_derived_key(self, key_info)
3446    }
3447}
3448
3449impl StatelessKeyManagerProxyInterface for StatelessKeyManagerProxy {
3450    type GetHardwareDerivedKeyResponseFut = fidl::client::QueryResponseFut<
3451        StatelessKeyManagerGetHardwareDerivedKeyResult,
3452        fidl::encoding::DefaultFuchsiaResourceDialect,
3453    >;
3454    fn r#get_hardware_derived_key(
3455        &self,
3456        mut key_info: &[u8],
3457    ) -> Self::GetHardwareDerivedKeyResponseFut {
3458        fn _decode(
3459            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3460        ) -> Result<StatelessKeyManagerGetHardwareDerivedKeyResult, fidl::Error> {
3461            let _response = fidl::client::decode_transaction_body::<
3462                fidl::encoding::ResultType<StatelessKeyManagerGetHardwareDerivedKeyResponse, Error>,
3463                fidl::encoding::DefaultFuchsiaResourceDialect,
3464                0x685043d9e68d5f86,
3465            >(_buf?)?;
3466            Ok(_response.map(|x| x.derived_key))
3467        }
3468        self.client.send_query_and_decode::<
3469            StatelessKeyManagerGetHardwareDerivedKeyRequest,
3470            StatelessKeyManagerGetHardwareDerivedKeyResult,
3471        >(
3472            (key_info,),
3473            0x685043d9e68d5f86,
3474            fidl::encoding::DynamicFlags::empty(),
3475            _decode,
3476        )
3477    }
3478}
3479
3480pub struct StatelessKeyManagerEventStream {
3481    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3482}
3483
3484impl std::marker::Unpin for StatelessKeyManagerEventStream {}
3485
3486impl futures::stream::FusedStream for StatelessKeyManagerEventStream {
3487    fn is_terminated(&self) -> bool {
3488        self.event_receiver.is_terminated()
3489    }
3490}
3491
3492impl futures::Stream for StatelessKeyManagerEventStream {
3493    type Item = Result<StatelessKeyManagerEvent, fidl::Error>;
3494
3495    fn poll_next(
3496        mut self: std::pin::Pin<&mut Self>,
3497        cx: &mut std::task::Context<'_>,
3498    ) -> std::task::Poll<Option<Self::Item>> {
3499        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3500            &mut self.event_receiver,
3501            cx
3502        )?) {
3503            Some(buf) => std::task::Poll::Ready(Some(StatelessKeyManagerEvent::decode(buf))),
3504            None => std::task::Poll::Ready(None),
3505        }
3506    }
3507}
3508
3509#[derive(Debug)]
3510pub enum StatelessKeyManagerEvent {}
3511
3512impl StatelessKeyManagerEvent {
3513    /// Decodes a message buffer as a [`StatelessKeyManagerEvent`].
3514    fn decode(
3515        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3516    ) -> Result<StatelessKeyManagerEvent, fidl::Error> {
3517        let (bytes, _handles) = buf.split_mut();
3518        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3519        debug_assert_eq!(tx_header.tx_id, 0);
3520        match tx_header.ordinal {
3521            _ => Err(fidl::Error::UnknownOrdinal {
3522                ordinal: tx_header.ordinal,
3523                protocol_name:
3524                    <StatelessKeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3525            }),
3526        }
3527    }
3528}
3529
3530/// A Stream of incoming requests for fuchsia.kms/StatelessKeyManager.
3531pub struct StatelessKeyManagerRequestStream {
3532    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3533    is_terminated: bool,
3534}
3535
3536impl std::marker::Unpin for StatelessKeyManagerRequestStream {}
3537
3538impl futures::stream::FusedStream for StatelessKeyManagerRequestStream {
3539    fn is_terminated(&self) -> bool {
3540        self.is_terminated
3541    }
3542}
3543
3544impl fidl::endpoints::RequestStream for StatelessKeyManagerRequestStream {
3545    type Protocol = StatelessKeyManagerMarker;
3546    type ControlHandle = StatelessKeyManagerControlHandle;
3547
3548    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3549        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3550    }
3551
3552    fn control_handle(&self) -> Self::ControlHandle {
3553        StatelessKeyManagerControlHandle { inner: self.inner.clone() }
3554    }
3555
3556    fn into_inner(
3557        self,
3558    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3559    {
3560        (self.inner, self.is_terminated)
3561    }
3562
3563    fn from_inner(
3564        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3565        is_terminated: bool,
3566    ) -> Self {
3567        Self { inner, is_terminated }
3568    }
3569}
3570
3571impl futures::Stream for StatelessKeyManagerRequestStream {
3572    type Item = Result<StatelessKeyManagerRequest, fidl::Error>;
3573
3574    fn poll_next(
3575        mut self: std::pin::Pin<&mut Self>,
3576        cx: &mut std::task::Context<'_>,
3577    ) -> std::task::Poll<Option<Self::Item>> {
3578        let this = &mut *self;
3579        if this.inner.check_shutdown(cx) {
3580            this.is_terminated = true;
3581            return std::task::Poll::Ready(None);
3582        }
3583        if this.is_terminated {
3584            panic!("polled StatelessKeyManagerRequestStream after completion");
3585        }
3586        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3587            |bytes, handles| {
3588                match this.inner.channel().read_etc(cx, bytes, handles) {
3589                    std::task::Poll::Ready(Ok(())) => {}
3590                    std::task::Poll::Pending => return std::task::Poll::Pending,
3591                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3592                        this.is_terminated = true;
3593                        return std::task::Poll::Ready(None);
3594                    }
3595                    std::task::Poll::Ready(Err(e)) => {
3596                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3597                            e.into(),
3598                        ))))
3599                    }
3600                }
3601
3602                // A message has been received from the channel
3603                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3604
3605                std::task::Poll::Ready(Some(match header.ordinal {
3606                0x685043d9e68d5f86 => {
3607                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3608                    let mut req = fidl::new_empty!(StatelessKeyManagerGetHardwareDerivedKeyRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
3609                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<StatelessKeyManagerGetHardwareDerivedKeyRequest>(&header, _body_bytes, handles, &mut req)?;
3610                    let control_handle = StatelessKeyManagerControlHandle {
3611                        inner: this.inner.clone(),
3612                    };
3613                    Ok(StatelessKeyManagerRequest::GetHardwareDerivedKey {key_info: req.key_info,
3614
3615                        responder: StatelessKeyManagerGetHardwareDerivedKeyResponder {
3616                            control_handle: std::mem::ManuallyDrop::new(control_handle),
3617                            tx_id: header.tx_id,
3618                        },
3619                    })
3620                }
3621                _ => Err(fidl::Error::UnknownOrdinal {
3622                    ordinal: header.ordinal,
3623                    protocol_name: <StatelessKeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3624                }),
3625            }))
3626            },
3627        )
3628    }
3629}
3630
3631#[derive(Debug)]
3632pub enum StatelessKeyManagerRequest {
3633    /// Get a hardware key derived key.
3634    ///
3635    /// Get a key derived from hardware root key using `key_info` as info and the trusted app ID
3636    /// as salt. This call is deterministic and always returns the same result if given the same
3637    /// `key_info` on the same device and would be different across different devices if they have
3638    /// different hardware keys.
3639    GetHardwareDerivedKey {
3640        key_info: Vec<u8>,
3641        responder: StatelessKeyManagerGetHardwareDerivedKeyResponder,
3642    },
3643}
3644
3645impl StatelessKeyManagerRequest {
3646    #[allow(irrefutable_let_patterns)]
3647    pub fn into_get_hardware_derived_key(
3648        self,
3649    ) -> Option<(Vec<u8>, StatelessKeyManagerGetHardwareDerivedKeyResponder)> {
3650        if let StatelessKeyManagerRequest::GetHardwareDerivedKey { key_info, responder } = self {
3651            Some((key_info, responder))
3652        } else {
3653            None
3654        }
3655    }
3656
3657    /// Name of the method defined in FIDL
3658    pub fn method_name(&self) -> &'static str {
3659        match *self {
3660            StatelessKeyManagerRequest::GetHardwareDerivedKey { .. } => "get_hardware_derived_key",
3661        }
3662    }
3663}
3664
3665#[derive(Debug, Clone)]
3666pub struct StatelessKeyManagerControlHandle {
3667    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3668}
3669
3670impl fidl::endpoints::ControlHandle for StatelessKeyManagerControlHandle {
3671    fn shutdown(&self) {
3672        self.inner.shutdown()
3673    }
3674    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
3675        self.inner.shutdown_with_epitaph(status)
3676    }
3677
3678    fn is_closed(&self) -> bool {
3679        self.inner.channel().is_closed()
3680    }
3681    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3682        self.inner.channel().on_closed()
3683    }
3684
3685    #[cfg(target_os = "fuchsia")]
3686    fn signal_peer(
3687        &self,
3688        clear_mask: zx::Signals,
3689        set_mask: zx::Signals,
3690    ) -> Result<(), zx_status::Status> {
3691        use fidl::Peered;
3692        self.inner.channel().signal_peer(clear_mask, set_mask)
3693    }
3694}
3695
3696impl StatelessKeyManagerControlHandle {}
3697
3698#[must_use = "FIDL methods require a response to be sent"]
3699#[derive(Debug)]
3700pub struct StatelessKeyManagerGetHardwareDerivedKeyResponder {
3701    control_handle: std::mem::ManuallyDrop<StatelessKeyManagerControlHandle>,
3702    tx_id: u32,
3703}
3704
3705/// Set the the channel to be shutdown (see [`StatelessKeyManagerControlHandle::shutdown`])
3706/// if the responder is dropped without sending a response, so that the client
3707/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3708impl std::ops::Drop for StatelessKeyManagerGetHardwareDerivedKeyResponder {
3709    fn drop(&mut self) {
3710        self.control_handle.shutdown();
3711        // Safety: drops once, never accessed again
3712        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3713    }
3714}
3715
3716impl fidl::endpoints::Responder for StatelessKeyManagerGetHardwareDerivedKeyResponder {
3717    type ControlHandle = StatelessKeyManagerControlHandle;
3718
3719    fn control_handle(&self) -> &StatelessKeyManagerControlHandle {
3720        &self.control_handle
3721    }
3722
3723    fn drop_without_shutdown(mut self) {
3724        // Safety: drops once, never accessed again due to mem::forget
3725        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3726        // Prevent Drop from running (which would shut down the channel)
3727        std::mem::forget(self);
3728    }
3729}
3730
3731impl StatelessKeyManagerGetHardwareDerivedKeyResponder {
3732    /// Sends a response to the FIDL transaction.
3733    ///
3734    /// Sets the channel to shutdown if an error occurs.
3735    pub fn send(self, mut result: Result<&[u8], Error>) -> Result<(), fidl::Error> {
3736        let _result = self.send_raw(result);
3737        if _result.is_err() {
3738            self.control_handle.shutdown();
3739        }
3740        self.drop_without_shutdown();
3741        _result
3742    }
3743
3744    /// Similar to "send" but does not shutdown the channel if an error occurs.
3745    pub fn send_no_shutdown_on_err(
3746        self,
3747        mut result: Result<&[u8], Error>,
3748    ) -> Result<(), fidl::Error> {
3749        let _result = self.send_raw(result);
3750        self.drop_without_shutdown();
3751        _result
3752    }
3753
3754    fn send_raw(&self, mut result: Result<&[u8], Error>) -> Result<(), fidl::Error> {
3755        self.control_handle.inner.send::<fidl::encoding::ResultType<
3756            StatelessKeyManagerGetHardwareDerivedKeyResponse,
3757            Error,
3758        >>(
3759            result.map(|derived_key| (derived_key,)),
3760            self.tx_id,
3761            0x685043d9e68d5f86,
3762            fidl::encoding::DynamicFlags::empty(),
3763        )
3764    }
3765}
3766
3767mod internal {
3768    use super::*;
3769
3770    impl fidl::encoding::ResourceTypeMarker for AsymmetricPrivateKeySignRequest {
3771        type Borrowed<'a> = &'a mut Self;
3772        fn take_or_borrow<'a>(
3773            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3774        ) -> Self::Borrowed<'a> {
3775            value
3776        }
3777    }
3778
3779    unsafe impl fidl::encoding::TypeMarker for AsymmetricPrivateKeySignRequest {
3780        type Owned = Self;
3781
3782        #[inline(always)]
3783        fn inline_align(_context: fidl::encoding::Context) -> usize {
3784            8
3785        }
3786
3787        #[inline(always)]
3788        fn inline_size(_context: fidl::encoding::Context) -> usize {
3789            16
3790        }
3791    }
3792
3793    unsafe impl
3794        fidl::encoding::Encode<
3795            AsymmetricPrivateKeySignRequest,
3796            fidl::encoding::DefaultFuchsiaResourceDialect,
3797        > for &mut AsymmetricPrivateKeySignRequest
3798    {
3799        #[inline]
3800        unsafe fn encode(
3801            self,
3802            encoder: &mut fidl::encoding::Encoder<
3803                '_,
3804                fidl::encoding::DefaultFuchsiaResourceDialect,
3805            >,
3806            offset: usize,
3807            _depth: fidl::encoding::Depth,
3808        ) -> fidl::Result<()> {
3809            encoder.debug_check_bounds::<AsymmetricPrivateKeySignRequest>(offset);
3810            // Delegate to tuple encoding.
3811            fidl::encoding::Encode::<
3812                AsymmetricPrivateKeySignRequest,
3813                fidl::encoding::DefaultFuchsiaResourceDialect,
3814            >::encode(
3815                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
3816                    &mut self.data,
3817                ),),
3818                encoder,
3819                offset,
3820                _depth,
3821            )
3822        }
3823    }
3824    unsafe impl<
3825            T0: fidl::encoding::Encode<
3826                fidl_fuchsia_mem::Buffer,
3827                fidl::encoding::DefaultFuchsiaResourceDialect,
3828            >,
3829        >
3830        fidl::encoding::Encode<
3831            AsymmetricPrivateKeySignRequest,
3832            fidl::encoding::DefaultFuchsiaResourceDialect,
3833        > for (T0,)
3834    {
3835        #[inline]
3836        unsafe fn encode(
3837            self,
3838            encoder: &mut fidl::encoding::Encoder<
3839                '_,
3840                fidl::encoding::DefaultFuchsiaResourceDialect,
3841            >,
3842            offset: usize,
3843            depth: fidl::encoding::Depth,
3844        ) -> fidl::Result<()> {
3845            encoder.debug_check_bounds::<AsymmetricPrivateKeySignRequest>(offset);
3846            // Zero out padding regions. There's no need to apply masks
3847            // because the unmasked parts will be overwritten by fields.
3848            // Write the fields.
3849            self.0.encode(encoder, offset + 0, depth)?;
3850            Ok(())
3851        }
3852    }
3853
3854    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3855        for AsymmetricPrivateKeySignRequest
3856    {
3857        #[inline(always)]
3858        fn new_empty() -> Self {
3859            Self {
3860                data: fidl::new_empty!(
3861                    fidl_fuchsia_mem::Buffer,
3862                    fidl::encoding::DefaultFuchsiaResourceDialect
3863                ),
3864            }
3865        }
3866
3867        #[inline]
3868        unsafe fn decode(
3869            &mut self,
3870            decoder: &mut fidl::encoding::Decoder<
3871                '_,
3872                fidl::encoding::DefaultFuchsiaResourceDialect,
3873            >,
3874            offset: usize,
3875            _depth: fidl::encoding::Depth,
3876        ) -> fidl::Result<()> {
3877            decoder.debug_check_bounds::<Self>(offset);
3878            // Verify that padding bytes are zero.
3879            fidl::decode!(
3880                fidl_fuchsia_mem::Buffer,
3881                fidl::encoding::DefaultFuchsiaResourceDialect,
3882                &mut self.data,
3883                decoder,
3884                offset + 0,
3885                _depth
3886            )?;
3887            Ok(())
3888        }
3889    }
3890
3891    impl fidl::encoding::ResourceTypeMarker for KeyManagerGenerateAsymmetricKeyRequest {
3892        type Borrowed<'a> = &'a mut Self;
3893        fn take_or_borrow<'a>(
3894            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3895        ) -> Self::Borrowed<'a> {
3896            value
3897        }
3898    }
3899
3900    unsafe impl fidl::encoding::TypeMarker for KeyManagerGenerateAsymmetricKeyRequest {
3901        type Owned = Self;
3902
3903        #[inline(always)]
3904        fn inline_align(_context: fidl::encoding::Context) -> usize {
3905            8
3906        }
3907
3908        #[inline(always)]
3909        fn inline_size(_context: fidl::encoding::Context) -> usize {
3910            24
3911        }
3912    }
3913
3914    unsafe impl
3915        fidl::encoding::Encode<
3916            KeyManagerGenerateAsymmetricKeyRequest,
3917            fidl::encoding::DefaultFuchsiaResourceDialect,
3918        > for &mut KeyManagerGenerateAsymmetricKeyRequest
3919    {
3920        #[inline]
3921        unsafe fn encode(
3922            self,
3923            encoder: &mut fidl::encoding::Encoder<
3924                '_,
3925                fidl::encoding::DefaultFuchsiaResourceDialect,
3926            >,
3927            offset: usize,
3928            _depth: fidl::encoding::Depth,
3929        ) -> fidl::Result<()> {
3930            encoder.debug_check_bounds::<KeyManagerGenerateAsymmetricKeyRequest>(offset);
3931            // Delegate to tuple encoding.
3932            fidl::encoding::Encode::<
3933                KeyManagerGenerateAsymmetricKeyRequest,
3934                fidl::encoding::DefaultFuchsiaResourceDialect,
3935            >::encode(
3936                (
3937                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(
3938                        &self.key_name,
3939                    ),
3940                    <fidl::encoding::Endpoint<
3941                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
3942                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
3943                        &mut self.key
3944                    ),
3945                ),
3946                encoder,
3947                offset,
3948                _depth,
3949            )
3950        }
3951    }
3952    unsafe impl<
3953            T0: fidl::encoding::Encode<
3954                fidl::encoding::BoundedString<32>,
3955                fidl::encoding::DefaultFuchsiaResourceDialect,
3956            >,
3957            T1: fidl::encoding::Encode<
3958                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
3959                fidl::encoding::DefaultFuchsiaResourceDialect,
3960            >,
3961        >
3962        fidl::encoding::Encode<
3963            KeyManagerGenerateAsymmetricKeyRequest,
3964            fidl::encoding::DefaultFuchsiaResourceDialect,
3965        > for (T0, T1)
3966    {
3967        #[inline]
3968        unsafe fn encode(
3969            self,
3970            encoder: &mut fidl::encoding::Encoder<
3971                '_,
3972                fidl::encoding::DefaultFuchsiaResourceDialect,
3973            >,
3974            offset: usize,
3975            depth: fidl::encoding::Depth,
3976        ) -> fidl::Result<()> {
3977            encoder.debug_check_bounds::<KeyManagerGenerateAsymmetricKeyRequest>(offset);
3978            // Zero out padding regions. There's no need to apply masks
3979            // because the unmasked parts will be overwritten by fields.
3980            unsafe {
3981                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3982                (ptr as *mut u64).write_unaligned(0);
3983            }
3984            // Write the fields.
3985            self.0.encode(encoder, offset + 0, depth)?;
3986            self.1.encode(encoder, offset + 16, depth)?;
3987            Ok(())
3988        }
3989    }
3990
3991    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3992        for KeyManagerGenerateAsymmetricKeyRequest
3993    {
3994        #[inline(always)]
3995        fn new_empty() -> Self {
3996            Self {
3997                key_name: fidl::new_empty!(
3998                    fidl::encoding::BoundedString<32>,
3999                    fidl::encoding::DefaultFuchsiaResourceDialect
4000                ),
4001                key: fidl::new_empty!(
4002                    fidl::encoding::Endpoint<
4003                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4004                    >,
4005                    fidl::encoding::DefaultFuchsiaResourceDialect
4006                ),
4007            }
4008        }
4009
4010        #[inline]
4011        unsafe fn decode(
4012            &mut self,
4013            decoder: &mut fidl::encoding::Decoder<
4014                '_,
4015                fidl::encoding::DefaultFuchsiaResourceDialect,
4016            >,
4017            offset: usize,
4018            _depth: fidl::encoding::Depth,
4019        ) -> fidl::Result<()> {
4020            decoder.debug_check_bounds::<Self>(offset);
4021            // Verify that padding bytes are zero.
4022            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
4023            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4024            let mask = 0xffffffff00000000u64;
4025            let maskedval = padval & mask;
4026            if maskedval != 0 {
4027                return Err(fidl::Error::NonZeroPadding {
4028                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
4029                });
4030            }
4031            fidl::decode!(
4032                fidl::encoding::BoundedString<32>,
4033                fidl::encoding::DefaultFuchsiaResourceDialect,
4034                &mut self.key_name,
4035                decoder,
4036                offset + 0,
4037                _depth
4038            )?;
4039            fidl::decode!(
4040                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4041                fidl::encoding::DefaultFuchsiaResourceDialect,
4042                &mut self.key,
4043                decoder,
4044                offset + 16,
4045                _depth
4046            )?;
4047            Ok(())
4048        }
4049    }
4050
4051    impl fidl::encoding::ResourceTypeMarker for KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest {
4052        type Borrowed<'a> = &'a mut Self;
4053        fn take_or_borrow<'a>(
4054            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4055        ) -> Self::Borrowed<'a> {
4056            value
4057        }
4058    }
4059
4060    unsafe impl fidl::encoding::TypeMarker for KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest {
4061        type Owned = Self;
4062
4063        #[inline(always)]
4064        fn inline_align(_context: fidl::encoding::Context) -> usize {
4065            8
4066        }
4067
4068        #[inline(always)]
4069        fn inline_size(_context: fidl::encoding::Context) -> usize {
4070            24
4071        }
4072    }
4073
4074    unsafe impl
4075        fidl::encoding::Encode<
4076            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
4077            fidl::encoding::DefaultFuchsiaResourceDialect,
4078        > for &mut KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest
4079    {
4080        #[inline]
4081        unsafe fn encode(
4082            self,
4083            encoder: &mut fidl::encoding::Encoder<
4084                '_,
4085                fidl::encoding::DefaultFuchsiaResourceDialect,
4086            >,
4087            offset: usize,
4088            _depth: fidl::encoding::Depth,
4089        ) -> fidl::Result<()> {
4090            encoder
4091                .debug_check_bounds::<KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest>(offset);
4092            // Delegate to tuple encoding.
4093            fidl::encoding::Encode::<
4094                KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
4095                fidl::encoding::DefaultFuchsiaResourceDialect,
4096            >::encode(
4097                (
4098                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(
4099                        &self.key_name,
4100                    ),
4101                    <AsymmetricKeyAlgorithm as fidl::encoding::ValueTypeMarker>::borrow(
4102                        &self.key_algorithm,
4103                    ),
4104                    <fidl::encoding::Endpoint<
4105                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4106                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4107                        &mut self.key
4108                    ),
4109                ),
4110                encoder,
4111                offset,
4112                _depth,
4113            )
4114        }
4115    }
4116    unsafe impl<
4117            T0: fidl::encoding::Encode<
4118                fidl::encoding::BoundedString<32>,
4119                fidl::encoding::DefaultFuchsiaResourceDialect,
4120            >,
4121            T1: fidl::encoding::Encode<
4122                AsymmetricKeyAlgorithm,
4123                fidl::encoding::DefaultFuchsiaResourceDialect,
4124            >,
4125            T2: fidl::encoding::Encode<
4126                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4127                fidl::encoding::DefaultFuchsiaResourceDialect,
4128            >,
4129        >
4130        fidl::encoding::Encode<
4131            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
4132            fidl::encoding::DefaultFuchsiaResourceDialect,
4133        > for (T0, T1, T2)
4134    {
4135        #[inline]
4136        unsafe fn encode(
4137            self,
4138            encoder: &mut fidl::encoding::Encoder<
4139                '_,
4140                fidl::encoding::DefaultFuchsiaResourceDialect,
4141            >,
4142            offset: usize,
4143            depth: fidl::encoding::Depth,
4144        ) -> fidl::Result<()> {
4145            encoder
4146                .debug_check_bounds::<KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest>(offset);
4147            // Zero out padding regions. There's no need to apply masks
4148            // because the unmasked parts will be overwritten by fields.
4149            // Write the fields.
4150            self.0.encode(encoder, offset + 0, depth)?;
4151            self.1.encode(encoder, offset + 16, depth)?;
4152            self.2.encode(encoder, offset + 20, depth)?;
4153            Ok(())
4154        }
4155    }
4156
4157    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4158        for KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest
4159    {
4160        #[inline(always)]
4161        fn new_empty() -> Self {
4162            Self {
4163                key_name: fidl::new_empty!(
4164                    fidl::encoding::BoundedString<32>,
4165                    fidl::encoding::DefaultFuchsiaResourceDialect
4166                ),
4167                key_algorithm: fidl::new_empty!(
4168                    AsymmetricKeyAlgorithm,
4169                    fidl::encoding::DefaultFuchsiaResourceDialect
4170                ),
4171                key: fidl::new_empty!(
4172                    fidl::encoding::Endpoint<
4173                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4174                    >,
4175                    fidl::encoding::DefaultFuchsiaResourceDialect
4176                ),
4177            }
4178        }
4179
4180        #[inline]
4181        unsafe fn decode(
4182            &mut self,
4183            decoder: &mut fidl::encoding::Decoder<
4184                '_,
4185                fidl::encoding::DefaultFuchsiaResourceDialect,
4186            >,
4187            offset: usize,
4188            _depth: fidl::encoding::Depth,
4189        ) -> fidl::Result<()> {
4190            decoder.debug_check_bounds::<Self>(offset);
4191            // Verify that padding bytes are zero.
4192            fidl::decode!(
4193                fidl::encoding::BoundedString<32>,
4194                fidl::encoding::DefaultFuchsiaResourceDialect,
4195                &mut self.key_name,
4196                decoder,
4197                offset + 0,
4198                _depth
4199            )?;
4200            fidl::decode!(
4201                AsymmetricKeyAlgorithm,
4202                fidl::encoding::DefaultFuchsiaResourceDialect,
4203                &mut self.key_algorithm,
4204                decoder,
4205                offset + 16,
4206                _depth
4207            )?;
4208            fidl::decode!(
4209                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4210                fidl::encoding::DefaultFuchsiaResourceDialect,
4211                &mut self.key,
4212                decoder,
4213                offset + 20,
4214                _depth
4215            )?;
4216            Ok(())
4217        }
4218    }
4219
4220    impl fidl::encoding::ResourceTypeMarker for KeyManagerGetAsymmetricPrivateKeyRequest {
4221        type Borrowed<'a> = &'a mut Self;
4222        fn take_or_borrow<'a>(
4223            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4224        ) -> Self::Borrowed<'a> {
4225            value
4226        }
4227    }
4228
4229    unsafe impl fidl::encoding::TypeMarker for KeyManagerGetAsymmetricPrivateKeyRequest {
4230        type Owned = Self;
4231
4232        #[inline(always)]
4233        fn inline_align(_context: fidl::encoding::Context) -> usize {
4234            8
4235        }
4236
4237        #[inline(always)]
4238        fn inline_size(_context: fidl::encoding::Context) -> usize {
4239            24
4240        }
4241    }
4242
4243    unsafe impl
4244        fidl::encoding::Encode<
4245            KeyManagerGetAsymmetricPrivateKeyRequest,
4246            fidl::encoding::DefaultFuchsiaResourceDialect,
4247        > for &mut KeyManagerGetAsymmetricPrivateKeyRequest
4248    {
4249        #[inline]
4250        unsafe fn encode(
4251            self,
4252            encoder: &mut fidl::encoding::Encoder<
4253                '_,
4254                fidl::encoding::DefaultFuchsiaResourceDialect,
4255            >,
4256            offset: usize,
4257            _depth: fidl::encoding::Depth,
4258        ) -> fidl::Result<()> {
4259            encoder.debug_check_bounds::<KeyManagerGetAsymmetricPrivateKeyRequest>(offset);
4260            // Delegate to tuple encoding.
4261            fidl::encoding::Encode::<
4262                KeyManagerGetAsymmetricPrivateKeyRequest,
4263                fidl::encoding::DefaultFuchsiaResourceDialect,
4264            >::encode(
4265                (
4266                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(
4267                        &self.key_name,
4268                    ),
4269                    <fidl::encoding::Endpoint<
4270                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4271                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4272                        &mut self.key
4273                    ),
4274                ),
4275                encoder,
4276                offset,
4277                _depth,
4278            )
4279        }
4280    }
4281    unsafe impl<
4282            T0: fidl::encoding::Encode<
4283                fidl::encoding::BoundedString<32>,
4284                fidl::encoding::DefaultFuchsiaResourceDialect,
4285            >,
4286            T1: fidl::encoding::Encode<
4287                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4288                fidl::encoding::DefaultFuchsiaResourceDialect,
4289            >,
4290        >
4291        fidl::encoding::Encode<
4292            KeyManagerGetAsymmetricPrivateKeyRequest,
4293            fidl::encoding::DefaultFuchsiaResourceDialect,
4294        > for (T0, T1)
4295    {
4296        #[inline]
4297        unsafe fn encode(
4298            self,
4299            encoder: &mut fidl::encoding::Encoder<
4300                '_,
4301                fidl::encoding::DefaultFuchsiaResourceDialect,
4302            >,
4303            offset: usize,
4304            depth: fidl::encoding::Depth,
4305        ) -> fidl::Result<()> {
4306            encoder.debug_check_bounds::<KeyManagerGetAsymmetricPrivateKeyRequest>(offset);
4307            // Zero out padding regions. There's no need to apply masks
4308            // because the unmasked parts will be overwritten by fields.
4309            unsafe {
4310                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
4311                (ptr as *mut u64).write_unaligned(0);
4312            }
4313            // Write the fields.
4314            self.0.encode(encoder, offset + 0, depth)?;
4315            self.1.encode(encoder, offset + 16, depth)?;
4316            Ok(())
4317        }
4318    }
4319
4320    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4321        for KeyManagerGetAsymmetricPrivateKeyRequest
4322    {
4323        #[inline(always)]
4324        fn new_empty() -> Self {
4325            Self {
4326                key_name: fidl::new_empty!(
4327                    fidl::encoding::BoundedString<32>,
4328                    fidl::encoding::DefaultFuchsiaResourceDialect
4329                ),
4330                key: fidl::new_empty!(
4331                    fidl::encoding::Endpoint<
4332                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4333                    >,
4334                    fidl::encoding::DefaultFuchsiaResourceDialect
4335                ),
4336            }
4337        }
4338
4339        #[inline]
4340        unsafe fn decode(
4341            &mut self,
4342            decoder: &mut fidl::encoding::Decoder<
4343                '_,
4344                fidl::encoding::DefaultFuchsiaResourceDialect,
4345            >,
4346            offset: usize,
4347            _depth: fidl::encoding::Depth,
4348        ) -> fidl::Result<()> {
4349            decoder.debug_check_bounds::<Self>(offset);
4350            // Verify that padding bytes are zero.
4351            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
4352            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4353            let mask = 0xffffffff00000000u64;
4354            let maskedval = padval & mask;
4355            if maskedval != 0 {
4356                return Err(fidl::Error::NonZeroPadding {
4357                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
4358                });
4359            }
4360            fidl::decode!(
4361                fidl::encoding::BoundedString<32>,
4362                fidl::encoding::DefaultFuchsiaResourceDialect,
4363                &mut self.key_name,
4364                decoder,
4365                offset + 0,
4366                _depth
4367            )?;
4368            fidl::decode!(
4369                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4370                fidl::encoding::DefaultFuchsiaResourceDialect,
4371                &mut self.key,
4372                decoder,
4373                offset + 16,
4374                _depth
4375            )?;
4376            Ok(())
4377        }
4378    }
4379
4380    impl fidl::encoding::ResourceTypeMarker for KeyManagerImportAsymmetricPrivateKeyRequest {
4381        type Borrowed<'a> = &'a mut Self;
4382        fn take_or_borrow<'a>(
4383            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4384        ) -> Self::Borrowed<'a> {
4385            value
4386        }
4387    }
4388
4389    unsafe impl fidl::encoding::TypeMarker for KeyManagerImportAsymmetricPrivateKeyRequest {
4390        type Owned = Self;
4391
4392        #[inline(always)]
4393        fn inline_align(_context: fidl::encoding::Context) -> usize {
4394            8
4395        }
4396
4397        #[inline(always)]
4398        fn inline_size(_context: fidl::encoding::Context) -> usize {
4399            40
4400        }
4401    }
4402
4403    unsafe impl
4404        fidl::encoding::Encode<
4405            KeyManagerImportAsymmetricPrivateKeyRequest,
4406            fidl::encoding::DefaultFuchsiaResourceDialect,
4407        > for &mut KeyManagerImportAsymmetricPrivateKeyRequest
4408    {
4409        #[inline]
4410        unsafe fn encode(
4411            self,
4412            encoder: &mut fidl::encoding::Encoder<
4413                '_,
4414                fidl::encoding::DefaultFuchsiaResourceDialect,
4415            >,
4416            offset: usize,
4417            _depth: fidl::encoding::Depth,
4418        ) -> fidl::Result<()> {
4419            encoder.debug_check_bounds::<KeyManagerImportAsymmetricPrivateKeyRequest>(offset);
4420            // Delegate to tuple encoding.
4421            fidl::encoding::Encode::<KeyManagerImportAsymmetricPrivateKeyRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
4422                (
4423                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.data),
4424                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(&self.key_name),
4425                    <AsymmetricKeyAlgorithm as fidl::encoding::ValueTypeMarker>::borrow(&self.key_algorithm),
4426                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.key),
4427                ),
4428                encoder, offset, _depth
4429            )
4430        }
4431    }
4432    unsafe impl<
4433            T0: fidl::encoding::Encode<
4434                fidl::encoding::UnboundedVector<u8>,
4435                fidl::encoding::DefaultFuchsiaResourceDialect,
4436            >,
4437            T1: fidl::encoding::Encode<
4438                fidl::encoding::BoundedString<32>,
4439                fidl::encoding::DefaultFuchsiaResourceDialect,
4440            >,
4441            T2: fidl::encoding::Encode<
4442                AsymmetricKeyAlgorithm,
4443                fidl::encoding::DefaultFuchsiaResourceDialect,
4444            >,
4445            T3: fidl::encoding::Encode<
4446                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4447                fidl::encoding::DefaultFuchsiaResourceDialect,
4448            >,
4449        >
4450        fidl::encoding::Encode<
4451            KeyManagerImportAsymmetricPrivateKeyRequest,
4452            fidl::encoding::DefaultFuchsiaResourceDialect,
4453        > for (T0, T1, T2, T3)
4454    {
4455        #[inline]
4456        unsafe fn encode(
4457            self,
4458            encoder: &mut fidl::encoding::Encoder<
4459                '_,
4460                fidl::encoding::DefaultFuchsiaResourceDialect,
4461            >,
4462            offset: usize,
4463            depth: fidl::encoding::Depth,
4464        ) -> fidl::Result<()> {
4465            encoder.debug_check_bounds::<KeyManagerImportAsymmetricPrivateKeyRequest>(offset);
4466            // Zero out padding regions. There's no need to apply masks
4467            // because the unmasked parts will be overwritten by fields.
4468            // Write the fields.
4469            self.0.encode(encoder, offset + 0, depth)?;
4470            self.1.encode(encoder, offset + 16, depth)?;
4471            self.2.encode(encoder, offset + 32, depth)?;
4472            self.3.encode(encoder, offset + 36, depth)?;
4473            Ok(())
4474        }
4475    }
4476
4477    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4478        for KeyManagerImportAsymmetricPrivateKeyRequest
4479    {
4480        #[inline(always)]
4481        fn new_empty() -> Self {
4482            Self {
4483                data: fidl::new_empty!(
4484                    fidl::encoding::UnboundedVector<u8>,
4485                    fidl::encoding::DefaultFuchsiaResourceDialect
4486                ),
4487                key_name: fidl::new_empty!(
4488                    fidl::encoding::BoundedString<32>,
4489                    fidl::encoding::DefaultFuchsiaResourceDialect
4490                ),
4491                key_algorithm: fidl::new_empty!(
4492                    AsymmetricKeyAlgorithm,
4493                    fidl::encoding::DefaultFuchsiaResourceDialect
4494                ),
4495                key: fidl::new_empty!(
4496                    fidl::encoding::Endpoint<
4497                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4498                    >,
4499                    fidl::encoding::DefaultFuchsiaResourceDialect
4500                ),
4501            }
4502        }
4503
4504        #[inline]
4505        unsafe fn decode(
4506            &mut self,
4507            decoder: &mut fidl::encoding::Decoder<
4508                '_,
4509                fidl::encoding::DefaultFuchsiaResourceDialect,
4510            >,
4511            offset: usize,
4512            _depth: fidl::encoding::Depth,
4513        ) -> fidl::Result<()> {
4514            decoder.debug_check_bounds::<Self>(offset);
4515            // Verify that padding bytes are zero.
4516            fidl::decode!(
4517                fidl::encoding::UnboundedVector<u8>,
4518                fidl::encoding::DefaultFuchsiaResourceDialect,
4519                &mut self.data,
4520                decoder,
4521                offset + 0,
4522                _depth
4523            )?;
4524            fidl::decode!(
4525                fidl::encoding::BoundedString<32>,
4526                fidl::encoding::DefaultFuchsiaResourceDialect,
4527                &mut self.key_name,
4528                decoder,
4529                offset + 16,
4530                _depth
4531            )?;
4532            fidl::decode!(
4533                AsymmetricKeyAlgorithm,
4534                fidl::encoding::DefaultFuchsiaResourceDialect,
4535                &mut self.key_algorithm,
4536                decoder,
4537                offset + 32,
4538                _depth
4539            )?;
4540            fidl::decode!(
4541                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4542                fidl::encoding::DefaultFuchsiaResourceDialect,
4543                &mut self.key,
4544                decoder,
4545                offset + 36,
4546                _depth
4547            )?;
4548            Ok(())
4549        }
4550    }
4551
4552    impl fidl::encoding::ResourceTypeMarker for KeyManagerSealDataRequest {
4553        type Borrowed<'a> = &'a mut Self;
4554        fn take_or_borrow<'a>(
4555            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4556        ) -> Self::Borrowed<'a> {
4557            value
4558        }
4559    }
4560
4561    unsafe impl fidl::encoding::TypeMarker for KeyManagerSealDataRequest {
4562        type Owned = Self;
4563
4564        #[inline(always)]
4565        fn inline_align(_context: fidl::encoding::Context) -> usize {
4566            8
4567        }
4568
4569        #[inline(always)]
4570        fn inline_size(_context: fidl::encoding::Context) -> usize {
4571            16
4572        }
4573    }
4574
4575    unsafe impl
4576        fidl::encoding::Encode<
4577            KeyManagerSealDataRequest,
4578            fidl::encoding::DefaultFuchsiaResourceDialect,
4579        > for &mut KeyManagerSealDataRequest
4580    {
4581        #[inline]
4582        unsafe fn encode(
4583            self,
4584            encoder: &mut fidl::encoding::Encoder<
4585                '_,
4586                fidl::encoding::DefaultFuchsiaResourceDialect,
4587            >,
4588            offset: usize,
4589            _depth: fidl::encoding::Depth,
4590        ) -> fidl::Result<()> {
4591            encoder.debug_check_bounds::<KeyManagerSealDataRequest>(offset);
4592            // Delegate to tuple encoding.
4593            fidl::encoding::Encode::<
4594                KeyManagerSealDataRequest,
4595                fidl::encoding::DefaultFuchsiaResourceDialect,
4596            >::encode(
4597                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4598                    &mut self.plain_text,
4599                ),),
4600                encoder,
4601                offset,
4602                _depth,
4603            )
4604        }
4605    }
4606    unsafe impl<
4607            T0: fidl::encoding::Encode<
4608                fidl_fuchsia_mem::Buffer,
4609                fidl::encoding::DefaultFuchsiaResourceDialect,
4610            >,
4611        >
4612        fidl::encoding::Encode<
4613            KeyManagerSealDataRequest,
4614            fidl::encoding::DefaultFuchsiaResourceDialect,
4615        > for (T0,)
4616    {
4617        #[inline]
4618        unsafe fn encode(
4619            self,
4620            encoder: &mut fidl::encoding::Encoder<
4621                '_,
4622                fidl::encoding::DefaultFuchsiaResourceDialect,
4623            >,
4624            offset: usize,
4625            depth: fidl::encoding::Depth,
4626        ) -> fidl::Result<()> {
4627            encoder.debug_check_bounds::<KeyManagerSealDataRequest>(offset);
4628            // Zero out padding regions. There's no need to apply masks
4629            // because the unmasked parts will be overwritten by fields.
4630            // Write the fields.
4631            self.0.encode(encoder, offset + 0, depth)?;
4632            Ok(())
4633        }
4634    }
4635
4636    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4637        for KeyManagerSealDataRequest
4638    {
4639        #[inline(always)]
4640        fn new_empty() -> Self {
4641            Self {
4642                plain_text: fidl::new_empty!(
4643                    fidl_fuchsia_mem::Buffer,
4644                    fidl::encoding::DefaultFuchsiaResourceDialect
4645                ),
4646            }
4647        }
4648
4649        #[inline]
4650        unsafe fn decode(
4651            &mut self,
4652            decoder: &mut fidl::encoding::Decoder<
4653                '_,
4654                fidl::encoding::DefaultFuchsiaResourceDialect,
4655            >,
4656            offset: usize,
4657            _depth: fidl::encoding::Depth,
4658        ) -> fidl::Result<()> {
4659            decoder.debug_check_bounds::<Self>(offset);
4660            // Verify that padding bytes are zero.
4661            fidl::decode!(
4662                fidl_fuchsia_mem::Buffer,
4663                fidl::encoding::DefaultFuchsiaResourceDialect,
4664                &mut self.plain_text,
4665                decoder,
4666                offset + 0,
4667                _depth
4668            )?;
4669            Ok(())
4670        }
4671    }
4672
4673    impl fidl::encoding::ResourceTypeMarker for KeyManagerUnsealDataRequest {
4674        type Borrowed<'a> = &'a mut Self;
4675        fn take_or_borrow<'a>(
4676            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4677        ) -> Self::Borrowed<'a> {
4678            value
4679        }
4680    }
4681
4682    unsafe impl fidl::encoding::TypeMarker for KeyManagerUnsealDataRequest {
4683        type Owned = Self;
4684
4685        #[inline(always)]
4686        fn inline_align(_context: fidl::encoding::Context) -> usize {
4687            8
4688        }
4689
4690        #[inline(always)]
4691        fn inline_size(_context: fidl::encoding::Context) -> usize {
4692            16
4693        }
4694    }
4695
4696    unsafe impl
4697        fidl::encoding::Encode<
4698            KeyManagerUnsealDataRequest,
4699            fidl::encoding::DefaultFuchsiaResourceDialect,
4700        > for &mut KeyManagerUnsealDataRequest
4701    {
4702        #[inline]
4703        unsafe fn encode(
4704            self,
4705            encoder: &mut fidl::encoding::Encoder<
4706                '_,
4707                fidl::encoding::DefaultFuchsiaResourceDialect,
4708            >,
4709            offset: usize,
4710            _depth: fidl::encoding::Depth,
4711        ) -> fidl::Result<()> {
4712            encoder.debug_check_bounds::<KeyManagerUnsealDataRequest>(offset);
4713            // Delegate to tuple encoding.
4714            fidl::encoding::Encode::<
4715                KeyManagerUnsealDataRequest,
4716                fidl::encoding::DefaultFuchsiaResourceDialect,
4717            >::encode(
4718                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4719                    &mut self.cipher_text,
4720                ),),
4721                encoder,
4722                offset,
4723                _depth,
4724            )
4725        }
4726    }
4727    unsafe impl<
4728            T0: fidl::encoding::Encode<
4729                fidl_fuchsia_mem::Buffer,
4730                fidl::encoding::DefaultFuchsiaResourceDialect,
4731            >,
4732        >
4733        fidl::encoding::Encode<
4734            KeyManagerUnsealDataRequest,
4735            fidl::encoding::DefaultFuchsiaResourceDialect,
4736        > for (T0,)
4737    {
4738        #[inline]
4739        unsafe fn encode(
4740            self,
4741            encoder: &mut fidl::encoding::Encoder<
4742                '_,
4743                fidl::encoding::DefaultFuchsiaResourceDialect,
4744            >,
4745            offset: usize,
4746            depth: fidl::encoding::Depth,
4747        ) -> fidl::Result<()> {
4748            encoder.debug_check_bounds::<KeyManagerUnsealDataRequest>(offset);
4749            // Zero out padding regions. There's no need to apply masks
4750            // because the unmasked parts will be overwritten by fields.
4751            // Write the fields.
4752            self.0.encode(encoder, offset + 0, depth)?;
4753            Ok(())
4754        }
4755    }
4756
4757    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4758        for KeyManagerUnsealDataRequest
4759    {
4760        #[inline(always)]
4761        fn new_empty() -> Self {
4762            Self {
4763                cipher_text: fidl::new_empty!(
4764                    fidl_fuchsia_mem::Buffer,
4765                    fidl::encoding::DefaultFuchsiaResourceDialect
4766                ),
4767            }
4768        }
4769
4770        #[inline]
4771        unsafe fn decode(
4772            &mut self,
4773            decoder: &mut fidl::encoding::Decoder<
4774                '_,
4775                fidl::encoding::DefaultFuchsiaResourceDialect,
4776            >,
4777            offset: usize,
4778            _depth: fidl::encoding::Depth,
4779        ) -> fidl::Result<()> {
4780            decoder.debug_check_bounds::<Self>(offset);
4781            // Verify that padding bytes are zero.
4782            fidl::decode!(
4783                fidl_fuchsia_mem::Buffer,
4784                fidl::encoding::DefaultFuchsiaResourceDialect,
4785                &mut self.cipher_text,
4786                decoder,
4787                offset + 0,
4788                _depth
4789            )?;
4790            Ok(())
4791        }
4792    }
4793
4794    impl fidl::encoding::ResourceTypeMarker for KeyManagerSealDataResponse {
4795        type Borrowed<'a> = &'a mut Self;
4796        fn take_or_borrow<'a>(
4797            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4798        ) -> Self::Borrowed<'a> {
4799            value
4800        }
4801    }
4802
4803    unsafe impl fidl::encoding::TypeMarker for KeyManagerSealDataResponse {
4804        type Owned = Self;
4805
4806        #[inline(always)]
4807        fn inline_align(_context: fidl::encoding::Context) -> usize {
4808            8
4809        }
4810
4811        #[inline(always)]
4812        fn inline_size(_context: fidl::encoding::Context) -> usize {
4813            16
4814        }
4815    }
4816
4817    unsafe impl
4818        fidl::encoding::Encode<
4819            KeyManagerSealDataResponse,
4820            fidl::encoding::DefaultFuchsiaResourceDialect,
4821        > for &mut KeyManagerSealDataResponse
4822    {
4823        #[inline]
4824        unsafe fn encode(
4825            self,
4826            encoder: &mut fidl::encoding::Encoder<
4827                '_,
4828                fidl::encoding::DefaultFuchsiaResourceDialect,
4829            >,
4830            offset: usize,
4831            _depth: fidl::encoding::Depth,
4832        ) -> fidl::Result<()> {
4833            encoder.debug_check_bounds::<KeyManagerSealDataResponse>(offset);
4834            // Delegate to tuple encoding.
4835            fidl::encoding::Encode::<
4836                KeyManagerSealDataResponse,
4837                fidl::encoding::DefaultFuchsiaResourceDialect,
4838            >::encode(
4839                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4840                    &mut self.cipher_text,
4841                ),),
4842                encoder,
4843                offset,
4844                _depth,
4845            )
4846        }
4847    }
4848    unsafe impl<
4849            T0: fidl::encoding::Encode<
4850                fidl_fuchsia_mem::Buffer,
4851                fidl::encoding::DefaultFuchsiaResourceDialect,
4852            >,
4853        >
4854        fidl::encoding::Encode<
4855            KeyManagerSealDataResponse,
4856            fidl::encoding::DefaultFuchsiaResourceDialect,
4857        > for (T0,)
4858    {
4859        #[inline]
4860        unsafe fn encode(
4861            self,
4862            encoder: &mut fidl::encoding::Encoder<
4863                '_,
4864                fidl::encoding::DefaultFuchsiaResourceDialect,
4865            >,
4866            offset: usize,
4867            depth: fidl::encoding::Depth,
4868        ) -> fidl::Result<()> {
4869            encoder.debug_check_bounds::<KeyManagerSealDataResponse>(offset);
4870            // Zero out padding regions. There's no need to apply masks
4871            // because the unmasked parts will be overwritten by fields.
4872            // Write the fields.
4873            self.0.encode(encoder, offset + 0, depth)?;
4874            Ok(())
4875        }
4876    }
4877
4878    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4879        for KeyManagerSealDataResponse
4880    {
4881        #[inline(always)]
4882        fn new_empty() -> Self {
4883            Self {
4884                cipher_text: fidl::new_empty!(
4885                    fidl_fuchsia_mem::Buffer,
4886                    fidl::encoding::DefaultFuchsiaResourceDialect
4887                ),
4888            }
4889        }
4890
4891        #[inline]
4892        unsafe fn decode(
4893            &mut self,
4894            decoder: &mut fidl::encoding::Decoder<
4895                '_,
4896                fidl::encoding::DefaultFuchsiaResourceDialect,
4897            >,
4898            offset: usize,
4899            _depth: fidl::encoding::Depth,
4900        ) -> fidl::Result<()> {
4901            decoder.debug_check_bounds::<Self>(offset);
4902            // Verify that padding bytes are zero.
4903            fidl::decode!(
4904                fidl_fuchsia_mem::Buffer,
4905                fidl::encoding::DefaultFuchsiaResourceDialect,
4906                &mut self.cipher_text,
4907                decoder,
4908                offset + 0,
4909                _depth
4910            )?;
4911            Ok(())
4912        }
4913    }
4914
4915    impl fidl::encoding::ResourceTypeMarker for KeyManagerUnsealDataResponse {
4916        type Borrowed<'a> = &'a mut Self;
4917        fn take_or_borrow<'a>(
4918            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4919        ) -> Self::Borrowed<'a> {
4920            value
4921        }
4922    }
4923
4924    unsafe impl fidl::encoding::TypeMarker for KeyManagerUnsealDataResponse {
4925        type Owned = Self;
4926
4927        #[inline(always)]
4928        fn inline_align(_context: fidl::encoding::Context) -> usize {
4929            8
4930        }
4931
4932        #[inline(always)]
4933        fn inline_size(_context: fidl::encoding::Context) -> usize {
4934            16
4935        }
4936    }
4937
4938    unsafe impl
4939        fidl::encoding::Encode<
4940            KeyManagerUnsealDataResponse,
4941            fidl::encoding::DefaultFuchsiaResourceDialect,
4942        > for &mut KeyManagerUnsealDataResponse
4943    {
4944        #[inline]
4945        unsafe fn encode(
4946            self,
4947            encoder: &mut fidl::encoding::Encoder<
4948                '_,
4949                fidl::encoding::DefaultFuchsiaResourceDialect,
4950            >,
4951            offset: usize,
4952            _depth: fidl::encoding::Depth,
4953        ) -> fidl::Result<()> {
4954            encoder.debug_check_bounds::<KeyManagerUnsealDataResponse>(offset);
4955            // Delegate to tuple encoding.
4956            fidl::encoding::Encode::<
4957                KeyManagerUnsealDataResponse,
4958                fidl::encoding::DefaultFuchsiaResourceDialect,
4959            >::encode(
4960                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4961                    &mut self.plain_text,
4962                ),),
4963                encoder,
4964                offset,
4965                _depth,
4966            )
4967        }
4968    }
4969    unsafe impl<
4970            T0: fidl::encoding::Encode<
4971                fidl_fuchsia_mem::Buffer,
4972                fidl::encoding::DefaultFuchsiaResourceDialect,
4973            >,
4974        >
4975        fidl::encoding::Encode<
4976            KeyManagerUnsealDataResponse,
4977            fidl::encoding::DefaultFuchsiaResourceDialect,
4978        > for (T0,)
4979    {
4980        #[inline]
4981        unsafe fn encode(
4982            self,
4983            encoder: &mut fidl::encoding::Encoder<
4984                '_,
4985                fidl::encoding::DefaultFuchsiaResourceDialect,
4986            >,
4987            offset: usize,
4988            depth: fidl::encoding::Depth,
4989        ) -> fidl::Result<()> {
4990            encoder.debug_check_bounds::<KeyManagerUnsealDataResponse>(offset);
4991            // Zero out padding regions. There's no need to apply masks
4992            // because the unmasked parts will be overwritten by fields.
4993            // Write the fields.
4994            self.0.encode(encoder, offset + 0, depth)?;
4995            Ok(())
4996        }
4997    }
4998
4999    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5000        for KeyManagerUnsealDataResponse
5001    {
5002        #[inline(always)]
5003        fn new_empty() -> Self {
5004            Self {
5005                plain_text: fidl::new_empty!(
5006                    fidl_fuchsia_mem::Buffer,
5007                    fidl::encoding::DefaultFuchsiaResourceDialect
5008                ),
5009            }
5010        }
5011
5012        #[inline]
5013        unsafe fn decode(
5014            &mut self,
5015            decoder: &mut fidl::encoding::Decoder<
5016                '_,
5017                fidl::encoding::DefaultFuchsiaResourceDialect,
5018            >,
5019            offset: usize,
5020            _depth: fidl::encoding::Depth,
5021        ) -> fidl::Result<()> {
5022            decoder.debug_check_bounds::<Self>(offset);
5023            // Verify that padding bytes are zero.
5024            fidl::decode!(
5025                fidl_fuchsia_mem::Buffer,
5026                fidl::encoding::DefaultFuchsiaResourceDialect,
5027                &mut self.plain_text,
5028                decoder,
5029                offset + 0,
5030                _depth
5031            )?;
5032            Ok(())
5033        }
5034    }
5035}