#![allow(uncommon_codepoints)]
pub use facet_macro_types::*;
mod parsed;
pub use parsed::*;
mod generic_params;
pub use generic_params::*;
mod unescaping;
pub use unescaping::*;
pub enum PType {
Struct(PStruct),
Enum(PEnum),
}
impl PType {
pub const fn name(&self) -> &Ident {
match self {
PType::Struct(s) => &s.container.name,
PType::Enum(e) => &e.container.name,
}
}
}
pub fn parse_type(tokens: TokenStream) -> std::result::Result<PType, String> {
let mut iter = tokens.to_token_iter();
match iter.parse::<AdtDecl>() {
Ok(AdtDecl::Struct(s)) => Ok(PType::Struct(PStruct::parse(&s))),
Ok(AdtDecl::Enum(e)) => Ok(PType::Enum(PEnum::parse(&e))),
Err(e) => Err(format!("failed to parse type: {e}")),
}
}