DoxigAlpha

addValueInner

Function parameters

Parameters

#
config_header:*ConfigHeader
name:[]const u8
T:type
value:T

Type definitions in this namespace

Types

#

Functions in this namespace

Functions

#
getOutput
Deprecated; use `getOutputFile`.

= .config_header

Values

#
base_id
= .config_header

Source

Implementation

#
fn addValueInner(config_header: *ConfigHeader, name: []const u8, comptime T: type, value: T) !void {
    switch (@typeInfo(T)) {
        .null => {
            try config_header.values.put(name, .undef);
        },
        .void => {
            try config_header.values.put(name, .defined);
        },
        .bool => {
            try config_header.values.put(name, .{ .boolean = value });
        },
        .int => {
            try config_header.values.put(name, .{ .int = value });
        },
        .comptime_int => {
            try config_header.values.put(name, .{ .int = value });
        },
        .@"enum", .enum_literal => {
            try config_header.values.put(name, .{ .ident = @tagName(value) });
        },
        .optional => {
            if (value) |x| {
                return addValueInner(config_header, name, @TypeOf(x), x);
            } else {
                try config_header.values.put(name, .undef);
            }
        },
        .pointer => |ptr| {
            switch (@typeInfo(ptr.child)) {
                .array => |array| {
                    if (ptr.size == .one and array.child == u8) {
                        try config_header.values.put(name, .{ .string = value });
                        return;
                    }
                },
                .int => {
                    if (ptr.size == .slice and ptr.child == u8) {
                        try config_header.values.put(name, .{ .string = value });
                        return;
                    }
                },
                else => {},
            }

            @compileError("unsupported ConfigHeader value type: " ++ @typeName(T));
        },
        else => @compileError("unsupported ConfigHeader value type: " ++ @typeName(T)),
    }
}