authorgravatar for kent4tigor@gmail.comTigor <kent4tigor@gmail.com> 2021-07-16 11:09:46 +03:00
committergravatar for kent4tigor@gmail.comTigor <kent4tigor@gmail.com> 2021-07-16 11:12:45 +03:00
logcf61dba709bf7fe7ced84404017b03302ab8a8a5
tree95070ed7c7856230c7b879aa96e40c423afd8ed1
parent659906406fbbadf415aa56718f49da8febd4f3c8

Numerical change

Number was split into separate Float and Int variants

1 files changed, 10 insertions(+), 4 deletions(-)

src/lib.zig+10-4
......@@ -4,7 +4,8 @@ pub const Value = union(enum) {
44 Object: []Member,
55 Array: []Value,
66 String: []const u8,
7 Number: f64,
7 Int: i64,
8 Float: f64,
89 Bool: bool,
910 Null: void,
1011
......@@ -81,8 +82,11 @@ pub const Value = union(enum) {
8182 .String => {
8283 try writer.print("\"{s}\"", .{self.String});
8384 },
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});
8690 },
8791 .Bool => {
8892 try writer.print("{}", .{self.Bool});
......@@ -139,6 +143,7 @@ const Parser = struct {
139143 std.fs.File.OpenError ||
140144 std.json.StreamingParser.Error ||
141145 std.mem.Allocator.Error ||
146 error{ Overflow } ||
142147 error{InvalidCharacter} ||
143148 error{ JsonExpectedObjKey, JsonExpectedValueStartGotEnd };
144149};
......@@ -162,7 +167,8 @@ fn parse_value(p: *Parser, start: ?std.json.Token) Parser.Error!Value {
162167 .ArrayBegin => Value{ .Array = try parse_array(p) },
163168 .ArrayEnd => error.JsonExpectedValueStartGotEnd,
164169 .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)) },
166172 .True => Value{ .Bool = true },
167173 .False => Value{ .Bool = false },
168174 .Null => Value{ .Null = {} },