Commit f6cd02be65

daurnimator <quae@daurnimator.com>
2018-11-25 16:08:12
add std.meta.stringToEnum
1 parent a07490a
Changed files (1)
std
std/meta/index.zig
@@ -76,6 +76,25 @@ test "std.meta.tagName" {
     debug.assert(mem.eql(u8, tagName(u2b), "D"));
 }
 
+pub fn stringToEnum(comptime T: type, str: []const u8) ?T {
+    inline for (@typeInfo(T).Enum.fields) |enumField| {
+        if (std.mem.eql(u8, str, enumField.name)) {
+            return @field(T, enumField.name);
+        }
+    }
+    return null;
+}
+
+test "std.meta.stringToEnum" {
+    const E1 = enum {
+        A,
+        B,
+    };
+    debug.assert(E1.A == stringToEnum(E1, "A").?);
+    debug.assert(E1.B == stringToEnum(E1, "B").?);
+    debug.assert(null == stringToEnum(E1, "C"));
+}
+
 pub fn bitCount(comptime T: type) u32 {
     return switch (@typeInfo(T)) {
         TypeId.Int => |info| info.bits,