Skip to content

Pale-Vessel/fn_macro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Macro for function traits

This crate adds a macro to derive the three function traits FnOnce, FnMut, and Fn. These traits are often implemented three times with the same signature and body (excluding the different borrow type on self), which can lead to unnecessary boilerplate - this macro hopes to overcome this.

Usage

This macro is comprised of four parts - the initial derive, and three attributes for the input and output types, and the function body.

[dependencies]
fn_macro = "0.1.0"
#![feature(unboxed_closures)]
#![feature(fn_traits)]

use fn_macro::{Fn, fn_args, fn_body, fn_output};

#[derive(Fn)]
#[fn_args(f64, f64, String)]
#[fn_body{
    let k = self.0 + args.0;
    format!("{} {}", args.2, k + args.1)
}]
#[fn_output(String)]
struct Test(f64);

fn main() {
    let object = Test(9.5);
    println!("{}", object(1.0, 2.5, String::from("Hello"))) //Hello 13.0
}

Known issues

Due to the use of expect in the macro code, VSCode will highlight the macro's use as incorrect code, claiming it will always panic. This is wrong - the macro will only panic if one of the necessary fields is not provided.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages