wip: polish some more things
This commit is contained in:
1 parent
2d58d380be
commit
14961023f9
32 files changed
+265
-370
No files matched your search
@@ -1,5 +1,5 @@
|
||||
mod usestate;
|
||||
pub use usestate::{use_state, AsyncUseState, UseState};
|
||||
pub use usestate::{use_state, UseState};
|
||||
|
||||
mod useref;
|
||||
pub use useref::*;
|
||||
@@ -16,5 +16,45 @@ pub use usefuture::*;
|
||||
mod usesuspense;
|
||||
pub use usesuspense::*;
|
||||
|
||||
// mod usemodel;
|
||||
// pub use usemodel::*;
|
||||
#[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<T> AsyncHook for T
|
||||
where
|
||||
T: ToOwned<Owned = T>,
|
||||
{
|
||||
type Output = T;
|
||||
fn for_async(self) -> Self::Output {
|
||||
self
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user