1#[macro_export]
3macro_rules! assert_ok {
4    ($cond:expr $(,)?) => {
5        match $cond {
6            Ok(value) => value,
7            Err(err) => $crate::assert_failed!(
8                $crate::panicking::Msg("`Ok(..)`"),
9                $crate::panicking::Ref(&format_args!("Err({:?})", err)),
10            ),
11        }
12    };
13    ($cond:expr, $($arg:tt)+) => {
14        match $cond {
15            Ok(value) => value,
16            Err(err) => $crate::assert_failed!(
17                $crate::panicking::Msg("`Ok(..)`"),
18                $crate::panicking::Ref(&format_args!("Err({:?})", err)),
19                $($arg)+
20            ),
21        }
22    };
23}
24
25#[macro_export]
27macro_rules! debug_assert_ok {
28    ($($arg:tt)*) => {
29        if cfg!(debug_assertions) {
30            $crate::assert_ok!($($arg)*);
31        }
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    #[test]
38    #[should_panic(expected = "assertion failed: expected `Ok(..)`, got `Err(())`")]
39    fn check_assert_ok_panic() {
40        assert_ok!(Result::<bool, ()>::Err(()));
41    }
42
43    #[test]
44    #[should_panic(expected = "assertion failed: expected `Ok(..)`, got `Err(())`\ni'm confused")]
45    fn check_assert_ok_panic_with_message() {
46        assert_ok!(Result::<bool, ()>::Err(()), "i'm confused");
47    }
48
49    #[test]
50    fn check_assert_ok_pass() {
51        assert_ok!(Result::<_, ()>::Ok(true));
52    }
53
54    #[test]
55    fn check_assert_ok_does_not_require_ok_debug() {
56        struct Empty;
57
58        assert_ok!(Result::<_, ()>::Ok(Empty));
59        assert_ok!(Result::<_, ()>::Ok(Empty), "i'm confused");
60    }
61}