/fn_block

Library for wrapping a Rust block or expression into a closure and call it.

Primary LanguageRustApache License 2.0Apache-2.0

Build Status AppVeyor Status Crates.io Version

fn_block Crate

Library defining macros for calling blocks or expressions in a closure.

Quick Introduction

This library was mostly written to allow "safe navigation" with the ?. operator combination (seemingly) without jumping out of the current function. This allows a similar use of the operator as in other languages (such as Swift, C# or Kotlin).

To use this library, you have to add it to the dependencies of your Cargo.toml file

[dependencies]
fn_block = "0.2.1"

Then add the following lines to your module:

#[macro_use]
extern crate fn_block;
use fn_block::*;

Instead of the wildcard, you can also just import the symbols you need.

Here is an example on how to use the crate:

let o = Some("Foobar");
let s = fn_expr!{ o?.get(0..3)?.to_lowercase().into_some() };
assert_eq!("foo", s.unwrap());

Please visit the API Documentation for more details.

Functionality Overview

In short, this crate provides the following APIs:

  • The fn_expr macro allows wrapping an expression into a lambda that is directly called.
  • The IntoSome trait, which is implemented for all Sized types, allows to call into_some on a value to move it into an Option::Some.
  • The IntoOk trait, which is implemented for all Sized types, allows to call into_ok on a value to move it into an Result::Ok.

For more examples, please have a look at the test module.

Unstable Features

To use unstable features, the dependency declaration in your Cargo.toml has to be updated:

[dependencies]
fn_block = { version = "0.2.1", features = ["unproven"] }

Note that this crate's unstable features do work on stable Rust.

The following unstable APIs are available:

  • The fn_try macro allows wrapping an expression into a lambda, being called directly and recover from errors directly afterwards.

License

The fn_block crate is licensed under the following licenses:

Choose under which you want to use the library.