structural/field/multi_fields/
single_field_path.rs1use crate::{
2 field::{
3 NormalizeFields, RevFieldErrOut as RGFE, RevGetFieldImpl, RevGetFieldMutImpl,
4 RevGetFieldType as RGFT, RevGetMultiFieldImpl, RevGetMultiFieldMutImpl, RevIntoFieldImpl,
5 RevIntoMultiFieldImpl,
6 },
7 NestedFieldPath, TStr, VariantField, VariantName,
8};
9
10macro_rules! delegate_multi_field_traits {
11 ( impl[$($impl_params:tt)*] $type:ty ) => {
12 impl<'a,This, $($impl_params)*> RevGetMultiFieldImpl<'a, This> for $type
13 where
14 Self: RevGetFieldImpl<'a, This>,
15 This: 'a + ?Sized,
16 RGFT<Self,This>:'a,
17 Result<&'a RGFT<Self,This>,RGFE<Self,This>>:
18 'a + NormalizeFields,
19 {
20 type UnnormFields = (Result<&'a RGFT<Self,This>,RGFE<Self,This>>,);
21
22 #[inline(always)]
23 fn rev_get_multi_field_impl(
24 self,
25 this: &'a This,
26 ) -> (Result<&'a RGFT<Self,This>,RGFE<Self,This>>,){
27 (self.rev_get_field(this),)
28 }
29 }
30
31 unsafe impl<'a, This, $($impl_params)*> RevGetMultiFieldMutImpl<'a, This> for $type
32 where
33 Self: RevGetFieldMutImpl<'a, This>,
34 This: 'a + ?Sized,
35 RGFT<Self,This>:'a,
36 Result<&'a mut RGFT<Self,This>,RGFE<Self,This>>: NormalizeFields,
37 Result<*mut RGFT<Self,This>,RGFE<Self,This>>: NormalizeFields,
38 {
39 type UnnormFieldsMut = (Result<&'a mut RGFT<Self,This>,RGFE<Self,This>>,);
40 type UnnormFieldsRawMut = (Result<*mut RGFT<Self,This>,RGFE<Self,This>>,);
41
42 #[inline(always)]
43 fn rev_get_multi_field_mut_impl(
44 self,
45 this: &'a mut This,
46 ) -> (Result<&'a mut RGFT<Self,This>,RGFE<Self,This>>,) {
47 (self.rev_get_field_mut(this),)
48 }
49
50 #[inline(always)]
51 unsafe fn rev_get_multi_field_raw_mut_impl(
52 self,
53 this: *mut This,
54 ) -> (Result<*mut RGFT<Self,This>,RGFE<Self,This>>,) {
55 (self.rev_get_field_raw_mut(this),)
56 }
57 }
58
59 impl<This, $($impl_params)*> RevIntoMultiFieldImpl<This> for $type
60 where
61 Self: RevIntoFieldImpl<This>,
62 RGFT<Self,This>: Sized,
63 Result<RGFT<Self,This>,RGFE<Self,This>>: NormalizeFields,
64 {
65 type UnnormIntoFields= (Result<RGFT<Self,This>,RGFE<Self,This>>,);
66
67 fn rev_into_multi_field_impl(
68 self,
69 this: This,
70 ) -> (Result<RGFT<Self,This>,RGFE<Self,This>>,) {
71 (self.rev_into_field(this),)
72 }
73
74 }
75
76 };
77}
78
79delegate_multi_field_traits! {
80 impl[T] TStr<T>
81}
82
83delegate_multi_field_traits! {
84 impl[T] NestedFieldPath<T>
85}
86
87delegate_multi_field_traits! {
88 impl[V,F] VariantField<V,F>
89}
90
91delegate_multi_field_traits! {
92 impl[T] VariantName<T>
93}