wuespace/telestion-client

View on GitHub
packages/vertx-event-bus/src/lib/messages.ts

Summary

Maintainability
A
2 hrs
Test Coverage
A
100%
import {
    ChannelAddress,
    ErrorMessage,
    Headers,
    JsonSerializable,
    PingMessage,
    PublishMessage,
    RegisterMessage,
    SendMessage,
    UnregisterMessage
} from '@wuespace/telestion-client-types';

/**
 * Builds a ping message.
 *
 * @example
 * ```ts
 * this.pingTimer = setInterval(
 *     () => this.sandRaw(pingMessage()),
 *     this.options.pingInterval
 * );
 * ```
 */
export function pingMessage(): PingMessage {
    return { type: 'ping' };
}

/**
 * Builds a register message.
 * @param address - the address which should be registered
 * @param headers - additional headers sent with the message
 * @returns a valid register message
 *
 * @example
 * ```ts
 * if (this.handlers.every(handler => handler[0] !== address)) {
 *     this.bus.send(registerMessage(address, headers), false);
 * }
 * ```
 */
export function registerMessage(
    address: ChannelAddress,
    headers: Headers = {}
): RegisterMessage {
    return {
        type: 'register',
        address,
        headers
    };
}

/**
 * Builds an unregister message.
 * @param address - the address which should be unregistered
 * @param headers - additional headers sent with the message
 * @returns a valid unregister message
 *
 * @example
 * ```ts
 * if (this.handlers.every(handler => handler[0] !== address)) {
 *     this.bus.send(unregisterMessage(address, headers), false);
 * }
 * ```
 */
export function unregisterMessage(
    address: ChannelAddress,
    headers: Headers = {}
): UnregisterMessage {
    return {
        type: 'unregister',
        address,
        headers
    };
}

/**
 * Builds a publish message.
 * @param address - the address of the message
 * @param content - the content to publish
 * @param headers - additional headers sent with the message
 * @returns a valid publish message
 *
 * @example
 * ```ts
 * this.bus.send(publishMessage(address, content, headers));
 * ```
 */
export function publishMessage(
    address: ChannelAddress,
    content: JsonSerializable,
    headers: Headers = {}
): PublishMessage {
    return {
        type: 'publish',
        address,
        body: content,
        headers
    };
}

/**
 * Builds a send message.
 * @param address - the address of the message
 * @param replyAddress - the reply address of the message
 * @param content - the content to send
 * @param headers - additional headers sent with the message
 * @returns a valid send message
 *
 * @example
 * ```ts
 * this.bus.send(sendMessage(address, replyAddress, content, headers));
 * ```
 */
export function sendMessage(
    address: ChannelAddress,
    replyAddress: ChannelAddress,
    content: JsonSerializable,
    headers: Headers = {}
): SendMessage {
    return {
        type: 'send',
        address,
        replyAddress,
        body: content,
        headers
    };
}

/**
 * Builds an error message.
 * @param failureCode - the failure code of the error
 * @param failureType - the failure type of the error
 * @param message - additional information on this error
 * @returns a valid error message
 *
 * @example
 * ```ts
 * try {
 *     // something
 * } catch (err) {
 *     this.onMessage?.(errorMessage(1, 'Error', 'Something happened'));
 * }
 * ```
 */
export function errorMessage(
    failureCode: number,
    failureType: string,
    message: string
): ErrorMessage {
    return {
        type: 'err',
        failureCode,
        failureType,
        message
    };
}