requestToRust function
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;
}