From 50297eff21b2b9b7a293ab7eb1fac0ef901fe319 Mon Sep 17 00:00:00 2001 From: cozis Date: Mon, 1 Jun 2026 15:12:14 +0200 Subject: [PATCH] examples: Add select_group_async.zig to trigger the IO groupAsync callback --- examples/select_group_async.zig | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 examples/select_group_async.zig diff --git a/examples/select_group_async.zig b/examples/select_group_async.zig new file mode 100644 index 0000000..7f7bcbb --- /dev/null +++ b/examples/select_group_async.zig @@ -0,0 +1,36 @@ +const std = @import("std"); +const Io = std.Io; + +const Simulator = @import("zigmulator"); + +const SelectResult = union(enum) { + answer: u32, +}; + +fn computeAnswer() u32 { + return 42; +} + +fn program(init: std.process.Init) anyerror!void { + var buffer: [1]SelectResult = undefined; + var select = Io.Select(SelectResult).init(init.io, &buffer); + + // This calls the Io vtable's groupAsync callback. + select.async(.answer, computeAnswer, .{}); + + const result = try select.await(); + var stdout = Io.File.stdout().writerStreaming(init.io, &.{}); + try stdout.interface.print("answer: {}\n", .{result.answer}); + try stdout.interface.flush(); +} + +pub fn main(init: std.process.Init) !void { + var sim: Simulator = undefined; + sim.init(std.heap.page_allocator, init.io); + defer sim.deinit(); + + try sim.addExecutable("select_group_async", program); + try sim.spawn("select_group_async", .{}); + + while (sim.scheduleOne()) {} +}