feature. See also
. The project being documented here (as the example) is the Zig library itself.
ConfigHeader.addValueInner
fn addValueInner(config_header: *ConfigHeader, name: []const u8, comptime T: type, value: T) !void
File
Code
fn addValueInner(config_header: *ConfigHeader, name: []const u8, comptime T: type, value: T) !void {
const arena = config_header.step.owner.allocator;
switch (@typeInfo(T)) {
.null => {
try config_header.values.put(arena, name, .undef);
},
.void => {
try config_header.values.put(arena, name, .defined);
},
.bool => {
try config_header.values.put(arena, name, .{ .boolean = value });
},
.int => {
try config_header.values.put(arena, name, .{ .int = value });
},
.comptime_int => {
try config_header.values.put(arena, name, .{ .int = value });
},
.@"enum", .enum_literal => {
try config_header.values.put(arena, name, .{ .ident = @tagName(value) });
},
.optional => {
if (value) |x| {
return addValueInner(config_header, name, @TypeOf(x), x);
} else {
try config_header.values.put(arena, name, .undef);
}
},
.pointer => |ptr| {
switch (@typeInfo(ptr.child)) {
.array => |array| {
if (ptr.size == .one and array.child == u8) {
try config_header.values.put(arena, name, .{ .string = value });
return;
}
},
.int => {
if (ptr.size == .slice and ptr.child == u8) {
try config_header.values.put(arena, name, .{ .string = value });
return;
}
},
else => {},
}
@compileError("unsupported ConfigHeader value type: " ++ @typeName(T));
},
else => @compileError("unsupported ConfigHeader value type: " ++ @typeName(T)),
}
}