argley_macro 1.3.0

Macro for the `argley` crate
Documentation
use std::fmt::Display;

use delegate_display::DelegateDisplay;
use proc_macro2::{Ident, Literal, Span, TokenStream};
use quote::ToTokens;

#[derive(DelegateDisplay)]
pub enum FieldIdent {
    Ident(Ident),
    Idx(usize),
}

impl FieldIdent {
    pub fn with_prefix(&self, prefix: impl Display) -> Self {
        Self::Ident(Ident::new(&format!("{prefix}{self}"), Span::call_site()))
    }
}

impl ToTokens for FieldIdent {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        match self {
            Self::Ident(i) => i.to_tokens(tokens),
            Self::Idx(i) => Literal::usize_unsuffixed(*i).to_tokens(tokens),
        }
    }
}