#![deny(
anonymous_parameters,
bare_trait_objects,
missing_copy_implementations,
missing_debug_implementations,
trivial_numeric_casts,
unstable_features,
unused_extern_crates,
unused_import_braces,
unused_qualifications,
unused_results,
variant_size_differences,
warnings, clippy::all,
clippy::pedantic,
clippy::cargo,
)]
#![allow(
clippy::blanket_clippy_restriction_lints, clippy::implicit_return, clippy::module_name_repetitions, clippy::multiple_crate_versions, clippy::missing_errors_doc, clippy::missing_panics_doc, clippy::panic_in_result_fn,
clippy::shadow_same, clippy::shadow_reuse, clippy::exhaustive_enums,
clippy::exhaustive_structs,
clippy::indexing_slicing,
clippy::separated_literal_suffix, clippy::single_char_lifetime_names, )]
pub mod coroutine;
pub mod scheduler;
pub mod pool;
#[macro_export]
macro_rules! unbreakable {
( $f: expr , $syscall: expr ) => {
if $crate::coroutine::suspender::Suspender::<(), ()>::current().is_some() {
let co = $crate::scheduler::SchedulableCoroutine::current()
.unwrap_or_else(|| panic!("current coroutine not found !"));
let co_name = co.get_name();
let state = co.set_state($crate::coroutine::CoroutineState::SystemCall($syscall));
assert_eq!($crate::coroutine::CoroutineState::Running, state);
let r = $f;
if let Some(current) = $crate::scheduler::SchedulableCoroutine::current() {
if co_name == current.get_name() {
let old = current.set_state(state);
match old {
$crate::coroutine::CoroutineState::SystemCall(_) => {}
_ => panic!("{} unexpected state {old}", current.get_name()),
};
}
}
r
} else {
$f
}
};
}
#[cfg(all(unix, feature = "preemptive-schedule"))]
mod monitor;
#[allow(
dead_code,
clippy::cast_possible_wrap,
clippy::cast_possible_truncation,
clippy::cast_sign_loss,
trivial_numeric_casts
)]
pub mod event_loop;
pub mod config;