genet_sdk/
decoder.rs

1//! Decoder traits.
2
3pub use genet_abi::decoder::{Decoder, ExecType, Status, Worker};
4
5#[doc(hidden)]
6pub use genet_abi::decoder::DecoderBox;
7
8/// Registers decoder entries.
9#[macro_export]
10macro_rules! genet_decoders {
11    ( $( $x:expr ), * ) => {
12        thread_local! {
13            static DISSECTORS: Vec<genet_sdk::decoder::DecoderBox> = {
14                use genet_sdk::decoder::DecoderBox;
15                let mut v = Vec::new();
16                $(
17                    v.push(DecoderBox::new($x));
18                )*
19                v
20            };
21        }
22        #[no_mangle]
23        pub extern "C" fn genet_abi_v1_get_decoders(len: *mut u64) -> *const genet_sdk::decoder::DecoderBox {
24            DISSECTORS.with(|d| {
25                unsafe {
26                    *len = d.len() as u64;
27                }
28                d.as_ptr()
29            })
30        }
31    };
32}