signOn static method
Reads a sign-on answer.
Implementation
static EcrSignOn signOn(Object? payload, {required String operationId}) {
final Map<Object?, Object?>? map = _asMap(payload);
if (map == null) {
return EcrSignOnFailed(
merchantReference: '',
failure: EcrMalformed(_notAMap(payload, 'a sign-on')),
);
}
final String reference = _string(map, EcrResultKeys.merchantReference);
final EcrTerminalCapabilities what =
capabilities(map[EcrResultKeys.capabilities]);
final String raw = _string(map, EcrResultKeys.raw);
switch (_string(map, EcrResultKeys.outcome)) {
case EcrOutcomes.available:
return EcrSignOnAvailable(
merchantReference: reference,
capabilities: what,
raw: raw,
);
case EcrOutcomes.unavailable:
return EcrSignOnUnavailable(
merchantReference: reference,
reason: what.reason.isNotEmpty
? what.reason
: _string(map, EcrResultKeys.responseMessage),
capabilities: what,
raw: raw,
);
case EcrOutcomes.failed:
return EcrSignOnFailed(
merchantReference: reference,
failure: failure(map[EcrResultKeys.failure]),
);
case final String unknown:
return EcrSignOnFailed(
merchantReference: reference,
failure: EcrMalformed(_unknownOutcome(unknown, 'a sign-on')),
);
}
}