17 lines
540 B
TypeScript
17 lines
540 B
TypeScript
import { Constructor, staticImplements } from '../utils'
|
|
import { deserializeWith } from './impl'
|
|
import { Deserialize, Deserializer } from './interface'
|
|
|
|
export function deserialize<T, C extends Constructor>(constructor: C) {
|
|
@staticImplements<Deserialize<T>>()
|
|
class Deserializable extends constructor {
|
|
static name = constructor.name
|
|
|
|
static deserialize<D extends Deserializer>(deserializer: D): T {
|
|
return deserializeWith(deserializer, this, (this as any)[Symbol.metadata].serde)
|
|
}
|
|
}
|
|
|
|
return Deserializable
|
|
}
|
|
|