summaryrefslogtreecommitdiff
path: root/src/libuv/error.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/libuv/error.zig')
-rw-r--r--src/libuv/error.zig185
1 files changed, 185 insertions, 0 deletions
diff --git a/src/libuv/error.zig b/src/libuv/error.zig
new file mode 100644
index 000000000..1bab2d6fc
--- /dev/null
+++ b/src/libuv/error.zig
@@ -0,0 +1,185 @@
+const std = @import("std");
+const testing = std.testing;
+const c = @import("c.zig");
+
+/// Errors that libuv can produce
+///
+/// http://docs.libuv.org/en/v1.x/errors.html
+pub const Error = error{
+ E2BIG,
+ EACCES,
+ EADDRINUSE,
+ EADDRNOTAVAIL,
+ EAFNOSUPPORT,
+ EAGAIN,
+ EAI_ADDRFAMILY,
+ EAI_AGAIN,
+ EAI_BADFLAGS,
+ EAI_BADHINTS,
+ EAI_CANCELED,
+ EAI_FAIL,
+ EAI_FAMILY,
+ EAI_MEMORY,
+ EAI_NODATA,
+ EAI_NONAME,
+ EAI_OVERFLOW,
+ EAI_PROTOCOL,
+ EAI_SERVICE,
+ EAI_SOCKTYPE,
+ EALREADY,
+ EBADF,
+ EBUSY,
+ ECANCELED,
+ ECHARSET,
+ ECONNABORTED,
+ ECONNREFUSED,
+ ECONNRESET,
+ EDESTADDRREQ,
+ EEXIST,
+ EFAULT,
+ EFBIG,
+ EHOSTUNREACH,
+ EINTR,
+ EINVAL,
+ EIO,
+ EISCONN,
+ EISDIR,
+ ELOOP,
+ EMFILE,
+ EMSGSIZE,
+ ENAMETOOLONG,
+ ENETDOWN,
+ ENETUNREACH,
+ ENFILE,
+ ENOBUFS,
+ ENODEV,
+ ENOENT,
+ ENOMEM,
+ ENONET,
+ ENOPROTOOPT,
+ ENOSPC,
+ ENOSYS,
+ ENOTCONN,
+ ENOTDIR,
+ ENOTEMPTY,
+ ENOTSOCK,
+ ENOTSUP,
+ EPERM,
+ EPIPE,
+ EPROTO,
+ EPROTONOSUPPORT,
+ EPROTOTYPE,
+ ERANGE,
+ EROFS,
+ ESHUTDOWN,
+ ESPIPE,
+ ESRCH,
+ ETIMEDOUT,
+ ETXTBSY,
+ EXDEV,
+ UNKNOWN,
+ EOF,
+ ENXIO,
+ EMLINK,
+ EHOSTDOWN,
+ EREMOTEIO,
+ ENOTTY,
+ EFTYPE,
+ EILSEQ,
+ ESOCKTNOSUPPORT,
+};
+
+/// Convert the result of a libuv API call to an error (or no error).
+pub fn convertError(r: i32) !void {
+ if (r >= 0) return;
+
+ return switch (r) {
+ c.UV_E2BIG => Error.E2BIG,
+ c.UV_EACCES => Error.EACCES,
+ c.UV_EADDRINUSE => Error.EADDRINUSE,
+ c.UV_EADDRNOTAVAIL => Error.EADDRNOTAVAIL,
+ c.UV_EAFNOSUPPORT => Error.EAFNOSUPPORT,
+ c.UV_EAGAIN => Error.EAGAIN,
+ c.UV_EAI_ADDRFAMILY => Error.EAI_ADDRFAMILY,
+ c.UV_EAI_AGAIN => Error.EAI_AGAIN,
+ c.UV_EAI_BADFLAGS => Error.EAI_BADFLAGS,
+ c.UV_EAI_BADHINTS => Error.EAI_BADHINTS,
+ c.UV_EAI_CANCELED => Error.EAI_CANCELED,
+ c.UV_EAI_FAIL => Error.EAI_FAIL,
+ c.UV_EAI_FAMILY => Error.EAI_FAMILY,
+ c.UV_EAI_MEMORY => Error.EAI_MEMORY,
+ c.UV_EAI_NODATA => Error.EAI_NODATA,
+ c.UV_EAI_NONAME => Error.EAI_NONAME,
+ c.UV_EAI_OVERFLOW => Error.EAI_OVERFLOW,
+ c.UV_EAI_PROTOCOL => Error.EAI_PROTOCOL,
+ c.UV_EAI_SERVICE => Error.EAI_SERVICE,
+ c.UV_EAI_SOCKTYPE => Error.EAI_SOCKTYPE,
+ c.UV_EALREADY => Error.EALREADY,
+ c.UV_EBADF => Error.EBADF,
+ c.UV_EBUSY => Error.EBUSY,
+ c.UV_ECANCELED => Error.ECANCELED,
+ c.UV_ECHARSET => Error.ECHARSET,
+ c.UV_ECONNABORTED => Error.ECONNABORTED,
+ c.UV_ECONNREFUSED => Error.ECONNREFUSED,
+ c.UV_ECONNRESET => Error.ECONNRESET,
+ c.UV_EDESTADDRREQ => Error.EDESTADDRREQ,
+ c.UV_EEXIST => Error.EEXIST,
+ c.UV_EFAULT => Error.EFAULT,
+ c.UV_EFBIG => Error.EFBIG,
+ c.UV_EHOSTUNREACH => Error.EHOSTUNREACH,
+ c.UV_EINTR => Error.EINTR,
+ c.UV_EINVAL => Error.EINVAL,
+ c.UV_EIO => Error.EIO,
+ c.UV_EISCONN => Error.EISCONN,
+ c.UV_EISDIR => Error.EISDIR,
+ c.UV_ELOOP => Error.ELOOP,
+ c.UV_EMFILE => Error.EMFILE,
+ c.UV_EMSGSIZE => Error.EMSGSIZE,
+ c.UV_ENAMETOOLONG => Error.ENAMETOOLONG,
+ c.UV_ENETDOWN => Error.ENETDOWN,
+ c.UV_ENETUNREACH => Error.ENETUNREACH,
+ c.UV_ENFILE => Error.ENFILE,
+ c.UV_ENOBUFS => Error.ENOBUFS,
+ c.UV_ENODEV => Error.ENODEV,
+ c.UV_ENOENT => Error.ENOENT,
+ c.UV_ENOMEM => Error.ENOMEM,
+ c.UV_ENONET => Error.ENONET,
+ c.UV_ENOPROTOOPT => Error.ENOPROTOOPT,
+ c.UV_ENOSPC => Error.ENOSPC,
+ c.UV_ENOSYS => Error.ENOSYS,
+ c.UV_ENOTCONN => Error.ENOTCONN,
+ c.UV_ENOTDIR => Error.ENOTDIR,
+ c.UV_ENOTEMPTY => Error.ENOTEMPTY,
+ c.UV_ENOTSOCK => Error.ENOTSOCK,
+ c.UV_ENOTSUP => Error.ENOTSUP,
+ c.UV_EPERM => Error.EPERM,
+ c.UV_EPIPE => Error.EPIPE,
+ c.UV_EPROTO => Error.EPROTO,
+ c.UV_EPROTONOSUPPORT => Error.EPROTONOSUPPORT,
+ c.UV_EPROTOTYPE => Error.EPROTOTYPE,
+ c.UV_ERANGE => Error.ERANGE,
+ c.UV_EROFS => Error.EROFS,
+ c.UV_ESHUTDOWN => Error.ESHUTDOWN,
+ c.UV_ESPIPE => Error.ESPIPE,
+ c.UV_ESRCH => Error.ESRCH,
+ c.UV_ETIMEDOUT => Error.ETIMEDOUT,
+ c.UV_ETXTBSY => Error.ETXTBSY,
+ c.UV_EXDEV => Error.EXDEV,
+ c.UV_UNKNOWN => Error.UNKNOWN,
+ c.UV_EOF => Error.EOF,
+ c.UV_ENXIO => Error.ENXIO,
+ c.UV_EHOSTDOWN => Error.EHOSTDOWN,
+ c.UV_EREMOTEIO => Error.EREMOTEIO,
+ c.UV_ENOTTY => Error.ENOTTY,
+ c.UV_EFTYPE => Error.EFTYPE,
+ c.UV_EILSEQ => Error.EILSEQ,
+ c.UV_ESOCKTNOSUPPORT => Error.ESOCKTNOSUPPORT,
+ else => unreachable,
+ };
+}
+
+test {
+ // This is mostly just forcing our error type and function to be
+ // codegenned and run once to ensure we have all the types.
+ try testing.expectError(Error.EFTYPE, convertError(c.UV_EFTYPE));
+}