Skip to content

Commit d64bd27

Browse files
committed
Add macro example
1 parent 30c956c commit d64bd27

File tree

6 files changed

+94
-26
lines changed

6 files changed

+94
-26
lines changed

better-rust/Cargo.lock

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

better-rust/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
workspace = { members = ["solid"] }
1+
workspace = { members = ["solid", "macros"] }
22
[package]
33
name = "better-rust"
44
version = "0.1.0"

better-rust/macros/Cargo.toml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[package]
2+
name = "macros"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[lib]
9+
proc-macro = true
10+
11+
[dependencies]
12+
syn = { version = "*", features = ["full"]}
13+
quote = "1.0"

better-rust/macros/src/lib.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use proc_macro::TokenStream;
2+
use quote::quote;
3+
use syn;
4+
5+
#[proc_macro_attribute]
6+
pub fn example(_attr: TokenStream, item: TokenStream) -> TokenStream {
7+
let input = syn::parse_macro_input!(item as syn::ItemFn);
8+
let ident = input.sig.ident;
9+
let name = ident.clone().to_string();
10+
let block = input.block;
11+
12+
let gen = quote! {
13+
fn #ident() {
14+
println!("running `{}`:\n", #name);
15+
#block;
16+
println!("-------------\n");
17+
}
18+
};
19+
20+
gen.into()
21+
}

better-rust/solid/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ edition = "2021"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[dependencies]
9+
macros ={ path = "../macros" }

better-rust/solid/src/main.rs

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
1-
21
fn main() {
3-
run_single_responsibility_before();
2+
single_responsibility_before();
43

5-
run_single_responsibility_after();
4+
single_responsibility_after();
65

7-
run_open_closed();
6+
open_closed();
87

9-
run_liskov_substitution();
8+
liskov_substitution();
109
}
1110

12-
fn run_single_responsibility_before() {
13-
println!("running `run_single_responsibility_before`:\n");
14-
11+
#[macros::example]
12+
fn single_responsibility_before() {
1513
use solid::single_responsibility_before::*;
1614

1715
let mut order = Order::new();
@@ -22,13 +20,10 @@ fn run_single_responsibility_before() {
2220

2321
println!("{}", order.total_price());
2422
order.pay("debit", "0372846");
25-
26-
println!("------------");
2723
}
2824

29-
fn run_single_responsibility_after() {
30-
println!("running `run_single_responsibility_after`:\n");
31-
25+
#[macros::example]
26+
fn single_responsibility_after() {
3227
use solid::single_responsibility_after::*;
3328

3429
let mut order = Order::new();
@@ -42,13 +37,10 @@ fn run_single_responsibility_after() {
4237
let processor = PaymentProcessor {};
4338

4439
processor.pay_debit(&mut order, "0372846");
45-
46-
println!("------------");
4740
}
4841

49-
fn run_open_closed() {
50-
println!("running `run_open_closed`:\n");
51-
42+
#[macros::example]
43+
fn open_closed() {
5244
use solid::open_closed_after::*;
5345

5446
let mut order = Order::new();
@@ -62,13 +54,10 @@ fn run_open_closed() {
6254
let processor = DebitPaymentProcessor {};
6355

6456
processor.pay(&mut order, "0372846");
65-
66-
println!("------------");
6757
}
6858

69-
fn run_liskov_substitution() {
70-
println!("running `run_liskov_substitution`:\n");
71-
59+
#[macros::example]
60+
fn liskov_substitution() {
7261
use solid::liskov_substitution_after::*;
7362

7463
let mut order = Order::new();
@@ -82,6 +71,4 @@ fn run_liskov_substitution() {
8271
let processor = PaypalPaymentProcessor::new("[email protected]");
8372

8473
processor.pay(&mut order);
85-
86-
println!("------------");
8774
}

0 commit comments

Comments
 (0)