Skip to content

macro_rules! say_hello {
() => {
println!("Hello, Friends");
};
($name:expr) => {
println!("Hello, {}", $name);
};
}
fn main() {
say_hello!();
say_hello!("John");
}
macro_rules! nameof {
($name:ident) => {
stringify!($name)
};
}
struct Person;
fn main() {
println!("{}", nameof!(Person));
}
macro_rules! create_fn {
($name:ident, $body:expr) => {
fn $name() -> i32 {
$body
}
};
}
fn main() {
create_fn!(get_one, 1);
create_fn!(get_two, 2);
println!("{}", get_one());
println!("{}", get_two());
}
macro_rules! create_struct {
($name:ident, $($field_name:ident: $field_type:ty),*) => {
#[derive(Debug)]
struct $name {
$($field_name: $field_type),*
}
impl $name {
fn new($($field_name: $field_type),*) -> Self {
Self {
$($field_name),*
}
}
}
};
}
fn main() {
create_struct!(Person, name: String, age: i32);
let person = Person::new(String::from("John"), 18);
println!("person: {:#?}", person);
}
macro_rules! create_struct {
($name:ident, $($field_name:ident: $field_type:ty),*) => {
#[derive(Debug)]
struct $name {
$($field_name: $field_type),*
}
impl $name {
fn new($($field_name: $field_type),*) -> Self {
Self {
$($field_name),*
}
}
}
};
}
fn main() {
create_struct!(Person, name: String, age: i32);
let person = Person::new(String::from("John"), 18);
println!("person: {:#?}", person);
}
macro_rules! hashmap {
($($key:expr => $value:expr),* $(,)?) => {
{
use std::collections::HashMap;
let mut map = HashMap::new();
$(map.insert($key, $value);)*
map
}
};
}
fn main() {
let map = hashmap! (
"a" => 1,
"b" => 2,
"c" => 3,
);
println!("map: {:#?}", map);
}