#![feature(async_closure)] mod aliases; pub mod fs; pub mod net; mod plat; mod wove; use aliases::IoResult; #[cfg(target_os = "linux")] pub use plat::linux::PlatformLinux as PlatImpl; use plat::Platform; pub struct Wove { platform: PlatImpl, } impl Wove { pub fn new() -> IoResult { Ok(Self { platform: PlatImpl::new(Default::default())?, }) } pub async fn run(&self) -> IoResult<()> { loop { self.platform.tick().await?; } } } #[cfg(test)] mod test { use std::path::PathBuf; use crate::Wove; #[test] fn sketch() { let mut wove = Wove::new().unwrap(); let wove = &mut wove; let fut = async { let run = async { wove.run().await?; Ok("".to_string()) }; let contents = crate::fs::read_to_string(wove, PathBuf::from("src/lib.rs")); let contents = futures_lite::future::race(run, contents).await; contents }; let out = pollster::block_on(fut).unwrap(); assert_eq!(out, ""); } }