feature. See also
. The project being documented here (as the example) is the Zig library itself.
Uring.operate
fn operate(userdata: ?*anyopaque, operation: Io.Operation) Io.Cancelable!Io.Operation.Result
File
Code
fn operate(userdata: ?*anyopaque, operation: Io.Operation) Io.Cancelable!Io.Operation.Result {
const ev: *Evented = @ptrCast(@alignCast(userdata));
var maybe_sync: CancelRegion.Sync.Maybe = .{ .cancel_region = .init() };
defer maybe_sync.deinit(ev);
return switch (operation) {
.file_read_streaming => |o| .{
.file_read_streaming = ev.fileReadStreaming(
&maybe_sync.cancel_region,
o.file,
o.data,
) catch |err| switch (err) {
error.Canceled => |e| return e,
else => |e| e,
},
},
.file_write_streaming => |o| .{
.file_write_streaming = ev.fileWriteStreaming(
&maybe_sync.cancel_region,
o.file,
o.header,
o.data,
o.splat,
) catch |err| switch (err) {
error.Canceled => |e| return e,
else => |e| e,
},
},
.device_io_control => |o| .{
.device_io_control = try ev.deviceIoControl(try maybe_sync.enterSync(ev), o),
},
.net_receive => |o| .{
.net_receive = r: {
const opt_err, const n = ev.netReceive(&maybe_sync.cancel_region, o.socket_handle, o.message_buffer, o.data_buffer, o.flags);
break :r .{
if (opt_err) |err| switch (err) {
error.Canceled => |e| return e,
else => |e| e,
} else null,
n,
};
},
},
.net_read => |o| .{
.net_read = r: {
_ = o;
break :r error.NetworkDown;
},
},
};
}