async_wasi/snapshots/common/
error.rs1use std::{fmt::Debug, io::ErrorKind};
2
3pub use super::types::__wasi_errno_t as wasi_errno;
4
5#[derive(Debug, Eq, PartialEq, Clone, Copy)]
6pub struct Errno(pub wasi_errno::Type);
7
8impl Default for Errno {
9 fn default() -> Self {
10 Errno::__WASI_ERRNO_SUCCESS
11 }
12}
13
14impl Errno {
15 pub const __WASI_ERRNO_SUCCESS: Errno = Errno(0);
16 pub const __WASI_ERRNO_2BIG: Errno = Errno(1);
17 pub const __WASI_ERRNO_ACCES: Errno = Errno(2);
18 pub const __WASI_ERRNO_ADDRINUSE: Errno = Errno(3);
19 pub const __WASI_ERRNO_ADDRNOTAVAIL: Errno = Errno(4);
20 pub const __WASI_ERRNO_AFNOSUPPORT: Errno = Errno(5);
21 pub const __WASI_ERRNO_AGAIN: Errno = Errno(6);
22 pub const __WASI_ERRNO_ALREADY: Errno = Errno(7);
23 pub const __WASI_ERRNO_BADF: Errno = Errno(8);
24 pub const __WASI_ERRNO_BADMSG: Errno = Errno(9);
25 pub const __WASI_ERRNO_BUSY: Errno = Errno(10);
26 pub const __WASI_ERRNO_CANCELED: Errno = Errno(11);
27 pub const __WASI_ERRNO_CHILD: Errno = Errno(12);
28 pub const __WASI_ERRNO_CONNABORTED: Errno = Errno(13);
29 pub const __WASI_ERRNO_CONNREFUSED: Errno = Errno(14);
30 pub const __WASI_ERRNO_CONNRESET: Errno = Errno(15);
31 pub const __WASI_ERRNO_DEADLK: Errno = Errno(16);
32 pub const __WASI_ERRNO_DESTADDRREQ: Errno = Errno(17);
33 pub const __WASI_ERRNO_DOM: Errno = Errno(18);
34 pub const __WASI_ERRNO_DQUOT: Errno = Errno(19);
35 pub const __WASI_ERRNO_EXIST: Errno = Errno(20);
36 pub const __WASI_ERRNO_FAULT: Errno = Errno(21);
37 pub const __WASI_ERRNO_FBIG: Errno = Errno(22);
38 pub const __WASI_ERRNO_HOSTUNREACH: Errno = Errno(23);
39 pub const __WASI_ERRNO_IDRM: Errno = Errno(24);
40 pub const __WASI_ERRNO_ILSEQ: Errno = Errno(25);
41 pub const __WASI_ERRNO_INPROGRESS: Errno = Errno(26);
42 pub const __WASI_ERRNO_INTR: Errno = Errno(27);
43 pub const __WASI_ERRNO_INVAL: Errno = Errno(28);
44 pub const __WASI_ERRNO_IO: Errno = Errno(29);
45 pub const __WASI_ERRNO_ISCONN: Errno = Errno(30);
46 pub const __WASI_ERRNO_ISDIR: Errno = Errno(31);
47 pub const __WASI_ERRNO_LOOP: Errno = Errno(32);
48 pub const __WASI_ERRNO_MFILE: Errno = Errno(33);
49 pub const __WASI_ERRNO_MLINK: Errno = Errno(34);
50 pub const __WASI_ERRNO_MSGSIZE: Errno = Errno(35);
51 pub const __WASI_ERRNO_MULTIHOP: Errno = Errno(36);
52 pub const __WASI_ERRNO_NAMETOOLONG: Errno = Errno(37);
53 pub const __WASI_ERRNO_NETDOWN: Errno = Errno(38);
54 pub const __WASI_ERRNO_NETRESET: Errno = Errno(39);
55 pub const __WASI_ERRNO_NETUNREACH: Errno = Errno(40);
56 pub const __WASI_ERRNO_NFILE: Errno = Errno(41);
57 pub const __WASI_ERRNO_NOBUFS: Errno = Errno(42);
58 pub const __WASI_ERRNO_NODEV: Errno = Errno(43);
59 pub const __WASI_ERRNO_NOENT: Errno = Errno(44);
60 pub const __WASI_ERRNO_NOEXEC: Errno = Errno(45);
61 pub const __WASI_ERRNO_NOLCK: Errno = Errno(46);
62 pub const __WASI_ERRNO_NOLINK: Errno = Errno(47);
63 pub const __WASI_ERRNO_NOMEM: Errno = Errno(48);
64 pub const __WASI_ERRNO_NOMSG: Errno = Errno(49);
65 pub const __WASI_ERRNO_NOPROTOOPT: Errno = Errno(50);
66 pub const __WASI_ERRNO_NOSPC: Errno = Errno(51);
67 pub const __WASI_ERRNO_NOSYS: Errno = Errno(52);
68 pub const __WASI_ERRNO_NOTCONN: Errno = Errno(53);
69 pub const __WASI_ERRNO_NOTDIR: Errno = Errno(54);
70 pub const __WASI_ERRNO_NOTEMPTY: Errno = Errno(55);
71 pub const __WASI_ERRNO_NOTRECOVERABLE: Errno = Errno(56);
72 pub const __WASI_ERRNO_NOTSOCK: Errno = Errno(57);
73 pub const __WASI_ERRNO_NOTSUP: Errno = Errno(58);
74 pub const __WASI_ERRNO_NOTTY: Errno = Errno(59);
75 pub const __WASI_ERRNO_NXIO: Errno = Errno(60);
76 pub const __WASI_ERRNO_OVERFLOW: Errno = Errno(61);
77 pub const __WASI_ERRNO_OWNERDEAD: Errno = Errno(62);
78 pub const __WASI_ERRNO_PERM: Errno = Errno(63);
79 pub const __WASI_ERRNO_PIPE: Errno = Errno(64);
80 pub const __WASI_ERRNO_PROTO: Errno = Errno(65);
81 pub const __WASI_ERRNO_PROTONOSUPPORT: Errno = Errno(66);
82 pub const __WASI_ERRNO_PROTOTYPE: Errno = Errno(67);
83 pub const __WASI_ERRNO_RANGE: Errno = Errno(68);
84 pub const __WASI_ERRNO_ROFS: Errno = Errno(69);
85 pub const __WASI_ERRNO_SPIPE: Errno = Errno(70);
86 pub const __WASI_ERRNO_SRCH: Errno = Errno(71);
87 pub const __WASI_ERRNO_STALE: Errno = Errno(72);
88 pub const __WASI_ERRNO_TIMEDOUT: Errno = Errno(73);
89 pub const __WASI_ERRNO_TXTBSY: Errno = Errno(74);
90 pub const __WASI_ERRNO_XDEV: Errno = Errno(75);
91 pub const __WASI_ERRNO_NOTCAPABLE: Errno = Errno(76);
92 pub const __WASI_ERRNO_AIADDRFAMILY: Errno = Errno(77);
93 pub const __WASI_ERRNO_AIAGAIN: Errno = Errno(78);
94 pub const __WASI_ERRNO_AIBADFLAG: Errno = Errno(79);
95 pub const __WASI_ERRNO_AIFAIL: Errno = Errno(80);
96 pub const __WASI_ERRNO_AIFAMILY: Errno = Errno(81);
97 pub const __WASI_ERRNO_AIMEMORY: Errno = Errno(82);
98 pub const __WASI_ERRNO_AINODATA: Errno = Errno(83);
99 pub const __WASI_ERRNO_AINONAME: Errno = Errno(84);
100 pub const __WASI_ERRNO_AISERVICE: Errno = Errno(85);
101 pub const __WASI_ERRNO_AISOCKTYPE: Errno = Errno(86);
102 pub const __WASI_ERRNO_AISYSTEM: Errno = Errno(87);
103}
104
105impl From<wasi_errno::Type> for Errno {
106 fn from(e: wasi_errno::Type) -> Self {
107 Errno(e)
108 }
109}
110
111impl From<ErrorKind> for Errno {
112 fn from(e: ErrorKind) -> Self {
113 match e {
114 ErrorKind::NotFound => Errno::__WASI_ERRNO_NOENT,
115 ErrorKind::PermissionDenied => Errno::__WASI_ERRNO_PERM,
116 ErrorKind::ConnectionRefused => Errno::__WASI_ERRNO_CONNREFUSED,
117 ErrorKind::ConnectionReset => Errno::__WASI_ERRNO_CONNRESET,
118 ErrorKind::ConnectionAborted => Errno::__WASI_ERRNO_CONNABORTED,
119 ErrorKind::NotConnected => Errno::__WASI_ERRNO_NOTCONN,
120 ErrorKind::AddrInUse => Errno::__WASI_ERRNO_ADDRINUSE,
121 ErrorKind::AddrNotAvailable => Errno::__WASI_ERRNO_ADDRNOTAVAIL,
122 ErrorKind::BrokenPipe => Errno::__WASI_ERRNO_PIPE,
123 ErrorKind::AlreadyExists => Errno::__WASI_ERRNO_EXIST,
124 ErrorKind::WouldBlock => Errno::__WASI_ERRNO_AGAIN,
125 ErrorKind::InvalidInput => Errno::__WASI_ERRNO_INVAL,
126 ErrorKind::InvalidData => Errno::__WASI_ERRNO_IO,
127 ErrorKind::TimedOut => Errno::__WASI_ERRNO_TIMEDOUT,
128 ErrorKind::WriteZero => Errno::__WASI_ERRNO_IO,
129 ErrorKind::Interrupted => Errno::__WASI_ERRNO_INTR,
130 ErrorKind::UnexpectedEof => Errno::__WASI_ERRNO_IO,
131 ErrorKind::Unsupported => Errno::__WASI_ERRNO_NOTSUP,
132 ErrorKind::OutOfMemory => Errno::__WASI_ERRNO_NOMEM,
133 _ => Errno::__WASI_ERRNO_IO,
134 }
135 }
136}
137
138impl From<&std::io::Error> for Errno {
139 fn from(e: &std::io::Error) -> Self {
140 if let Some(error_code) = e.raw_os_error() {
141 match error_code {
142 0 => Errno::__WASI_ERRNO_SUCCESS,
143 libc::E2BIG => Errno::__WASI_ERRNO_2BIG,
144 libc::EACCES => Errno::__WASI_ERRNO_ACCES,
145 libc::EADDRINUSE => Errno::__WASI_ERRNO_ADDRINUSE,
146 libc::EADDRNOTAVAIL => Errno::__WASI_ERRNO_ADDRNOTAVAIL,
147 libc::EAFNOSUPPORT => Errno::__WASI_ERRNO_AFNOSUPPORT,
148 libc::EAGAIN => Errno::__WASI_ERRNO_AGAIN,
149 libc::EALREADY => Errno::__WASI_ERRNO_ALREADY,
150 libc::EBADF => Errno::__WASI_ERRNO_BADF,
151 libc::EBADMSG => Errno::__WASI_ERRNO_BADMSG,
152 libc::EBUSY => Errno::__WASI_ERRNO_BUSY,
153 libc::ECANCELED => Errno::__WASI_ERRNO_CANCELED,
154 libc::ECHILD => Errno::__WASI_ERRNO_CHILD,
155 libc::ECONNABORTED => Errno::__WASI_ERRNO_CONNABORTED,
156 libc::ECONNREFUSED => Errno::__WASI_ERRNO_CONNREFUSED,
157 libc::ECONNRESET => Errno::__WASI_ERRNO_CONNRESET,
158 libc::EDEADLK => Errno::__WASI_ERRNO_DEADLK,
159 libc::EDESTADDRREQ => Errno::__WASI_ERRNO_DESTADDRREQ,
160 libc::EDOM => Errno::__WASI_ERRNO_DOM,
161 #[cfg(unix)]
162 libc::EDQUOT => Errno::__WASI_ERRNO_DQUOT,
163 libc::EEXIST => Errno::__WASI_ERRNO_EXIST,
164 libc::EFAULT => Errno::__WASI_ERRNO_FAULT,
165 libc::EFBIG => Errno::__WASI_ERRNO_FBIG,
166 libc::EHOSTUNREACH => Errno::__WASI_ERRNO_HOSTUNREACH,
167 libc::EIDRM => Errno::__WASI_ERRNO_IDRM,
168 libc::EILSEQ => Errno::__WASI_ERRNO_ILSEQ,
169 libc::EINPROGRESS => Errno::__WASI_ERRNO_INPROGRESS,
170 libc::EINTR => Errno::__WASI_ERRNO_INTR,
171 libc::EINVAL => Errno::__WASI_ERRNO_INVAL,
172 libc::EIO => Errno::__WASI_ERRNO_IO,
173 libc::EISCONN => Errno::__WASI_ERRNO_ISCONN,
174 libc::EISDIR => Errno::__WASI_ERRNO_ISDIR,
175 libc::ELOOP => Errno::__WASI_ERRNO_LOOP,
176 libc::EMFILE => Errno::__WASI_ERRNO_MFILE,
177 libc::EMLINK => Errno::__WASI_ERRNO_MLINK,
178 libc::EMSGSIZE => Errno::__WASI_ERRNO_MSGSIZE,
179 #[cfg(unix)]
180 libc::EMULTIHOP => Errno::__WASI_ERRNO_MULTIHOP,
181 libc::ENAMETOOLONG => Errno::__WASI_ERRNO_NAMETOOLONG,
182 libc::ENETDOWN => Errno::__WASI_ERRNO_NETDOWN,
183 libc::ENETRESET => Errno::__WASI_ERRNO_NETRESET,
184 libc::ENETUNREACH => Errno::__WASI_ERRNO_NETUNREACH,
185 libc::ENFILE => Errno::__WASI_ERRNO_NFILE,
186 libc::ENOBUFS => Errno::__WASI_ERRNO_NOBUFS,
187 libc::ENODEV => Errno::__WASI_ERRNO_NODEV,
188 libc::ENOENT => Errno::__WASI_ERRNO_NOENT,
189 libc::ENOEXEC => Errno::__WASI_ERRNO_NOEXEC,
190 libc::ENOLCK => Errno::__WASI_ERRNO_NOLCK,
191 libc::ENOLINK => Errno::__WASI_ERRNO_NOLINK,
192 libc::ENOMEM => Errno::__WASI_ERRNO_NOMEM,
193 libc::ENOMSG => Errno::__WASI_ERRNO_NOMSG,
194 libc::ENOPROTOOPT => Errno::__WASI_ERRNO_NOPROTOOPT,
195 libc::ENOSPC => Errno::__WASI_ERRNO_NOSPC,
196 libc::ENOSYS => Errno::__WASI_ERRNO_NOSYS,
197 libc::ENOTCONN => Errno::__WASI_ERRNO_NOTCONN,
198 libc::ENOTDIR => Errno::__WASI_ERRNO_NOTDIR,
199 libc::ENOTEMPTY => Errno::__WASI_ERRNO_NOTEMPTY,
200 libc::ENOTRECOVERABLE => Errno::__WASI_ERRNO_NOTRECOVERABLE,
201 libc::ENOTSOCK => Errno::__WASI_ERRNO_NOTSOCK,
202 libc::ENOTSUP => Errno::__WASI_ERRNO_NOTSUP,
203 libc::ENOTTY => Errno::__WASI_ERRNO_NOTTY,
204 libc::ENXIO => Errno::__WASI_ERRNO_NXIO,
205 libc::EOVERFLOW => Errno::__WASI_ERRNO_OVERFLOW,
206 libc::EOWNERDEAD => Errno::__WASI_ERRNO_OWNERDEAD,
207 libc::EPERM => Errno::__WASI_ERRNO_PERM,
208 libc::EPIPE => Errno::__WASI_ERRNO_PIPE,
209 libc::EPROTO => Errno::__WASI_ERRNO_PROTO,
210 libc::EPROTONOSUPPORT => Errno::__WASI_ERRNO_PROTONOSUPPORT,
211 libc::EPROTOTYPE => Errno::__WASI_ERRNO_PROTOTYPE,
212 libc::ERANGE => Errno::__WASI_ERRNO_RANGE,
213 libc::EROFS => Errno::__WASI_ERRNO_ROFS,
214 libc::ESPIPE => Errno::__WASI_ERRNO_SPIPE,
215 libc::ESRCH => Errno::__WASI_ERRNO_SRCH,
216 #[cfg(unix)]
217 libc::ESTALE => Errno::__WASI_ERRNO_STALE,
218 libc::ETIMEDOUT => Errno::__WASI_ERRNO_TIMEDOUT,
219 libc::ETXTBSY => Errno::__WASI_ERRNO_TXTBSY,
220 libc::EXDEV => Errno::__WASI_ERRNO_XDEV,
221 _ => Errno::__WASI_ERRNO_IO,
222 }
223 } else {
224 let kind = e.kind();
225 Errno::from(kind)
226 }
227 }
228}
229
230impl From<std::io::Error> for Errno {
231 fn from(e: std::io::Error) -> Self {
232 Errno::from(&e)
233 }
234}