Changes
1 changed files (+33/-6)
-
-
@@ -1292,7 +1292,7 @@ /// Slices (strings) inside the retured data *might* be a pointer for the/// input message bytes. This depends on how `std.json.parseFromSliceLeaky`. /// /// Caller owns the returned struct. Call `deinit()` once it's no longer in use. pub fn parse(allocator: std.mem.Allocator, message: []const u8, context: BodyParsingContext) ParseError!@This() { pub fn parse(allocator: std.mem.Allocator, message: []const u8, context: BodyParsingContext, parse_options: std.json.ParseOptions) ParseError!@This() { const content_type = context.content_type orelse return ParseError.MissingContentType; const content_length = context.content_length orelse return ParseError.MissingContentLength;
-
@@ -1319,7 +1319,7 @@ const arena_allocator = arena.allocator();const value = try arena_allocator.create(T); errdefer arena_allocator.destroy(value); value.* = try std.json.parseFromSliceLeaky(T, arena_allocator, bytes, .{}); value.* = try std.json.parseFromSliceLeaky(T, arena_allocator, bytes, parse_options); return .{ .arena = arena,
-
@@ -1424,7 +1424,34 @@ };_, const meta_ctx = try Metadata.parse(message); _, const header_ctx = try WellKnownHeaders.parse(message, meta_ctx); const body = try JsonBody(TestData).parse(std.testing.allocator, message, header_ctx); const body = try JsonBody(TestData).parse(std.testing.allocator, message, header_ctx, .{}); defer body.deinit(); try std.testing.expectEqual(body.value.foo, 8); } test "JsonBody.parse should respect JSON parsing options" { const payload = "{\"foo\": 8, \"bar\": true}"; var message_buffer = std.ArrayList(u8).init(std.testing.allocator); defer message_buffer.deinit(); try std.fmt.format( message_buffer.writer(), "MOO/1 REQUEST foo\nContent-Type: application/json\nContent-Length: {d}\nRequest-Id: 1\n\n{s}", .{ payload.len, payload }, ); const message = try message_buffer.toOwnedSlice(); defer std.testing.allocator.free(message); const TestData = struct { foo: i32, }; _, const meta_ctx = try Metadata.parse(message); _, const header_ctx = try WellKnownHeaders.parse(message, meta_ctx); const body = try JsonBody(TestData).parse(std.testing.allocator, message, header_ctx, .{ .ignore_unknown_fields = true }); defer body.deinit(); try std.testing.expectEqual(body.value.foo, 8);
-
@@ -1451,7 +1478,7 @@ };_, const meta_ctx = try Metadata.parse(message); _, const header_ctx = try WellKnownHeaders.parse(message, meta_ctx); const err = JsonBody(TestData).parse(std.testing.allocator, message, header_ctx); const err = JsonBody(TestData).parse(std.testing.allocator, message, header_ctx, .{}); try std.testing.expectError(JsonBody(TestData).ParseError.SyntaxError, err); }
-
@@ -1477,7 +1504,7 @@ };_, const meta_ctx = try Metadata.parse(message); _, const header_ctx = try WellKnownHeaders.parse(message, meta_ctx); const err = JsonBody(TestData).parse(std.testing.allocator, message, header_ctx); const err = JsonBody(TestData).parse(std.testing.allocator, message, header_ctx, .{}); try std.testing.expectError(JsonBody(TestData).ParseError.ContentLengthMismatch, err); }
-
@@ -1503,7 +1530,7 @@ };_, const meta_ctx = try Metadata.parse(message); _, const header_ctx = try WellKnownHeaders.parse(message, meta_ctx); const err = JsonBody(TestData).parse(std.testing.allocator, message, header_ctx); const err = JsonBody(TestData).parse(std.testing.allocator, message, header_ctx, .{}); try std.testing.expectError(JsonBody(TestData).ParseError.ContentTypeIsNotApplicationJson, err); }
-