parsePolicies function
Parses a set of Cedar policies from the given policiesIdl
using the
Cedar Rust engine via FFI.
Implementation
Map<String, Map<String, Object?>> parsePolicies(String policiesIdl) {
return using((arena) {
final cPolicies = bindings.cedar_parse_policy_set(
policiesIdl.toNativeUtf8(allocator: arena).cast(),
);
switch (cPolicies) {
case 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 CCedarPolicySetResult(
:final policies,
:final policy_ids,
:final policies_len,
:final templates,
:final template_ids,
:final templates_len,
):
return {
for (var i = 0; i < policies_len; i++)
policy_ids[i].cast<Utf8>().toDartString():
jsonDecode(policies[i].cast<Utf8>().toDartString())
as Map<String, Object?>,
for (var i = 0; i < templates_len; i++)
template_ids[i].cast<Utf8>().toDartString():
jsonDecode(templates[i].cast<Utf8>().toDartString())
as Map<String, Object?>,
};
}
});
}