pack function

Uint8List pack(
  1. dynamic value
)

Pack a Dart value into msgpack binary.

Implementation

Uint8List pack(dynamic value) {
  final json = jsonEncode(value).toNativeUtf8();
  final result = _pack()(json.cast<Char>());
  malloc.free(json);

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

  final data = Uint8List(result.dataLen);
  if (result.data != nullptr && result.dataLen > 0) {
    final src = result.data.cast<Uint8>().asTypedList(result.dataLen);
    data.setAll(0, src);
  }
  // Free the data allocated by Rust (Box<[u8]> via into_raw)
  if (result.data != nullptr) {
    _freeData()(result.data, result.dataLen);
  }
  _freeResult()(result);
  return data;
}