tryx-derive 0.1.0

Derive macro for tryx outcome types
Documentation
#![feature(try_trait_v2)]

use tryx_derive::Outcome;

#[derive(Debug, PartialEq, Eq)]
struct AppError(&'static str);

impl From<&'static str> for AppError {
    fn from(value: &'static str) -> Self {
        Self(value)
    }
}

#[derive(Outcome)]
#[outcome(result_interop = AppError)]
enum Permitted<T> {
    #[outcome(success)]
    Yes(T),
    #[outcome(short_circuit)]
    No(&'static str),
}

fn permitted() -> Permitted<u8> {
    let value = Permitted::Yes(2)?;
    Permitted::Yes(value + 1)
}

fn result() -> Result<u8, AppError> {
    let value = Permitted::Yes(3)?;
    Ok(value)
}

fn main() {
    assert!(matches!(permitted(), Permitted::Yes(3)));
    assert_eq!(result(), Ok(3));
}