This commit is contained in:
@@ -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,
|
||||
>(
|
||||
// export function Jsonifiable<
|
||||
// A, I, R,
|
||||
// JsonifiableA extends I, JsonifiableI extends TF.Jsonifiable, JsonifiableR,
|
||||
// >(
|
||||
// schema: S.Schema<A, I, R>,
|
||||
// jsonifiable: S.Schema<JsonifiableA, JsonifiableI, JsonifiableR>,
|
||||
// ) {
|
||||
// return jsonifiable.pipe(S.compose(schema))
|
||||
// }
|
||||
|
||||
export function Jsonifiable<A, I, R>(
|
||||
schema: S.Schema<A, I, R>,
|
||||
jsonifiable: S.Schema<JsonifiableA, JsonifiableI, JsonifiableR>,
|
||||
) {
|
||||
return jsonifiable.pipe(S.compose(schema))
|
||||
return <
|
||||
JsonifiableA extends I,
|
||||
JsonifiableI extends TF.Jsonifiable,
|
||||
JsonifiableR,
|
||||
>(
|
||||
jsonifiable: S.Schema<JsonifiableA, JsonifiableI, JsonifiableR>
|
||||
) =>
|
||||
jsonifiable.pipe(S.compose(schema))
|
||||
}
|
||||
|
||||
@@ -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>()("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 }`))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user