| ... | ... | @@ -120,32 +120,12 @@ pub const Member = struct { |
| 120 | 120 | }; |
| 121 | 121 | |
| 122 | 122 | const Parser = struct { |
| 123 | | alloc: std.mem.Allocator, |
| 124 | | p: std.json.StreamingParser, |
| 125 | | input: []const u8, |
| 126 | | index: usize, |
| 127 | | tok2: ?std.json.Token, |
| 123 | p: std.json.Scanner, |
| 128 | 124 | |
| 129 | 125 | pub fn next(self: *Parser) !?std.json.Token { |
| 130 | | if (self.tok2) |t2| { |
| 131 | | defer self.tok2 = null; |
| 132 | | return t2; |
| 133 | | } |
| 134 | | while (self.index < self.input.len) { |
| 135 | | var tok: ?std.json.Token = null; |
| 136 | | var tok2: ?std.json.Token = null; |
| 137 | | const b = self.input[self.index]; |
| 138 | | try self.p.feed(b, &tok, &tok2); |
| 139 | | self.index += 1; |
| 140 | | if (tok) |_| {} else { |
| 141 | | continue; |
| 142 | | } |
| 143 | | if (tok2) |t2| { |
| 144 | | self.tok2 = t2; |
| 145 | | } |
| 146 | | return tok; |
| 147 | | } |
| 148 | | return null; |
| 126 | const tok = try self.p.next(); |
| 127 | if (tok == .end_of_document) return null; |
| 128 | return tok; |
| 149 | 129 | } |
| 150 | 130 | |
| 151 | 131 | pub const Error = |
| ... | ... | @@ -158,14 +138,10 @@ const Parser = struct { |
| 158 | 138 | }; |
| 159 | 139 | |
| 160 | 140 | pub fn parse(alloc: std.mem.Allocator, input: []const u8) Parser.Error!Value { |
| 161 | | const p = &Parser{ |
| 162 | | .alloc = alloc, |
| 163 | | .p = std.json.StreamingParser.init(), |
| 164 | | .input = input, |
| 165 | | .index = 0, |
| 166 | | .tok2 = null, |
| 141 | var p = Parser{ |
| 142 | .p = std.json.Scanner.initCompleteInput(alloc, input), |
| 167 | 143 | }; |
| 168 | | return try parse_value(p, null); |
| 144 | return try parse_value(&p, null); |
| 169 | 145 | } |
| 170 | 146 | |
| 171 | 147 | fn parse_value(p: *Parser, start: ?std.json.Token) Parser.Error!Value { |