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