deserializePPT method

  1. @override
PPTPayload? deserializePPT(
  1. Uint8List binPayload
)
override

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