diff options
author | Haibo Huang <hhb@google.com> | 2021-02-09 18:21:05 -0800 |
---|---|---|
committer | Haibo Huang <hhb@google.com> | 2021-02-09 18:21:05 -0800 |
commit | 5f95ff39dfe80f673031098f1eaa08d527992b94 (patch) | |
tree | 10715046d8291e1854d85f6a8b232b3d52ec8064 /src/entry.rs | |
parent | b71afff3c8d62b79e450882e0cf273af95f2feb6 (diff) | |
download | tokio-macros-5f95ff39dfe80f673031098f1eaa08d527992b94.tar.gz |
Upgrade rust/crates/tokio-macros to 1.1.0
Test: make
Change-Id: I63fd8507244e6a7621358c51e9310a519f2267e8
Diffstat (limited to 'src/entry.rs')
-rw-r--r-- | src/entry.rs | 81 |
1 files changed, 63 insertions, 18 deletions
diff --git a/src/entry.rs b/src/entry.rs index 8f80499..f82a329 100644 --- a/src/entry.rs +++ b/src/entry.rs @@ -25,6 +25,7 @@ impl RuntimeFlavor { struct FinalConfig { flavor: RuntimeFlavor, worker_threads: Option<usize>, + start_paused: Option<bool>, } struct Configuration { @@ -32,6 +33,7 @@ struct Configuration { default_flavor: RuntimeFlavor, flavor: Option<RuntimeFlavor>, worker_threads: Option<(usize, Span)>, + start_paused: Option<(bool, Span)>, } impl Configuration { @@ -44,6 +46,7 @@ impl Configuration { }, flavor: None, worker_threads: None, + start_paused: None, } } @@ -79,31 +82,57 @@ impl Configuration { Ok(()) } + fn set_start_paused(&mut self, start_paused: syn::Lit, span: Span) -> Result<(), syn::Error> { + if self.start_paused.is_some() { + return Err(syn::Error::new(span, "`start_paused` set multiple times.")); + } + + let start_paused = parse_bool(start_paused, span, "start_paused")?; + self.start_paused = Some((start_paused, span)); + Ok(()) + } + fn build(&self) -> Result<FinalConfig, syn::Error> { let flavor = self.flavor.unwrap_or(self.default_flavor); use RuntimeFlavor::*; - match (flavor, self.worker_threads) { - (CurrentThread, Some((_, worker_threads_span))) => Err(syn::Error::new( - worker_threads_span, - "The `worker_threads` option requires the `multi_thread` runtime flavor.", - )), - (CurrentThread, None) => Ok(FinalConfig { - flavor, - worker_threads: None, - }), - (Threaded, worker_threads) if self.rt_multi_thread_available => Ok(FinalConfig { - flavor, - worker_threads: worker_threads.map(|(val, _span)| val), - }), + + let worker_threads = match (flavor, self.worker_threads) { + (CurrentThread, Some((_, worker_threads_span))) => { + return Err(syn::Error::new( + worker_threads_span, + "The `worker_threads` option requires the `multi_thread` runtime flavor.", + )) + } + (CurrentThread, None) => None, + (Threaded, worker_threads) if self.rt_multi_thread_available => { + worker_threads.map(|(val, _span)| val) + } (Threaded, _) => { let msg = if self.flavor.is_none() { "The default runtime flavor is `multi_thread`, but the `rt-multi-thread` feature is disabled." } else { "The runtime flavor `multi_thread` requires the `rt-multi-thread` feature." }; - Err(syn::Error::new(Span::call_site(), msg)) + return Err(syn::Error::new(Span::call_site(), msg)); } - } + }; + + let start_paused = match (flavor, self.start_paused) { + (Threaded, Some((_, start_paused_span))) => { + return Err(syn::Error::new( + start_paused_span, + "The `start_paused` option requires the `current_thread` runtime flavor.", + )); + } + (CurrentThread, Some((start_paused, _))) => Some(start_paused), + (_, None) => None, + }; + + Ok(FinalConfig { + flavor, + worker_threads, + start_paused, + }) } } @@ -134,6 +163,16 @@ fn parse_string(int: syn::Lit, span: Span, field: &str) -> Result<String, syn::E } } +fn parse_bool(bool: syn::Lit, span: Span, field: &str) -> Result<bool, syn::Error> { + match bool { + syn::Lit::Bool(b) => Ok(b.value), + _ => Err(syn::Error::new( + span, + format!("Failed to parse {} as bool.", field), + )), + } +} + fn parse_knobs( mut input: syn::ItemFn, args: syn::AttributeArgs, @@ -174,6 +213,9 @@ fn parse_knobs( "flavor" => { config.set_flavor(namevalue.lit.clone(), namevalue.span())?; } + "start_paused" => { + config.set_start_paused(namevalue.lit.clone(), namevalue.span())?; + } "core_threads" => { let msg = "Attribute `core_threads` is renamed to `worker_threads`"; return Err(syn::Error::new_spanned(namevalue, msg)); @@ -204,11 +246,11 @@ fn parse_knobs( macro_name ) } - "flavor" | "worker_threads" => { + "flavor" | "worker_threads" | "start_paused" => { format!("The `{}` attribute requires an argument.", name) } name => { - format!("Unknown attribute {} is specified; expected one of: `flavor`, `worker_threads`", name) + format!("Unknown attribute {} is specified; expected one of: `flavor`, `worker_threads`, `start_paused`", name) } }; return Err(syn::Error::new_spanned(path, msg)); @@ -235,6 +277,9 @@ fn parse_knobs( if let Some(v) = config.worker_threads { rt = quote! { #rt.worker_threads(#v) }; } + if let Some(v) = config.start_paused { + rt = quote! { #rt.start_paused(#v) }; + } let header = { if is_test { @@ -254,7 +299,7 @@ fn parse_knobs( .enable_all() .build() .unwrap() - .block_on(async { #body }) + .block_on(async #body) } }; |