| ... | @@ -542,3 +542,22 @@ pub fn to_hex(array: anytype) [array.len * 2]u8 { | ... | @@ -542,3 +542,22 @@ pub fn to_hex(array: anytype) [array.len * 2]u8 { |
| 542 | std.fmt.format(fbs.writer(), "{x}", .{std.fmt.fmtSliceHexLower(&array)}) catch unreachable; | 542 | std.fmt.format(fbs.writer(), "{x}", .{std.fmt.fmtSliceHexLower(&array)}) catch unreachable; |
| 543 | return res; | 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 | } |