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 standard library.
std › zon › parse › Parser › parseEnumLiteral Private Function parseEnumLiteral Doc Source Private Function std.zon.parse.Parser.parseEnumLiteral
fn parseEnumLiteral (self : @This (), T : type , node : Zoir .Node .Index ) !T Params self : @This () T : type node : Zoir .Node .Index File zon/parse.zig: 667
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685 fn parseEnumLiteral (self : @This (), T : type , node : Zoir .Node .Index ) !T {
switch (node .get (self .zoir )) {
.enum_literal => |field_name | {
// Create a comptime string map for the enum fields
const enum_info = @typeInfo (T ).@"enum" ;
comptime var kvs_list : [enum_info .field_names .len ]struct { []const u8 , T } = undefined ;
inline for (enum_info .field_names , enum_info .field_values , 0 ..) |enum_field_name , enum_field_value , i | {
kvs_list [i ] = .{ enum_field_name , @fromBackingInt (@intCast (enum_field_value )) };
}
const enum_tags = std .StaticStringMap (T ).initComptime (kvs_list );
// Get the tag if it exists
const field_name_str = field_name .get (self .zoir );
return enum_tags .get (field_name_str ) orelse
self .failUnexpected (T , "enum literal" , node , null , field_name_str );
},
else => return error .WrongType ,
}
}