use std::fmt; use std::fmt::Formatter; use crate::gen::rust::ident::RustIdent; use crate::gen::rust::keywords::parse_rust_keyword; #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub(crate) enum RustPathComponent { Ident(RustIdent), Keyword(&'static str), } impl fmt::Display for RustPathComponent { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { match self { RustPathComponent::Ident(ident) => write!(f, "{}", ident), RustPathComponent::Keyword(keyword) => write!(f, "{}", keyword), } } } impl RustPathComponent { pub(crate) const SUPER: RustPathComponent = RustPathComponent::Keyword("super"); pub(crate) fn parse(s: &str) -> RustPathComponent { if s.starts_with("r#") { RustPathComponent::Ident(RustIdent::new(&s[2..])) } else if let Some(kw) = parse_rust_keyword(s) { RustPathComponent::Keyword(kw) } else { RustPathComponent::Ident(RustIdent::new(s)) } } }