Function nextAllocMax [src]

This function is only available after endInput() (or initCompleteInput()) has been called. See also std.json.Token for documentation of nextAlloc*() function behavior.

Prototype

pub fn nextAllocMax(self: *@This(), allocator: Allocator, when: AllocWhen, max_value_len: usize) AllocError!Token

Parameters

self: *@This()allocator: Allocatorwhen: AllocWhenmax_value_len: usize

Possible Errors

OutOfMemory Error
SyntaxError Error
UnexpectedEndOfInput Error
ValueTooLong

Source

pub fn nextAllocMax(self: *@This(), allocator: Allocator, when: AllocWhen, max_value_len: usize) AllocError!Token { assert(self.is_end_of_input); // This function is not available in streaming mode. const token_type = self.peekNextTokenType() catch |e| switch (e) { error.BufferUnderrun => unreachable, else => |err| return err, }; switch (token_type) { .number, .string => { var value_list = ArrayList(u8).init(allocator); errdefer { value_list.deinit(); } if (self.allocNextIntoArrayListMax(&value_list, when, max_value_len) catch |e| switch (e) { error.BufferUnderrun => unreachable, else => |err| return err, }) |slice| { return if (token_type == .number) Token{ .number = slice } else Token{ .string = slice }; } else { return if (token_type == .number) Token{ .allocated_number = try value_list.toOwnedSlice() } else Token{ .allocated_string = try value_list.toOwnedSlice() }; } }, // Simple tokens never alloc. .object_begin, .object_end, .array_begin, .array_end, .true, .false, .null, .end_of_document, => return self.next() catch |e| switch (e) { error.BufferUnderrun => unreachable, else => |err| return err, }, } }