StructuredData: implement the OSD value model and containers #32

Closed
opened 2026-08-08 08:16:57 +00:00 by hugo · 1 comment
Owner

Objective

Implement OSD variants, typed conversions, equality/hash semantics, OSDArray, OSDMap, and parser dispatch without coupling the public model to Serde JSON.

Deliverables

  • Cover undefined, bool, integer, real, string, UUID, date, URI, binary, array, and map values.
  • Preserve conversion defaults/errors, collection mutation/indexing, ordering assumptions, nesting, and cloning/borrowing behavior.
  • Add recursion and allocation limits at untrusted boundaries.

Validation

  • All translated OSD model/container tests pass.
  • Public docs define conversion and ordering behavior.
  • No format-specific serializer dictates the public value model.

Prerequisite

Milestone 04 supplies implemented value types and the global API/test gates are complete.

Project constraints

  • Native Rust only; no LibreMetaverse/.NET bridge or fallback.
  • Keep mapped signatures fixed and preserve translated assertions exactly.
  • Enforce bounded parsing for untrusted input and update docs and parity status.
## Objective Implement OSD variants, typed conversions, equality/hash semantics, OSDArray, OSDMap, and parser dispatch without coupling the public model to Serde JSON. ## Deliverables - Cover undefined, bool, integer, real, string, UUID, date, URI, binary, array, and map values. - Preserve conversion defaults/errors, collection mutation/indexing, ordering assumptions, nesting, and cloning/borrowing behavior. - Add recursion and allocation limits at untrusted boundaries. ## Validation - All translated OSD model/container tests pass. - Public docs define conversion and ordering behavior. - No format-specific serializer dictates the public value model. ## Prerequisite Milestone 04 supplies implemented value types and the global API/test gates are complete. ## Project constraints - Native Rust only; no LibreMetaverse/.NET bridge or fallback. - Keep mapped signatures fixed and preserve translated assertions exactly. - Enforce bounded parsing for untrusted input and update docs and parity status.
hugo added this to the 05 - StructuredData implementation milestone 2026-08-08 08:16:57 +00:00
hugo added the enhancement label 2026-08-08 08:16:57 +00:00
Author
Owner

Implemented in commit d152e80 and pushed to main.

Implementation:

  • Replaced all 15 OSD value/container failure shells with native Rust covering undefined, boolean, integer, real, string, UUID, date, URI, binary, array, map, and LLSD-XML values.
  • Ported LibreMetaverse conversion defaults and numeric/date byte-order behavior, structural equality/hash semantics, vector/quaternion/color conversions, object bridging, cloning, and deterministic presentation behavior from the pinned C# reference.
  • Implemented synchronized OSDArray/OSDMap mutation, indexing, duplicate handling, CopyTo writable-slice mappings, owned snapshots, and documented unspecified public map ordering.
  • Implemented bounded OSDParser dispatch for byte, string, and stream inputs. It probes XML/Binary/Protobuf/JSON without coupling the value representation to a serializer, caps input at 64 MiB, and validates decoded depth, node count, and aggregate binary allocation.
  • Updated generated native coverage to 15 types / 255 members and replaced the obsolete failure-only dispatch support assertion.

Verification:

  • cargo test -p libremetaverse-structured-data: 11 passed.
  • types_structured_shims: 2 passed.
  • All 78 pre-created StructuredData format tests were run; each reaches its correct format-specific OSDParser boundary, which remains intentionally assigned to issues #33-#36.
  • Controlled red audit: 81 passed, 1281 expected failures, 0 ignored/unexpected, every failure standardized.
  • Workspace build, workspace test --no-run, strict workspace Clippy, rustdoc -D warnings, downstream API compile, mapping/shim/API coverage, parity, and surface gates all pass.

Completion review found every #32 deliverable implemented, no remaining model/container failure shims, no unsafe or platform-specific code, and no implementation from a later milestone issue.

Implemented in commit d152e80 and pushed to main. Implementation: - Replaced all 15 OSD value/container failure shells with native Rust covering undefined, boolean, integer, real, string, UUID, date, URI, binary, array, map, and LLSD-XML values. - Ported LibreMetaverse conversion defaults and numeric/date byte-order behavior, structural equality/hash semantics, vector/quaternion/color conversions, object bridging, cloning, and deterministic presentation behavior from the pinned C# reference. - Implemented synchronized OSDArray/OSDMap mutation, indexing, duplicate handling, CopyTo writable-slice mappings, owned snapshots, and documented unspecified public map ordering. - Implemented bounded OSDParser dispatch for byte, string, and stream inputs. It probes XML/Binary/Protobuf/JSON without coupling the value representation to a serializer, caps input at 64 MiB, and validates decoded depth, node count, and aggregate binary allocation. - Updated generated native coverage to 15 types / 255 members and replaced the obsolete failure-only dispatch support assertion. Verification: - cargo test -p libremetaverse-structured-data: 11 passed. - types_structured_shims: 2 passed. - All 78 pre-created StructuredData format tests were run; each reaches its correct format-specific OSDParser boundary, which remains intentionally assigned to issues #33-#36. - Controlled red audit: 81 passed, 1281 expected failures, 0 ignored/unexpected, every failure standardized. - Workspace build, workspace test --no-run, strict workspace Clippy, rustdoc -D warnings, downstream API compile, mapping/shim/API coverage, parity, and surface gates all pass. Completion review found every #32 deliverable implemented, no remaining model/container failure shims, no unsafe or platform-specific code, and no implementation from a later milestone issue.
hugo closed this issue 2026-08-09 00:10:59 +00:00
Sign in to join this conversation.