RenaiApp/src/main/modules/serialization/serializers/collection-serializer.ts

33 lines
1.3 KiB
TypeScript

import { injectable } from 'inversify';
import { CollectionName } from '../../../entities/library/collection-name';
import { CollectionPart } from '../../../entities/library/collection-part';
import { getDeserializedEntitiesPromise } from '../get-deserialized';
import { serializeEntitiesPromise } from '../serialize-entity-promise';
import { Serializer } from '../serializer';
@injectable()
export class CollectionSerializer extends Serializer<CollectionEntityInterface, CollectionSerializedInterface> {
public async serialize(entity: CollectionEntityInterface): Promise<CollectionSerializedInterface> {
const [names, parts] = await Promise.all([
serializeEntitiesPromise(entity.names),
serializeEntitiesPromise(entity.parts),
]);
return {
id: entity.id,
nameCanonical: entity.nameCanonical,
names,
parts,
};
}
public deserialize(partial: Partial<CollectionSerializedInterface>): Partial<CollectionEntityInterface> {
return {
...(partial.id ? { id: partial.id } : {}),
...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}),
...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, CollectionName) } : {}),
...(partial.parts ? { parts: getDeserializedEntitiesPromise(partial.parts, CollectionPart) } : {}),
};
}
}