StepOutcome

sealed interface StepOutcome<out R>

Represents the outcome of a saga step execution.

This sealed interface provides type-safe, explicit control flow for saga steps, replacing exception-based cancellation with clean architecture principles.

Outcome Types

  • Completed - Step completed successfully with a result value

  • Failed - Step failed, triggering compensation for completed steps

  • Skipped - Step skipped, returning last successful result without compensation

Usage Example

enum class OrderSteps { VALIDATE, PAYMENT, SHIP }
enum class FailureReason { INVALID_ORDER, PAYMENT_DECLINED }
enum class SkipReason { ALREADY_PROCESSED }

first call OrderSteps.VALIDATE with { ctx ->
if (!ctx.valid) fails with FailureReason.INVALID_ORDER
if (ctx.alreadyProcessed) skip with SkipReason.ALREADY_PROCESSED

val order = validateOrder(ctx)
completes with order
}

Parameters

R

The result type on successful completion

Inheritors

Types

Link copied to clipboard
data class Completed<R>(val value: R) : StepOutcome<R>

Step completed successfully with result.

Link copied to clipboard
data class Failed(val failureReason: TypedValue) : StepOutcome<Nothing>

Step failed with a reason.

Link copied to clipboard
data class Skipped(val skipReason: TypedValue) : StepOutcome<Nothing>

Step skipped with a reason.