@radixdlt/atom
Version:
Container for CRUD instructions known as 'Particles' that are sent to the Radix decentralized ledger
38 lines • 2.39 kB
JavaScript
;
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