1- use pyo3:: prelude:: * ;
21use pyo3:: exceptions;
3-
4-
2+ use pyo3:: prelude:: * ;
53
64// This defines a python module. pyo3 will copy the rust doc comment
75// below into a python docstring
86
7+ /// Demangles a mangled c++ linker symbol name and returns it as a string
8+ #[ pyfunction]
9+ fn demangle ( mangled : String ) -> PyResult < String > {
10+ let symbol = :: cpp_demangle:: Symbol :: new ( & mangled[ ..] ) . map_err ( |error| {
11+ exceptions:: PyValueError :: new_err ( ( "Could not demangle symbol" , error. to_string ( ) ) )
12+ } ) ?;
13+ let demangled = symbol. demangle ( & Default :: default ( ) ) . map_err ( |error| {
14+ exceptions:: PyValueError :: new_err ( (
15+ "Could not format demangled name as string" ,
16+ error. to_string ( ) ,
17+ ) )
18+ } ) ?;
19+
20+ Ok ( demangled)
21+ }
22+
923/// A package for demangling C++ linker symbols
1024///
1125/// This package provides python bindings for the rust crate
@@ -24,23 +38,7 @@ use pyo3::exceptions;
2438/// ...
2539/// ValueError: ('Could not demangle symbol', 'mangled symbol is not well-formed')
2640#[ pymodule]
27- fn cpp_demangle ( _py : Python , m : & PyModule ) -> PyResult < ( ) > {
28- // This adds a function to the python module:
29- /// Demangles a mangled c++ linker symbol name and returns it as a string
30- #[ pyfn( m) ]
31- fn demangle ( mangled : String ) -> PyResult < String > {
32- let symbol = :: cpp_demangle:: Symbol :: new ( & mangled[ ..] ) . map_err ( |error| {
33- exceptions:: PyValueError :: new_err ( ( "Could not demangle symbol" , error. to_string ( ) ) )
34- } ) ?;
35- let demangled = symbol. demangle ( & Default :: default ( ) ) . map_err ( |error| {
36- exceptions:: PyValueError :: new_err ( (
37- "Could not format demangled name as string" ,
38- error. to_string ( ) ,
39- ) )
40- } ) ?;
41-
42- Ok ( demangled)
43- }
44-
45- Ok ( ( ) )
41+ mod cpp_demangle {
42+ #[ pymodule_export]
43+ use super :: demangle;
4644}
0 commit comments