1 // force-host
2 // no-prefer-dynamic
3
4 #![crate_type = "proc-macro"]
5
6 extern crate proc_macro;
7
8 use proc_macro::TokenStream;
9
10 #[proc_macro_attribute]
expect_let(attr: TokenStream, item: TokenStream) -> TokenStream11 pub fn expect_let(attr: TokenStream, item: TokenStream) -> TokenStream {
12 assert!(attr.to_string().is_empty());
13 assert_eq!(item.to_string(), "let string = \"Hello, world!\" ;");
14 item
15 }
16
17 #[proc_macro_attribute]
expect_my_macro_stmt(attr: TokenStream, item: TokenStream) -> TokenStream18 pub fn expect_my_macro_stmt(attr: TokenStream, item: TokenStream) -> TokenStream {
19 assert!(attr.to_string().is_empty());
20 assert_eq!(item.to_string(), "my_macro! (\"{}\", string) ;");
21 item
22 }
23
24 #[proc_macro_attribute]
expect_expr(attr: TokenStream, item: TokenStream) -> TokenStream25 pub fn expect_expr(attr: TokenStream, item: TokenStream) -> TokenStream {
26 assert!(attr.to_string().is_empty());
27 assert_eq!(item.to_string(), "print_str(\"string\")");
28 item
29 }
30
31 #[proc_macro_attribute]
expect_my_macro_expr(attr: TokenStream, item: TokenStream) -> TokenStream32 pub fn expect_my_macro_expr(attr: TokenStream, item: TokenStream) -> TokenStream {
33 assert!(attr.to_string().is_empty());
34 assert_eq!(item.to_string(), "my_macro! (\"{}\", string)");
35 item
36 }
37
38 #[proc_macro_attribute]
duplicate(attr: TokenStream, item: TokenStream) -> TokenStream39 pub fn duplicate(attr: TokenStream, item: TokenStream) -> TokenStream {
40 assert!(attr.to_string().is_empty());
41 format!("{}, {}", item, item).parse().unwrap()
42 }
43
44 #[proc_macro_attribute]
no_output(attr: TokenStream, item: TokenStream) -> TokenStream45 pub fn no_output(attr: TokenStream, item: TokenStream) -> TokenStream {
46 assert!(attr.to_string().is_empty());
47 assert!(!item.to_string().is_empty());
48 "".parse().unwrap()
49 }
50