facet_core/impls_core/tuple.rs
1//! GENERATED: DO NOT EDIT — this file is generated by the `facet-codegen` crate.
2//! Run `just codegen` to regenerate.
3
4use core::{alloc::Layout, fmt};
5
6use crate::{
7 Characteristic, ConstTypeId, Def, Facet, Field, FieldFlags, PtrConst, Shape, Struct,
8 TypeNameOpts, ValueVTable,
9};
10
11#[inline(always)]
12pub fn write_type_name_list(
13 f: &mut fmt::Formatter<'_>,
14 opts: TypeNameOpts,
15 open: &'static str,
16 delimiter: &'static str,
17 close: &'static str,
18 shapes: &'static [&'static Shape],
19) -> fmt::Result {
20 f.pad(open)?;
21 if let Some(opts) = opts.for_children() {
22 for (index, shape) in shapes.iter().enumerate() {
23 if index > 0 {
24 f.pad(delimiter)?;
25 }
26 shape.write_type_name(f, opts)?;
27 }
28 } else {
29 write!(f, "⋯")?;
30 }
31 f.pad(close)?;
32 Ok(())
33}
34
35macro_rules! field {
36 ($idx:tt, $ty:ty,) => {
37 Field::builder()
38 .name(stringify!($idx))
39 .shape(|| $crate::shape_of(&|t: &$ty| &t.$idx))
40 .offset(core::mem::offset_of!($ty, $idx))
41 .flags(FieldFlags::EMPTY)
42 .build()
43 };
44}
45
46unsafe impl<T0> Facet for (T0,)
47where
48 T0: Facet,
49{
50 const SHAPE: &'static Shape = &const {
51 fn type_name<T0>(f: &mut fmt::Formatter, opts: TypeNameOpts) -> fmt::Result
52 where
53 T0: Facet,
54 {
55 write_type_name_list(f, opts, "(", ", ", ")", &[T0::SHAPE])
56 }
57
58 Shape::builder()
59 .id(ConstTypeId::of::<(T0,)>())
60 .layout(Layout::new::<(T0,)>())
61 .vtable(
62 &const {
63 let mut builder = ValueVTable::builder()
64 .type_name(type_name::<T0>)
65 .marker_traits(T0::SHAPE.vtable.marker_traits);
66
67 if Characteristic::Eq.all(&[T0::SHAPE]) {
68 builder = builder.debug(|value, f| {
69 let value = unsafe { value.get::<(T0,)>() };
70 write!(f, "(")?;
71 unsafe {
72 let ptr = &value.0 as *const T0;
73 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
74 }?;
75 write!(f, ")")
76 });
77
78 builder = builder.eq(|a, b| {
79 let a = unsafe { a.get::<(T0,)>() };
80 let b = unsafe { b.get::<(T0,)>() };
81
82 // Compare last element
83 unsafe {
84 (T0::SHAPE.vtable.eq.unwrap_unchecked())(
85 PtrConst::new(&a.0 as *const T0),
86 PtrConst::new(&b.0 as *const T0),
87 )
88 }
89 });
90 }
91
92 builder.build()
93 },
94 )
95 .def(Def::Struct({
96 Struct::builder()
97 .tuple()
98 .fields(&const { [field!(0, (T0,),)] })
99 .build()
100 }))
101 .build()
102 };
103}
104unsafe impl<T0, T1> Facet for (T0, T1)
105where
106 T0: Facet,
107 T1: Facet,
108{
109 const SHAPE: &'static Shape = &const {
110 fn type_name<T0, T1>(f: &mut fmt::Formatter, opts: TypeNameOpts) -> fmt::Result
111 where
112 T0: Facet,
113 T1: Facet,
114 {
115 write_type_name_list(f, opts, "(", ", ", ")", &[T0::SHAPE, T1::SHAPE])
116 }
117
118 Shape::builder()
119 .id(ConstTypeId::of::<(T0, T1)>())
120 .layout(Layout::new::<(T0, T1)>())
121 .vtable(
122 &const {
123 let mut builder = ValueVTable::builder()
124 .type_name(type_name::<T0, T1>)
125 .marker_traits({
126 T0::SHAPE
127 .vtable
128 .marker_traits
129 .intersection(T1::SHAPE.vtable.marker_traits)
130 });
131
132 if Characteristic::Eq.all(&[T0::SHAPE, T1::SHAPE]) {
133 builder = builder.debug(|value, f| {
134 let value = unsafe { value.get::<(T0, T1)>() };
135 write!(f, "(")?;
136 unsafe {
137 let ptr = &value.0 as *const T0;
138 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
139 }?;
140 write!(f, ", ")?;
141 unsafe {
142 let ptr = &value.1 as *const T1;
143 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
144 }?;
145 write!(f, ")")
146 });
147
148 builder = builder.eq(|a, b| {
149 let a = unsafe { a.get::<(T0, T1)>() };
150 let b = unsafe { b.get::<(T0, T1)>() };
151
152 // Compare element 0
153 unsafe {
154 let a_ptr = &a.0 as *const T0;
155 let b_ptr = &b.0 as *const T0;
156 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
157 PtrConst::new(a_ptr),
158 PtrConst::new(b_ptr),
159 ) {
160 return false;
161 }
162 }
163
164 // Compare last element
165 unsafe {
166 (T1::SHAPE.vtable.eq.unwrap_unchecked())(
167 PtrConst::new(&a.1 as *const T1),
168 PtrConst::new(&b.1 as *const T1),
169 )
170 }
171 });
172 }
173
174 builder.build()
175 },
176 )
177 .def(Def::Struct({
178 Struct::builder()
179 .tuple()
180 .fields(&const { [field!(0, (T0, T1,),), field!(1, (T0, T1,),)] })
181 .build()
182 }))
183 .build()
184 };
185}
186unsafe impl<T0, T1, T2> Facet for (T0, T1, T2)
187where
188 T0: Facet,
189 T1: Facet,
190 T2: Facet,
191{
192 const SHAPE: &'static Shape = &const {
193 fn type_name<T0, T1, T2>(f: &mut fmt::Formatter, opts: TypeNameOpts) -> fmt::Result
194 where
195 T0: Facet,
196 T1: Facet,
197 T2: Facet,
198 {
199 write_type_name_list(f, opts, "(", ", ", ")", &[T0::SHAPE, T1::SHAPE, T2::SHAPE])
200 }
201
202 Shape::builder()
203 .id(ConstTypeId::of::<(T0, T1, T2)>())
204 .layout(Layout::new::<(T0, T1, T2)>())
205 .vtable(
206 &const {
207 let mut builder = ValueVTable::builder()
208 .type_name(type_name::<T0, T1, T2>)
209 .marker_traits({
210 T0::SHAPE
211 .vtable
212 .marker_traits
213 .intersection(T1::SHAPE.vtable.marker_traits)
214 .intersection(T2::SHAPE.vtable.marker_traits)
215 });
216
217 if Characteristic::Eq.all(&[T0::SHAPE, T1::SHAPE, T2::SHAPE]) {
218 builder = builder.debug(|value, f| {
219 let value = unsafe { value.get::<(T0, T1, T2)>() };
220 write!(f, "(")?;
221 unsafe {
222 let ptr = &value.0 as *const T0;
223 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
224 }?;
225 write!(f, ", ")?;
226 unsafe {
227 let ptr = &value.1 as *const T1;
228 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
229 }?;
230 write!(f, ", ")?;
231 unsafe {
232 let ptr = &value.2 as *const T2;
233 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
234 }?;
235 write!(f, ")")
236 });
237
238 builder = builder.eq(|a, b| {
239 let a = unsafe { a.get::<(T0, T1, T2)>() };
240 let b = unsafe { b.get::<(T0, T1, T2)>() };
241
242 // Compare element 0
243 unsafe {
244 let a_ptr = &a.0 as *const T0;
245 let b_ptr = &b.0 as *const T0;
246 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
247 PtrConst::new(a_ptr),
248 PtrConst::new(b_ptr),
249 ) {
250 return false;
251 }
252 }
253
254 // Compare element 1
255 unsafe {
256 let a_ptr = &a.1 as *const T1;
257 let b_ptr = &b.1 as *const T1;
258 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
259 PtrConst::new(a_ptr),
260 PtrConst::new(b_ptr),
261 ) {
262 return false;
263 }
264 }
265
266 // Compare last element
267 unsafe {
268 (T2::SHAPE.vtable.eq.unwrap_unchecked())(
269 PtrConst::new(&a.2 as *const T2),
270 PtrConst::new(&b.2 as *const T2),
271 )
272 }
273 });
274 }
275
276 builder.build()
277 },
278 )
279 .def(Def::Struct({
280 Struct::builder()
281 .tuple()
282 .fields(
283 &const {
284 [
285 field!(0, (T0, T1, T2,),),
286 field!(1, (T0, T1, T2,),),
287 field!(2, (T0, T1, T2,),),
288 ]
289 },
290 )
291 .build()
292 }))
293 .build()
294 };
295}
296unsafe impl<T0, T1, T2, T3> Facet for (T0, T1, T2, T3)
297where
298 T0: Facet,
299 T1: Facet,
300 T2: Facet,
301 T3: Facet,
302{
303 const SHAPE: &'static Shape = &const {
304 fn type_name<T0, T1, T2, T3>(f: &mut fmt::Formatter, opts: TypeNameOpts) -> fmt::Result
305 where
306 T0: Facet,
307 T1: Facet,
308 T2: Facet,
309 T3: Facet,
310 {
311 write_type_name_list(
312 f,
313 opts,
314 "(",
315 ", ",
316 ")",
317 &[T0::SHAPE, T1::SHAPE, T2::SHAPE, T3::SHAPE],
318 )
319 }
320
321 Shape::builder()
322 .id(ConstTypeId::of::<(T0, T1, T2, T3)>())
323 .layout(Layout::new::<(T0, T1, T2, T3)>())
324 .vtable(
325 &const {
326 let mut builder = ValueVTable::builder()
327 .type_name(type_name::<T0, T1, T2, T3>)
328 .marker_traits({
329 T0::SHAPE
330 .vtable
331 .marker_traits
332 .intersection(T1::SHAPE.vtable.marker_traits)
333 .intersection(T2::SHAPE.vtable.marker_traits)
334 .intersection(T3::SHAPE.vtable.marker_traits)
335 });
336
337 if Characteristic::Eq.all(&[T0::SHAPE, T1::SHAPE, T2::SHAPE, T3::SHAPE]) {
338 builder = builder.debug(|value, f| {
339 let value = unsafe { value.get::<(T0, T1, T2, T3)>() };
340 write!(f, "(")?;
341 unsafe {
342 let ptr = &value.0 as *const T0;
343 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
344 }?;
345 write!(f, ", ")?;
346 unsafe {
347 let ptr = &value.1 as *const T1;
348 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
349 }?;
350 write!(f, ", ")?;
351 unsafe {
352 let ptr = &value.2 as *const T2;
353 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
354 }?;
355 write!(f, ", ")?;
356 unsafe {
357 let ptr = &value.3 as *const T3;
358 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
359 }?;
360 write!(f, ")")
361 });
362
363 builder = builder.eq(|a, b| {
364 let a = unsafe { a.get::<(T0, T1, T2, T3)>() };
365 let b = unsafe { b.get::<(T0, T1, T2, T3)>() };
366
367 // Compare element 0
368 unsafe {
369 let a_ptr = &a.0 as *const T0;
370 let b_ptr = &b.0 as *const T0;
371 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
372 PtrConst::new(a_ptr),
373 PtrConst::new(b_ptr),
374 ) {
375 return false;
376 }
377 }
378
379 // Compare element 1
380 unsafe {
381 let a_ptr = &a.1 as *const T1;
382 let b_ptr = &b.1 as *const T1;
383 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
384 PtrConst::new(a_ptr),
385 PtrConst::new(b_ptr),
386 ) {
387 return false;
388 }
389 }
390
391 // Compare element 2
392 unsafe {
393 let a_ptr = &a.2 as *const T2;
394 let b_ptr = &b.2 as *const T2;
395 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
396 PtrConst::new(a_ptr),
397 PtrConst::new(b_ptr),
398 ) {
399 return false;
400 }
401 }
402
403 // Compare last element
404 unsafe {
405 (T3::SHAPE.vtable.eq.unwrap_unchecked())(
406 PtrConst::new(&a.3 as *const T3),
407 PtrConst::new(&b.3 as *const T3),
408 )
409 }
410 });
411 }
412
413 builder.build()
414 },
415 )
416 .def(Def::Struct({
417 Struct::builder()
418 .tuple()
419 .fields(
420 &const {
421 [
422 field!(0, (T0, T1, T2, T3,),),
423 field!(1, (T0, T1, T2, T3,),),
424 field!(2, (T0, T1, T2, T3,),),
425 field!(3, (T0, T1, T2, T3,),),
426 ]
427 },
428 )
429 .build()
430 }))
431 .build()
432 };
433}
434unsafe impl<T0, T1, T2, T3, T4> Facet for (T0, T1, T2, T3, T4)
435where
436 T0: Facet,
437 T1: Facet,
438 T2: Facet,
439 T3: Facet,
440 T4: Facet,
441{
442 const SHAPE: &'static Shape = &const {
443 fn type_name<T0, T1, T2, T3, T4>(f: &mut fmt::Formatter, opts: TypeNameOpts) -> fmt::Result
444 where
445 T0: Facet,
446 T1: Facet,
447 T2: Facet,
448 T3: Facet,
449 T4: Facet,
450 {
451 write_type_name_list(
452 f,
453 opts,
454 "(",
455 ", ",
456 ")",
457 &[T0::SHAPE, T1::SHAPE, T2::SHAPE, T3::SHAPE, T4::SHAPE],
458 )
459 }
460
461 Shape::builder()
462 .id(ConstTypeId::of::<(T0, T1, T2, T3, T4)>())
463 .layout(Layout::new::<(T0, T1, T2, T3, T4)>())
464 .vtable(
465 &const {
466 let mut builder = ValueVTable::builder()
467 .type_name(type_name::<T0, T1, T2, T3, T4>)
468 .marker_traits({
469 T0::SHAPE
470 .vtable
471 .marker_traits
472 .intersection(T1::SHAPE.vtable.marker_traits)
473 .intersection(T2::SHAPE.vtable.marker_traits)
474 .intersection(T3::SHAPE.vtable.marker_traits)
475 .intersection(T4::SHAPE.vtable.marker_traits)
476 });
477
478 if Characteristic::Eq.all(&[
479 T0::SHAPE,
480 T1::SHAPE,
481 T2::SHAPE,
482 T3::SHAPE,
483 T4::SHAPE,
484 ]) {
485 builder = builder.debug(|value, f| {
486 let value = unsafe { value.get::<(T0, T1, T2, T3, T4)>() };
487 write!(f, "(")?;
488 unsafe {
489 let ptr = &value.0 as *const T0;
490 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
491 }?;
492 write!(f, ", ")?;
493 unsafe {
494 let ptr = &value.1 as *const T1;
495 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
496 }?;
497 write!(f, ", ")?;
498 unsafe {
499 let ptr = &value.2 as *const T2;
500 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
501 }?;
502 write!(f, ", ")?;
503 unsafe {
504 let ptr = &value.3 as *const T3;
505 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
506 }?;
507 write!(f, ", ")?;
508 unsafe {
509 let ptr = &value.4 as *const T4;
510 (T4::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
511 }?;
512 write!(f, ")")
513 });
514
515 builder = builder.eq(|a, b| {
516 let a = unsafe { a.get::<(T0, T1, T2, T3, T4)>() };
517 let b = unsafe { b.get::<(T0, T1, T2, T3, T4)>() };
518
519 // Compare element 0
520 unsafe {
521 let a_ptr = &a.0 as *const T0;
522 let b_ptr = &b.0 as *const T0;
523 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
524 PtrConst::new(a_ptr),
525 PtrConst::new(b_ptr),
526 ) {
527 return false;
528 }
529 }
530
531 // Compare element 1
532 unsafe {
533 let a_ptr = &a.1 as *const T1;
534 let b_ptr = &b.1 as *const T1;
535 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
536 PtrConst::new(a_ptr),
537 PtrConst::new(b_ptr),
538 ) {
539 return false;
540 }
541 }
542
543 // Compare element 2
544 unsafe {
545 let a_ptr = &a.2 as *const T2;
546 let b_ptr = &b.2 as *const T2;
547 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
548 PtrConst::new(a_ptr),
549 PtrConst::new(b_ptr),
550 ) {
551 return false;
552 }
553 }
554
555 // Compare element 3
556 unsafe {
557 let a_ptr = &a.3 as *const T3;
558 let b_ptr = &b.3 as *const T3;
559 if !(T3::SHAPE.vtable.eq.unwrap_unchecked())(
560 PtrConst::new(a_ptr),
561 PtrConst::new(b_ptr),
562 ) {
563 return false;
564 }
565 }
566
567 // Compare last element
568 unsafe {
569 (T4::SHAPE.vtable.eq.unwrap_unchecked())(
570 PtrConst::new(&a.4 as *const T4),
571 PtrConst::new(&b.4 as *const T4),
572 )
573 }
574 });
575 }
576
577 builder.build()
578 },
579 )
580 .def(Def::Struct({
581 Struct::builder()
582 .tuple()
583 .fields(
584 &const {
585 [
586 field!(0, (T0, T1, T2, T3, T4,),),
587 field!(1, (T0, T1, T2, T3, T4,),),
588 field!(2, (T0, T1, T2, T3, T4,),),
589 field!(3, (T0, T1, T2, T3, T4,),),
590 field!(4, (T0, T1, T2, T3, T4,),),
591 ]
592 },
593 )
594 .build()
595 }))
596 .build()
597 };
598}
599unsafe impl<T0, T1, T2, T3, T4, T5> Facet for (T0, T1, T2, T3, T4, T5)
600where
601 T0: Facet,
602 T1: Facet,
603 T2: Facet,
604 T3: Facet,
605 T4: Facet,
606 T5: Facet,
607{
608 const SHAPE: &'static Shape = &const {
609 fn type_name<T0, T1, T2, T3, T4, T5>(
610 f: &mut fmt::Formatter,
611 opts: TypeNameOpts,
612 ) -> fmt::Result
613 where
614 T0: Facet,
615 T1: Facet,
616 T2: Facet,
617 T3: Facet,
618 T4: Facet,
619 T5: Facet,
620 {
621 write_type_name_list(
622 f,
623 opts,
624 "(",
625 ", ",
626 ")",
627 &[
628 T0::SHAPE,
629 T1::SHAPE,
630 T2::SHAPE,
631 T3::SHAPE,
632 T4::SHAPE,
633 T5::SHAPE,
634 ],
635 )
636 }
637
638 Shape::builder()
639 .id(ConstTypeId::of::<(T0, T1, T2, T3, T4, T5)>())
640 .layout(Layout::new::<(T0, T1, T2, T3, T4, T5)>())
641 .vtable(
642 &const {
643 let mut builder = ValueVTable::builder()
644 .type_name(type_name::<T0, T1, T2, T3, T4, T5>)
645 .marker_traits({
646 T0::SHAPE
647 .vtable
648 .marker_traits
649 .intersection(T1::SHAPE.vtable.marker_traits)
650 .intersection(T2::SHAPE.vtable.marker_traits)
651 .intersection(T3::SHAPE.vtable.marker_traits)
652 .intersection(T4::SHAPE.vtable.marker_traits)
653 .intersection(T5::SHAPE.vtable.marker_traits)
654 });
655
656 if Characteristic::Eq.all(&[
657 T0::SHAPE,
658 T1::SHAPE,
659 T2::SHAPE,
660 T3::SHAPE,
661 T4::SHAPE,
662 T5::SHAPE,
663 ]) {
664 builder = builder.debug(|value, f| {
665 let value = unsafe { value.get::<(T0, T1, T2, T3, T4, T5)>() };
666 write!(f, "(")?;
667 unsafe {
668 let ptr = &value.0 as *const T0;
669 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
670 }?;
671 write!(f, ", ")?;
672 unsafe {
673 let ptr = &value.1 as *const T1;
674 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
675 }?;
676 write!(f, ", ")?;
677 unsafe {
678 let ptr = &value.2 as *const T2;
679 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
680 }?;
681 write!(f, ", ")?;
682 unsafe {
683 let ptr = &value.3 as *const T3;
684 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
685 }?;
686 write!(f, ", ")?;
687 unsafe {
688 let ptr = &value.4 as *const T4;
689 (T4::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
690 }?;
691 write!(f, ", ")?;
692 unsafe {
693 let ptr = &value.5 as *const T5;
694 (T5::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
695 }?;
696 write!(f, ")")
697 });
698
699 builder = builder.eq(|a, b| {
700 let a = unsafe { a.get::<(T0, T1, T2, T3, T4, T5)>() };
701 let b = unsafe { b.get::<(T0, T1, T2, T3, T4, T5)>() };
702
703 // Compare element 0
704 unsafe {
705 let a_ptr = &a.0 as *const T0;
706 let b_ptr = &b.0 as *const T0;
707 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
708 PtrConst::new(a_ptr),
709 PtrConst::new(b_ptr),
710 ) {
711 return false;
712 }
713 }
714
715 // Compare element 1
716 unsafe {
717 let a_ptr = &a.1 as *const T1;
718 let b_ptr = &b.1 as *const T1;
719 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
720 PtrConst::new(a_ptr),
721 PtrConst::new(b_ptr),
722 ) {
723 return false;
724 }
725 }
726
727 // Compare element 2
728 unsafe {
729 let a_ptr = &a.2 as *const T2;
730 let b_ptr = &b.2 as *const T2;
731 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
732 PtrConst::new(a_ptr),
733 PtrConst::new(b_ptr),
734 ) {
735 return false;
736 }
737 }
738
739 // Compare element 3
740 unsafe {
741 let a_ptr = &a.3 as *const T3;
742 let b_ptr = &b.3 as *const T3;
743 if !(T3::SHAPE.vtable.eq.unwrap_unchecked())(
744 PtrConst::new(a_ptr),
745 PtrConst::new(b_ptr),
746 ) {
747 return false;
748 }
749 }
750
751 // Compare element 4
752 unsafe {
753 let a_ptr = &a.4 as *const T4;
754 let b_ptr = &b.4 as *const T4;
755 if !(T4::SHAPE.vtable.eq.unwrap_unchecked())(
756 PtrConst::new(a_ptr),
757 PtrConst::new(b_ptr),
758 ) {
759 return false;
760 }
761 }
762
763 // Compare last element
764 unsafe {
765 (T5::SHAPE.vtable.eq.unwrap_unchecked())(
766 PtrConst::new(&a.5 as *const T5),
767 PtrConst::new(&b.5 as *const T5),
768 )
769 }
770 });
771 }
772
773 builder.build()
774 },
775 )
776 .def(Def::Struct({
777 Struct::builder()
778 .tuple()
779 .fields(
780 &const {
781 [
782 field!(0, (T0, T1, T2, T3, T4, T5,),),
783 field!(1, (T0, T1, T2, T3, T4, T5,),),
784 field!(2, (T0, T1, T2, T3, T4, T5,),),
785 field!(3, (T0, T1, T2, T3, T4, T5,),),
786 field!(4, (T0, T1, T2, T3, T4, T5,),),
787 field!(5, (T0, T1, T2, T3, T4, T5,),),
788 ]
789 },
790 )
791 .build()
792 }))
793 .build()
794 };
795}
796unsafe impl<T0, T1, T2, T3, T4, T5, T6> Facet for (T0, T1, T2, T3, T4, T5, T6)
797where
798 T0: Facet,
799 T1: Facet,
800 T2: Facet,
801 T3: Facet,
802 T4: Facet,
803 T5: Facet,
804 T6: Facet,
805{
806 const SHAPE: &'static Shape = &const {
807 fn type_name<T0, T1, T2, T3, T4, T5, T6>(
808 f: &mut fmt::Formatter,
809 opts: TypeNameOpts,
810 ) -> fmt::Result
811 where
812 T0: Facet,
813 T1: Facet,
814 T2: Facet,
815 T3: Facet,
816 T4: Facet,
817 T5: Facet,
818 T6: Facet,
819 {
820 write_type_name_list(
821 f,
822 opts,
823 "(",
824 ", ",
825 ")",
826 &[
827 T0::SHAPE,
828 T1::SHAPE,
829 T2::SHAPE,
830 T3::SHAPE,
831 T4::SHAPE,
832 T5::SHAPE,
833 T6::SHAPE,
834 ],
835 )
836 }
837
838 Shape::builder()
839 .id(ConstTypeId::of::<(T0, T1, T2, T3, T4, T5, T6)>())
840 .layout(Layout::new::<(T0, T1, T2, T3, T4, T5, T6)>())
841 .vtable(
842 &const {
843 let mut builder = ValueVTable::builder()
844 .type_name(type_name::<T0, T1, T2, T3, T4, T5, T6>)
845 .marker_traits({
846 T0::SHAPE
847 .vtable
848 .marker_traits
849 .intersection(T1::SHAPE.vtable.marker_traits)
850 .intersection(T2::SHAPE.vtable.marker_traits)
851 .intersection(T3::SHAPE.vtable.marker_traits)
852 .intersection(T4::SHAPE.vtable.marker_traits)
853 .intersection(T5::SHAPE.vtable.marker_traits)
854 .intersection(T6::SHAPE.vtable.marker_traits)
855 });
856
857 if Characteristic::Eq.all(&[
858 T0::SHAPE,
859 T1::SHAPE,
860 T2::SHAPE,
861 T3::SHAPE,
862 T4::SHAPE,
863 T5::SHAPE,
864 T6::SHAPE,
865 ]) {
866 builder = builder.debug(|value, f| {
867 let value = unsafe { value.get::<(T0, T1, T2, T3, T4, T5, T6)>() };
868 write!(f, "(")?;
869 unsafe {
870 let ptr = &value.0 as *const T0;
871 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
872 }?;
873 write!(f, ", ")?;
874 unsafe {
875 let ptr = &value.1 as *const T1;
876 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
877 }?;
878 write!(f, ", ")?;
879 unsafe {
880 let ptr = &value.2 as *const T2;
881 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
882 }?;
883 write!(f, ", ")?;
884 unsafe {
885 let ptr = &value.3 as *const T3;
886 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
887 }?;
888 write!(f, ", ")?;
889 unsafe {
890 let ptr = &value.4 as *const T4;
891 (T4::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
892 }?;
893 write!(f, ", ")?;
894 unsafe {
895 let ptr = &value.5 as *const T5;
896 (T5::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
897 }?;
898 write!(f, ", ")?;
899 unsafe {
900 let ptr = &value.6 as *const T6;
901 (T6::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
902 }?;
903 write!(f, ")")
904 });
905
906 builder = builder.eq(|a, b| {
907 let a = unsafe { a.get::<(T0, T1, T2, T3, T4, T5, T6)>() };
908 let b = unsafe { b.get::<(T0, T1, T2, T3, T4, T5, T6)>() };
909
910 // Compare element 0
911 unsafe {
912 let a_ptr = &a.0 as *const T0;
913 let b_ptr = &b.0 as *const T0;
914 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
915 PtrConst::new(a_ptr),
916 PtrConst::new(b_ptr),
917 ) {
918 return false;
919 }
920 }
921
922 // Compare element 1
923 unsafe {
924 let a_ptr = &a.1 as *const T1;
925 let b_ptr = &b.1 as *const T1;
926 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
927 PtrConst::new(a_ptr),
928 PtrConst::new(b_ptr),
929 ) {
930 return false;
931 }
932 }
933
934 // Compare element 2
935 unsafe {
936 let a_ptr = &a.2 as *const T2;
937 let b_ptr = &b.2 as *const T2;
938 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
939 PtrConst::new(a_ptr),
940 PtrConst::new(b_ptr),
941 ) {
942 return false;
943 }
944 }
945
946 // Compare element 3
947 unsafe {
948 let a_ptr = &a.3 as *const T3;
949 let b_ptr = &b.3 as *const T3;
950 if !(T3::SHAPE.vtable.eq.unwrap_unchecked())(
951 PtrConst::new(a_ptr),
952 PtrConst::new(b_ptr),
953 ) {
954 return false;
955 }
956 }
957
958 // Compare element 4
959 unsafe {
960 let a_ptr = &a.4 as *const T4;
961 let b_ptr = &b.4 as *const T4;
962 if !(T4::SHAPE.vtable.eq.unwrap_unchecked())(
963 PtrConst::new(a_ptr),
964 PtrConst::new(b_ptr),
965 ) {
966 return false;
967 }
968 }
969
970 // Compare element 5
971 unsafe {
972 let a_ptr = &a.5 as *const T5;
973 let b_ptr = &b.5 as *const T5;
974 if !(T5::SHAPE.vtable.eq.unwrap_unchecked())(
975 PtrConst::new(a_ptr),
976 PtrConst::new(b_ptr),
977 ) {
978 return false;
979 }
980 }
981
982 // Compare last element
983 unsafe {
984 (T6::SHAPE.vtable.eq.unwrap_unchecked())(
985 PtrConst::new(&a.6 as *const T6),
986 PtrConst::new(&b.6 as *const T6),
987 )
988 }
989 });
990 }
991
992 builder.build()
993 },
994 )
995 .def(Def::Struct({
996 Struct::builder()
997 .tuple()
998 .fields(
999 &const {
1000 [
1001 field!(0, (T0, T1, T2, T3, T4, T5, T6,),),
1002 field!(1, (T0, T1, T2, T3, T4, T5, T6,),),
1003 field!(2, (T0, T1, T2, T3, T4, T5, T6,),),
1004 field!(3, (T0, T1, T2, T3, T4, T5, T6,),),
1005 field!(4, (T0, T1, T2, T3, T4, T5, T6,),),
1006 field!(5, (T0, T1, T2, T3, T4, T5, T6,),),
1007 field!(6, (T0, T1, T2, T3, T4, T5, T6,),),
1008 ]
1009 },
1010 )
1011 .build()
1012 }))
1013 .build()
1014 };
1015}
1016unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7> Facet for (T0, T1, T2, T3, T4, T5, T6, T7)
1017where
1018 T0: Facet,
1019 T1: Facet,
1020 T2: Facet,
1021 T3: Facet,
1022 T4: Facet,
1023 T5: Facet,
1024 T6: Facet,
1025 T7: Facet,
1026{
1027 const SHAPE: &'static Shape = &const {
1028 fn type_name<T0, T1, T2, T3, T4, T5, T6, T7>(
1029 f: &mut fmt::Formatter,
1030 opts: TypeNameOpts,
1031 ) -> fmt::Result
1032 where
1033 T0: Facet,
1034 T1: Facet,
1035 T2: Facet,
1036 T3: Facet,
1037 T4: Facet,
1038 T5: Facet,
1039 T6: Facet,
1040 T7: Facet,
1041 {
1042 write_type_name_list(
1043 f,
1044 opts,
1045 "(",
1046 ", ",
1047 ")",
1048 &[
1049 T0::SHAPE,
1050 T1::SHAPE,
1051 T2::SHAPE,
1052 T3::SHAPE,
1053 T4::SHAPE,
1054 T5::SHAPE,
1055 T6::SHAPE,
1056 T7::SHAPE,
1057 ],
1058 )
1059 }
1060
1061 Shape::builder()
1062 .id(ConstTypeId::of::<(T0, T1, T2, T3, T4, T5, T6, T7)>())
1063 .layout(Layout::new::<(T0, T1, T2, T3, T4, T5, T6, T7)>())
1064 .vtable(
1065 &const {
1066 let mut builder = ValueVTable::builder()
1067 .type_name(type_name::<T0, T1, T2, T3, T4, T5, T6, T7>)
1068 .marker_traits({
1069 T0::SHAPE
1070 .vtable
1071 .marker_traits
1072 .intersection(T1::SHAPE.vtable.marker_traits)
1073 .intersection(T2::SHAPE.vtable.marker_traits)
1074 .intersection(T3::SHAPE.vtable.marker_traits)
1075 .intersection(T4::SHAPE.vtable.marker_traits)
1076 .intersection(T5::SHAPE.vtable.marker_traits)
1077 .intersection(T6::SHAPE.vtable.marker_traits)
1078 .intersection(T7::SHAPE.vtable.marker_traits)
1079 });
1080
1081 if Characteristic::Eq.all(&[
1082 T0::SHAPE,
1083 T1::SHAPE,
1084 T2::SHAPE,
1085 T3::SHAPE,
1086 T4::SHAPE,
1087 T5::SHAPE,
1088 T6::SHAPE,
1089 T7::SHAPE,
1090 ]) {
1091 builder = builder.debug(|value, f| {
1092 let value = unsafe { value.get::<(T0, T1, T2, T3, T4, T5, T6, T7)>() };
1093 write!(f, "(")?;
1094 unsafe {
1095 let ptr = &value.0 as *const T0;
1096 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1097 }?;
1098 write!(f, ", ")?;
1099 unsafe {
1100 let ptr = &value.1 as *const T1;
1101 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1102 }?;
1103 write!(f, ", ")?;
1104 unsafe {
1105 let ptr = &value.2 as *const T2;
1106 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1107 }?;
1108 write!(f, ", ")?;
1109 unsafe {
1110 let ptr = &value.3 as *const T3;
1111 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1112 }?;
1113 write!(f, ", ")?;
1114 unsafe {
1115 let ptr = &value.4 as *const T4;
1116 (T4::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1117 }?;
1118 write!(f, ", ")?;
1119 unsafe {
1120 let ptr = &value.5 as *const T5;
1121 (T5::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1122 }?;
1123 write!(f, ", ")?;
1124 unsafe {
1125 let ptr = &value.6 as *const T6;
1126 (T6::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1127 }?;
1128 write!(f, ", ")?;
1129 unsafe {
1130 let ptr = &value.7 as *const T7;
1131 (T7::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1132 }?;
1133 write!(f, ")")
1134 });
1135
1136 builder = builder.eq(|a, b| {
1137 let a = unsafe { a.get::<(T0, T1, T2, T3, T4, T5, T6, T7)>() };
1138 let b = unsafe { b.get::<(T0, T1, T2, T3, T4, T5, T6, T7)>() };
1139
1140 // Compare element 0
1141 unsafe {
1142 let a_ptr = &a.0 as *const T0;
1143 let b_ptr = &b.0 as *const T0;
1144 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
1145 PtrConst::new(a_ptr),
1146 PtrConst::new(b_ptr),
1147 ) {
1148 return false;
1149 }
1150 }
1151
1152 // Compare element 1
1153 unsafe {
1154 let a_ptr = &a.1 as *const T1;
1155 let b_ptr = &b.1 as *const T1;
1156 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
1157 PtrConst::new(a_ptr),
1158 PtrConst::new(b_ptr),
1159 ) {
1160 return false;
1161 }
1162 }
1163
1164 // Compare element 2
1165 unsafe {
1166 let a_ptr = &a.2 as *const T2;
1167 let b_ptr = &b.2 as *const T2;
1168 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
1169 PtrConst::new(a_ptr),
1170 PtrConst::new(b_ptr),
1171 ) {
1172 return false;
1173 }
1174 }
1175
1176 // Compare element 3
1177 unsafe {
1178 let a_ptr = &a.3 as *const T3;
1179 let b_ptr = &b.3 as *const T3;
1180 if !(T3::SHAPE.vtable.eq.unwrap_unchecked())(
1181 PtrConst::new(a_ptr),
1182 PtrConst::new(b_ptr),
1183 ) {
1184 return false;
1185 }
1186 }
1187
1188 // Compare element 4
1189 unsafe {
1190 let a_ptr = &a.4 as *const T4;
1191 let b_ptr = &b.4 as *const T4;
1192 if !(T4::SHAPE.vtable.eq.unwrap_unchecked())(
1193 PtrConst::new(a_ptr),
1194 PtrConst::new(b_ptr),
1195 ) {
1196 return false;
1197 }
1198 }
1199
1200 // Compare element 5
1201 unsafe {
1202 let a_ptr = &a.5 as *const T5;
1203 let b_ptr = &b.5 as *const T5;
1204 if !(T5::SHAPE.vtable.eq.unwrap_unchecked())(
1205 PtrConst::new(a_ptr),
1206 PtrConst::new(b_ptr),
1207 ) {
1208 return false;
1209 }
1210 }
1211
1212 // Compare element 6
1213 unsafe {
1214 let a_ptr = &a.6 as *const T6;
1215 let b_ptr = &b.6 as *const T6;
1216 if !(T6::SHAPE.vtable.eq.unwrap_unchecked())(
1217 PtrConst::new(a_ptr),
1218 PtrConst::new(b_ptr),
1219 ) {
1220 return false;
1221 }
1222 }
1223
1224 // Compare last element
1225 unsafe {
1226 (T7::SHAPE.vtable.eq.unwrap_unchecked())(
1227 PtrConst::new(&a.7 as *const T7),
1228 PtrConst::new(&b.7 as *const T7),
1229 )
1230 }
1231 });
1232 }
1233
1234 builder.build()
1235 },
1236 )
1237 .def(Def::Struct({
1238 Struct::builder()
1239 .tuple()
1240 .fields(
1241 &const {
1242 [
1243 field!(0, (T0, T1, T2, T3, T4, T5, T6, T7,),),
1244 field!(1, (T0, T1, T2, T3, T4, T5, T6, T7,),),
1245 field!(2, (T0, T1, T2, T3, T4, T5, T6, T7,),),
1246 field!(3, (T0, T1, T2, T3, T4, T5, T6, T7,),),
1247 field!(4, (T0, T1, T2, T3, T4, T5, T6, T7,),),
1248 field!(5, (T0, T1, T2, T3, T4, T5, T6, T7,),),
1249 field!(6, (T0, T1, T2, T3, T4, T5, T6, T7,),),
1250 field!(7, (T0, T1, T2, T3, T4, T5, T6, T7,),),
1251 ]
1252 },
1253 )
1254 .build()
1255 }))
1256 .build()
1257 };
1258}
1259unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> Facet for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
1260where
1261 T0: Facet,
1262 T1: Facet,
1263 T2: Facet,
1264 T3: Facet,
1265 T4: Facet,
1266 T5: Facet,
1267 T6: Facet,
1268 T7: Facet,
1269 T8: Facet,
1270{
1271 const SHAPE: &'static Shape = &const {
1272 fn type_name<T0, T1, T2, T3, T4, T5, T6, T7, T8>(
1273 f: &mut fmt::Formatter,
1274 opts: TypeNameOpts,
1275 ) -> fmt::Result
1276 where
1277 T0: Facet,
1278 T1: Facet,
1279 T2: Facet,
1280 T3: Facet,
1281 T4: Facet,
1282 T5: Facet,
1283 T6: Facet,
1284 T7: Facet,
1285 T8: Facet,
1286 {
1287 write_type_name_list(
1288 f,
1289 opts,
1290 "(",
1291 ", ",
1292 ")",
1293 &[
1294 T0::SHAPE,
1295 T1::SHAPE,
1296 T2::SHAPE,
1297 T3::SHAPE,
1298 T4::SHAPE,
1299 T5::SHAPE,
1300 T6::SHAPE,
1301 T7::SHAPE,
1302 T8::SHAPE,
1303 ],
1304 )
1305 }
1306
1307 Shape::builder()
1308 .id(ConstTypeId::of::<(T0, T1, T2, T3, T4, T5, T6, T7, T8)>())
1309 .layout(Layout::new::<(T0, T1, T2, T3, T4, T5, T6, T7, T8)>())
1310 .vtable(
1311 &const {
1312 let mut builder = ValueVTable::builder()
1313 .type_name(type_name::<T0, T1, T2, T3, T4, T5, T6, T7, T8>)
1314 .marker_traits({
1315 T0::SHAPE
1316 .vtable
1317 .marker_traits
1318 .intersection(T1::SHAPE.vtable.marker_traits)
1319 .intersection(T2::SHAPE.vtable.marker_traits)
1320 .intersection(T3::SHAPE.vtable.marker_traits)
1321 .intersection(T4::SHAPE.vtable.marker_traits)
1322 .intersection(T5::SHAPE.vtable.marker_traits)
1323 .intersection(T6::SHAPE.vtable.marker_traits)
1324 .intersection(T7::SHAPE.vtable.marker_traits)
1325 .intersection(T8::SHAPE.vtable.marker_traits)
1326 });
1327
1328 if Characteristic::Eq.all(&[
1329 T0::SHAPE,
1330 T1::SHAPE,
1331 T2::SHAPE,
1332 T3::SHAPE,
1333 T4::SHAPE,
1334 T5::SHAPE,
1335 T6::SHAPE,
1336 T7::SHAPE,
1337 T8::SHAPE,
1338 ]) {
1339 builder = builder.debug(|value, f| {
1340 let value =
1341 unsafe { value.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8)>() };
1342 write!(f, "(")?;
1343 unsafe {
1344 let ptr = &value.0 as *const T0;
1345 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1346 }?;
1347 write!(f, ", ")?;
1348 unsafe {
1349 let ptr = &value.1 as *const T1;
1350 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1351 }?;
1352 write!(f, ", ")?;
1353 unsafe {
1354 let ptr = &value.2 as *const T2;
1355 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1356 }?;
1357 write!(f, ", ")?;
1358 unsafe {
1359 let ptr = &value.3 as *const T3;
1360 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1361 }?;
1362 write!(f, ", ")?;
1363 unsafe {
1364 let ptr = &value.4 as *const T4;
1365 (T4::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1366 }?;
1367 write!(f, ", ")?;
1368 unsafe {
1369 let ptr = &value.5 as *const T5;
1370 (T5::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1371 }?;
1372 write!(f, ", ")?;
1373 unsafe {
1374 let ptr = &value.6 as *const T6;
1375 (T6::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1376 }?;
1377 write!(f, ", ")?;
1378 unsafe {
1379 let ptr = &value.7 as *const T7;
1380 (T7::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1381 }?;
1382 write!(f, ", ")?;
1383 unsafe {
1384 let ptr = &value.8 as *const T8;
1385 (T8::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1386 }?;
1387 write!(f, ")")
1388 });
1389
1390 builder = builder.eq(|a, b| {
1391 let a = unsafe { a.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8)>() };
1392 let b = unsafe { b.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8)>() };
1393
1394 // Compare element 0
1395 unsafe {
1396 let a_ptr = &a.0 as *const T0;
1397 let b_ptr = &b.0 as *const T0;
1398 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
1399 PtrConst::new(a_ptr),
1400 PtrConst::new(b_ptr),
1401 ) {
1402 return false;
1403 }
1404 }
1405
1406 // Compare element 1
1407 unsafe {
1408 let a_ptr = &a.1 as *const T1;
1409 let b_ptr = &b.1 as *const T1;
1410 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
1411 PtrConst::new(a_ptr),
1412 PtrConst::new(b_ptr),
1413 ) {
1414 return false;
1415 }
1416 }
1417
1418 // Compare element 2
1419 unsafe {
1420 let a_ptr = &a.2 as *const T2;
1421 let b_ptr = &b.2 as *const T2;
1422 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
1423 PtrConst::new(a_ptr),
1424 PtrConst::new(b_ptr),
1425 ) {
1426 return false;
1427 }
1428 }
1429
1430 // Compare element 3
1431 unsafe {
1432 let a_ptr = &a.3 as *const T3;
1433 let b_ptr = &b.3 as *const T3;
1434 if !(T3::SHAPE.vtable.eq.unwrap_unchecked())(
1435 PtrConst::new(a_ptr),
1436 PtrConst::new(b_ptr),
1437 ) {
1438 return false;
1439 }
1440 }
1441
1442 // Compare element 4
1443 unsafe {
1444 let a_ptr = &a.4 as *const T4;
1445 let b_ptr = &b.4 as *const T4;
1446 if !(T4::SHAPE.vtable.eq.unwrap_unchecked())(
1447 PtrConst::new(a_ptr),
1448 PtrConst::new(b_ptr),
1449 ) {
1450 return false;
1451 }
1452 }
1453
1454 // Compare element 5
1455 unsafe {
1456 let a_ptr = &a.5 as *const T5;
1457 let b_ptr = &b.5 as *const T5;
1458 if !(T5::SHAPE.vtable.eq.unwrap_unchecked())(
1459 PtrConst::new(a_ptr),
1460 PtrConst::new(b_ptr),
1461 ) {
1462 return false;
1463 }
1464 }
1465
1466 // Compare element 6
1467 unsafe {
1468 let a_ptr = &a.6 as *const T6;
1469 let b_ptr = &b.6 as *const T6;
1470 if !(T6::SHAPE.vtable.eq.unwrap_unchecked())(
1471 PtrConst::new(a_ptr),
1472 PtrConst::new(b_ptr),
1473 ) {
1474 return false;
1475 }
1476 }
1477
1478 // Compare element 7
1479 unsafe {
1480 let a_ptr = &a.7 as *const T7;
1481 let b_ptr = &b.7 as *const T7;
1482 if !(T7::SHAPE.vtable.eq.unwrap_unchecked())(
1483 PtrConst::new(a_ptr),
1484 PtrConst::new(b_ptr),
1485 ) {
1486 return false;
1487 }
1488 }
1489
1490 // Compare last element
1491 unsafe {
1492 (T8::SHAPE.vtable.eq.unwrap_unchecked())(
1493 PtrConst::new(&a.8 as *const T8),
1494 PtrConst::new(&b.8 as *const T8),
1495 )
1496 }
1497 });
1498 }
1499
1500 builder.build()
1501 },
1502 )
1503 .def(Def::Struct({
1504 Struct::builder()
1505 .tuple()
1506 .fields(
1507 &const {
1508 [
1509 field!(0, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1510 field!(1, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1511 field!(2, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1512 field!(3, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1513 field!(4, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1514 field!(5, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1515 field!(6, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1516 field!(7, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1517 field!(8, (T0, T1, T2, T3, T4, T5, T6, T7, T8,),),
1518 ]
1519 },
1520 )
1521 .build()
1522 }))
1523 .build()
1524 };
1525}
1526unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> Facet
1527 for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
1528where
1529 T0: Facet,
1530 T1: Facet,
1531 T2: Facet,
1532 T3: Facet,
1533 T4: Facet,
1534 T5: Facet,
1535 T6: Facet,
1536 T7: Facet,
1537 T8: Facet,
1538 T9: Facet,
1539{
1540 const SHAPE: &'static Shape = &const {
1541 fn type_name<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>(
1542 f: &mut fmt::Formatter,
1543 opts: TypeNameOpts,
1544 ) -> fmt::Result
1545 where
1546 T0: Facet,
1547 T1: Facet,
1548 T2: Facet,
1549 T3: Facet,
1550 T4: Facet,
1551 T5: Facet,
1552 T6: Facet,
1553 T7: Facet,
1554 T8: Facet,
1555 T9: Facet,
1556 {
1557 write_type_name_list(
1558 f,
1559 opts,
1560 "(",
1561 ", ",
1562 ")",
1563 &[
1564 T0::SHAPE,
1565 T1::SHAPE,
1566 T2::SHAPE,
1567 T3::SHAPE,
1568 T4::SHAPE,
1569 T5::SHAPE,
1570 T6::SHAPE,
1571 T7::SHAPE,
1572 T8::SHAPE,
1573 T9::SHAPE,
1574 ],
1575 )
1576 }
1577
1578 Shape::builder()
1579 .id(ConstTypeId::of::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>())
1580 .layout(Layout::new::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>())
1581 .vtable(
1582 &const {
1583 let mut builder = ValueVTable::builder()
1584 .type_name(type_name::<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>)
1585 .marker_traits({
1586 T0::SHAPE
1587 .vtable
1588 .marker_traits
1589 .intersection(T1::SHAPE.vtable.marker_traits)
1590 .intersection(T2::SHAPE.vtable.marker_traits)
1591 .intersection(T3::SHAPE.vtable.marker_traits)
1592 .intersection(T4::SHAPE.vtable.marker_traits)
1593 .intersection(T5::SHAPE.vtable.marker_traits)
1594 .intersection(T6::SHAPE.vtable.marker_traits)
1595 .intersection(T7::SHAPE.vtable.marker_traits)
1596 .intersection(T8::SHAPE.vtable.marker_traits)
1597 .intersection(T9::SHAPE.vtable.marker_traits)
1598 });
1599
1600 if Characteristic::Eq.all(&[
1601 T0::SHAPE,
1602 T1::SHAPE,
1603 T2::SHAPE,
1604 T3::SHAPE,
1605 T4::SHAPE,
1606 T5::SHAPE,
1607 T6::SHAPE,
1608 T7::SHAPE,
1609 T8::SHAPE,
1610 T9::SHAPE,
1611 ]) {
1612 builder = builder.debug(|value, f| {
1613 let value =
1614 unsafe { value.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>() };
1615 write!(f, "(")?;
1616 unsafe {
1617 let ptr = &value.0 as *const T0;
1618 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1619 }?;
1620 write!(f, ", ")?;
1621 unsafe {
1622 let ptr = &value.1 as *const T1;
1623 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1624 }?;
1625 write!(f, ", ")?;
1626 unsafe {
1627 let ptr = &value.2 as *const T2;
1628 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1629 }?;
1630 write!(f, ", ")?;
1631 unsafe {
1632 let ptr = &value.3 as *const T3;
1633 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1634 }?;
1635 write!(f, ", ")?;
1636 unsafe {
1637 let ptr = &value.4 as *const T4;
1638 (T4::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1639 }?;
1640 write!(f, ", ")?;
1641 unsafe {
1642 let ptr = &value.5 as *const T5;
1643 (T5::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1644 }?;
1645 write!(f, ", ")?;
1646 unsafe {
1647 let ptr = &value.6 as *const T6;
1648 (T6::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1649 }?;
1650 write!(f, ", ")?;
1651 unsafe {
1652 let ptr = &value.7 as *const T7;
1653 (T7::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1654 }?;
1655 write!(f, ", ")?;
1656 unsafe {
1657 let ptr = &value.8 as *const T8;
1658 (T8::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1659 }?;
1660 write!(f, ", ")?;
1661 unsafe {
1662 let ptr = &value.9 as *const T9;
1663 (T9::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1664 }?;
1665 write!(f, ")")
1666 });
1667
1668 builder = builder.eq(|a, b| {
1669 let a = unsafe { a.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>() };
1670 let b = unsafe { b.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>() };
1671
1672 // Compare element 0
1673 unsafe {
1674 let a_ptr = &a.0 as *const T0;
1675 let b_ptr = &b.0 as *const T0;
1676 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
1677 PtrConst::new(a_ptr),
1678 PtrConst::new(b_ptr),
1679 ) {
1680 return false;
1681 }
1682 }
1683
1684 // Compare element 1
1685 unsafe {
1686 let a_ptr = &a.1 as *const T1;
1687 let b_ptr = &b.1 as *const T1;
1688 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
1689 PtrConst::new(a_ptr),
1690 PtrConst::new(b_ptr),
1691 ) {
1692 return false;
1693 }
1694 }
1695
1696 // Compare element 2
1697 unsafe {
1698 let a_ptr = &a.2 as *const T2;
1699 let b_ptr = &b.2 as *const T2;
1700 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
1701 PtrConst::new(a_ptr),
1702 PtrConst::new(b_ptr),
1703 ) {
1704 return false;
1705 }
1706 }
1707
1708 // Compare element 3
1709 unsafe {
1710 let a_ptr = &a.3 as *const T3;
1711 let b_ptr = &b.3 as *const T3;
1712 if !(T3::SHAPE.vtable.eq.unwrap_unchecked())(
1713 PtrConst::new(a_ptr),
1714 PtrConst::new(b_ptr),
1715 ) {
1716 return false;
1717 }
1718 }
1719
1720 // Compare element 4
1721 unsafe {
1722 let a_ptr = &a.4 as *const T4;
1723 let b_ptr = &b.4 as *const T4;
1724 if !(T4::SHAPE.vtable.eq.unwrap_unchecked())(
1725 PtrConst::new(a_ptr),
1726 PtrConst::new(b_ptr),
1727 ) {
1728 return false;
1729 }
1730 }
1731
1732 // Compare element 5
1733 unsafe {
1734 let a_ptr = &a.5 as *const T5;
1735 let b_ptr = &b.5 as *const T5;
1736 if !(T5::SHAPE.vtable.eq.unwrap_unchecked())(
1737 PtrConst::new(a_ptr),
1738 PtrConst::new(b_ptr),
1739 ) {
1740 return false;
1741 }
1742 }
1743
1744 // Compare element 6
1745 unsafe {
1746 let a_ptr = &a.6 as *const T6;
1747 let b_ptr = &b.6 as *const T6;
1748 if !(T6::SHAPE.vtable.eq.unwrap_unchecked())(
1749 PtrConst::new(a_ptr),
1750 PtrConst::new(b_ptr),
1751 ) {
1752 return false;
1753 }
1754 }
1755
1756 // Compare element 7
1757 unsafe {
1758 let a_ptr = &a.7 as *const T7;
1759 let b_ptr = &b.7 as *const T7;
1760 if !(T7::SHAPE.vtable.eq.unwrap_unchecked())(
1761 PtrConst::new(a_ptr),
1762 PtrConst::new(b_ptr),
1763 ) {
1764 return false;
1765 }
1766 }
1767
1768 // Compare element 8
1769 unsafe {
1770 let a_ptr = &a.8 as *const T8;
1771 let b_ptr = &b.8 as *const T8;
1772 if !(T8::SHAPE.vtable.eq.unwrap_unchecked())(
1773 PtrConst::new(a_ptr),
1774 PtrConst::new(b_ptr),
1775 ) {
1776 return false;
1777 }
1778 }
1779
1780 // Compare last element
1781 unsafe {
1782 (T9::SHAPE.vtable.eq.unwrap_unchecked())(
1783 PtrConst::new(&a.9 as *const T9),
1784 PtrConst::new(&b.9 as *const T9),
1785 )
1786 }
1787 });
1788 }
1789
1790 builder.build()
1791 },
1792 )
1793 .def(Def::Struct({
1794 Struct::builder()
1795 .tuple()
1796 .fields(
1797 &const {
1798 [
1799 field!(0, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1800 field!(1, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1801 field!(2, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1802 field!(3, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1803 field!(4, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1804 field!(5, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1805 field!(6, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1806 field!(7, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1807 field!(8, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1808 field!(9, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,),),
1809 ]
1810 },
1811 )
1812 .build()
1813 }))
1814 .build()
1815 };
1816}
1817unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Facet
1818 for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
1819where
1820 T0: Facet,
1821 T1: Facet,
1822 T2: Facet,
1823 T3: Facet,
1824 T4: Facet,
1825 T5: Facet,
1826 T6: Facet,
1827 T7: Facet,
1828 T8: Facet,
1829 T9: Facet,
1830 T10: Facet,
1831{
1832 const SHAPE: &'static Shape = &const {
1833 fn type_name<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(
1834 f: &mut fmt::Formatter,
1835 opts: TypeNameOpts,
1836 ) -> fmt::Result
1837 where
1838 T0: Facet,
1839 T1: Facet,
1840 T2: Facet,
1841 T3: Facet,
1842 T4: Facet,
1843 T5: Facet,
1844 T6: Facet,
1845 T7: Facet,
1846 T8: Facet,
1847 T9: Facet,
1848 T10: Facet,
1849 {
1850 write_type_name_list(
1851 f,
1852 opts,
1853 "(",
1854 ", ",
1855 ")",
1856 &[
1857 T0::SHAPE,
1858 T1::SHAPE,
1859 T2::SHAPE,
1860 T3::SHAPE,
1861 T4::SHAPE,
1862 T5::SHAPE,
1863 T6::SHAPE,
1864 T7::SHAPE,
1865 T8::SHAPE,
1866 T9::SHAPE,
1867 T10::SHAPE,
1868 ],
1869 )
1870 }
1871
1872 Shape::builder()
1873 .id(ConstTypeId::of::<(
1874 T0,
1875 T1,
1876 T2,
1877 T3,
1878 T4,
1879 T5,
1880 T6,
1881 T7,
1882 T8,
1883 T9,
1884 T10,
1885 )>())
1886 .layout(Layout::new::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>())
1887 .vtable(
1888 &const {
1889 let mut builder = ValueVTable::builder()
1890 .type_name(type_name::<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>)
1891 .marker_traits({
1892 T0::SHAPE
1893 .vtable
1894 .marker_traits
1895 .intersection(T1::SHAPE.vtable.marker_traits)
1896 .intersection(T2::SHAPE.vtable.marker_traits)
1897 .intersection(T3::SHAPE.vtable.marker_traits)
1898 .intersection(T4::SHAPE.vtable.marker_traits)
1899 .intersection(T5::SHAPE.vtable.marker_traits)
1900 .intersection(T6::SHAPE.vtable.marker_traits)
1901 .intersection(T7::SHAPE.vtable.marker_traits)
1902 .intersection(T8::SHAPE.vtable.marker_traits)
1903 .intersection(T9::SHAPE.vtable.marker_traits)
1904 .intersection(T10::SHAPE.vtable.marker_traits)
1905 });
1906
1907 if Characteristic::Eq.all(&[
1908 T0::SHAPE,
1909 T1::SHAPE,
1910 T2::SHAPE,
1911 T3::SHAPE,
1912 T4::SHAPE,
1913 T5::SHAPE,
1914 T6::SHAPE,
1915 T7::SHAPE,
1916 T8::SHAPE,
1917 T9::SHAPE,
1918 T10::SHAPE,
1919 ]) {
1920 builder = builder.debug(|value, f| {
1921 let value = unsafe {
1922 value.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>()
1923 };
1924 write!(f, "(")?;
1925 unsafe {
1926 let ptr = &value.0 as *const T0;
1927 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1928 }?;
1929 write!(f, ", ")?;
1930 unsafe {
1931 let ptr = &value.1 as *const T1;
1932 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1933 }?;
1934 write!(f, ", ")?;
1935 unsafe {
1936 let ptr = &value.2 as *const T2;
1937 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1938 }?;
1939 write!(f, ", ")?;
1940 unsafe {
1941 let ptr = &value.3 as *const T3;
1942 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1943 }?;
1944 write!(f, ", ")?;
1945 unsafe {
1946 let ptr = &value.4 as *const T4;
1947 (T4::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1948 }?;
1949 write!(f, ", ")?;
1950 unsafe {
1951 let ptr = &value.5 as *const T5;
1952 (T5::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1953 }?;
1954 write!(f, ", ")?;
1955 unsafe {
1956 let ptr = &value.6 as *const T6;
1957 (T6::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1958 }?;
1959 write!(f, ", ")?;
1960 unsafe {
1961 let ptr = &value.7 as *const T7;
1962 (T7::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1963 }?;
1964 write!(f, ", ")?;
1965 unsafe {
1966 let ptr = &value.8 as *const T8;
1967 (T8::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1968 }?;
1969 write!(f, ", ")?;
1970 unsafe {
1971 let ptr = &value.9 as *const T9;
1972 (T9::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1973 }?;
1974 write!(f, ", ")?;
1975 unsafe {
1976 let ptr = &value.10 as *const T10;
1977 (T10::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
1978 }?;
1979 write!(f, ")")
1980 });
1981
1982 builder = builder.eq(|a, b| {
1983 let a =
1984 unsafe { a.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>() };
1985 let b =
1986 unsafe { b.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)>() };
1987
1988 // Compare element 0
1989 unsafe {
1990 let a_ptr = &a.0 as *const T0;
1991 let b_ptr = &b.0 as *const T0;
1992 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
1993 PtrConst::new(a_ptr),
1994 PtrConst::new(b_ptr),
1995 ) {
1996 return false;
1997 }
1998 }
1999
2000 // Compare element 1
2001 unsafe {
2002 let a_ptr = &a.1 as *const T1;
2003 let b_ptr = &b.1 as *const T1;
2004 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
2005 PtrConst::new(a_ptr),
2006 PtrConst::new(b_ptr),
2007 ) {
2008 return false;
2009 }
2010 }
2011
2012 // Compare element 2
2013 unsafe {
2014 let a_ptr = &a.2 as *const T2;
2015 let b_ptr = &b.2 as *const T2;
2016 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
2017 PtrConst::new(a_ptr),
2018 PtrConst::new(b_ptr),
2019 ) {
2020 return false;
2021 }
2022 }
2023
2024 // Compare element 3
2025 unsafe {
2026 let a_ptr = &a.3 as *const T3;
2027 let b_ptr = &b.3 as *const T3;
2028 if !(T3::SHAPE.vtable.eq.unwrap_unchecked())(
2029 PtrConst::new(a_ptr),
2030 PtrConst::new(b_ptr),
2031 ) {
2032 return false;
2033 }
2034 }
2035
2036 // Compare element 4
2037 unsafe {
2038 let a_ptr = &a.4 as *const T4;
2039 let b_ptr = &b.4 as *const T4;
2040 if !(T4::SHAPE.vtable.eq.unwrap_unchecked())(
2041 PtrConst::new(a_ptr),
2042 PtrConst::new(b_ptr),
2043 ) {
2044 return false;
2045 }
2046 }
2047
2048 // Compare element 5
2049 unsafe {
2050 let a_ptr = &a.5 as *const T5;
2051 let b_ptr = &b.5 as *const T5;
2052 if !(T5::SHAPE.vtable.eq.unwrap_unchecked())(
2053 PtrConst::new(a_ptr),
2054 PtrConst::new(b_ptr),
2055 ) {
2056 return false;
2057 }
2058 }
2059
2060 // Compare element 6
2061 unsafe {
2062 let a_ptr = &a.6 as *const T6;
2063 let b_ptr = &b.6 as *const T6;
2064 if !(T6::SHAPE.vtable.eq.unwrap_unchecked())(
2065 PtrConst::new(a_ptr),
2066 PtrConst::new(b_ptr),
2067 ) {
2068 return false;
2069 }
2070 }
2071
2072 // Compare element 7
2073 unsafe {
2074 let a_ptr = &a.7 as *const T7;
2075 let b_ptr = &b.7 as *const T7;
2076 if !(T7::SHAPE.vtable.eq.unwrap_unchecked())(
2077 PtrConst::new(a_ptr),
2078 PtrConst::new(b_ptr),
2079 ) {
2080 return false;
2081 }
2082 }
2083
2084 // Compare element 8
2085 unsafe {
2086 let a_ptr = &a.8 as *const T8;
2087 let b_ptr = &b.8 as *const T8;
2088 if !(T8::SHAPE.vtable.eq.unwrap_unchecked())(
2089 PtrConst::new(a_ptr),
2090 PtrConst::new(b_ptr),
2091 ) {
2092 return false;
2093 }
2094 }
2095
2096 // Compare element 9
2097 unsafe {
2098 let a_ptr = &a.9 as *const T9;
2099 let b_ptr = &b.9 as *const T9;
2100 if !(T9::SHAPE.vtable.eq.unwrap_unchecked())(
2101 PtrConst::new(a_ptr),
2102 PtrConst::new(b_ptr),
2103 ) {
2104 return false;
2105 }
2106 }
2107
2108 // Compare last element
2109 unsafe {
2110 (T10::SHAPE.vtable.eq.unwrap_unchecked())(
2111 PtrConst::new(&a.10 as *const T10),
2112 PtrConst::new(&b.10 as *const T10),
2113 )
2114 }
2115 });
2116 }
2117
2118 builder.build()
2119 },
2120 )
2121 .def(Def::Struct({
2122 Struct::builder()
2123 .tuple()
2124 .fields(
2125 &const {
2126 [
2127 field!(0, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2128 field!(1, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2129 field!(2, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2130 field!(3, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2131 field!(4, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2132 field!(5, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2133 field!(6, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2134 field!(7, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2135 field!(8, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2136 field!(9, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2137 field!(10, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,),),
2138 ]
2139 },
2140 )
2141 .build()
2142 }))
2143 .build()
2144 };
2145}
2146unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Facet
2147 for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
2148where
2149 T0: Facet,
2150 T1: Facet,
2151 T2: Facet,
2152 T3: Facet,
2153 T4: Facet,
2154 T5: Facet,
2155 T6: Facet,
2156 T7: Facet,
2157 T8: Facet,
2158 T9: Facet,
2159 T10: Facet,
2160 T11: Facet,
2161{
2162 const SHAPE: &'static Shape = &const {
2163 fn type_name<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(
2164 f: &mut fmt::Formatter,
2165 opts: TypeNameOpts,
2166 ) -> fmt::Result
2167 where
2168 T0: Facet,
2169 T1: Facet,
2170 T2: Facet,
2171 T3: Facet,
2172 T4: Facet,
2173 T5: Facet,
2174 T6: Facet,
2175 T7: Facet,
2176 T8: Facet,
2177 T9: Facet,
2178 T10: Facet,
2179 T11: Facet,
2180 {
2181 write_type_name_list(
2182 f,
2183 opts,
2184 "(",
2185 ", ",
2186 ")",
2187 &[
2188 T0::SHAPE,
2189 T1::SHAPE,
2190 T2::SHAPE,
2191 T3::SHAPE,
2192 T4::SHAPE,
2193 T5::SHAPE,
2194 T6::SHAPE,
2195 T7::SHAPE,
2196 T8::SHAPE,
2197 T9::SHAPE,
2198 T10::SHAPE,
2199 T11::SHAPE,
2200 ],
2201 )
2202 }
2203
2204 Shape::builder()
2205 .id(ConstTypeId::of::<(
2206 T0,
2207 T1,
2208 T2,
2209 T3,
2210 T4,
2211 T5,
2212 T6,
2213 T7,
2214 T8,
2215 T9,
2216 T10,
2217 T11,
2218 )>())
2219 .layout(Layout::new::<(
2220 T0,
2221 T1,
2222 T2,
2223 T3,
2224 T4,
2225 T5,
2226 T6,
2227 T7,
2228 T8,
2229 T9,
2230 T10,
2231 T11,
2232 )>())
2233 .vtable(
2234 &const {
2235 let mut builder = ValueVTable::builder()
2236 .type_name(type_name::<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>)
2237 .marker_traits({
2238 T0::SHAPE
2239 .vtable
2240 .marker_traits
2241 .intersection(T1::SHAPE.vtable.marker_traits)
2242 .intersection(T2::SHAPE.vtable.marker_traits)
2243 .intersection(T3::SHAPE.vtable.marker_traits)
2244 .intersection(T4::SHAPE.vtable.marker_traits)
2245 .intersection(T5::SHAPE.vtable.marker_traits)
2246 .intersection(T6::SHAPE.vtable.marker_traits)
2247 .intersection(T7::SHAPE.vtable.marker_traits)
2248 .intersection(T8::SHAPE.vtable.marker_traits)
2249 .intersection(T9::SHAPE.vtable.marker_traits)
2250 .intersection(T10::SHAPE.vtable.marker_traits)
2251 .intersection(T11::SHAPE.vtable.marker_traits)
2252 });
2253
2254 if Characteristic::Eq.all(&[
2255 T0::SHAPE,
2256 T1::SHAPE,
2257 T2::SHAPE,
2258 T3::SHAPE,
2259 T4::SHAPE,
2260 T5::SHAPE,
2261 T6::SHAPE,
2262 T7::SHAPE,
2263 T8::SHAPE,
2264 T9::SHAPE,
2265 T10::SHAPE,
2266 T11::SHAPE,
2267 ]) {
2268 builder = builder.debug(|value, f| {
2269 let value = unsafe {
2270 value.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)>()
2271 };
2272 write!(f, "(")?;
2273 unsafe {
2274 let ptr = &value.0 as *const T0;
2275 (T0::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2276 }?;
2277 write!(f, ", ")?;
2278 unsafe {
2279 let ptr = &value.1 as *const T1;
2280 (T1::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2281 }?;
2282 write!(f, ", ")?;
2283 unsafe {
2284 let ptr = &value.2 as *const T2;
2285 (T2::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2286 }?;
2287 write!(f, ", ")?;
2288 unsafe {
2289 let ptr = &value.3 as *const T3;
2290 (T3::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2291 }?;
2292 write!(f, ", ")?;
2293 unsafe {
2294 let ptr = &value.4 as *const T4;
2295 (T4::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2296 }?;
2297 write!(f, ", ")?;
2298 unsafe {
2299 let ptr = &value.5 as *const T5;
2300 (T5::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2301 }?;
2302 write!(f, ", ")?;
2303 unsafe {
2304 let ptr = &value.6 as *const T6;
2305 (T6::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2306 }?;
2307 write!(f, ", ")?;
2308 unsafe {
2309 let ptr = &value.7 as *const T7;
2310 (T7::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2311 }?;
2312 write!(f, ", ")?;
2313 unsafe {
2314 let ptr = &value.8 as *const T8;
2315 (T8::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2316 }?;
2317 write!(f, ", ")?;
2318 unsafe {
2319 let ptr = &value.9 as *const T9;
2320 (T9::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2321 }?;
2322 write!(f, ", ")?;
2323 unsafe {
2324 let ptr = &value.10 as *const T10;
2325 (T10::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2326 }?;
2327 write!(f, ", ")?;
2328 unsafe {
2329 let ptr = &value.11 as *const T11;
2330 (T11::SHAPE.vtable.debug.unwrap_unchecked())(PtrConst::new(ptr), f)
2331 }?;
2332 write!(f, ")")
2333 });
2334
2335 builder = builder.eq(|a, b| {
2336 let a = unsafe {
2337 a.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)>()
2338 };
2339 let b = unsafe {
2340 b.get::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)>()
2341 };
2342
2343 // Compare element 0
2344 unsafe {
2345 let a_ptr = &a.0 as *const T0;
2346 let b_ptr = &b.0 as *const T0;
2347 if !(T0::SHAPE.vtable.eq.unwrap_unchecked())(
2348 PtrConst::new(a_ptr),
2349 PtrConst::new(b_ptr),
2350 ) {
2351 return false;
2352 }
2353 }
2354
2355 // Compare element 1
2356 unsafe {
2357 let a_ptr = &a.1 as *const T1;
2358 let b_ptr = &b.1 as *const T1;
2359 if !(T1::SHAPE.vtable.eq.unwrap_unchecked())(
2360 PtrConst::new(a_ptr),
2361 PtrConst::new(b_ptr),
2362 ) {
2363 return false;
2364 }
2365 }
2366
2367 // Compare element 2
2368 unsafe {
2369 let a_ptr = &a.2 as *const T2;
2370 let b_ptr = &b.2 as *const T2;
2371 if !(T2::SHAPE.vtable.eq.unwrap_unchecked())(
2372 PtrConst::new(a_ptr),
2373 PtrConst::new(b_ptr),
2374 ) {
2375 return false;
2376 }
2377 }
2378
2379 // Compare element 3
2380 unsafe {
2381 let a_ptr = &a.3 as *const T3;
2382 let b_ptr = &b.3 as *const T3;
2383 if !(T3::SHAPE.vtable.eq.unwrap_unchecked())(
2384 PtrConst::new(a_ptr),
2385 PtrConst::new(b_ptr),
2386 ) {
2387 return false;
2388 }
2389 }
2390
2391 // Compare element 4
2392 unsafe {
2393 let a_ptr = &a.4 as *const T4;
2394 let b_ptr = &b.4 as *const T4;
2395 if !(T4::SHAPE.vtable.eq.unwrap_unchecked())(
2396 PtrConst::new(a_ptr),
2397 PtrConst::new(b_ptr),
2398 ) {
2399 return false;
2400 }
2401 }
2402
2403 // Compare element 5
2404 unsafe {
2405 let a_ptr = &a.5 as *const T5;
2406 let b_ptr = &b.5 as *const T5;
2407 if !(T5::SHAPE.vtable.eq.unwrap_unchecked())(
2408 PtrConst::new(a_ptr),
2409 PtrConst::new(b_ptr),
2410 ) {
2411 return false;
2412 }
2413 }
2414
2415 // Compare element 6
2416 unsafe {
2417 let a_ptr = &a.6 as *const T6;
2418 let b_ptr = &b.6 as *const T6;
2419 if !(T6::SHAPE.vtable.eq.unwrap_unchecked())(
2420 PtrConst::new(a_ptr),
2421 PtrConst::new(b_ptr),
2422 ) {
2423 return false;
2424 }
2425 }
2426
2427 // Compare element 7
2428 unsafe {
2429 let a_ptr = &a.7 as *const T7;
2430 let b_ptr = &b.7 as *const T7;
2431 if !(T7::SHAPE.vtable.eq.unwrap_unchecked())(
2432 PtrConst::new(a_ptr),
2433 PtrConst::new(b_ptr),
2434 ) {
2435 return false;
2436 }
2437 }
2438
2439 // Compare element 8
2440 unsafe {
2441 let a_ptr = &a.8 as *const T8;
2442 let b_ptr = &b.8 as *const T8;
2443 if !(T8::SHAPE.vtable.eq.unwrap_unchecked())(
2444 PtrConst::new(a_ptr),
2445 PtrConst::new(b_ptr),
2446 ) {
2447 return false;
2448 }
2449 }
2450
2451 // Compare element 9
2452 unsafe {
2453 let a_ptr = &a.9 as *const T9;
2454 let b_ptr = &b.9 as *const T9;
2455 if !(T9::SHAPE.vtable.eq.unwrap_unchecked())(
2456 PtrConst::new(a_ptr),
2457 PtrConst::new(b_ptr),
2458 ) {
2459 return false;
2460 }
2461 }
2462
2463 // Compare element 10
2464 unsafe {
2465 let a_ptr = &a.10 as *const T10;
2466 let b_ptr = &b.10 as *const T10;
2467 if !(T10::SHAPE.vtable.eq.unwrap_unchecked())(
2468 PtrConst::new(a_ptr),
2469 PtrConst::new(b_ptr),
2470 ) {
2471 return false;
2472 }
2473 }
2474
2475 // Compare last element
2476 unsafe {
2477 (T11::SHAPE.vtable.eq.unwrap_unchecked())(
2478 PtrConst::new(&a.11 as *const T11),
2479 PtrConst::new(&b.11 as *const T11),
2480 )
2481 }
2482 });
2483 }
2484
2485 builder.build()
2486 },
2487 )
2488 .def(Def::Struct({
2489 Struct::builder()
2490 .tuple()
2491 .fields(
2492 &const {
2493 [
2494 field!(0, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2495 field!(1, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2496 field!(2, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2497 field!(3, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2498 field!(4, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2499 field!(5, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2500 field!(6, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2501 field!(7, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2502 field!(8, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2503 field!(9, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2504 field!(10, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2505 field!(11, (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,),),
2506 ]
2507 },
2508 )
2509 .build()
2510 }))
2511 .build()
2512 };
2513}