Kuba's blog

About me

Hi!

I’m Kuba.

fn EnumFromStruct(S: type) type {
    const EnumField = std.builtin.Type.EnumField;

    var fields: []const EnumField = &.{};
    for (@typeInfo(S).@"struct".fields, 0..) |f, i| {
        fields = fields ++ .{EnumField{ .name = f.name, .value = i }};
    }

    return @Type(.{
        .@"enum" = .{
            .tag_type = std.math.IntFittingRange(0, fields.len),
            .fields = fields,
            .decls = &.{},
            .is_exhaustive = true,
        },
    });
}