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