tiny.preserves.Records
Defined in records_mod.
Returns a namespace of protocol record builders for Value(D).
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
| Definitions | 1 |
|---|---|
| Public names | 2 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |