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}