○
Planned This feature is planned but not yet implemented.
Feature: Multi-branch tap handlers
Code
// Test 506: Multi-branch taps with fan-out
// Multiple tap handlers for the same branch should ALL fire
//
// ~tap(foo -> *)
// | success s |> log-success(s)
// | success s |> audit-success(s) // BOTH fire on success
// | error e |> log-error(e)
const std = @import("std");
~import std/taps
~event process { value: i32 }
| success i32
| error []const u8
~proc process|zig {
if (value > 0) {
return .{ .success = value * 2 };
}
return .{ .error = "negative value" };
}
// Multiple handlers for success branch - both should fire
~event log-success { result: i32 }
~proc log-success|zig {
std.debug.print("LOG: success with {d}\n", .{result});
}
~event audit-success { result: i32 }
~proc audit-success|zig {
std.debug.print("AUDIT: success with {d}\n", .{result});
}
// Single handler for error branch
~event log-error { msg: []const u8 }
~proc log-error|zig {
std.debug.print("LOG: error - {s}\n", .{msg});
}
// Multi-branch tap: two handlers for success, one for error
~tap(process -> *)
| success s |> log-success(s.result)
| success s |> audit-success(s.result)
| error e |> log-error(e.msg)
// Test with positive value (should trigger BOTH success handlers)
~process(value: 5)
| success _ |> _
| error _ |> _
// Test with negative value (should trigger error handler)
~process(value: -1)
| success _ |> _
| error _ |> _
Expected output
AUDIT: success with 10
LOG: success with 10
LOG: error - negative value