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
#[macro_export]
macro_rules! simple_service_provider {
(
name = $name:ident;
product = $product:expr;
language = $lang:expr;
($path:ident, $input:ident) => $body:block
) => {
pub struct $name;
impl $crate::service::ServiceProvider for $name {
fn descriptor(&self) -> $crate::common::messages::ProductDescriptor {
let name = $product.parse().expect("Invalid product name from macro");
let language = $lang.to_owned().into();
$crate::common::messages::ProductDescriptor { name, language }
}
fn service(&mut self, $path: &str, $input: ::std::vec::Vec<$crate::common::messages::Product>) -> (::std::result::Result<$crate::Value, ::std::vec::Vec<$crate::service::messages::ServiceError>>, ::std::vec::Vec<$crate::service::messages::ServiceNotice>) $body
}
}
}