diff --git a/Cargo.lock b/Cargo.lock index fe56051..ba28217 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2333,7 +2333,6 @@ dependencies = [ "wasmtime", "wasmtime-wasi", "wasmtime-wasi-http", - "wit-bindgen 0.54.0", "wit-component 0.245.1", ] @@ -2862,7 +2861,7 @@ dependencies = [ [[package]] name = "wasip3" version = "0.5.0+wasi-0.3.0-rc-2026-03-15" -source = "git+https://github.com/bytecodealliance/wasi-rs#270004491d553c6d87a3d790ccd5a2eb788b4d89" +source = "git+https://github.com/bytecodealliance/wasi-rs#9d39023643c64a34f420beb2bca0aae950e29591" dependencies = [ "bytes", "http 1.4.0", @@ -3773,7 +3772,6 @@ version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bb00254d5051d69730ee32580b7373592f10ad786757c372f0f2c7b61f86a2c" dependencies = [ - "bitflags 2.11.0", "futures", "wit-bindgen-rust-macro 0.54.0", ] diff --git a/crates/spin-sdk-macro/src/lib.rs b/crates/spin-sdk-macro/src/lib.rs index ec5eb7a..a91bd1b 100644 --- a/crates/spin-sdk-macro/src/lib.rs +++ b/crates/spin-sdk-macro/src/lib.rs @@ -128,10 +128,10 @@ pub fn http_service(_attr: TokenStream, item: TokenStream) -> TokenStream { use ::spin_sdk::http::IntoResponse; struct Spin; - ::spin_sdk::http::wasip3::http::service::export!(Spin); + ::spin_sdk::wasip3::http::service::export!(Spin); - impl ::spin_sdk::http::wasip3::exports::http::handler::Guest for self::Spin { - async fn handle(request: ::spin_sdk::http::wasip3::http::types::Request) -> Result<::spin_sdk::http::wasip3::http::types::Response, ::spin_sdk::http::wasip3::http::types::ErrorCode> { + impl ::spin_sdk::wasip3::exports::http::handler::Guest for self::Spin { + async fn handle(request: ::spin_sdk::wasip3::http::types::Request) -> Result<::spin_sdk::wasip3::http::types::Response, ::spin_sdk::wasip3::http::types::ErrorCode> { let request = <::spin_sdk::http::Request as ::spin_sdk::http::FromRequest>::from_request(request)?; ::spin_sdk::http::IntoResponse::into_response(super::#func_name(request).await) } diff --git a/crates/spin-sdk/Cargo.toml b/crates/spin-sdk/Cargo.toml index 4bbb6a1..bb355fa 100644 --- a/crates/spin-sdk/Cargo.toml +++ b/crates/spin-sdk/Cargo.toml @@ -23,7 +23,7 @@ name = "spin_sdk" [features] default = ["http", "key-value", "json", "llm", "mqtt", "mysql", "pg", "postgres4-types", "redis", "sqlite", "variables", "export-sdk-language"] export-sdk-language = [] -http = ["dep:wasip3", "dep:bytes", "dep:http-body", "dep:http-body-util", "dep:hyperium"] +http = ["dep:bytes", "dep:http-body", "dep:http-body-util", "dep:hyperium"] key-value = [] json = ["dep:serde", "dep:serde_json"] llm = [] @@ -37,16 +37,15 @@ variables = [] [dependencies] spin-sdk-macro = { version = "5.1.1", path = "../spin-sdk-macro" } -wit-bindgen = "0.54" anyhow = "1" thiserror = "2.0.17" +wasip3 = { version = "0.5.0", git = "https://github.com/bytecodealliance/wasi-rs", features = ["http-compat", "wit-bindgen-macros"] } # http bytes = { version = "1.11.1", optional = true } http-body = { version = "1.0.1", optional = true } http-body-util = { version = "0.1.3", optional = true } hyperium = { package = "http", version = "1.3.1", optional = true } -wasip3 = { version = "0.5.0", git = "https://github.com/bytecodealliance/wasi-rs", features = ["http-compat"], optional = true } # pg chrono = { version = "0.4.42", optional = true } diff --git a/crates/spin-sdk/src/http.rs b/crates/spin-sdk/src/http.rs index 5a16db5..bc9b0bf 100644 --- a/crates/spin-sdk/src/http.rs +++ b/crates/spin-sdk/src/http.rs @@ -1,11 +1,4 @@ -#[doc(hidden)] -pub use wasip3; - -pub use wasip3::{ - http_compat::{IncomingMessage, Request, Response}, - wit_bindgen::{self, spawn}, - wit_future, wit_stream, -}; +pub use wasip3::http_compat::{IncomingMessage, Request, Response}; use hyperium as http; pub use hyperium::{HeaderMap, HeaderName, HeaderValue, Method, StatusCode, Uri}; diff --git a/crates/spin-sdk/src/key_value.rs b/crates/spin-sdk/src/key_value.rs index 3ae8688..0afbe9a 100644 --- a/crates/spin-sdk/src/key_value.rs +++ b/crates/spin-sdk/src/key_value.rs @@ -16,6 +16,8 @@ //! # } //! ``` +use crate::wit_bindgen; + #[doc(hidden)] /// Module containing wit bindgen generated code. /// @@ -23,7 +25,10 @@ pub mod wit { #![allow(missing_docs)] + use crate::wit_bindgen; + wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-kv", path: "wit", generate_all, diff --git a/crates/spin-sdk/src/lib.rs b/crates/spin-sdk/src/lib.rs index 5eae92d..f2a1e76 100644 --- a/crates/spin-sdk/src/lib.rs +++ b/crates/spin-sdk/src/lib.rs @@ -84,14 +84,15 @@ extern "C" fn __spin_sdk_language() {} #[export_name = concat!("spin-sdk-commit-", env!("SDK_COMMIT"))] extern "C" fn __spin_sdk_hash() {} -#[doc(hidden)] -pub use wit_bindgen; +pub use wasip3::{self, wit_bindgen}; #[doc(hidden)] pub mod experimental { #![allow(missing_docs)] + use crate::wit_bindgen; wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-experimental", path: "wit", generate_all, diff --git a/crates/spin-sdk/src/llm.rs b/crates/spin-sdk/src/llm.rs index f33d3cf..4c72f70 100644 --- a/crates/spin-sdk/src/llm.rs +++ b/crates/spin-sdk/src/llm.rs @@ -4,8 +4,10 @@ /// This is only meant for internal consumption. pub mod wit { #![allow(missing_docs)] + use crate::wit_bindgen; wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-llm", path: "wit", generate_all, diff --git a/crates/spin-sdk/src/mqtt.rs b/crates/spin-sdk/src/mqtt.rs index d12ba40..d1e76f8 100644 --- a/crates/spin-sdk/src/mqtt.rs +++ b/crates/spin-sdk/src/mqtt.rs @@ -30,8 +30,10 @@ /// This is only meant for internal consumption. pub mod wit { #![allow(missing_docs)] + use crate::wit_bindgen; wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-mqtt", path: "wit", generate_all, diff --git a/crates/spin-sdk/src/mysql.rs b/crates/spin-sdk/src/mysql.rs index 41350b0..1b7d901 100644 --- a/crates/spin-sdk/src/mysql.rs +++ b/crates/spin-sdk/src/mysql.rs @@ -27,8 +27,10 @@ /// This is only meant for internal consumption. pub mod wit { #![allow(missing_docs)] + use crate::wit_bindgen; wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-mysql", path: "wit", generate_all, diff --git a/crates/spin-sdk/src/pg.rs b/crates/spin-sdk/src/pg.rs index e9070d5..6d0fac9 100644 --- a/crates/spin-sdk/src/pg.rs +++ b/crates/spin-sdk/src/pg.rs @@ -34,6 +34,7 @@ // error fields instead of just a string #![allow(clippy::result_large_err)] +use crate::wit_bindgen; use std::sync::Arc; #[doc(hidden)] @@ -42,8 +43,10 @@ use std::sync::Arc; /// This is only meant for internal consumption. pub mod wit { #![allow(missing_docs)] + use crate::wit_bindgen; wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-pg", path: "wit", generate_all, diff --git a/crates/spin-sdk/src/redis.rs b/crates/spin-sdk/src/redis.rs index 5493c5b..3b0dfd5 100644 --- a/crates/spin-sdk/src/redis.rs +++ b/crates/spin-sdk/src/redis.rs @@ -27,8 +27,10 @@ /// This is only meant for internal consumption. pub mod wit { #![allow(missing_docs)] + use crate::wit_bindgen; wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-redis", path: "wit", generate_all, diff --git a/crates/spin-sdk/src/sqlite.rs b/crates/spin-sdk/src/sqlite.rs index 204055d..b01d441 100644 --- a/crates/spin-sdk/src/sqlite.rs +++ b/crates/spin-sdk/src/sqlite.rs @@ -1,11 +1,15 @@ +use crate::wit_bindgen; + #[doc(hidden)] /// Module containing wit bindgen generated code. /// /// This is only meant for internal consumption. pub mod wit { #![allow(missing_docs)] + use crate::wit_bindgen; wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-sqlite", path: "wit", generate_all, diff --git a/crates/spin-sdk/src/variables.rs b/crates/spin-sdk/src/variables.rs index da91ff4..111ff10 100644 --- a/crates/spin-sdk/src/variables.rs +++ b/crates/spin-sdk/src/variables.rs @@ -38,8 +38,10 @@ /// This is only meant for internal consumption. pub mod wit { #![allow(missing_docs)] + use crate::wit_bindgen; wit_bindgen::generate!({ + runtime_path: "crate::wit_bindgen::rt", world: "spin-sdk-variables", path: "wit", generate_all, diff --git a/examples/http-concurrent-outbound-calls/src/lib.rs b/examples/http-concurrent-outbound-calls/src/lib.rs index 1485488..19832ac 100644 --- a/examples/http-concurrent-outbound-calls/src/lib.rs +++ b/examples/http-concurrent-outbound-calls/src/lib.rs @@ -28,7 +28,7 @@ async fn handle_concurrent_outbound_http_calls( // Spawn a task to run the application logic and stream the results // to the client. `spawn` continues to run this future even after the // function has exited with the return of the Response object. - spin_sdk::http::spawn(handle_concurrent_outbound_http_calls_impl(tx)); + spin_sdk::wasip3::spawn(handle_concurrent_outbound_http_calls_impl(tx)); Ok(http::Response::new(body)) } diff --git a/examples/http-streaming/src/lib.rs b/examples/http-streaming/src/lib.rs index b34693b..cf734f8 100644 --- a/examples/http-streaming/src/lib.rs +++ b/examples/http-streaming/src/lib.rs @@ -28,9 +28,9 @@ async fn handle_streaming(request: Request) -> impl IntoResponse { // side will be sent out over the HTTP response. let (mut tx, body) = bytes_stream_body(); - // Use wit_bindgen::spawn to allow the async block to keep running + // Use wasip3::spawn to allow the async block to keep running // after the handler returns. - spin_sdk::http::spawn(async move { + spin_sdk::wasip3::spawn(async move { tx.send("-- INBOUND MESSAGE --\n".into()).await.unwrap(); // Keep processing data from the incoming body stream until it ends... loop {