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)
}
}