Skip to content

Commit d2e89d8

Browse files
authored
unify WIT files (#2283)
* unify WIT files This addresses two issues: - When upgrading to WASI 0.2.0, I briefly considered bumping the `fermyon:spin` package version to 2.2.0 and updating the Rust and Go SDKs to use WASI 0.2.0. I later decided against that due to semver concerns, but forgot to change the package version back to 2.0.0. Complicating things further was that the package version under wit-2023-10-18 was still 2.0.0, and that's the one we were actually using in `spin-core`, so we didn't notice there was a problem until someone tried to use the version under wit-0.2.0 instead. - Having three separate WIT directories with inconsistent duplicates is obviously confusing, so I've unified them. This unfortunately resulted in a lot of (superficial) code changes since `wit-bindgen` now needs to generate separate modules for various WASI package versions, but at least we've eliminated the duplication and ambiguity. Signed-off-by: Joel Dice <[email protected]> * use aliases to omit versions in wasi compat modules Signed-off-by: Joel Dice <[email protected]> --------- Signed-off-by: Joel Dice <[email protected]>
1 parent 5c7ad91 commit d2e89d8

File tree

161 files changed

+258
-1074
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

161 files changed

+258
-1074
lines changed

crates/core/src/wasi_2023_10_18.rs

Lines changed: 105 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -14,91 +14,111 @@ mod latest {
1414
}
1515
}
1616

