Adding in with_node macro

This commit is contained in:
Pauan 2019-07-30 23:26:58 +02:00
parent 094ad20b51
commit b4aadeb42b
2 changed files with 22 additions and 8 deletions

View File

@ -437,6 +437,12 @@ impl<A> DomBuilder<A> {
} }
impl<A> DomBuilder<A> where A: Clone { impl<A> DomBuilder<A> where A: Clone {
#[inline]
#[doc(hidden)]
pub fn __internal_element(&self) -> A {
self.element.clone()
}
#[inline] #[inline]
pub fn with_element<B, F>(self, f: F) -> B where F: FnOnce(Self, A) -> B { pub fn with_element<B, F>(self, f: F) -> B where F: FnOnce(Self, A) -> B {
let element = self.element.clone(); let element = self.element.clone();

View File

@ -4,8 +4,8 @@ macro_rules! __internal_builder_method {
($this:expr,) => { ($this:expr,) => {
$this $this
}; };
($this:expr, .$name:ident!($($args:expr),*) $($rest:tt)*) => { ($this:expr, .$name:ident!($($args:tt)*) $($rest:tt)*) => {
$crate::__internal_builder_method!($name!($this, $($args),*), $($rest)*) $crate::__internal_builder_method!($name!($this, $($args)*), $($rest)*)
}; };
($this:expr, .$name:ident($($args:expr),*) $($rest:tt)*) => { ($this:expr, .$name:ident($($args:expr),*) $($rest:tt)*) => {
$crate::__internal_builder_method!($this.$name($($args),*), $($rest)*) $crate::__internal_builder_method!($this.$name($($args),*), $($rest)*)
@ -16,6 +16,12 @@ macro_rules! __internal_builder_method {
#[doc(hidden)] #[doc(hidden)]
#[macro_export] #[macro_export]
macro_rules! __internal_builder { macro_rules! __internal_builder {
($default:ty, $name:ident => $make:expr, $kind:expr) => {
$crate::__internal_builder!($default, $name => $make, $kind => $default, {})
};
($default:ty, $name:ident => $make:expr, $kind:expr, $($rest:tt)*) => {
$crate::__internal_builder!($default, $name => $make, $kind => $default, $($rest)*)
};
($default:ty, $name:ident => $make:expr, $kind:expr => $t:ty) => { ($default:ty, $name:ident => $make:expr, $kind:expr => $t:ty) => {
$crate::__internal_builder!($default, $name => $make, $kind => $t, {}) $crate::__internal_builder!($default, $name => $make, $kind => $t, {})
}; };
@ -28,13 +34,15 @@ macro_rules! __internal_builder {
let c = $crate::__internal_builder_method!(b, $($methods)*); let c = $crate::__internal_builder_method!(b, $($methods)*);
$crate::DomBuilder::into_dom(c) $crate::DomBuilder::into_dom(c)
}}; }};
}
($default:ty, $name:ident => $make:expr, $kind:expr) => {
$crate::__internal_builder!($default, $name => $make, $kind => $default) #[macro_export]
}; macro_rules! with_node {
($default:ty, $name:ident => $make:expr, $kind:expr, { $($methods:tt)* }) => { ($this:expr, $name:ident => { $($methods:tt)* }) => {{
$crate::__internal_builder!($default, $name => $make, $kind => $default, { $($methods)* }) let $name = $crate::DomBuilder::__internal_element(&$this);
}; $crate::__internal_builder_method!($this, $($methods)*)
}};
} }