use proc_macro2::{Ident, Punct, Spacing, Span};
use sealed::sealed;
use std::fmt::Display;
use syn::Error;
#[sealed]
pub trait MacroificCoreIdentExt {
fn create(name: &str) -> Self;
}
#[sealed]
pub trait MacroificCorePunctExt {
fn new_alone(ch: char) -> Self;
fn new_joint(ch: char) -> Self;
}
#[sealed]
pub trait MacroificCoreErrorExt {
fn call_site<T: Display>(msg: T) -> Self;
}
#[sealed]
impl MacroificCorePunctExt for Punct {
#[inline]
fn new_alone(ch: char) -> Self {
Self::new(ch, Spacing::Alone)
}
#[inline]
fn new_joint(ch: char) -> Self {
Self::new(ch, Spacing::Joint)
}
}
#[sealed]
impl MacroificCoreIdentExt for Ident {
#[inline]
fn create(name: &str) -> Self {
Self::new(name, Span::call_site())
}
}
#[sealed]
impl MacroificCoreErrorExt for Error {
fn call_site<T: Display>(msg: T) -> Self {
Self::new(Span::call_site(), msg)
}
}