| //! 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<driver::Driver<io::Driver>, io::Driver>; |
| pub(crate) type Handle = Option<driver::Handle>; |
| |
| 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, ()) |
| } |
| } |