]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust: export jsonbuilder API in sys crate
authorPhilippe Antoine <pantoine@oisf.net>
Wed, 2 Apr 2025 21:07:13 +0000 (23:07 +0200)
committerVictor Julien <victor@inliniac.net>
Mon, 7 Apr 2025 20:04:15 +0000 (22:04 +0200)
using cbindgen + bindgen

rust/Makefile.am
rust/cbindgen.toml
rust/sys/src/jsonbuilder.rs [new file with mode: 0644]
rust/sys/src/lib.rs

index 521bac2d8c9c7ba7ee7a2f73b2c30918ef8c792b..fc90140bd736124563c2e4d043cd8f5dbfe97fd4 100644 (file)
@@ -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
index b3a9b18ad3fa03df234acc97877a68c858241405..11e0e6b2ba9a2f0cdb65ea46aff6a7c19d59fad8 100644 (file)
@@ -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 (file)
index 0000000..95476ec
--- /dev/null
@@ -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;
+}
index 470f6e7a37ee94c2e007863856cbe53c52c7fad6..f06496ffe72fc92e8d16a87e8f5af149c74bed67 100644 (file)
@@ -19,4 +19,5 @@
 #![allow(non_snake_case)]
 #![allow(clippy::all)]
 
+pub mod jsonbuilder;
 pub mod sys;