Skip to main content

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