Zig 0.17.0-dev (Split by item)

This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig library itself.

addValueInner

ConfigHeader.addValueInner
fn addValueInner(config_header: *ConfigHeader, name: []const u8, comptime T: type, value: T) !void

File

lib/std/Build/Step/ConfigHeader.zig:119

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)),
    }
}