1 | use super::*; |
2 | |
3 | pub struct DeriveWriter(BTreeSet<String>); |
4 | |
5 | impl DeriveWriter { |
6 | pub fn new(writer: &Writer, type_name: TypeName) -> Self { |
7 | let mut derive: BTreeSet = BTreeSet::new(); |
8 | derive.extend(iter:writer.config.derive.get(type_name)); |
9 | Self(derive) |
10 | } |
11 | |
12 | pub fn extend<I, S>(&mut self, iter: I) |
13 | where |
14 | I: IntoIterator<Item = S>, |
15 | S: AsRef<str> + ToString, |
16 | { |
17 | self.0.extend(iter.into_iter().map(|s: S| s.to_string())); |
18 | } |
19 | } |
20 | |
21 | impl ToTokens for DeriveWriter { |
22 | fn to_tokens(&self, tokens: &mut TokenStream) { |
23 | if !self.0.is_empty() { |
24 | let derive: impl Iterator = self.0.iter().map(|derive: &String| to_ident(name:derive)); |
25 | tokens.combine(quote! { |
26 | #[derive(#(#derive),*)] |
27 | }) |
28 | } |
29 | } |
30 | } |
31 | |