evaluateVariant method

VariantEvaluationResponse evaluateVariant({
  1. required String flagKey,
  2. required String entityId,
  3. required Map<String, dynamic> context,
})

Implementation

VariantEvaluationResponse evaluateVariant({
  required String flagKey,
  required String entityId,
  required Map<String, dynamic> context,
}) {
  if (flagKey.isEmpty) {
    throw ValidationError('flagKey must not be empty');
  }
  if (entityId.isEmpty) {
    throw ValidationError('entityId must not be empty');
  }

  final request = EvaluationRequest(
    flagKey: flagKey,
    entityId: entityId,
    context: context,
  );

  final requestJson = jsonEncode(request.toJson());
  final requestUtf8 = requestJson.toNativeUtf8();

  final resultPtr =
      _bindings.evaluate_variant(_engine, requestUtf8.cast<Char>());
  final result = _pointerToString(resultPtr);
  _bindings.destroy_string(resultPtr);
  calloc.free(requestUtf8);

  final response = Result<VariantEvaluationResponse>.fromJson(
    jsonDecode(result) as Map<String, dynamic>,
    (json) =>
        VariantEvaluationResponse.fromJson(json as Map<String, dynamic>),
  );

  if (response.status != Status.success) {
    throw EvaluationError(
        'Failed to evaluate variant: ${response.errorMessage}');
  }

  return response.result!;
}