Skip to documentation
SLOP

tiny.trace.checkpoint

Reference tiny.trace checkpoint

Defined in tiny.trace.

API (5)

Types and contracts

Public types and contracts.

No direct callersNo direct callstiny.tracecheckpoint
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Source: lib/trace/src/checkpoint.zig

zig
const std = @import("std");const Allocator = std.mem.Allocator;pub const CaptureFn = *const fn (context: *anyopaque, allocator: Allocator) anyerror![]u8;pub const PrepareRestoreFn = *const fn (context: *anyopaque, bytes: []const u8) anyerror!void;pub const CommitRestoreFn = *const fn (context: *anyopaque) void;pub const CancelRestoreFn = *const fn (context: *anyopaque) void;pub const Provider = struct {    context: *anyopaque,    capture: CaptureFn,    prepare_restore: PrepareRestoreFn,    commit_restore: CommitRestoreFn,    cancel_restore: CancelRestoreFn,    pub fn captureAlloc(self: Provider, allocator: Allocator) ![]u8 {        return try self.capture(self.context, allocator);    }    pub fn prepareRestoreBytes(self: Provider, bytes: []const u8) !void {        try self.prepare_restore(self.context, bytes);    }    pub fn commitRestore(self: Provider) void {        self.commit_restore(self.context);    }    pub fn cancelRestore(self: Provider) void {        self.cancel_restore(self.context);    }};const ProviderTestState = struct {    value: [32]u8 = undefined,    value_len: usize = 0,    staged: [32]u8 = undefined,    staged_len: usize = 0,    prepared: bool = false,    fn init(bytes: []const u8) ProviderTestState {        var self: ProviderTestState = .{};        self.setValue(bytes);        return self;    }    fn setValue(self: *ProviderTestState, bytes: []const u8) void {        std.debug.assert(bytes.len <= self.value.len);        @memcpy(self.value[0..bytes.len], bytes);        self.value_len = bytes.len;    }    fn current(self: *const ProviderTestState) []const u8 {        return self.value[0..self.value_len];    }    fn capture(context: *anyopaque, allocator: Allocator) ![]u8 {        const self: *@This() = @ptrCast(@alignCast(context));        return try allocator.dupe(u8, self.current());    }    fn prepareRestore(context: *anyopaque, bytes: []const u8) !void {        const self: *@This() = @ptrCast(@alignCast(context));        if (bytes.len > self.staged.len) return error.TestProviderCapacityExceeded;        @memcpy(self.staged[0..bytes.len], bytes);        self.staged_len = bytes.len;        self.prepared = true;    }    fn commitRestore(context: *anyopaque) void {        const self: *@This() = @ptrCast(@alignCast(context));        std.debug.assert(self.prepared);        @memcpy(self.value[0..self.staged_len], self.staged[0..self.staged_len]);        self.value_len = self.staged_len;        self.prepared = false;    }    fn cancelRestore(context: *anyopaque) void {        const self: *@This() = @ptrCast(@alignCast(context));        self.prepared = false;    }};test "provider stages restore before an infallible commit" {    var state = ProviderTestState.init("before");    const provider = Provider{        .context = &state,        .capture = ProviderTestState.capture,        .prepare_restore = ProviderTestState.prepareRestore,        .commit_restore = ProviderTestState.commitRestore,        .cancel_restore = ProviderTestState.cancelRestore,    };    {        const bytes = try provider.captureAlloc(std.testing.allocator);        defer std.testing.allocator.free(bytes);        state.setValue("after");        try provider.prepareRestoreBytes(bytes);        try std.testing.expectEqualStrings("after", state.current());        provider.commitRestore();    }    try std.testing.expectEqualStrings("before", state.current());}test "provider cancel discards a staged restore" {    var state = ProviderTestState.init("before");    const provider = Provider{        .context = &state,        .capture = ProviderTestState.capture,        .prepare_restore = ProviderTestState.prepareRestore,        .commit_restore = ProviderTestState.commitRestore,        .cancel_restore = ProviderTestState.cancelRestore,    };    try provider.prepareRestoreBytes("after");    provider.cancelRestore();    try std.testing.expectEqualStrings("before", state.current());    try std.testing.expect(!state.prepared);}

Source: lib/trace/src/root.zig:34

zig
pub const checkpoint = @import("checkpoint.zig");

Audit

Definitions5
Public names5
Members0
Version26.7.0
Revisiondaab053ee433