From ef8013c985a95a72f1be3833ef6fa610e44457f8 Mon Sep 17 00:00:00 2001 From: imbolc Date: Sat, 26 Dec 2020 11:26:49 +0300 Subject: [PATCH] Add support for async main --- src/manifest.rs | 5 ++++- tests/data/script-async-main.rs | 14 ++++++++++++++ tests/tests/script.rs | 9 +++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 tests/data/script-async-main.rs diff --git a/src/manifest.rs b/src/manifest.rs index 0cdde82..c9d3746 100644 --- a/src/manifest.rs +++ b/src/manifest.rs @@ -52,7 +52,10 @@ pub fn split_input( let (manifest, source) = find_embedded_manifest(content).unwrap_or((Manifest::Toml(""), content)); - let source = if source.lines().any(|line| line.starts_with("fn main()")) { + let source = if source + .lines() + .any(|line| line.starts_with("fn main()") || line.starts_with("async fn main()")) + { source.to_string() } else { format!("fn main() -> Result<(), Box> {{\n {{\n {} }}\n Ok(())\n}}", source) diff --git a/tests/data/script-async-main.rs b/tests/data/script-async-main.rs new file mode 100644 index 0000000..b49a104 --- /dev/null +++ b/tests/data/script-async-main.rs @@ -0,0 +1,14 @@ +//! This is merged into a default manifest in order to form the full package manifest: +//! +//! ```cargo +//! [dependencies] +//! boolinator = "=0.1.0" +//! tokio = { version = "1", features = ["full"] } +//! ``` +use boolinator::Boolinator; + +#[tokio::main] +async fn main() { + println!("--output--"); + println!("{:?}", true.as_some(1)); +} diff --git a/tests/tests/script.rs b/tests/tests/script.rs index 72658d0..10ecdcf 100644 --- a/tests/tests/script.rs +++ b/tests/tests/script.rs @@ -152,3 +152,12 @@ fn script_without_main_question_mark() { .stderr .starts_with("Error: Os { code: 2, kind: NotFound, message:")); } + +#[test] +fn test_script_async_main() { + let out = rust_script!("tests/data/script-async-main.rs").unwrap(); + scan!(out.stdout_output(); + ("Some(1)") => () + ) + .unwrap() +}