serde-ts/src/de/mixin.ts
2025-05-19 13:30:11 -05:00

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
}