diff options
| author | Mitchell Hashimoto <mitchell.hashimoto@gmail.com> | 2022-04-21 09:33:32 -0700 |
|---|---|---|
| committer | Mitchell Hashimoto <mitchell.hashimoto@gmail.com> | 2022-04-21 09:33:32 -0700 |
| commit | 21ee510471e75cbc778258e3fb90408f1d76198c (patch) | |
| tree | 9762742fb4b6cab7a17805d8760859837a3f110d /src/libuv/error.zig | |
| parent | 55351487a9112ae4b6afda41d15297e1151ab023 (diff) | |
starting libuv bindings
Diffstat (limited to 'src/libuv/error.zig')
| -rw-r--r-- | src/libuv/error.zig | 185 |
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)); +} |
