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