fidl_fuchsia_hardware_tee__common/
fidl_fuchsia_hardware_tee__common.rs1#![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 const MAX_NUM_OF_THREAD_POOLS: u32 = 64;
12
13pub const MAX_NUM_OF_TRUSTED_APPS: u32 = 64;
14
15#[derive(Clone, Debug, Default, PartialEq)]
17pub struct CustomThreadConfig {
18 pub role: Option<String>,
20 pub count: Option<u32>,
22 pub trusted_apps: Option<Vec<fidl_fuchsia_tee__common::Uuid>>,
24 #[doc(hidden)]
25 pub __source_breaking: fidl::marker::SourceBreaking,
26}
27
28impl fidl::Persistable for CustomThreadConfig {}
29
30#[derive(Clone, Debug, Default, PartialEq)]
32pub struct TeeMetadata {
33 pub default_thread_count: Option<u32>,
35 pub custom_threads: Option<Vec<CustomThreadConfig>>,
37 #[doc(hidden)]
38 pub __source_breaking: fidl::marker::SourceBreaking,
39}
40
41impl fidl::Persistable for TeeMetadata {}
42impl fidl::Serializable for TeeMetadata {
43 const SERIALIZABLE_NAME: &'static str = "fuchsia.hardware.tee.TeeMetadata";
44}
45
46pub mod device_connector_ordinals {
47 pub const CONNECT_TO_DEVICE_INFO: u64 = 0x5fa3623fd14f786;
48 pub const CONNECT_TO_APPLICATION: u64 = 0x6e7f7e307df7816a;
49}
50
51mod internal {
52 use super::*;
53
54 impl CustomThreadConfig {
55 #[inline(always)]
56 fn max_ordinal_present(&self) -> u64 {
57 if let Some(_) = self.trusted_apps {
58 return 3;
59 }
60 if let Some(_) = self.count {
61 return 2;
62 }
63 if let Some(_) = self.role {
64 return 1;
65 }
66 0
67 }
68 }
69
70 impl fidl::encoding::ValueTypeMarker for CustomThreadConfig {
71 type Borrowed<'a> = &'a Self;
72 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
73 value
74 }
75 }
76
77 unsafe impl fidl::encoding::TypeMarker for CustomThreadConfig {
78 type Owned = Self;
79
80 #[inline(always)]
81 fn inline_align(_context: fidl::encoding::Context) -> usize {
82 8
83 }
84
85 #[inline(always)]
86 fn inline_size(_context: fidl::encoding::Context) -> usize {
87 16
88 }
89 }
90
91 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CustomThreadConfig, D>
92 for &CustomThreadConfig
93 {
94 unsafe fn encode(
95 self,
96 encoder: &mut fidl::encoding::Encoder<'_, D>,
97 offset: usize,
98 mut depth: fidl::encoding::Depth,
99 ) -> fidl::Result<()> {
100 encoder.debug_check_bounds::<CustomThreadConfig>(offset);
101 let max_ordinal: u64 = self.max_ordinal_present();
103 encoder.write_num(max_ordinal, offset);
104 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
105 if max_ordinal == 0 {
107 return Ok(());
108 }
109 depth.increment()?;
110 let envelope_size = 8;
111 let bytes_len = max_ordinal as usize * envelope_size;
112 #[allow(unused_variables)]
113 let offset = encoder.out_of_line_offset(bytes_len);
114 let mut _prev_end_offset: usize = 0;
115 if 1 > max_ordinal {
116 return Ok(());
117 }
118
119 let cur_offset: usize = (1 - 1) * envelope_size;
122
123 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
125
126 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<2048>, D>(
131 self.role.as_ref().map(<fidl::encoding::BoundedString<2048> as fidl::encoding::ValueTypeMarker>::borrow),
132 encoder, offset + cur_offset, depth
133 )?;
134
135 _prev_end_offset = cur_offset + envelope_size;
136 if 2 > max_ordinal {
137 return Ok(());
138 }
139
140 let cur_offset: usize = (2 - 1) * envelope_size;
143
144 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
146
147 fidl::encoding::encode_in_envelope_optional::<u32, D>(
152 self.count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
153 encoder,
154 offset + cur_offset,
155 depth,
156 )?;
157
158 _prev_end_offset = cur_offset + envelope_size;
159 if 3 > max_ordinal {
160 return Ok(());
161 }
162
163 let cur_offset: usize = (3 - 1) * envelope_size;
166
167 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
169
170 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_tee__common::Uuid, 64>, D>(
175 self.trusted_apps.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_tee__common::Uuid, 64> as fidl::encoding::ValueTypeMarker>::borrow),
176 encoder, offset + cur_offset, depth
177 )?;
178
179 _prev_end_offset = cur_offset + envelope_size;
180
181 Ok(())
182 }
183 }
184
185 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CustomThreadConfig {
186 #[inline(always)]
187 fn new_empty() -> Self {
188 Self::default()
189 }
190
191 unsafe fn decode(
192 &mut self,
193 decoder: &mut fidl::encoding::Decoder<'_, D>,
194 offset: usize,
195 mut depth: fidl::encoding::Depth,
196 ) -> fidl::Result<()> {
197 decoder.debug_check_bounds::<Self>(offset);
198 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
199 None => return Err(fidl::Error::NotNullable),
200 Some(len) => len,
201 };
202 if len == 0 {
204 return Ok(());
205 };
206 depth.increment()?;
207 let envelope_size = 8;
208 let bytes_len = len * envelope_size;
209 let offset = decoder.out_of_line_offset(bytes_len)?;
210 let mut _next_ordinal_to_read = 0;
212 let mut next_offset = offset;
213 let end_offset = offset + bytes_len;
214 _next_ordinal_to_read += 1;
215 if next_offset >= end_offset {
216 return Ok(());
217 }
218
219 while _next_ordinal_to_read < 1 {
221 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
222 _next_ordinal_to_read += 1;
223 next_offset += envelope_size;
224 }
225
226 let next_out_of_line = decoder.next_out_of_line();
227 let handles_before = decoder.remaining_handles();
228 if let Some((inlined, num_bytes, num_handles)) =
229 fidl::encoding::decode_envelope_header(decoder, next_offset)?
230 {
231 let member_inline_size = <fidl::encoding::BoundedString<2048> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
232 if inlined != (member_inline_size <= 4) {
233 return Err(fidl::Error::InvalidInlineBitInEnvelope);
234 }
235 let inner_offset;
236 let mut inner_depth = depth.clone();
237 if inlined {
238 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
239 inner_offset = next_offset;
240 } else {
241 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
242 inner_depth.increment()?;
243 }
244 let val_ref = self.role.get_or_insert_with(|| {
245 fidl::new_empty!(fidl::encoding::BoundedString<2048>, D)
246 });
247 fidl::decode!(
248 fidl::encoding::BoundedString<2048>,
249 D,
250 val_ref,
251 decoder,
252 inner_offset,
253 inner_depth
254 )?;
255 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
256 {
257 return Err(fidl::Error::InvalidNumBytesInEnvelope);
258 }
259 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
260 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
261 }
262 }
263
264 next_offset += envelope_size;
265 _next_ordinal_to_read += 1;
266 if next_offset >= end_offset {
267 return Ok(());
268 }
269
270 while _next_ordinal_to_read < 2 {
272 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
273 _next_ordinal_to_read += 1;
274 next_offset += envelope_size;
275 }
276
277 let next_out_of_line = decoder.next_out_of_line();
278 let handles_before = decoder.remaining_handles();
279 if let Some((inlined, num_bytes, num_handles)) =
280 fidl::encoding::decode_envelope_header(decoder, next_offset)?
281 {
282 let member_inline_size =
283 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
284 if inlined != (member_inline_size <= 4) {
285 return Err(fidl::Error::InvalidInlineBitInEnvelope);
286 }
287 let inner_offset;
288 let mut inner_depth = depth.clone();
289 if inlined {
290 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
291 inner_offset = next_offset;
292 } else {
293 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
294 inner_depth.increment()?;
295 }
296 let val_ref = self.count.get_or_insert_with(|| fidl::new_empty!(u32, D));
297 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
298 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
299 {
300 return Err(fidl::Error::InvalidNumBytesInEnvelope);
301 }
302 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
303 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
304 }
305 }
306
307 next_offset += envelope_size;
308 _next_ordinal_to_read += 1;
309 if next_offset >= end_offset {
310 return Ok(());
311 }
312
313 while _next_ordinal_to_read < 3 {
315 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
316 _next_ordinal_to_read += 1;
317 next_offset += envelope_size;
318 }
319
320 let next_out_of_line = decoder.next_out_of_line();
321 let handles_before = decoder.remaining_handles();
322 if let Some((inlined, num_bytes, num_handles)) =
323 fidl::encoding::decode_envelope_header(decoder, next_offset)?
324 {
325 let member_inline_size = <fidl::encoding::Vector<fidl_fuchsia_tee__common::Uuid, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
326 if inlined != (member_inline_size <= 4) {
327 return Err(fidl::Error::InvalidInlineBitInEnvelope);
328 }
329 let inner_offset;
330 let mut inner_depth = depth.clone();
331 if inlined {
332 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
333 inner_offset = next_offset;
334 } else {
335 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
336 inner_depth.increment()?;
337 }
338 let val_ref =
339 self.trusted_apps.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_tee__common::Uuid, 64>, D));
340 fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_tee__common::Uuid, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
341 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
342 {
343 return Err(fidl::Error::InvalidNumBytesInEnvelope);
344 }
345 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
346 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
347 }
348 }
349
350 next_offset += envelope_size;
351
352 while next_offset < end_offset {
354 _next_ordinal_to_read += 1;
355 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
356 next_offset += envelope_size;
357 }
358
359 Ok(())
360 }
361 }
362
363 impl TeeMetadata {
364 #[inline(always)]
365 fn max_ordinal_present(&self) -> u64 {
366 if let Some(_) = self.custom_threads {
367 return 2;
368 }
369 if let Some(_) = self.default_thread_count {
370 return 1;
371 }
372 0
373 }
374 }
375
376 impl fidl::encoding::ValueTypeMarker for TeeMetadata {
377 type Borrowed<'a> = &'a Self;
378 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
379 value
380 }
381 }
382
383 unsafe impl fidl::encoding::TypeMarker for TeeMetadata {
384 type Owned = Self;
385
386 #[inline(always)]
387 fn inline_align(_context: fidl::encoding::Context) -> usize {
388 8
389 }
390
391 #[inline(always)]
392 fn inline_size(_context: fidl::encoding::Context) -> usize {
393 16
394 }
395 }
396
397 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TeeMetadata, D>
398 for &TeeMetadata
399 {
400 unsafe fn encode(
401 self,
402 encoder: &mut fidl::encoding::Encoder<'_, D>,
403 offset: usize,
404 mut depth: fidl::encoding::Depth,
405 ) -> fidl::Result<()> {
406 encoder.debug_check_bounds::<TeeMetadata>(offset);
407 let max_ordinal: u64 = self.max_ordinal_present();
409 encoder.write_num(max_ordinal, offset);
410 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
411 if max_ordinal == 0 {
413 return Ok(());
414 }
415 depth.increment()?;
416 let envelope_size = 8;
417 let bytes_len = max_ordinal as usize * envelope_size;
418 #[allow(unused_variables)]
419 let offset = encoder.out_of_line_offset(bytes_len);
420 let mut _prev_end_offset: usize = 0;
421 if 1 > max_ordinal {
422 return Ok(());
423 }
424
425 let cur_offset: usize = (1 - 1) * envelope_size;
428
429 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
431
432 fidl::encoding::encode_in_envelope_optional::<u32, D>(
437 self.default_thread_count
438 .as_ref()
439 .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
440 encoder,
441 offset + cur_offset,
442 depth,
443 )?;
444
445 _prev_end_offset = cur_offset + envelope_size;
446 if 2 > max_ordinal {
447 return Ok(());
448 }
449
450 let cur_offset: usize = (2 - 1) * envelope_size;
453
454 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
456
457 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<CustomThreadConfig, 64>, D>(
462 self.custom_threads.as_ref().map(<fidl::encoding::Vector<CustomThreadConfig, 64> as fidl::encoding::ValueTypeMarker>::borrow),
463 encoder, offset + cur_offset, depth
464 )?;
465
466 _prev_end_offset = cur_offset + envelope_size;
467
468 Ok(())
469 }
470 }
471
472 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TeeMetadata {
473 #[inline(always)]
474 fn new_empty() -> Self {
475 Self::default()
476 }
477
478 unsafe fn decode(
479 &mut self,
480 decoder: &mut fidl::encoding::Decoder<'_, D>,
481 offset: usize,
482 mut depth: fidl::encoding::Depth,
483 ) -> fidl::Result<()> {
484 decoder.debug_check_bounds::<Self>(offset);
485 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
486 None => return Err(fidl::Error::NotNullable),
487 Some(len) => len,
488 };
489 if len == 0 {
491 return Ok(());
492 };
493 depth.increment()?;
494 let envelope_size = 8;
495 let bytes_len = len * envelope_size;
496 let offset = decoder.out_of_line_offset(bytes_len)?;
497 let mut _next_ordinal_to_read = 0;
499 let mut next_offset = offset;
500 let end_offset = offset + bytes_len;
501 _next_ordinal_to_read += 1;
502 if next_offset >= end_offset {
503 return Ok(());
504 }
505
506 while _next_ordinal_to_read < 1 {
508 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
509 _next_ordinal_to_read += 1;
510 next_offset += envelope_size;
511 }
512
513 let next_out_of_line = decoder.next_out_of_line();
514 let handles_before = decoder.remaining_handles();
515 if let Some((inlined, num_bytes, num_handles)) =
516 fidl::encoding::decode_envelope_header(decoder, next_offset)?
517 {
518 let member_inline_size =
519 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
520 if inlined != (member_inline_size <= 4) {
521 return Err(fidl::Error::InvalidInlineBitInEnvelope);
522 }
523 let inner_offset;
524 let mut inner_depth = depth.clone();
525 if inlined {
526 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
527 inner_offset = next_offset;
528 } else {
529 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
530 inner_depth.increment()?;
531 }
532 let val_ref =
533 self.default_thread_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
534 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
535 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
536 {
537 return Err(fidl::Error::InvalidNumBytesInEnvelope);
538 }
539 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
540 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
541 }
542 }
543
544 next_offset += envelope_size;
545 _next_ordinal_to_read += 1;
546 if next_offset >= end_offset {
547 return Ok(());
548 }
549
550 while _next_ordinal_to_read < 2 {
552 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
553 _next_ordinal_to_read += 1;
554 next_offset += envelope_size;
555 }
556
557 let next_out_of_line = decoder.next_out_of_line();
558 let handles_before = decoder.remaining_handles();
559 if let Some((inlined, num_bytes, num_handles)) =
560 fidl::encoding::decode_envelope_header(decoder, next_offset)?
561 {
562 let member_inline_size = <fidl::encoding::Vector<CustomThreadConfig, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
563 if inlined != (member_inline_size <= 4) {
564 return Err(fidl::Error::InvalidInlineBitInEnvelope);
565 }
566 let inner_offset;
567 let mut inner_depth = depth.clone();
568 if inlined {
569 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
570 inner_offset = next_offset;
571 } else {
572 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
573 inner_depth.increment()?;
574 }
575 let val_ref = self.custom_threads.get_or_insert_with(
576 || fidl::new_empty!(fidl::encoding::Vector<CustomThreadConfig, 64>, D),
577 );
578 fidl::decode!(fidl::encoding::Vector<CustomThreadConfig, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
579 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
580 {
581 return Err(fidl::Error::InvalidNumBytesInEnvelope);
582 }
583 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
584 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
585 }
586 }
587
588 next_offset += envelope_size;
589
590 while next_offset < end_offset {
592 _next_ordinal_to_read += 1;
593 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
594 next_offset += envelope_size;
595 }
596
597 Ok(())
598 }
599 }
600}