requestToRust function

Future<RustResponse> requestToRust(
  1. RustRequest rustRequest
)

Sends bytes data to Rust wrapped in RustRequest object with operation and address fields. This system follows the definition of RESTful API and is very similar to HTTP request. Returns RustResponse object that is somehow calculated from the Rust side. If the Rust doesn't respond for 60 seconds, this function will return a failed RustResponse object. You can see the usage example at https://pub.dev/packages/rinf/example.

Implementation

Future<RustResponse> requestToRust(RustRequest rustRequest) async {
  final id = _requestIdGenerator.generateId();
  final requestUnique = RustRequestUnique(id: id, request: rustRequest);
  api.requestToRust(requestUnique: requestUnique);
  final future = _responseBroadcaster.stream.firstWhere((responseUnique) {
    return responseUnique.id == id;
  });
  final responseUnique = await future.timeout(
    const Duration(seconds: 60),
    onTimeout: () {
      return RustResponseUnique(
        id: id,
        response: RustResponse(
          successful: false,
          message: null,
          blob: null,
        ),
      );
    },
  );
  final rustResponse = responseUnique.response;
  return rustResponse;
}