Skip to content

Release 1.7.0: declarative semantic-type registry (#166) + partial generated types (#167) - #168

Merged
pedrosakuma merged 1 commit into
mainfrom
release/1.7.0
Aug 29, 2026
Merged

Release 1.7.0: declarative semantic-type registry (#166) + partial generated types (#167)#168
pedrosakuma merged 1 commit into
mainfrom
release/1.7.0

Conversation

@pedrosakuma

Copy link
Copy Markdown
Owner

Release 1.7.0: declarative semantic-type registry (#166) + partial generated types (#167)

Closes #166: schemas can now annotate fields with semanticType (e.g.
UTCTimestampNanos, LocalMktDate, MonthYear) and the generator emits a
sibling typed accessor {Field}Value alongside the raw wire field. Eight
FIX/SBE built-in converters ship out of the box; users can register or
override via [assembly: SbeSemanticType("Name", typeof(MyConverter))]
where MyConverter implements ISbeSemanticConverter<TWire,TSemantic>.
Optional fields produce nullable accessors. Field-level semanticType
wins, otherwise the field inherits its referenced type's semanticType
(common FIX/B3 pattern). Types already producing a typed helper struct
(e.g. LocalMktDate -> DateOnly) are left untouched to avoid double
conversion. Raw wire accessor is never replaced.

Closes #167: SbeDispatcher, ISbeMessageHandler, {Msg}VersionMap,
{Msg}DataReader, and {X}Validation are now emitted as partial so
consumers can extend them in user code without forking the generator.
Layout-bearing blittable structs were already partial.

Adds diagnostics SBE016 (wire-type mismatch), SBE017 (does-not-implement
ISbeSemanticConverter), SBE018 (semantic accessor name collision).

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

…nerated types (#167)

Closes #166: schemas can now annotate fields with semanticType (e.g.
UTCTimestampNanos, LocalMktDate, MonthYear) and the generator emits a
sibling typed accessor {Field}Value alongside the raw wire field. Eight
FIX/SBE built-in converters ship out of the box; users can register or
override via [assembly: SbeSemanticType("Name", typeof(MyConverter))]
where MyConverter implements ISbeSemanticConverter<TWire,TSemantic>.
Optional fields produce nullable accessors. Field-level semanticType
wins, otherwise the field inherits its referenced type's semanticType
(common FIX/B3 pattern). Types already producing a typed helper struct
(e.g. LocalMktDate -> DateOnly) are left untouched to avoid double
conversion. Raw wire accessor is never replaced.

Closes #167: SbeDispatcher, ISbeMessageHandler, {Msg}VersionMap,
{Msg}DataReader, and {X}Validation are now emitted as partial so
consumers can extend them in user code without forking the generator.
Layout-bearing blittable structs were already partial.

Adds diagnostics SBE016 (wire-type mismatch), SBE017 (does-not-implement
ISbeSemanticConverter), SBE018 (semantic accessor name collision).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@pedrosakuma
pedrosakuma merged commit 194eb45 into main Aug 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant