use std::fmt::{self, Display, Formatter};
use std::result::Result as StdResult;
use woah::prelude::*;
fn main() {
let r1 = woah_to_std();
let r2 = std_to_woah();
eprintln!("error: {:?} (woah -> std)", r1);
eprintln!("error: {:?} (std -> woah)", r2);
}
fn returns_woah_result() -> Result<(), LocalError, FatalError> {
FatalErr(FatalError::RequestFailed)
}
fn returns_std_result() -> StdResult<(), FatalError> {
Err(FatalError::RequestFailed)
}
fn woah_to_std() -> StdResult<(), FatalError> {
let _ = returns_woah_result()?;
Ok(())
}
fn std_to_woah() -> Result<(), LocalError, FatalError> {
let _ = returns_std_result()?;
Success(())
}
#[derive(Debug)]
enum LocalError {
#[allow(unused)]
RequestTimedOut,
}
#[derive(Debug)]
enum FatalError {
RequestFailed,
}
impl Display for LocalError {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
LocalError::RequestTimedOut => write!(f, "request timed out"),
}
}
}
impl Display for FatalError {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
FatalError::RequestFailed => write!(f, "request failed"),
}
}
}