Attribute Macro ruex::prelude::decorate

source ·
#[decorate]
Expand description

Decorate methods.

Inspired by deco

Examples

use ruex::prelude::*;

fn logging<F>(func: F) -> impl Fn(i32) -> i32
where
    F: Fn(i32) -> i32,
{
    move |i| {
        println!("Input = {}", i);
        let out = func(i);
        println!("Output = {}", out);
        out
    }
}

#[decorate(logging)]
fn add2(i: i32) -> i32 {
    i + 2
}

add2(2);
  • Decorator with parameter
use ruex::prelude::*;
use std::{fs, io::Write};

fn logging<InputFunc: 'static>(
    log_filename: &'static str,
) -> impl Fn(InputFunc) -> Box<dyn Fn(i32) -> i32>
where
    InputFunc: Fn(i32) -> i32,
{
    move |func: InputFunc| {
        Box::new(move |i: i32| {
            let mut f = fs::File::create(log_filename).unwrap();
            writeln!(f, "Input = {}", i).unwrap();
            let out = func(i);
            writeln!(f, "Output = {}", out).unwrap();
            out
        })
    }
}

#[decorate(logging("test.log"))]
fn add2(i: i32) -> i32 {
    i + 2
}

add2(2);