class UserEventSchema extends Schema.TaggedRequest<UserEventSchema>()("UserEventSchema", {
failure: Schema.Defect,
success: Schema.Option(Schema.Struct({ name: Schema.String })),
payload: {
name: Schema.String,
payload: Schema.Option(Schema.Struct({ ... })),
},
}) {}
const ComplexSteps = Workflow.schema(
// encode | decode
UserEventSchema,
({ name, payload }) =>
Effect.gen(function* () {
yield* Effect.logInfo(name, Option.getOrNull(payload));
return Option.some({ name });
}),
{
retries: { limit: 3, delay: "1 seconds" },
},
);
const SimpleStep = Workflow.do("step1", Effect.log("hello"));
const MyWorkflow = makeWorkflowEntrypoint(
{ name: "MyWorkflow", binding: "MY_WORKFLOW", schema: WorkflowParams },
Effect.gen(function* () {
yield* SimpleStep;
yield* Workflow.do("step2", Effect.log("world"));
yield* Workflow.sleep("sleep", "1 minute");
yield* ComplexSteps({ name: "cloudflare", payload: Option.some({ ... }) }); // return: Option
}),
);
const workflow = yield* Workflows.getWorkflow<WorkflowsBinding>("MyWorkflow");
const instance = yield* workflow.create({ params: { ... } }); // typesafe create
class UserEventSchema extends Schema.TaggedRequest<UserEventSchema>()("UserEventSchema", {
failure: Schema.Defect,
success: Schema.Option(Schema.Struct({ name: Schema.String })),
payload: {
name: Schema.String,
payload: Schema.Option(Schema.Struct({ ... })),
},
}) {}
const ComplexSteps = Workflow.schema(
// encode | decode
UserEventSchema,
({ name, payload }) =>
Effect.gen(function* () {
yield* Effect.logInfo(name, Option.getOrNull(payload));
return Option.some({ name });
}),
{
retries: { limit: 3, delay: "1 seconds" },
},
);
const SimpleStep = Workflow.do("step1", Effect.log("hello"));
const MyWorkflow = makeWorkflowEntrypoint(
{ name: "MyWorkflow", binding: "MY_WORKFLOW", schema: WorkflowParams },
Effect.gen(function* () {
yield* SimpleStep;
yield* Workflow.do("step2", Effect.log("world"));
yield* Workflow.sleep("sleep", "1 minute");
yield* ComplexSteps({ name: "cloudflare", payload: Option.some({ ... }) }); // return: Option
}),
);
const workflow = yield* Workflows.getWorkflow<WorkflowsBinding>("MyWorkflow");
const instance = yield* workflow.create({ params: { ... } }); // typesafe create