Expand description
A small crate for Ok-wrapping and try blocks.
This is compatible with Result, Option,
and any type implementing the unstable std::ops::Try trait.
This crate does not require nightly Rust.
§Overview
The macro try_fn is used to perform Ok-wrapping on the return value of a function.
Before:
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Enter your name: ");
let mut name = String::new();
std::io::stdin().read_line(&mut name)?;
println!("Hello, {name}!");
Ok(()) // this is ugly
}After:
#[try_fn]
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Enter your name: ");
let mut name = String::new();
std::io::stdin().read_line(&mut name)?;
println!("Hello, {name}!");
}The macro try_block is an implementation of “try blocks” from nightly rust.
let result: Result<T, E> = try_block! {
let a = do_one(x)?;
let b = do_two(a)?;
b
};The macro wrap_ok simply wraps an expression with the “ok” variant for a given Try type.
assert_eq!(Some(42), wrap_ok!(42));Macros§
- try_
block - Macro for the receiving end of a
?operation. - wrap_ok
- Performs “Ok-wrapping” on the result of an expression.
This is compatible with
Result,Option, [ControlFlow], and any type that implements the unstable [std::ops::Try] trait.
Attribute Macros§
- try_fn
- An attribute macro that performs “Ok-wrapping” on the return value of a
fnitem. This is compatible with [Result], [Option],ControlFlow, and any type that implements the unstable [std::ops::Try] trait. - tryvial