Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
283 changes: 124 additions & 159 deletions Cargo.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ durable-migrate = { version = "0.1.0", registry = "iop-systems", path = "crates/
durable-runtime = { version = "0.7.0", registry = "iop-systems", path = "crates/durable-runtime" }
durable-bindgen = { version = "0.1.2", registry = "iop-systems", path = "crates/durable-bindgen" }

wasmtime = { version = "41.0" }
wasmtime = { version = "42.0", features = ["anyhow"] }
wit-bindgen-core = { version = "0.51.0" }
wit-bindgen-rust = { version = "0.51.0" }
wit-bindgen-rt = { version = "0.44.0" }
Expand Down
2 changes: 2 additions & 0 deletions crates/durable-runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ mod bindings {
exports: {
default: async | trappable
},

anyhow: true,
});
}

Expand Down
32 changes: 14 additions & 18 deletions crates/durable-runtime/src/plugin/durable/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,32 +40,32 @@ impl Task {
}

impl HostHttpError2 for Task {
async fn message(&mut self, res: Resource<HttpError2>) -> wasmtime::Result<String> {
async fn message(&mut self, res: Resource<HttpError2>) -> anyhow::Result<String> {
let error = self.resources.get(res)?;
Ok(error.to_string())
}

async fn is_timeout(&mut self, res: Resource<HttpError2>) -> wasmtime::Result<bool> {
async fn is_timeout(&mut self, res: Resource<HttpError2>) -> anyhow::Result<bool> {
let error = self.resources.get(res)?;
Ok(error.is_timeout())
}

async fn is_builder(&mut self, res: Resource<HttpError2>) -> wasmtime::Result<bool> {
async fn is_builder(&mut self, res: Resource<HttpError2>) -> anyhow::Result<bool> {
let error = self.resources.get(res)?;
Ok(error.is_builder())
}

async fn is_request(&mut self, res: Resource<HttpError2>) -> wasmtime::Result<bool> {
async fn is_request(&mut self, res: Resource<HttpError2>) -> anyhow::Result<bool> {
let error = self.resources.get(res)?;
Ok(error.is_request())
}

async fn is_connect(&mut self, res: Resource<HttpError2>) -> wasmtime::Result<bool> {
async fn is_connect(&mut self, res: Resource<HttpError2>) -> anyhow::Result<bool> {
let error = self.resources.get(res)?;
Ok(error.is_connect())
}

async fn drop(&mut self, res: Resource<HttpError2>) -> wasmtime::Result<()> {
async fn drop(&mut self, res: Resource<HttpError2>) -> anyhow::Result<()> {
self.resources.remove(res)?;
Ok(())
}
Expand Down Expand Up @@ -123,7 +123,7 @@ impl HostHttpRequest2 for Task {
&mut self,
method: String,
url: String,
) -> wasmtime::Result<Result<Resource<HttpRequest2>, Resource<HttpError2>>> {
) -> anyhow::Result<Result<Resource<HttpRequest2>, Resource<HttpError2>>> {
let config = self.state.config();

Ok(match HttpRequest2::new(method, url, config) {
Expand All @@ -136,7 +136,7 @@ impl HostHttpRequest2 for Task {
&mut self,
res: Resource<HttpRequest2>,
method: String,
) -> wasmtime::Result<Result<(), Resource<HttpError2>>> {
) -> anyhow::Result<Result<(), Resource<HttpError2>>> {
let request = self.resources.get_mut(res)?;

Ok(match HttpRequest2::set_method(request, &method) {
Expand All @@ -149,7 +149,7 @@ impl HostHttpRequest2 for Task {
&mut self,
res: Resource<HttpRequest2>,
url: String,
) -> wasmtime::Result<Result<(), Resource<HttpError2>>> {
) -> anyhow::Result<Result<(), Resource<HttpError2>>> {
let request = self.resources.get_mut(res)?;

Ok(match HttpRequest2::set_url(request, &url) {
Expand All @@ -162,7 +162,7 @@ impl HostHttpRequest2 for Task {
&mut self,
res: Resource<HttpRequest2>,
headers: Vec<HttpHeader>,
) -> wasmtime::Result<Result<(), Resource<HttpError2>>> {
) -> anyhow::Result<Result<(), Resource<HttpError2>>> {
let request = self.resources.get_mut(res)?;

Ok(match HttpRequest2::set_headers(request, &headers) {
Expand All @@ -175,26 +175,22 @@ impl HostHttpRequest2 for Task {
&mut self,
res: Resource<HttpRequest2>,
timeout: u64,
) -> wasmtime::Result<()> {
) -> anyhow::Result<()> {
let request = self.resources.get_mut(res)?;
let config = self.state.config();

HttpRequest2::set_timeout(request, Duration::from_nanos(timeout), config);
Ok(())
}

async fn set_body(
&mut self,
res: Resource<HttpRequest2>,
body: Vec<u8>,
) -> wasmtime::Result<()> {
async fn set_body(&mut self, res: Resource<HttpRequest2>, body: Vec<u8>) -> anyhow::Result<()> {
let request = self.resources.get_mut(res)?;

HttpRequest2::set_body(request, body);
Ok(())
}

async fn drop(&mut self, res: Resource<HttpRequest2>) -> wasmtime::Result<()> {
async fn drop(&mut self, res: Resource<HttpRequest2>) -> anyhow::Result<()> {
self.resources.remove(res)?;
Ok(())
}
Expand Down Expand Up @@ -235,7 +231,7 @@ impl Host for Task {
async fn fetch2(
&mut self,
request: Resource<HttpRequest2>,
) -> wasmtime::Result<Result<HttpResponse, Resource<HttpError2>>> {
) -> anyhow::Result<Result<HttpResponse, Resource<HttpError2>>> {
self.state
.assert_in_transaction("durable:http/http.fetch2")?;

Expand Down
6 changes: 3 additions & 3 deletions crates/durable-runtime/src/plugin/durable/notify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ async fn poll_notification(
}

impl Host for Task {
async fn notification_blocking(&mut self) -> wasmtime::Result<Event> {
async fn notification_blocking(&mut self) -> anyhow::Result<Event> {
if self.state.transaction().is_some() {
anyhow::bail!(
"durable:core/notify.notification-blocking cannot be called from within a \
Expand Down Expand Up @@ -121,7 +121,7 @@ impl Host for Task {
async fn notification_blocking_timeout(
&mut self,
timeout_ns: u64,
) -> wasmtime::Result<Option<Event>> {
) -> anyhow::Result<Option<Event>> {
if self.state.transaction().is_some() {
anyhow::bail!(
"durable:core/notify.notification-blocking-timeout cannot be called from within a \
Expand Down Expand Up @@ -240,7 +240,7 @@ impl Host for Task {
task: i64,
event: String,
data: String,
) -> wasmtime::Result<Result<(), NotifyError>> {
) -> anyhow::Result<Result<(), NotifyError>> {
if self.state.transaction().is_some() {
anyhow::bail!("durable:core/notify.notify cannot be called from within a transaction");
}
Expand Down
Loading
Loading