fidl_examples_keyvaluestore_addreaditem__common/
fidl_examples_keyvaluestore_addreaditem__common.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::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub type Key = String;
12
13pub type Value = Vec<u8>;
14
15/// An enumeration of things that may go wrong when trying to read a value out of our store.
16#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
17pub enum ReadError {
18    Unknown,
19    NotFound,
20    #[doc(hidden)]
21    __SourceBreaking {
22        unknown_ordinal: u32,
23    },
24}
25
26/// Pattern that matches an unknown `ReadError` member.
27#[macro_export]
28macro_rules! ReadErrorUnknown {
29    () => {
30        _
31    };
32}
33
34impl ReadError {
35    #[inline]
36    pub fn from_primitive(prim: u32) -> Option<Self> {
37        match prim {
38            1 => Some(Self::Unknown),
39            2 => Some(Self::NotFound),
40            _ => None,
41        }
42    }
43
44    #[inline]
45    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
46        match prim {
47            1 => Self::Unknown,
48            2 => Self::NotFound,
49            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
50        }
51    }
52
53    #[inline]
54    pub fn unknown() -> Self {
55        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
56    }
57
58    #[inline]
59    pub const fn into_primitive(self) -> u32 {
60        match self {
61            Self::Unknown => 1,
62            Self::NotFound => 2,
63            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
64        }
65    }
66
67    #[inline]
68    pub fn is_unknown(&self) -> bool {
69        match self {
70            Self::__SourceBreaking { unknown_ordinal: _ } => true,
71            _ => false,
72        }
73    }
74}
75
76/// An enumeration of things that may go wrong when trying to write a value to our store.
77#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
78pub enum WriteError {
79    Unknown,
80    InvalidKey,
81    InvalidValue,
82    AlreadyExists,
83    #[doc(hidden)]
84    __SourceBreaking {
85        unknown_ordinal: u32,
86    },
87}
88
89/// Pattern that matches an unknown `WriteError` member.
90#[macro_export]
91macro_rules! WriteErrorUnknown {
92    () => {
93        _
94    };
95}
96
97impl WriteError {
98    #[inline]
99    pub fn from_primitive(prim: u32) -> Option<Self> {
100        match prim {
101            1 => Some(Self::Unknown),
102            2 => Some(Self::InvalidKey),
103            3 => Some(Self::InvalidValue),
104            4 => Some(Self::AlreadyExists),
105            _ => None,
106        }
107    }
108
109    #[inline]
110    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
111        match prim {
112            1 => Self::Unknown,
113            2 => Self::InvalidKey,
114            3 => Self::InvalidValue,
115            4 => Self::AlreadyExists,
116            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
117        }
118    }
119
120    #[inline]
121    pub fn unknown() -> Self {
122        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
123    }
124
125    #[inline]
126    pub const fn into_primitive(self) -> u32 {
127        match self {
128            Self::Unknown => 1,
129            Self::InvalidKey => 2,
130            Self::InvalidValue => 3,
131            Self::AlreadyExists => 4,
132            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
133        }
134    }
135
136    #[inline]
137    pub fn is_unknown(&self) -> bool {
138        match self {
139            Self::__SourceBreaking { unknown_ordinal: _ } => true,
140            _ => false,
141        }
142    }
143}
144
145/// An item in the store. The key must match the regex `^[A-z][A-z0-9_\.\/]{2,62}[A-z0-9]$`. That
146/// is, it must start with a letter, end with a letter or number, contain only letters, numbers,
147/// periods, and slashes, and be between 4 and 64 characters long.
148#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
149pub struct Item {
150    pub key: String,
151    pub value: Vec<u8>,
152}
153
154impl fidl::Persistable for Item {}
155
156#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
157pub struct StoreReadItemRequest {
158    pub key: String,
159}
160
161impl fidl::Persistable for StoreReadItemRequest {}
162
163#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
164pub struct StoreWriteItemRequest {
165    pub attempt: Item,
166}
167
168impl fidl::Persistable for StoreWriteItemRequest {}
169
170pub mod store_ordinals {
171    pub const WRITE_ITEM: u64 = 0x4dd6bb122b2022e9;
172    pub const READ_ITEM: u64 = 0x67a246d566d1139c;
173}
174
175mod internal {
176    use super::*;
177    unsafe impl fidl::encoding::TypeMarker for ReadError {
178        type Owned = Self;
179
180        #[inline(always)]
181        fn inline_align(_context: fidl::encoding::Context) -> usize {
182            std::mem::align_of::<u32>()
183        }
184
185        #[inline(always)]
186        fn inline_size(_context: fidl::encoding::Context) -> usize {
187            std::mem::size_of::<u32>()
188        }
189
190        #[inline(always)]
191        fn encode_is_copy() -> bool {
192            false
193        }
194
195        #[inline(always)]
196        fn decode_is_copy() -> bool {
197            false
198        }
199    }
200
201    impl fidl::encoding::ValueTypeMarker for ReadError {
202        type Borrowed<'a> = Self;
203        #[inline(always)]
204        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
205            *value
206        }
207    }
208
209    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ReadError {
210        #[inline]
211        unsafe fn encode(
212            self,
213            encoder: &mut fidl::encoding::Encoder<'_, D>,
214            offset: usize,
215            _depth: fidl::encoding::Depth,
216        ) -> fidl::Result<()> {
217            encoder.debug_check_bounds::<Self>(offset);
218            encoder.write_num(self.into_primitive(), offset);
219            Ok(())
220        }
221    }
222
223    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ReadError {
224        #[inline(always)]
225        fn new_empty() -> Self {
226            Self::unknown()
227        }
228
229        #[inline]
230        unsafe fn decode(
231            &mut self,
232            decoder: &mut fidl::encoding::Decoder<'_, D>,
233            offset: usize,
234            _depth: fidl::encoding::Depth,
235        ) -> fidl::Result<()> {
236            decoder.debug_check_bounds::<Self>(offset);
237            let prim = decoder.read_num::<u32>(offset);
238
239            *self = Self::from_primitive_allow_unknown(prim);
240            Ok(())
241        }
242    }
243    unsafe impl fidl::encoding::TypeMarker for WriteError {
244        type Owned = Self;
245
246        #[inline(always)]
247        fn inline_align(_context: fidl::encoding::Context) -> usize {
248            std::mem::align_of::<u32>()
249        }
250
251        #[inline(always)]
252        fn inline_size(_context: fidl::encoding::Context) -> usize {
253            std::mem::size_of::<u32>()
254        }
255
256        #[inline(always)]
257        fn encode_is_copy() -> bool {
258            false
259        }
260
261        #[inline(always)]
262        fn decode_is_copy() -> bool {
263            false
264        }
265    }
266
267    impl fidl::encoding::ValueTypeMarker for WriteError {
268        type Borrowed<'a> = Self;
269        #[inline(always)]
270        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
271            *value
272        }
273    }
274
275    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WriteError {
276        #[inline]
277        unsafe fn encode(
278            self,
279            encoder: &mut fidl::encoding::Encoder<'_, D>,
280            offset: usize,
281            _depth: fidl::encoding::Depth,
282        ) -> fidl::Result<()> {
283            encoder.debug_check_bounds::<Self>(offset);
284            encoder.write_num(self.into_primitive(), offset);
285            Ok(())
286        }
287    }
288
289    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WriteError {
290        #[inline(always)]
291        fn new_empty() -> Self {
292            Self::unknown()
293        }
294
295        #[inline]
296        unsafe fn decode(
297            &mut self,
298            decoder: &mut fidl::encoding::Decoder<'_, D>,
299            offset: usize,
300            _depth: fidl::encoding::Depth,
301        ) -> fidl::Result<()> {
302            decoder.debug_check_bounds::<Self>(offset);
303            let prim = decoder.read_num::<u32>(offset);
304
305            *self = Self::from_primitive_allow_unknown(prim);
306            Ok(())
307        }
308    }
309
310    impl fidl::encoding::ValueTypeMarker for Item {
311        type Borrowed<'a> = &'a Self;
312        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
313            value
314        }
315    }
316
317    unsafe impl fidl::encoding::TypeMarker for Item {
318        type Owned = Self;
319
320        #[inline(always)]
321        fn inline_align(_context: fidl::encoding::Context) -> usize {
322            8
323        }
324
325        #[inline(always)]
326        fn inline_size(_context: fidl::encoding::Context) -> usize {
327            32
328        }
329    }
330
331    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Item, D> for &Item {
332        #[inline]
333        unsafe fn encode(
334            self,
335            encoder: &mut fidl::encoding::Encoder<'_, D>,
336            offset: usize,
337            _depth: fidl::encoding::Depth,
338        ) -> fidl::Result<()> {
339            encoder.debug_check_bounds::<Item>(offset);
340            // Delegate to tuple encoding.
341            fidl::encoding::Encode::<Item, D>::encode(
342                (
343                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(
344                        &self.key,
345                    ),
346                    <fidl::encoding::Vector<u8, 64000> as fidl::encoding::ValueTypeMarker>::borrow(
347                        &self.value,
348                    ),
349                ),
350                encoder,
351                offset,
352                _depth,
353            )
354        }
355    }
356    unsafe impl<
357            D: fidl::encoding::ResourceDialect,
358            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
359            T1: fidl::encoding::Encode<fidl::encoding::Vector<u8, 64000>, D>,
360        > fidl::encoding::Encode<Item, D> for (T0, T1)
361    {
362        #[inline]
363        unsafe fn encode(
364            self,
365            encoder: &mut fidl::encoding::Encoder<'_, D>,
366            offset: usize,
367            depth: fidl::encoding::Depth,
368        ) -> fidl::Result<()> {
369            encoder.debug_check_bounds::<Item>(offset);
370            // Zero out padding regions. There's no need to apply masks
371            // because the unmasked parts will be overwritten by fields.
372            // Write the fields.
373            self.0.encode(encoder, offset + 0, depth)?;
374            self.1.encode(encoder, offset + 16, depth)?;
375            Ok(())
376        }
377    }
378
379    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Item {
380        #[inline(always)]
381        fn new_empty() -> Self {
382            Self {
383                key: fidl::new_empty!(fidl::encoding::BoundedString<128>, D),
384                value: fidl::new_empty!(fidl::encoding::Vector<u8, 64000>, D),
385            }
386        }
387
388        #[inline]
389        unsafe fn decode(
390            &mut self,
391            decoder: &mut fidl::encoding::Decoder<'_, D>,
392            offset: usize,
393            _depth: fidl::encoding::Depth,
394        ) -> fidl::Result<()> {
395            decoder.debug_check_bounds::<Self>(offset);
396            // Verify that padding bytes are zero.
397            fidl::decode!(
398                fidl::encoding::BoundedString<128>,
399                D,
400                &mut self.key,
401                decoder,
402                offset + 0,
403                _depth
404            )?;
405            fidl::decode!(fidl::encoding::Vector<u8, 64000>, D, &mut self.value, decoder, offset + 16, _depth)?;
406            Ok(())
407        }
408    }
409
410    impl fidl::encoding::ValueTypeMarker for StoreReadItemRequest {
411        type Borrowed<'a> = &'a Self;
412        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
413            value
414        }
415    }
416
417    unsafe impl fidl::encoding::TypeMarker for StoreReadItemRequest {
418        type Owned = Self;
419
420        #[inline(always)]
421        fn inline_align(_context: fidl::encoding::Context) -> usize {
422            8
423        }
424
425        #[inline(always)]
426        fn inline_size(_context: fidl::encoding::Context) -> usize {
427            16
428        }
429    }
430
431    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StoreReadItemRequest, D>
432        for &StoreReadItemRequest
433    {
434        #[inline]
435        unsafe fn encode(
436            self,
437            encoder: &mut fidl::encoding::Encoder<'_, D>,
438            offset: usize,
439            _depth: fidl::encoding::Depth,
440        ) -> fidl::Result<()> {
441            encoder.debug_check_bounds::<StoreReadItemRequest>(offset);
442            // Delegate to tuple encoding.
443            fidl::encoding::Encode::<StoreReadItemRequest, D>::encode(
444                (<fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(
445                    &self.key,
446                ),),
447                encoder,
448                offset,
449                _depth,
450            )
451        }
452    }
453    unsafe impl<
454            D: fidl::encoding::ResourceDialect,
455            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
456        > fidl::encoding::Encode<StoreReadItemRequest, D> for (T0,)
457    {
458        #[inline]
459        unsafe fn encode(
460            self,
461            encoder: &mut fidl::encoding::Encoder<'_, D>,
462            offset: usize,
463            depth: fidl::encoding::Depth,
464        ) -> fidl::Result<()> {
465            encoder.debug_check_bounds::<StoreReadItemRequest>(offset);
466            // Zero out padding regions. There's no need to apply masks
467            // because the unmasked parts will be overwritten by fields.
468            // Write the fields.
469            self.0.encode(encoder, offset + 0, depth)?;
470            Ok(())
471        }
472    }
473
474    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StoreReadItemRequest {
475        #[inline(always)]
476        fn new_empty() -> Self {
477            Self { key: fidl::new_empty!(fidl::encoding::BoundedString<128>, D) }
478        }
479
480        #[inline]
481        unsafe fn decode(
482            &mut self,
483            decoder: &mut fidl::encoding::Decoder<'_, D>,
484            offset: usize,
485            _depth: fidl::encoding::Depth,
486        ) -> fidl::Result<()> {
487            decoder.debug_check_bounds::<Self>(offset);
488            // Verify that padding bytes are zero.
489            fidl::decode!(
490                fidl::encoding::BoundedString<128>,
491                D,
492                &mut self.key,
493                decoder,
494                offset + 0,
495                _depth
496            )?;
497            Ok(())
498        }
499    }
500
501    impl fidl::encoding::ValueTypeMarker for StoreWriteItemRequest {
502        type Borrowed<'a> = &'a Self;
503        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
504            value
505        }
506    }
507
508    unsafe impl fidl::encoding::TypeMarker for StoreWriteItemRequest {
509        type Owned = Self;
510
511        #[inline(always)]
512        fn inline_align(_context: fidl::encoding::Context) -> usize {
513            8
514        }
515
516        #[inline(always)]
517        fn inline_size(_context: fidl::encoding::Context) -> usize {
518            32
519        }
520    }
521
522    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StoreWriteItemRequest, D>
523        for &StoreWriteItemRequest
524    {
525        #[inline]
526        unsafe fn encode(
527            self,
528            encoder: &mut fidl::encoding::Encoder<'_, D>,
529            offset: usize,
530            _depth: fidl::encoding::Depth,
531        ) -> fidl::Result<()> {
532            encoder.debug_check_bounds::<StoreWriteItemRequest>(offset);
533            // Delegate to tuple encoding.
534            fidl::encoding::Encode::<StoreWriteItemRequest, D>::encode(
535                (<Item as fidl::encoding::ValueTypeMarker>::borrow(&self.attempt),),
536                encoder,
537                offset,
538                _depth,
539            )
540        }
541    }
542    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Item, D>>
543        fidl::encoding::Encode<StoreWriteItemRequest, D> for (T0,)
544    {
545        #[inline]
546        unsafe fn encode(
547            self,
548            encoder: &mut fidl::encoding::Encoder<'_, D>,
549            offset: usize,
550            depth: fidl::encoding::Depth,
551        ) -> fidl::Result<()> {
552            encoder.debug_check_bounds::<StoreWriteItemRequest>(offset);
553            // Zero out padding regions. There's no need to apply masks
554            // because the unmasked parts will be overwritten by fields.
555            // Write the fields.
556            self.0.encode(encoder, offset + 0, depth)?;
557            Ok(())
558        }
559    }
560
561    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StoreWriteItemRequest {
562        #[inline(always)]
563        fn new_empty() -> Self {
564            Self { attempt: fidl::new_empty!(Item, D) }
565        }
566
567        #[inline]
568        unsafe fn decode(
569            &mut self,
570            decoder: &mut fidl::encoding::Decoder<'_, D>,
571            offset: usize,
572            _depth: fidl::encoding::Depth,
573        ) -> fidl::Result<()> {
574            decoder.debug_check_bounds::<Self>(offset);
575            // Verify that padding bytes are zero.
576            fidl::decode!(Item, D, &mut self.attempt, decoder, offset + 0, _depth)?;
577            Ok(())
578        }
579    }
580}