run<T> method
Future<T>
run<T>({
- required RecordedRequest describe(),
- required Future<
T> live(), - T decode(
- Object? recorded
- ReplayMissBehavior onMiss = ReplayMissBehavior.forward,
- Object reject(
- String message
Serves one call/return request through the recorder.
describe is invoked only when the recorder's mode needs it. On
ForwardToSource, live runs and its result is recorded (only while
recording) and returned. On Replayed, the recorded response is
passed through decode (identity cast by default). On
RejectRequest, reject turns the recorder's message into the error
to throw — a StateError by default.
Implementation
Future<T> run<T>({
required RecordedRequest Function() describe,
required Future<T> Function() live,
T Function(Object? recorded)? decode,
ReplayMissBehavior onMiss = ReplayMissBehavior.forward,
Object Function(String message) reject = StateError.new,
}) async {
switch (decide(describe, onMiss: onMiss)) {
case Replayed(:final interaction):
final recorded = interaction.response;
return decode == null ? recorded as T : decode(recorded);
case RejectRequest(:final message):
throw reject(message);
case ForwardToSource():
final result = await live();
record(() => RecordedInteraction(
request: describe(),
response: result,
recordedAt: DateTime.now(),
));
return result;
}
}