Skip to content

Commit d4a1ca4

Browse files
committed
Added proc macro sample
1 parent 3b317ba commit d4a1ca4

File tree

5 files changed

+51
-2
lines changed

5 files changed

+51
-2
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[workspace]
2-
members = ["Lesson_00", "Lesson_01", "Lesson_02", "Lesson_03", "Lesson_04", "Lesson_05", "Lesson_06", "Lesson_07", "Lesson_08", "Lesson_09", "Lesson_10", "Lesson_11", "Lesson_12", "Lesson_13", "collector", "drone-lab", "fops", "game-engine", "mocking", "router", "sysco", "sysco2"]
2+
members = ["Lesson_00", "Lesson_01", "Lesson_02", "Lesson_03", "Lesson_04", "Lesson_05", "Lesson_06", "Lesson_07", "Lesson_08", "Lesson_09", "Lesson_10", "Lesson_11", "Lesson_12", "Lesson_13", "collector", "drone-lab", "fops", "game-engine", "mocking", "procs", "router", "sysco", "sysco2"]
33

44
resolver = "2"

Lesson_13/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ version = "0.1.0"
44
edition = "2024"
55

66
[dependencies]
7+
procs = { path = "../procs" }

Lesson_13/src/main.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
11
mod samples;
22

3-
fn main() {}
3+
use procs::work_time_effort;
4+
5+
#[work_time_effort]
6+
fn find_total() {
7+
let mut total = 0;
8+
for i in 0..1000 {
9+
total += i;
10+
}
11+
println!("Result: {}", total);
12+
}
13+
14+
fn main() {
15+
let _total = find_total();
16+
}

procs/Cargo.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[package]
2+
name = "procs"
3+
description = "Sample procedural macros for training"
4+
version = "0.1.0"
5+
edition = "2024"
6+
7+
[lib]
8+
proc-macro = true
9+
10+
[dependencies]
11+
quote = "1.0.40"
12+
syn = { version = "2.0.101", features = ["full"] }

procs/src/lib.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
extern crate proc_macro;
2+
3+
use proc_macro::TokenStream;
4+
use quote::quote;
5+
use syn::{ItemFn, parse_macro_input};
6+
7+
#[proc_macro_attribute]
8+
pub fn work_time_effort(_attr: TokenStream, item: TokenStream) -> TokenStream {
9+
let input = parse_macro_input!(item as ItemFn);
10+
let fn_name = &input.sig.ident;
11+
let fn_block = &input.block;
12+
13+
let expanded = quote! {
14+
fn #fn_name() {
15+
let start = std::time::Instant::now();
16+
#fn_block
17+
let duration = start.elapsed();
18+
println!("Total execution time {}: {:?}", stringify!(#fn_name), duration);
19+
}
20+
};
21+
22+
expanded.into()
23+
}

0 commit comments

Comments
 (0)