public class ErrorAwareStringToIntStep : ErrorAwarePipelineStep { public override Either ProcessSuccessInput(Either input) { int value; if (int.TryParse(input.SuccessValue, out value)) { return value; } else { return new Exception("Can't parse string to integer"); } } } public class ErrorAwareMultiplyStep : ErrorAwarePipelineStep { public override Either ProcessSuccessInput(Either input) { return input * 2.1f; } } public class ErrorStateChangeStep : ErrorAwarePipelineStep { public override Either ProcessSuccessInput(Either input) { return input; } public override Either ProcessErrorInput(Either input) { return new Exception("This is a custom exception", input.FailureValue); } } public class ExampleErrorAwarePipeline : ErrorAwarePipeline { public ExampleErrorAwarePipeline() { PipelineSteps = input => input .ErrorAwareStep(new ErrorAwareStringToIntStep()) .ErrorAwareStep(new ErrorAwareMultiplyStep()) .ErrorAwareStep(new ErrorStateChangeStep()); } }