diff --git a/src/lib.rs b/src/lib.rs index cbce984..906d472 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -685,12 +685,12 @@ macro_rules! quick_error { } $( quick_error!(FIND_FROM_IMPL - $name $item: $imode [$( $var:$typ ),*] + $name $item: $imode [$(#[$imeta])*] [$( $var:$typ ),*] {$( $funcs )*}); )* $( quick_error!(FIND_CONTEXT_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,29 +805,33 @@ 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 ),*] { } ) => { }; // ----------------------------- 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) @@ -829,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>) @@ -846,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>) @@ -865,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>) @@ -884,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 ),*] { } ) => {