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

54 lines
2.4 KiB
TypeScript

import { injectable } from 'inversify';
import { CharacterTag } from '../../../entities/library/character-tag';
import { InteractionTag } from '../../../entities/library/interaction-tag';
import { Tag } from '../../../entities/library/tag';
import { TagName } from '../../../entities/library/tag-name';
import { WorkTag } from '../../../entities/library/work-tag';
import { getDeserializedEntitiesPromise } from '../get-deserialized';
import { serializeEntitiesPromise } from '../serialize-entity-promise';
import { Serializer } from '../serializer';
@injectable()
export class TagSerializer extends Serializer<TagEntityInterface, TagSerializedInterface> {
public async serialize(entity: TagEntityInterface): Promise<TagSerializedInterface> {
const [names, characterTags, children, parents, interactionTags, workTags] = await Promise.all([
serializeEntitiesPromise(entity.names),
serializeEntitiesPromise(entity.characterTags),
serializeEntitiesPromise(entity.children),
serializeEntitiesPromise(entity.parents),
serializeEntitiesPromise(entity.interactionTags),
serializeEntitiesPromise(entity.workTags),
]);
return {
id: entity.id,
nameCanonical: entity.nameCanonical,
description: entity.description,
names,
characterTags,
children,
parents,
interactionTags,
workTags,
};
}
public deserialize(partial: Partial<TagSerializedInterface>): Partial<TagEntityInterface> {
return {
...(partial.id ? { id: partial.id } : {}),
...(partial.nameCanonical ? { nameCanonical: partial.nameCanonical } : {}),
...(partial.description ? { description: partial.description } : {}),
...(partial.names ? { names: getDeserializedEntitiesPromise(partial.names, TagName) } : {}),
...(partial.children ? { children: getDeserializedEntitiesPromise(partial.children, Tag) } : {}),
...(partial.parents ? { parents: getDeserializedEntitiesPromise(partial.parents, Tag) } : {}),
...(partial.workTags ? { workTags: getDeserializedEntitiesPromise(partial.workTags, WorkTag) } : {}),
...(partial.interactionTags
? { interactionTags: getDeserializedEntitiesPromise(partial.interactionTags, InteractionTag) }
: {}),
...(partial.characterTags
? { characterTags: getDeserializedEntitiesPromise(partial.characterTags, CharacterTag) }
: {}),
};
}
}