import { ByteBuffer } from '../serialization/ByteBuffer' import { EcsType } from './EcsType' import { ToOptional } from './typing' /** * @public */ export interface Spec { [key: string]: EcsType } /** * @public */ export type Result = ToOptional<{ [K in keyof T]: T[K] extends EcsType ? ReturnType : T[K] extends Spec ? Result : never }> /** * @public */ export function MapType(spec: T): EcsType> { return { serialize(value: Result, builder: ByteBuffer): void { for (const key in spec) { // TODO: as any spec[key].serialize((value as any)[key], builder) } }, deserialize(reader: ByteBuffer): Result { const newValue: Result = {} as any for (const key in spec) { // TODO: as any ;(newValue as any)[key] = spec[key].deserialize(reader) } return newValue }, create() { const newValue: Result = {} as any for (const key in spec) { // TODO: as any ;(newValue as any)[key] = spec[key].create() } return newValue } } }