@atomiqlabs/base
Version:
Base classes and interfaces for atomiq protocol
47 lines (40 loc) • 1.14 kB
text/typescript
/**
* Currently defined types of the data propagation messages
*
* @category Messenger
*/
export enum MessageType {
SWAP_CLAIM_WITNESS = 0,
}
/**
* Representation of an abstract message in a data propagation layer
*
* @category Messenger
*/
export abstract class Message {
abstract readonly type: MessageType;
/**
* A mapping of deserializers for different message types
*
* @internal
*/
static deserializers: {[type: number]: (obj: any) => Message} = {};
/**
* Serializes the message to a format that can be JSON serialized (i.e. no bigints, functions, etc.)
*/
serialize(): any {
return {
type: this.type
}
}
/**
* Deserializer that parses the message from it's JSON compatible representation
*
* @param message
*/
static deserialize(message: any): Message {
const deserializer = Message.deserializers[message.type];
if(deserializer==null) throw new Error("Unknown message type " + message.type);
return deserializer(message);
}
}