dioxus_hooks/lib.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
#![doc = include_str!("../README.md")]
#![doc(html_logo_url = "https://avatars.githubusercontent.com/u/79236386")]
#![doc(html_favicon_url = "https://avatars.githubusercontent.com/u/79236386")]
#[macro_export]
/// A helper macro for cloning multiple values at once
///
/// # Usage
///
///
/// ```
/// # use dioxus::prelude::*;
/// #
/// # #[derive(Props, PartialEq, Clone)]
/// # struct Props {
/// # prop: String,
/// # }
/// # fn Component(props: Props) -> Element {
///
/// let (data) = use_signal(|| {});
///
/// let handle_thing = move |_| {
/// to_owned![data, props.prop];
/// spawn(async move {
/// // do stuff
/// });
/// };
/// # handle_thing(());
/// # VNode::empty() }
/// ```
macro_rules! to_owned {
// Rule matching simple symbols without a path
($es:ident $(, $($rest:tt)*)?) => {
#[allow(unused_mut)]
let mut $es = $es.to_owned();
$( to_owned![$($rest)*] )?
};
// We need to find the last element in a path, for this we need to unstack the path part by
// part using, separating what we have with a '@'
($($deref:ident).* $(, $($rest:tt)*)?) => {
to_owned![@ $($deref).* $(, $($rest)*)?]
};
// Take the head of the path and add it to the list of $deref
($($deref:ident)* @ $head:ident $( . $tail:ident)+ $(, $($rest:tt)*)?) => {
to_owned![$($deref)* $head @ $($tail).+ $(, $($rest)*)?]
};
// We have exhausted the path, use the last as a name
($($deref:ident)* @ $last:ident $(, $($rest:tt)*)? ) => {
#[allow(unused_mut)]
let mut $last = $($deref .)* $last .to_owned();
$(to_owned![$($rest)*])?
};
}
mod use_callback;
pub use use_callback::*;
mod use_on_destroy;
pub use use_on_destroy::*;
mod use_context;
pub use use_context::*;
mod use_coroutine;
pub use use_coroutine::*;
mod use_future;
pub use use_future::*;
mod use_reactive;
pub use use_reactive::*;
// mod use_sorted;
// pub use use_sorted::*;
mod use_resource;
pub use use_resource::*;
mod use_effect;
pub use use_effect::*;
mod use_memo;
pub use use_memo::*;
mod use_root_context;
pub use use_root_context::*;
mod use_hook_did_run;
pub use use_hook_did_run::*;
mod use_signal;
pub use use_signal::*;
mod use_set_compare;
pub use use_set_compare::*;