diff --git a/src/ensure.rs b/src/ensure.rs index d52fd52..cd2f901 100644 --- a/src/ensure.rs +++ b/src/ensure.rs @@ -503,6 +503,10 @@ macro_rules! __parse_ensure { $crate::__parse_ensure!(arglist $stack $bail ($($fuel)*) {($($buf)* $life) $($parse)*} ($($rest)*) $($rest)*) }; + (generic $stack:tt $bail:tt (~$($fuel:tt)*) {($($buf:tt)*) $($parse:tt)*} ($assoc:ident $eq:tt $($dup:tt)*) $ident:ident = $($rest:tt)*) => { + $crate::__parse_ensure!(type (arglist $stack) $bail ($($fuel)*) {($($buf)* $assoc $eq) $($parse)*} ($($rest)*) $($rest)*) + }; + (generic $stack:tt $bail:tt (~$($fuel:tt)*) $parse:tt $dup:tt $($rest:tt)*) => { $crate::__parse_ensure!(type (arglist $stack) $bail ($($fuel)*) $parse $dup $($rest)*) }; diff --git a/tests/test_ensure.rs b/tests/test_ensure.rs index 62c1ac9..0addcc4 100644 --- a/tests/test_ensure.rs +++ b/tests/test_ensure.rs @@ -536,13 +536,21 @@ fn test_as() { "Condition failed: `f as fn() -> ! as usize * 0 != 0` (0 vs 0)", ); - trait EqDebug: PartialEq + Debug {} - impl EqDebug for S where S: PartialEq + Debug {} + trait EqDebug: PartialEq + Debug { + type Assoc; + } + + impl EqDebug for S + where + S: PartialEq + Debug, + { + type Assoc = bool; + } - let test = || Ok(ensure!(&0 as &dyn EqDebug != &0)); + let test = || Ok(ensure!(&0 as &dyn EqDebug != &0)); assert_err( test, - "Condition failed: `&0 as &dyn EqDebug != &0` (0 vs 0)", + "Condition failed: `&0 as &dyn EqDebug != &0` (0 vs 0)", ); let test = || {