From f119d11e1ebfcec6f7b67e4c95ecaacd0219fc2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 27 Jun 2024 13:33:34 +0200 Subject: [PATCH] Jsonifiable work --- src/effect/schema/Jsonifiable.ts | 27 ++++++++++++++++++++------- src/effect/schema/tests.ts | 14 ++++++++++++++ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/effect/schema/Jsonifiable.ts b/src/effect/schema/Jsonifiable.ts index 26c19b2..058f829 100644 --- a/src/effect/schema/Jsonifiable.ts +++ b/src/effect/schema/Jsonifiable.ts @@ -2,12 +2,25 @@ import { Schema as S } from "@effect/schema" import type * as TF from "type-fest" -export function Jsonifiable< - A, I, R, - JsonifiableA extends I, JsonifiableI extends TF.Jsonifiable, JsonifiableR, ->( - schema: S.Schema, - jsonifiable: S.Schema, +// export function Jsonifiable< +// A, I, R, +// JsonifiableA extends I, JsonifiableI extends TF.Jsonifiable, JsonifiableR, +// >( +// schema: S.Schema, +// jsonifiable: S.Schema, +// ) { +// return jsonifiable.pipe(S.compose(schema)) +// } + +export function Jsonifiable( + schema: S.Schema, ) { - return jsonifiable.pipe(S.compose(schema)) + return < + JsonifiableA extends I, + JsonifiableI extends TF.Jsonifiable, + JsonifiableR, + >( + jsonifiable: S.Schema + ) => + jsonifiable.pipe(S.compose(schema)) } diff --git a/src/effect/schema/tests.ts b/src/effect/schema/tests.ts index 6ea33e9..139187d 100644 --- a/src/effect/schema/tests.ts +++ b/src/effect/schema/tests.ts @@ -1,5 +1,6 @@ import { Schema as S } from "@effect/schema" import { reaction, runInAction } from "mobx" +import { Jsonifiable } from "./Jsonifiable" import { MobXObservable, MutableTaggedClass } from "./class" @@ -10,6 +11,19 @@ class User extends MutableTaggedClass()("User", { MobXObservable ) {} +const JsonifiableUser = User.pipe( + Jsonifiable(S.Struct({ + ...User.fields, + id: S.BigInt, + })) +) + +const JsonifiableUser2 = Jsonifiable(User)(S.Struct({ + ...User.fields, + id: S.BigInt, +})) + + const user1 = new User({ id: -1n, role: "BasicUser" }) reaction(() => user1.id, id => console.log(`user1 id changed: ${ id }`))