Parser assumes all slices are strings
FreerGit opened this issue · comments
sven commented
const std = @import("std");
const dom = @import("src/dom.zig");
test {
const allocator = std.testing.allocator;
const T = struct { xs: []struct { a: u8 } };
const input =
\\{ "xs": [
\\{"a": 42}
\\]}
;
var parser = try dom.Parser.initFixedBuffer(allocator, input, .{});
defer parser.deinit();
try parser.parse();
var s: T = undefined;
try parser.element().get(&s);
std.debug.print("\n{} \n", .{s});
}
The parser will fail, expecting the [{...}] to be a string.
travisstaloch commented
thanks for the report!
addressed in a74016e
please let me know if there are any other issues (as i'm sure there will be). or if satisfies your needs, you may close it.
travisstaloch commented
Oh i should describe what i changed. I added a dom.Element.get_alloc()
method which accepts a user allocator. its the same as get() but can handle non-string slice types.
travisstaloch commented
Previous fix was incomplete and only worked for objects with 1 field.
Addressed in acd573f which also added more complete tests.
Should be actually fixed now 🙂
sven commented
Cloned latest main and works perfectly. Closing this :)