| ... | ... | @@ -4,7 +4,8 @@ pub const Value = union(enum) { |
| 4 | 4 | Object: []Member, |
| 5 | 5 | Array: []Value, |
| 6 | 6 | String: []const u8, |
| 7 | | Number: f64, |
| 7 | Int: i64, |
| 8 | Float: f64, |
| 8 | 9 | Bool: bool, |
| 9 | 10 | Null: void, |
| 10 | 11 | |
| ... | ... | @@ -81,8 +82,11 @@ pub const Value = union(enum) { |
| 81 | 82 | .String => { |
| 82 | 83 | try writer.print("\"{s}\"", .{self.String}); |
| 83 | 84 | }, |
| 84 | | .Number => { |
| 85 | | try writer.print("{}", .{self.Number}); |
| 85 | .Int => { |
| 86 | try writer.print("{d}", .{self.Int}); |
| 87 | }, |
| 88 | .Float => { |
| 89 | try writer.print("{}", .{self.Float}); |
| 86 | 90 | }, |
| 87 | 91 | .Bool => { |
| 88 | 92 | try writer.print("{}", .{self.Bool}); |
| ... | ... | @@ -139,6 +143,7 @@ const Parser = struct { |
| 139 | 143 | std.fs.File.OpenError || |
| 140 | 144 | std.json.StreamingParser.Error || |
| 141 | 145 | std.mem.Allocator.Error || |
| 146 | error{ Overflow } || |
| 142 | 147 | error{InvalidCharacter} || |
| 143 | 148 | error{ JsonExpectedObjKey, JsonExpectedValueStartGotEnd }; |
| 144 | 149 | }; |
| ... | ... | @@ -162,7 +167,8 @@ fn parse_value(p: *Parser, start: ?std.json.Token) Parser.Error!Value { |
| 162 | 167 | .ArrayBegin => Value{ .Array = try parse_array(p) }, |
| 163 | 168 | .ArrayEnd => error.JsonExpectedValueStartGotEnd, |
| 164 | 169 | .String => |t| Value{ .String = t.slice(p.input, p.index - 1) }, |
| 165 | | .Number => |t| Value{ .Number = try std.fmt.parseFloat(f64, t.slice(p.input, p.index - 1)) }, |
| 170 | .Number => |t| if (t.is_integer) Value{ .Int = try std.fmt.parseInt(i64, t.slice(p.input, p.index - 1), 10) } |
| 171 | else Value{ .Float = try std.fmt.parseFloat(f64, t.slice(p.input, p.index - 1)) }, |
| 166 | 172 | .True => Value{ .Bool = true }, |
| 167 | 173 | .False => Value{ .Bool = false }, |
| 168 | 174 | .Null => Value{ .Null = {} }, |