Table of Contents

Struct SystemMsgV1

Namespace
DatabentoDotNet.Dbn
Assembly
DatabentoDotNet.Dbn.dll

The DBN v1 layout of SystemMsg, 80 bytes.

public readonly struct SystemMsgV1 : IRecord<SystemMsgV1>
Implements
Inherited Members

Remarks

Version 1 carries the message text and nothing else: the code field arrived in v2, so a v1 heartbeat is recognised only by its message text being exactly Heartbeat. The message field is 64 bytes rather than 303.

Fields

Header

The common header.

public readonly RecordHeader Header

Field Value

RecordHeader

Msg

The message from the Databento gateway.

public readonly CStr64 Msg

Field Value

CStr64

Properties

IndexTs

The record's index timestamp: the one to sort by, and the one to key a symbol map with. Nanoseconds since the UNIX epoch.

public ulong IndexTs { get; }

Property Value

ulong

Remarks

This is usually ts_recv, not TsEvent. Fourteen of the twenty-one record structs carry a ts_recv and index on it; the rest have no ts_recv at all and fall back to the header's ts_event. Port of upstream's Record::raw_index_ts (record/traits.rs:52-54), whose default body is ts_event and which the #[dbn(index_ts)] field attribute overrides per struct (record.rs, compat.rs).

The distinction is not cosmetic: ts_event and ts_recv can fall on opposite sides of UTC midnight, so resolving a symbol by the wrong one silently returns the previous day's symbol, or nothing, with no error anywhere.

This is a raw timestamp and can be UndefTimestamp. Convert it with ToUtcDate(ulong) or TryToUtcDate(ulong, out LocalDate), which check the sentinel.

WireSize

The struct's exact size on the wire, in bytes, excluding any trailing ts_out.

public static int WireSize { get; }

Property Value

int

Methods

HasRType(RType)

Reports whether SystemMsgV1 is the layout for records carrying rtype.

public static bool HasRType(RType rtype)

Parameters

rtype RType

The record type read from a record header.

Returns

bool

true if rtype is one of the record types this struct decodes. This is necessary but not sufficient to identify the record — see the remarks on IRecord<TSelf>.

UpgradeTo()

Converts this record to the current-version SystemMsg.

public SystemMsg UpgradeTo()

Returns

SystemMsg

The equivalent current-version record.

Remarks

A value-level conversion into larger storage, never an in-place reinterpret. Length is recomputed for the new size, the message is copied into the wider buffer, and the Code this version does not carry is inferred from the message text exactly as upstream infers it. SystemMsg's layout is identical in v2 and v3, so this one conversion serves both upgrade policies.