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