telety_impl/alias/
module.rs

1use quote::{format_ident, quote};
2use syn::spanned::Spanned as _;
3
4#[derive(Debug)]
5pub struct Module {
6    visibility: syn::Visibility,
7    ident: syn::Ident,
8}
9
10impl Module {
11    pub fn from_named_item(item: &syn::Item) -> syn::Result<Self> {
12        let (visibility, ident) = match item {
13            syn::Item::Enum(item_enum) => (&item_enum.vis, &item_enum.ident),
14            syn::Item::Struct(item_struct) => (&item_struct.vis, &item_struct.ident),
15            syn::Item::Union(item_union) => (&item_union.vis, &item_union.ident),
16            syn::Item::Trait(item_trait) => (&item_trait.vis, &item_trait.ident),
17            _ => {
18                return Err(syn::Error::new(
19                    item.span(),
20                    "Only enums, structs, unions, and traits are currently supported",
21                ));
22            }
23        };
24
25        let visibility = visibility.clone();
26        let ident = format_ident!("__telety_alias_map_{ident}");
27        Ok(Self { visibility, ident })
28    }
29
30    pub fn visibility(&self) -> &syn::Visibility {
31        &self.visibility
32    }
33
34    pub fn ident(&self) -> &syn::Ident {
35        &self.ident
36    }
37
38    pub fn new_child(&self, suffix: &str) -> Self {
39        let Self { visibility, ident } = self;
40        let visibility = visibility.clone();
41        let ident = format_ident!("{ident}__{suffix}");
42
43        Self { visibility, ident }
44    }
45
46    pub fn with_contents<C: quote::ToTokens>(&self, contents: &C) -> impl quote::ToTokens + use<C> {
47        let Self { visibility, ident } = self;
48
49        quote! {
50            #[doc(hidden)]
51            #[allow(dead_code)]
52            #[allow(unused_macros)]
53            #[allow(unused_imports)]
54            #[allow(non_snake_case)]
55            #[allow(non_camel_case_types)]
56            #[allow(non_local_definitions)]
57            #visibility mod #ident {
58                #contents
59            }
60        }
61    }
62}