ruva_core/
macros.rs

1// To Support Bulk Insert Operation
2#[macro_export]
3macro_rules! prepare_bulk_operation {
4    (
5        $subject:expr, $($field:ident:$field_type:ty),*
6    ) => {
7        $(
8            let mut $field:Vec<$field_type> = Vec::with_capacity($subject.len());
9        )*
10
11        $subject.iter().for_each(|subj|{
12            $(
13                $field.push(subj.$field.clone());
14            )*
15        }
16        )
17
18    };
19    (
20        $subject:expr, $($field:ident():$field_type:ty),*
21    ) =>{
22        $(
23            let mut $field:Vec<$field_type> = Vec::with_capacity($subject.len());
24        )*
25
26        $subject.iter().for_each(|subj|{
27            $(
28                $field.push(subj.$field().to_owned());
29            )*
30        }
31        )
32    }
33}
34
35#[macro_export]
36macro_rules! make_smart_pointer {
37    ($name:ident $(<$($gens:ident),*>)?, $inner:ty) => {
38        impl$(<$($gens),*>)? std::ops::Deref for $name$(<$($gens),*>)? {
39            type Target = $inner;
40            fn deref(&self) -> &Self::Target {
41                &self.0
42            }
43        }
44        impl$(<$($gens),*>)? std::ops::DerefMut for $name$(<$($gens),*>)? {
45            fn deref_mut(&mut self) -> &mut Self::Target {
46                &mut self.0
47            }
48        }
49    };
50
51    ($name:ident $(<$($gens:ident),*>)?, $inner:ty, $identifier:ident)=>{
52        impl$(<$($gens),*>)? std::ops::Deref for $name$(<$($gens),*>)? {
53            type Target = $inner;
54            fn deref(&self) -> &Self::Target {
55                &self.$identifier
56            }
57        }
58        impl$(<$($gens),*>)? std::ops::DerefMut for $name$(<$($gens),*>)? {
59            fn deref_mut(&mut self) -> &mut Self::Target {
60                &mut self.$identifier
61            }
62        }
63    }
64
65}
66
67#[macro_export]
68macro_rules! make_conversion {
69	($type_name:ident, $($target:ty),*) => {
70        $(
71            impl ::core::convert::From<$target> for $type_name {
72                fn from(value: $target) -> $type_name {
73                    $type_name(value.into())
74                }
75            }
76        )*
77    };
78	($type_name:ident<$target:ty>) => {
79		impl ::core::convert::From<$target> for $type_name<$target> {
80			fn from(value: $target) -> $type_name<$target> {
81				$type_name(value.into())
82			}
83		}
84    };
85}
86
87#[macro_export]
88macro_rules! error {
89
90		(
91
92		) => {
93			|err| {
94                ::ruva::tracing::error!("{:?} {}:{}", err, file!(),line!()); err
95            }
96		};
97        (
98            $stmt:expr
99
100            $(, $arg:expr)* $(,)?
101
102        ) => {
103            ::ruva::tracing::error!("{} {}:{}", format!($stmt, $($arg),*),file!(),line!())
104        };
105	}