From cfeeff77833f0e180e116859b2c7370a7c38d8f0 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Sun, 9 Jul 2023 13:42:05 -0700 Subject: [PATCH] add FieldUnion --- src/lib.zig | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/lib.zig b/src/lib.zig index 7b4c234f38900847a14f7a262f003b9c457ea608..4aa8a5c66eaaae4ae6cf796105556b358ee113aa 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -542,3 +542,22 @@ pub fn to_hex(array: anytype) [array.len * 2]u8 { std.fmt.format(fbs.writer(), "{x}", .{std.fmt.fmtSliceHexLower(&array)}) catch unreachable; return res; } + +pub fn FieldUnion(comptime T: type) type { + const infos = std.meta.fields(T); + + var fields: [infos.len]std.builtin.Type.UnionField = undefined; + inline for (infos, 0..) |field, i| { + fields[i] = .{ + .name = field.name, + .type = field.type, + .alignment = field.alignment, + }; + } + return @Type(std.builtin.Type{ .Union = .{ + .layout = .Auto, + .tag_type = std.meta.FieldEnum(T), + .fields = &fields, + .decls = &.{}, + } }); +} -- 2.54.0