use std::ffi::CStr;
use std::os::raw::c_char;
use audio_cpp_sys::*;
unsafe fn take_string(ptr: *mut c_char) -> String {
if ptr.is_null() {
return String::new();
}
let s = unsafe { CStr::from_ptr(ptr) }
.to_string_lossy()
.into_owned();
unsafe { audiocpp_free_string(ptr) };
s
}
fn main() {
let registry = unsafe { audiocpp_registry_default() };
assert!(
!registry.is_null(),
"audiocpp_registry_default() 返回空指针"
);
let mut out = std::ptr::null_mut();
let rc = unsafe { audiocpp_registry_families_json(std::ptr::null(), &mut out) };
assert!(rc != 0, "空注册表调用应返回非 0 错误码");
let last_error = unsafe {
let p = audiocpp_last_error();
if p.is_null() {
String::from("(无错误信息)")
} else {
CStr::from_ptr(p).to_string_lossy().into_owned()
}
};
println!("[错误路径验证] rc={rc} last_error={last_error}");
let mut families_json = std::ptr::null_mut();
let rc = unsafe { audiocpp_registry_families_json(registry, &mut families_json) };
assert_eq!(rc, 0, "audiocpp_registry_families_json 失败");
let families = unsafe { take_string(families_json) };
println!("=== 已注册模型族 ===\n{families}");
let mut loaders_json = std::ptr::null_mut();
let rc = unsafe { audiocpp_registry_loaders_json(registry, &mut loaders_json) };
assert_eq!(rc, 0, "audiocpp_registry_loaders_json 失败");
let loaders = unsafe { take_string(loaders_json) };
println!("=== loader 声明 ===\n{loaders}");
let mut devices_json = std::ptr::null_mut();
let rc = unsafe { audiocpp_registry_devices_json(&mut devices_json) };
assert_eq!(rc, 0, "audiocpp_registry_devices_json 失败");
let devices = unsafe { take_string(devices_json) };
println!("=== 后端设备 ===\n{devices}");
unsafe { audiocpp_registry_free(registry) };
println!("\ninspect 完成");
}