1#[macro_export]
2macro_rules! try_observers {
3 ($self:ident, $flag:ident, $method:ident ( $($arg:expr),* )) => {{
4 use $crate::Interests;
5 if !$self.global_mask.intersects(Interests::$flag) {
6 Ok(())
7 } else {
8 ($self.observers.iter().zip($self.observer_masks.iter()))
9 .try_for_each(|(obs, &mask)| {
10 if mask.intersects(Interests::$flag) {
11 obs.borrow_mut().$method($($arg),*)
12 } else {
13 Ok(())
14 }
15 })
16 }
17 }};
18}
19#[macro_export]
27macro_rules! property {
28 ($ent:expr, $ty:ty, $fmt:literal, $($arg:tt)*) => {
29 {
30 let x: $ty = $ent.get_property_by_name(&format!($fmt, $($arg)*))?.try_into()?;
31 x
32 }
33 };
34 ($ent:expr, $ty:ty, $fmt:literal) => {
35 {
36 let x: $ty = $ent.get_property_by_name(&format!($fmt))?.try_into()?;
37 x
38 }
39 };
40 ($ent:expr, $fmt:expr, $($arg:tt)*) => {
41 $ent.get_property_by_name(&format!($fmt, $($arg)*))?.try_into()?
42 };
43 ($ent:expr, $fmt:expr) => {{
44 $ent.get_property_by_name(&format!($fmt))?.try_into()?
45 }};
46}
47
48#[macro_export]
57macro_rules! try_property {
58 ($ent:expr, $ty:ty, $fmt:expr, $($arg:tt)*) => {
59 {
60 let x: Option<$ty> = $ent
61 .get_property_by_name(&format!($fmt, $($arg)*))
62 .ok()
63 .and_then(|x| {
64 x.try_into().ok()
65 });
66 x
67 }
68 };
69
70 ($ent:expr, $ty:ty, $fmt:expr) => {
71 {
72 let x: Option<$ty> = $ent
73 .get_property_by_name(&format!($fmt))
74 .ok()
75 .and_then(|x| {
76 x.try_into().ok()
77 });
78 x
79 }
80 };
81
82 ($ent:expr, $fmt:expr, $($arg:tt)*) => {
83 $ent
84 .get_property_by_name(&format!($fmt, $($arg)*))
85 .ok()
86 .and_then(|x| {
87 x.try_into().ok()
88 })
89 };
90
91 ($ent:expr, $fmt:expr) => {{
92 $ent
93 .get_property_by_name(&format!($fmt))
94 .ok()
95 .and_then(|x| {
96 x.try_into().ok()
97 })
98 }};
99}