ng_gateway_driver/
macros.rs#[macro_export]
macro_rules! driver_metadata {
($metadata:expr) => {
use prost::Message;
use std::sync::Mutex;
static METADATA_BUFFER: Mutex<Option<Vec<u8>>> = Mutex::new(None);
#[no_mangle]
pub extern "C" fn metadata() -> *const u8 {
let metadata = $metadata;
let mut buf = Vec::new();
metadata
.encode(&mut buf)
.expect("Failed to encode Protobuf");
let ptr = buf.as_ptr();
*METADATA_BUFFER.lock().unwrap() = Some(buf);
ptr
}
#[no_mangle]
pub extern "C" fn metadata_length() -> usize {
METADATA_BUFFER
.lock()
.unwrap()
.as_ref()
.map_or(0, |buf| buf.len())
}
#[no_mangle]
pub extern "C" fn free_metadata() {
*METADATA_BUFFER.lock().unwrap() = None;
}
};
}