use pyo3::prelude::*;
use pyo3::types::PyAny;
pub struct StreamingCallbackBridge {
callback: Py<PyAny>,
}
impl StreamingCallbackBridge {
pub fn new(callback: Py<PyAny>) -> Self {
Self { callback }
}
pub fn call(&self, token: &str) {
Python::attach(|py| {
let _ = self.callback.call1(py, (token,));
});
}
}
pub fn make_callback(callback: Option<Py<PyAny>>) -> impl FnMut(&str) {
move |tok: &str| {
if let Some(ref cb) = callback {
Python::attach(|py| {
let _ = cb.call1(py, (tok,));
});
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_make_callback_none_is_noop() {
let mut cb = make_callback(None);
cb("hello");
cb("world");
}
}