Skip to documentation
SLOP

tiny.zen.SitePageStorage

Reference tiny.zen SitePageStorage

Defined in tiny.zen.

API (18)

Actions

Public operations.

Types and contracts

Public types and contracts.

Fields and members

Public fields and members.

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

Source

Source: lib/zen/src/site/page/storage.zig:17

zig
pub const Storage = struct {    phase: alloc_phase.capacity.Phase,    capacity: capacity_mod.Capacity,    bytes: []u8,    in_use: bool = false,    loaded_page_bytes: usize = 0,    high_water_page_bytes: usize = 0,    rejected_page_count: u64 = 0,    pub const Limits: type = capacity_mod.Limits;    pub const Capacity: type = capacity_mod.Capacity;    pub const Exhaustion: type = model.Exhaustion;    pub const InitError = std.mem.Allocator.Error || capacity_mod.DeriveError;    pub const claim: alloc_phase.capacity.Declaration = .{        .source = .{            .id = "zen.site_page_storage",            .kind = .phase_static,            .limit_source = .caller,            .storage = .{                .covered = &.{                    .{                        .id = "one_reusable_surveyed_markdown_page_plus_overload_lookahead_byte",                        .lifetime = .steady,                        .detail = "one reusable surveyed Markdown page plus overload lookahead byte",                    },                },                .excluded = &.{                    "caller-owned page paths, source directory capability, and kernel file state",                    "frontmatter, retained site catalog, rendered page, theme, asset, and filesystem output owners",                },            },            .capacity = .{                .inputs = &.{                    alloc_phase.capacity.bindInput(Limits, "max_page_bytes", "max_page_bytes"),                },                .type_selectors = &.{},                .nodes = &.{                    .{ .input = 0 },                    .{ .constant = 1 },                    .{ .add = .{ .left = 0, .right = 1 } },                },                .assertions = &.{.{                    .scope = .closure_total,                    .measure = .retained,                    .relation = .exact,                    .expression = 2,                }},            },            .overload = .{                .kind = .drop,                .detail = "an oversized or concurrently grown page is rejected before parser mutation and the reusable input region remains available",            },            .risks = .{                .transitive = .{                    .status = .witnessed,                    .detail = "activated page acquisition uses only the preacquired byte region and consumers release every borrow before reuse",                },                .foreign = .{                    .status = .excluded,                    .detail = "directory reads and kernel file state remain effects outside the reusable page input owner",                },            },            .obligations = &.{                .{ .key = "zen_site_page_capacity", .role = .capacity_model },                .{ .key = "zen_site_page_acquisition", .role = .custom },                .{ .key = "zen_site_page_oom", .role = .custom },                .{ .key = "zen_site_page_boundaries", .role = .overload },                .{ .key = "zen_site_page_growth", .role = .overload },                .{ .key = "zen_site_page_reuse", .role = .custom },                .{ .key = "zen_site_page_sealed", .role = .transitive_risk },                .{ .key = "zen_site_page_root", .role = .custom },                .{ .key = "zen_site_page_consumer_transitive_risk", .role = .transitive_risk },                .{ .key = "zen_site_page_consumer_foreign_risk", .role = .foreign_risk },            },        },        .bindings = .{            .owner = @This(),            .seal = .{                .family = alloc_phase.capacity.selector(@This().activate),                .premise = .{                    .class = .checked_semantic_fact,                    .authority = .checker,                },            },            .teardown = .{                .family = alloc_phase.capacity.selector(@This().deinit),                .premise = .{                    .class = .checked_semantic_fact,                    .authority = .checker,                },            },        },    };    pub fn init(allocator: std.mem.Allocator, limits: Limits) InitError!Storage {        const capacity = try Capacity.derive(limits);        const bytes = try allocator.alloc(u8, capacity.storage_bytes);        return .{            .phase = .initialization,            .capacity = capacity,            .bytes = bytes,        };    }    pub fn activate(self: *Storage) void {        std.debug.assert(self.phase == .initialization);        std.debug.assert(self.bytes.len == self.capacity.storage_bytes);        std.debug.assert(self.bytes.len > self.capacity.page_bytes);        self.phase = .steady;    }    pub fn readFile(        self: *Storage,        directory: std.Io.Dir,        io: std.Io,        relative_path: []const u8,    ) ![]const u8 {        try self.requireAvailable();        const page = directory.readFile(io, relative_path, self.bytes) catch |err| switch (err) {            error.FileTooBig => return self.reject(),            else => return err,        };        return try self.admit(page.len);    }    pub fn release(self: *Storage) void {        std.debug.assert(self.phase == .steady);        std.debug.assert(self.in_use);        self.in_use = false;        self.loaded_page_bytes = 0;    }    pub fn status(self: *const Storage) Status {        return .{            .phase = self.phase,            .in_use = self.in_use,            .storage_bytes = self.capacity.storage_bytes,            .max_page_bytes = self.capacity.page_bytes,            .loaded_page_bytes = self.loaded_page_bytes,            .high_water_page_bytes = self.high_water_page_bytes,            .rejected_page_count = self.rejected_page_count,        };    }    pub fn deinit(self: *Storage, allocator: std.mem.Allocator) void {        std.debug.assert(self.phase != .teardown);        std.debug.assert(!self.in_use);        std.debug.assert(self.bytes.len == self.capacity.storage_bytes);        self.phase = .teardown;        allocator.free(self.bytes);        self.bytes = &.{};        self.loaded_page_bytes = 0;    }    fn requireAvailable(self: *Storage) Exhaustion!void {        std.debug.assert(self.phase == .steady);        std.debug.assert(self.bytes.len == self.capacity.storage_bytes);        std.debug.assert(self.loaded_page_bytes <= self.capacity.page_bytes);        if (self.in_use) return error.SitePageStorageInUse;        std.debug.assert(self.loaded_page_bytes == 0);    }    fn admit(self: *Storage, page_bytes: usize) Exhaustion![]const u8 {        std.debug.assert(self.phase == .steady);        std.debug.assert(!self.in_use);        std.debug.assert(page_bytes <= self.capacity.storage_bytes);        if (page_bytes > self.capacity.page_bytes) return self.reject();        self.in_use = true;        self.loaded_page_bytes = page_bytes;        self.high_water_page_bytes = @max(self.high_water_page_bytes, page_bytes);        return self.bytes[0..page_bytes];    }    fn reject(self: *Storage) Exhaustion {        std.debug.assert(self.phase == .steady);        std.debug.assert(!self.in_use);        std.debug.assert(self.loaded_page_bytes == 0);        self.rejected_page_count +|= 1;        return error.SitePageCapacityExceeded;    }};

