unpack function

dynamic unpack(
  1. Uint8List data
)

Unpack msgpack binary into a Dart value (parsed from JSON).

Implementation

dynamic unpack(Uint8List data) {
  final dataPtr = malloc<Uint8>(data.length);
  for (var i = 0; i < data.length; i++) {
    dataPtr[i] = data[i];
  }

  final result = _unpack()(dataPtr, data.length);
  malloc.free(dataPtr);

  if (result.errorCode != 0) {
    final msg = result.errorMessage != nullptr
        ? result.errorMessage.cast<Utf8>().toDartString()
        : 'Unknown error';
    _freeResult()(result);
    throw Exception('unpack failed: $msg');
  }

  final json = result.data.cast<Utf8>().toDartString();
  // Free the CString allocated by Rust
  if (result.data != nullptr) {
    _freeData()(result.data, result.dataLen);
  }
  _freeResult()(result);

  return jsonDecode(json);
}