overfn 0.1.2

Simple overloading system for functions with different arguments
Documentation
use overfn::*;

#[overload]
fn add(item: usize) -> usize {
    10 + item
}

#[overload]
fn add(left: usize, right: usize) -> usize {
    left + right
}

#[overload]
fn add(left: usize, right: usize, other: usize) -> usize {
    left + right + other
}

macros!();

#[test]
fn it_works() {
    let result = add!(2);
    assert_eq!(result, 12);

    let result = add!(2, 2);
    assert_eq!(result, 4);

    let result = add!(2, 2, 2);
    assert_eq!(result, 6);
}

struct Test {
    a: usize,
    b: usize,
}

impl Test {
    #[overload(Test)]
    fn new(a: usize) -> Self {
        Self { a, b: 0 }
    }

    #[overload(Test)]
    fn new(a: usize, b: usize) -> Self {
        Self { a, b }
    }

    #[overload(Test)]
    fn test(&self) -> usize {
        self.a + self.b
    }

    #[overload(Test)]
    fn test(&self, other: usize) -> usize {
        self.a + self.b + other
    }
}

macros!();

#[test]
fn test_class_method() {
    let result = Test_new!(2);
    assert_eq!(result.a, 2);
    assert_eq!(result.b, 0);

    let result = Test_new!(2, 2);
    assert_eq!(result.a, 2);
    assert_eq!(result.b, 2);
}

#[test]
fn test_object_method() {
    let test = Test_new!(2, 2);
    let result = Test_test!(test);
    assert_eq!(result, 4);

    let result = Test_test!(test, 2);
    assert_eq!(result, 6);
}