Skip to main content

lmflow/ffi/graph/
observer.rs

1#![allow(clippy::missing_safety_doc)]
2use super::*;
3
4#[no_mangle]
5pub unsafe extern "C" fn lmflow_graph_observe(
6    g: *mut LMFlowGraph,
7    port: *const c_char,
8    cb: Option<unsafe extern "C" fn(*mut c_void, LMFlowPacket)>,
9    user: *mut c_void,
10) -> i32 {
11    lmflow_graph_observe_ex(g, port, false, cb, user)
12}
13
14#[no_mangle]
15pub unsafe extern "C" fn lmflow_graph_observe_ex(
16    g: *mut LMFlowGraph,
17    port: *const c_char,
18    observe_timestamp_bounds: bool,
19    cb: Option<unsafe extern "C" fn(*mut c_void, LMFlowPacket)>,
20    user: *mut c_void,
21) -> i32 {
22    guard(|| {
23        let Some(f) = cb else {
24            return fail(Error::InvalidArg("callback is null".into()));
25        };
26        let Some(name) = cstr(port) else {
27            return fail(Error::InvalidArg("port name is null".into()));
28        };
29        with_graph(g, |gr| {
30            to_status(
31                gr.inner()
32                    .add_observer(name, f, user, observe_timestamp_bounds),
33            )
34        })
35    })
36}