parsePolicies function

Map<String, Object?> parsePolicies(
  1. String policiesIdl
)

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?>;
    }
  });
}