quote method
Request a bounds-checked quote (§2.6) for either direction. Dispatches on the sealed SwapFormInput so each shape carries only its own fields. On success → SwapReview with the confirmable numbers + the §2.6 disclosure; on a typed failure → back to SwapFormState with an honest inline fault. Funds NEVER move here — quote is deterministic and side-effect-free.
Implementation
Future<void> quote(SwapFormInput input) async {
if (_inFlight) return; // re-entrancy: ignore taps while a step runs
final session = _requireSession();
if (session == null) return;
switch (input) {
case OutOfZecInput():
await _quoteOutOfZec(session, input);
case IntoZecInput():
await _quoteIntoZec(session, input);
}
}