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 › json › hashmap › ArrayHashMap › jsonParse Public Function jsonParse Doc Source Public Function std.json.hashmap.ArrayHashMap.jsonParse
pub fn jsonParse (allocator : Allocator , source : anytype , options : ParseOptions ) !@This () Params File json/hashmap.zig: 21
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 pub fn jsonParse (allocator : Allocator , source : anytype , options : ParseOptions ) !@This () {
var map : std .array_hash_map .String (T ) = .empty ;
errdefer map .deinit (allocator );
if (.object_begin != try source .next ()) return error .UnexpectedToken ;
while (true ) {
const token = try source .nextAlloc (allocator , options .allocate .?);
switch (token ) {
inline .string , .allocated_string => |k | {
const gop = try map .getOrPut (allocator , k );
if (gop .found_existing ) {
switch (options .duplicate_field_behavior ) {
.use_first => {
// Parse and ignore the redundant value.
// We don't want to skip the value, because we want type checking.
_ = try innerParse (T , allocator , source , options );
continue ;
},
.@"error" => return error .DuplicateField ,
.use_last => {},
}
}
gop .value_ptr .* = try innerParse (T , allocator , source , options );
},
.object_end => break ,
else => unreachable ,
}
}
return .{ .map = map };
}