use proc_macro2::TokenStream as TokenStream2;
use crate::parser::command_spec::{Identifier, Namespace, Variant};
impl Variant {
pub fn to_c_path(&self) -> TokenStream2 {
fn mangle_namespace_name(vec: &Vec<Identifier>) -> Vec<Identifier> {
vec.into_iter()
.map(|ident| {
if "<root>" == &ident.name && ident.variant == Variant::RootNamespace {
ident.clone()
} else {
Identifier {
name: ident.to_c().to_string(),
variant: ident.variant.clone(),
}
}
})
.collect()
}
let main_namespace;
match self {
Variant::Structure { namespace }
| Variant::Enumeration { namespace }
| Variant::Result { namespace }
| Variant::Option { namespace }
| Variant::Vec { namespace } => {
main_namespace = mangle_namespace_name(namespace);
}
other => unreachable!("This should never be called on '{:#?}'", other),
}
Namespace::to_rust_path_owned(&main_namespace[..])
}
}