correct default implementation of MapAccess.entries; add length params to Serializer object methods
This commit is contained in:
parent
8d063d4868
commit
7745d3ae4c
3 changed files with 19 additions and 14 deletions
|
@ -33,9 +33,9 @@ interface ISerializer<T> {
|
|||
serializeString(value: string): T
|
||||
serializeSymbol(value: symbol): T
|
||||
serializeNull(): T
|
||||
serializeObject(): ISerializeObject<T>
|
||||
serializeIterable(): ISerializeIterable<T>
|
||||
serializeClass(name: string): ISerializeObject<T>
|
||||
serializeIterable(len?: number): ISerializeIterable<T>
|
||||
serializeObject(len?: number): ISerializeObject<T>
|
||||
serializeClass(name: string, len?: number): ISerializeObject<T>
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -19,6 +19,10 @@ export abstract class MapAccess {
|
|||
abstract nextKeySeed<T, K extends Deserialize<T>>(seed: K): 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]> {
|
||||
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]> {
|
||||
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<T>(visitor: any): visitor is IVisitor<T> {
|
||||
return VisitorMethods.every(method => method in visitor)
|
||||
}
|
||||
|
||||
export interface IVisitor<T> {
|
||||
visitBoolean(value: boolean): T
|
||||
visitNumber(value: number): T
|
||||
|
|
|
@ -34,16 +34,12 @@ export interface ISerializer<T> {
|
|||
serializeString(value: string): T
|
||||
serializeSymbol(value: symbol): T
|
||||
serializeNull(): T
|
||||
serializeObject(): ISerializeObject<T>
|
||||
serializeIterable(): ISerializeIterable<T>
|
||||
serializeClass(name: string): ISerializeObject<T>
|
||||
serializeIterable(len?: number): ISerializeIterable<T>
|
||||
serializeObject(len?: number): ISerializeObject<T>
|
||||
serializeClass(name: string, len?: number): ISerializeObject<T>
|
||||
}
|
||||
|
||||
export class Serializer<T> implements ISerializer<T> {
|
||||
serializeIterable(): ISerializeIterable<T> {
|
||||
throw new Error("Method not implemented.")
|
||||
}
|
||||
|
||||
serializeAny(_value: any): T {
|
||||
throw new Error("Method not implemented.")
|
||||
}
|
||||
|
@ -72,11 +68,15 @@ export class Serializer<T> implements ISerializer<T> {
|
|||
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.')
|
||||
}
|
||||
|
||||
serializeClass(_name: string): ISerializeObject<T> {
|
||||
serializeClass(_name: string, _len: number): ISerializeObject<T> {
|
||||
throw new Error('Method not implemented.')
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue