import {ContainerBlueprint, Instantiable, isInstantiableOf} from '../../../di' import {JSONState, logIfDebugging} from '../../../util' import {BaseSerializer} from './BaseSerializer' import {Serialization} from './Serialization' import {Serializer} from '../types' /** * Register a class as an object serializer with the Serialization service. * @constructor */ export const ObjectSerializer = (): >>(target: TFunction) => TFunction | void => { return (target: Instantiable>) => { if ( isInstantiableOf(target, BaseSerializer) ) { logIfDebugging('extollo.bus.serial.decorators', 'Registering ObjectSerializer blueprint:', target) ContainerBlueprint.getContainerBlueprint() .onResolve(Serialization, serial => serial.register(target)) } else { logIfDebugging('extollo.bus.serial.decorators', 'Skipping ObjectSerializer blueprint:', target) } } }