mod usestate; pub use usestate::{use_state, UseState}; mod useref; pub use useref::*; mod use_shared_state; pub use use_shared_state::*; mod usecoroutine; pub use usecoroutine::*; mod usefuture; pub use usefuture::*; mod usesuspense; pub use usesuspense::*; // #[macro_export] // macro_rules! to_owned { // ($($es:ident),+) => {$( // #[allow(unused_mut)] // let mut $es = $es.to_owned(); // )*} // } // /// Calls `for_async` on the series of paramters. // /// // /// If the type is Clone, then it will be cloned. However, if the type is not `clone` // /// then it must have a `for_async` method for Rust to lower down into. // /// // /// See: how use_state implements `for_async` but *not* through the trait. // #[macro_export] // macro_rules! for_async { // ($($es:ident),+) => {$( // #[allow(unused_mut)] // let mut $es = $es.for_async(); // )*} // } // /// This is a marker trait that uses decoherence. // /// // /// It is *not* meant for hooks to actually implement, but rather defer to their // /// underlying implementation if they *don't* implement the trait. // /// // /// // pub trait AsyncHook { // type Output; // fn for_async(self) -> Self::Output; // } // impl AsyncHook for T // where // T: ToOwned, // { // type Output = T; // fn for_async(self) -> Self::Output { // self // } // }