From 7745d3ae4ca48d0bfc425a3af8b534f706a57ab3 Mon Sep 17 00:00:00 2001 From: rowan Date: Sat, 24 May 2025 22:59:34 -0500 Subject: [PATCH] correct default implementation of MapAccess.entries; add length params to Serializer object methods --- README.md | 6 +++--- src/de/interface.ts | 9 +++++++-- src/ser/interface.ts | 18 +++++++++--------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 552ad6c..c3f0f3b 100644 --- a/README.md +++ b/README.md @@ -33,9 +33,9 @@ interface ISerializer { serializeString(value: string): T serializeSymbol(value: symbol): T serializeNull(): T - serializeObject(): ISerializeObject - serializeIterable(): ISerializeIterable - serializeClass(name: string): ISerializeObject + serializeIterable(len?: number): ISerializeIterable + serializeObject(len?: number): ISerializeObject + serializeClass(name: string, len?: number): ISerializeObject } ``` diff --git a/src/de/interface.ts b/src/de/interface.ts index 9a9aee8..c659d3c 100644 --- a/src/de/interface.ts +++ b/src/de/interface.ts @@ -19,6 +19,10 @@ export abstract class MapAccess { abstract nextKeySeed>(seed: K): IteratorResult abstract nextValueSeed>(seed: V): IteratorResult + private orDefaultSeed(seed?: Deserialize): Deserialize { + return seed || GenericSeed.deserialize + } + nextEntrySeed, V extends Deserialize>(kseed: K, vseed: V): IteratorResult<[TK, TV]> { const key = this.nextKeySeed(kseed) as IteratorResult @@ -81,9 +85,9 @@ export abstract class MapAccess { entries, V extends Deserialize>(kseed?: K, vseed?: V): Iterator<[TK, TV]> { return this.generate( - kseed == null || vseed == null ? + kseed == null && vseed == null ? this.nextEntry.bind(this) : - this.nextEntrySeed.bind(this, kseed, vseed) as any + this.nextEntrySeed.bind(this, this.orDefaultSeed(kseed), this.orDefaultSeed(vseed)) as any ) } @@ -127,6 +131,7 @@ const VisitorMethods = Object.freeze([ export function isVisitor(visitor: any): visitor is IVisitor { return VisitorMethods.every(method => method in visitor) } + export interface IVisitor { visitBoolean(value: boolean): T visitNumber(value: number): T diff --git a/src/ser/interface.ts b/src/ser/interface.ts index 3d4b33b..95ae190 100644 --- a/src/ser/interface.ts +++ b/src/ser/interface.ts @@ -34,16 +34,12 @@ export interface ISerializer { serializeString(value: string): T serializeSymbol(value: symbol): T serializeNull(): T - serializeObject(): ISerializeObject - serializeIterable(): ISerializeIterable - serializeClass(name: string): ISerializeObject + serializeIterable(len?: number): ISerializeIterable + serializeObject(len?: number): ISerializeObject + serializeClass(name: string, len?: number): ISerializeObject } export class Serializer implements ISerializer { - serializeIterable(): ISerializeIterable { - throw new Error("Method not implemented.") - } - serializeAny(_value: any): T { throw new Error("Method not implemented.") } @@ -72,11 +68,15 @@ export class Serializer implements ISerializer { throw new Error('Method not implemented.') } - serializeObject(): ISerializeObject { + serializeIterable(_len: number): ISerializeIterable { + throw new Error("Method not implemented.") + } + + serializeObject(_len: number): ISerializeObject { throw new Error('Method not implemented.') } - serializeClass(_name: string): ISerializeObject { + serializeClass(_name: string, _len: number): ISerializeObject { throw new Error('Method not implemented.') } }