proc_macro_assertions/ident_generator/
mod.rs

1#[cfg(feature = "uuid_ident_gen")]
2mod uuid;
3
4#[cfg(feature = "uuid_ident_gen")]
5pub use self::uuid::UUIDIdentGenerator;
6
7#[cfg(any(test, feature = "mock_ident_gen"))]
8mod mock;
9
10#[cfg(any(test, feature = "mock_ident_gen"))]
11#[allow(clippy::module_name_repetitions)]
12pub use mock::MockIdentGenerator;
13
14mod counting;
15#[allow(clippy::module_name_repetitions)]
16pub use counting::CountingIdentGenerator;
17
18use proc_macro2::Span;
19use syn::Ident;
20
21/// Some type that can generate unique idents, used to avoid collisions between multiple
22/// types that are generated.
23pub trait IdentGenerator {
24    /// Convenience method to create some prefixed ident.
25    #[must_use]
26    fn prefixed(&mut self, prefix: &'static str) -> Ident {
27        self.generate(Some(prefix), Span::call_site())
28    }
29
30    /// Convenience method to generate just any ident.
31    #[must_use]
32    fn ident(&mut self) -> Ident {
33        self.generate(None, Span::call_site())
34    }
35
36    /// Convenience method to generate just any ident with a specific [`Span`].
37    #[must_use]
38    fn spanned(&mut self, span: Span) -> Ident {
39        self.generate(None, span)
40    }
41
42    /// Main method which actually implements the generation.
43    #[must_use]
44    fn generate(&mut self, prefix: Option<&'static str>, span: Span) -> Ident;
45}