UNPKG

@digitalasset/daml-ledger

Version:
184 lines 7.01 kB
"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