1#![deny(unused_mut)]
2#![allow(non_camel_case_types, clippy::identity_op)]
3
4extern crate wasmer_types as wasmer;
11
12pub use crate::types::time::*;
13pub use bus::*;
14pub use directory::*;
15pub use file::*;
16pub use io::*;
17pub use net::*;
18pub use signal::*;
19pub use subscription::*;
20
21pub type __wasi_exitcode_t = u32;
22pub type __wasi_userdata_t = u64;
23
24pub mod bus {
25 use crate::wasi::{
26 BusDataFormat, BusEventClose, BusEventExit, BusEventFault, BusEventType, Cid, OptionCid,
27 };
28 use wasmer_derive::ValueType;
29 use wasmer_types::MemorySize;
30
31 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
34 #[repr(C)]
35 pub struct __wasi_busevent_call_t<M: MemorySize> {
36 pub parent: OptionCid,
37 pub cid: Cid,
38 pub format: BusDataFormat,
39 pub topic_ptr: M::Offset,
40 pub topic_len: M::Offset,
41 pub buf_ptr: M::Offset,
42 pub buf_len: M::Offset,
43 }
44
45 #[derive(Copy, Clone)]
46 #[repr(C)]
47 pub union __wasi_busevent_u<M: MemorySize> {
48 pub noop: u8,
49 pub exit: BusEventExit,
50 pub call: __wasi_busevent_call_t<M>,
51 pub result: __wasi_busevent_result_t<M>,
52 pub fault: BusEventFault,
53 pub close: BusEventClose,
54 }
55
56 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
57 #[repr(C)]
58 pub struct __wasi_busevent_result_t<M: MemorySize> {
59 pub format: BusDataFormat,
60 pub cid: Cid,
61 pub buf_ptr: M::Offset,
62 pub buf_len: M::Offset,
63 }
64
65 #[derive(Copy, Clone)]
66 #[repr(C)]
67 pub struct __wasi_busevent_t<M: MemorySize> {
68 pub tag: BusEventType,
69 pub u: __wasi_busevent_u<M>,
70 }
71}
72
73pub mod file {
74 use crate::wasi::{Fd, Rights};
75
76 pub use crate::wasi::{EventFdFlags, FileDelta, LookupFlags, Oflags};
77
78 pub const __WASI_STDIN_FILENO: Fd = 0;
79 pub const __WASI_STDOUT_FILENO: Fd = 1;
80 pub const __WASI_STDERR_FILENO: Fd = 2;
81
82 pub const EVENT_FD_FLAGS_SEMAPHORE: EventFdFlags = 1;
83
84 pub const __WASI_LOOKUP_SYMLINK_FOLLOW: LookupFlags = 1;
85
86 #[allow(dead_code)]
88 pub fn print_right_set(rights: Rights) {
89 let mut right_set = std::collections::BTreeSet::new();
91 for i in 0..28 {
92 let cur_right = rights & Rights::from_bits(1 << i).unwrap();
93 if !cur_right.is_empty() {
94 right_set.insert(cur_right.to_str().unwrap_or("INVALID RIGHT"));
95 }
96 }
97 println!("{:#?}", right_set);
98 }
99}
100
101pub mod directory {
102 use crate::wasi;
103 use std::mem;
104
105 pub const __WASI_DIRCOOKIE_START: wasi::Dircookie = 0;
106
107 pub fn dirent_to_le_bytes(ent: &wasi::Dirent) -> Vec<u8> {
108 let out: Vec<u8> = std::iter::empty()
109 .chain(ent.d_next.to_le_bytes())
110 .chain(ent.d_ino.to_le_bytes())
111 .chain(ent.d_namlen.to_le_bytes())
112 .chain(u32::from(ent.d_type as u8).to_le_bytes())
113 .collect();
114
115 assert_eq!(out.len(), mem::size_of::<wasi::Dirent>());
116 out
117 }
118
119 #[cfg(test)]
120 mod tests {
121 use super::dirent_to_le_bytes;
122 use crate::wasi;
123
124 #[test]
125 fn test_dirent_to_le_bytes() {
126 let s = wasi::Dirent {
127 d_next: 0x0123456789abcdef,
128 d_ino: 0xfedcba9876543210,
129 d_namlen: 0xaabbccdd,
130 d_type: wasi::Filetype::Directory,
131 };
132
133 assert_eq!(
134 vec![
135 0xef,
137 0xcd,
138 0xab,
139 0x89,
140 0x67,
141 0x45,
142 0x23,
143 0x01,
144 0x10,
147 0x32,
148 0x54,
149 0x76,
150 0x98,
151 0xba,
152 0xdc,
153 0xfe,
154 0xdd,
157 0xcc,
158 0xbb,
159 0xaa,
160 wasi::Filetype::Directory as u8,
164 0x00,
165 0x00,
166 0x00,
167 ],
168 dirent_to_le_bytes(&s)
169 );
170 }
171 }
172}
173
174pub mod io {
175 use wasmer_derive::ValueType;
176 use wasmer_types::MemorySize;
177
178 pub use crate::wasi::Bool;
179 pub use crate::wasi::Count;
180 pub use crate::wasi::OptionTag;
181 pub use crate::wasi::StdioMode;
182
183 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
184 #[repr(C)]
185 pub struct __wasi_ciovec_t<M: MemorySize> {
186 pub buf: M::Offset,
187 pub buf_len: M::Offset,
188 }
189
190 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
191 #[repr(C)]
192 pub struct __wasi_iovec_t<M: MemorySize> {
193 pub buf: M::Offset,
194 pub buf_len: M::Offset,
195 }
196}
197
198pub mod time {
199 pub use crate::wasi::OptionTimestamp;
200}
201
202pub mod net {
203 use crate::wasi::Addressfamily;
204 use wasmer_derive::ValueType;
205
206 use crate::wasi::OptionTimestamp;
207
208 pub use crate::wasi::{
209 AddrUnspec, AddrUnspecPort, CidrUnspec, HttpHandles, HttpStatus, RiFlags, RoFlags, SdFlags,
210 SiFlags, SockProto, Timeout,
211 };
212
213 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
214 #[repr(C)]
215 pub struct __wasi_hardwareaddress_t {
216 pub octs: [u8; 6],
217 }
218
219 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
220 #[repr(C)]
221 pub struct __wasi_addr_ip4_t {
222 pub octs: [u8; 4],
223 }
224
225 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
226 #[repr(C)]
227 pub struct __wasi_addr_ip4_port_t {
228 pub port: u16,
229 pub ip: __wasi_addr_ip4_t,
230 }
231
232 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
233 #[repr(C)]
234 pub struct __wasi_cidr_ip4_t {
235 pub ip: __wasi_addr_ip4_t,
236 pub prefix: u8,
237 }
238
239 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
240 #[repr(C)]
241 pub struct __wasi_addr_unix_t {
242 pub octs: [u8; 16],
243 }
244
245 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
246 #[repr(C)]
247 pub struct __wasi_addr_unix_port_t {
248 pub port: u16,
249 pub unix: __wasi_addr_unix_t,
250 }
251
252 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
253 #[repr(C)]
254 pub struct __wasi_cidr_unix_t {
255 pub unix: __wasi_addr_unix_t,
256 pub prefix: u8,
257 }
258
259 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
260 #[repr(C)]
261 pub struct __wasi_addr_ip6_t {
262 pub segs: [u8; 16],
263 }
264
265 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
266 #[repr(C)]
267 pub struct __wasi_addr_ip6_port_t {
268 pub port: u16,
269 pub ip: __wasi_addr_ip6_t,
270 }
271
272 #[derive(Debug, Copy, Clone, PartialEq, Eq, ValueType)]
273 #[repr(C)]
274 pub struct __wasi_cidr_ip6_t {
275 pub ip: __wasi_addr_ip6_t,
276 pub prefix: u8,
277 }
278
279 #[derive(Debug, Copy, Clone, ValueType)]
280 #[repr(C)]
281 pub struct __wasi_addr_u {
282 pub octs: [u8; 16],
283 }
284
285 #[derive(Debug, Copy, Clone, ValueType)]
286 #[repr(C)]
287 pub struct __wasi_addr_t {
288 pub tag: Addressfamily,
289 pub u: __wasi_addr_u,
290 }
291
292 #[derive(Debug, Copy, Clone, ValueType)]
293 #[repr(C)]
294 pub struct __wasi_addr_port_u {
295 pub octs: [u8; 18],
296 }
297
298 #[derive(Debug, Copy, Clone, ValueType)]
299 #[repr(C)]
300 pub struct __wasi_addr_port_t {
301 pub tag: Addressfamily,
302 pub u: __wasi_addr_port_u,
303 }
304
305 #[derive(Debug, Copy, Clone, ValueType)]
306 #[repr(C)]
307 pub struct __wasi_cidr_u {
308 pub octs: [u8; 17],
309 }
310
311 #[derive(Debug, Copy, Clone, ValueType)]
312 #[repr(C)]
313 pub struct __wasi_cidr_t {
314 pub tag: Addressfamily,
315 pub u: __wasi_cidr_u,
316 }
317
318 #[derive(Debug, Copy, Clone, ValueType)]
319 #[repr(C)]
320 pub struct Route {
321 pub cidr: __wasi_cidr_t,
322 pub via_router: __wasi_addr_t,
323 pub preferred_until: OptionTimestamp,
324 pub expires_at: OptionTimestamp,
325 }
326
327 pub const __WASI_SOCK_RECV_INPUT_PEEK: RiFlags = 1 << 0;
328 pub const __WASI_SOCK_RECV_INPUT_WAITALL: RiFlags = 1 << 1;
329 pub const __WASI_SOCK_RECV_INPUT_DATA_TRUNCATED: RiFlags = 1 << 2;
330
331 pub const __WASI_SOCK_RECV_OUTPUT_DATA_TRUNCATED: RoFlags = 1 << 0;
332
333 pub const __WASI_SHUT_RD: SdFlags = 1 << 0;
334 pub const __WASI_SHUT_WR: SdFlags = 1 << 1;
335}
336
337pub mod signal {
338 pub use crate::wasi::Signal;
339}
340
341pub mod subscription {
342 pub use crate::wasi::{
343 Eventtype, SubscriptionClock, SubscriptionEnum as EventType, SubscriptionFsReadwrite,
344 };
345}