mirror of
https://github.com/fafhrd91/actix-net
synced 2024-11-30 17:44:34 +01:00
take custom system path in actix_rt::main
macro (#363)
This commit is contained in:
parent
3be3e11aa5
commit
3824493fd3
@ -1,6 +1,9 @@
|
|||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
## Unreleased - 2021-xx-xx
|
## Unreleased - 2021-xx-xx
|
||||||
|
* Add optional argument `system` to `main` macro which can be used to specify the path to `actix_rt::System` (useful for re-exports). [#363]
|
||||||
|
|
||||||
|
[#363]: https://github.com/actix/actix-net/pull/363
|
||||||
|
|
||||||
|
|
||||||
## 0.2.0 - 2021-02-02
|
## 0.2.0 - 2021-02-02
|
||||||
|
@ -27,8 +27,10 @@ use quote::quote;
|
|||||||
#[allow(clippy::needless_doctest_main)]
|
#[allow(clippy::needless_doctest_main)]
|
||||||
#[proc_macro_attribute]
|
#[proc_macro_attribute]
|
||||||
#[cfg(not(test))] // Work around for rust-lang/rust#62127
|
#[cfg(not(test))] // Work around for rust-lang/rust#62127
|
||||||
pub fn main(_: TokenStream, item: TokenStream) -> TokenStream {
|
pub fn main(args: TokenStream, item: TokenStream) -> TokenStream {
|
||||||
let mut input = syn::parse_macro_input!(item as syn::ItemFn);
|
let mut input = syn::parse_macro_input!(item as syn::ItemFn);
|
||||||
|
let args = syn::parse_macro_input!(args as syn::AttributeArgs);
|
||||||
|
|
||||||
let attrs = &input.attrs;
|
let attrs = &input.attrs;
|
||||||
let vis = &input.vis;
|
let vis = &input.vis;
|
||||||
let sig = &mut input.sig;
|
let sig = &mut input.sig;
|
||||||
@ -43,13 +45,47 @@ pub fn main(_: TokenStream, item: TokenStream) -> TokenStream {
|
|||||||
.into();
|
.into();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut system = syn::parse_str::<syn::Path>("::actix_rt::System").unwrap();
|
||||||
|
|
||||||
|
for arg in &args {
|
||||||
|
match arg {
|
||||||
|
syn::NestedMeta::Meta(syn::Meta::NameValue(syn::MetaNameValue {
|
||||||
|
lit: syn::Lit::Str(lit),
|
||||||
|
path,
|
||||||
|
..
|
||||||
|
})) => match path
|
||||||
|
.get_ident()
|
||||||
|
.map(|i| i.to_string().to_lowercase())
|
||||||
|
.as_deref()
|
||||||
|
{
|
||||||
|
Some("system") => match lit.parse() {
|
||||||
|
Ok(path) => system = path,
|
||||||
|
Err(_) => {
|
||||||
|
return syn::Error::new_spanned(lit, "Expected path")
|
||||||
|
.to_compile_error()
|
||||||
|
.into();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => {
|
||||||
|
return syn::Error::new_spanned(arg, "Unknown attribute specified")
|
||||||
|
.to_compile_error()
|
||||||
|
.into();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => {
|
||||||
|
return syn::Error::new_spanned(arg, "Unknown attribute specified")
|
||||||
|
.to_compile_error()
|
||||||
|
.into();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sig.asyncness = None;
|
sig.asyncness = None;
|
||||||
|
|
||||||
(quote! {
|
(quote! {
|
||||||
#(#attrs)*
|
#(#attrs)*
|
||||||
#vis #sig {
|
#vis #sig {
|
||||||
actix_rt::System::new()
|
<#system>::new().block_on(async move { #body })
|
||||||
.block_on(async move { #body })
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.into()
|
.into()
|
||||||
|
@ -4,6 +4,9 @@ fn compile_macros() {
|
|||||||
t.pass("tests/trybuild/main-01-basic.rs");
|
t.pass("tests/trybuild/main-01-basic.rs");
|
||||||
t.compile_fail("tests/trybuild/main-02-only-async.rs");
|
t.compile_fail("tests/trybuild/main-02-only-async.rs");
|
||||||
t.pass("tests/trybuild/main-03-fn-params.rs");
|
t.pass("tests/trybuild/main-03-fn-params.rs");
|
||||||
|
t.pass("tests/trybuild/main-04-system-path.rs");
|
||||||
|
t.compile_fail("tests/trybuild/main-05-system-expect-path.rs");
|
||||||
|
t.compile_fail("tests/trybuild/main-06-unknown-attr.rs");
|
||||||
|
|
||||||
t.pass("tests/trybuild/test-01-basic.rs");
|
t.pass("tests/trybuild/test-01-basic.rs");
|
||||||
t.pass("tests/trybuild/test-02-keep-attrs.rs");
|
t.pass("tests/trybuild/test-02-keep-attrs.rs");
|
||||||
|
8
actix-macros/tests/trybuild/main-04-system-path.rs
Normal file
8
actix-macros/tests/trybuild/main-04-system-path.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
mod system {
|
||||||
|
pub use actix_rt::System as MySystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[actix_rt::main(system = "system::MySystem")]
|
||||||
|
async fn main() {
|
||||||
|
futures_util::future::ready(()).await
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
#[actix_rt::main(system = "!@#*&")]
|
||||||
|
async fn main2() {}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,5 @@
|
|||||||
|
error: Expected path
|
||||||
|
--> $DIR/main-05-system-expect-path.rs:1:27
|
||||||
|
|
|
||||||
|
1 | #[actix_rt::main(system = "!@#*&")]
|
||||||
|
| ^^^^^^^
|
7
actix-macros/tests/trybuild/main-06-unknown-attr.rs
Normal file
7
actix-macros/tests/trybuild/main-06-unknown-attr.rs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#[actix_rt::main(foo = "bar")]
|
||||||
|
async fn async_main() {}
|
||||||
|
|
||||||
|
#[actix_rt::main(bar::baz)]
|
||||||
|
async fn async_main2() {}
|
||||||
|
|
||||||
|
fn main() {}
|
11
actix-macros/tests/trybuild/main-06-unknown-attr.stderr
Normal file
11
actix-macros/tests/trybuild/main-06-unknown-attr.stderr
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
error: Unknown attribute specified
|
||||||
|
--> $DIR/main-06-unknown-attr.rs:1:18
|
||||||
|
|
|
||||||
|
1 | #[actix_rt::main(foo = "bar")]
|
||||||
|
| ^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: Unknown attribute specified
|
||||||
|
--> $DIR/main-06-unknown-attr.rs:4:18
|
||||||
|
|
|
||||||
|
4 | #[actix_rt::main(bar::baz)]
|
||||||
|
| ^^^^^^^^
|
Loading…
Reference in New Issue
Block a user