DVUI

validateFieldPtrType

Validate if the @typeInfo() of the passed in field_value_ptr is in the set of required_types

Parameters

#
field_name:?[]const u8
?[]const u8
required_types:[]const std.builtin.TypeId
[]const std.builtin.TypeId
caller:[]const u8
[]const u8
ptr_type:type
type

Source

Implementation

#
pub fn validateFieldPtrType(
    field_name: ?[]const u8,
    comptime required_types: []const std.builtin.TypeId,
    comptime caller: []const u8,
    comptime ptr_type: type,
) void {
    const type_info = @typeInfo(ptr_type);
    switch (type_info) {
        .pointer => |ptr| {
            switch (ptr.size) {
                .one => {
                    inline for (required_types) |required_t| {
                        if (@typeInfo(ptr.child) == required_t) {
                            return;
                        }
                    }
                },
                else => {},
            }
        },
        else => {},
    }
    if (field_name) |field_name_| {
        @compileError(std.fmt.comptimePrint(
            "Cannot display field {s}. {s} requires a pointer to a {s}, but received a {s} to a {s}.",
            .{ field_name_, caller, requiredTypesToString(required_types), @tagName(type_info), @typeName(ptr_type) },
        ));
    } else {
        @compileError(std.fmt.comptimePrint(
            "{s} requires a pointer to a {s}, but received a {s} to a {s}.",
            .{ caller, requiredTypesToString(required_types), @tagName(type_info), @typeName(ptr_type) },
        ));
    }
}