rust/ffi: add mark support to ffi::jsonbuilder

To support Rust friendly EVE callback registration (ticket 8477).
pull/15217/head
Jason Ish 6 months ago committed by Victor Julien
parent 0a8e3132c2
commit 199e844a07

@ -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()) } {

Loading…
Cancel
Save