1#[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 }