1use super::*;
2
3pub struct DeriveWriter(BTreeSet<String>);
4
5impl 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
21impl 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