From: Philippe Antoine Date: Wed, 2 Apr 2025 21:07:13 +0000 (+0200) Subject: rust: export jsonbuilder API in sys crate X-Git-Tag: suricata-8.0.0-beta1~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=51859050cba4e26814f3f7f4874d39264ffb2dc1;p=thirdparty%2Fsuricata.git rust: export jsonbuilder API in sys crate using cbindgen + bindgen --- diff --git a/rust/Makefile.am b/rust/Makefile.am index 521bac2d8c..fc90140bd7 100644 --- a/rust/Makefile.am +++ b/rust/Makefile.am @@ -141,6 +141,19 @@ if HAVE_BINDGEN printf "// This file is automatically generated. Do not edit.\n\n" > sys/src/sys.rs cat sys/src/sys.rs.tmp >> sys/src/sys.rs rm -f sys/src/sys.rs.tmp + $(CBINDGEN) --quiet --config cbindgen.toml src/jsonbuilder.rs -o gen/jsonbuilder.h + $(BINDGEN) \ + -o sys/src/jsonbuilder.rs.tmp \ + --rust-target 1.68 \ + --no-layout-tests \ + --disable-header-comment \ + --allowlist-function 'SC.*' \ + gen/jsonbuilder.h \ + -- \ + -DHAVE_CONFIG_H -I../src -I../rust/gen $(CPPFLAGS) + printf "// This file is automatically generated. Do not edit.\n\n" > sys/src/jsonbuilder.rs + cat sys/src/jsonbuilder.rs.tmp >> sys/src/jsonbuilder.rs + rm -f sys/src/jsonbuilder.rs.tmp else @echo "error: bindgen not installed, can't update bindings" exit 1 diff --git a/rust/cbindgen.toml b/rust/cbindgen.toml index b3a9b18ad3..11e0e6b2ba 100644 --- a/rust/cbindgen.toml +++ b/rust/cbindgen.toml @@ -43,7 +43,8 @@ include_version = true # A list of headers to #include (with quotes) # default: [] -includes = [] +no_includes = true +includes = ["stdint.h", "stdbool.h"] # The desired length of a line to use when formatting lines # default: 100 diff --git a/rust/sys/src/jsonbuilder.rs b/rust/sys/src/jsonbuilder.rs new file mode 100644 index 0000000000..95476ecc60 --- /dev/null +++ b/rust/sys/src/jsonbuilder.rs @@ -0,0 +1,125 @@ +// This file is automatically generated. Do not edit. + +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct SCJsonBuilder { + _unused: [u8; 0], +} +#[doc = " A \"mark\" or saved state for a JsonBuilder object.\n\n The name is full, and the types are u64 as this object is used\n directly in C as well."] +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct SCJsonBuilderMark { + pub position: u64, + pub state_index: u64, + pub state: u64, +} +extern "C" { + pub fn SCJbNewObject() -> *mut SCJsonBuilder; +} +extern "C" { + pub fn SCJbNewArray() -> *mut SCJsonBuilder; +} +extern "C" { + pub fn SCJbClone(js: *mut SCJsonBuilder) -> *mut SCJsonBuilder; +} +extern "C" { + pub fn SCJbFree(js: *mut SCJsonBuilder); +} +extern "C" { + pub fn SCJbCapacity(jb: *mut SCJsonBuilder) -> usize; +} +extern "C" { + pub fn SCJbReset(jb: *mut SCJsonBuilder); +} +extern "C" { + pub fn SCJbOpenObject(js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char) -> bool; +} +extern "C" { + pub fn SCJbStartObject(js: *mut SCJsonBuilder) -> bool; +} +extern "C" { + pub fn SCJbOpenArray(js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char) -> bool; +} +extern "C" { + pub fn SCJbSetString( + js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, + val: *const ::std::os::raw::c_char, + ) -> bool; +} +extern "C" { + pub fn SCJbSetStringFromBytes( + js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, bytes: *const u8, len: u32, + ) -> bool; +} +extern "C" { + pub fn SCJbSetBase64( + js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, bytes: *const u8, len: u32, + ) -> bool; +} +extern "C" { + pub fn SCJbSetHex( + js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, bytes: *const u8, len: u32, + ) -> bool; +} +extern "C" { + pub fn SCJbSetFormatted( + js: *mut SCJsonBuilder, formatted: *const ::std::os::raw::c_char, + ) -> bool; +} +extern "C" { + pub fn SCJbAppendObject(jb: *mut SCJsonBuilder, obj: *const SCJsonBuilder) -> bool; +} +extern "C" { + pub fn SCJbSetObject( + js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, val: *mut SCJsonBuilder, + ) -> bool; +} +extern "C" { + pub fn SCJbAppendString(js: *mut SCJsonBuilder, val: *const ::std::os::raw::c_char) -> bool; +} +extern "C" { + pub fn SCJbAppendStringFromBytes(js: *mut SCJsonBuilder, bytes: *const u8, len: u32) -> bool; +} +extern "C" { + pub fn SCJbAppendBase64(js: *mut SCJsonBuilder, bytes: *const u8, len: u32) -> bool; +} +extern "C" { + pub fn SCJbAppendUint(js: *mut SCJsonBuilder, val: u64) -> bool; +} +extern "C" { + pub fn SCJbAppendFloat(js: *mut SCJsonBuilder, val: f64) -> bool; +} +extern "C" { + pub fn SCJbSetUint( + js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, val: u64, + ) -> bool; +} +extern "C" { + pub fn SCJbSetInt(js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, val: i64) + -> bool; +} +extern "C" { + pub fn SCJbSetFloat( + js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, val: f64, + ) -> bool; +} +extern "C" { + pub fn SCJbSetBool( + js: *mut SCJsonBuilder, key: *const ::std::os::raw::c_char, val: bool, + ) -> bool; +} +extern "C" { + pub fn SCJbClose(js: *mut SCJsonBuilder) -> bool; +} +extern "C" { + pub fn SCJbLen(js: *const SCJsonBuilder) -> usize; +} +extern "C" { + pub fn SCJbPtr(js: *mut SCJsonBuilder) -> *const u8; +} +extern "C" { + pub fn SCJbGetMark(js: *mut SCJsonBuilder, mark: *mut SCJsonBuilderMark); +} +extern "C" { + pub fn SCJbRestoreMark(js: *mut SCJsonBuilder, mark: *mut SCJsonBuilderMark) -> bool; +} diff --git a/rust/sys/src/lib.rs b/rust/sys/src/lib.rs index 470f6e7a37..f06496ffe7 100644 --- a/rust/sys/src/lib.rs +++ b/rust/sys/src/lib.rs @@ -19,4 +19,5 @@ #![allow(non_snake_case)] #![allow(clippy::all)] +pub mod jsonbuilder; pub mod sys;