import { Effect, pipe } from "effect" import { JsonifiableObject } from "type-fest/source/jsonifiable" import { z } from "zod" import { JsonifiableSchemableClass } from "." import { parseZodTypeEffect } from "../../util" export function dejsonifySchemable< C extends JsonifiableSchemableClass< SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues, JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, DejsonifySchemaT, DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, JsonifiedValues, "Class" >, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, Values extends {}, DefaultValues extends Partial, JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, DejsonifySchemaT extends z.ZodRawShape, DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, JsonifiedValues extends JsonifiableObject, >( class_: C | JsonifiableSchemableClass< SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues, JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, DejsonifySchemaT, DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, JsonifiedValues, "Class" >, values: JsonifiedValues, params?: Partial, ) { return new class_( class_.dejsonifySchema.parse(values, params) ) as InstanceType } export async function dejsonifySchemablePromise< C extends JsonifiableSchemableClass< SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues, JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, DejsonifySchemaT, DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, JsonifiedValues, "Class" >, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, Values extends {}, DefaultValues extends Partial, JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, DejsonifySchemaT extends z.ZodRawShape, DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, JsonifiedValues extends JsonifiableObject, >( class_: C | JsonifiableSchemableClass< SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues, JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, DejsonifySchemaT, DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, JsonifiedValues, "Class" >, values: JsonifiedValues, params?: Partial, ) { return new class_( await class_.dejsonifySchema.parseAsync(values, params) ) as InstanceType } export function dejsonifySchemableEffect< C extends JsonifiableSchemableClass< SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues, JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, DejsonifySchemaT, DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, JsonifiedValues, "Class" >, SchemaT extends z.ZodRawShape, SchemaUnknownKeys extends z.UnknownKeysParam, SchemaCatchall extends z.ZodTypeAny, Values extends {}, DefaultValues extends Partial, JsonifySchemaT extends z.ZodRawShape, JsonifySchemaUnknownKeys extends z.UnknownKeysParam, JsonifySchemaCatchall extends z.ZodTypeAny, DejsonifySchemaT extends z.ZodRawShape, DejsonifySchemaUnknownKeys extends z.UnknownKeysParam, DejsonifySchemaCatchall extends z.ZodTypeAny, JsonifiedValues extends JsonifiableObject, >( class_: C | JsonifiableSchemableClass< SchemaT, SchemaUnknownKeys, SchemaCatchall, Values, DefaultValues, JsonifySchemaT, JsonifySchemaUnknownKeys, JsonifySchemaCatchall, DejsonifySchemaT, DejsonifySchemaUnknownKeys, DejsonifySchemaCatchall, JsonifiedValues, "Class" >, values: JsonifiedValues, params?: Partial, ) { return pipe( parseZodTypeEffect(class_.dejsonifySchema, values, params), Effect.map(values => new class_(values) as InstanceType), ) }