aboutsummaryrefslogtreecommitdiff
path: root/embassy-macros/src/lib.rs
diff options
context:
space:
mode:
authorDániel Buga <[email protected]>2023-06-25 22:24:48 +0200
committerDániel Buga <[email protected]>2023-06-25 22:24:48 +0200
commitaa0ab06645446bcb4b99a9407dc9c6c58030d8de (patch)
tree7310d739416bf19acbff90a128a40c445363034a /embassy-macros/src/lib.rs
parent03e0116a56d7bc4b8eb639fd590eaa186d039b2b (diff)
Update darling
Diffstat (limited to 'embassy-macros/src/lib.rs')
-rw-r--r--embassy-macros/src/lib.rs37
1 files changed, 27 insertions, 10 deletions
diff --git a/embassy-macros/src/lib.rs b/embassy-macros/src/lib.rs
index ba4f13b77..c9d58746a 100644
--- a/embassy-macros/src/lib.rs
+++ b/embassy-macros/src/lib.rs
@@ -1,11 +1,28 @@
1#![doc = include_str!("../README.md")] 1#![doc = include_str!("../README.md")]
2extern crate proc_macro; 2extern crate proc_macro;
3 3
4use darling::ast::NestedMeta;
4use proc_macro::TokenStream; 5use proc_macro::TokenStream;
5 6
6mod macros; 7mod macros;
7mod util; 8mod util;
8use macros::*; 9use macros::*;
10use syn::parse::{Parse, ParseBuffer};
11use syn::punctuated::Punctuated;
12use syn::Token;
13
14struct Args {
15 meta: Vec<NestedMeta>,
16}
17
18impl Parse for Args {
19 fn parse(input: &ParseBuffer) -> syn::Result<Self> {
20 let meta = Punctuated::<NestedMeta, Token![,]>::parse_terminated(input)?;
21 Ok(Args {
22 meta: meta.into_iter().collect(),
23 })
24 }
25}
9 26
10/// Declares an async task that can be run by `embassy-executor`. The optional `pool_size` parameter can be used to specify how 27/// Declares an async task that can be run by `embassy-executor`. The optional `pool_size` parameter can be used to specify how
11/// many concurrent tasks can be spawned (default is 1) for the function. 28/// many concurrent tasks can be spawned (default is 1) for the function.
@@ -39,10 +56,10 @@ use macros::*;
39/// ``` 56/// ```
40#[proc_macro_attribute] 57#[proc_macro_attribute]
41pub fn task(args: TokenStream, item: TokenStream) -> TokenStream { 58pub fn task(args: TokenStream, item: TokenStream) -> TokenStream {
42 let args = syn::parse_macro_input!(args as syn::AttributeArgs); 59 let args = syn::parse_macro_input!(args as Args);
43 let f = syn::parse_macro_input!(item as syn::ItemFn); 60 let f = syn::parse_macro_input!(item as syn::ItemFn);
44 61
45 task::run(args, f).unwrap_or_else(|x| x).into() 62 task::run(&args.meta, f).unwrap_or_else(|x| x).into()
46} 63}
47 64
48/// Creates a new `executor` instance and declares an application entry point for Cortex-M spawning the corresponding function body as an async task. 65/// Creates a new `executor` instance and declares an application entry point for Cortex-M spawning the corresponding function body as an async task.
@@ -65,9 +82,9 @@ pub fn task(args: TokenStream, item: TokenStream) -> TokenStream {
65/// ``` 82/// ```
66#[proc_macro_attribute] 83#[proc_macro_attribute]
67pub fn main_cortex_m(args: TokenStream, item: TokenStream) -> TokenStream { 84pub fn main_cortex_m(args: TokenStream, item: TokenStream) -> TokenStream {
68 let args = syn::parse_macro_input!(args as syn::AttributeArgs); 85 let args = syn::parse_macro_input!(args as Args);
69 let f = syn::parse_macro_input!(item as syn::ItemFn); 86 let f = syn::parse_macro_input!(item as syn::ItemFn);
70 main::run(args, f, main::cortex_m()).unwrap_or_else(|x| x).into() 87 main::run(&args.meta, f, main::cortex_m()).unwrap_or_else(|x| x).into()
71} 88}
72 89
73/// Creates a new `executor` instance and declares an application entry point for RISC-V spawning the corresponding function body as an async task. 90/// Creates a new `executor` instance and declares an application entry point for RISC-V spawning the corresponding function body as an async task.
@@ -100,9 +117,9 @@ pub fn main_cortex_m(args: TokenStream, item: TokenStream) -> TokenStream {
100/// ``` 117/// ```
101#[proc_macro_attribute] 118#[proc_macro_attribute]
102pub fn main_riscv(args: TokenStream, item: TokenStream) -> TokenStream { 119pub fn main_riscv(args: TokenStream, item: TokenStream) -> TokenStream {
103 let args = syn::parse_macro_input!(args as syn::AttributeArgs); 120 let args = syn::parse_macro_input!(args as Args);
104 let f = syn::parse_macro_input!(item as syn::ItemFn); 121 let f = syn::parse_macro_input!(item as syn::ItemFn);
105 main::run(args.clone(), f, main::riscv(args)) 122 main::run(&args.meta, f, main::riscv(&args.meta))
106 .unwrap_or_else(|x| x) 123 .unwrap_or_else(|x| x)
107 .into() 124 .into()
108} 125}
@@ -127,9 +144,9 @@ pub fn main_riscv(args: TokenStream, item: TokenStream) -> TokenStream {
127/// ``` 144/// ```
128#[proc_macro_attribute] 145#[proc_macro_attribute]
129pub fn main_std(args: TokenStream, item: TokenStream) -> TokenStream { 146pub fn main_std(args: TokenStream, item: TokenStream) -> TokenStream {
130 let args = syn::parse_macro_input!(args as syn::AttributeArgs); 147 let args = syn::parse_macro_input!(args as Args);
131 let f = syn::parse_macro_input!(item as syn::ItemFn); 148 let f = syn::parse_macro_input!(item as syn::ItemFn);
132 main::run(args, f, main::std()).unwrap_or_else(|x| x).into() 149 main::run(&args.meta, f, main::std()).unwrap_or_else(|x| x).into()
133} 150}
134 151
135/// Creates a new `executor` instance and declares an application entry point for WASM spawning the corresponding function body as an async task. 152/// Creates a new `executor` instance and declares an application entry point for WASM spawning the corresponding function body as an async task.
@@ -152,7 +169,7 @@ pub fn main_std(args: TokenStream, item: TokenStream) -> TokenStream {
152/// ``` 169/// ```
153#[proc_macro_attribute] 170#[proc_macro_attribute]
154pub fn main_wasm(args: TokenStream, item: TokenStream) -> TokenStream { 171pub fn main_wasm(args: TokenStream, item: TokenStream) -> TokenStream {
155 let args = syn::parse_macro_input!(args as syn::AttributeArgs); 172 let args = syn::parse_macro_input!(args as Args);
156 let f = syn::parse_macro_input!(item as syn::ItemFn); 173 let f = syn::parse_macro_input!(item as syn::ItemFn);
157 main::run(args, f, main::wasm()).unwrap_or_else(|x| x).into() 174 main::run(&args.meta, f, main::wasm()).unwrap_or_else(|x| x).into()
158} 175}