helper.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. use flowy_sys::prelude::{EventResponse, FlowySystem, Module, Sender, SenderRequest, SenderRunner};
  2. use std::{cell::RefCell, sync::Once};
  3. #[allow(dead_code)]
  4. pub fn setup_env() {
  5. static INIT: Once = Once::new();
  6. INIT.call_once(|| {
  7. std::env::set_var("RUST_LOG", "flowy_sys=debug,debug");
  8. env_logger::init();
  9. });
  10. }
  11. thread_local!(
  12. static SENDER: RefCell<Option<Sender<i64>>> = RefCell::new(None);
  13. );
  14. pub fn sync_send(data: SenderRequest<i64>) -> EventResponse {
  15. SENDER.with(|cell| match &*cell.borrow() {
  16. Some(stream) => stream.sync_send(data),
  17. None => panic!(""),
  18. })
  19. }
  20. pub fn async_send(data: SenderRequest<i64>) {
  21. SENDER.with(|cell| match &*cell.borrow() {
  22. Some(stream) => {
  23. stream.async_send(data);
  24. },
  25. None => panic!(""),
  26. });
  27. }
  28. pub fn init_system<F>(modules: Vec<Module>, f: F)
  29. where
  30. F: FnOnce() + 'static,
  31. {
  32. FlowySystem::construct(
  33. || modules,
  34. |module_map, runtime| {
  35. let mut sender = Sender::<i64>::new(module_map.clone());
  36. runtime.spawn(SenderRunner::new(module_map, sender.take_rx()));
  37. SENDER.with(|cell| {
  38. *cell.borrow_mut() = Some(sender);
  39. });
  40. },
  41. )
  42. .spawn(async { f() })
  43. .run()
  44. .unwrap();
  45. }
  46. pub fn stop_system() { FlowySystem::current().stop(); }