Files
thilalib/src/effect/schema/tests.ts
Julien Valverdé a49fa8763f
All checks were successful
Lint / lint (push) Successful in 11s
Jsonifiable
2024-06-27 17:59:55 +02:00

36 lines
920 B
TypeScript

import { Schema as S } from "@effect/schema"
import { reaction, runInAction } from "mobx"
import { Jsonifiable } from "./Jsonifiable"
import { MobXObservable, MutableTaggedClass } from "./class"
class User extends MutableTaggedClass<User>()("User", {
id: S.BigIntFromSelf,
role: S.Union(S.Literal("BasicUser"), S.Literal("Admin")),
}).pipe(
MobXObservable
) {}
const JsonifiableUser = User.pipe(
Jsonifiable(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 }`))
class Admin extends User.extend<Admin>("Admin")({
// role: S.Literal("Admin")
}) {}
const user2 = new Admin({ id: -1n, role: "Admin" })
reaction(() => user2.id, id => console.log(`user2 id changed: ${ id }`))
runInAction(() => { user1.id = 1n })
runInAction(() => { user2.id = 2n })