use crate::await_promise;
use crate::bindings::golem::api::host::PromiseId;
use serde::Serialize;
use serde::de::DeserializeOwned;
pub fn blocking_await_promise_json<T: DeserializeOwned>(
promise_id: &PromiseId,
) -> Result<T, serde_json::Error> {
let promise = crate::bindings::golem::api::host::get_promise(promise_id);
promise.subscribe().block();
let bytes = promise.get().unwrap();
serde_json::from_slice(&bytes)
}
pub async fn await_promise_json<T: DeserializeOwned>(
promise_id: &PromiseId,
) -> Result<T, serde_json::Error> {
let bytes = await_promise(promise_id).await;
serde_json::from_slice(&bytes)
}
pub fn complete_promise_json<T: Serialize>(
promise_id: &PromiseId,
value: T,
) -> Result<bool, serde_json::Error> {
let bytes = serde_json::to_vec(&value)?;
Ok(crate::bindings::golem::api::host::complete_promise(
promise_id, &bytes,
))
}