blanket/derive/
mod.rs

1mod arc;
2mod r#box;
3mod r#mut;
4mod rc;
5mod r#ref;
6
7#[derive(Debug, PartialEq, Eq, Hash)]
8pub enum Derive {
9    Box,
10    Ref,
11    Mut,
12    Rc,
13    Arc,
14}
15
16impl Derive {
17    pub fn from_str(s: &str) -> Option<Self> {
18        match s {
19            "Box" => Some(Derive::Box),
20            "Ref" => Some(Derive::Ref),
21            "Mut" => Some(Derive::Mut),
22            "Rc" => Some(Derive::Rc),
23            "Arc" => Some(Derive::Arc),
24            _ => None,
25        }
26    }
27
28    pub fn from_path(p: &syn::Path) -> Option<Self> {
29        p.segments
30            .first()
31            .and_then(|s| Self::from_str(&s.ident.to_string()))
32    }
33
34    pub fn defer_trait_methods(&self, trait_: &syn::ItemTrait) -> syn::Result<syn::ItemImpl> {
35        match self {
36            Derive::Box => self::r#box::derive(trait_),
37            Derive::Ref => self::r#ref::derive(trait_),
38            Derive::Mut => self::r#mut::derive(trait_),
39            Derive::Rc => self::rc::derive(trait_),
40            Derive::Arc => self::arc::derive(trait_),
41        }
42    }
43}