const std = @import("std"); const enumError = error{EnumFieldNotFound}; pub fn nameToEnumTag(name: []const u8, comptime Enum: type) enumError!Enum { comptime { if (@typeInfo(Enum) != .Enum) { @compileError("Non enum type passed into function: " ++ @typeName(Enum)); } } inline for (@typeInfo(Enum).Enum.fields) |field| { if (std.mem.eql(u8, name, field.name)) { const tag: Enum = @enumFromInt(field.value); return tag; } } return enumError.EnumFieldNotFound; } test { const State = enum { good, bad, }; const enum_tag = try nameToEnumTag("good", State); try std.testing.expect(enum_tag == State.good); } pub fn printGir() void { std.debug.print( \\ n n \\ o ( ) \\ ___/_ / I am \ \\ / / . o ( your ) \\ 0> 0 / \ Doom! / \\ Lu__/ ( ) \\ || - u - \\ o^ ^ o \\ _/ / / \_ \\ |__| \\ O=> (O \\ \\ , .{}); }