17-
wasmtime::component::bindgen!({
18-
path: "../../wit-2023-10-18",
19-
interfaces: r#"
20-
include wasi:http/[email protected];
21-
22-
// NB: this is handling the historical behavior where Spin supported
23-
// more than "just" this snaphsot of the proxy world but additionally
24-
// other CLI-related interfaces.
25-
include wasi:cli/[email protected];
26-
"#,
27-
async: {
28-
only_imports: [
29-
"[method]descriptor.access-at",
30-
"[method]descriptor.advise",
31-
"[method]descriptor.change-directory-permissions-at",
32-
"[method]descriptor.change-file-permissions-at",
33-
"[method]descriptor.create-directory-at",
34-
"[method]descriptor.get-flags",
35-
"[method]descriptor.get-type",
36-
"[method]descriptor.is-same-object",
37-
"[method]descriptor.link-at",
38-
"[method]descriptor.lock-exclusive",
39-
"[method]descriptor.lock-shared",
40-
"[method]descriptor.metadata-hash",
41-
"[method]descriptor.metadata-hash-at",
42-
"[method]descriptor.open-at",
43-
"[method]descriptor.read",
44-
"[method]descriptor.read-directory",
45-
"[method]descriptor.readlink-at",
46-
"[method]descriptor.remove-directory-at",
47-
"[method]descriptor.rename-at",
48-
"[method]descriptor.set-size",
49-
"[method]descriptor.set-times",
50-
"[method]descriptor.set-times-at",
51-
"[method]descriptor.stat",
52-
"[method]descriptor.stat-at",
53-
"[method]descriptor.symlink-at",
54-
"[method]descriptor.sync",
55-
"[method]descriptor.sync-data",
56-
"[method]descriptor.try-lock-exclusive",
57-
"[method]descriptor.try-lock-shared",
58-
"[method]descriptor.unlink-file-at",
59-
"[method]descriptor.unlock",
60-
"[method]descriptor.write",
61-
"[method]input-stream.read",
62-
"[method]input-stream.blocking-read",
63-
"[method]input-stream.blocking-skip",
64-
"[method]input-stream.skip",
65-
"[method]output-stream.forward",
66-
"[method]output-stream.splice",
67-
"[method]output-stream.blocking-splice",
68-
"[method]output-stream.blocking-flush",
69-
"[method]output-stream.blocking-write",
70-
"[method]output-stream.blocking-write-and-flush",
71-
"[method]output-stream.blocking-write-zeroes-and-flush",
72-
"[method]directory-entry-stream.read-directory-entry",
73-
"poll-list",
74-
"poll-one",
75-
],
76-
},
77-
with: {
78-
"wasi:io/poll/pollable": latest::io::poll::Pollable,
79-
"wasi:io/streams/input-stream": latest::io::streams::InputStream,
80-
"wasi:io/streams/output-stream": latest::io::streams::OutputStream,
81-
"wasi:io/streams/error": latest::io::streams::Error,
82-
"wasi:filesystem/types/directory-entry-stream": latest::filesystem::types::DirectoryEntryStream,
83-
"wasi:filesystem/types/descriptor": latest::filesystem::types::Descriptor,
84-
"wasi:cli/terminal-input/terminal-input": latest::cli::terminal_input::TerminalInput,
85-
"wasi:cli/terminal-output/terminal-output": latest::cli::terminal_output::TerminalOutput,
86-
"wasi:sockets/tcp/tcp-socket": latest::sockets::tcp::TcpSocket,
87-
"wasi:sockets/udp/udp-socket": UdpSocket,
88-
"wasi:sockets/network/network": latest::sockets::network::Network,
89-
"wasi:sockets/ip-name-lookup/resolve-address-stream": latest::sockets::ip_name_lookup::ResolveAddressStream,
90-
"wasi:http/types/incoming-response": latest::http::types::IncomingResponse,
91-
"wasi:http/types/incoming-request": latest::http::types::IncomingRequest,
92-
"wasi:http/types/incoming-body": latest::http::types::IncomingBody,
93-
"wasi:http/types/outgoing-response": latest::http::types::OutgoingResponse,
94-
"wasi:http/types/outgoing-request": latest::http::types::OutgoingRequest,
95-
"wasi:http/types/outgoing-body": latest::http::types::OutgoingBody,
96-
"wasi:http/types/fields": latest::http::types::Fields,
97-
"wasi:http/types/response-outparam": latest::http::types::ResponseOutparam,
98-
"wasi:http/types/future-incoming-response": latest::http::types::FutureIncomingResponse,
99-
"wasi:http/types/future-trailers": latest::http::types::FutureTrailers,
100-
},
101-
});
17+
mod bindings {
18+
use super::latest;
19+
pub use super::UdpSocket;
20+
21+
wasmtime::component::bindgen!({
22+
path: "../../wit",
23+
interfaces: r#"
24+
include wasi:http/[email protected];
25+
26+
// NB: this is handling the historical behavior where Spin supported
27+
// more than "just" this snaphsot of the proxy world but additionally
28+
// other CLI-related interfaces.
29+
include wasi:cli/[email protected];
30+
"#,
31+
async: {
32+
only_imports: [
33+
"[method]descriptor.access-at",
34+
"[method]descriptor.advise",
35+
"[method]descriptor.change-directory-permissions-at",
36+
"[method]descriptor.change-file-permissions-at",
37+
"[method]descriptor.create-directory-at",
38+
"[method]descriptor.get-flags",
39+
"[method]descriptor.get-type",
40+
"[method]descriptor.is-same-object",
41+
"[method]descriptor.link-at",
42+
"[method]descriptor.lock-exclusive",
43+
"[method]descriptor.lock-shared",
44+
"[method]descriptor.metadata-hash",
45+
"[method]descriptor.metadata-hash-at",
46+
"[method]descriptor.open-at",
47+
"[method]descriptor.read",
48+
"[method]descriptor.read-directory",
49+
"[method]descriptor.readlink-at",
50+
"[method]descriptor.remove-directory-at",
51+
"[method]descriptor.rename-at",
52+
"[method]descriptor.set-size",
53+
"[method]descriptor.set-times",
54+
"[method]descriptor.set-times-at",
55+
"[method]descriptor.stat",
56+
"[method]descriptor.stat-at",
57+
"[method]descriptor.symlink-at",
58+
"[method]descriptor.sync",
59+
"[method]descriptor.sync-data",
60+
"[method]descriptor.try-lock-exclusive",
61+
"[method]descriptor.try-lock-shared",
62+
"[method]descriptor.unlink-file-at",
63+
"[method]descriptor.unlock",
64+
"[method]descriptor.write",
65+
"[method]input-stream.read",
66+
"[method]input-stream.blocking-read",
67+
"[method]input-stream.blocking-skip",
68+
"[method]input-stream.skip",
69+
"[method]output-stream.forward",
70+
"[method]output-stream.splice",
71+
"[method]output-stream.blocking-splice",
72+
"[method]output-stream.blocking-flush",
73+
"[method]output-stream.blocking-write",
74+
"[method]output-stream.blocking-write-and-flush",
75+
"[method]output-stream.blocking-write-zeroes-and-flush",
76+
"[method]directory-entry-stream.read-directory-entry",
77+
"poll-list",
78+
"poll-one",
79+
],
80+
},
81+
with: {
82+
"wasi:io/poll/pollable": latest::io::poll::Pollable,
83+
"wasi:io/streams/input-stream": latest::io::streams::InputStream,
84+
"wasi:io/streams/output-stream": latest::io::streams::OutputStream,
85+
"wasi:io/streams/error": latest::io::streams::Error,
86+
"wasi:filesystem/types/directory-entry-stream": latest::filesystem::types::DirectoryEntryStream,
87+
"wasi:filesystem/types/descriptor": latest::filesystem::types::Descriptor,
88+
"wasi:cli/terminal-input/terminal-input": latest::cli::terminal_input::TerminalInput,
89+
"wasi:cli/terminal-output/terminal-output": latest::cli::terminal_output::TerminalOutput,
90+
"wasi:sockets/tcp/tcp-socket": latest::sockets::tcp::TcpSocket,
91+
"wasi:sockets/udp/udp-socket": UdpSocket,
92+
"wasi:sockets/network/network": latest::sockets::network::Network,
93+
"wasi:sockets/ip-name-lookup/resolve-address-stream": latest::sockets::ip_name_lookup::ResolveAddressStream,
94+
"wasi:http/types/incoming-response": latest::http::types::IncomingResponse,
95+
"wasi:http/types/incoming-request": latest::http::types::IncomingRequest,
96+
"wasi:http/types/incoming-body": latest::http::types::IncomingBody,
97+
"wasi:http/types/outgoing-response": latest::http::types::OutgoingResponse,
98+
"wasi:http/types/outgoing-request": latest::http::types::OutgoingRequest,
99+
"wasi:http/types/outgoing-body": latest::http::types::OutgoingBody,
100+
"wasi:http/types/fields": latest::http::types::Fields,
101+
"wasi:http/types/response-outparam": latest::http::types::ResponseOutparam,
102+
"wasi:http/types/future-incoming-response": latest::http::types::FutureIncomingResponse,
103+
"wasi:http/types/future-trailers": latest::http::types::FutureTrailers,
104+
},
105+
});
106+
}
107+
108+
mod wasi {
109+
pub use super::bindings::wasi::{
110+
cli0_2_0_rc_2023_10_18 as cli, clocks0_2_0_rc_2023_10_18 as clocks,
111+
filesystem0_2_0_rc_2023_10_18 as filesystem, http0_2_0_rc_2023_10_18 as http,
112+
io0_2_0_rc_2023_10_18 as io, random0_2_0_rc_2023_10_18 as random,
113+
sockets0_2_0_rc_2023_10_18 as sockets,
114+
};
115+
}
116+
117+
pub mod exports {
118+
pub mod wasi {
119+
pub use super::super::bindings::exports::wasi::http0_2_0_rc_2023_10_18 as http;
120+
}
121+
}
102122

