use super::{upb_MiniTable, RawMessage};
extern "C" {
fn upb_DebugString(
msg: RawMessage,
mt: *const upb_MiniTable,
options: i32,
buf: *mut u8,
size: usize,
) -> usize;
}
#[allow(dead_code)]
#[repr(i32)]
enum Options {
Default = 0,
SingleLine = 1,
SkipUnknown = 2,
NoSortMaps = 4,
}
pub unsafe fn debug_string(msg: RawMessage, mt: *const upb_MiniTable) -> String {
let len =
unsafe { upb_DebugString(msg, mt, Options::Default as i32, core::ptr::null_mut(), 0) };
assert!(len < isize::MAX as usize);
let mut buf = vec![0u8; len + 1];
let written_len =
unsafe { upb_DebugString(msg, mt, Options::Default as i32, buf.as_mut_ptr(), buf.len()) };
assert_eq!(len, written_len);
String::from_utf8_lossy(buf.as_slice()).to_string()
}
#[cfg(test)]
mod tests {
use super::*;
use googletest::gtest;
#[gtest]
fn assert_text_linked() {
use crate::assert_linked;
assert_linked!(upb_DebugString);
}
}