Zig 0.17.0-dev (Split by item)

This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig library itself.

fromInt

enums.fromInt
pub fn fromInt(comptime E: type, integer: anytype) ?E

File

lib/std/enums.zig:10

Code

pub fn fromInt(comptime E: type, integer: anytype) ?E {
    const enum_info = @typeInfo(E).@"enum";
    if (enum_info.mode == .nonexhaustive) {
        if (std.math.cast(enum_info.tag_type, integer)) |tag| {
            return @fromBackingInt(@intCast(tag));
        }
        return null;
    }
    // We don't directly iterate over the fields of E, as that
    // would require an inline loop. Instead, we create an array of
    // values that is comptime-know, but can be iterated at runtime
    // without requiring an inline loop.
    // This generates better machine code.
    for (values(E)) |value| {
        if (@backingInt(value) == integer) return value;
    }
    return null;
}