use core::ffi::CStr;
use core::ptr::NonNull;
pub trait PgNode: crate::seal::Sealed {
#[inline]
fn display_node(&self) -> String {
unsafe { display_node_impl(NonNull::from(self).cast()) }
}
}
#[warn(unsafe_op_in_unsafe_fn)]
pub(crate) unsafe fn display_node_impl(node: NonNull<crate::Node>) -> String {
unsafe {
let node_cstr = crate::nodeToString(node.as_ptr().cast());
let result = match CStr::from_ptr(node_cstr).to_str() {
Ok(cstr) => cstr.to_string(),
Err(e) => format!("<ffi error: {e:?}>"),
};
crate::pfree(node_cstr.cast());
result
}
}