WelcomeBack 0.1.1

my first crate
Documentation
pub struct Person {
    pub name: String,
    pub age: i32,
}

pub trait Per {
    fn get_name<'a>(&'a self) -> &'a str;
    fn get_age(&self) -> i32;
    fn say_hello(&self) {
        let name: &str = self.get_name();
        let age: i32 = self.get_age();
        println!("hello {name} how are you doing. i know you're this {age} years old ");
    }
}

impl Per for Person {
    fn get_age(&self) -> i32 {
        self.age
    }

    fn get_name<'a>(&'a self) -> &'a str {
        return &self.name;
    }
}

pub fn run_func_n_time<F>(n: i32, func: F) where F: Fn() -> (){
    for i in 1..n {
        func();
    }
}

#[macro_export]
macro_rules! jojo {
    (4) => {
        println!("this is nice")
    };
    ( $( $x:expr ),* ) => {
        println!("i");
    };
}

#[macro_export]
macro_rules! make_persons {
    ( $($x:expr),*) => {{
        let mut people: Vec<Person> = vec![];

        $(
            println!("this is here");
            people.push(Person {name: $x.0, age:  $x.1});
        )*
        people
    }};
}

#[cfg(test)]
mod test {
    use crate::{Per, Person};
    use crate::person::Person;

    #[test]
    fn test_return() {
        let jj = Person {
            name: "jojo thomas".to_owned(),
            age: 17,
        };

        assert_eq!(jj.get_age(), 17)
    }
}