UNPKG

@radixdlt/atom

Version:

Container for CRUD instructions known as 'Particles' that are sent to the Radix decentralized ledger

38 lines 2.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransferrableTokensParticle = exports.isTransferrableTokensParticle = void 0; const account_1 = require("@radixdlt/account"); const neverthrow_1 = require("neverthrow"); const radixParticleTypes_1 = require("./meta/radixParticleTypes"); const data_formats_1 = require("@radixdlt/data-formats"); const tokenParticle_1 = require("./meta/tokenParticle"); const primitives_1 = require("@radixdlt/primitives"); const resourceIdentifier_1 = require("../resourceIdentifier"); const _types_1 = require("../_types"); const utils_1 = require("../utils"); const radixParticleType = radixParticleTypes_1.RadixParticleType.TRANSFERRABLE_TOKENS; const SERIALIZER = 'radix.particles.transferrable_tokens'; const serialization = (input) => { const keyValues = Object.assign(Object.assign({}, tokenParticle_1.tokenSerializationKeyValues(input)), { address: input.address }); return Object.assign(Object.assign({}, data_formats_1.JSONEncoding(SERIALIZER)(keyValues)), data_formats_1.DSONEncoding(SERIALIZER)(keyValues)); }; const JSONDecoder = data_formats_1.taggedObjectDecoder(SERIALIZER, _types_1.SERIALIZER_KEY)((input) => create(input)); const jsonDecoding = utils_1.JSONDecoding.withDependencies(account_1.Address, primitives_1.Amount, resourceIdentifier_1.ResourceIdentifier) .withDecoders(JSONDecoder) .create(); const create = (input) => { const props = Object.assign(Object.assign({}, tokenParticle_1.tokenParticleProps(input)), { address: input.address, radixParticleType }); if (!props.amount.isMultipleOf(props.granularity)) { return neverthrow_1.err(new Error('Amount not multiple of granularity')); } return neverthrow_1.ok(Object.assign(Object.assign(Object.assign({}, serialization(props)), tokenParticle_1.withTokenParticleEquals((otherParticle) => otherParticle.address.equals(input.address))(props)), props)); }; const isTransferrableTokensParticle = (something) => { if (!radixParticleTypes_1.isRadixParticle(something)) return false; return something.radixParticleType === radixParticleType; }; exports.isTransferrableTokensParticle = isTransferrableTokensParticle; exports.TransferrableTokensParticle = Object.assign(Object.assign({ SERIALIZER }, jsonDecoding), { JSONDecoder, create }); //# sourceMappingURL=transferrableTokensParticle.js.map