| ... | @@ -76,6 +76,25 @@ test "std.meta.tagName" { | ... | @@ -76,6 +76,25 @@ test "std.meta.tagName" { |
| 76 | debug.assert(mem.eql(u8, tagName(u2b), "D")); | 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 | pub fn bitCount(comptime T: type) u32 { | 98 | pub fn bitCount(comptime T: type) u32 { |
| 80 | return switch (@typeInfo(T)) { | 99 | return switch (@typeInfo(T)) { |
| 81 | TypeId.Int => |info| info.bits, | 100 | TypeId.Int => |info| info.bits, |