First commit, things mostly work locally, on linux x86
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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
|
||||
\\
|
||||
\\
|
||||
, .{});
|
||||
}
|
||||
Reference in New Issue
Block a user