branching flow

✓ Passing This code compiles and runs correctly.

Code

// ============================================================================
// VERIFIED REGRESSION TEST - DO NOT MODIFY WITHOUT DISCUSSION
// ============================================================================
// Test 209: Flow with multiple continuation branches
// A synthetic example for visualizing flows where multiple branches continue
// ============================================================================

const std = @import("std");

// Validation events
~event validate { value: i32 }
| valid { result: i32 }
| invalid { msg: []const u8 }

~proc validate {
    if (value > 0) {
        return .{ .valid = .{ .result = value } };
    }
    return .{ .invalid = .{ .msg = "Value must be positive" } };
}

~event double { value: i32 }
| ok { result: i32 }

~proc double {
    return .{ .ok = .{ .result = value * 2 } };
}

~event triple { value: i32 }
| ok { result: i32 }

~proc triple {
    return .{ .ok = .{ .result = value * 3 } };
}

~event success { result: i32 }
| done {}

~proc success {
    std.debug.print("Success: {}\n", .{result});
    return .{ .done = .{} };
}

~event failure { msg: []const u8 }
| done {}

~proc failure {
    std.debug.print("Failure: {s}\n", .{msg});
    return .{ .done = .{} };
}

// Flow with multiple branching paths
~validate(value: 42)
| valid v |> double(value: v.result)
    | ok doubled |> success(result: doubled.result)
        | done |> _
| invalid e |> triple(value: -1)
    | ok _ |> failure(msg: e.msg)
        | done |> _
input.kz