unpack function
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);
}