1use http;
4use httparse;
5use std::error;
6use std::fmt;
7use std::io;
8use std::io::ErrorKind;
9
10pub type Result<T> = std::result::Result<T, Error>;
12
13#[derive(Debug)]
15pub enum Error {
16 InvalidHttpRequest,
18 Http(http::Error),
20 Io(io::Error),
22 HttpParse(httparse::Error),
24}
25
26impl fmt::Display for Error {
27 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
28 match *self {
29 Self::InvalidHttpRequest => write!(f, "The http request is invalid"),
31 Self::Http(ref e) => e.fmt(f),
32 Self::Io(ref e) => e.fmt(f),
33 Self::HttpParse(ref e) => e.fmt(f),
34 }
35 }
36}
37
38impl error::Error for Error {
39 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
40 match *self {
41 Self::InvalidHttpRequest => None,
42 Self::Http(ref e) => Some(e),
43 Self::Io(ref e) => Some(e),
44 Self::HttpParse(ref e) => Some(e),
45 }
46 }
47}
48
49impl From<io::Error> for Error {
50 fn from(err: io::Error) -> Self {
51 Self::Io(err)
52 }
53}
54
55impl From<http::Error> for Error {
56 fn from(err: http::Error) -> Self {
57 Self::Http(err)
58 }
59}
60
61impl From<httparse::Error> for Error {
62 fn from(err: httparse::Error) -> Self {
63 Self::HttpParse(err)
64 }
65}
66
67pub fn wasi_err_to_io_err(err: u16) -> std::io::Result<()> {
69 if err == 0 {
70 Ok(())
71 } else {
72 Err(std::io::Error::from(match err {
73 __WASI_ENOENT => ErrorKind::NotFound,
74 __WASI_EACCES => ErrorKind::PermissionDenied,
75 __WASI_ECONNREFUSED => ErrorKind::ConnectionRefused,
76 __WASI_ECONNRESET => ErrorKind::ConnectionReset,
77 __WASI_ECONNABORTED => ErrorKind::ConnectionAborted,
78 __WASI_ENOTCONN => ErrorKind::NotConnected,
79 __WASI_EADDRINUSE => ErrorKind::AddrInUse,
80 __WASI_EADDRNOTAVAIL => ErrorKind::AddrNotAvailable,
81 __WASI_EPIPE => ErrorKind::BrokenPipe,
82 __WASI_EEXIST => ErrorKind::AlreadyExists,
83 __WASI_EAGAIN => ErrorKind::WouldBlock,
84 __WASI_EINVAL => ErrorKind::InvalidInput,
85 __WASI_ETIMEDOUT => ErrorKind::TimedOut,
86 __WASI_EINTR => ErrorKind::Interrupted,
87 __WASI_EIO => ErrorKind::Other,
88 _ => ErrorKind::Other,
89 }))
90 }
91}
92
93pub const __WASI_ESUCCESS: u16 = 0;
95
96pub const __WASI_E2BIG: u16 = 1;
98
99pub const __WASI_EACCES: u16 = 2;
101
102pub const __WASI_EADDRINUSE: u16 = 3;
104
105pub const __WASI_EADDRNOTAVAIL: u16 = 4;
107
108pub const __WASI_EAFNOSUPPORT: u16 = 5;
110
111pub const __WASI_EAGAIN: u16 = 6;
113
114pub const __WASI_EALREADY: u16 = 7;
116
117pub const __WASI_EBADF: u16 = 8;
119
120pub const __WASI_EBADMSG: u16 = 9;
122
123pub const __WASI_EBUSY: u16 = 10;
125
126pub const __WASI_ECANCELED: u16 = 11;
128
129pub const __WASI_ECHILD: u16 = 12;
131
132pub const __WASI_ECONNABORTED: u16 = 13;
134
135pub const __WASI_ECONNREFUSED: u16 = 14;
137
138pub const __WASI_ECONNRESET: u16 = 15;
140
141pub const __WASI_EDEADLK: u16 = 16;
143
144pub const __WASI_EDESTADDRREQ: u16 = 17;
146
147pub const __WASI_EDOM: u16 = 18;
149
150pub const __WASI_EDQUOT: u16 = 19;
152
153pub const __WASI_EEXIST: u16 = 20;
155
156pub const __WASI_EFAULT: u16 = 21;
158
159pub const __WASI_EFBIG: u16 = 22;
161
162pub const __WASI_EHOSTUNREACH: u16 = 23;
164
165pub const __WASI_EIDRM: u16 = 24;
167
168pub const __WASI_EILSEQ: u16 = 25;
170
171pub const __WASI_EINPROGRESS: u16 = 26;
173
174pub const __WASI_EINTR: u16 = 27;
176
177pub const __WASI_EINVAL: u16 = 28;
179
180pub const __WASI_EIO: u16 = 29;
182
183pub const __WASI_EISCONN: u16 = 30;
185
186pub const __WASI_EISDIR: u16 = 31;
188
189pub const __WASI_ELOOP: u16 = 32;
191
192pub const __WASI_EMFILE: u16 = 33;
194
195pub const __WASI_EMLINK: u16 = 34;
197
198pub const __WASI_EMSGSIZE: u16 = 35;
200
201pub const __WASI_EMULTIHOP: u16 = 36;
203
204pub const __WASI_ENAMETOOLONG: u16 = 37;
206
207pub const __WASI_ENETDOWN: u16 = 38;
209
210pub const __WASI_ENETRESET: u16 = 39;
212
213pub const __WASI_ENETUNREACH: u16 = 40;
215
216pub const __WASI_ENFILE: u16 = 41;
218
219pub const __WASI_ENOBUFS: u16 = 42;
221
222pub const __WASI_ENODEV: u16 = 43;
224
225pub const __WASI_ENOENT: u16 = 44;
227
228pub const __WASI_ENOEXEC: u16 = 45;
230
231pub const __WASI_ENOLCK: u16 = 46;
233
234pub const __WASI_ENOLINK: u16 = 47;
236
237pub const __WASI_ENOMEM: u16 = 48;
239
240pub const __WASI_ENOMSG: u16 = 49;
242
243pub const __WASI_ENOPROTOOPT: u16 = 50;
245
246pub const __WASI_ENOSPC: u16 = 51;
248
249pub const __WASI_ENOSYS: u16 = 52;
251
252pub const __WASI_ENOTCONN: u16 = 53;
254
255pub const __WASI_ENOTDIR: u16 = 54;
257
258pub const __WASI_ENOTEMPTY: u16 = 55;
260
261pub const __WASI_ENOTRECOVERABLE: u16 = 56;
263
264pub const __WASI_ENOTSOCK: u16 = 57;
266
267pub const __WASI_ENOTSUP: u16 = 58;
269
270pub const __WASI_ENOTTY: u16 = 59;
272
273pub const __WASI_ENXIO: u16 = 60;
275
276pub const __WASI_EOVERFLOW: u16 = 61;
278
279pub const __WASI_EOWNERDEAD: u16 = 62;
281
282pub const __WASI_EPERM: u16 = 63;
284
285pub const __WASI_EPIPE: u16 = 64;
287
288pub const __WASI_EPROTO: u16 = 65;
290
291pub const __WASI_EPROTONOSUPPORT: u16 = 66;
293
294pub const __WASI_EPROTOTYPE: u16 = 67;
296
297pub const __WASI_ERANGE: u16 = 68;
299
300pub const __WASI_EROFS: u16 = 69;
302
303pub const __WASI_ESPIPE: u16 = 70;
305
306pub const __WASI_ESRCH: u16 = 71;
308
309pub const __WASI_ESTALE: u16 = 72;
311
312pub const __WASI_ETIMEDOUT: u16 = 73;
314
315pub const __WASI_ETXTBSY: u16 = 74;
317
318pub const __WASI_EXDEV: u16 = 75;
320
321pub const __WASI_ENOTCAPABLE: u16 = 76;