use flowy_sys::prelude::{CommandStream, CommandStreamFuture, EventResponse, FlowySystem, Module, StreamData}; use std::{ cell::RefCell, sync::{Once, RwLock}, task::Context, }; #[allow(dead_code)] pub fn setup_env() { static INIT: Once = Once::new(); INIT.call_once(|| { std::env::set_var("RUST_LOG", "flowy_sys=debug,debug"); env_logger::init(); }); } pub struct ExecutorAction { command: String, } pub struct FlowySystemExecutor {} thread_local!( static STREAM_SENDER: RefCell>> = RefCell::new(None); ); pub fn sync_send(data: StreamData) -> EventResponse { STREAM_SENDER.with(|cell| match &*cell.borrow() { Some(stream) => stream.sync_send(data), None => panic!(""), }) } pub fn async_send(data: StreamData) { STREAM_SENDER.with(|cell| match &*cell.borrow() { Some(stream) => { stream.async_send(data); }, None => panic!(""), }); } pub fn stop_system() { FlowySystem::current().stop(); } pub fn init_system(modules: Vec, f: F) where F: FnOnce() + 'static, { FlowySystem::construct( || modules, |module_map| { let mut stream = CommandStream::::new(module_map.clone()); let stream_fut = CommandStreamFuture::new(module_map, stream.take_data_rx()); STREAM_SENDER.with(|cell| { *cell.borrow_mut() = Some(stream); }); stream_fut }, ) .spawn(async { f() }) .run() .unwrap(); }