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

46 lines
2.0 KiB
TypeScript

import { injectable } from 'inversify';
import { Work } from '../../../entities/library/work';
import { World } from '../../../entities/library/world';
import { WorldCharacter } from '../../../entities/library/world-character';
import { WorldName } from '../../../entities/library/world-name';
import { getDeserializedEntitiesPromise } from '../get-deserialized';
import { serializeEntitiesPromise } from '../serialize-entity-promise';
import { Serializer } from '../serializer';
@injectable()
export class WorldSerializer extends Serializer<WorldEntityInterface, WorldSerializedInterface> {
public async serialize(entity: WorldEntityInterface): Promise<WorldSerializedInterface> {
const [names, children, parents, works, worldCharacters] = await Promise.all([
serializeEntitiesPromise(entity.names),
serializeEntitiesPromise(entity.children),
serializeEntitiesPromise(entity.parents),
serializeEntitiesPromise(entity.works),
serializeEntitiesPromise(entity.worldCharacters),
]);
return {
id: entity.id,
nameCanonical: entity.nameCanonical,
names,
children,
parents,
works,
worldCharacters,
};
}
public deserialize(partial: Partial<WorldSerializedInterface>): Partial<WorldEntityInterface> {
return {
...(partial.id ? { id: partial.id } : {}),
...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}),
...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, WorldName) } : {}),
...(partial.children ? { children: getDeserializedEntitiesPromise(partial.children, World) } : {}),
...(partial.parents ? { parents: getDeserializedEntitiesPromise(partial.parents, World) } : {}),
...(partial.works ? { works: getDeserializedEntitiesPromise(partial.works, Work) } : {}),
...(partial.worldCharacters
? { worldCharacters: getDeserializedEntitiesPromise(partial.worldCharacters, WorldCharacter) }
: {}),
};
}
}