store method

Builder store(
  1. Builder builder, [
  2. DictionaryKey<K>? key,
  3. DictionaryValue<V>? value
])

Returns back a Builder builder, and stores there 0 if Dictionary is empty, 1 and a reference otherwise

Throws 'Key/Value serializer is not defined' if correspondingly neither key/value nor internal _key/_value are defined and not null

Implementation

Builder store(
  Builder builder, [
  DictionaryKey<K>? key,
  DictionaryValue<V>? value,
]) {
  if (_map.isEmpty) {
    builder.storeBit(0);
    return builder;
  }
  var resolvedKey = key ?? _key;
  var resolvedValue = value ?? _value;

  if (resolvedKey == null) {
    throw 'Key serializer is not defined';
  }
  if (resolvedValue == null) {
    throw 'Value serializer is not defined';
  }

  var prepared = <BigInt, V>{};
  for (final entry in _map.entries) {
    var sk = resolvedKey.serialize(deserializeInternalKey(entry.key) as K);
    prepared[sk] = entry.value;
  }

  builder.storeBit(1);
  var dd = beginCell();
  serializeDict(prepared, resolvedKey.bits, resolvedValue.serialize, dd);
  builder.storeRef(dd.endCell());

  return builder;
}