Define complete Rust API mapping schema

This commit is contained in:
2026-08-08 11:36:23 +02:00
parent a3e11bc39d
commit 3179d7a57d
8 changed files with 34898 additions and 11 deletions

View File

@@ -12,10 +12,13 @@ LibreMetaverse library assemblies at the pinned upstream commit. It contains:
every LibreMetaverse API that uses them.
External entries are replacement obligations, not copied dependency APIs.
Issue #3 must map each one to a Rust crate/path: use Rust core/std or an adopted
crate where it preserves the contract, otherwise define a native MetaCrate
type. The catalog deliberately does not enumerate members of SkiaSharp,
SIPSorcery, MessagePack, CoreJ2K, or any other external assembly.
`RUST-TYPES.tsv` resolves every entry to Rust core/std, an adopted
cross-platform crate, or a native MetaCrate type. Third-party API objects use
project-owned boundary types so their eventual backend can be replaced without
exposing SkiaSharp, SIPSorcery, MessagePack, CoreJ2K, or another foreign member
surface. `RUST-MAPPING.tsv` records one reviewed destination and full Rust
signature for every catalog member. `MAPPING-COVERAGE.md` is the readable gate
summary.
Regenerate from the clean pinned upstream checkout:
@@ -28,3 +31,17 @@ extractor twice against the same compiled metadata, rejects count mismatches or
duplicate documentation IDs, and writes the result only when both outputs are
byte-identical. The extractor is development-only and is absent from every
Cargo manifest and published Rust dependency graph.
Regenerate or validate the Rust mapping with only Python's standard library:
```sh
python3 tools/generate_rust_mapping.py
python3 tools/generate_rust_mapping.py --check
```
The checker rejects duplicate C# IDs, duplicate Rust destinations, invalid
statuses, stale or missing catalog entries, unresolved signature types,
assemblies without representative mappings, and platform-specific API targets.
The two support traits in `RUST-TYPES.tsv` are included because compiled public
inheritance records reference them even though they are absent from the public
type table.