| ... | ... | @@ -76,6 +76,25 @@ test "std.meta.tagName" { |
| 76 | 76 | debug.assert(mem.eql(u8, tagName(u2b), "D")); |
| 77 | 77 | } |
| 78 | 78 | |
| 79 | pub fn stringToEnum(comptime T: type, str: []const u8) ?T { |
| 80 | inline for (@typeInfo(T).Enum.fields) |enumField| { |
| 81 | if (std.mem.eql(u8, str, enumField.name)) { |
| 82 | return @field(T, enumField.name); |
| 83 | } |
| 84 | } |
| 85 | return null; |
| 86 | } |
| 87 | |
| 88 | test "std.meta.stringToEnum" { |
| 89 | const E1 = enum { |
| 90 | A, |
| 91 | B, |
| 92 | }; |
| 93 | debug.assert(E1.A == stringToEnum(E1, "A").?); |
| 94 | debug.assert(E1.B == stringToEnum(E1, "B").?); |
| 95 | debug.assert(null == stringToEnum(E1, "C")); |
| 96 | } |
| 97 | |
| 79 | 98 | pub fn bitCount(comptime T: type) u32 { |
| 80 | 99 | return switch (@typeInfo(T)) { |
| 81 | 100 | TypeId.Int => |info| info.bits, |