103123
use wasi::cli::terminal_input::TerminalInput;
104124
use wasi::cli::terminal_output::TerminalOutput;

crates/core/src/wasi_2023_11_10.rs

Lines changed: 99 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -14,86 +14,105 @@ mod latest {
1414
}
1515
}
1616

17-
wasmtime::component::bindgen!({
18-
path: "../../wit-2023-11-10",
19-
interfaces: r#"
20-
include wasi:http/[email protected];
21-
22-
// NB: this is handling the historical behavior where Spin supported
23-
// more than "just" this snapshot of the proxy world but additionally
24-
// other CLI-related interfaces.
25-
include wasi:cli/[email protected];
26-
"#,
27-
async: {
28-
only_imports: [
29-
"[method]descriptor.advise",
30-
"[method]descriptor.create-directory-at",
31-
"[method]descriptor.get-flags",
32-
"[method]descriptor.get-type",
33-
"[method]descriptor.is-same-object",
34-
"[method]descriptor.link-at",
35-
"[method]descriptor.metadata-hash",
36-
"[method]descriptor.metadata-hash-at",
37-
"[method]descriptor.open-at",
38-
"[method]descriptor.read",
39-
"[method]descriptor.read-directory",
40-
"[method]descriptor.readlink-at",
41-
"[method]descriptor.remove-directory-at",
42-
"[method]descriptor.rename-at",
43-
"[method]descriptor.set-size",
44-
"[method]descriptor.set-times",
45-
"[method]descriptor.set-times-at",
46-
"[method]descriptor.stat",
47-
"[method]descriptor.stat-at",
48-
"[method]descriptor.symlink-at",
49-
"[method]descriptor.sync",
50-
"[method]descriptor.sync-data",
51-
"[method]descriptor.unlink-file-at",
52-
"[method]descriptor.write",
53-
"[method]input-stream.read",
54-
"[method]input-stream.blocking-read",
55-
"[method]input-stream.blocking-skip",
56-
"[method]input-stream.skip",
57-
"[method]output-stream.splice",
58-
"[method]output-stream.blocking-splice",
59-
"[method]output-stream.blocking-flush",
60-
"[method]output-stream.blocking-write",
61-
"[method]output-stream.blocking-write-and-flush",
62-
"[method]output-stream.blocking-write-zeroes-and-flush",
63-
"[method]directory-entry-stream.read-directory-entry",
64-
"[method]pollable.block",
65-
"[method]pollable.ready",
66-
"poll",
67-
]
68-
},
69-
with: {
70-
"wasi:io/poll/pollable": latest::io::poll::Pollable,
71-
"wasi:io/streams/input-stream": latest::io::streams::InputStream,
72-
"wasi:io/streams/output-stream": latest::io::streams::OutputStream,
73-
"wasi:io/error/error": latest::io::error::Error,
74-
"wasi:filesystem/types/directory-entry-stream": latest::filesystem::types::DirectoryEntryStream,
75-
"wasi:filesystem/types/descriptor": latest::filesystem::types::Descriptor,
76-
"wasi:cli/terminal-input/terminal-input": latest::cli::terminal_input::TerminalInput,
77-
"wasi:cli/terminal-output/terminal-output": latest::cli::terminal_output::TerminalOutput,
78-
"wasi:sockets/tcp/tcp-socket": latest::sockets::tcp::TcpSocket,
79-
"wasi:sockets/udp/udp-socket": latest::sockets::udp::UdpSocket,
80-
"wasi:sockets/udp/outgoing-datagram-stream": latest::sockets::udp::OutgoingDatagramStream,
81-
"wasi:sockets/udp/incoming-datagram-stream": latest::sockets::udp::IncomingDatagramStream,
82-
"wasi:sockets/network/network": latest::sockets::network::Network,
83-
"wasi:sockets/ip-name-lookup/resolve-address-stream": latest::sockets::ip_name_lookup::ResolveAddressStream,
84-
"wasi:http/types/incoming-response": latest::http::types::IncomingResponse,
85-
"wasi:http/types/incoming-request": latest::http::types::IncomingRequest,
86-
"wasi:http/types/incoming-body": latest::http::types::IncomingBody,
87-
"wasi:http/types/outgoing-response": latest::http::types::OutgoingResponse,
88-
"wasi:http/types/outgoing-request": latest::http::types::OutgoingRequest,
89-
"wasi:http/types/outgoing-body": latest::http::types::OutgoingBody,
90-
"wasi:http/types/fields": latest::http::types::Fields,
91-
"wasi:http/types/response-outparam": latest::http::types::ResponseOutparam,
92-
"wasi:http/types/future-incoming-response": latest::http::types::FutureIncomingResponse,
93-
"wasi:http/types/future-trailers": latest::http::types::FutureTrailers,
94-
"wasi:http/types/request-options": latest::http::types::RequestOptions,
95-
},
96-
});
17+
mod bindings {
18+
use super::latest;
19+
20+
wasmtime::component::bindgen!({
21+
path: "../../wit",
22+
interfaces: r#"
23+
include wasi:http/[email protected];
24+
25+
// NB: this is handling the historical behavior where Spin supported
26+
// more than "just" this snapshot of the proxy world but additionally
27+
// other CLI-related interfaces.
28+
include wasi:cli/[email protected];
29+
"#,
30+
async: {
31+
only_imports: [
32+
"[method]descriptor.advise",
33+
"[method]descriptor.create-directory-at",
34+
"[method]descriptor.get-flags",
35+
"[method]descriptor.get-type",
36+
"[method]descriptor.is-same-object",
37+
"[method]descriptor.link-at",
38+
"[method]descriptor.metadata-hash",
39+
"[method]descriptor.metadata-hash-at",
40+
"[method]descriptor.open-at",
41+
"[method]descriptor.read",
42+
"[method]descriptor.read-directory",
43+
"[method]descriptor.readlink-at",
44+
"[method]descriptor.remove-directory-at",
45+
"[method]descriptor.rename-at",
46+
"[method]descriptor.set-size",
47+
"[method]descriptor.set-times",
48+
"[method]descriptor.set-times-at",
49+
"[method]descriptor.stat",
50+
"[method]descriptor.stat-at",
51+
"[method]descriptor.symlink-at",
52+
"[method]descriptor.sync",
53+
"[method]descriptor.sync-data",
54+
"[method]descriptor.unlink-file-at",
55+
"[method]descriptor.write",
56+
"[method]input-stream.read",
57+
"[method]input-stream.blocking-read",
58+
"[method]input-stream.blocking-skip",
59+
"[method]input-stream.skip",
60+
"[method]output-stream.splice",
61+
"[method]output-stream.blocking-splice",
62+
"[method]output-stream.blocking-flush",
63+
"[method]output-stream.blocking-write",
64+
"[method]output-stream.blocking-write-and-flush",
65+
"[method]output-stream.blocking-write-zeroes-and-flush",
66+
"[method]directory-entry-stream.read-directory-entry",
67+
"[method]pollable.block",
68+
"[method]pollable.ready",
69+
"poll",
70+
]
71+
},
72+
with: {
73+
"wasi:io/poll/pollable": latest::io::poll::Pollable,
74+
"wasi:io/streams/input-stream": latest::io::streams::InputStream,
75+
"wasi:io/streams/output-stream": latest::io::streams::OutputStream,
76+
"wasi:io/error/error": latest::io::error::Error,
77+
"wasi:filesystem/types/directory-entry-stream": latest::filesystem::types::DirectoryEntryStream,
78+
"wasi:filesystem/types/descriptor": latest::filesystem::types::Descriptor,
79+
"wasi:cli/terminal-input/terminal-input": latest::cli::terminal_input::TerminalInput,
80+
"wasi:cli/terminal-output/terminal-output": latest::cli::terminal_output::TerminalOutput,
81+
"wasi:sockets/tcp/tcp-socket": latest::sockets::tcp::TcpSocket,
82+
"wasi:sockets/udp/udp-socket": latest::sockets::udp::UdpSocket,
83+
"wasi:sockets/udp/outgoing-datagram-stream": latest::sockets::udp::OutgoingDatagramStream,
84+
"wasi:sockets/udp/incoming-datagram-stream": latest::sockets::udp::IncomingDatagramStream,
85+
"wasi:sockets/network/network": latest::sockets::network::Network,
86+
"wasi:sockets/ip-name-lookup/resolve-address-stream": latest::sockets::ip_name_lookup::ResolveAddressStream,
87+
"wasi:http/types/incoming-response": latest::http::types::IncomingResponse,
88+
"wasi:http/types/incoming-request": latest::http::types::IncomingRequest,
89+
"wasi:http/types/incoming-body": latest::http::types::IncomingBody,
90+
"wasi:http/types/outgoing-response": latest::http::types::OutgoingResponse,
91+
"wasi:http/types/outgoing-request": latest::http::types::OutgoingRequest,
92+
"wasi:http/types/outgoing-body": latest::http::types::OutgoingBody,
93+
"wasi:http/types/fields": latest::http::types::Fields,
94+
"wasi:http/types/response-outparam": latest::http::types::ResponseOutparam,
95+
"wasi:http/types/future-incoming-response": latest::http::types::FutureIncomingResponse,
96+
"wasi:http/types/future-trailers": latest::http::types::FutureTrailers,
97+
"wasi:http/types/request-options": latest::http::types::RequestOptions,
98+
},
99+
});
100+
}
101+
102+
mod wasi {
103+
pub use super::bindings::wasi::{
104+
cli0_2_0_rc_2023_11_10 as cli, clocks0_2_0_rc_2023_11_10 as clocks,
105+
filesystem0_2_0_rc_2023_11_10 as filesystem, http0_2_0_rc_2023_11_10 as http,
106+
io0_2_0_rc_2023_11_10 as io, random0_2_0_rc_2023_11_10 as random,
107+
sockets0_2_0_rc_2023_11_10 as sockets,
108+
};
109+
}
110+
111+
pub mod exports {
112+
pub mod wasi {
113+
pub use super::super::bindings::exports::wasi::http0_2_0_rc_2023_11_10 as http;
114+
}
115+
}
97116

98117
use wasi::cli::terminal_input::TerminalInput;
99118
use wasi::cli::terminal_output::TerminalOutput;

crates/trigger-http/benches/spin-http-benchmark/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
wit_bindgen::generate!({
22
world: "http-trigger",
3-
path: "../../../../wit-2023-10-18/deps/spin@unversioned",
3+
path: "../../../../wit/deps/spin@unversioned",
44
exports: {
55
"fermyon:spin/inbound-http": SpinHttp,
66
}

crates/trigger-redis/tests/rust/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::str::{from_utf8, Utf8Error};
22

33
wit_bindgen::generate!({
44
world: "redis-trigger",
5-
path: "../../../../wit-2023-10-18/deps/spin@unversioned",
5+
path: "../../../../wit/deps/spin@unversioned",
66
exports: {
77
"fermyon:spin/inbound-redis": SpinRedis,
88
}

0 commit comments

Comments
 (0)