|
|
|
|
@ -22,7 +22,8 @@
|
|
|
|
|
use std::ffi::{CString, NulError};
|
|
|
|
|
|
|
|
|
|
use suricata_sys::sys::{
|
|
|
|
|
SCJbClose, SCJbOpenObject, SCJbSetFormatted, SCJbSetString, SCJsonBuilder,
|
|
|
|
|
SCJbClose, SCJbGetMark, SCJbOpenObject, SCJbRestoreMark, SCJbSetFormatted, SCJbSetString,
|
|
|
|
|
SCJsonBuilder, SCJsonBuilderMark,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// TODO: Map suricata::jsonbuilder::JsonBuilder errors as well,
|
|
|
|
|
@ -60,6 +61,23 @@ impl JsonBuilder {
|
|
|
|
|
Self { jb }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn get_mark(&self) -> SCJsonBuilderMark {
|
|
|
|
|
let mut mark = SCJsonBuilderMark::default();
|
|
|
|
|
unsafe {
|
|
|
|
|
SCJbGetMark(self.jb, &mut mark);
|
|
|
|
|
}
|
|
|
|
|
mark
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn restore_mark(&mut self, mark: &SCJsonBuilderMark) -> Result<(), Error> {
|
|
|
|
|
let mut mark = *mark;
|
|
|
|
|
if unsafe { SCJbRestoreMark(self.jb, &mut mark) } {
|
|
|
|
|
Ok(())
|
|
|
|
|
} else {
|
|
|
|
|
Err(Error::Other)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn open_object(&mut self, key: &str) -> Result<&mut Self, Error> {
|
|
|
|
|
let key = CString::new(key)?;
|
|
|
|
|
if unsafe { SCJbOpenObject(self.jb, key.as_ptr()) } {
|
|
|
|
|
|