diff --git a/src/intermediate/document_element.rs b/src/intermediate/document_element.rs index b79220b..8f6b608 100644 --- a/src/intermediate/document_element.rs +++ b/src/intermediate/document_element.rs @@ -12,23 +12,19 @@ pub(crate) enum IDocumentElement { Section(ISection), } -iselector!( - IDocumentElement, - DocumentElement, - |registry, original| async { - iitem!( - registry, - original, - ( - organic::types::DocumentElement::Heading, - IDocumentElement::Heading, - IHeading - ), - ( - organic::types::DocumentElement::Section, - IDocumentElement::Section, - ISection - ), - ) - } -); +iselector!(IDocumentElement, DocumentElement, original, registry, { + iitem!( + registry, + original, + ( + organic::types::DocumentElement::Heading, + IDocumentElement::Heading, + IHeading + ), + ( + organic::types::DocumentElement::Section, + IDocumentElement::Section, + ISection + ), + ) +}); diff --git a/src/intermediate/element.rs b/src/intermediate/element.rs index da1b173..1e1f2ae 100644 --- a/src/intermediate/element.rs +++ b/src/intermediate/element.rs @@ -56,7 +56,7 @@ pub(crate) enum IElement { LatexEnvironment(ILatexEnvironment), } -iselector!(IElement, Element, |registry, original| async { +iselector!(IElement, Element, original, registry, { iitem!( registry, original, diff --git a/src/intermediate/macros.rs b/src/intermediate/macros.rs index 8c65d1f..10b21c8 100644 --- a/src/intermediate/macros.rs +++ b/src/intermediate/macros.rs @@ -43,13 +43,18 @@ pub(crate) use intermediate; /// /// This exists to make changing the type signature easier. macro_rules! iselector { - ($istruct:ident, $pstruct:ident, $fnbody:expr) => { + ($istruct:ident, $pstruct:ident, $original:ident, $registry:ident, $fnbody:tt) => { impl $istruct { - pub(crate) fn new<'reg, 'orig, 'parse, 'inp: 'reg + 'orig>( + pub(crate) fn new<'reg, 'orig, 'parse, 'inp: 'reg + 'orig + 'parse>( registry: &'reg mut Registry<'orig, 'parse>, original: &'orig organic::types::$pstruct<'parse>, ) -> BoxFuture<'inp, Result<$istruct, CustomError>> { - $fnbody(registry, original).boxed() + async move { + let $registry = registry; + let $original = original; + $fnbody + } + .boxed() } } }; @@ -61,8 +66,8 @@ macro_rules! iitem { ($registry:expr, $original:expr, $(($penum:path, $ienum:path, $istruct:ident),)*) => { match $original { $( - &$penum(inner) => Ok($ienum( - $istruct::new($registry, &inner).await?, + $penum(inner) => Ok($ienum( + $istruct::new($registry, inner).await?, )), )* } diff --git a/src/intermediate/object.rs b/src/intermediate/object.rs index 7b183c0..a0b05a2 100644 --- a/src/intermediate/object.rs +++ b/src/intermediate/object.rs @@ -63,7 +63,7 @@ pub(crate) enum IObject { Timestamp(ITimestamp), } -iselector!(IObject, Object, |registry, original| async { +iselector!(IObject, Object, original, registry, { iitem!( registry, original,