import {BaseSerializer, ObjectSerializer} from '../../../support/bus' import {QueryExecutedEvent} from './QueryExecutedEvent' import {Awaitable, JSONState} from '../../../util' import {Container, Inject, Injectable} from '../../../di' import {DatabaseService} from '../../DatabaseService' export interface QueryExecutedEventSerialPayload extends JSONState { connectionName: string query: string } @ObjectSerializer() @Injectable() export class QueryExecutedEventSerializer extends BaseSerializer { @Inject() protected readonly injector!: Container protected decodeSerial(serial: QueryExecutedEventSerialPayload): Awaitable { const connection = this.injector.make(DatabaseService).get(serial.connectionName) return new QueryExecutedEvent(serial.connectionName, connection, serial.query) } protected encodeActual(actual: QueryExecutedEvent): Awaitable { return { connectionName: actual.connectionName, query: actual.query, } } protected getName(): string { return '@extollo/lib.QueryExecutedEventSerializer' } matchActual(some: QueryExecutedEvent): boolean { return some instanceof QueryExecutedEvent } }