use core::fmt;
#[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
pub struct PrettyResult<'a, T, E>(&'a Result<T, E>);
impl<'a, T, E> From<&'a Result<T, E>> for PrettyResult<'a, T, E> {
fn from(value: &'a Result<T, E>) -> Self {
Self(value)
}
}
impl<'a, T, E> fmt::Debug for PrettyResult<'a, T, E>
where
T: fmt::Debug,
E: fmt::Debug,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self.0 {
Ok(v) => v.fmt(f),
err => err.fmt(f),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::format;
#[test]
fn pretty_result_format_ok() {
let val: Result<i32, ()> = Ok(42);
let pretty = PrettyResult(&val);
assert_eq!(format!("{:?}", pretty), "42");
}
#[test]
fn pretty_result_format_err() {
let val: Result<i32, &str> = Err("oops");
let pretty = PrettyResult(&val);
assert_eq!(format!("{:?}", pretty), "Err(\"oops\")");
}
}