swift_demangle/
demangle.rs1use std::ffi;
2
3use crate::error::DemangleError;
4
5extern "C" {
6 fn swift_demangle(
7 mangledName: *const u8,
8 mangledNameLength: usize,
9 outputBuffer: *mut u8,
10 outputBufferSize: *mut usize,
11 flags: u32,
12 ) -> *const i8;
13}
14
15
16
17pub fn demangle(s: &str) -> Result<&str, DemangleError> {
18 unsafe {
19 let demangled = swift_demangle(
20 s.as_ptr(),
21 s.len(),
22 std::ptr::null_mut(),
23 std::ptr::null_mut(),
24 0,
25 );
26 if demangled.is_null() {
27 Err(DemangleError::Null)
28 } else {
29 ffi::CStr::from_ptr(demangled)
30 .to_str()
31 .map_err(DemangleError::Utf8Error)
32 }
33 }
34}
35
36#[test]
37fn test_demangle() {
38 assert_eq!(demangle("$sSa").unwrap(), "Swift.Array");
39}