From 63045c5d783e6605b94880fe733b57a541fe9801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Thu, 9 May 2024 23:49:11 +0200 Subject: [PATCH] Effect schema work --- .../EffectSchemaTraitExpressionBuilder.ts | 33 ++++++++++++++++++- src/effect/tests.ts | 9 ++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/effect/EffectSchemaTraitExpressionBuilder.ts b/src/effect/EffectSchemaTraitExpressionBuilder.ts index afa83db..42ad51e 100644 --- a/src/effect/EffectSchemaTraitExpressionBuilder.ts +++ b/src/effect/EffectSchemaTraitExpressionBuilder.ts @@ -1,5 +1,5 @@ import { Schema as S } from "@effect/schema" -import { Simplify } from "effect/Types" +import { Mutable, Simplify } from "effect/Types" import { Trait, TraitTuple } from "../Trait" import { TraitExpression } from "../TraitExpression" import { TraitExpressionBuilder } from "../TraitExpressionBuilder" @@ -92,6 +92,37 @@ export class EffectSchemaTraitExpressionBuilder< ) {} + mutable(): EffectSchemaTraitExpressionBuilder< + Fields, + Mutable, + I, + R, + C, + Inherited, + Proto, + Static, + + Traits + > { + return new EffectSchemaTraitExpressionBuilder(this.expressionSuperclass, this.expressionTraits) + } + + mutableEncoded(): EffectSchemaTraitExpressionBuilder< + Fields, + A, + Mutable, + R, + C, + Inherited, + Proto, + Static, + + Traits + > { + return new EffectSchemaTraitExpressionBuilder(this.expressionSuperclass, this.expressionTraits) + } + + expresses< const T extends readonly Trait< TraitExpression< diff --git a/src/effect/tests.ts b/src/effect/tests.ts index 8910c9c..34b0b97 100644 --- a/src/effect/tests.ts +++ b/src/effect/tests.ts @@ -8,6 +8,8 @@ const userExp = effectSchemaExpression id: S.BigIntFromSelf, role: S.Union(S.Literal("User"), S.Literal("Admin")), }) + .mutable() + .mutableEncoded() .build() @userExp.staticImplements @@ -16,6 +18,10 @@ class User extends userExp.extends() implements Implements static aStaticMethodThatShouldBeInherited() {} } +const user = new User({ id: 0n, role: "User" }) +user.id = 0n +type UserEncoded = S.Schema.Encoded + const adminExp = effectSchemaExpression .extends(User, "User", { @@ -27,4 +33,5 @@ const adminExp = effectSchemaExpression class Admin extends adminExp.extends() implements Implements { } -new Admin({ id: 0n, role: "Admin" }).aMethodThatShouldBeInherited() +const admin = new Admin({ id: 1n, role: "Admin" }) +// admin.id = 1n