From 18e27dc65edc74a703594ad8debf927e869a57b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20L=C3=B6thberg?= Date: Wed, 12 Mar 2025 00:14:48 +0100 Subject: [PATCH 1/2] Forward variant attributes to From implementations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Johannes Löthberg --- src/lib.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index cbce984..9be4d4d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -685,7 +685,7 @@ macro_rules! quick_error { } $( quick_error!(FIND_FROM_IMPL - $name $item: $imode [$( $var:$typ ),*] + $name $item: $imode [$(#[$imeta])*] [$( $var:$typ ),*] {$( $funcs )*}); )* $( @@ -745,9 +745,11 @@ macro_rules! quick_error { }; // ----------------------------- FROM IMPL -------------------------- (FIND_FROM_IMPL $name:ident $item:ident: $imode:tt + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { from() $( $tail:tt )*} ) => { + $(#[$imeta])* $( impl From<$typ> for $name { fn from($var: $typ) -> $name { @@ -756,39 +758,45 @@ macro_rules! quick_error { } )* quick_error!(FIND_FROM_IMPL - $name $item: $imode [$( $var:$typ ),*] + $name $item: $imode [$( #[$imeta] )*] [$( $var:$typ ),*] {$( $tail )*}); }; (FIND_FROM_IMPL $name:ident $item:ident: UNIT + [$(#[$imeta:meta])*] [ ] { from($ftyp:ty) $( $tail:tt )*} ) => { + $(#[$imeta])* impl From<$ftyp> for $name { fn from(_discarded_error: $ftyp) -> $name { $name::$item } } quick_error!(FIND_FROM_IMPL - $name $item: UNIT [ ] + $name $item: UNIT [$( #[$imeta] )*] [ ] {$( $tail )*}); }; (FIND_FROM_IMPL $name:ident $item:ident: TUPLE + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { from($fvar:ident: $ftyp:ty) -> ($( $texpr:expr ),*) $( $tail:tt )*} ) => { + $(#[$imeta])* impl From<$ftyp> for $name { fn from($fvar: $ftyp) -> $name { $name::$item($( $texpr ),*) } } quick_error!(FIND_FROM_IMPL - $name $item: TUPLE [$( $var:$typ ),*] + $name $item: TUPLE [$( #[$imeta] )*] [$( $var:$typ ),*] { $($tail)* }); }; (FIND_FROM_IMPL $name:ident $item:ident: STRUCT + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { from($fvar:ident: $ftyp:ty) -> {$( $tvar:ident: $texpr:expr ),*} $( $tail:tt )*} ) => { + $(#[$imeta])* impl From<$ftyp> for $name { fn from($fvar: $ftyp) -> $name { $name::$item { @@ -797,19 +805,21 @@ macro_rules! quick_error { } } quick_error!(FIND_FROM_IMPL - $name $item: STRUCT [$( $var:$typ ),*] + $name $item: STRUCT [$( #[$imeta] )*] [$( $var:$typ ),*] { $($tail)* }); }; (FIND_FROM_IMPL $name:ident $item:ident: $imode:tt + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { $t:tt $( $tail:tt )*} ) => { quick_error!(FIND_FROM_IMPL - $name $item: $imode [$( $var:$typ ),*] + $name $item: $imode [$( #[$imeta] )*] [$( $var:$typ ),*] {$( $tail )*} ); }; (FIND_FROM_IMPL $name:ident $item:ident: $imode:tt + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { } ) => { From 490fd10604575149fcea28e15cd3405730c01624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20L=C3=B6thberg?= Date: Wed, 12 Mar 2025 00:17:28 +0100 Subject: [PATCH 2/2] Forward variant attributes to context From implementations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Johannes Löthberg --- src/lib.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 9be4d4d..906d472 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -690,7 +690,7 @@ macro_rules! quick_error { )* $( quick_error!(FIND_CONTEXT_IMPL - $name $item: $imode [$( $var:$typ ),*] + $name $item: $imode [$(#[$imeta])*] [$( $var:$typ ),*] {$( $funcs )*}); )* }; @@ -826,10 +826,12 @@ macro_rules! quick_error { }; // ----------------------------- CONTEXT IMPL -------------------------- (FIND_CONTEXT_IMPL $name:ident $item:ident: TUPLE + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { context($cvar:ident: AsRef<$ctyp:ty>, $fvar:ident: $ftyp:ty) -> ($( $texpr:expr ),*) $( $tail:tt )* } ) => { + $(#[$imeta])* impl> From<$crate::Context> for $name { fn from( $crate::Context($cvar, $fvar): $crate::Context) @@ -839,14 +841,16 @@ macro_rules! quick_error { } } quick_error!(FIND_CONTEXT_IMPL - $name $item: TUPLE [$( $var:$typ ),*] + $name $item: TUPLE [$( #[$imeta] )*] [$( $var:$typ ),*] { $($tail)* }); }; (FIND_CONTEXT_IMPL $name:ident $item:ident: TUPLE + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { context($cvar:ident: $ctyp:ty, $fvar:ident: $ftyp:ty) -> ($( $texpr:expr ),*) $( $tail:tt )* } ) => { + $(#[$imeta])* impl<'a> From<$crate::Context<$ctyp, $ftyp>> for $name { fn from( $crate::Context($cvar, $fvar): $crate::Context<$ctyp, $ftyp>) @@ -856,14 +860,16 @@ macro_rules! quick_error { } } quick_error!(FIND_CONTEXT_IMPL - $name $item: TUPLE [$( $var:$typ ),*] + $name $item: TUPLE [$( #[$imeta] )*] [$( $var:$typ ),*] { $($tail)* }); }; (FIND_CONTEXT_IMPL $name:ident $item:ident: STRUCT + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { context($cvar:ident: AsRef<$ctyp:ty>, $fvar:ident: $ftyp:ty) -> {$( $tvar:ident: $texpr:expr ),*} $( $tail:tt )* } ) => { + $(#[$imeta])* impl> From<$crate::Context> for $name { fn from( $crate::Context($cvar, $fvar): $crate::Context<$ctyp, $ftyp>) @@ -875,14 +881,16 @@ macro_rules! quick_error { } } quick_error!(FIND_CONTEXT_IMPL - $name $item: STRUCT [$( $var:$typ ),*] + $name $item: STRUCT [$( #[$imeta] )*] [$( $var:$typ ),*] { $($tail)* }); }; (FIND_CONTEXT_IMPL $name:ident $item:ident: STRUCT + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { context($cvar:ident: $ctyp:ty, $fvar:ident: $ftyp:ty) -> {$( $tvar:ident: $texpr:expr ),*} $( $tail:tt )* } ) => { + $(#[$imeta])* impl<'a> From<$crate::Context<$ctyp, $ftyp>> for $name { fn from( $crate::Context($cvar, $fvar): $crate::Context<$ctyp, $ftyp>) @@ -894,19 +902,21 @@ macro_rules! quick_error { } } quick_error!(FIND_CONTEXT_IMPL - $name $item: STRUCT [$( $var:$typ ),*] + $name $item: STRUCT [$( #[$imeta] )*] [$( $var:$typ ),*] { $($tail)* }); }; (FIND_CONTEXT_IMPL $name:ident $item:ident: $imode:tt + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { $t:tt $( $tail:tt )*} ) => { quick_error!(FIND_CONTEXT_IMPL - $name $item: $imode [$( $var:$typ ),*] + $name $item: $imode [$( #[$imeta] )*] [$( $var:$typ ),*] {$( $tail )*} ); }; (FIND_CONTEXT_IMPL $name:ident $item:ident: $imode:tt + [$(#[$imeta:meta])*] [$( $var:ident: $typ:ty ),*] { } ) => {