parsePolicies function
Parses a set of Cedar policies from the given policiesIdl using the
Cedar Rust engine via FFI.
Implementation
Map<String, Object?> parsePolicies(String policiesIdl) {
return using((arena) {
final cPolicies = bindings.cedar_parse_policy_set(
policiesIdl.toNativeUtf8(allocator: arena).cast(),
);
switch (cPolicies) {
case bindings.CCedarPolicySetResult(:final errors, :final errors_len)
when errors_len > 0:
final errorStrings = <String>[];
for (var i = 0; i < errors_len; i++) {
errorStrings.add(errors[i].cast<Utf8>().toDartString());
}
throw FormatException(
'Error parsing policies: '
'${errorStrings.join(', ')}',
policiesIdl,
);
case bindings.CCedarPolicySetResult(
:final policy_set_json,
:final policy_set_json_len,
):
return jsonDecode(
policy_set_json.cast<Utf8>().toDartString(
length: policy_set_json_len,
),
)
as Map<String, Object?>;
}
});
}