feat: add support for extractor members

This commit is contained in:
CJ van den Berg 2025-03-22 21:48:50 +01:00
parent b32ffa3a52
commit 285f64ede6
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9

View file

@ -788,6 +788,18 @@ fn matchArray(iter_: *[]const u8, arr: anytype, info: anytype) Error!bool {
return n == 0; return n == 0;
} }
fn matchArrayScalar(iter: *[]const u8, arr: anytype) Error!bool {
var i: usize = 0;
var n = try decodeArrayHeader(iter);
if (n != arr.len) return false;
while (n > 0) : (n -= 1) {
if (!(matchValue(iter, extract(&arr[i])) catch return false))
return false;
i += 1;
}
return true;
}
fn matchJsonObject(iter_: *[]const u8, obj: *json.ObjectMap) !bool { fn matchJsonObject(iter_: *[]const u8, obj: *json.ObjectMap) !bool {
var iter = iter_.*; var iter = iter_.*;
const t = try decodeType(&iter); const t = try decodeType(&iter);
@ -892,7 +904,8 @@ fn Extractor(comptime T: type) type {
}, },
.float => return matchFloat(T, iter, self.dest), .float => return matchFloat(T, iter, self.dest),
.@"enum" => return matchEnum(T, iter, self.dest), .@"enum" => return matchEnum(T, iter, self.dest),
else => extractError(T), .array => return matchArrayScalar(iter, self.dest),
else => return self.dest.cborExtract(iter),
} }
} }
}; };