deserializePPT method
Converts a uint8 data into a PPT Payload Object
Implementation
@override
PPTPayload? deserializePPT(Uint8List binPayload) {
final binaryPayload = _deserializeSingleBinaryPpt(binPayload);
if (binaryPayload != null) {
return binaryPayload;
}
_validateCompleteCborValue(binPayload);
List<dynamic>? arguments;
Map<String, dynamic>? argumentsKeywords;
final decodedMessage = cbor.decode(binPayload);
if (decodedMessage is CborMap) {
// Lookup compares encoded keys, so ignored text keys still need validation.
try {
for (final key in decodedMessage.keys) {
if (key is CborString) key.toString();
}
} on FormatException {
throw const FormatException('Invalid CBOR PPT map key');
}
if (decodedMessage[CborString('args')] != null &&
decodedMessage[CborString('args')] is CborList) {
arguments = _cborListToDart(
decodedMessage[CborString('args')] as CborList,
);
}
if (decodedMessage[CborString('kwargs')] != null &&
decodedMessage[CborString('kwargs')] is CborMap) {
final keywords =
_cborValueToDart(decodedMessage[CborString('kwargs')])!
as Map<Object?, Object?>;
if (keywords.keys.any((key) => key is! String)) {
throw const FormatException(
'CBOR PPT keyword arguments must use string keys',
);
}
argumentsKeywords = Map.castFrom<Object?, Object?, String, dynamic>(
keywords,
);
}
return PPTPayload(
arguments: arguments,
argumentsKeywords: argumentsKeywords,
);
}
return null;
}