Implement OSD variants, typed conversions, equality/hash semantics, OSDArray, OSDMap, and parser dispatch without coupling the public model to Serde JSON.
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
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Objective
Implement OSD variants, typed conversions, equality/hash semantics, OSDArray, OSDMap, and parser dispatch without coupling the public model to Serde JSON.
Deliverables
Validation
Prerequisite
Milestone 04 supplies implemented value types and the global API/test gates are complete.
Project constraints
Implemented in commit
d152e80and pushed to main.Implementation:
Verification:
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.