#![feature(sync_unsafe_cell)]
#![feature(async_fn_traits)]
#![feature(unboxed_closures)]
#![allow(dead_code)]
mod arc_mut;
mod blocking_queue;
pub mod count_down_latch;
pub mod rocketmq_tokio_lock;
mod shutdown;
pub mod task;
pub mod schedule;
pub use arc_mut::ArcMut;
pub use arc_mut::SyncUnsafeCellWrapper;
pub use arc_mut::WeakArcMut;
pub use blocking_queue::BlockingQueue as RocketMQBlockingQueue;
pub use count_down_latch::CountDownLatch;
pub use rocketmq::main;
pub use rocketmq_tokio_lock::RocketMQTokioMutex;
pub use rocketmq_tokio_lock::RocketMQTokioRwLock;
pub use schedule::executor::ExecutorConfig;
pub use schedule::executor::ExecutorPool;
pub use schedule::executor::TaskExecutor;
pub use schedule::scheduler::SchedulerConfig;
pub use schedule::scheduler::TaskScheduler;
pub use schedule::task::Task;
pub use schedule::task::TaskContext;
pub use schedule::task::TaskResult;
pub use schedule::task::TaskStatus;
pub use schedule::trigger::CronTrigger;
pub use schedule::trigger::DelayTrigger;
pub use schedule::trigger::DelayedIntervalTrigger;
pub use schedule::trigger::IntervalTrigger;
pub use schedule::trigger::Trigger;
pub use shutdown::Shutdown;
pub use tokio as rocketmq;
#[cfg(unix)]
pub async fn wait_for_signal() {
use tokio::signal::unix::signal;
use tokio::signal::unix::SignalKind;
use tracing::info;
let mut term = signal(SignalKind::terminate()).expect("failed to register signal handler");
let mut int = signal(SignalKind::interrupt()).expect("failed to register signal handler");
tokio::select! {
_ = term.recv() => info!("Received SIGTERM"),
_ = int.recv() => info!("Received SIGINT"),
}
}
#[cfg(windows)]
pub async fn wait_for_signal() {
let _ = tokio::signal::ctrl_c().await;
}