correct default implementation of MapAccess.entries; add length params to Serializer object methods

This commit is contained in:
Rowan 2025-05-24 22:59:34 -05:00
parent 8d063d4868
commit 7745d3ae4c
3 changed files with 19 additions and 14 deletions

View file

@ -33,9 +33,9 @@ interface ISerializer<T> {
serializeString(value: string): T serializeString(value: string): T
serializeSymbol(value: symbol): T serializeSymbol(value: symbol): T
serializeNull(): T serializeNull(): T
serializeObject(): ISerializeObject<T> serializeIterable(len?: number): ISerializeIterable<T>
serializeIterable(): ISerializeIterable<T> serializeObject(len?: number): ISerializeObject<T>
serializeClass(name: string): ISerializeObject<T> serializeClass(name: string, len?: number): ISerializeObject<T>
} }
``` ```

View file

@ -19,6 +19,10 @@ export abstract class MapAccess {
abstract nextKeySeed<T, K extends Deserialize<T>>(seed: K): IteratorResult<T> abstract nextKeySeed<T, K extends Deserialize<T>>(seed: K): IteratorResult<T>
abstract nextValueSeed<T, V extends Deserialize<T>>(seed: V): IteratorResult<T> abstract nextValueSeed<T, V extends Deserialize<T>>(seed: V): IteratorResult<T>
private orDefaultSeed<T>(seed?: Deserialize<T>): Deserialize<T> {
return seed || GenericSeed.deserialize
}
nextEntrySeed<TK, TV, K extends Deserialize<TK>, V extends Deserialize<TV>>(kseed: K, vseed: V): IteratorResult<[TK, TV]> { nextEntrySeed<TK, TV, K extends Deserialize<TK>, V extends Deserialize<TV>>(kseed: K, vseed: V): IteratorResult<[TK, TV]> {
const key = this.nextKeySeed(kseed) as IteratorResult<TK> const key = this.nextKeySeed(kseed) as IteratorResult<TK>
@ -81,9 +85,9 @@ export abstract class MapAccess {
entries<TK, TV, K extends Deserialize<TK>, V extends Deserialize<TV>>(kseed?: K, vseed?: V): Iterator<[TK, TV]> { entries<TK, TV, K extends Deserialize<TK>, V extends Deserialize<TV>>(kseed?: K, vseed?: V): Iterator<[TK, TV]> {
return this.generate( return this.generate(
kseed == null || vseed == null ? kseed == null && vseed == null ?
this.nextEntry.bind(this) : 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<T>(visitor: any): visitor is IVisitor<T> { export function isVisitor<T>(visitor: any): visitor is IVisitor<T> {
return VisitorMethods.every(method => method in visitor) return VisitorMethods.every(method => method in visitor)
} }
export interface IVisitor<T> { export interface IVisitor<T> {
visitBoolean(value: boolean): T visitBoolean(value: boolean): T
visitNumber(value: number): T visitNumber(value: number): T

View file

@ -34,16 +34,12 @@ export interface ISerializer<T> {
serializeString(value: string): T serializeString(value: string): T
serializeSymbol(value: symbol): T serializeSymbol(value: symbol): T
serializeNull(): T serializeNull(): T
serializeObject(): ISerializeObject<T> serializeIterable(len?: number): ISerializeIterable<T>
serializeIterable(): ISerializeIterable<T> serializeObject(len?: number): ISerializeObject<T>
serializeClass(name: string): ISerializeObject<T> serializeClass(name: string, len?: number): ISerializeObject<T>
} }
export class Serializer<T> implements ISerializer<T> { export class Serializer<T> implements ISerializer<T> {
serializeIterable(): ISerializeIterable<T> {
throw new Error("Method not implemented.")
}
serializeAny(_value: any): T { serializeAny(_value: any): T {
throw new Error("Method not implemented.") throw new Error("Method not implemented.")
} }
@ -72,11 +68,15 @@ export class Serializer<T> implements ISerializer<T> {
throw new Error('Method not implemented.') throw new Error('Method not implemented.')
} }
serializeObject(): ISerializeObject<T> { serializeIterable(_len: number): ISerializeIterable<T> {
throw new Error("Method not implemented.")
}
serializeObject(_len: number): ISerializeObject<T> {
throw new Error('Method not implemented.') throw new Error('Method not implemented.')
} }
serializeClass(_name: string): ISerializeObject<T> { serializeClass(_name: string, _len: number): ISerializeObject<T> {
throw new Error('Method not implemented.') throw new Error('Method not implemented.')
} }
} }