Source: lib/zen/src/root.zig:312

zig
/// Reusable caller-allocated buffer for one surveyed Markdown page.pub const SitePageStorage = site_page.Storage;
Called byCallsNo direct callstest sourcelib.zen.src.site.page.storagetest: site page borrow requires relea...test sourcelib.zen.src.site.page.storagetest: site page rejection telemetry s...test sourcelib.zen.src.site.page.storagetest: site page storage accepts the e...test sourcelib.zen.src.site.page.storagetest: site page storage acquires one ...test sourcelib.zen.src.site.page.storagetest: site page storage recovers afte...SitePageStorageactivate
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callsprivate sourcelib.zen.src.site.page.storagecheckInitFailurestest sourcelib.zen.src.site.page.storagetest: site page borrow requires relea...test sourcelib.zen.src.site.page.storagetest: site page rejection telemetry s...test sourcelib.zen.src.site.page.storagetest: site page storage accepts the e...test sourcelib.zen.src.site.page.storagetest: site page storage acquires one ...test sourcelib.zen.src.site.page.storagetest: site page storage recovers afte...SitePageStoragedeinit
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callsprivate sourcelib.zen.src.site.page.storagecheckInitFailurestest sourcelib.zen.src.site.page.storagetest: site page borrow requires relea...test sourcelib.zen.src.site.page.storagetest: site page reads remain allocati...test sourcelib.zen.src.site.page.storagetest: site page rejection telemetry s...test sourcelib.zen.src.site.page.storagetest: site page storage accepts the e...+2 moreSitePageStorageinit
Static calls · unresolved targets: 1 · external targets: 1.
Called byCallstest sourcelib.choir.src.repro.input.storagetest: Choir pass reproducer input map...test sourcelib.zen.src.site.page.storagetest: site page borrow requires relea...test sourcelib.zen.src.site.page.storagetest: site page rejection telemetry s...test sourcelib.zen.src.site.page.storagetest: site page storage accepts the e...test sourcelib.zen.src.site.page.storagetest: site page storage recovers afte...test; no linktools.glom.src.input.storagetest: Glom index input accepts the ex...private sourcelib.zen.src.site.page.storage.Storageadmitprivate sourcelib.zen.src.site.page.storage.Storagerejectprivate sourcelib.zen.src.site.page.storage.StoragerequireAvailableSitePageStoragereadFile
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callstest sourcelib.zen.src.site.page.storagetest: site page borrow requires relea...test sourcelib.zen.src.site.page.storagetest: site page storage accepts the e...test sourcelib.zen.src.site.page.storagetest: site page storage recovers afte...SitePageStoragerelease
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callstest sourcelib.zen.src.site.page.storagetest: site page rejection telemetry s...test sourcelib.zen.src.site.page.storagetest: site page storage accepts the e...SitePageStoragestatus
Static calls · unresolved targets: 0 · external targets: 0.

Also reachable as

site.page.Storage.

Complete caller list for SitePageStorage.init

7 direct callers.

Audit

Definitions12
Public names24
Members7
Version26.7.0
Revisiondaab053ee433