| ... | ... | @@ -542,3 +542,22 @@ pub fn to_hex(array: anytype) [array.len * 2]u8 { |
| 542 | 542 | std.fmt.format(fbs.writer(), "{x}", .{std.fmt.fmtSliceHexLower(&array)}) catch unreachable; |
| 543 | 543 | return res; |
| 544 | 544 | } |
| 545 | |
| 546 | pub fn FieldUnion(comptime T: type) type { |
| 547 | const infos = std.meta.fields(T); |
| 548 | |
| 549 | var fields: [infos.len]std.builtin.Type.UnionField = undefined; |
| 550 | inline for (infos, 0..) |field, i| { |
| 551 | fields[i] = .{ |
| 552 | .name = field.name, |
| 553 | .type = field.type, |
| 554 | .alignment = field.alignment, |
| 555 | }; |
| 556 | } |
| 557 | return @Type(std.builtin.Type{ .Union = .{ |
| 558 | .layout = .Auto, |
| 559 | .tag_type = std.meta.FieldEnum(T), |
| 560 | .fields = &fields, |
| 561 | .decls = &.{}, |
| 562 | } }); |
| 563 | } |