structural/field/multi_fields/
single_field_path.rs

1use 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}