//! Abstracts out the APIs necessary to `Runtime` for integrating the time //! driver. When the `time` feature flag is **not** enabled. These APIs are //! shells. This isolates the complexity of dealing with conditional //! compilation. pub(crate) use variant::*; #[cfg(feature = "time")] mod variant { use crate::park::Either; use crate::runtime::io; use crate::time::{self, driver}; pub(crate) type Clock = time::Clock; pub(crate) type Driver = Either, io::Driver>; pub(crate) type Handle = Option; pub(crate) fn create_clock() -> Clock { Clock::new() } /// Create a new timer driver / handle pair pub(crate) fn create_driver( enable: bool, io_driver: io::Driver, clock: Clock, ) -> (Driver, Handle) { if enable { let driver = driver::Driver::new(io_driver, clock); let handle = driver.handle(); (Either::A(driver), Some(handle)) } else { (Either::B(io_driver), None) } } } #[cfg(not(feature = "time"))] mod variant { use crate::runtime::io; pub(crate) type Clock = (); pub(crate) type Driver = io::Driver; pub(crate) type Handle = (); pub(crate) fn create_clock() -> Clock { () } /// Create a new timer driver / handle pair pub(crate) fn create_driver( _enable: bool, io_driver: io::Driver, _clock: Clock, ) -> (Driver, Handle) { (io_driver, ()) } }