import { Console, Effect, Schema } from "effect";
class TestSchemaOne extends Schema.Class<TestSchemaOne>("TestSchemaOne")({
name: Schema.String,
age: Schema.Number,
type: Schema.Literal("TestOne"),
}) {}
class TestSchemaTwo extends Schema.Class<TestSchemaTwo>("TestSchemaTwo")({
profileType: Schema.String,
type: Schema.Literal("TestTwo"),
}) {}
const TestSchema = Schema.Union([TestSchemaOne, TestSchemaTwo]).pipe(
Schema.toTaggedUnion("type"),
);
function tryDecode() {
return Effect.gen(function* () {
const result = yield* Schema.decodeUnknownEffect(TestSchema)({
type: "A",
a: "hello",
});
yield* Console.log(result);
return result;
});
}
Effect.runSync(
Effect.gen(function* () {
yield* Console.log("Starting");
const result = yield* tryDecode();
return result;
}),
);
import { Console, Effect, Schema } from "effect";
class TestSchemaOne extends Schema.Class<TestSchemaOne>("TestSchemaOne")({
name: Schema.String,
age: Schema.Number,
type: Schema.Literal("TestOne"),
}) {}
class TestSchemaTwo extends Schema.Class<TestSchemaTwo>("TestSchemaTwo")({
profileType: Schema.String,
type: Schema.Literal("TestTwo"),
}) {}
const TestSchema = Schema.Union([TestSchemaOne, TestSchemaTwo]).pipe(
Schema.toTaggedUnion("type"),
);
function tryDecode() {
return Effect.gen(function* () {
const result = yield* Schema.decodeUnknownEffect(TestSchema)({
type: "A",
a: "hello",
});
yield* Console.log(result);
return result;
});
}
Effect.runSync(
Effect.gen(function* () {
yield* Console.log("Starting");
const result = yield* tryDecode();
return result;
}),
);