Skip to content

Commit 33eb76a

Browse files
authored
Merge pull request #20 from fibonacci1729/async
2 parents 45dd9e1 + 9d8628c commit 33eb76a

File tree

6 files changed

+155
-8
lines changed

6 files changed

+155
-8
lines changed

Cargo.lock

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/mqtt-app/Cargo.lock

Lines changed: 128 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/mqtt-app/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use chrono::{DateTime, Utc};
22
use spin_mqtt_sdk::{mqtt_component, Payload};
33

44
#[mqtt_component]
5-
fn handle_message(message: Payload) -> anyhow::Result<()> {
5+
async fn handle_message(message: Payload) -> anyhow::Result<()> {
66
let datetime: DateTime<Utc> = std::time::SystemTime::now().into();
77
let formatted_time = datetime.format("%Y-%m-%d %H:%M:%S.%f").to_string();
88

sdk/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ include = ["../spin-mqtt.wit"]
88
name = "spin_mqtt_sdk"
99

1010
[dependencies]
11+
spin-executor = "3.0.1"
1112
spin-mqtt-macro = { path = "macro" }
1213
wit-bindgen = { workspace = true }

sdk/macro/src/lib.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const WIT_PATH: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/../../spin-mqtt.wit
77
pub fn mqtt_component(_attr: TokenStream, item: TokenStream) -> TokenStream {
88
let func = syn::parse_macro_input!(item as syn::ItemFn);
99
let func_name = &func.sig.ident;
10+
let await_postfix = func.sig.asyncness.map(|_| quote!(.await));
1011
let preamble = preamble();
1112

1213
quote!(
@@ -17,13 +18,15 @@ pub fn mqtt_component(_attr: TokenStream, item: TokenStream) -> TokenStream {
1718
}
1819
impl self::preamble::Guest for preamble::Mqtt {
1920
fn handle_message(payload: ::spin_mqtt_sdk::Payload) -> ::std::result::Result<(), ::spin_mqtt_sdk::Error> {
20-
match super::#func_name(payload) {
21-
::std::result::Result::Ok(()) => ::std::result::Result::Ok(()),
22-
::std::result::Result::Err(e) => {
23-
eprintln!("{}", e);
24-
::std::result::Result::Err(::spin_mqtt_sdk::Error::Other(e.to_string()))
25-
},
26-
}
21+
::spin_mqtt_sdk::executor::run(async move {
22+
match super::#func_name(payload)#await_postfix {
23+
::std::result::Result::Ok(()) => ::std::result::Result::Ok(()),
24+
::std::result::Result::Err(e) => {
25+
eprintln!("{}", e);
26+
::std::result::Result::Err(::spin_mqtt_sdk::Error::Other(e.to_string()))
27+
},
28+
}
29+
})
2730
}
2831
}
2932
}

sdk/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
pub use spin_mqtt_macro::mqtt_component;
22

3+
#[doc(hidden)]
4+
pub use spin_executor as executor;
5+
36
#[doc(hidden)]
47
pub mod wit {
58
#![allow(missing_docs)]

0 commit comments

Comments
 (0)