serde-ts/src/de/impl.ts

15 lines
564 B
TypeScript

import { GlobalRegistry, Registry } from '../registry'
import { Constructor } from '../utils'
import { ProxyDeserializer } from './generic'
import { IDeserializer } from './interface'
export function deserialize<T, D extends IDeserializer>(deserializer: D, into: Constructor<T>, registry: Registry = GlobalRegistry): T {
const de = registry.deserializers.get(into)
if (de == null) {
throw new ReferenceError(`No deserializer for ${into.name}`)
} else {
return de(new ProxyDeserializer(deserializer, (into as any)?.[Symbol.metadata]?.serde))
}
}