Queryable.declare constructor

Queryable.declare(
  1. Pointer<Void> loanedSession,
  2. Pointer<Void> loanedKeyExpr,
  3. String keyExprStr, {
  4. bool complete = false,
  5. Locality? allowedOrigin,
})

Creates a queryable on the given session and key expression.

This is called internally by Session.declareQueryable.

Implementation

factory Queryable.declare(
  Pointer<Void> loanedSession,
  Pointer<Void> loanedKeyExpr,
  String keyExprStr, {
  bool complete = false,
  Locality? allowedOrigin,
}) {
  final size = bindings.zd_queryable_sizeof();
  final ptr = calloc.allocate<Void>(size);

  final channel = QueryChannel.create();

  final rc = bindings.zd_declare_queryable(
    ptr.cast(),
    loanedSession.cast(),
    loanedKeyExpr.cast(),
    channel.receivePort.sendPort.nativePort,
    complete ? 1 : 0,
    allowedOrigin?.value ?? -1,
  );

  if (rc != 0) {
    channel.abandon();
    calloc.free(ptr);
    throw ZenohException('Failed to declare queryable', rc);
  }

  return Queryable._(ptr, channel, keyExprStr);
}