use proc_macro2::TokenStream as TokenStream2;
use quote::{format_ident, quote, ToTokens};
use crate::parser::command_spec::Identifier;
impl Identifier {
pub fn to_c_with_path(&self, namespaces: &[&Identifier]) -> TokenStream2 {
let namespace_str = namespaces.iter().fold(String::default(), |acc, nasp| {
if acc.is_empty() {
nasp.name.clone()
} else {
format!("{}_{}", acc, nasp.name)
}
});
if namespace_str.is_empty() {
format_ident!("{}", self.name).to_token_stream()
} else {
format_ident!("{}_{}", namespace_str, self.name).to_token_stream()
}
}
pub fn to_c(&self) -> TokenStream2 {
format_ident!("{}_c", self.name).to_token_stream()
}
pub fn to_c_paired(&self) -> TokenStream2 {
let path = &self.variant.to_c_path();
let ident = &self.to_c();
if path.is_empty() {
quote! {
crate :: #ident
}
} else {
quote! {
#path :: #ident
}
}
}
}