import { Schema, Schema as S } from "@effect/schema"
import { Effect } from "effect"
const jsonString = JSON.stringify({
struct: {
a: "1",
b: "2",
c: "3",
d: true
},
record: {
a: "1",
b: "2",
c: "3",
d: true
}
})
const StructSchema = S.Struct({
a: S.String,
c: S.String,
b: S.String,
d: S.Boolean
})
const RecordSchema = S.Record(S.String, S.Union(S.String, S.Boolean))
const configSchema = S.Struct({
"struct": StructSchema,
"record": RecordSchema
})
Effect.gen(function*() {
const output = yield* Schema.decode(S.parseJson(configSchema))(jsonString)
const doesMatch = JSON.stringify(output) === jsonString
console.log(output)
console.log({ doesMatch })
}).pipe(Effect.runPromise)
/*
Output:
{
struct: { d: true, a: '1', c: '3', b: '2' },
record: { a: '1', b: '2', c: '3', d: true }
}
*/
import { Schema, Schema as S } from "@effect/schema"
import { Effect } from "effect"
const jsonString = JSON.stringify({
struct: {
a: "1",
b: "2",
c: "3",
d: true
},
record: {
a: "1",
b: "2",
c: "3",
d: true
}
})
const StructSchema = S.Struct({
a: S.String,
c: S.String,
b: S.String,
d: S.Boolean
})
const RecordSchema = S.Record(S.String, S.Union(S.String, S.Boolean))
const configSchema = S.Struct({
"struct": StructSchema,
"record": RecordSchema
})
Effect.gen(function*() {
const output = yield* Schema.decode(S.parseJson(configSchema))(jsonString)
const doesMatch = JSON.stringify(output) === jsonString
console.log(output)
console.log({ doesMatch })
}).pipe(Effect.runPromise)
/*
Output:
{
struct: { d: true, a: '1', c: '3', b: '2' },
record: { a: '1', b: '2', c: '3', d: true }
}
*/