Last codec-side prerequisite before F13 (NmxClient high-level write
wrappers) can land. Two small additions, both wire-byte-direct ports
of the .NET reference's MxDataType → MxValueKind lookup logic.
mxaccess-codec
- MxValueKind::for_data_type(MxDataType, is_array) -> Option<MxValueKind>:
fuses NmxWriteMessage.cs:58-86 (TryGetValueKind's 12 base mappings
for data types 1..=6 scalar+array) with the two scalar fallbacks the
.NET GalaxyTagMetadata.ProjectWriteValue layers on top
(GalaxyRepositoryTagResolver.cs:65-69): ElapsedTime → Int32,
InternationalizedString → String. Returns None for any other
combination — including arrays of those two types and unsupported
scalars (ReferenceType, StatusType, Enum, etc.).
- 6 new tests covering the base table, both fallbacks, the array-of-
unsupported rejection, and the no-mapping branch for ReferenceType /
StatusType / Enum / DataQualityType / BigString / Unknown / NoData /
End sentinels.
mxaccess-galaxy
- GalaxyTagMetadata::resolve_write_kind() -> Result<MxValueKind,
UnsupportedDataType>: pure delegation to MxValueKind::for_data_type
+ a typed error carrying (mx_data_type, is_array) for diagnostics.
- GalaxyTagMetadata::is_writable() — Ok-side accessor for browse UIs.
- UnsupportedDataType public error type (re-exported from lib.rs).
- 7 new tests: Double scalar → Float64, Boolean array → BoolArray,
ElapsedTime scalar → Int32 (the fallback path), array-of-ElapsedTime
rejected, InternationalizedString → String, ReferenceType rejected,
Unknown sentinel rejected.
Test count delta: 446 -> 459 (+13; codec 215 -> 221, galaxy 49 -> 56).
All four DoD gates green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>