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 {
1579            Some((responder))
1580        } else {
1581            None
1582        }
1583    }
1584
1585    #[allow(irrefutable_let_patterns)]
1586    pub fn into_get_key_provider(self) -> Option<(KeyGetKeyProviderResponder)> {
1587        if let KeyRequest::GetKeyProvider { responder } = self {
1588            Some((responder))
1589        } else {
1590            None
1591        }
1592    }
1593
1594    /// Name of the method defined in FIDL
1595    pub fn method_name(&self) -> &'static str {
1596        match *self {
1597            KeyRequest::GetKeyOrigin { .. } => "get_key_origin",
1598            KeyRequest::GetKeyProvider { .. } => "get_key_provider",
1599        }
1600    }
1601}
1602
1603#[derive(Debug, Clone)]
1604pub struct KeyControlHandle {
1605    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1606}
1607
1608impl fidl::endpoints::ControlHandle for KeyControlHandle {
1609    fn shutdown(&self) {
1610        self.inner.shutdown()
1611    }
1612    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1613        self.inner.shutdown_with_epitaph(status)
1614    }
1615
1616    fn is_closed(&self) -> bool {
1617        self.inner.channel().is_closed()
1618    }
1619    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1620        self.inner.channel().on_closed()
1621    }
1622
1623    #[cfg(target_os = "fuchsia")]
1624    fn signal_peer(
1625        &self,
1626        clear_mask: zx::Signals,
1627        set_mask: zx::Signals,
1628    ) -> Result<(), zx_status::Status> {
1629        use fidl::Peered;
1630        self.inner.channel().signal_peer(clear_mask, set_mask)
1631    }
1632}
1633
1634impl KeyControlHandle {}
1635
1636#[must_use = "FIDL methods require a response to be sent"]
1637#[derive(Debug)]
1638pub struct KeyGetKeyOriginResponder {
1639    control_handle: std::mem::ManuallyDrop<KeyControlHandle>,
1640    tx_id: u32,
1641}
1642
1643/// Set the the channel to be shutdown (see [`KeyControlHandle::shutdown`])
1644/// if the responder is dropped without sending a response, so that the client
1645/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1646impl std::ops::Drop for KeyGetKeyOriginResponder {
1647    fn drop(&mut self) {
1648        self.control_handle.shutdown();
1649        // Safety: drops once, never accessed again
1650        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1651    }
1652}
1653
1654impl fidl::endpoints::Responder for KeyGetKeyOriginResponder {
1655    type ControlHandle = KeyControlHandle;
1656
1657    fn control_handle(&self) -> &KeyControlHandle {
1658        &self.control_handle
1659    }
1660
1661    fn drop_without_shutdown(mut self) {
1662        // Safety: drops once, never accessed again due to mem::forget
1663        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1664        // Prevent Drop from running (which would shut down the channel)
1665        std::mem::forget(self);
1666    }
1667}
1668
1669impl KeyGetKeyOriginResponder {
1670    /// Sends a response to the FIDL transaction.
1671    ///
1672    /// Sets the channel to shutdown if an error occurs.
1673    pub fn send(self, mut result: Result<KeyOrigin, Error>) -> Result<(), fidl::Error> {
1674        let _result = self.send_raw(result);
1675        if _result.is_err() {
1676            self.control_handle.shutdown();
1677        }
1678        self.drop_without_shutdown();
1679        _result
1680    }
1681
1682    /// Similar to "send" but does not shutdown the channel if an error occurs.
1683    pub fn send_no_shutdown_on_err(
1684        self,
1685        mut result: Result<KeyOrigin, Error>,
1686    ) -> Result<(), fidl::Error> {
1687        let _result = self.send_raw(result);
1688        self.drop_without_shutdown();
1689        _result
1690    }
1691
1692    fn send_raw(&self, mut result: Result<KeyOrigin, Error>) -> Result<(), fidl::Error> {
1693        self.control_handle
1694            .inner
1695            .send::<fidl::encoding::ResultType<KeyGetKeyOriginResponse, Error>>(
1696                result.map(|key_origin| (key_origin,)),
1697                self.tx_id,
1698                0x3e439554159e7b86,
1699                fidl::encoding::DynamicFlags::empty(),
1700            )
1701    }
1702}
1703
1704#[must_use = "FIDL methods require a response to be sent"]
1705#[derive(Debug)]
1706pub struct KeyGetKeyProviderResponder {
1707    control_handle: std::mem::ManuallyDrop<KeyControlHandle>,
1708    tx_id: u32,
1709}
1710
1711/// Set the the channel to be shutdown (see [`KeyControlHandle::shutdown`])
1712/// if the responder is dropped without sending a response, so that the client
1713/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1714impl std::ops::Drop for KeyGetKeyProviderResponder {
1715    fn drop(&mut self) {
1716        self.control_handle.shutdown();
1717        // Safety: drops once, never accessed again
1718        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1719    }
1720}
1721
1722impl fidl::endpoints::Responder for KeyGetKeyProviderResponder {
1723    type ControlHandle = KeyControlHandle;
1724
1725    fn control_handle(&self) -> &KeyControlHandle {
1726        &self.control_handle
1727    }
1728
1729    fn drop_without_shutdown(mut self) {
1730        // Safety: drops once, never accessed again due to mem::forget
1731        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1732        // Prevent Drop from running (which would shut down the channel)
1733        std::mem::forget(self);
1734    }
1735}
1736
1737impl KeyGetKeyProviderResponder {
1738    /// Sends a response to the FIDL transaction.
1739    ///
1740    /// Sets the channel to shutdown if an error occurs.
1741    pub fn send(self, mut result: Result<KeyProvider, Error>) -> Result<(), fidl::Error> {
1742        let _result = self.send_raw(result);
1743        if _result.is_err() {
1744            self.control_handle.shutdown();
1745        }
1746        self.drop_without_shutdown();
1747        _result
1748    }
1749
1750    /// Similar to "send" but does not shutdown the channel if an error occurs.
1751    pub fn send_no_shutdown_on_err(
1752        self,
1753        mut result: Result<KeyProvider, Error>,
1754    ) -> Result<(), fidl::Error> {
1755        let _result = self.send_raw(result);
1756        self.drop_without_shutdown();
1757        _result
1758    }
1759
1760    fn send_raw(&self, mut result: Result<KeyProvider, Error>) -> Result<(), fidl::Error> {
1761        self.control_handle
1762            .inner
1763            .send::<fidl::encoding::ResultType<KeyGetKeyProviderResponse, Error>>(
1764                result.map(|key_provider| (key_provider,)),
1765                self.tx_id,
1766                0x68e2cd7ec0532e0c,
1767                fidl::encoding::DynamicFlags::empty(),
1768            )
1769    }
1770}
1771
1772#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1773pub struct KeyManagerMarker;
1774
1775impl fidl::endpoints::ProtocolMarker for KeyManagerMarker {
1776    type Proxy = KeyManagerProxy;
1777    type RequestStream = KeyManagerRequestStream;
1778    #[cfg(target_os = "fuchsia")]
1779    type SynchronousProxy = KeyManagerSynchronousProxy;
1780
1781    const DEBUG_NAME: &'static str = "fuchsia.kms.KeyManager";
1782}
1783impl fidl::endpoints::DiscoverableProtocolMarker for KeyManagerMarker {}
1784pub type KeyManagerSealDataResult = Result<fidl_fuchsia_mem::Buffer, Error>;
1785pub type KeyManagerUnsealDataResult = Result<fidl_fuchsia_mem::Buffer, Error>;
1786pub type KeyManagerGenerateAsymmetricKeyResult = Result<(), Error>;
1787pub type KeyManagerGenerateAsymmetricKeyWithAlgorithmResult = Result<(), Error>;
1788pub type KeyManagerImportAsymmetricPrivateKeyResult = Result<(), Error>;
1789pub type KeyManagerGetAsymmetricPrivateKeyResult = Result<(), Error>;
1790pub type KeyManagerDeleteKeyResult = Result<(), Error>;
1791
1792pub trait KeyManagerProxyInterface: Send + Sync {
1793    type SealDataResponseFut: std::future::Future<Output = Result<KeyManagerSealDataResult, fidl::Error>>
1794        + Send;
1795    fn r#seal_data(&self, plain_text: fidl_fuchsia_mem::Buffer) -> Self::SealDataResponseFut;
1796    type UnsealDataResponseFut: std::future::Future<Output = Result<KeyManagerUnsealDataResult, fidl::Error>>
1797        + Send;
1798    fn r#unseal_data(&self, cipher_text: fidl_fuchsia_mem::Buffer) -> Self::UnsealDataResponseFut;
1799    type GenerateAsymmetricKeyResponseFut: std::future::Future<Output = Result<KeyManagerGenerateAsymmetricKeyResult, fidl::Error>>
1800        + Send;
1801    fn r#generate_asymmetric_key(
1802        &self,
1803        key_name: &str,
1804        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1805    ) -> Self::GenerateAsymmetricKeyResponseFut;
1806    type GenerateAsymmetricKeyWithAlgorithmResponseFut: std::future::Future<
1807            Output = Result<KeyManagerGenerateAsymmetricKeyWithAlgorithmResult, fidl::Error>,
1808        > + Send;
1809    fn r#generate_asymmetric_key_with_algorithm(
1810        &self,
1811        key_name: &str,
1812        key_algorithm: AsymmetricKeyAlgorithm,
1813        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1814    ) -> Self::GenerateAsymmetricKeyWithAlgorithmResponseFut;
1815    type ImportAsymmetricPrivateKeyResponseFut: std::future::Future<
1816            Output = Result<KeyManagerImportAsymmetricPrivateKeyResult, fidl::Error>,
1817        > + Send;
1818    fn r#import_asymmetric_private_key(
1819        &self,
1820        data: &[u8],
1821        key_name: &str,
1822        key_algorithm: AsymmetricKeyAlgorithm,
1823        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1824    ) -> Self::ImportAsymmetricPrivateKeyResponseFut;
1825    type GetAsymmetricPrivateKeyResponseFut: std::future::Future<Output = Result<KeyManagerGetAsymmetricPrivateKeyResult, fidl::Error>>
1826        + Send;
1827    fn r#get_asymmetric_private_key(
1828        &self,
1829        key_name: &str,
1830        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1831    ) -> Self::GetAsymmetricPrivateKeyResponseFut;
1832    type DeleteKeyResponseFut: std::future::Future<Output = Result<KeyManagerDeleteKeyResult, fidl::Error>>
1833        + Send;
1834    fn r#delete_key(&self, key_name: &str) -> Self::DeleteKeyResponseFut;
1835}
1836#[derive(Debug)]
1837#[cfg(target_os = "fuchsia")]
1838pub struct KeyManagerSynchronousProxy {
1839    client: fidl::client::sync::Client,
1840}
1841
1842#[cfg(target_os = "fuchsia")]
1843impl fidl::endpoints::SynchronousProxy for KeyManagerSynchronousProxy {
1844    type Proxy = KeyManagerProxy;
1845    type Protocol = KeyManagerMarker;
1846
1847    fn from_channel(inner: fidl::Channel) -> Self {
1848        Self::new(inner)
1849    }
1850
1851    fn into_channel(self) -> fidl::Channel {
1852        self.client.into_channel()
1853    }
1854
1855    fn as_channel(&self) -> &fidl::Channel {
1856        self.client.as_channel()
1857    }
1858}
1859
1860#[cfg(target_os = "fuchsia")]
1861impl KeyManagerSynchronousProxy {
1862    pub fn new(channel: fidl::Channel) -> Self {
1863        let protocol_name = <KeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1864        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1865    }
1866
1867    pub fn into_channel(self) -> fidl::Channel {
1868        self.client.into_channel()
1869    }
1870
1871    /// Waits until an event arrives and returns it. It is safe for other
1872    /// threads to make concurrent requests while waiting for an event.
1873    pub fn wait_for_event(
1874        &self,
1875        deadline: zx::MonotonicInstant,
1876    ) -> Result<KeyManagerEvent, fidl::Error> {
1877        KeyManagerEvent::decode(self.client.wait_for_event(deadline)?)
1878    }
1879
1880    /// Seal data to an encrypted form.
1881    ///
1882    /// Seal data to an encrypted form. The sealed data can only be unsealed by the same KMS instance
1883    /// by using UnsealData. `plain_text` needs to be less than `MAX_DATA_SIZE` bytes.
1884    pub fn r#seal_data(
1885        &self,
1886        mut plain_text: fidl_fuchsia_mem::Buffer,
1887        ___deadline: zx::MonotonicInstant,
1888    ) -> Result<KeyManagerSealDataResult, fidl::Error> {
1889        let _response = self.client.send_query::<
1890            KeyManagerSealDataRequest,
1891            fidl::encoding::ResultType<KeyManagerSealDataResponse, Error>,
1892        >(
1893            (&mut plain_text,),
1894            0x3d2fcd85d11c96bb,
1895            fidl::encoding::DynamicFlags::empty(),
1896            ___deadline,
1897        )?;
1898        Ok(_response.map(|x| x.cipher_text))
1899    }
1900
1901    /// Unseal sealed data.
1902    ///
1903    /// Unseal data previously sealed by this KMS instance.
1904    pub fn r#unseal_data(
1905        &self,
1906        mut cipher_text: fidl_fuchsia_mem::Buffer,
1907        ___deadline: zx::MonotonicInstant,
1908    ) -> Result<KeyManagerUnsealDataResult, fidl::Error> {
1909        let _response = self.client.send_query::<
1910            KeyManagerUnsealDataRequest,
1911            fidl::encoding::ResultType<KeyManagerUnsealDataResponse, Error>,
1912        >(
1913            (&mut cipher_text,),
1914            0x72dafc3131c1bca6,
1915            fidl::encoding::DynamicFlags::empty(),
1916            ___deadline,
1917        )?;
1918        Ok(_response.map(|x| x.plain_text))
1919    }
1920
1921    /// Generate an asymmetric key.
1922    ///
1923    /// Generate an asymmetric key using `key_name` as the unique name. `key` is the generated
1924    /// asymmetric key interface request. If the `key_name` is not unique, you would get
1925    /// `KEY_ALREADY_EXISTS`. The generated key can be used to sign data. The algorithm used for
1926    /// generating asymmetric key is `ECDSA_SHA512_P521`.
1927    pub fn r#generate_asymmetric_key(
1928        &self,
1929        mut key_name: &str,
1930        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1931        ___deadline: zx::MonotonicInstant,
1932    ) -> Result<KeyManagerGenerateAsymmetricKeyResult, fidl::Error> {
1933        let _response = self.client.send_query::<
1934            KeyManagerGenerateAsymmetricKeyRequest,
1935            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1936        >(
1937            (key_name, key,),
1938            0x66f1aa7ff5eb183d,
1939            fidl::encoding::DynamicFlags::empty(),
1940            ___deadline,
1941        )?;
1942        Ok(_response.map(|x| x))
1943    }
1944
1945    /// Generate an asymmetric key with a specific algorithm.
1946    ///
1947    /// Generate an asymmetric key using `key_name` as the unique name and `key_algorithm` as
1948    /// algorithm. `key` is the generated asymmetric key interface request. If the `key_name` is not
1949    /// unique, you would get `KEY_ALREADY_EXISTS`.
1950    pub fn r#generate_asymmetric_key_with_algorithm(
1951        &self,
1952        mut key_name: &str,
1953        mut key_algorithm: AsymmetricKeyAlgorithm,
1954        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1955        ___deadline: zx::MonotonicInstant,
1956    ) -> Result<KeyManagerGenerateAsymmetricKeyWithAlgorithmResult, fidl::Error> {
1957        let _response = self.client.send_query::<
1958            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
1959            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1960        >(
1961            (key_name, key_algorithm, key,),
1962            0x2b9eac3ad0bc8a45,
1963            fidl::encoding::DynamicFlags::empty(),
1964            ___deadline,
1965        )?;
1966        Ok(_response.map(|x| x))
1967    }
1968
1969    /// Import an asymmetric private key with a specific algorithm.
1970    ///
1971    /// Import an asymmetric private key using `key_name` as the unique name, `key_algorithm` as
1972    /// algorithm and `data` as key data. `key` is imported asymmetric key interface request. Key
1973    /// data should be in asn.1 encoded DER format. If the `key_name` is not unique, you would get
1974    /// `KEY_ALREADY_EXISTS`.
1975    pub fn r#import_asymmetric_private_key(
1976        &self,
1977        mut data: &[u8],
1978        mut key_name: &str,
1979        mut key_algorithm: AsymmetricKeyAlgorithm,
1980        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
1981        ___deadline: zx::MonotonicInstant,
1982    ) -> Result<KeyManagerImportAsymmetricPrivateKeyResult, fidl::Error> {
1983        let _response = self.client.send_query::<
1984            KeyManagerImportAsymmetricPrivateKeyRequest,
1985            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
1986        >(
1987            (data, key_name, key_algorithm, key,),
1988            0x14c78f1ebb4eee71,
1989            fidl::encoding::DynamicFlags::empty(),
1990            ___deadline,
1991        )?;
1992        Ok(_response.map(|x| x))
1993    }
1994
1995    /// Get an asymmetric private key handle.
1996    ///
1997    /// Get an asymmetric private key handle using the `key_name`. If such key is not found, would
1998    /// return `KEY_NOT_FOUND`.
1999    pub fn r#get_asymmetric_private_key(
2000        &self,
2001        mut key_name: &str,
2002        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2003        ___deadline: zx::MonotonicInstant,
2004    ) -> Result<KeyManagerGetAsymmetricPrivateKeyResult, fidl::Error> {
2005        let _response = self.client.send_query::<
2006            KeyManagerGetAsymmetricPrivateKeyRequest,
2007            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2008        >(
2009            (key_name, key,),
2010            0x3a257fc6b6ccc5cd,
2011            fidl::encoding::DynamicFlags::empty(),
2012            ___deadline,
2013        )?;
2014        Ok(_response.map(|x| x))
2015    }
2016
2017    /// Delete a key.
2018    ///
2019    /// Delete a key for `key_name`.  For all the current handle to the deleted key, they would
2020    /// become invalid and all following requests on those handles would return `KEY_NOT_FOUND`, user
2021    /// should close the invalid handles once get `KEY_NOT_FOUND` error.
2022    pub fn r#delete_key(
2023        &self,
2024        mut key_name: &str,
2025        ___deadline: zx::MonotonicInstant,
2026    ) -> Result<KeyManagerDeleteKeyResult, fidl::Error> {
2027        let _response = self.client.send_query::<
2028            KeyManagerDeleteKeyRequest,
2029            fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2030        >(
2031            (key_name,),
2032            0x55521e617d023aad,
2033            fidl::encoding::DynamicFlags::empty(),
2034            ___deadline,
2035        )?;
2036        Ok(_response.map(|x| x))
2037    }
2038}
2039
2040#[cfg(target_os = "fuchsia")]
2041impl From<KeyManagerSynchronousProxy> for zx::Handle {
2042    fn from(value: KeyManagerSynchronousProxy) -> Self {
2043        value.into_channel().into()
2044    }
2045}
2046
2047#[cfg(target_os = "fuchsia")]
2048impl From<fidl::Channel> for KeyManagerSynchronousProxy {
2049    fn from(value: fidl::Channel) -> Self {
2050        Self::new(value)
2051    }
2052}
2053
2054#[cfg(target_os = "fuchsia")]
2055impl fidl::endpoints::FromClient for KeyManagerSynchronousProxy {
2056    type Protocol = KeyManagerMarker;
2057
2058    fn from_client(value: fidl::endpoints::ClientEnd<KeyManagerMarker>) -> Self {
2059        Self::new(value.into_channel())
2060    }
2061}
2062
2063#[derive(Debug, Clone)]
2064pub struct KeyManagerProxy {
2065    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2066}
2067
2068impl fidl::endpoints::Proxy for KeyManagerProxy {
2069    type Protocol = KeyManagerMarker;
2070
2071    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2072        Self::new(inner)
2073    }
2074
2075    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2076        self.client.into_channel().map_err(|client| Self { client })
2077    }
2078
2079    fn as_channel(&self) -> &::fidl::AsyncChannel {
2080        self.client.as_channel()
2081    }
2082}
2083
2084impl KeyManagerProxy {
2085    /// Create a new Proxy for fuchsia.kms/KeyManager.
2086    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2087        let protocol_name = <KeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2088        Self { client: fidl::client::Client::new(channel, protocol_name) }
2089    }
2090
2091    /// Get a Stream of events from the remote end of the protocol.
2092    ///
2093    /// # Panics
2094    ///
2095    /// Panics if the event stream was already taken.
2096    pub fn take_event_stream(&self) -> KeyManagerEventStream {
2097        KeyManagerEventStream { event_receiver: self.client.take_event_receiver() }
2098    }
2099
2100    /// Seal data to an encrypted form.
2101    ///
2102    /// Seal data to an encrypted form. The sealed data can only be unsealed by the same KMS instance
2103    /// by using UnsealData. `plain_text` needs to be less than `MAX_DATA_SIZE` bytes.
2104    pub fn r#seal_data(
2105        &self,
2106        mut plain_text: fidl_fuchsia_mem::Buffer,
2107    ) -> fidl::client::QueryResponseFut<
2108        KeyManagerSealDataResult,
2109        fidl::encoding::DefaultFuchsiaResourceDialect,
2110    > {
2111        KeyManagerProxyInterface::r#seal_data(self, plain_text)
2112    }
2113
2114    /// Unseal sealed data.
2115    ///
2116    /// Unseal data previously sealed by this KMS instance.
2117    pub fn r#unseal_data(
2118        &self,
2119        mut cipher_text: fidl_fuchsia_mem::Buffer,
2120    ) -> fidl::client::QueryResponseFut<
2121        KeyManagerUnsealDataResult,
2122        fidl::encoding::DefaultFuchsiaResourceDialect,
2123    > {
2124        KeyManagerProxyInterface::r#unseal_data(self, cipher_text)
2125    }
2126
2127    /// Generate an asymmetric key.
2128    ///
2129    /// Generate an asymmetric key using `key_name` as the unique name. `key` is the generated
2130    /// asymmetric key interface request. If the `key_name` is not unique, you would get
2131    /// `KEY_ALREADY_EXISTS`. The generated key can be used to sign data. The algorithm used for
2132    /// generating asymmetric key is `ECDSA_SHA512_P521`.
2133    pub fn r#generate_asymmetric_key(
2134        &self,
2135        mut key_name: &str,
2136        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2137    ) -> fidl::client::QueryResponseFut<
2138        KeyManagerGenerateAsymmetricKeyResult,
2139        fidl::encoding::DefaultFuchsiaResourceDialect,
2140    > {
2141        KeyManagerProxyInterface::r#generate_asymmetric_key(self, key_name, key)
2142    }
2143
2144    /// Generate an asymmetric key with a specific algorithm.
2145    ///
2146    /// Generate an asymmetric key using `key_name` as the unique name and `key_algorithm` as
2147    /// algorithm. `key` is the generated asymmetric key interface request. If the `key_name` is not
2148    /// unique, you would get `KEY_ALREADY_EXISTS`.
2149    pub fn r#generate_asymmetric_key_with_algorithm(
2150        &self,
2151        mut key_name: &str,
2152        mut key_algorithm: AsymmetricKeyAlgorithm,
2153        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2154    ) -> fidl::client::QueryResponseFut<
2155        KeyManagerGenerateAsymmetricKeyWithAlgorithmResult,
2156        fidl::encoding::DefaultFuchsiaResourceDialect,
2157    > {
2158        KeyManagerProxyInterface::r#generate_asymmetric_key_with_algorithm(
2159            self,
2160            key_name,
2161            key_algorithm,
2162            key,
2163        )
2164    }
2165
2166    /// Import an asymmetric private key with a specific algorithm.
2167    ///
2168    /// Import an asymmetric private key using `key_name` as the unique name, `key_algorithm` as
2169    /// algorithm and `data` as key data. `key` is imported asymmetric key interface request. Key
2170    /// data should be in asn.1 encoded DER format. If the `key_name` is not unique, you would get
2171    /// `KEY_ALREADY_EXISTS`.
2172    pub fn r#import_asymmetric_private_key(
2173        &self,
2174        mut data: &[u8],
2175        mut key_name: &str,
2176        mut key_algorithm: AsymmetricKeyAlgorithm,
2177        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2178    ) -> fidl::client::QueryResponseFut<
2179        KeyManagerImportAsymmetricPrivateKeyResult,
2180        fidl::encoding::DefaultFuchsiaResourceDialect,
2181    > {
2182        KeyManagerProxyInterface::r#import_asymmetric_private_key(
2183            self,
2184            data,
2185            key_name,
2186            key_algorithm,
2187            key,
2188        )
2189    }
2190
2191    /// Get an asymmetric private key handle.
2192    ///
2193    /// Get an asymmetric private key handle using the `key_name`. If such key is not found, would
2194    /// return `KEY_NOT_FOUND`.
2195    pub fn r#get_asymmetric_private_key(
2196        &self,
2197        mut key_name: &str,
2198        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2199    ) -> fidl::client::QueryResponseFut<
2200        KeyManagerGetAsymmetricPrivateKeyResult,
2201        fidl::encoding::DefaultFuchsiaResourceDialect,
2202    > {
2203        KeyManagerProxyInterface::r#get_asymmetric_private_key(self, key_name, key)
2204    }
2205
2206    /// Delete a key.
2207    ///
2208    /// Delete a key for `key_name`.  For all the current handle to the deleted key, they would
2209    /// become invalid and all following requests on those handles would return `KEY_NOT_FOUND`, user
2210    /// should close the invalid handles once get `KEY_NOT_FOUND` error.
2211    pub fn r#delete_key(
2212        &self,
2213        mut key_name: &str,
2214    ) -> fidl::client::QueryResponseFut<
2215        KeyManagerDeleteKeyResult,
2216        fidl::encoding::DefaultFuchsiaResourceDialect,
2217    > {
2218        KeyManagerProxyInterface::r#delete_key(self, key_name)
2219    }
2220}
2221
2222impl KeyManagerProxyInterface for KeyManagerProxy {
2223    type SealDataResponseFut = fidl::client::QueryResponseFut<
2224        KeyManagerSealDataResult,
2225        fidl::encoding::DefaultFuchsiaResourceDialect,
2226    >;
2227    fn r#seal_data(&self, mut plain_text: fidl_fuchsia_mem::Buffer) -> Self::SealDataResponseFut {
2228        fn _decode(
2229            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2230        ) -> Result<KeyManagerSealDataResult, fidl::Error> {
2231            let _response = fidl::client::decode_transaction_body::<
2232                fidl::encoding::ResultType<KeyManagerSealDataResponse, Error>,
2233                fidl::encoding::DefaultFuchsiaResourceDialect,
2234                0x3d2fcd85d11c96bb,
2235            >(_buf?)?;
2236            Ok(_response.map(|x| x.cipher_text))
2237        }
2238        self.client.send_query_and_decode::<KeyManagerSealDataRequest, KeyManagerSealDataResult>(
2239            (&mut plain_text,),
2240            0x3d2fcd85d11c96bb,
2241            fidl::encoding::DynamicFlags::empty(),
2242            _decode,
2243        )
2244    }
2245
2246    type UnsealDataResponseFut = fidl::client::QueryResponseFut<
2247        KeyManagerUnsealDataResult,
2248        fidl::encoding::DefaultFuchsiaResourceDialect,
2249    >;
2250    fn r#unseal_data(
2251        &self,
2252        mut cipher_text: fidl_fuchsia_mem::Buffer,
2253    ) -> Self::UnsealDataResponseFut {
2254        fn _decode(
2255            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2256        ) -> Result<KeyManagerUnsealDataResult, fidl::Error> {
2257            let _response = fidl::client::decode_transaction_body::<
2258                fidl::encoding::ResultType<KeyManagerUnsealDataResponse, Error>,
2259                fidl::encoding::DefaultFuchsiaResourceDialect,
2260                0x72dafc3131c1bca6,
2261            >(_buf?)?;
2262            Ok(_response.map(|x| x.plain_text))
2263        }
2264        self.client
2265            .send_query_and_decode::<KeyManagerUnsealDataRequest, KeyManagerUnsealDataResult>(
2266                (&mut cipher_text,),
2267                0x72dafc3131c1bca6,
2268                fidl::encoding::DynamicFlags::empty(),
2269                _decode,
2270            )
2271    }
2272
2273    type GenerateAsymmetricKeyResponseFut = fidl::client::QueryResponseFut<
2274        KeyManagerGenerateAsymmetricKeyResult,
2275        fidl::encoding::DefaultFuchsiaResourceDialect,
2276    >;
2277    fn r#generate_asymmetric_key(
2278        &self,
2279        mut key_name: &str,
2280        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2281    ) -> Self::GenerateAsymmetricKeyResponseFut {
2282        fn _decode(
2283            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2284        ) -> Result<KeyManagerGenerateAsymmetricKeyResult, fidl::Error> {
2285            let _response = fidl::client::decode_transaction_body::<
2286                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2287                fidl::encoding::DefaultFuchsiaResourceDialect,
2288                0x66f1aa7ff5eb183d,
2289            >(_buf?)?;
2290            Ok(_response.map(|x| x))
2291        }
2292        self.client.send_query_and_decode::<
2293            KeyManagerGenerateAsymmetricKeyRequest,
2294            KeyManagerGenerateAsymmetricKeyResult,
2295        >(
2296            (key_name, key,),
2297            0x66f1aa7ff5eb183d,
2298            fidl::encoding::DynamicFlags::empty(),
2299            _decode,
2300        )
2301    }
2302
2303    type GenerateAsymmetricKeyWithAlgorithmResponseFut = fidl::client::QueryResponseFut<
2304        KeyManagerGenerateAsymmetricKeyWithAlgorithmResult,
2305        fidl::encoding::DefaultFuchsiaResourceDialect,
2306    >;
2307    fn r#generate_asymmetric_key_with_algorithm(
2308        &self,
2309        mut key_name: &str,
2310        mut key_algorithm: AsymmetricKeyAlgorithm,
2311        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2312    ) -> Self::GenerateAsymmetricKeyWithAlgorithmResponseFut {
2313        fn _decode(
2314            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2315        ) -> Result<KeyManagerGenerateAsymmetricKeyWithAlgorithmResult, fidl::Error> {
2316            let _response = fidl::client::decode_transaction_body::<
2317                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2318                fidl::encoding::DefaultFuchsiaResourceDialect,
2319                0x2b9eac3ad0bc8a45,
2320            >(_buf?)?;
2321            Ok(_response.map(|x| x))
2322        }
2323        self.client.send_query_and_decode::<
2324            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
2325            KeyManagerGenerateAsymmetricKeyWithAlgorithmResult,
2326        >(
2327            (key_name, key_algorithm, key,),
2328            0x2b9eac3ad0bc8a45,
2329            fidl::encoding::DynamicFlags::empty(),
2330            _decode,
2331        )
2332    }
2333
2334    type ImportAsymmetricPrivateKeyResponseFut = fidl::client::QueryResponseFut<
2335        KeyManagerImportAsymmetricPrivateKeyResult,
2336        fidl::encoding::DefaultFuchsiaResourceDialect,
2337    >;
2338    fn r#import_asymmetric_private_key(
2339        &self,
2340        mut data: &[u8],
2341        mut key_name: &str,
2342        mut key_algorithm: AsymmetricKeyAlgorithm,
2343        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2344    ) -> Self::ImportAsymmetricPrivateKeyResponseFut {
2345        fn _decode(
2346            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2347        ) -> Result<KeyManagerImportAsymmetricPrivateKeyResult, fidl::Error> {
2348            let _response = fidl::client::decode_transaction_body::<
2349                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2350                fidl::encoding::DefaultFuchsiaResourceDialect,
2351                0x14c78f1ebb4eee71,
2352            >(_buf?)?;
2353            Ok(_response.map(|x| x))
2354        }
2355        self.client.send_query_and_decode::<
2356            KeyManagerImportAsymmetricPrivateKeyRequest,
2357            KeyManagerImportAsymmetricPrivateKeyResult,
2358        >(
2359            (data, key_name, key_algorithm, key,),
2360            0x14c78f1ebb4eee71,
2361            fidl::encoding::DynamicFlags::empty(),
2362            _decode,
2363        )
2364    }
2365
2366    type GetAsymmetricPrivateKeyResponseFut = fidl::client::QueryResponseFut<
2367        KeyManagerGetAsymmetricPrivateKeyResult,
2368        fidl::encoding::DefaultFuchsiaResourceDialect,
2369    >;
2370    fn r#get_asymmetric_private_key(
2371        &self,
2372        mut key_name: &str,
2373        mut key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2374    ) -> Self::GetAsymmetricPrivateKeyResponseFut {
2375        fn _decode(
2376            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2377        ) -> Result<KeyManagerGetAsymmetricPrivateKeyResult, fidl::Error> {
2378            let _response = fidl::client::decode_transaction_body::<
2379                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2380                fidl::encoding::DefaultFuchsiaResourceDialect,
2381                0x3a257fc6b6ccc5cd,
2382            >(_buf?)?;
2383            Ok(_response.map(|x| x))
2384        }
2385        self.client.send_query_and_decode::<
2386            KeyManagerGetAsymmetricPrivateKeyRequest,
2387            KeyManagerGetAsymmetricPrivateKeyResult,
2388        >(
2389            (key_name, key,),
2390            0x3a257fc6b6ccc5cd,
2391            fidl::encoding::DynamicFlags::empty(),
2392            _decode,
2393        )
2394    }
2395
2396    type DeleteKeyResponseFut = fidl::client::QueryResponseFut<
2397        KeyManagerDeleteKeyResult,
2398        fidl::encoding::DefaultFuchsiaResourceDialect,
2399    >;
2400    fn r#delete_key(&self, mut key_name: &str) -> Self::DeleteKeyResponseFut {
2401        fn _decode(
2402            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2403        ) -> Result<KeyManagerDeleteKeyResult, fidl::Error> {
2404            let _response = fidl::client::decode_transaction_body::<
2405                fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>,
2406                fidl::encoding::DefaultFuchsiaResourceDialect,
2407                0x55521e617d023aad,
2408            >(_buf?)?;
2409            Ok(_response.map(|x| x))
2410        }
2411        self.client.send_query_and_decode::<KeyManagerDeleteKeyRequest, KeyManagerDeleteKeyResult>(
2412            (key_name,),
2413            0x55521e617d023aad,
2414            fidl::encoding::DynamicFlags::empty(),
2415            _decode,
2416        )
2417    }
2418}
2419
2420pub struct KeyManagerEventStream {
2421    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2422}
2423
2424impl std::marker::Unpin for KeyManagerEventStream {}
2425
2426impl futures::stream::FusedStream for KeyManagerEventStream {
2427    fn is_terminated(&self) -> bool {
2428        self.event_receiver.is_terminated()
2429    }
2430}
2431
2432impl futures::Stream for KeyManagerEventStream {
2433    type Item = Result<KeyManagerEvent, fidl::Error>;
2434
2435    fn poll_next(
2436        mut self: std::pin::Pin<&mut Self>,
2437        cx: &mut std::task::Context<'_>,
2438    ) -> std::task::Poll<Option<Self::Item>> {
2439        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2440            &mut self.event_receiver,
2441            cx
2442        )?) {
2443            Some(buf) => std::task::Poll::Ready(Some(KeyManagerEvent::decode(buf))),
2444            None => std::task::Poll::Ready(None),
2445        }
2446    }
2447}
2448
2449#[derive(Debug)]
2450pub enum KeyManagerEvent {}
2451
2452impl KeyManagerEvent {
2453    /// Decodes a message buffer as a [`KeyManagerEvent`].
2454    fn decode(
2455        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2456    ) -> Result<KeyManagerEvent, fidl::Error> {
2457        let (bytes, _handles) = buf.split_mut();
2458        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2459        debug_assert_eq!(tx_header.tx_id, 0);
2460        match tx_header.ordinal {
2461            _ => Err(fidl::Error::UnknownOrdinal {
2462                ordinal: tx_header.ordinal,
2463                protocol_name: <KeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2464            }),
2465        }
2466    }
2467}
2468
2469/// A Stream of incoming requests for fuchsia.kms/KeyManager.
2470pub struct KeyManagerRequestStream {
2471    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2472    is_terminated: bool,
2473}
2474
2475impl std::marker::Unpin for KeyManagerRequestStream {}
2476
2477impl futures::stream::FusedStream for KeyManagerRequestStream {
2478    fn is_terminated(&self) -> bool {
2479        self.is_terminated
2480    }
2481}
2482
2483impl fidl::endpoints::RequestStream for KeyManagerRequestStream {
2484    type Protocol = KeyManagerMarker;
2485    type ControlHandle = KeyManagerControlHandle;
2486
2487    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2488        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2489    }
2490
2491    fn control_handle(&self) -> Self::ControlHandle {
2492        KeyManagerControlHandle { inner: self.inner.clone() }
2493    }
2494
2495    fn into_inner(
2496        self,
2497    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2498    {
2499        (self.inner, self.is_terminated)
2500    }
2501
2502    fn from_inner(
2503        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2504        is_terminated: bool,
2505    ) -> Self {
2506        Self { inner, is_terminated }
2507    }
2508}
2509
2510impl futures::Stream for KeyManagerRequestStream {
2511    type Item = Result<KeyManagerRequest, fidl::Error>;
2512
2513    fn poll_next(
2514        mut self: std::pin::Pin<&mut Self>,
2515        cx: &mut std::task::Context<'_>,
2516    ) -> std::task::Poll<Option<Self::Item>> {
2517        let this = &mut *self;
2518        if this.inner.check_shutdown(cx) {
2519            this.is_terminated = true;
2520            return std::task::Poll::Ready(None);
2521        }
2522        if this.is_terminated {
2523            panic!("polled KeyManagerRequestStream after completion");
2524        }
2525        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2526            |bytes, handles| {
2527                match this.inner.channel().read_etc(cx, bytes, handles) {
2528                    std::task::Poll::Ready(Ok(())) => {}
2529                    std::task::Poll::Pending => return std::task::Poll::Pending,
2530                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2531                        this.is_terminated = true;
2532                        return std::task::Poll::Ready(None);
2533                    }
2534                    std::task::Poll::Ready(Err(e)) => {
2535                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2536                            e.into(),
2537                        ))))
2538                    }
2539                }
2540
2541                // A message has been received from the channel
2542                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2543
2544                std::task::Poll::Ready(Some(match header.ordinal {
2545                    0x3d2fcd85d11c96bb => {
2546                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2547                        let mut req = fidl::new_empty!(
2548                            KeyManagerSealDataRequest,
2549                            fidl::encoding::DefaultFuchsiaResourceDialect
2550                        );
2551                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerSealDataRequest>(&header, _body_bytes, handles, &mut req)?;
2552                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2553                        Ok(KeyManagerRequest::SealData {
2554                            plain_text: req.plain_text,
2555
2556                            responder: KeyManagerSealDataResponder {
2557                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2558                                tx_id: header.tx_id,
2559                            },
2560                        })
2561                    }
2562                    0x72dafc3131c1bca6 => {
2563                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2564                        let mut req = fidl::new_empty!(
2565                            KeyManagerUnsealDataRequest,
2566                            fidl::encoding::DefaultFuchsiaResourceDialect
2567                        );
2568                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerUnsealDataRequest>(&header, _body_bytes, handles, &mut req)?;
2569                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2570                        Ok(KeyManagerRequest::UnsealData {
2571                            cipher_text: req.cipher_text,
2572
2573                            responder: KeyManagerUnsealDataResponder {
2574                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2575                                tx_id: header.tx_id,
2576                            },
2577                        })
2578                    }
2579                    0x66f1aa7ff5eb183d => {
2580                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2581                        let mut req = fidl::new_empty!(
2582                            KeyManagerGenerateAsymmetricKeyRequest,
2583                            fidl::encoding::DefaultFuchsiaResourceDialect
2584                        );
2585                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerGenerateAsymmetricKeyRequest>(&header, _body_bytes, handles, &mut req)?;
2586                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2587                        Ok(KeyManagerRequest::GenerateAsymmetricKey {
2588                            key_name: req.key_name,
2589                            key: req.key,
2590
2591                            responder: KeyManagerGenerateAsymmetricKeyResponder {
2592                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2593                                tx_id: header.tx_id,
2594                            },
2595                        })
2596                    }
2597                    0x2b9eac3ad0bc8a45 => {
2598                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2599                        let mut req = fidl::new_empty!(
2600                            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
2601                            fidl::encoding::DefaultFuchsiaResourceDialect
2602                        );
2603                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest>(&header, _body_bytes, handles, &mut req)?;
2604                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2605                        Ok(KeyManagerRequest::GenerateAsymmetricKeyWithAlgorithm {
2606                            key_name: req.key_name,
2607                            key_algorithm: req.key_algorithm,
2608                            key: req.key,
2609
2610                            responder: KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
2611                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2612                                tx_id: header.tx_id,
2613                            },
2614                        })
2615                    }
2616                    0x14c78f1ebb4eee71 => {
2617                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2618                        let mut req = fidl::new_empty!(
2619                            KeyManagerImportAsymmetricPrivateKeyRequest,
2620                            fidl::encoding::DefaultFuchsiaResourceDialect
2621                        );
2622                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerImportAsymmetricPrivateKeyRequest>(&header, _body_bytes, handles, &mut req)?;
2623                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2624                        Ok(KeyManagerRequest::ImportAsymmetricPrivateKey {
2625                            data: req.data,
2626                            key_name: req.key_name,
2627                            key_algorithm: req.key_algorithm,
2628                            key: req.key,
2629
2630                            responder: KeyManagerImportAsymmetricPrivateKeyResponder {
2631                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2632                                tx_id: header.tx_id,
2633                            },
2634                        })
2635                    }
2636                    0x3a257fc6b6ccc5cd => {
2637                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2638                        let mut req = fidl::new_empty!(
2639                            KeyManagerGetAsymmetricPrivateKeyRequest,
2640                            fidl::encoding::DefaultFuchsiaResourceDialect
2641                        );
2642                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerGetAsymmetricPrivateKeyRequest>(&header, _body_bytes, handles, &mut req)?;
2643                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2644                        Ok(KeyManagerRequest::GetAsymmetricPrivateKey {
2645                            key_name: req.key_name,
2646                            key: req.key,
2647
2648                            responder: KeyManagerGetAsymmetricPrivateKeyResponder {
2649                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2650                                tx_id: header.tx_id,
2651                            },
2652                        })
2653                    }
2654                    0x55521e617d023aad => {
2655                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2656                        let mut req = fidl::new_empty!(
2657                            KeyManagerDeleteKeyRequest,
2658                            fidl::encoding::DefaultFuchsiaResourceDialect
2659                        );
2660                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<KeyManagerDeleteKeyRequest>(&header, _body_bytes, handles, &mut req)?;
2661                        let control_handle = KeyManagerControlHandle { inner: this.inner.clone() };
2662                        Ok(KeyManagerRequest::DeleteKey {
2663                            key_name: req.key_name,
2664
2665                            responder: KeyManagerDeleteKeyResponder {
2666                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2667                                tx_id: header.tx_id,
2668                            },
2669                        })
2670                    }
2671                    _ => Err(fidl::Error::UnknownOrdinal {
2672                        ordinal: header.ordinal,
2673                        protocol_name:
2674                            <KeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2675                    }),
2676                }))
2677            },
2678        )
2679    }
2680}
2681
2682#[derive(Debug)]
2683pub enum KeyManagerRequest {
2684    /// Seal data to an encrypted form.
2685    ///
2686    /// Seal data to an encrypted form. The sealed data can only be unsealed by the same KMS instance
2687    /// by using UnsealData. `plain_text` needs to be less than `MAX_DATA_SIZE` bytes.
2688    SealData { plain_text: fidl_fuchsia_mem::Buffer, responder: KeyManagerSealDataResponder },
2689    /// Unseal sealed data.
2690    ///
2691    /// Unseal data previously sealed by this KMS instance.
2692    UnsealData { cipher_text: fidl_fuchsia_mem::Buffer, responder: KeyManagerUnsealDataResponder },
2693    /// Generate an asymmetric key.
2694    ///
2695    /// Generate an asymmetric key using `key_name` as the unique name. `key` is the generated
2696    /// asymmetric key interface request. If the `key_name` is not unique, you would get
2697    /// `KEY_ALREADY_EXISTS`. The generated key can be used to sign data. The algorithm used for
2698    /// generating asymmetric key is `ECDSA_SHA512_P521`.
2699    GenerateAsymmetricKey {
2700        key_name: String,
2701        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2702        responder: KeyManagerGenerateAsymmetricKeyResponder,
2703    },
2704    /// Generate an asymmetric key with a specific algorithm.
2705    ///
2706    /// Generate an asymmetric key using `key_name` as the unique name and `key_algorithm` as
2707    /// algorithm. `key` is the generated asymmetric key interface request. If the `key_name` is not
2708    /// unique, you would get `KEY_ALREADY_EXISTS`.
2709    GenerateAsymmetricKeyWithAlgorithm {
2710        key_name: String,
2711        key_algorithm: AsymmetricKeyAlgorithm,
2712        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2713        responder: KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder,
2714    },
2715    /// Import an asymmetric private key with a specific algorithm.
2716    ///
2717    /// Import an asymmetric private key using `key_name` as the unique name, `key_algorithm` as
2718    /// algorithm and `data` as key data. `key` is imported asymmetric key interface request. Key
2719    /// data should be in asn.1 encoded DER format. If the `key_name` is not unique, you would get
2720    /// `KEY_ALREADY_EXISTS`.
2721    ImportAsymmetricPrivateKey {
2722        data: Vec<u8>,
2723        key_name: String,
2724        key_algorithm: AsymmetricKeyAlgorithm,
2725        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2726        responder: KeyManagerImportAsymmetricPrivateKeyResponder,
2727    },
2728    /// Get an asymmetric private key handle.
2729    ///
2730    /// Get an asymmetric private key handle using the `key_name`. If such key is not found, would
2731    /// return `KEY_NOT_FOUND`.
2732    GetAsymmetricPrivateKey {
2733        key_name: String,
2734        key: fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2735        responder: KeyManagerGetAsymmetricPrivateKeyResponder,
2736    },
2737    /// Delete a key.
2738    ///
2739    /// Delete a key for `key_name`.  For all the current handle to the deleted key, they would
2740    /// become invalid and all following requests on those handles would return `KEY_NOT_FOUND`, user
2741    /// should close the invalid handles once get `KEY_NOT_FOUND` error.
2742    DeleteKey { key_name: String, responder: KeyManagerDeleteKeyResponder },
2743}
2744
2745impl KeyManagerRequest {
2746    #[allow(irrefutable_let_patterns)]
2747    pub fn into_seal_data(self) -> Option<(fidl_fuchsia_mem::Buffer, KeyManagerSealDataResponder)> {
2748        if let KeyManagerRequest::SealData { plain_text, responder } = self {
2749            Some((plain_text, responder))
2750        } else {
2751            None
2752        }
2753    }
2754
2755    #[allow(irrefutable_let_patterns)]
2756    pub fn into_unseal_data(
2757        self,
2758    ) -> Option<(fidl_fuchsia_mem::Buffer, KeyManagerUnsealDataResponder)> {
2759        if let KeyManagerRequest::UnsealData { cipher_text, responder } = self {
2760            Some((cipher_text, responder))
2761        } else {
2762            None
2763        }
2764    }
2765
2766    #[allow(irrefutable_let_patterns)]
2767    pub fn into_generate_asymmetric_key(
2768        self,
2769    ) -> Option<(
2770        String,
2771        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2772        KeyManagerGenerateAsymmetricKeyResponder,
2773    )> {
2774        if let KeyManagerRequest::GenerateAsymmetricKey { key_name, key, responder } = self {
2775            Some((key_name, key, responder))
2776        } else {
2777            None
2778        }
2779    }
2780
2781    #[allow(irrefutable_let_patterns)]
2782    pub fn into_generate_asymmetric_key_with_algorithm(
2783        self,
2784    ) -> Option<(
2785        String,
2786        AsymmetricKeyAlgorithm,
2787        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2788        KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder,
2789    )> {
2790        if let KeyManagerRequest::GenerateAsymmetricKeyWithAlgorithm {
2791            key_name,
2792            key_algorithm,
2793            key,
2794            responder,
2795        } = self
2796        {
2797            Some((key_name, key_algorithm, key, responder))
2798        } else {
2799            None
2800        }
2801    }
2802
2803    #[allow(irrefutable_let_patterns)]
2804    pub fn into_import_asymmetric_private_key(
2805        self,
2806    ) -> Option<(
2807        Vec<u8>,
2808        String,
2809        AsymmetricKeyAlgorithm,
2810        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2811        KeyManagerImportAsymmetricPrivateKeyResponder,
2812    )> {
2813        if let KeyManagerRequest::ImportAsymmetricPrivateKey {
2814            data,
2815            key_name,
2816            key_algorithm,
2817            key,
2818            responder,
2819        } = self
2820        {
2821            Some((data, key_name, key_algorithm, key, responder))
2822        } else {
2823            None
2824        }
2825    }
2826
2827    #[allow(irrefutable_let_patterns)]
2828    pub fn into_get_asymmetric_private_key(
2829        self,
2830    ) -> Option<(
2831        String,
2832        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
2833        KeyManagerGetAsymmetricPrivateKeyResponder,
2834    )> {
2835        if let KeyManagerRequest::GetAsymmetricPrivateKey { key_name, key, responder } = self {
2836            Some((key_name, key, responder))
2837        } else {
2838            None
2839        }
2840    }
2841
2842    #[allow(irrefutable_let_patterns)]
2843    pub fn into_delete_key(self) -> Option<(String, KeyManagerDeleteKeyResponder)> {
2844        if let KeyManagerRequest::DeleteKey { key_name, responder } = self {
2845            Some((key_name, responder))
2846        } else {
2847            None
2848        }
2849    }
2850
2851    /// Name of the method defined in FIDL
2852    pub fn method_name(&self) -> &'static str {
2853        match *self {
2854            KeyManagerRequest::SealData { .. } => "seal_data",
2855            KeyManagerRequest::UnsealData { .. } => "unseal_data",
2856            KeyManagerRequest::GenerateAsymmetricKey { .. } => "generate_asymmetric_key",
2857            KeyManagerRequest::GenerateAsymmetricKeyWithAlgorithm { .. } => {
2858                "generate_asymmetric_key_with_algorithm"
2859            }
2860            KeyManagerRequest::ImportAsymmetricPrivateKey { .. } => "import_asymmetric_private_key",
2861            KeyManagerRequest::GetAsymmetricPrivateKey { .. } => "get_asymmetric_private_key",
2862            KeyManagerRequest::DeleteKey { .. } => "delete_key",
2863        }
2864    }
2865}
2866
2867#[derive(Debug, Clone)]
2868pub struct KeyManagerControlHandle {
2869    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2870}
2871
2872impl fidl::endpoints::ControlHandle for KeyManagerControlHandle {
2873    fn shutdown(&self) {
2874        self.inner.shutdown()
2875    }
2876    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2877        self.inner.shutdown_with_epitaph(status)
2878    }
2879
2880    fn is_closed(&self) -> bool {
2881        self.inner.channel().is_closed()
2882    }
2883    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2884        self.inner.channel().on_closed()
2885    }
2886
2887    #[cfg(target_os = "fuchsia")]
2888    fn signal_peer(
2889        &self,
2890        clear_mask: zx::Signals,
2891        set_mask: zx::Signals,
2892    ) -> Result<(), zx_status::Status> {
2893        use fidl::Peered;
2894        self.inner.channel().signal_peer(clear_mask, set_mask)
2895    }
2896}
2897
2898impl KeyManagerControlHandle {}
2899
2900#[must_use = "FIDL methods require a response to be sent"]
2901#[derive(Debug)]
2902pub struct KeyManagerSealDataResponder {
2903    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
2904    tx_id: u32,
2905}
2906
2907/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
2908/// if the responder is dropped without sending a response, so that the client
2909/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2910impl std::ops::Drop for KeyManagerSealDataResponder {
2911    fn drop(&mut self) {
2912        self.control_handle.shutdown();
2913        // Safety: drops once, never accessed again
2914        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2915    }
2916}
2917
2918impl fidl::endpoints::Responder for KeyManagerSealDataResponder {
2919    type ControlHandle = KeyManagerControlHandle;
2920
2921    fn control_handle(&self) -> &KeyManagerControlHandle {
2922        &self.control_handle
2923    }
2924
2925    fn drop_without_shutdown(mut self) {
2926        // Safety: drops once, never accessed again due to mem::forget
2927        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2928        // Prevent Drop from running (which would shut down the channel)
2929        std::mem::forget(self);
2930    }
2931}
2932
2933impl KeyManagerSealDataResponder {
2934    /// Sends a response to the FIDL transaction.
2935    ///
2936    /// Sets the channel to shutdown if an error occurs.
2937    pub fn send(
2938        self,
2939        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2940    ) -> Result<(), fidl::Error> {
2941        let _result = self.send_raw(result);
2942        if _result.is_err() {
2943            self.control_handle.shutdown();
2944        }
2945        self.drop_without_shutdown();
2946        _result
2947    }
2948
2949    /// Similar to "send" but does not shutdown the channel if an error occurs.
2950    pub fn send_no_shutdown_on_err(
2951        self,
2952        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2953    ) -> Result<(), fidl::Error> {
2954        let _result = self.send_raw(result);
2955        self.drop_without_shutdown();
2956        _result
2957    }
2958
2959    fn send_raw(
2960        &self,
2961        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
2962    ) -> Result<(), fidl::Error> {
2963        self.control_handle
2964            .inner
2965            .send::<fidl::encoding::ResultType<KeyManagerSealDataResponse, Error>>(
2966                result.as_mut().map_err(|e| *e).map(|cipher_text| (cipher_text,)),
2967                self.tx_id,
2968                0x3d2fcd85d11c96bb,
2969                fidl::encoding::DynamicFlags::empty(),
2970            )
2971    }
2972}
2973
2974#[must_use = "FIDL methods require a response to be sent"]
2975#[derive(Debug)]
2976pub struct KeyManagerUnsealDataResponder {
2977    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
2978    tx_id: u32,
2979}
2980
2981/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
2982/// if the responder is dropped without sending a response, so that the client
2983/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2984impl std::ops::Drop for KeyManagerUnsealDataResponder {
2985    fn drop(&mut self) {
2986        self.control_handle.shutdown();
2987        // Safety: drops once, never accessed again
2988        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2989    }
2990}
2991
2992impl fidl::endpoints::Responder for KeyManagerUnsealDataResponder {
2993    type ControlHandle = KeyManagerControlHandle;
2994
2995    fn control_handle(&self) -> &KeyManagerControlHandle {
2996        &self.control_handle
2997    }
2998
2999    fn drop_without_shutdown(mut self) {
3000        // Safety: drops once, never accessed again due to mem::forget
3001        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3002        // Prevent Drop from running (which would shut down the channel)
3003        std::mem::forget(self);
3004    }
3005}
3006
3007impl KeyManagerUnsealDataResponder {
3008    /// Sends a response to the FIDL transaction.
3009    ///
3010    /// Sets the channel to shutdown if an error occurs.
3011    pub fn send(
3012        self,
3013        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
3014    ) -> Result<(), fidl::Error> {
3015        let _result = self.send_raw(result);
3016        if _result.is_err() {
3017            self.control_handle.shutdown();
3018        }
3019        self.drop_without_shutdown();
3020        _result
3021    }
3022
3023    /// Similar to "send" but does not shutdown the channel if an error occurs.
3024    pub fn send_no_shutdown_on_err(
3025        self,
3026        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
3027    ) -> Result<(), fidl::Error> {
3028        let _result = self.send_raw(result);
3029        self.drop_without_shutdown();
3030        _result
3031    }
3032
3033    fn send_raw(
3034        &self,
3035        mut result: Result<fidl_fuchsia_mem::Buffer, Error>,
3036    ) -> Result<(), fidl::Error> {
3037        self.control_handle
3038            .inner
3039            .send::<fidl::encoding::ResultType<KeyManagerUnsealDataResponse, Error>>(
3040                result.as_mut().map_err(|e| *e).map(|plain_text| (plain_text,)),
3041                self.tx_id,
3042                0x72dafc3131c1bca6,
3043                fidl::encoding::DynamicFlags::empty(),
3044            )
3045    }
3046}
3047
3048#[must_use = "FIDL methods require a response to be sent"]
3049#[derive(Debug)]
3050pub struct KeyManagerGenerateAsymmetricKeyResponder {
3051    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3052    tx_id: u32,
3053}
3054
3055/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3056/// if the responder is dropped without sending a response, so that the client
3057/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3058impl std::ops::Drop for KeyManagerGenerateAsymmetricKeyResponder {
3059    fn drop(&mut self) {
3060        self.control_handle.shutdown();
3061        // Safety: drops once, never accessed again
3062        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3063    }
3064}
3065
3066impl fidl::endpoints::Responder for KeyManagerGenerateAsymmetricKeyResponder {
3067    type ControlHandle = KeyManagerControlHandle;
3068
3069    fn control_handle(&self) -> &KeyManagerControlHandle {
3070        &self.control_handle
3071    }
3072
3073    fn drop_without_shutdown(mut self) {
3074        // Safety: drops once, never accessed again due to mem::forget
3075        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3076        // Prevent Drop from running (which would shut down the channel)
3077        std::mem::forget(self);
3078    }
3079}
3080
3081impl KeyManagerGenerateAsymmetricKeyResponder {
3082    /// Sends a response to the FIDL transaction.
3083    ///
3084    /// Sets the channel to shutdown if an error occurs.
3085    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3086        let _result = self.send_raw(result);
3087        if _result.is_err() {
3088            self.control_handle.shutdown();
3089        }
3090        self.drop_without_shutdown();
3091        _result
3092    }
3093
3094    /// Similar to "send" but does not shutdown the channel if an error occurs.
3095    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3096        let _result = self.send_raw(result);
3097        self.drop_without_shutdown();
3098        _result
3099    }
3100
3101    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3102        self.control_handle
3103            .inner
3104            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3105                result,
3106                self.tx_id,
3107                0x66f1aa7ff5eb183d,
3108                fidl::encoding::DynamicFlags::empty(),
3109            )
3110    }
3111}
3112
3113#[must_use = "FIDL methods require a response to be sent"]
3114#[derive(Debug)]
3115pub struct KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
3116    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3117    tx_id: u32,
3118}
3119
3120/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3121/// if the responder is dropped without sending a response, so that the client
3122/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3123impl std::ops::Drop for KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
3124    fn drop(&mut self) {
3125        self.control_handle.shutdown();
3126        // Safety: drops once, never accessed again
3127        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3128    }
3129}
3130
3131impl fidl::endpoints::Responder for KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
3132    type ControlHandle = KeyManagerControlHandle;
3133
3134    fn control_handle(&self) -> &KeyManagerControlHandle {
3135        &self.control_handle
3136    }
3137
3138    fn drop_without_shutdown(mut self) {
3139        // Safety: drops once, never accessed again due to mem::forget
3140        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3141        // Prevent Drop from running (which would shut down the channel)
3142        std::mem::forget(self);
3143    }
3144}
3145
3146impl KeyManagerGenerateAsymmetricKeyWithAlgorithmResponder {
3147    /// Sends a response to the FIDL transaction.
3148    ///
3149    /// Sets the channel to shutdown if an error occurs.
3150    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3151        let _result = self.send_raw(result);
3152        if _result.is_err() {
3153            self.control_handle.shutdown();
3154        }
3155        self.drop_without_shutdown();
3156        _result
3157    }
3158
3159    /// Similar to "send" but does not shutdown the channel if an error occurs.
3160    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3161        let _result = self.send_raw(result);
3162        self.drop_without_shutdown();
3163        _result
3164    }
3165
3166    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3167        self.control_handle
3168            .inner
3169            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3170                result,
3171                self.tx_id,
3172                0x2b9eac3ad0bc8a45,
3173                fidl::encoding::DynamicFlags::empty(),
3174            )
3175    }
3176}
3177
3178#[must_use = "FIDL methods require a response to be sent"]
3179#[derive(Debug)]
3180pub struct KeyManagerImportAsymmetricPrivateKeyResponder {
3181    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3182    tx_id: u32,
3183}
3184
3185/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3186/// if the responder is dropped without sending a response, so that the client
3187/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3188impl std::ops::Drop for KeyManagerImportAsymmetricPrivateKeyResponder {
3189    fn drop(&mut self) {
3190        self.control_handle.shutdown();
3191        // Safety: drops once, never accessed again
3192        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3193    }
3194}
3195
3196impl fidl::endpoints::Responder for KeyManagerImportAsymmetricPrivateKeyResponder {
3197    type ControlHandle = KeyManagerControlHandle;
3198
3199    fn control_handle(&self) -> &KeyManagerControlHandle {
3200        &self.control_handle
3201    }
3202
3203    fn drop_without_shutdown(mut self) {
3204        // Safety: drops once, never accessed again due to mem::forget
3205        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3206        // Prevent Drop from running (which would shut down the channel)
3207        std::mem::forget(self);
3208    }
3209}
3210
3211impl KeyManagerImportAsymmetricPrivateKeyResponder {
3212    /// Sends a response to the FIDL transaction.
3213    ///
3214    /// Sets the channel to shutdown if an error occurs.
3215    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3216        let _result = self.send_raw(result);
3217        if _result.is_err() {
3218            self.control_handle.shutdown();
3219        }
3220        self.drop_without_shutdown();
3221        _result
3222    }
3223
3224    /// Similar to "send" but does not shutdown the channel if an error occurs.
3225    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3226        let _result = self.send_raw(result);
3227        self.drop_without_shutdown();
3228        _result
3229    }
3230
3231    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3232        self.control_handle
3233            .inner
3234            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3235                result,
3236                self.tx_id,
3237                0x14c78f1ebb4eee71,
3238                fidl::encoding::DynamicFlags::empty(),
3239            )
3240    }
3241}
3242
3243#[must_use = "FIDL methods require a response to be sent"]
3244#[derive(Debug)]
3245pub struct KeyManagerGetAsymmetricPrivateKeyResponder {
3246    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3247    tx_id: u32,
3248}
3249
3250/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3251/// if the responder is dropped without sending a response, so that the client
3252/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3253impl std::ops::Drop for KeyManagerGetAsymmetricPrivateKeyResponder {
3254    fn drop(&mut self) {
3255        self.control_handle.shutdown();
3256        // Safety: drops once, never accessed again
3257        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3258    }
3259}
3260
3261impl fidl::endpoints::Responder for KeyManagerGetAsymmetricPrivateKeyResponder {
3262    type ControlHandle = KeyManagerControlHandle;
3263
3264    fn control_handle(&self) -> &KeyManagerControlHandle {
3265        &self.control_handle
3266    }
3267
3268    fn drop_without_shutdown(mut self) {
3269        // Safety: drops once, never accessed again due to mem::forget
3270        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3271        // Prevent Drop from running (which would shut down the channel)
3272        std::mem::forget(self);
3273    }
3274}
3275
3276impl KeyManagerGetAsymmetricPrivateKeyResponder {
3277    /// Sends a response to the FIDL transaction.
3278    ///
3279    /// Sets the channel to shutdown if an error occurs.
3280    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3281        let _result = self.send_raw(result);
3282        if _result.is_err() {
3283            self.control_handle.shutdown();
3284        }
3285        self.drop_without_shutdown();
3286        _result
3287    }
3288
3289    /// Similar to "send" but does not shutdown the channel if an error occurs.
3290    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3291        let _result = self.send_raw(result);
3292        self.drop_without_shutdown();
3293        _result
3294    }
3295
3296    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3297        self.control_handle
3298            .inner
3299            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3300                result,
3301                self.tx_id,
3302                0x3a257fc6b6ccc5cd,
3303                fidl::encoding::DynamicFlags::empty(),
3304            )
3305    }
3306}
3307
3308#[must_use = "FIDL methods require a response to be sent"]
3309#[derive(Debug)]
3310pub struct KeyManagerDeleteKeyResponder {
3311    control_handle: std::mem::ManuallyDrop<KeyManagerControlHandle>,
3312    tx_id: u32,
3313}
3314
3315/// Set the the channel to be shutdown (see [`KeyManagerControlHandle::shutdown`])
3316/// if the responder is dropped without sending a response, so that the client
3317/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3318impl std::ops::Drop for KeyManagerDeleteKeyResponder {
3319    fn drop(&mut self) {
3320        self.control_handle.shutdown();
3321        // Safety: drops once, never accessed again
3322        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3323    }
3324}
3325
3326impl fidl::endpoints::Responder for KeyManagerDeleteKeyResponder {
3327    type ControlHandle = KeyManagerControlHandle;
3328
3329    fn control_handle(&self) -> &KeyManagerControlHandle {
3330        &self.control_handle
3331    }
3332
3333    fn drop_without_shutdown(mut self) {
3334        // Safety: drops once, never accessed again due to mem::forget
3335        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3336        // Prevent Drop from running (which would shut down the channel)
3337        std::mem::forget(self);
3338    }
3339}
3340
3341impl KeyManagerDeleteKeyResponder {
3342    /// Sends a response to the FIDL transaction.
3343    ///
3344    /// Sets the channel to shutdown if an error occurs.
3345    pub fn send(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3346        let _result = self.send_raw(result);
3347        if _result.is_err() {
3348            self.control_handle.shutdown();
3349        }
3350        self.drop_without_shutdown();
3351        _result
3352    }
3353
3354    /// Similar to "send" but does not shutdown the channel if an error occurs.
3355    pub fn send_no_shutdown_on_err(self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3356        let _result = self.send_raw(result);
3357        self.drop_without_shutdown();
3358        _result
3359    }
3360
3361    fn send_raw(&self, mut result: Result<(), Error>) -> Result<(), fidl::Error> {
3362        self.control_handle
3363            .inner
3364            .send::<fidl::encoding::ResultType<fidl::encoding::EmptyStruct, Error>>(
3365                result,
3366                self.tx_id,
3367                0x55521e617d023aad,
3368                fidl::encoding::DynamicFlags::empty(),
3369            )
3370    }
3371}
3372
3373#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
3374pub struct StatelessKeyManagerMarker;
3375
3376impl fidl::endpoints::ProtocolMarker for StatelessKeyManagerMarker {
3377    type Proxy = StatelessKeyManagerProxy;
3378    type RequestStream = StatelessKeyManagerRequestStream;
3379    #[cfg(target_os = "fuchsia")]
3380    type SynchronousProxy = StatelessKeyManagerSynchronousProxy;
3381
3382    const DEBUG_NAME: &'static str = "fuchsia.kms.StatelessKeyManager";
3383}
3384impl fidl::endpoints::DiscoverableProtocolMarker for StatelessKeyManagerMarker {}
3385pub type StatelessKeyManagerGetHardwareDerivedKeyResult = Result<Vec<u8>, Error>;
3386
3387pub trait StatelessKeyManagerProxyInterface: Send + Sync {
3388    type GetHardwareDerivedKeyResponseFut: std::future::Future<
3389            Output = Result<StatelessKeyManagerGetHardwareDerivedKeyResult, fidl::Error>,
3390        > + Send;
3391    fn r#get_hardware_derived_key(&self, key_info: &[u8])
3392        -> Self::GetHardwareDerivedKeyResponseFut;
3393}
3394#[derive(Debug)]
3395#[cfg(target_os = "fuchsia")]
3396pub struct StatelessKeyManagerSynchronousProxy {
3397    client: fidl::client::sync::Client,
3398}
3399
3400#[cfg(target_os = "fuchsia")]
3401impl fidl::endpoints::SynchronousProxy for StatelessKeyManagerSynchronousProxy {
3402    type Proxy = StatelessKeyManagerProxy;
3403    type Protocol = StatelessKeyManagerMarker;
3404
3405    fn from_channel(inner: fidl::Channel) -> Self {
3406        Self::new(inner)
3407    }
3408
3409    fn into_channel(self) -> fidl::Channel {
3410        self.client.into_channel()
3411    }
3412
3413    fn as_channel(&self) -> &fidl::Channel {
3414        self.client.as_channel()
3415    }
3416}
3417
3418#[cfg(target_os = "fuchsia")]
3419impl StatelessKeyManagerSynchronousProxy {
3420    pub fn new(channel: fidl::Channel) -> Self {
3421        let protocol_name =
3422            <StatelessKeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3423        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
3424    }
3425
3426    pub fn into_channel(self) -> fidl::Channel {
3427        self.client.into_channel()
3428    }
3429
3430    /// Waits until an event arrives and returns it. It is safe for other
3431    /// threads to make concurrent requests while waiting for an event.
3432    pub fn wait_for_event(
3433        &self,
3434        deadline: zx::MonotonicInstant,
3435    ) -> Result<StatelessKeyManagerEvent, fidl::Error> {
3436        StatelessKeyManagerEvent::decode(self.client.wait_for_event(deadline)?)
3437    }
3438
3439    /// Get a hardware key derived key.
3440    ///
3441    /// Get a key derived from hardware root key using `key_info` as info and the trusted app ID
3442    /// as salt. This call is deterministic and always returns the same result if given the same
3443    /// `key_info` on the same device and would be different across different devices if they have
3444    /// different hardware keys.
3445    pub fn r#get_hardware_derived_key(
3446        &self,
3447        mut key_info: &[u8],
3448        ___deadline: zx::MonotonicInstant,
3449    ) -> Result<StatelessKeyManagerGetHardwareDerivedKeyResult, fidl::Error> {
3450        let _response = self.client.send_query::<
3451            StatelessKeyManagerGetHardwareDerivedKeyRequest,
3452            fidl::encoding::ResultType<StatelessKeyManagerGetHardwareDerivedKeyResponse, Error>,
3453        >(
3454            (key_info,),
3455            0x685043d9e68d5f86,
3456            fidl::encoding::DynamicFlags::empty(),
3457            ___deadline,
3458        )?;
3459        Ok(_response.map(|x| x.derived_key))
3460    }
3461}
3462
3463#[cfg(target_os = "fuchsia")]
3464impl From<StatelessKeyManagerSynchronousProxy> for zx::Handle {
3465    fn from(value: StatelessKeyManagerSynchronousProxy) -> Self {
3466        value.into_channel().into()
3467    }
3468}
3469
3470#[cfg(target_os = "fuchsia")]
3471impl From<fidl::Channel> for StatelessKeyManagerSynchronousProxy {
3472    fn from(value: fidl::Channel) -> Self {
3473        Self::new(value)
3474    }
3475}
3476
3477#[cfg(target_os = "fuchsia")]
3478impl fidl::endpoints::FromClient for StatelessKeyManagerSynchronousProxy {
3479    type Protocol = StatelessKeyManagerMarker;
3480
3481    fn from_client(value: fidl::endpoints::ClientEnd<StatelessKeyManagerMarker>) -> Self {
3482        Self::new(value.into_channel())
3483    }
3484}
3485
3486#[derive(Debug, Clone)]
3487pub struct StatelessKeyManagerProxy {
3488    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
3489}
3490
3491impl fidl::endpoints::Proxy for StatelessKeyManagerProxy {
3492    type Protocol = StatelessKeyManagerMarker;
3493
3494    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
3495        Self::new(inner)
3496    }
3497
3498    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
3499        self.client.into_channel().map_err(|client| Self { client })
3500    }
3501
3502    fn as_channel(&self) -> &::fidl::AsyncChannel {
3503        self.client.as_channel()
3504    }
3505}
3506
3507impl StatelessKeyManagerProxy {
3508    /// Create a new Proxy for fuchsia.kms/StatelessKeyManager.
3509    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
3510        let protocol_name =
3511            <StatelessKeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
3512        Self { client: fidl::client::Client::new(channel, protocol_name) }
3513    }
3514
3515    /// Get a Stream of events from the remote end of the protocol.
3516    ///
3517    /// # Panics
3518    ///
3519    /// Panics if the event stream was already taken.
3520    pub fn take_event_stream(&self) -> StatelessKeyManagerEventStream {
3521        StatelessKeyManagerEventStream { event_receiver: self.client.take_event_receiver() }
3522    }
3523
3524    /// Get a hardware key derived key.
3525    ///
3526    /// Get a key derived from hardware root key using `key_info` as info and the trusted app ID
3527    /// as salt. This call is deterministic and always returns the same result if given the same
3528    /// `key_info` on the same device and would be different across different devices if they have
3529    /// different hardware keys.
3530    pub fn r#get_hardware_derived_key(
3531        &self,
3532        mut key_info: &[u8],
3533    ) -> fidl::client::QueryResponseFut<
3534        StatelessKeyManagerGetHardwareDerivedKeyResult,
3535        fidl::encoding::DefaultFuchsiaResourceDialect,
3536    > {
3537        StatelessKeyManagerProxyInterface::r#get_hardware_derived_key(self, key_info)
3538    }
3539}
3540
3541impl StatelessKeyManagerProxyInterface for StatelessKeyManagerProxy {
3542    type GetHardwareDerivedKeyResponseFut = fidl::client::QueryResponseFut<
3543        StatelessKeyManagerGetHardwareDerivedKeyResult,
3544        fidl::encoding::DefaultFuchsiaResourceDialect,
3545    >;
3546    fn r#get_hardware_derived_key(
3547        &self,
3548        mut key_info: &[u8],
3549    ) -> Self::GetHardwareDerivedKeyResponseFut {
3550        fn _decode(
3551            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
3552        ) -> Result<StatelessKeyManagerGetHardwareDerivedKeyResult, fidl::Error> {
3553            let _response = fidl::client::decode_transaction_body::<
3554                fidl::encoding::ResultType<StatelessKeyManagerGetHardwareDerivedKeyResponse, Error>,
3555                fidl::encoding::DefaultFuchsiaResourceDialect,
3556                0x685043d9e68d5f86,
3557            >(_buf?)?;
3558            Ok(_response.map(|x| x.derived_key))
3559        }
3560        self.client.send_query_and_decode::<
3561            StatelessKeyManagerGetHardwareDerivedKeyRequest,
3562            StatelessKeyManagerGetHardwareDerivedKeyResult,
3563        >(
3564            (key_info,),
3565            0x685043d9e68d5f86,
3566            fidl::encoding::DynamicFlags::empty(),
3567            _decode,
3568        )
3569    }
3570}
3571
3572pub struct StatelessKeyManagerEventStream {
3573    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
3574}
3575
3576impl std::marker::Unpin for StatelessKeyManagerEventStream {}
3577
3578impl futures::stream::FusedStream for StatelessKeyManagerEventStream {
3579    fn is_terminated(&self) -> bool {
3580        self.event_receiver.is_terminated()
3581    }
3582}
3583
3584impl futures::Stream for StatelessKeyManagerEventStream {
3585    type Item = Result<StatelessKeyManagerEvent, fidl::Error>;
3586
3587    fn poll_next(
3588        mut self: std::pin::Pin<&mut Self>,
3589        cx: &mut std::task::Context<'_>,
3590    ) -> std::task::Poll<Option<Self::Item>> {
3591        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
3592            &mut self.event_receiver,
3593            cx
3594        )?) {
3595            Some(buf) => std::task::Poll::Ready(Some(StatelessKeyManagerEvent::decode(buf))),
3596            None => std::task::Poll::Ready(None),
3597        }
3598    }
3599}
3600
3601#[derive(Debug)]
3602pub enum StatelessKeyManagerEvent {}
3603
3604impl StatelessKeyManagerEvent {
3605    /// Decodes a message buffer as a [`StatelessKeyManagerEvent`].
3606    fn decode(
3607        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
3608    ) -> Result<StatelessKeyManagerEvent, fidl::Error> {
3609        let (bytes, _handles) = buf.split_mut();
3610        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3611        debug_assert_eq!(tx_header.tx_id, 0);
3612        match tx_header.ordinal {
3613            _ => Err(fidl::Error::UnknownOrdinal {
3614                ordinal: tx_header.ordinal,
3615                protocol_name:
3616                    <StatelessKeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3617            }),
3618        }
3619    }
3620}
3621
3622/// A Stream of incoming requests for fuchsia.kms/StatelessKeyManager.
3623pub struct StatelessKeyManagerRequestStream {
3624    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3625    is_terminated: bool,
3626}
3627
3628impl std::marker::Unpin for StatelessKeyManagerRequestStream {}
3629
3630impl futures::stream::FusedStream for StatelessKeyManagerRequestStream {
3631    fn is_terminated(&self) -> bool {
3632        self.is_terminated
3633    }
3634}
3635
3636impl fidl::endpoints::RequestStream for StatelessKeyManagerRequestStream {
3637    type Protocol = StatelessKeyManagerMarker;
3638    type ControlHandle = StatelessKeyManagerControlHandle;
3639
3640    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
3641        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
3642    }
3643
3644    fn control_handle(&self) -> Self::ControlHandle {
3645        StatelessKeyManagerControlHandle { inner: self.inner.clone() }
3646    }
3647
3648    fn into_inner(
3649        self,
3650    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
3651    {
3652        (self.inner, self.is_terminated)
3653    }
3654
3655    fn from_inner(
3656        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3657        is_terminated: bool,
3658    ) -> Self {
3659        Self { inner, is_terminated }
3660    }
3661}
3662
3663impl futures::Stream for StatelessKeyManagerRequestStream {
3664    type Item = Result<StatelessKeyManagerRequest, fidl::Error>;
3665
3666    fn poll_next(
3667        mut self: std::pin::Pin<&mut Self>,
3668        cx: &mut std::task::Context<'_>,
3669    ) -> std::task::Poll<Option<Self::Item>> {
3670        let this = &mut *self;
3671        if this.inner.check_shutdown(cx) {
3672            this.is_terminated = true;
3673            return std::task::Poll::Ready(None);
3674        }
3675        if this.is_terminated {
3676            panic!("polled StatelessKeyManagerRequestStream after completion");
3677        }
3678        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
3679            |bytes, handles| {
3680                match this.inner.channel().read_etc(cx, bytes, handles) {
3681                    std::task::Poll::Ready(Ok(())) => {}
3682                    std::task::Poll::Pending => return std::task::Poll::Pending,
3683                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
3684                        this.is_terminated = true;
3685                        return std::task::Poll::Ready(None);
3686                    }
3687                    std::task::Poll::Ready(Err(e)) => {
3688                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
3689                            e.into(),
3690                        ))))
3691                    }
3692                }
3693
3694                // A message has been received from the channel
3695                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
3696
3697                std::task::Poll::Ready(Some(match header.ordinal {
3698                0x685043d9e68d5f86 => {
3699                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
3700                    let mut req = fidl::new_empty!(StatelessKeyManagerGetHardwareDerivedKeyRequest, fidl::encoding::DefaultFuchsiaResourceDialect);
3701                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<StatelessKeyManagerGetHardwareDerivedKeyRequest>(&header, _body_bytes, handles, &mut req)?;
3702                    let control_handle = StatelessKeyManagerControlHandle {
3703                        inner: this.inner.clone(),
3704                    };
3705                    Ok(StatelessKeyManagerRequest::GetHardwareDerivedKey {key_info: req.key_info,
3706
3707                        responder: StatelessKeyManagerGetHardwareDerivedKeyResponder {
3708                            control_handle: std::mem::ManuallyDrop::new(control_handle),
3709                            tx_id: header.tx_id,
3710                        },
3711                    })
3712                }
3713                _ => Err(fidl::Error::UnknownOrdinal {
3714                    ordinal: header.ordinal,
3715                    protocol_name: <StatelessKeyManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
3716                }),
3717            }))
3718            },
3719        )
3720    }
3721}
3722
3723#[derive(Debug)]
3724pub enum StatelessKeyManagerRequest {
3725    /// Get a hardware key derived key.
3726    ///
3727    /// Get a key derived from hardware root key using `key_info` as info and the trusted app ID
3728    /// as salt. This call is deterministic and always returns the same result if given the same
3729    /// `key_info` on the same device and would be different across different devices if they have
3730    /// different hardware keys.
3731    GetHardwareDerivedKey {
3732        key_info: Vec<u8>,
3733        responder: StatelessKeyManagerGetHardwareDerivedKeyResponder,
3734    },
3735}
3736
3737impl StatelessKeyManagerRequest {
3738    #[allow(irrefutable_let_patterns)]
3739    pub fn into_get_hardware_derived_key(
3740        self,
3741    ) -> Option<(Vec<u8>, StatelessKeyManagerGetHardwareDerivedKeyResponder)> {
3742        if let StatelessKeyManagerRequest::GetHardwareDerivedKey { key_info, responder } = self {
3743            Some((key_info, responder))
3744        } else {
3745            None
3746        }
3747    }
3748
3749    /// Name of the method defined in FIDL
3750    pub fn method_name(&self) -> &'static str {
3751        match *self {
3752            StatelessKeyManagerRequest::GetHardwareDerivedKey { .. } => "get_hardware_derived_key",
3753        }
3754    }
3755}
3756
3757#[derive(Debug, Clone)]
3758pub struct StatelessKeyManagerControlHandle {
3759    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
3760}
3761
3762impl fidl::endpoints::ControlHandle for StatelessKeyManagerControlHandle {
3763    fn shutdown(&self) {
3764        self.inner.shutdown()
3765    }
3766    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
3767        self.inner.shutdown_with_epitaph(status)
3768    }
3769
3770    fn is_closed(&self) -> bool {
3771        self.inner.channel().is_closed()
3772    }
3773    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
3774        self.inner.channel().on_closed()
3775    }
3776
3777    #[cfg(target_os = "fuchsia")]
3778    fn signal_peer(
3779        &self,
3780        clear_mask: zx::Signals,
3781        set_mask: zx::Signals,
3782    ) -> Result<(), zx_status::Status> {
3783        use fidl::Peered;
3784        self.inner.channel().signal_peer(clear_mask, set_mask)
3785    }
3786}
3787
3788impl StatelessKeyManagerControlHandle {}
3789
3790#[must_use = "FIDL methods require a response to be sent"]
3791#[derive(Debug)]
3792pub struct StatelessKeyManagerGetHardwareDerivedKeyResponder {
3793    control_handle: std::mem::ManuallyDrop<StatelessKeyManagerControlHandle>,
3794    tx_id: u32,
3795}
3796
3797/// Set the the channel to be shutdown (see [`StatelessKeyManagerControlHandle::shutdown`])
3798/// if the responder is dropped without sending a response, so that the client
3799/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
3800impl std::ops::Drop for StatelessKeyManagerGetHardwareDerivedKeyResponder {
3801    fn drop(&mut self) {
3802        self.control_handle.shutdown();
3803        // Safety: drops once, never accessed again
3804        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3805    }
3806}
3807
3808impl fidl::endpoints::Responder for StatelessKeyManagerGetHardwareDerivedKeyResponder {
3809    type ControlHandle = StatelessKeyManagerControlHandle;
3810
3811    fn control_handle(&self) -> &StatelessKeyManagerControlHandle {
3812        &self.control_handle
3813    }
3814
3815    fn drop_without_shutdown(mut self) {
3816        // Safety: drops once, never accessed again due to mem::forget
3817        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
3818        // Prevent Drop from running (which would shut down the channel)
3819        std::mem::forget(self);
3820    }
3821}
3822
3823impl StatelessKeyManagerGetHardwareDerivedKeyResponder {
3824    /// Sends a response to the FIDL transaction.
3825    ///
3826    /// Sets the channel to shutdown if an error occurs.
3827    pub fn send(self, mut result: Result<&[u8], Error>) -> Result<(), fidl::Error> {
3828        let _result = self.send_raw(result);
3829        if _result.is_err() {
3830            self.control_handle.shutdown();
3831        }
3832        self.drop_without_shutdown();
3833        _result
3834    }
3835
3836    /// Similar to "send" but does not shutdown the channel if an error occurs.
3837    pub fn send_no_shutdown_on_err(
3838        self,
3839        mut result: Result<&[u8], Error>,
3840    ) -> Result<(), fidl::Error> {
3841        let _result = self.send_raw(result);
3842        self.drop_without_shutdown();
3843        _result
3844    }
3845
3846    fn send_raw(&self, mut result: Result<&[u8], Error>) -> Result<(), fidl::Error> {
3847        self.control_handle.inner.send::<fidl::encoding::ResultType<
3848            StatelessKeyManagerGetHardwareDerivedKeyResponse,
3849            Error,
3850        >>(
3851            result.map(|derived_key| (derived_key,)),
3852            self.tx_id,
3853            0x685043d9e68d5f86,
3854            fidl::encoding::DynamicFlags::empty(),
3855        )
3856    }
3857}
3858
3859mod internal {
3860    use super::*;
3861
3862    impl fidl::encoding::ResourceTypeMarker for AsymmetricPrivateKeySignRequest {
3863        type Borrowed<'a> = &'a mut Self;
3864        fn take_or_borrow<'a>(
3865            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3866        ) -> Self::Borrowed<'a> {
3867            value
3868        }
3869    }
3870
3871    unsafe impl fidl::encoding::TypeMarker for AsymmetricPrivateKeySignRequest {
3872        type Owned = Self;
3873
3874        #[inline(always)]
3875        fn inline_align(_context: fidl::encoding::Context) -> usize {
3876            8
3877        }
3878
3879        #[inline(always)]
3880        fn inline_size(_context: fidl::encoding::Context) -> usize {
3881            16
3882        }
3883    }
3884
3885    unsafe impl
3886        fidl::encoding::Encode<
3887            AsymmetricPrivateKeySignRequest,
3888            fidl::encoding::DefaultFuchsiaResourceDialect,
3889        > for &mut AsymmetricPrivateKeySignRequest
3890    {
3891        #[inline]
3892        unsafe fn encode(
3893            self,
3894            encoder: &mut fidl::encoding::Encoder<
3895                '_,
3896                fidl::encoding::DefaultFuchsiaResourceDialect,
3897            >,
3898            offset: usize,
3899            _depth: fidl::encoding::Depth,
3900        ) -> fidl::Result<()> {
3901            encoder.debug_check_bounds::<AsymmetricPrivateKeySignRequest>(offset);
3902            // Delegate to tuple encoding.
3903            fidl::encoding::Encode::<
3904                AsymmetricPrivateKeySignRequest,
3905                fidl::encoding::DefaultFuchsiaResourceDialect,
3906            >::encode(
3907                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
3908                    &mut self.data,
3909                ),),
3910                encoder,
3911                offset,
3912                _depth,
3913            )
3914        }
3915    }
3916    unsafe impl<
3917            T0: fidl::encoding::Encode<
3918                fidl_fuchsia_mem::Buffer,
3919                fidl::encoding::DefaultFuchsiaResourceDialect,
3920            >,
3921        >
3922        fidl::encoding::Encode<
3923            AsymmetricPrivateKeySignRequest,
3924            fidl::encoding::DefaultFuchsiaResourceDialect,
3925        > for (T0,)
3926    {
3927        #[inline]
3928        unsafe fn encode(
3929            self,
3930            encoder: &mut fidl::encoding::Encoder<
3931                '_,
3932                fidl::encoding::DefaultFuchsiaResourceDialect,
3933            >,
3934            offset: usize,
3935            depth: fidl::encoding::Depth,
3936        ) -> fidl::Result<()> {
3937            encoder.debug_check_bounds::<AsymmetricPrivateKeySignRequest>(offset);
3938            // Zero out padding regions. There's no need to apply masks
3939            // because the unmasked parts will be overwritten by fields.
3940            // Write the fields.
3941            self.0.encode(encoder, offset + 0, depth)?;
3942            Ok(())
3943        }
3944    }
3945
3946    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3947        for AsymmetricPrivateKeySignRequest
3948    {
3949        #[inline(always)]
3950        fn new_empty() -> Self {
3951            Self {
3952                data: fidl::new_empty!(
3953                    fidl_fuchsia_mem::Buffer,
3954                    fidl::encoding::DefaultFuchsiaResourceDialect
3955                ),
3956            }
3957        }
3958
3959        #[inline]
3960        unsafe fn decode(
3961            &mut self,
3962            decoder: &mut fidl::encoding::Decoder<
3963                '_,
3964                fidl::encoding::DefaultFuchsiaResourceDialect,
3965            >,
3966            offset: usize,
3967            _depth: fidl::encoding::Depth,
3968        ) -> fidl::Result<()> {
3969            decoder.debug_check_bounds::<Self>(offset);
3970            // Verify that padding bytes are zero.
3971            fidl::decode!(
3972                fidl_fuchsia_mem::Buffer,
3973                fidl::encoding::DefaultFuchsiaResourceDialect,
3974                &mut self.data,
3975                decoder,
3976                offset + 0,
3977                _depth
3978            )?;
3979            Ok(())
3980        }
3981    }
3982
3983    impl fidl::encoding::ResourceTypeMarker for KeyManagerGenerateAsymmetricKeyRequest {
3984        type Borrowed<'a> = &'a mut Self;
3985        fn take_or_borrow<'a>(
3986            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3987        ) -> Self::Borrowed<'a> {
3988            value
3989        }
3990    }
3991
3992    unsafe impl fidl::encoding::TypeMarker for KeyManagerGenerateAsymmetricKeyRequest {
3993        type Owned = Self;
3994
3995        #[inline(always)]
3996        fn inline_align(_context: fidl::encoding::Context) -> usize {
3997            8
3998        }
3999
4000        #[inline(always)]
4001        fn inline_size(_context: fidl::encoding::Context) -> usize {
4002            24
4003        }
4004    }
4005
4006    unsafe impl
4007        fidl::encoding::Encode<
4008            KeyManagerGenerateAsymmetricKeyRequest,
4009            fidl::encoding::DefaultFuchsiaResourceDialect,
4010        > for &mut KeyManagerGenerateAsymmetricKeyRequest
4011    {
4012        #[inline]
4013        unsafe fn encode(
4014            self,
4015            encoder: &mut fidl::encoding::Encoder<
4016                '_,
4017                fidl::encoding::DefaultFuchsiaResourceDialect,
4018            >,
4019            offset: usize,
4020            _depth: fidl::encoding::Depth,
4021        ) -> fidl::Result<()> {
4022            encoder.debug_check_bounds::<KeyManagerGenerateAsymmetricKeyRequest>(offset);
4023            // Delegate to tuple encoding.
4024            fidl::encoding::Encode::<
4025                KeyManagerGenerateAsymmetricKeyRequest,
4026                fidl::encoding::DefaultFuchsiaResourceDialect,
4027            >::encode(
4028                (
4029                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(
4030                        &self.key_name,
4031                    ),
4032                    <fidl::encoding::Endpoint<
4033                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4034                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4035                        &mut self.key
4036                    ),
4037                ),
4038                encoder,
4039                offset,
4040                _depth,
4041            )
4042        }
4043    }
4044    unsafe impl<
4045            T0: fidl::encoding::Encode<
4046                fidl::encoding::BoundedString<32>,
4047                fidl::encoding::DefaultFuchsiaResourceDialect,
4048            >,
4049            T1: fidl::encoding::Encode<
4050                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4051                fidl::encoding::DefaultFuchsiaResourceDialect,
4052            >,
4053        >
4054        fidl::encoding::Encode<
4055            KeyManagerGenerateAsymmetricKeyRequest,
4056            fidl::encoding::DefaultFuchsiaResourceDialect,
4057        > for (T0, T1)
4058    {
4059        #[inline]
4060        unsafe fn encode(
4061            self,
4062            encoder: &mut fidl::encoding::Encoder<
4063                '_,
4064                fidl::encoding::DefaultFuchsiaResourceDialect,
4065            >,
4066            offset: usize,
4067            depth: fidl::encoding::Depth,
4068        ) -> fidl::Result<()> {
4069            encoder.debug_check_bounds::<KeyManagerGenerateAsymmetricKeyRequest>(offset);
4070            // Zero out padding regions. There's no need to apply masks
4071            // because the unmasked parts will be overwritten by fields.
4072            unsafe {
4073                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
4074                (ptr as *mut u64).write_unaligned(0);
4075            }
4076            // Write the fields.
4077            self.0.encode(encoder, offset + 0, depth)?;
4078            self.1.encode(encoder, offset + 16, depth)?;
4079            Ok(())
4080        }
4081    }
4082
4083    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4084        for KeyManagerGenerateAsymmetricKeyRequest
4085    {
4086        #[inline(always)]
4087        fn new_empty() -> Self {
4088            Self {
4089                key_name: fidl::new_empty!(
4090                    fidl::encoding::BoundedString<32>,
4091                    fidl::encoding::DefaultFuchsiaResourceDialect
4092                ),
4093                key: fidl::new_empty!(
4094                    fidl::encoding::Endpoint<
4095                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4096                    >,
4097                    fidl::encoding::DefaultFuchsiaResourceDialect
4098                ),
4099            }
4100        }
4101
4102        #[inline]
4103        unsafe fn decode(
4104            &mut self,
4105            decoder: &mut fidl::encoding::Decoder<
4106                '_,
4107                fidl::encoding::DefaultFuchsiaResourceDialect,
4108            >,
4109            offset: usize,
4110            _depth: fidl::encoding::Depth,
4111        ) -> fidl::Result<()> {
4112            decoder.debug_check_bounds::<Self>(offset);
4113            // Verify that padding bytes are zero.
4114            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
4115            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4116            let mask = 0xffffffff00000000u64;
4117            let maskedval = padval & mask;
4118            if maskedval != 0 {
4119                return Err(fidl::Error::NonZeroPadding {
4120                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
4121                });
4122            }
4123            fidl::decode!(
4124                fidl::encoding::BoundedString<32>,
4125                fidl::encoding::DefaultFuchsiaResourceDialect,
4126                &mut self.key_name,
4127                decoder,
4128                offset + 0,
4129                _depth
4130            )?;
4131            fidl::decode!(
4132                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4133                fidl::encoding::DefaultFuchsiaResourceDialect,
4134                &mut self.key,
4135                decoder,
4136                offset + 16,
4137                _depth
4138            )?;
4139            Ok(())
4140        }
4141    }
4142
4143    impl fidl::encoding::ResourceTypeMarker for KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest {
4144        type Borrowed<'a> = &'a mut Self;
4145        fn take_or_borrow<'a>(
4146            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4147        ) -> Self::Borrowed<'a> {
4148            value
4149        }
4150    }
4151
4152    unsafe impl fidl::encoding::TypeMarker for KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest {
4153        type Owned = Self;
4154
4155        #[inline(always)]
4156        fn inline_align(_context: fidl::encoding::Context) -> usize {
4157            8
4158        }
4159
4160        #[inline(always)]
4161        fn inline_size(_context: fidl::encoding::Context) -> usize {
4162            24
4163        }
4164    }
4165
4166    unsafe impl
4167        fidl::encoding::Encode<
4168            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
4169            fidl::encoding::DefaultFuchsiaResourceDialect,
4170        > for &mut KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest
4171    {
4172        #[inline]
4173        unsafe fn encode(
4174            self,
4175            encoder: &mut fidl::encoding::Encoder<
4176                '_,
4177                fidl::encoding::DefaultFuchsiaResourceDialect,
4178            >,
4179            offset: usize,
4180            _depth: fidl::encoding::Depth,
4181        ) -> fidl::Result<()> {
4182            encoder
4183                .debug_check_bounds::<KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest>(offset);
4184            // Delegate to tuple encoding.
4185            fidl::encoding::Encode::<
4186                KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
4187                fidl::encoding::DefaultFuchsiaResourceDialect,
4188            >::encode(
4189                (
4190                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(
4191                        &self.key_name,
4192                    ),
4193                    <AsymmetricKeyAlgorithm as fidl::encoding::ValueTypeMarker>::borrow(
4194                        &self.key_algorithm,
4195                    ),
4196                    <fidl::encoding::Endpoint<
4197                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4198                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4199                        &mut self.key
4200                    ),
4201                ),
4202                encoder,
4203                offset,
4204                _depth,
4205            )
4206        }
4207    }
4208    unsafe impl<
4209            T0: fidl::encoding::Encode<
4210                fidl::encoding::BoundedString<32>,
4211                fidl::encoding::DefaultFuchsiaResourceDialect,
4212            >,
4213            T1: fidl::encoding::Encode<
4214                AsymmetricKeyAlgorithm,
4215                fidl::encoding::DefaultFuchsiaResourceDialect,
4216            >,
4217            T2: fidl::encoding::Encode<
4218                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4219                fidl::encoding::DefaultFuchsiaResourceDialect,
4220            >,
4221        >
4222        fidl::encoding::Encode<
4223            KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest,
4224            fidl::encoding::DefaultFuchsiaResourceDialect,
4225        > for (T0, T1, T2)
4226    {
4227        #[inline]
4228        unsafe fn encode(
4229            self,
4230            encoder: &mut fidl::encoding::Encoder<
4231                '_,
4232                fidl::encoding::DefaultFuchsiaResourceDialect,
4233            >,
4234            offset: usize,
4235            depth: fidl::encoding::Depth,
4236        ) -> fidl::Result<()> {
4237            encoder
4238                .debug_check_bounds::<KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest>(offset);
4239            // Zero out padding regions. There's no need to apply masks
4240            // because the unmasked parts will be overwritten by fields.
4241            // Write the fields.
4242            self.0.encode(encoder, offset + 0, depth)?;
4243            self.1.encode(encoder, offset + 16, depth)?;
4244            self.2.encode(encoder, offset + 20, depth)?;
4245            Ok(())
4246        }
4247    }
4248
4249    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4250        for KeyManagerGenerateAsymmetricKeyWithAlgorithmRequest
4251    {
4252        #[inline(always)]
4253        fn new_empty() -> Self {
4254            Self {
4255                key_name: fidl::new_empty!(
4256                    fidl::encoding::BoundedString<32>,
4257                    fidl::encoding::DefaultFuchsiaResourceDialect
4258                ),
4259                key_algorithm: fidl::new_empty!(
4260                    AsymmetricKeyAlgorithm,
4261                    fidl::encoding::DefaultFuchsiaResourceDialect
4262                ),
4263                key: fidl::new_empty!(
4264                    fidl::encoding::Endpoint<
4265                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4266                    >,
4267                    fidl::encoding::DefaultFuchsiaResourceDialect
4268                ),
4269            }
4270        }
4271
4272        #[inline]
4273        unsafe fn decode(
4274            &mut self,
4275            decoder: &mut fidl::encoding::Decoder<
4276                '_,
4277                fidl::encoding::DefaultFuchsiaResourceDialect,
4278            >,
4279            offset: usize,
4280            _depth: fidl::encoding::Depth,
4281        ) -> fidl::Result<()> {
4282            decoder.debug_check_bounds::<Self>(offset);
4283            // Verify that padding bytes are zero.
4284            fidl::decode!(
4285                fidl::encoding::BoundedString<32>,
4286                fidl::encoding::DefaultFuchsiaResourceDialect,
4287                &mut self.key_name,
4288                decoder,
4289                offset + 0,
4290                _depth
4291            )?;
4292            fidl::decode!(
4293                AsymmetricKeyAlgorithm,
4294                fidl::encoding::DefaultFuchsiaResourceDialect,
4295                &mut self.key_algorithm,
4296                decoder,
4297                offset + 16,
4298                _depth
4299            )?;
4300            fidl::decode!(
4301                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4302                fidl::encoding::DefaultFuchsiaResourceDialect,
4303                &mut self.key,
4304                decoder,
4305                offset + 20,
4306                _depth
4307            )?;
4308            Ok(())
4309        }
4310    }
4311
4312    impl fidl::encoding::ResourceTypeMarker for KeyManagerGetAsymmetricPrivateKeyRequest {
4313        type Borrowed<'a> = &'a mut Self;
4314        fn take_or_borrow<'a>(
4315            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4316        ) -> Self::Borrowed<'a> {
4317            value
4318        }
4319    }
4320
4321    unsafe impl fidl::encoding::TypeMarker for KeyManagerGetAsymmetricPrivateKeyRequest {
4322        type Owned = Self;
4323
4324        #[inline(always)]
4325        fn inline_align(_context: fidl::encoding::Context) -> usize {
4326            8
4327        }
4328
4329        #[inline(always)]
4330        fn inline_size(_context: fidl::encoding::Context) -> usize {
4331            24
4332        }
4333    }
4334
4335    unsafe impl
4336        fidl::encoding::Encode<
4337            KeyManagerGetAsymmetricPrivateKeyRequest,
4338            fidl::encoding::DefaultFuchsiaResourceDialect,
4339        > for &mut KeyManagerGetAsymmetricPrivateKeyRequest
4340    {
4341        #[inline]
4342        unsafe fn encode(
4343            self,
4344            encoder: &mut fidl::encoding::Encoder<
4345                '_,
4346                fidl::encoding::DefaultFuchsiaResourceDialect,
4347            >,
4348            offset: usize,
4349            _depth: fidl::encoding::Depth,
4350        ) -> fidl::Result<()> {
4351            encoder.debug_check_bounds::<KeyManagerGetAsymmetricPrivateKeyRequest>(offset);
4352            // Delegate to tuple encoding.
4353            fidl::encoding::Encode::<
4354                KeyManagerGetAsymmetricPrivateKeyRequest,
4355                fidl::encoding::DefaultFuchsiaResourceDialect,
4356            >::encode(
4357                (
4358                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(
4359                        &self.key_name,
4360                    ),
4361                    <fidl::encoding::Endpoint<
4362                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4363                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4364                        &mut self.key
4365                    ),
4366                ),
4367                encoder,
4368                offset,
4369                _depth,
4370            )
4371        }
4372    }
4373    unsafe impl<
4374            T0: fidl::encoding::Encode<
4375                fidl::encoding::BoundedString<32>,
4376                fidl::encoding::DefaultFuchsiaResourceDialect,
4377            >,
4378            T1: fidl::encoding::Encode<
4379                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4380                fidl::encoding::DefaultFuchsiaResourceDialect,
4381            >,
4382        >
4383        fidl::encoding::Encode<
4384            KeyManagerGetAsymmetricPrivateKeyRequest,
4385            fidl::encoding::DefaultFuchsiaResourceDialect,
4386        > for (T0, T1)
4387    {
4388        #[inline]
4389        unsafe fn encode(
4390            self,
4391            encoder: &mut fidl::encoding::Encoder<
4392                '_,
4393                fidl::encoding::DefaultFuchsiaResourceDialect,
4394            >,
4395            offset: usize,
4396            depth: fidl::encoding::Depth,
4397        ) -> fidl::Result<()> {
4398            encoder.debug_check_bounds::<KeyManagerGetAsymmetricPrivateKeyRequest>(offset);
4399            // Zero out padding regions. There's no need to apply masks
4400            // because the unmasked parts will be overwritten by fields.
4401            unsafe {
4402                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
4403                (ptr as *mut u64).write_unaligned(0);
4404            }
4405            // Write the fields.
4406            self.0.encode(encoder, offset + 0, depth)?;
4407            self.1.encode(encoder, offset + 16, depth)?;
4408            Ok(())
4409        }
4410    }
4411
4412    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4413        for KeyManagerGetAsymmetricPrivateKeyRequest
4414    {
4415        #[inline(always)]
4416        fn new_empty() -> Self {
4417            Self {
4418                key_name: fidl::new_empty!(
4419                    fidl::encoding::BoundedString<32>,
4420                    fidl::encoding::DefaultFuchsiaResourceDialect
4421                ),
4422                key: fidl::new_empty!(
4423                    fidl::encoding::Endpoint<
4424                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4425                    >,
4426                    fidl::encoding::DefaultFuchsiaResourceDialect
4427                ),
4428            }
4429        }
4430
4431        #[inline]
4432        unsafe fn decode(
4433            &mut self,
4434            decoder: &mut fidl::encoding::Decoder<
4435                '_,
4436                fidl::encoding::DefaultFuchsiaResourceDialect,
4437            >,
4438            offset: usize,
4439            _depth: fidl::encoding::Depth,
4440        ) -> fidl::Result<()> {
4441            decoder.debug_check_bounds::<Self>(offset);
4442            // Verify that padding bytes are zero.
4443            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
4444            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4445            let mask = 0xffffffff00000000u64;
4446            let maskedval = padval & mask;
4447            if maskedval != 0 {
4448                return Err(fidl::Error::NonZeroPadding {
4449                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
4450                });
4451            }
4452            fidl::decode!(
4453                fidl::encoding::BoundedString<32>,
4454                fidl::encoding::DefaultFuchsiaResourceDialect,
4455                &mut self.key_name,
4456                decoder,
4457                offset + 0,
4458                _depth
4459            )?;
4460            fidl::decode!(
4461                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4462                fidl::encoding::DefaultFuchsiaResourceDialect,
4463                &mut self.key,
4464                decoder,
4465                offset + 16,
4466                _depth
4467            )?;
4468            Ok(())
4469        }
4470    }
4471
4472    impl fidl::encoding::ResourceTypeMarker for KeyManagerImportAsymmetricPrivateKeyRequest {
4473        type Borrowed<'a> = &'a mut Self;
4474        fn take_or_borrow<'a>(
4475            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4476        ) -> Self::Borrowed<'a> {
4477            value
4478        }
4479    }
4480
4481    unsafe impl fidl::encoding::TypeMarker for KeyManagerImportAsymmetricPrivateKeyRequest {
4482        type Owned = Self;
4483
4484        #[inline(always)]
4485        fn inline_align(_context: fidl::encoding::Context) -> usize {
4486            8
4487        }
4488
4489        #[inline(always)]
4490        fn inline_size(_context: fidl::encoding::Context) -> usize {
4491            40
4492        }
4493    }
4494
4495    unsafe impl
4496        fidl::encoding::Encode<
4497            KeyManagerImportAsymmetricPrivateKeyRequest,
4498            fidl::encoding::DefaultFuchsiaResourceDialect,
4499        > for &mut KeyManagerImportAsymmetricPrivateKeyRequest
4500    {
4501        #[inline]
4502        unsafe fn encode(
4503            self,
4504            encoder: &mut fidl::encoding::Encoder<
4505                '_,
4506                fidl::encoding::DefaultFuchsiaResourceDialect,
4507            >,
4508            offset: usize,
4509            _depth: fidl::encoding::Depth,
4510        ) -> fidl::Result<()> {
4511            encoder.debug_check_bounds::<KeyManagerImportAsymmetricPrivateKeyRequest>(offset);
4512            // Delegate to tuple encoding.
4513            fidl::encoding::Encode::<KeyManagerImportAsymmetricPrivateKeyRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
4514                (
4515                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.data),
4516                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(&self.key_name),
4517                    <AsymmetricKeyAlgorithm as fidl::encoding::ValueTypeMarker>::borrow(&self.key_algorithm),
4518                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.key),
4519                ),
4520                encoder, offset, _depth
4521            )
4522        }
4523    }
4524    unsafe impl<
4525            T0: fidl::encoding::Encode<
4526                fidl::encoding::UnboundedVector<u8>,
4527                fidl::encoding::DefaultFuchsiaResourceDialect,
4528            >,
4529            T1: fidl::encoding::Encode<
4530                fidl::encoding::BoundedString<32>,
4531                fidl::encoding::DefaultFuchsiaResourceDialect,
4532            >,
4533            T2: fidl::encoding::Encode<
4534                AsymmetricKeyAlgorithm,
4535                fidl::encoding::DefaultFuchsiaResourceDialect,
4536            >,
4537            T3: fidl::encoding::Encode<
4538                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4539                fidl::encoding::DefaultFuchsiaResourceDialect,
4540            >,
4541        >
4542        fidl::encoding::Encode<
4543            KeyManagerImportAsymmetricPrivateKeyRequest,
4544            fidl::encoding::DefaultFuchsiaResourceDialect,
4545        > for (T0, T1, T2, T3)
4546    {
4547        #[inline]
4548        unsafe fn encode(
4549            self,
4550            encoder: &mut fidl::encoding::Encoder<
4551                '_,
4552                fidl::encoding::DefaultFuchsiaResourceDialect,
4553            >,
4554            offset: usize,
4555            depth: fidl::encoding::Depth,
4556        ) -> fidl::Result<()> {
4557            encoder.debug_check_bounds::<KeyManagerImportAsymmetricPrivateKeyRequest>(offset);
4558            // Zero out padding regions. There's no need to apply masks
4559            // because the unmasked parts will be overwritten by fields.
4560            // Write the fields.
4561            self.0.encode(encoder, offset + 0, depth)?;
4562            self.1.encode(encoder, offset + 16, depth)?;
4563            self.2.encode(encoder, offset + 32, depth)?;
4564            self.3.encode(encoder, offset + 36, depth)?;
4565            Ok(())
4566        }
4567    }
4568
4569    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4570        for KeyManagerImportAsymmetricPrivateKeyRequest
4571    {
4572        #[inline(always)]
4573        fn new_empty() -> Self {
4574            Self {
4575                data: fidl::new_empty!(
4576                    fidl::encoding::UnboundedVector<u8>,
4577                    fidl::encoding::DefaultFuchsiaResourceDialect
4578                ),
4579                key_name: fidl::new_empty!(
4580                    fidl::encoding::BoundedString<32>,
4581                    fidl::encoding::DefaultFuchsiaResourceDialect
4582                ),
4583                key_algorithm: fidl::new_empty!(
4584                    AsymmetricKeyAlgorithm,
4585                    fidl::encoding::DefaultFuchsiaResourceDialect
4586                ),
4587                key: fidl::new_empty!(
4588                    fidl::encoding::Endpoint<
4589                        fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>,
4590                    >,
4591                    fidl::encoding::DefaultFuchsiaResourceDialect
4592                ),
4593            }
4594        }
4595
4596        #[inline]
4597        unsafe fn decode(
4598            &mut self,
4599            decoder: &mut fidl::encoding::Decoder<
4600                '_,
4601                fidl::encoding::DefaultFuchsiaResourceDialect,
4602            >,
4603            offset: usize,
4604            _depth: fidl::encoding::Depth,
4605        ) -> fidl::Result<()> {
4606            decoder.debug_check_bounds::<Self>(offset);
4607            // Verify that padding bytes are zero.
4608            fidl::decode!(
4609                fidl::encoding::UnboundedVector<u8>,
4610                fidl::encoding::DefaultFuchsiaResourceDialect,
4611                &mut self.data,
4612                decoder,
4613                offset + 0,
4614                _depth
4615            )?;
4616            fidl::decode!(
4617                fidl::encoding::BoundedString<32>,
4618                fidl::encoding::DefaultFuchsiaResourceDialect,
4619                &mut self.key_name,
4620                decoder,
4621                offset + 16,
4622                _depth
4623            )?;
4624            fidl::decode!(
4625                AsymmetricKeyAlgorithm,
4626                fidl::encoding::DefaultFuchsiaResourceDialect,
4627                &mut self.key_algorithm,
4628                decoder,
4629                offset + 32,
4630                _depth
4631            )?;
4632            fidl::decode!(
4633                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<AsymmetricPrivateKeyMarker>>,
4634                fidl::encoding::DefaultFuchsiaResourceDialect,
4635                &mut self.key,
4636                decoder,
4637                offset + 36,
4638                _depth
4639            )?;
4640            Ok(())
4641        }
4642    }
4643
4644    impl fidl::encoding::ResourceTypeMarker for KeyManagerSealDataRequest {
4645        type Borrowed<'a> = &'a mut Self;
4646        fn take_or_borrow<'a>(
4647            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4648        ) -> Self::Borrowed<'a> {
4649            value
4650        }
4651    }
4652
4653    unsafe impl fidl::encoding::TypeMarker for KeyManagerSealDataRequest {
4654        type Owned = Self;
4655
4656        #[inline(always)]
4657        fn inline_align(_context: fidl::encoding::Context) -> usize {
4658            8
4659        }
4660
4661        #[inline(always)]
4662        fn inline_size(_context: fidl::encoding::Context) -> usize {
4663            16
4664        }
4665    }
4666
4667    unsafe impl
4668        fidl::encoding::Encode<
4669            KeyManagerSealDataRequest,
4670            fidl::encoding::DefaultFuchsiaResourceDialect,
4671        > for &mut KeyManagerSealDataRequest
4672    {
4673        #[inline]
4674        unsafe fn encode(
4675            self,
4676            encoder: &mut fidl::encoding::Encoder<
4677                '_,
4678                fidl::encoding::DefaultFuchsiaResourceDialect,
4679            >,
4680            offset: usize,
4681            _depth: fidl::encoding::Depth,
4682        ) -> fidl::Result<()> {
4683            encoder.debug_check_bounds::<KeyManagerSealDataRequest>(offset);
4684            // Delegate to tuple encoding.
4685            fidl::encoding::Encode::<
4686                KeyManagerSealDataRequest,
4687                fidl::encoding::DefaultFuchsiaResourceDialect,
4688            >::encode(
4689                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4690                    &mut self.plain_text,
4691                ),),
4692                encoder,
4693                offset,
4694                _depth,
4695            )
4696        }
4697    }
4698    unsafe impl<
4699            T0: fidl::encoding::Encode<
4700                fidl_fuchsia_mem::Buffer,
4701                fidl::encoding::DefaultFuchsiaResourceDialect,
4702            >,
4703        >
4704        fidl::encoding::Encode<
4705            KeyManagerSealDataRequest,
4706            fidl::encoding::DefaultFuchsiaResourceDialect,
4707        > for (T0,)
4708    {
4709        #[inline]
4710        unsafe fn encode(
4711            self,
4712            encoder: &mut fidl::encoding::Encoder<
4713                '_,
4714                fidl::encoding::DefaultFuchsiaResourceDialect,
4715            >,
4716            offset: usize,
4717            depth: fidl::encoding::Depth,
4718        ) -> fidl::Result<()> {
4719            encoder.debug_check_bounds::<KeyManagerSealDataRequest>(offset);
4720            // Zero out padding regions. There's no need to apply masks
4721            // because the unmasked parts will be overwritten by fields.
4722            // Write the fields.
4723            self.0.encode(encoder, offset + 0, depth)?;
4724            Ok(())
4725        }
4726    }
4727
4728    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4729        for KeyManagerSealDataRequest
4730    {
4731        #[inline(always)]
4732        fn new_empty() -> Self {
4733            Self {
4734                plain_text: fidl::new_empty!(
4735                    fidl_fuchsia_mem::Buffer,
4736                    fidl::encoding::DefaultFuchsiaResourceDialect
4737                ),
4738            }
4739        }
4740
4741        #[inline]
4742        unsafe fn decode(
4743            &mut self,
4744            decoder: &mut fidl::encoding::Decoder<
4745                '_,
4746                fidl::encoding::DefaultFuchsiaResourceDialect,
4747            >,
4748            offset: usize,
4749            _depth: fidl::encoding::Depth,
4750        ) -> fidl::Result<()> {
4751            decoder.debug_check_bounds::<Self>(offset);
4752            // Verify that padding bytes are zero.
4753            fidl::decode!(
4754                fidl_fuchsia_mem::Buffer,
4755                fidl::encoding::DefaultFuchsiaResourceDialect,
4756                &mut self.plain_text,
4757                decoder,
4758                offset + 0,
4759                _depth
4760            )?;
4761            Ok(())
4762        }
4763    }
4764
4765    impl fidl::encoding::ResourceTypeMarker for KeyManagerUnsealDataRequest {
4766        type Borrowed<'a> = &'a mut Self;
4767        fn take_or_borrow<'a>(
4768            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4769        ) -> Self::Borrowed<'a> {
4770            value
4771        }
4772    }
4773
4774    unsafe impl fidl::encoding::TypeMarker for KeyManagerUnsealDataRequest {
4775        type Owned = Self;
4776
4777        #[inline(always)]
4778        fn inline_align(_context: fidl::encoding::Context) -> usize {
4779            8
4780        }
4781
4782        #[inline(always)]
4783        fn inline_size(_context: fidl::encoding::Context) -> usize {
4784            16
4785        }
4786    }
4787
4788    unsafe impl
4789        fidl::encoding::Encode<
4790            KeyManagerUnsealDataRequest,
4791            fidl::encoding::DefaultFuchsiaResourceDialect,
4792        > for &mut KeyManagerUnsealDataRequest
4793    {
4794        #[inline]
4795        unsafe fn encode(
4796            self,
4797            encoder: &mut fidl::encoding::Encoder<
4798                '_,
4799                fidl::encoding::DefaultFuchsiaResourceDialect,
4800            >,
4801            offset: usize,
4802            _depth: fidl::encoding::Depth,
4803        ) -> fidl::Result<()> {
4804            encoder.debug_check_bounds::<KeyManagerUnsealDataRequest>(offset);
4805            // Delegate to tuple encoding.
4806            fidl::encoding::Encode::<
4807                KeyManagerUnsealDataRequest,
4808                fidl::encoding::DefaultFuchsiaResourceDialect,
4809            >::encode(
4810                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4811                    &mut self.cipher_text,
4812                ),),
4813                encoder,
4814                offset,
4815                _depth,
4816            )
4817        }
4818    }
4819    unsafe impl<
4820            T0: fidl::encoding::Encode<
4821                fidl_fuchsia_mem::Buffer,
4822                fidl::encoding::DefaultFuchsiaResourceDialect,
4823            >,
4824        >
4825        fidl::encoding::Encode<
4826            KeyManagerUnsealDataRequest,
4827            fidl::encoding::DefaultFuchsiaResourceDialect,
4828        > for (T0,)
4829    {
4830        #[inline]
4831        unsafe fn encode(
4832            self,
4833            encoder: &mut fidl::encoding::Encoder<
4834                '_,
4835                fidl::encoding::DefaultFuchsiaResourceDialect,
4836            >,
4837            offset: usize,
4838            depth: fidl::encoding::Depth,
4839        ) -> fidl::Result<()> {
4840            encoder.debug_check_bounds::<KeyManagerUnsealDataRequest>(offset);
4841            // Zero out padding regions. There's no need to apply masks
4842            // because the unmasked parts will be overwritten by fields.
4843            // Write the fields.
4844            self.0.encode(encoder, offset + 0, depth)?;
4845            Ok(())
4846        }
4847    }
4848
4849    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4850        for KeyManagerUnsealDataRequest
4851    {
4852        #[inline(always)]
4853        fn new_empty() -> Self {
4854            Self {
4855                cipher_text: fidl::new_empty!(
4856                    fidl_fuchsia_mem::Buffer,
4857                    fidl::encoding::DefaultFuchsiaResourceDialect
4858                ),
4859            }
4860        }
4861
4862        #[inline]
4863        unsafe fn decode(
4864            &mut self,
4865            decoder: &mut fidl::encoding::Decoder<
4866                '_,
4867                fidl::encoding::DefaultFuchsiaResourceDialect,
4868            >,
4869            offset: usize,
4870            _depth: fidl::encoding::Depth,
4871        ) -> fidl::Result<()> {
4872            decoder.debug_check_bounds::<Self>(offset);
4873            // Verify that padding bytes are zero.
4874            fidl::decode!(
4875                fidl_fuchsia_mem::Buffer,
4876                fidl::encoding::DefaultFuchsiaResourceDialect,
4877                &mut self.cipher_text,
4878                decoder,
4879                offset + 0,
4880                _depth
4881            )?;
4882            Ok(())
4883        }
4884    }
4885
4886    impl fidl::encoding::ResourceTypeMarker for KeyManagerSealDataResponse {
4887        type Borrowed<'a> = &'a mut Self;
4888        fn take_or_borrow<'a>(
4889            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
4890        ) -> Self::Borrowed<'a> {
4891            value
4892        }
4893    }
4894
4895    unsafe impl fidl::encoding::TypeMarker for KeyManagerSealDataResponse {
4896        type Owned = Self;
4897
4898        #[inline(always)]
4899        fn inline_align(_context: fidl::encoding::Context) -> usize {
4900            8
4901        }
4902
4903        #[inline(always)]
4904        fn inline_size(_context: fidl::encoding::Context) -> usize {
4905            16
4906        }
4907    }
4908
4909    unsafe impl
4910        fidl::encoding::Encode<
4911            KeyManagerSealDataResponse,
4912            fidl::encoding::DefaultFuchsiaResourceDialect,
4913        > for &mut KeyManagerSealDataResponse
4914    {
4915        #[inline]
4916        unsafe fn encode(
4917            self,
4918            encoder: &mut fidl::encoding::Encoder<
4919                '_,
4920                fidl::encoding::DefaultFuchsiaResourceDialect,
4921            >,
4922            offset: usize,
4923            _depth: fidl::encoding::Depth,
4924        ) -> fidl::Result<()> {
4925            encoder.debug_check_bounds::<KeyManagerSealDataResponse>(offset);
4926            // Delegate to tuple encoding.
4927            fidl::encoding::Encode::<
4928                KeyManagerSealDataResponse,
4929                fidl::encoding::DefaultFuchsiaResourceDialect,
4930            >::encode(
4931                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
4932                    &mut self.cipher_text,
4933                ),),
4934                encoder,
4935                offset,
4936                _depth,
4937            )
4938        }
4939    }
4940    unsafe impl<
4941            T0: fidl::encoding::Encode<
4942                fidl_fuchsia_mem::Buffer,
4943                fidl::encoding::DefaultFuchsiaResourceDialect,
4944            >,
4945        >
4946        fidl::encoding::Encode<
4947            KeyManagerSealDataResponse,
4948            fidl::encoding::DefaultFuchsiaResourceDialect,
4949        > for (T0,)
4950    {
4951        #[inline]
4952        unsafe fn encode(
4953            self,
4954            encoder: &mut fidl::encoding::Encoder<
4955                '_,
4956                fidl::encoding::DefaultFuchsiaResourceDialect,
4957            >,
4958            offset: usize,
4959            depth: fidl::encoding::Depth,
4960        ) -> fidl::Result<()> {
4961            encoder.debug_check_bounds::<KeyManagerSealDataResponse>(offset);
4962            // Zero out padding regions. There's no need to apply masks
4963            // because the unmasked parts will be overwritten by fields.
4964            // Write the fields.
4965            self.0.encode(encoder, offset + 0, depth)?;
4966            Ok(())
4967        }
4968    }
4969
4970    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
4971        for KeyManagerSealDataResponse
4972    {
4973        #[inline(always)]
4974        fn new_empty() -> Self {
4975            Self {
4976                cipher_text: fidl::new_empty!(
4977                    fidl_fuchsia_mem::Buffer,
4978                    fidl::encoding::DefaultFuchsiaResourceDialect
4979                ),
4980            }
4981        }
4982
4983        #[inline]
4984        unsafe fn decode(
4985            &mut self,
4986            decoder: &mut fidl::encoding::Decoder<
4987                '_,
4988                fidl::encoding::DefaultFuchsiaResourceDialect,
4989            >,
4990            offset: usize,
4991            _depth: fidl::encoding::Depth,
4992        ) -> fidl::Result<()> {
4993            decoder.debug_check_bounds::<Self>(offset);
4994            // Verify that padding bytes are zero.
4995            fidl::decode!(
4996                fidl_fuchsia_mem::Buffer,
4997                fidl::encoding::DefaultFuchsiaResourceDialect,
4998                &mut self.cipher_text,
4999                decoder,
5000                offset + 0,
5001                _depth
5002            )?;
5003            Ok(())
5004        }
5005    }
5006
5007    impl fidl::encoding::ResourceTypeMarker for KeyManagerUnsealDataResponse {
5008        type Borrowed<'a> = &'a mut Self;
5009        fn take_or_borrow<'a>(
5010            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5011        ) -> Self::Borrowed<'a> {
5012            value
5013        }
5014    }
5015
5016    unsafe impl fidl::encoding::TypeMarker for KeyManagerUnsealDataResponse {
5017        type Owned = Self;
5018
5019        #[inline(always)]
5020        fn inline_align(_context: fidl::encoding::Context) -> usize {
5021            8
5022        }
5023
5024        #[inline(always)]
5025        fn inline_size(_context: fidl::encoding::Context) -> usize {
5026            16
5027        }
5028    }
5029
5030    unsafe impl
5031        fidl::encoding::Encode<
5032            KeyManagerUnsealDataResponse,
5033            fidl::encoding::DefaultFuchsiaResourceDialect,
5034        > for &mut KeyManagerUnsealDataResponse
5035    {
5036        #[inline]
5037        unsafe fn encode(
5038            self,
5039            encoder: &mut fidl::encoding::Encoder<
5040                '_,
5041                fidl::encoding::DefaultFuchsiaResourceDialect,
5042            >,
5043            offset: usize,
5044            _depth: fidl::encoding::Depth,
5045        ) -> fidl::Result<()> {
5046            encoder.debug_check_bounds::<KeyManagerUnsealDataResponse>(offset);
5047            // Delegate to tuple encoding.
5048            fidl::encoding::Encode::<
5049                KeyManagerUnsealDataResponse,
5050                fidl::encoding::DefaultFuchsiaResourceDialect,
5051            >::encode(
5052                (<fidl_fuchsia_mem::Buffer as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
5053                    &mut self.plain_text,
5054                ),),
5055                encoder,
5056                offset,
5057                _depth,
5058            )
5059        }
5060    }
5061    unsafe impl<
5062            T0: fidl::encoding::Encode<
5063                fidl_fuchsia_mem::Buffer,
5064                fidl::encoding::DefaultFuchsiaResourceDialect,
5065            >,
5066        >
5067        fidl::encoding::Encode<
5068            KeyManagerUnsealDataResponse,
5069            fidl::encoding::DefaultFuchsiaResourceDialect,
5070        > for (T0,)
5071    {
5072        #[inline]
5073        unsafe fn encode(
5074            self,
5075            encoder: &mut fidl::encoding::Encoder<
5076                '_,
5077                fidl::encoding::DefaultFuchsiaResourceDialect,
5078            >,
5079            offset: usize,
5080            depth: fidl::encoding::Depth,
5081        ) -> fidl::Result<()> {
5082            encoder.debug_check_bounds::<KeyManagerUnsealDataResponse>(offset);
5083            // Zero out padding regions. There's no need to apply masks
5084            // because the unmasked parts will be overwritten by fields.
5085            // Write the fields.
5086            self.0.encode(encoder, offset + 0, depth)?;
5087            Ok(())
5088        }
5089    }
5090
5091    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
5092        for KeyManagerUnsealDataResponse
5093    {
5094        #[inline(always)]
5095        fn new_empty() -> Self {
5096            Self {
5097                plain_text: fidl::new_empty!(
5098                    fidl_fuchsia_mem::Buffer,
5099                    fidl::encoding::DefaultFuchsiaResourceDialect
5100                ),
5101            }
5102        }
5103
5104        #[inline]
5105        unsafe fn decode(
5106            &mut self,
5107            decoder: &mut fidl::encoding::Decoder<
5108                '_,
5109                fidl::encoding::DefaultFuchsiaResourceDialect,
5110            >,
5111            offset: usize,
5112            _depth: fidl::encoding::Depth,
5113        ) -> fidl::Result<()> {
5114            decoder.debug_check_bounds::<Self>(offset);
5115            // Verify that padding bytes are zero.
5116            fidl::decode!(
5117                fidl_fuchsia_mem::Buffer,
5118                fidl::encoding::DefaultFuchsiaResourceDialect,
5119                &mut self.plain_text,
5120                decoder,
5121                offset + 0,
5122                _depth
5123            )?;
5124            Ok(())
5125        }
5126    }
5127}