Path: blob/main/core/posix-node/src/constants.zig
1396 views
// Important; make sure to compile on all supported architectures to make sure these are1// all available.2// To add new constants, define constants in a module (see how it is defined in netdb or unistd),3// then update setting NAMES and VALUES below.45const c = @import("c.zig");6const node = @import("node.zig");7const netdb = @import("netdb.zig");8const signal = @import("signal.zig");9const socket = @import("socket.zig");10const termios = @import("termios.zig");11const unistd = @import("unistd.zig");12const util = @import("util.zig");13const wait = @import("wait.zig");1415const NAMES = netdb.constants.names ++ unistd.constants.names ++ wait.constants.names ++ signal.constants.names ++ socket.constants.names ++ termios.constants.names ++ util.constants.names;1617const VALUES = getValues(netdb.constants) ++ getValues(unistd.constants) ++ getValues(wait.constants) ++ getValues(signal.constants) ++ getValues(socket.constants) ++ getValues(termios.constants) ++ getValues(util.constants);1819// You shouldn't have to change anything below.2021pub fn register(env: c.napi_env, exports: c.napi_value) !void {22try node.registerFunction(env, exports, "getConstants", getConstants);23}2425fn getConstants(env: c.napi_env, info: c.napi_callback_info) callconv(.C) c.napi_value {26_ = info;27var obj = node.createObject(env, "") catch return null;28var i: usize = 0;29for (NAMES) |name| {30setConstant(env, obj, name, VALUES[i]) catch return null;31i += 1;32}33return obj;34}3536fn getValues(comptime constants: anytype) [constants.names.len]u32 {37return _getValues(constants.c_import, constants.names.len, constants.names);38}3940fn _getValues(comptime c_import: anytype, comptime len: usize, comptime names: [len][:0]const u8) [len]u32 {41var x: [names.len]u32 = undefined;42var i = 0;43for (names) |constant| {44x[i] = @field(c_import, constant);45i += 1;46}47return x;48}4950fn setConstant(env: c.napi_env, object: c.napi_value, key: [:0]const u8, value: u32) !void {51var result: c.napi_value = undefined;52if (c.napi_create_uint32(env, value, &result) != c.napi_ok) {53return node.throw(env, "error creating u32 constant");54}55if (c.napi_set_named_property(env, object, @ptrCast([*c]const u8, key), result) != c.napi_ok) {56return node.throw(env, "error setting constant");57}58}596061