1#[derive(Debug, Default)]
4#[cfg_attr(feature = "derive", derive(darling::FromMeta))]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub struct TestArguments {
7 #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "Option::is_none"))]
9 pub module: Option<String>,
10 #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "Option::is_none"))]
13 pub group: Option<String>,
14 #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "Option::is_none"))]
15 pub cost: Option<u32>,
16 #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "Option::is_none"))]
17 pub responsible: Option<String>,
18 #[cfg_attr(feature = "derive", darling(default))]
22 #[cfg_attr(feature = "serde", serde(default, skip_serializing_if = "std::ops::Not::not"))]
23 pub optional: bool,
24}
25
26#[cfg(feature = "derive")]
27impl quote::ToTokens for TestArguments {
28 fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
29 use quote::quote;
30
31 let module = match self.module.clone() {
32 Some(val) => quote!(Some( #val.to_string() )),
33 None => quote!(None),
34 };
35 let group = match self.group.clone() {
36 Some(val) => quote!(Some( #val.to_string() )),
37 None => quote!(None),
38 };
39 let cost = match self.cost {
40 Some(val) => quote!(Some( #val )),
41 None => quote!(None),
42 };
43 let responsible = match self.responsible.clone() {
44 Some(val) => quote!(Some( #val.to_string() )),
45 None => quote!(None),
46 };
47 let optional = self.optional;
48 let optional = quote!( #optional );
49
50 tokens.extend(quote!(TestArguments{
51 module: #module,
52 group: #group,
53 cost: #cost,
54 responsible: #responsible,
55 optional: #optional,
56 }));
57 }
58}