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

43 lines
1.6 KiB
TypeScript

import { injectable } from 'inversify';
import { Tag } from '../../../entities/library/tag';
import { WorkCharacter } from '../../../entities/library/work-character';
import { getDeserializedEntitiesPromise, getDeserializedEntityPromise } from '../get-deserialized';
import { serializeEntitiesPromise, serializeEntityPromise } from '../serialize-entity-promise';
import { Serializer } from '../serializer';
injectable();
export class InteractionTagSerializer extends Serializer<
InteractionTagEntityInterface,
InteractionTagSerializedInterface
> {
public async serialize(entity: InteractionTagEntityInterface): Promise<InteractionTagSerializedInterface> {
const [tag, objectCharacters, subjectCharacters] = await Promise.all([
serializeEntityPromise(entity.tag),
serializeEntitiesPromise(entity.objectCharacters),
serializeEntitiesPromise(entity.subjectCharacters),
]);
return {
id: entity.id,
weight: entity.weight,
tag,
objectCharacters,
subjectCharacters,
};
}
public deserialize(partial: Partial<InteractionTagSerializedInterface>): Partial<InteractionTagEntityInterface> {
return {
...(partial.id ? { id: partial.id } : {}),
...(partial.weight ? { weight: partial.weight } : {}),
...(partial.tag ? { tag: getDeserializedEntityPromise(partial.tag, Tag) } : {}),
...(partial.objectCharacters
? { objectCharacters: getDeserializedEntitiesPromise(partial.objectCharacters, WorkCharacter) }
: {}),
...(partial.subjectCharacters
? { subjectCharacters: getDeserializedEntitiesPromise(partial.subjectCharacters, WorkCharacter) }
: {}),
};
}
}