2 releases

0.1.1 Jul 7, 2022
0.1.0 Jul 6, 2022

#2038 in Rust patterns

MIT license

6KB
84 lines

Ops

What is Ops?

It's just a joke with "try { bla bla bla } catch (NullPointerException e) { bla bla bla bla }".

But i use ops,

It's created only for pratice declarative Rust macros.

But it's functional macro.

Usage:

use std::fmt::Display;

use ops::catch;

fn main() {
    catch!{() =>
        try {
            error()?;
            Ok(())
        } ops e: NullPointerException {
            //do something
            println!("{}", e)
        }
    }
}

#[derive(Debug)]
struct NullPointerException {
    message: String,
}

impl NullPointerException {
    fn new(message: &str) -> Self {
        Self { message: message.into() }
    }
}

impl Display for NullPointerException {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "NullPointerException: {}", self.message)
    }
}

impl std::error::Error for NullPointerException {}

//some stuff
fn error() -> Result<(), Box<dyn std::error::Error>> {
    Err(Box::new(NullPointerException::new("get out of here")))
}

The macro expand to:


No runtime deps