toJsonObject method

Map<String, dynamic> toJsonObject(
  1. CosmosToJsonEncoding encoding, {
  2. CosmosBech32Config? config,
})

Implementation

Map<String, dynamic> toJsonObject(
  CosmosToJsonEncoding encoding, {
  CosmosBech32Config? config,
}) {
  final toJson = this.toJson();
  if (encoding == CosmosToJsonEncoding.native) return toJson;
  config ??= CosmosDefaultBech32Configs.cosmosHub;
  // Keys define the field names + order (per class contract).
  final keys = toJson.keys.toList();
  final values = protoValues;

  assert(
    keys.length == values.length,
    "$runtimeType: toJson() and protoValues must have the same length/order.",
  );

  final protoConfig = this.protoConfig();
  final json = <String, dynamic>{};
  final optionsMap = <String, List<ProtoOption>>{};

  for (var i = 0; i < keys.length; i++) {
    final key = keys[i];
    final fieldConfig = protoConfig.fields.elementAtOrNull(i)?.options;
    assert(
      fieldConfig != null,
      "Missing field options. maybe json customized.",
    );

    optionsMap[key] = fieldConfig ?? const <ProtoOption>[];
    json[key] = _encodeValue(values[i], encoding, config);
  }

  return CosmosAminoUtils.toAminoJson(
    json: json,
    options: optionsMap,
    config: config,
  );
}