Skip to documentation
SLOP

tiny.preserves.Records

Reference tiny.preserves Records

Defined in records_mod.

Returns a namespace of protocol record builders for Value(D).

No direct callersNo direct callsrecords_modRecords
Static calls · unresolved targets: 3 · external targets: 9.

Source

Source: lib/preserves/src/records.zig:24

zig
/// Returns a namespace of protocol record builders for `Value(D)`. Code whose values hold embedded/// values of one type calls it once at compile time, for every protocol record builder over those/// values. `D` has to provide `eql`, `order`, `deinit` and `clone`, or the call is a compile error./// Every builder allocates a copy of the label, one label cell and a copy of the field slice, all/// with `alloc`. The record takes the field values the caller passes, and `deinit` on the record/// frees the label, the fields and the record's own storage. On failure a builder frees its label/// and leaves the fields with the caller.pub fn Records(comptime D: type) type {    domain_mod.assertIsDomain(D);    const V = Value(D);    const H = constructors_mod.Constructors(D);    return struct {        fn recordWithSymbol(alloc: Allocator, symbol_name: []const u8, fields: []const V) !V {            var label = try V.initSymbol(alloc, symbol_name);            errdefer label.deinit(alloc);            return try H.record(alloc, label, fields);        }        /// Returns `<Observe pattern observer>`, for code that asks to observe a pattern. For        /// `AnyEmbedded` values, an observer other than an embedded value is moved into a new cell        /// and wrapped as an embedded value that owns it. The wrapped observer compares, hashes,        /// copies and frees through the value it holds. An observer that is already an embedded        /// value goes in as it is. When the embedded values have a type other than `AnyEmbedded`,        /// every observer goes in as it is. On failure the call frees the wrapper cell and leaves        /// `pattern` and `observer` with the caller.        pub fn observeRecord(alloc: Allocator, pattern: V, observer: V) !V {            var wrapped_ptr: ?*V = null;            const obs: V = observer_wrap: {                if (D == AnyEmbedded) {                    switch (observer) {                        .embedded => break :observer_wrap observer,                        else => {                            const val_ptr = try alloc.create(V);                            val_ptr.* = observer;                            wrapped_ptr = val_ptr;                            break :observer_wrap V{ .embedded = AnyEmbedded{                                .value = @ptrCast(val_ptr),                                .semantic_ops = embedded_mod.parsedEmbeddedOps(V),                                .deinit_fn = embedded_mod.parsedEmbeddedDeinit(V),                                .clone_fn = embedded_mod.parsedEmbeddedClone(V),                            } };                        },                    }                }                break :observer_wrap observer;            };            errdefer if (wrapped_ptr) |ptr| alloc.destroy(ptr);            return recordWithSymbol(alloc, symbols_mod.SYM_OBSERVE.name, &.{ pattern, obs });        }        /// Returns `<Synced>`, a record with zero fields.        pub fn syncedRecord(alloc: Allocator) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_SYNCED.name, &.{});        }        /// Returns `<RequireService name>`.        pub fn requireServiceRecord(alloc: Allocator, name: V) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_REQUIRE_SERVICE.name, &.{name});        }        /// Returns `<RunService name>`.        pub fn runServiceRecord(alloc: Allocator, name: V) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_RUN_SERVICE.name, &.{name});        }        /// Returns `<ServiceState name state>`.        pub fn serviceStateRecord(alloc: Allocator, name: V, state: V) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_SERVICE_STATE.name, &.{ name, state });        }        /// Returns `<ServiceObject name obj>`.        pub fn serviceObjectRecord(alloc: Allocator, name: V, obj: V) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_SERVICE_OBJECT.name, &.{ name, obj });        }        /// Returns `<ReactorError stage facet reactor err>`, a record with four fields.        pub fn reactorErrorRecord(alloc: Allocator, stage: V, facet: V, reactor: V, err: V) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_REACTOR_ERROR.name, &.{ stage, facet, reactor, err });        }        /// Returns `<EntityRuntime kind observe during>`.        pub fn entityRuntimeRecord(alloc: Allocator, kind: V, observe: V, during: V) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_ENTITY_RUNTIME.name, &.{ kind, observe, during });        }        /// Returns `<ServiceDependency depender dependee>`.        pub fn serviceDependencyRecord(alloc: Allocator, depender: V, dependee: V) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_SERVICE_DEPENDENCY.name, &.{ depender, dependee });        }        /// Returns `<RestartService name>`.        pub fn restartServiceRecord(alloc: Allocator, name: V) !V {            return recordWithSymbol(alloc, symbols_mod.SYM_RESTART_SERVICE.name, &.{name});        }    };}

Source: lib/preserves/src/root.zig:216

zig
pub const Records = records_mod.Records;

Audit

Definitions1
Public names2
Members0
Version26.7.0
Revisiondaab053ee433