Parses mangled names and produces structured results.
Example:
```rust use astdemangle::rustv0::display::Style; use astdemangle::rustv0::{Identifier, Path, Symbol};
let mangledname = "RNvNtCs6GSVXm7oiwY5regex4utf811decodeutf8.llvm.1119170478327948870"; let (symbol, suffix) = Symbol::parsefromstr(mangled_name).unwrap();
// The suffix is returned. assert_eq!(suffix, ".llvm.1119170478327948870");
// The default style for displaying is the long format. asserteq!(format!("{}", symbol), "regex[4df147058689a776]::utf8::decodeutf8");
// To omit the crate hash, use the alternate display format. asserteq!(format!("{:#}", symbol), "regex::utf8::decodeutf8");
// Use Symbol::display
and Style
to specify the display style explicitly.
asserteq!(format!("{}", symbol.display(Style::Short)), "decodeutf8"); asserteq!(format!("{}", symbol.display(Style::Normal)), "regex::utf8::decodeutf8");
asserteq!( format!("{}", symbol.display(Style::Long)), "regex[4df147058689a776]::utf8::decodeutf8" );
// You can access the structure of the demangled symbol.
asserteq!( symbol, Symbol { version: None, path: Path::Nested { namespace: b'v', path: Path::Nested { namespace: b't', path: Path::CrateRoot(Identifier { disambiguator: 0x4df147058689a776, name: "regex".into() }) .into(), name: Identifier { disambiguator: 0, name: "utf8".into() } } .into(), name: Identifier { disambiguator: 0, name: "decodeutf8".into() } } .into(), instantiatingcrate: None } ); ```