nativeCall<T extends GeneratedMessage> static method

T nativeCall<T extends GeneratedMessage>(
  1. Function nativeFunction,
  2. GeneratedMessage request,
  3. T response
)

Implementation

static T nativeCall<T extends $pb.GeneratedMessage>(
    Function nativeFunction, $pb.GeneratedMessage request, T response) {
  final requestBufferPtr = createRequestBuffer(request);
  final responseBufferPtr =
      calloc<OkapiByteBuffer>(sizeOf<OkapiByteBuffer>());
  final err = calloc<ExternError>(sizeOf<ExternError>());
  nativeFunction(requestBufferPtr.ref, responseBufferPtr, err);
  final errCode = err.ref.code;
  if (errCode != 0) {
    final errString = err.ref.message.toDartString();
    throw Exception("Okapi native error code=$errCode, message=$errString");
  }

  response.mergeFromBuffer(
      responseBufferPtr.ref.data.asTypedList(responseBufferPtr.ref.len));
  // Free native and managed memory
  freeNativeMemory(requestBufferPtr, okapiByteBufferFree, responseBufferPtr);
  return response;
}