@radixdlt/atom
Version:
Container for CRUD instructions known as 'Particles' that are sent to the Radix decentralized ledger
72 lines (60 loc) • 1.89 kB
text/typescript
import { isRadixParticle, RadixParticleType } from './meta/radixParticleTypes'
import {
tokenSerializationKeyValues,
tokenParticleProps,
TokenParticleInput,
withTokenParticleEquals,
} from './meta/tokenParticle'
import {
DSONCodable,
DSONEncoding,
JSONEncodable,
JSONEncoding,
taggedObjectDecoder,
} from '@radixdlt/data-formats'
import { TokenParticle, UnallocatedTokensParticleT } from './_types'
import { ok } from 'neverthrow'
import { Amount } from '@radixdlt/primitives'
import { ResourceIdentifier } from '../resourceIdentifier'
import { SERIALIZER_KEY } from '../_types'
import { JSONDecoding } from '../utils'
const radixParticleType = RadixParticleType.UNALLOCATED_TOKENS
const SERIALIZER = 'radix.particles.unallocated_tokens'
const serialization = (input: TokenParticle): JSONEncodable & DSONCodable => {
const keyValues = tokenSerializationKeyValues(input)
return {
...JSONEncoding(SERIALIZER)({ ...keyValues }),
...DSONEncoding(SERIALIZER)({ ...keyValues }),
}
}
const JSONDecoder = taggedObjectDecoder(
SERIALIZER,
SERIALIZER_KEY,
)((input: TokenParticleInput) => ok(unallocatedTokensParticle(input)))
const jsonDecoding = JSONDecoding.withDependencies(Amount, ResourceIdentifier)
.withDecoders(JSONDecoder)
.create<UnallocatedTokensParticleT>()
export const unallocatedTokensParticle = (
input: TokenParticleInput,
): UnallocatedTokensParticleT => {
const props = {
...tokenParticleProps(input),
radixParticleType: radixParticleType,
}
return {
...serialization(props),
...withTokenParticleEquals()(props),
...props,
}
}
export const isUnallocatedTokensParticle = (
something: unknown,
): something is UnallocatedTokensParticleT => {
if (!isRadixParticle(something)) return false
return something.radixParticleType === radixParticleType
}
export const UnallocatedTokensParticle = {
...jsonDecoding,
JSONDecoder,
SERIALIZER,
}