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