proc-macro-assertions 0.1.5

Easily create asserts on proc macro inputs
Documentation
use proc_macro2::Span;
use syn::Ident;
use uuid::Uuid;

use super::IdentGenerator;

#[derive(Debug, Default, Clone)]
pub struct UUIDIdentGenerator;

/// A stateless ident generator which works by generating v4 uuids.
impl UUIDIdentGenerator {
    /// Create a new uuid ident generator
    #[allow(dead_code)]
    pub fn new() -> Self {
        Default::default()
    }
}

impl IdentGenerator for UUIDIdentGenerator {
    fn generate(&mut self, prefix: Option<&'static str>, span: Span) -> Ident {
        let uuid = Uuid::new_v4();
        let mut encode_buffer = Uuid::encode_buffer();
        let uuid_str = uuid.as_hyphenated().encode_lower(&mut encode_buffer);

        if let Some(ident) = prefix {
            Ident::new(format!("U_{ident}_{uuid_str}").as_str(), span)
        } else {
            Ident::new(format!("U_{uuid_str}").as_str(), span)
        }
    }
}