1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#[macro_export]
macro_rules! handlebars_helper {
($struct_name:ident: |$($name:ident: $tpe:tt),*| $body:expr ) => {
#[allow(non_camel_case_types)]
pub struct $struct_name;
impl $crate::HelperDef for $struct_name {
#[allow(unused_assignments)]
fn call_inner<'reg: 'rc, 'rc>(
&self,
h: &$crate::Helper<'reg, 'rc>,
_: &'reg $crate::Handlebars<'reg>,
_: &'rc $crate::Context,
_: &mut $crate::RenderContext<'reg, 'rc>,
) -> Result<Option<$crate::ScopedJson<'reg, 'rc>>, $crate::RenderError> {
let mut param_idx = 0;
$(
let $name = h.param(param_idx)
.map(|x| x.value())
.ok_or_else(|| $crate::RenderError::new(&format!(
"`{}` helper: Couldn't read parameter {}",
stringify!($fn_name), stringify!($name),
)))
.and_then(|x|
handlebars_helper!(@as_json_value x, $tpe)
.ok_or_else(|| $crate::RenderError::new(&format!(
"`{}` helper: Couldn't convert parameter {} to type `{}`. \
It's {:?} as JSON. Got these params: {:?}",
stringify!($fn_name), stringify!($name), stringify!($tpe),
x, h.params(),
)))
)?;
param_idx += 1;
)*
let result = $body;
Ok(Some($crate::ScopedJson::Derived($crate::JsonValue::from(result))))
}
}
};
(@as_json_value $x:ident, object) => { $x.as_object() };
(@as_json_value $x:ident, array) => { $x.as_array() };
(@as_json_value $x:ident, str) => { $x.as_str() };
(@as_json_value $x:ident, i64) => { $x.as_i64() };
(@as_json_value $x:ident, u64) => { $x.as_u64() };
(@as_json_value $x:ident, f64) => { $x.as_f64() };
(@as_json_value $x:ident, bool) => { $x.as_bool() };
(@as_json_value $x:ident, null) => { $x.as_null() };
(@as_json_value $x:ident, Json) => { Some($x) };
}
#[cfg(feature = "no_logging")]
#[macro_export]
macro_rules! debug {
(target: $target:expr, $($arg:tt)*) => {};
($($arg:tt)*) => {};
}
#[cfg(feature = "no_logging")]
#[macro_export]
macro_rules! error {
(target: $target:expr, $($arg:tt)*) => {};
($($arg:tt)*) => {};
}
#[cfg(feature = "no_logging")]
#[macro_export]
macro_rules! info {
(target: $target:expr, $($arg:tt)*) => {};
($($arg:tt)*) => {};
}
#[cfg(feature = "no_logging")]
#[macro_export]
macro_rules! log {
(target: $target:expr, $($arg:tt)*) => {};
($($arg:tt)*) => {};
}
#[cfg(feature = "no_logging")]
#[macro_export]
macro_rules! trace {
(target: $target:expr, $($arg:tt)*) => {};
($($arg:tt)*) => {};
}
#[cfg(feature = "no_logging")]
#[macro_export]
macro_rules! warn {
(target: $target:expr, $($arg:tt)*) => {};
($($arg:tt)*) => {};
}