import { Effect, pipe } from "effect" import { z } from "zod" import { JsonifiableSchemableClass, JsonifiableSchemableConfig } from "." import { parseZodTypeEffect } from "../util" export const dejsonifySchemable = < C extends JsonifiableSchemableClass<$Config>, $Config extends JsonifiableSchemableConfig, >( class_: C | JsonifiableSchemableClass<$Config>, values: $Config["jsonifiedValues"], params?: Partial, ) => new class_(class_.dejsonifySchema.parse(values, params)) as InstanceType export const dejsonifySchemablePromise = async < C extends JsonifiableSchemableClass<$Config>, $Config extends JsonifiableSchemableConfig, >( class_: C | JsonifiableSchemableClass<$Config>, values: $Config["jsonifiedValues"], params?: Partial, ) => new class_(await class_.dejsonifySchema.parseAsync(values, params)) as InstanceType export const dejsonifySchemableEffect = < C extends JsonifiableSchemableClass<$Config>, $Config extends JsonifiableSchemableConfig, >( class_: C | JsonifiableSchemableClass<$Config>, values: $Config["jsonifiedValues"], params?: Partial, ) => pipe( parseZodTypeEffect< z.output, z.input >( class_.dejsonifySchema, values, params, ), Effect.map(values => new class_(values) as InstanceType), )