aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jq/parse.zig
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-17 18:40:47 +0900
committernsfisis <nsfisis@gmail.com>2026-01-17 18:40:47 +0900
commit22a5d1617e79f176ecfca22d6c72be215f0da8b6 (patch)
tree4424a15f2e069aa27312a9e1885d8446ad12bea1 /src/jq/parse.zig
parentd4bacf19b56c21afc7f2f0b5efb244b072873119 (diff)
downloadzgjq-22a5d1617e79f176ecfca22d6c72be215f0da8b6.tar.gz
zgjq-22a5d1617e79f176ecfca22d6c72be215f0da8b6.tar.zst
zgjq-22a5d1617e79f176ecfca22d6c72be215f0da8b6.zip
implement object key access
Diffstat (limited to 'src/jq/parse.zig')
-rw-r--r--src/jq/parse.zig15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/jq/parse.zig b/src/jq/parse.zig
index 5269ef5..dc9f6b9 100644
--- a/src/jq/parse.zig
+++ b/src/jq/parse.zig
@@ -10,12 +10,14 @@ pub const ParseError = error{
pub const AstKind = enum {
identity,
array_index,
+ object_key,
literal,
};
pub const Ast = union(AstKind) {
identity,
array_index: *Ast,
+ object_key: []const u8,
literal: *jv.Value,
pub fn kind(self: @This()) AstKind {
@@ -42,6 +44,19 @@ pub fn parse(allocator: std.mem.Allocator, tokens: []const Token) !*Ast {
return root;
}
+ if (t2.kind() == .identifier) {
+ i += 1;
+ const t3 = tokens[i];
+ if (t3.kind() != .end) {
+ return error.InvalidQuery;
+ }
+ const root = try allocator.create(Ast);
+ root.* = .{
+ .object_key = t2.identifier,
+ };
+ return root;
+ }
+
if (t2.kind() != .bracket_left) {
return error.InvalidQuery;
}