• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

facet-rs / facet / 14546339941

19 Apr 2025 06:02AM UTC coverage: 43.858% (+0.2%) from 43.653%
14546339941

Pull #301

github

web-flow
Merge 7525b4cce into 4c26162f7
Pull Request #301: feat(json) Better error messages when a field is missing

20 of 41 new or added lines in 3 files covered. (48.78%)

1 existing line in 1 file now uncovered.

4813 of 10974 relevant lines covered (43.86%)

49.52 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/facet-core/src/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

4
use core::{alloc::Layout, fmt};
5

6
use crate::{
7
    Characteristic, ConstTypeId, Def, Facet, Field, FieldFlags, PtrConst, Shape, Struct,
8
    TypeNameOpts, ValueVTable,
9
};
10

11
#[inline(always)]
12
pub 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

35
macro_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

46
unsafe impl<T0> Facet for (T0,)
47
where
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
}
104
unsafe impl<T0, T1> Facet for (T0, T1)
105
where
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
}
186
unsafe impl<T0, T1, T2> Facet for (T0, T1, T2)
187
where
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
}
296
unsafe impl<T0, T1, T2, T3> Facet for (T0, T1, T2, T3)
297
where
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
}
434
unsafe impl<T0, T1, T2, T3, T4> Facet for (T0, T1, T2, T3, T4)
435
where
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
}
599
unsafe impl<T0, T1, T2, T3, T4, T5> Facet for (T0, T1, T2, T3, T4, T5)
600
where
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
}
796
unsafe impl<T0, T1, T2, T3, T4, T5, T6> Facet for (T0, T1, T2, T3, T4, T5, T6)
797
where
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
}
1016
unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7> Facet for (T0, T1, T2, T3, T4, T5, T6, T7)
1017
where
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
}
1259
unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> Facet for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
1260
where
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
}
1526
unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> Facet
1527
    for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
1528
where
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
}
1817
unsafe 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)
1819
where
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
}
2146
unsafe 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)
2148
where
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
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc