@digitalasset/daml-ledger
Version:
DAML Ledger API Node.js bindings
184 lines • 7.01 kB
JavaScript
"use strict";
// Copyright (c) 2021 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValueCodec = void 0;
const value_pb_1 = require("../generated/com/daml/ledger/api/v1/value_pb");
const empty_pb_1 = require("google-protobuf/google/protobuf/empty_pb");
const RecordCodec_1 = require("./RecordCodec");
const VariantCodec_1 = require("./VariantCodec");
const ErrorMessages_1 = require("../util/ErrorMessages");
const IdentifierCodec_1 = require("./IdentifierCodec");
exports.ValueCodec = {
deserialize(value) {
if (value.hasBool()) {
return { valueType: 'bool', bool: value.getBool() };
}
else if (value.hasContractId()) {
return { valueType: 'contractId', contractId: value.getContractId() };
}
else if (value.hasDate()) {
return { valueType: 'date', date: '' + value.getDate() };
}
else if (value.hasEnum()) {
const damlEnum = value.getEnum();
const result = {
valueType: 'enum',
constructor: damlEnum.getConstructor()
};
if (damlEnum.hasEnumId()) {
result.enumId = IdentifierCodec_1.IdentifierCodec.deserialize(damlEnum.getEnumId());
}
return result;
}
else if (value.hasNumeric()) {
return { valueType: 'decimal', decimal: value.getNumeric() };
}
else if (value.hasInt64()) {
return { valueType: 'int64', int64: value.getInt64() };
}
else if (value.hasList()) {
const values = [];
if (value.hasList()) {
value.getList().getElementsList().forEach(v => {
values.push(exports.ValueCodec.deserialize(v));
});
}
return { valueType: 'list', list: values };
}
else if (value.hasParty()) {
return { valueType: 'party', party: value.getParty() };
}
else if (value.hasRecord()) {
const record = RecordCodec_1.RecordCodec.deserialize(value.getRecord());
const splatted = {
valueType: 'record',
fields: record.fields
};
if (record.recordId) {
splatted.recordId = record.recordId;
}
return splatted;
}
else if (value.hasText()) {
return { valueType: 'text', text: value.getText() };
}
else if (value.hasTimestamp()) {
return { valueType: 'timestamp', timestamp: value.getTimestamp() };
}
else if (value.hasUnit()) {
return { valueType: 'unit' };
}
else if (value.hasVariant()) {
const variant = VariantCodec_1.VariantCodec.deserialize(value.getVariant());
const splatted = {
valueType: "variant",
constructor: variant.constructor,
value: variant.value
};
if (variant.variantId) {
splatted.variantId = variant.variantId;
}
return splatted;
}
else if (value.hasOptional()) {
const optional = value.getOptional();
if (optional.hasValue()) {
return { valueType: 'optional', optional: exports.ValueCodec.deserialize(optional.getValue()) };
}
else {
return { valueType: 'optional' };
}
}
else if (value.hasMap()) {
const map = value.getMap();
const object = {
valueType: 'map',
map: {}
};
for (const key of map.getEntriesList()) {
object.map[key.getKey()] = exports.ValueCodec.deserialize(key.getValue());
}
return object;
}
else {
throw new Error(ErrorMessages_1.ErrorMessages.unknownDeserialization('Value'));
}
},
serialize(object) {
const message = new value_pb_1.Value();
switch (object.valueType) {
case "bool":
message.setBool(object.bool);
break;
case "contractId":
message.setContractId(object.contractId);
break;
case "date":
message.setDate(parseInt(object.date));
break;
case "decimal":
message.setNumeric(object.decimal);
break;
case "enum":
const pbEnum = new value_pb_1.Enum();
pbEnum.setConstructor(object.constructor);
if (object.enumId !== undefined) {
pbEnum.setEnumId(IdentifierCodec_1.IdentifierCodec.serialize(object.enumId));
}
message.setEnum(pbEnum);
break;
case "int64":
message.setInt64(object.int64);
break;
case "list":
const list = new value_pb_1.List();
const values = [];
for (const v of object.list) {
values.push(exports.ValueCodec.serialize(v));
}
list.setElementsList(values);
message.setList(list);
break;
case "map":
const map = new value_pb_1.Map();
const entries = [];
for (const key in object.map) {
const entry = new value_pb_1.Map.Entry();
entry.setKey(key);
entry.setValue(exports.ValueCodec.serialize(object.map[key]));
entries.push(entry);
}
map.setEntriesList(entries);
message.setMap(map);
break;
case "optional":
const optional = new value_pb_1.Optional();
if (object.optional) {
optional.setValue(exports.ValueCodec.serialize(object.optional));
}
message.setOptional(optional);
break;
case "party":
message.setParty(object.party);
break;
case "record":
message.setRecord(RecordCodec_1.RecordCodec.serialize(object));
break;
case "text":
message.setText(object.text);
break;
case "timestamp":
message.setTimestamp(object.timestamp);
break;
case "unit":
message.setUnit(new empty_pb_1.Empty());
break;
case "variant":
message.setVariant(VariantCodec_1.VariantCodec.serialize(object));
break;
}
return message;
}
};
//# sourceMappingURL=ValueCodec.js.map