Generate extension API shims

This commit is contained in:
2026-08-08 12:58:50 +02:00
parent 1291234e6f
commit 643762fd1d
19 changed files with 12766 additions and 1312 deletions

View File

@@ -9,10 +9,10 @@ projects, public C# type names have Rust declarations, every upstream NUnit case
has a traceable placeholder, and every sample/tool project has a Rust binary has a traceable placeholder, and every sample/tool project has a Rust binary
target. Types, StructuredData, Imaging, PrimMesher, both rendering adapters, and target. Types, StructuredData, Imaging, PrimMesher, both rendering adapters, and
the main assembly's packet/message/asset/primitive wire-data, core the main assembly's packet/message/asset/primitive wire-data, core
runtime/networking, avatar-facing manager, and world/social/service manager runtime/networking, avatar-facing manager, world/social/service manager, RLV,
slices now have complete callable, failure-only signatures; the remaining LSL tools, Utilities, Vivox, and WebRTC slices now have complete callable,
extension slices plus semantic Rust test translations are still required before failure-only signatures. The downstream 100% coverage audit and semantic Rust
the public API shim is complete. test translations are still required before Stage 0 is complete.
The source snapshot, compatibility rules, dependency research, and ordered The source snapshot, compatibility rules, dependency research, and ordered
implementation plan are in [RUSTREWRITE.md](RUSTREWRITE.md). implementation plan are in [RUSTREWRITE.md](RUSTREWRITE.md).

View File

@@ -53,21 +53,21 @@ The current workspace is a structural baseline, not a working client:
resolved to cross-platform Rust or project-owned boundary types; resolved to cross-platform Rust or project-owned boundary types;
- the completed Types, StructuredData, Imaging, PrimMesher, rendering, main - the completed Types, StructuredData, Imaging, PrimMesher, rendering, main
wire/data, core runtime/networking, avatar-facing manager, and wire/data, core runtime/networking, avatar-facing manager, and
world/social/service manager slices expose 2,795 final Rust-facing types and world/social/service manager, RLV, LSL tools, Utilities, Vivox, and WebRTC
all 28,768 callable members with real fields/constants/enum values and slices expose all 3,066 final Rust-facing types and all 30,789 callable
standardized failing bodies; members with real fields/constants/enum values and standardized failing
bodies;
- all 1,295 NUnit `[Test]`/`[TestCase]` invocations have compiling Rust test - all 1,295 NUnit `[Test]`/`[TestCase]` invocations have compiling Rust test
entries that intentionally panic with their source identity and body hash; entries that intentionally panic with their source identity and body hash;
- all nine sample/tool projects have compiling Rust binary targets; - all nine sample/tool projects have compiling Rust binary targets;
- the 128 TestClient command source files are retained as a command inventory. - the 128 TestClient command source files are retained as a command inventory.
The remaining 271 generated type shims preserve names and module placement, but No generated type shells remain pending: all cataloged members are callable.
do not yet expose their 2,021 callable members. `api/SURFACE.tsv` is an inventory aid, `api/SURFACE.tsv` is still an inventory aid, not proof of API coverage: it
not proof of API coverage: it records declaration lines but does not fully parse records declaration lines but does not fully parse multiline signatures.
multiline signatures. Likewise, a generated `pending` test is a parity Likewise, a generated `pending` test is a parity placeholder, not a semantic
placeholder, not a semantic translation. **This repository is therefore at translation. **This repository is therefore at Stage 0 and still requires the
Stage 0 and does not yet satisfy either the full API-shim gate or the full independent downstream API audit and full test-suite gate.**
test-suite gate.**
The avatar-facing slice preserves the C# agent, movement/camera, appearance and The avatar-facing slice preserves the C# agent, movement/camera, appearance and
outfit-policy, inventory/AIS/store, asset/cache, avatar, and animesh concepts. outfit-policy, inventory/AIS/store, asset/cache, avatar, and animesh concepts.
@@ -82,6 +82,13 @@ explicit cancellation and shared typed failures; request/reply events expose
typed payloads and subscription guards, while catalog constants and flag values typed payloads and subscription guards, while catalog constants and flag values
remain real. remain real.
The extension slice preserves the C# RLV restrictions, callbacks and services;
LSL lexer/parser/generator and diagnostic types; Utilities helpers; Vivox
protocol/session/manager types; and WebRTC signaling/device/session concepts.
Blocking compatibility surfaces stay explicit, stored callbacks and events use
typed ownership, and parser/voice bodies fail before performing parsing,
networking, device access, or proprietary/native work.
No functional porting starts until both missing gates are complete across the No functional porting starts until both missing gates are complete across the
entire workspace, rather than one crate at a time: entire workspace, rather than one crate at a time:

View File

@@ -1079,7 +1079,7 @@ F:LibreMetaverse.Bumpiness.Weave enum_value LibreMetaverse.Bumpiness LibreMetave
F:LibreMetaverse.Bumpiness.Woodgrain enum_value LibreMetaverse.Bumpiness LibreMetaverse.Bumpiness.Woodgrain libremetaverse libremetaverse::Bumpiness::Woodgrain Woodgrain: libremetaverse::Bumpiness owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Bumpiness.Woodgrain enum_value LibreMetaverse.Bumpiness LibreMetaverse.Bumpiness.Woodgrain libremetaverse libremetaverse::Bumpiness::Woodgrain Woodgrain: libremetaverse::Bumpiness owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.CRC32.CRC field System.UInt32 LibreMetaverse.CRC32.CRC libremetaverse-types libremetaverse_types::CRC32::crc pub crc: u32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.CRC32.CRC field System.UInt32 LibreMetaverse.CRC32.CRC libremetaverse-types libremetaverse_types::CRC32::crc pub crc: u32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.Caps.AllCapabilities field LibreMetaverse.StructuredData.OSDArray LibreMetaverse.Caps.AllCapabilities libremetaverse libremetaverse::Caps::all_capabilities pub fn all_capabilities() -> libremetaverse_structured_data::OSDArray none sync infallible_placeholder direct_snake_case static_field_accessor mapped F:LibreMetaverse.Caps.AllCapabilities field LibreMetaverse.StructuredData.OSDArray LibreMetaverse.Caps.AllCapabilities libremetaverse libremetaverse::Caps::all_capabilities pub fn all_capabilities() -> libremetaverse_structured_data::OSDArray none sync infallible_placeholder direct_snake_case static_field_accessor mapped
F:LibreMetaverse.Caps.Simulator field LibreMetaverse.Simulator LibreMetaverse.Caps.Simulator libremetaverse libremetaverse::Caps::simulator pub simulator: libremetaverse::Simulator owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Caps.Simulator field LibreMetaverse.Simulator LibreMetaverse.Caps.Simulator libremetaverse libremetaverse::Caps::simulator pub simulator: Box<libremetaverse::Simulator> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.CapsCategory.AssetFetch enum_value LibreMetaverse.CapsCategory LibreMetaverse.CapsCategory.AssetFetch libremetaverse libremetaverse::CapsCategory::AssetFetch AssetFetch: libremetaverse::CapsCategory owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.CapsCategory.AssetFetch enum_value LibreMetaverse.CapsCategory LibreMetaverse.CapsCategory.AssetFetch libremetaverse libremetaverse::CapsCategory::AssetFetch AssetFetch: libremetaverse::CapsCategory owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.CapsCategory.AssetUpload enum_value LibreMetaverse.CapsCategory LibreMetaverse.CapsCategory.AssetUpload libremetaverse libremetaverse::CapsCategory::AssetUpload AssetUpload: libremetaverse::CapsCategory owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.CapsCategory.AssetUpload enum_value LibreMetaverse.CapsCategory LibreMetaverse.CapsCategory.AssetUpload libremetaverse libremetaverse::CapsCategory::AssetUpload AssetUpload: libremetaverse::CapsCategory owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.CapsCategory.Default enum_value LibreMetaverse.CapsCategory LibreMetaverse.CapsCategory.Default libremetaverse libremetaverse::CapsCategory::Default Default: libremetaverse::CapsCategory owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.CapsCategory.Default enum_value LibreMetaverse.CapsCategory LibreMetaverse.CapsCategory.Default libremetaverse libremetaverse::CapsCategory::Default Default: libremetaverse::CapsCategory owned_value sync none direct_snake_case direct mapped
@@ -2916,20 +2916,20 @@ F:LibreMetaverse.LslTools.CSymbol.m_emitted field System.Boolean LibreMetaverse.
F:LibreMetaverse.LslTools.CSymbol.m_first field LibreMetaverse.LslTools.SymbolSet LibreMetaverse.LslTools.CSymbol.m_first libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_first pub m_first: libremetaverse_lsl_tools::SymbolSet owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_first field LibreMetaverse.LslTools.SymbolSet LibreMetaverse.LslTools.CSymbol.m_first libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_first pub m_first: libremetaverse_lsl_tools::SymbolSet owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_follow field LibreMetaverse.LslTools.SymbolSet LibreMetaverse.LslTools.CSymbol.m_follow libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_follow pub m_follow: libremetaverse_lsl_tools::SymbolSet owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_follow field LibreMetaverse.LslTools.SymbolSet LibreMetaverse.LslTools.CSymbol.m_follow libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_follow pub m_follow: libremetaverse_lsl_tools::SymbolSet owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_initialisation field System.String LibreMetaverse.LslTools.CSymbol.m_initialisation libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_initialisation pub m_initialisation: String owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_initialisation field System.String LibreMetaverse.LslTools.CSymbol.m_initialisation libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_initialisation pub m_initialisation: String owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_parser field LibreMetaverse.LslTools.SymbolsGen LibreMetaverse.LslTools.CSymbol.m_parser libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_parser pub m_parser: libremetaverse_lsl_tools::SymbolsGen owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_parser field LibreMetaverse.LslTools.SymbolsGen LibreMetaverse.LslTools.CSymbol.m_parser libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_parser pub m_parser: Box<libremetaverse_lsl_tools::SymbolsGen> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_prec field LibreMetaverse.LslTools.Precedence LibreMetaverse.LslTools.CSymbol.m_prec libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_prec pub m_prec: libremetaverse_lsl_tools::Precedence owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_prec field LibreMetaverse.LslTools.Precedence LibreMetaverse.LslTools.CSymbol.m_prec libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_prec pub m_prec: libremetaverse_lsl_tools::Precedence owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_prod field LibreMetaverse.LslTools.Production LibreMetaverse.LslTools.CSymbol.m_prod libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_prod pub m_prod: libremetaverse_lsl_tools::Production owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_prod field LibreMetaverse.LslTools.Production LibreMetaverse.LslTools.CSymbol.m_prod libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_prod pub m_prod: Box<libremetaverse_lsl_tools::Production> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_prods field LibreMetaverse.LslTools.ObjectList LibreMetaverse.LslTools.CSymbol.m_prods libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_prods pub m_prods: libremetaverse_lsl_tools::ObjectList owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_prods field LibreMetaverse.LslTools.ObjectList LibreMetaverse.LslTools.CSymbol.m_prods libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_prods pub m_prods: libremetaverse_lsl_tools::ObjectList owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_refSymbol field LibreMetaverse.LslTools.CSymbol LibreMetaverse.LslTools.CSymbol.m_refSymbol libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_ref_symbol pub m_ref_symbol: libremetaverse_lsl_tools::CSymbol owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_refSymbol field LibreMetaverse.LslTools.CSymbol LibreMetaverse.LslTools.CSymbol.m_refSymbol libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_ref_symbol pub m_ref_symbol: Box<libremetaverse_lsl_tools::CSymbol> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_symtype field LibreMetaverse.LslTools.CSymbol.SymType LibreMetaverse.LslTools.CSymbol.m_symtype libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_symtype pub m_symtype: libremetaverse_lsl_tools::CSymbolSymType owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_symtype field LibreMetaverse.LslTools.CSymbol.SymType LibreMetaverse.LslTools.CSymbol.m_symtype libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_symtype pub m_symtype: libremetaverse_lsl_tools::CSymbolSymType owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CSymbol.m_yynum field System.Int32 LibreMetaverse.LslTools.CSymbol.m_yynum libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_yynum pub m_yynum: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CSymbol.m_yynum field System.Int32 LibreMetaverse.LslTools.CSymbol.m_yynum libremetaverse-lsl-tools libremetaverse_lsl_tools::CSymbol::m_yynum pub m_yynum: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CommentList.len field System.Int32 LibreMetaverse.LslTools.CommentList.len libremetaverse-lsl-tools libremetaverse_lsl_tools::CommentList::len pub len: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CommentList.len field System.Int32 LibreMetaverse.LslTools.CommentList.len libremetaverse-lsl-tools libremetaverse_lsl_tools::CommentList::len pub len: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CommentList.spos field System.Int32 LibreMetaverse.LslTools.CommentList.spos libremetaverse-lsl-tools libremetaverse_lsl_tools::CommentList::spos pub spos: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CommentList.spos field System.Int32 LibreMetaverse.LslTools.CommentList.spos libremetaverse-lsl-tools libremetaverse_lsl_tools::CommentList::spos pub spos: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CommentList.tail field LibreMetaverse.LslTools.CommentList LibreMetaverse.LslTools.CommentList.tail libremetaverse-lsl-tools libremetaverse_lsl_tools::CommentList::tail pub tail: libremetaverse_lsl_tools::CommentList owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CommentList.tail field LibreMetaverse.LslTools.CommentList LibreMetaverse.LslTools.CommentList.tail libremetaverse-lsl-tools libremetaverse_lsl_tools::CommentList::tail pub tail: Box<libremetaverse_lsl_tools::CommentList> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CsReader.fname field System.String LibreMetaverse.LslTools.CsReader.fname libremetaverse-lsl-tools libremetaverse_lsl_tools::CsReader::fname pub fname: String owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CsReader.fname field System.String LibreMetaverse.LslTools.CsReader.fname libremetaverse-lsl-tools libremetaverse_lsl_tools::CsReader::fname pub fname: String owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.CsReader.lm field LibreMetaverse.LslTools.LineManager LibreMetaverse.LslTools.CsReader.lm libremetaverse-lsl-tools libremetaverse_lsl_tools::CsReader::lm pub lm: libremetaverse_lsl_tools::LineManager owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.CsReader.lm field LibreMetaverse.LslTools.LineManager LibreMetaverse.LslTools.CsReader.lm libremetaverse-lsl-tools libremetaverse_lsl_tools::CsReader::lm pub lm: libremetaverse_lsl_tools::LineManager owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Dfa.Action.a_act field System.Int32 LibreMetaverse.LslTools.Dfa.Action.a_act libremetaverse-lsl-tools libremetaverse_lsl_tools::DfaAction::a_act pub a_act: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Dfa.Action.a_act field System.Int32 LibreMetaverse.LslTools.Dfa.Action.a_act libremetaverse-lsl-tools libremetaverse_lsl_tools::DfaAction::a_act pub a_act: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Dfa.Action.a_next field LibreMetaverse.LslTools.Dfa.Action LibreMetaverse.LslTools.Dfa.Action.a_next libremetaverse-lsl-tools libremetaverse_lsl_tools::DfaAction::a_next pub a_next: libremetaverse_lsl_tools::DfaAction owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Dfa.Action.a_next field LibreMetaverse.LslTools.Dfa.Action LibreMetaverse.LslTools.Dfa.Action.a_next libremetaverse-lsl-tools libremetaverse_lsl_tools::DfaAction::a_next pub a_next: Box<libremetaverse_lsl_tools::DfaAction> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Dfa.m_actions field LibreMetaverse.LslTools.Dfa.Action LibreMetaverse.LslTools.Dfa.m_actions libremetaverse-lsl-tools libremetaverse_lsl_tools::Dfa::m_actions pub m_actions: libremetaverse_lsl_tools::DfaAction owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Dfa.m_actions field LibreMetaverse.LslTools.Dfa.Action LibreMetaverse.LslTools.Dfa.m_actions libremetaverse-lsl-tools libremetaverse_lsl_tools::Dfa::m_actions pub m_actions: libremetaverse_lsl_tools::DfaAction owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Dfa.m_map field System.Collections.Hashtable LibreMetaverse.LslTools.Dfa.m_map libremetaverse-lsl-tools libremetaverse_lsl_tools::Dfa::m_map pub m_map: libremetaverse_types::compat::Hashtable owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Dfa.m_map field System.Collections.Hashtable LibreMetaverse.LslTools.Dfa.m_map libremetaverse-lsl-tools libremetaverse_lsl_tools::Dfa::m_map pub m_map: libremetaverse_types::compat::Hashtable owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Dfa.m_reswds field System.Int32 LibreMetaverse.LslTools.Dfa.m_reswds libremetaverse-lsl-tools libremetaverse_lsl_tools::Dfa::m_reswds pub m_reswds: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Dfa.m_reswds field System.Int32 LibreMetaverse.LslTools.Dfa.m_reswds libremetaverse-lsl-tools libremetaverse_lsl_tools::Dfa::m_reswds pub m_reswds: i32 owned_value sync none direct_snake_case direct mapped
@@ -2952,7 +2952,7 @@ F:LibreMetaverse.LslTools.Lexer.m_state field System.String LibreMetaverse.LslTo
F:LibreMetaverse.LslTools.Lexer.yytext field System.String LibreMetaverse.LslTools.Lexer.yytext libremetaverse-lsl-tools libremetaverse_lsl_tools::Lexer::yytext pub yytext: String owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Lexer.yytext field System.String LibreMetaverse.LslTools.Lexer.yytext libremetaverse-lsl-tools libremetaverse_lsl_tools::Lexer::yytext pub yytext: String owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.LineList.comments field LibreMetaverse.LslTools.CommentList LibreMetaverse.LslTools.LineList.comments libremetaverse-lsl-tools libremetaverse_lsl_tools::LineList::comments pub comments: libremetaverse_lsl_tools::CommentList owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.LineList.comments field LibreMetaverse.LslTools.CommentList LibreMetaverse.LslTools.LineList.comments libremetaverse-lsl-tools libremetaverse_lsl_tools::LineList::comments pub comments: libremetaverse_lsl_tools::CommentList owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.LineList.head field System.Int32 LibreMetaverse.LslTools.LineList.head libremetaverse-lsl-tools libremetaverse_lsl_tools::LineList::head pub head: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.LineList.head field System.Int32 LibreMetaverse.LslTools.LineList.head libremetaverse-lsl-tools libremetaverse_lsl_tools::LineList::head pub head: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.LineList.tail field LibreMetaverse.LslTools.LineList LibreMetaverse.LslTools.LineList.tail libremetaverse-lsl-tools libremetaverse_lsl_tools::LineList::tail pub tail: libremetaverse_lsl_tools::LineList owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.LineList.tail field LibreMetaverse.LslTools.LineList LibreMetaverse.LslTools.LineList.tail libremetaverse-lsl-tools libremetaverse_lsl_tools::LineList::tail pub tail: Box<libremetaverse_lsl_tools::LineList> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.LineManager.end field System.Int32 LibreMetaverse.LslTools.LineManager.end libremetaverse-lsl-tools libremetaverse_lsl_tools::LineManager::end pub end: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.LineManager.end field System.Int32 LibreMetaverse.LslTools.LineManager.end libremetaverse-lsl-tools libremetaverse_lsl_tools::LineManager::end pub end: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.LineManager.lines field System.Int32 LibreMetaverse.LslTools.LineManager.lines libremetaverse-lsl-tools libremetaverse_lsl_tools::LineManager::lines pub lines: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.LineManager.lines field System.Int32 LibreMetaverse.LslTools.LineManager.lines libremetaverse-lsl-tools libremetaverse_lsl_tools::LineManager::lines pub lines: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.LineManager.list field LibreMetaverse.LslTools.LineList LibreMetaverse.LslTools.LineManager.list libremetaverse-lsl-tools libremetaverse_lsl_tools::LineManager::list pub list: libremetaverse_lsl_tools::LineList owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.LineManager.list field LibreMetaverse.LslTools.LineList LibreMetaverse.LslTools.LineManager.list libremetaverse-lsl-tools libremetaverse_lsl_tools::LineManager::list pub list: libremetaverse_lsl_tools::LineList owned_value sync none direct_snake_case direct mapped
@@ -2964,7 +2964,7 @@ F:LibreMetaverse.LslTools.ParseStackEntry.m_state field System.Int32 LibreMetave
F:LibreMetaverse.LslTools.ParseStackEntry.m_value field LibreMetaverse.LslTools.SYMBOL LibreMetaverse.LslTools.ParseStackEntry.m_value libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseStackEntry::m_value pub m_value: libremetaverse_lsl_tools::SYMBOL owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ParseStackEntry.m_value field LibreMetaverse.LslTools.SYMBOL LibreMetaverse.LslTools.ParseStackEntry.m_value libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseStackEntry::m_value pub m_value: libremetaverse_lsl_tools::SYMBOL owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.ParseStackEntry.yyps field LibreMetaverse.LslTools.Parser LibreMetaverse.LslTools.ParseStackEntry.yyps libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseStackEntry::yyps pub yyps: libremetaverse_lsl_tools::Parser owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ParseStackEntry.yyps field LibreMetaverse.LslTools.Parser LibreMetaverse.LslTools.ParseStackEntry.yyps libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseStackEntry::yyps pub yyps: libremetaverse_lsl_tools::Parser owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.ParseState.m_accessingSymbol field LibreMetaverse.LslTools.CSymbol LibreMetaverse.LslTools.ParseState.m_accessingSymbol libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseState::m_accessing_symbol pub m_accessing_symbol: libremetaverse_lsl_tools::CSymbol owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ParseState.m_accessingSymbol field LibreMetaverse.LslTools.CSymbol LibreMetaverse.LslTools.ParseState.m_accessingSymbol libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseState::m_accessing_symbol pub m_accessing_symbol: libremetaverse_lsl_tools::CSymbol owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.ParseState.m_sgen field LibreMetaverse.LslTools.SymbolsGen LibreMetaverse.LslTools.ParseState.m_sgen libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseState::m_sgen pub m_sgen: libremetaverse_lsl_tools::SymbolsGen owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ParseState.m_sgen field LibreMetaverse.LslTools.SymbolsGen LibreMetaverse.LslTools.ParseState.m_sgen libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseState::m_sgen pub m_sgen: Box<libremetaverse_lsl_tools::SymbolsGen> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.ParseState.m_state field System.Int32 LibreMetaverse.LslTools.ParseState.m_state libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseState::m_state pub m_state: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ParseState.m_state field System.Int32 LibreMetaverse.LslTools.ParseState.m_state libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseState::m_state pub m_state: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.ParseState.m_transitions field System.Collections.Hashtable LibreMetaverse.LslTools.ParseState.m_transitions libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseState::m_transitions pub m_transitions: libremetaverse_types::compat::Hashtable owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ParseState.m_transitions field System.Collections.Hashtable LibreMetaverse.LslTools.ParseState.m_transitions libremetaverse-lsl-tools libremetaverse_lsl_tools::ParseState::m_transitions pub m_transitions: libremetaverse_types::compat::Hashtable owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Parser.m_debug field System.Boolean LibreMetaverse.LslTools.Parser.m_debug libremetaverse-lsl-tools libremetaverse_lsl_tools::Parser::m_debug pub m_debug: bool owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Parser.m_debug field System.Boolean LibreMetaverse.LslTools.Parser.m_debug libremetaverse-lsl-tools libremetaverse_lsl_tools::Parser::m_debug pub m_debug: bool owned_value sync none direct_snake_case direct mapped
@@ -2989,7 +2989,7 @@ F:LibreMetaverse.LslTools.Precedence.PrecType.before enum_value LibreMetaverse.L
F:LibreMetaverse.LslTools.Precedence.PrecType.left enum_value LibreMetaverse.LslTools.Precedence.PrecType LibreMetaverse.LslTools.Precedence.PrecType.left libremetaverse-lsl-tools libremetaverse_lsl_tools::PrecedencePrecType::Left Left: libremetaverse_lsl_tools::PrecedencePrecType owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Precedence.PrecType.left enum_value LibreMetaverse.LslTools.Precedence.PrecType LibreMetaverse.LslTools.Precedence.PrecType.left libremetaverse-lsl-tools libremetaverse_lsl_tools::PrecedencePrecType::Left Left: libremetaverse_lsl_tools::PrecedencePrecType owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Precedence.PrecType.nonassoc enum_value LibreMetaverse.LslTools.Precedence.PrecType LibreMetaverse.LslTools.Precedence.PrecType.nonassoc libremetaverse-lsl-tools libremetaverse_lsl_tools::PrecedencePrecType::Nonassoc Nonassoc: libremetaverse_lsl_tools::PrecedencePrecType owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Precedence.PrecType.nonassoc enum_value LibreMetaverse.LslTools.Precedence.PrecType LibreMetaverse.LslTools.Precedence.PrecType.nonassoc libremetaverse-lsl-tools libremetaverse_lsl_tools::PrecedencePrecType::Nonassoc Nonassoc: libremetaverse_lsl_tools::PrecedencePrecType owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Precedence.PrecType.right enum_value LibreMetaverse.LslTools.Precedence.PrecType LibreMetaverse.LslTools.Precedence.PrecType.right libremetaverse-lsl-tools libremetaverse_lsl_tools::PrecedencePrecType::Right Right: libremetaverse_lsl_tools::PrecedencePrecType owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Precedence.PrecType.right enum_value LibreMetaverse.LslTools.Precedence.PrecType LibreMetaverse.LslTools.Precedence.PrecType.right libremetaverse-lsl-tools libremetaverse_lsl_tools::PrecedencePrecType::Right Right: libremetaverse_lsl_tools::PrecedencePrecType owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Precedence.m_next field LibreMetaverse.LslTools.Precedence LibreMetaverse.LslTools.Precedence.m_next libremetaverse-lsl-tools libremetaverse_lsl_tools::Precedence::m_next pub m_next: libremetaverse_lsl_tools::Precedence owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Precedence.m_next field LibreMetaverse.LslTools.Precedence LibreMetaverse.LslTools.Precedence.m_next libremetaverse-lsl-tools libremetaverse_lsl_tools::Precedence::m_next pub m_next: Box<libremetaverse_lsl_tools::Precedence> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Precedence.m_prec field System.Int32 LibreMetaverse.LslTools.Precedence.m_prec libremetaverse-lsl-tools libremetaverse_lsl_tools::Precedence::m_prec pub m_prec: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Precedence.m_prec field System.Int32 LibreMetaverse.LslTools.Precedence.m_prec libremetaverse-lsl-tools libremetaverse_lsl_tools::Precedence::m_prec pub m_prec: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Precedence.m_type field LibreMetaverse.LslTools.Precedence.PrecType LibreMetaverse.LslTools.Precedence.m_type libremetaverse-lsl-tools libremetaverse_lsl_tools::Precedence::m_type pub m_type: libremetaverse_lsl_tools::PrecedencePrecType owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Precedence.m_type field LibreMetaverse.LslTools.Precedence.PrecType LibreMetaverse.LslTools.Precedence.m_type libremetaverse-lsl-tools libremetaverse_lsl_tools::Precedence::m_type pub m_type: libremetaverse_lsl_tools::PrecedencePrecType owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.ProdItem.m_done field System.Boolean LibreMetaverse.LslTools.ProdItem.m_done libremetaverse-lsl-tools libremetaverse_lsl_tools::ProdItem::m_done pub m_done: bool owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ProdItem.m_done field System.Boolean LibreMetaverse.LslTools.ProdItem.m_done libremetaverse-lsl-tools libremetaverse_lsl_tools::ProdItem::m_done pub m_done: bool owned_value sync none direct_snake_case direct mapped
@@ -3001,7 +3001,7 @@ F:LibreMetaverse.LslTools.Production.m_lhs field LibreMetaverse.LslTools.CSymbol
F:LibreMetaverse.LslTools.Production.m_pno field System.Int32 LibreMetaverse.LslTools.Production.m_pno libremetaverse-lsl-tools libremetaverse_lsl_tools::Production::m_pno pub m_pno: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Production.m_pno field System.Int32 LibreMetaverse.LslTools.Production.m_pno libremetaverse-lsl-tools libremetaverse_lsl_tools::Production::m_pno pub m_pno: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Production.m_prec field System.Int32 LibreMetaverse.LslTools.Production.m_prec libremetaverse-lsl-tools libremetaverse_lsl_tools::Production::m_prec pub m_prec: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Production.m_prec field System.Int32 LibreMetaverse.LslTools.Production.m_prec libremetaverse-lsl-tools libremetaverse_lsl_tools::Production::m_prec pub m_prec: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Production.m_rhs field LibreMetaverse.LslTools.ObjectList LibreMetaverse.LslTools.Production.m_rhs libremetaverse-lsl-tools libremetaverse_lsl_tools::Production::m_rhs pub m_rhs: libremetaverse_lsl_tools::ObjectList owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Production.m_rhs field LibreMetaverse.LslTools.ObjectList LibreMetaverse.LslTools.Production.m_rhs libremetaverse-lsl-tools libremetaverse_lsl_tools::Production::m_rhs pub m_rhs: libremetaverse_lsl_tools::ObjectList owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.Regex.m_sub field LibreMetaverse.LslTools.Regex LibreMetaverse.LslTools.Regex.m_sub libremetaverse-lsl-tools libremetaverse_lsl_tools::Regex::m_sub pub m_sub: libremetaverse_lsl_tools::Regex owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.Regex.m_sub field LibreMetaverse.LslTools.Regex LibreMetaverse.LslTools.Regex.m_sub libremetaverse-lsl-tools libremetaverse_lsl_tools::Regex::m_sub pub m_sub: Box<libremetaverse_lsl_tools::Regex> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.ResWds.m_upper field System.Boolean LibreMetaverse.LslTools.ResWds.m_upper libremetaverse-lsl-tools libremetaverse_lsl_tools::ResWds::m_upper pub m_upper: bool owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ResWds.m_upper field System.Boolean LibreMetaverse.LslTools.ResWds.m_upper libremetaverse-lsl-tools libremetaverse_lsl_tools::ResWds::m_upper pub m_upper: bool owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.ResWds.m_wds field System.Collections.Hashtable LibreMetaverse.LslTools.ResWds.m_wds libremetaverse-lsl-tools libremetaverse_lsl_tools::ResWds::m_wds pub m_wds: libremetaverse_types::compat::Hashtable owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.ResWds.m_wds field System.Collections.Hashtable LibreMetaverse.LslTools.ResWds.m_wds libremetaverse-lsl-tools libremetaverse_lsl_tools::ResWds::m_wds pub m_wds: libremetaverse_types::compat::Hashtable owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.SYMBOL.kids field LibreMetaverse.LslTools.ObjectList LibreMetaverse.LslTools.SYMBOL.kids libremetaverse-lsl-tools libremetaverse_lsl_tools::SYMBOL::kids pub kids: libremetaverse_lsl_tools::ObjectList owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SYMBOL.kids field LibreMetaverse.LslTools.ObjectList LibreMetaverse.LslTools.SYMBOL.kids libremetaverse-lsl-tools libremetaverse_lsl_tools::SYMBOL::kids pub kids: libremetaverse_lsl_tools::ObjectList owned_value sync none direct_snake_case direct mapped
@@ -3015,8 +3015,8 @@ F:LibreMetaverse.LslTools.SourceLineInfo.lineNumber field System.Int32 LibreMeta
F:LibreMetaverse.LslTools.SourceLineInfo.lxr field LibreMetaverse.LslTools.Lexer LibreMetaverse.LslTools.SourceLineInfo.lxr libremetaverse-lsl-tools libremetaverse_lsl_tools::SourceLineInfo::lxr pub lxr: libremetaverse_lsl_tools::Lexer owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SourceLineInfo.lxr field LibreMetaverse.LslTools.Lexer LibreMetaverse.LslTools.SourceLineInfo.lxr libremetaverse-lsl-tools libremetaverse_lsl_tools::SourceLineInfo::lxr pub lxr: libremetaverse_lsl_tools::Lexer owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.SourceLineInfo.rawCharPosition field System.Int32 LibreMetaverse.LslTools.SourceLineInfo.rawCharPosition libremetaverse-lsl-tools libremetaverse_lsl_tools::SourceLineInfo::raw_char_position pub raw_char_position: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SourceLineInfo.rawCharPosition field System.Int32 LibreMetaverse.LslTools.SourceLineInfo.rawCharPosition libremetaverse-lsl-tools libremetaverse_lsl_tools::SourceLineInfo::raw_char_position pub raw_char_position: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.SourceLineInfo.startOfLine field System.Int32 LibreMetaverse.LslTools.SourceLineInfo.startOfLine libremetaverse-lsl-tools libremetaverse_lsl_tools::SourceLineInfo::start_of_line pub start_of_line: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SourceLineInfo.startOfLine field System.Int32 LibreMetaverse.LslTools.SourceLineInfo.startOfLine libremetaverse-lsl-tools libremetaverse_lsl_tools::SourceLineInfo::start_of_line pub start_of_line: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.SymbolSet.m_next field LibreMetaverse.LslTools.SymbolSet LibreMetaverse.LslTools.SymbolSet.m_next libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolSet::m_next pub m_next: libremetaverse_lsl_tools::SymbolSet owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SymbolSet.m_next field LibreMetaverse.LslTools.SymbolSet LibreMetaverse.LslTools.SymbolSet.m_next libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolSet::m_next pub m_next: Box<libremetaverse_lsl_tools::SymbolSet> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.SymbolSet.m_symbols field LibreMetaverse.LslTools.SymbolsGen LibreMetaverse.LslTools.SymbolSet.m_symbols libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolSet::m_symbols pub m_symbols: libremetaverse_lsl_tools::SymbolsGen owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SymbolSet.m_symbols field LibreMetaverse.LslTools.SymbolsGen LibreMetaverse.LslTools.SymbolSet.m_symbols libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolSet::m_symbols pub m_symbols: Box<libremetaverse_lsl_tools::SymbolsGen> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.SymbolsGen.action field System.Int32 LibreMetaverse.LslTools.SymbolsGen.action libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolsGen::action pub action: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SymbolsGen.action field System.Int32 LibreMetaverse.LslTools.SymbolsGen.action libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolsGen::action pub action: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.SymbolsGen.lahead field LibreMetaverse.LslTools.SymbolSet LibreMetaverse.LslTools.SymbolsGen.lahead libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolsGen::lahead pub lahead: libremetaverse_lsl_tools::SymbolSet owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SymbolsGen.lahead field LibreMetaverse.LslTools.SymbolSet LibreMetaverse.LslTools.SymbolsGen.lahead libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolsGen::lahead pub lahead: libremetaverse_lsl_tools::SymbolSet owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.LslTools.SymbolsGen.m_lalrParser field System.Boolean LibreMetaverse.LslTools.SymbolsGen.m_lalrParser libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolsGen::m_lalr_parser pub m_lalr_parser: bool owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.LslTools.SymbolsGen.m_lalrParser field System.Boolean LibreMetaverse.LslTools.SymbolsGen.m_lalrParser libremetaverse-lsl-tools libremetaverse_lsl_tools::SymbolsGen::m_lalr_parser pub m_lalr_parser: bool owned_value sync none direct_snake_case direct mapped
@@ -9467,7 +9467,7 @@ F:LibreMetaverse.Simulator.AgentMovementComplete field System.Boolean LibreMetav
F:LibreMetaverse.Simulator.BillableFactor field System.Single LibreMetaverse.Simulator.BillableFactor libremetaverse libremetaverse::Simulator::billable_factor pub billable_factor: f32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Simulator.BillableFactor field System.Single LibreMetaverse.Simulator.BillableFactor libremetaverse libremetaverse::Simulator::billable_factor pub billable_factor: f32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.Simulator.CPUClass field System.Int32 LibreMetaverse.Simulator.CPUClass libremetaverse libremetaverse::Simulator::cpu_class pub cpu_class: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Simulator.CPUClass field System.Int32 LibreMetaverse.Simulator.CPUClass libremetaverse libremetaverse::Simulator::cpu_class pub cpu_class: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.Simulator.CPURatio field System.Int32 LibreMetaverse.Simulator.CPURatio libremetaverse libremetaverse::Simulator::cpu_ratio pub cpu_ratio: i32 owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Simulator.CPURatio field System.Int32 LibreMetaverse.Simulator.CPURatio libremetaverse libremetaverse::Simulator::cpu_ratio pub cpu_ratio: i32 owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.Simulator.Caps field LibreMetaverse.Caps LibreMetaverse.Simulator.Caps libremetaverse libremetaverse::Simulator::caps pub caps: Option<libremetaverse::Caps> owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Simulator.Caps field LibreMetaverse.Caps LibreMetaverse.Simulator.Caps libremetaverse libremetaverse::Simulator::caps pub caps: Option<Box<libremetaverse::Caps>> owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.Simulator.Client field LibreMetaverse.GridClient LibreMetaverse.Simulator.Client libremetaverse libremetaverse::Simulator::client pub client: libremetaverse::GridClient owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Simulator.Client field LibreMetaverse.GridClient LibreMetaverse.Simulator.Client libremetaverse libremetaverse::Simulator::client pub client: libremetaverse::GridClient owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.Simulator.ColoLocation field System.String LibreMetaverse.Simulator.ColoLocation libremetaverse libremetaverse::Simulator::colo_location pub colo_location: String owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Simulator.ColoLocation field System.String LibreMetaverse.Simulator.ColoLocation libremetaverse libremetaverse::Simulator::colo_location pub colo_location: String owned_value sync none direct_snake_case direct mapped
F:LibreMetaverse.Simulator.DataPool field LibreMetaverse.SimulatorDataPool LibreMetaverse.Simulator.DataPool libremetaverse libremetaverse::Simulator::data_pool pub data_pool: Option<libremetaverse::SimulatorDataPool> owned_value sync none direct_snake_case direct mapped F:LibreMetaverse.Simulator.DataPool field LibreMetaverse.SimulatorDataPool LibreMetaverse.Simulator.DataPool libremetaverse libremetaverse::Simulator::data_pool pub data_pool: Option<libremetaverse::SimulatorDataPool> owned_value sync none direct_snake_case direct mapped
Can't render this file because it is too large.

View File

@@ -7,16 +7,16 @@ Generated by `python3 tools/generate_api_shims.py`; do not edit by hand.
| `LibreMetaverse` | 2,711 | 27,281 | callable failure-only shim | | `LibreMetaverse` | 2,711 | 27,281 | callable failure-only shim |
| `LibreMetaverse.Imaging.Abstractions` | 3 | 20 | callable failure-only shim | | `LibreMetaverse.Imaging.Abstractions` | 3 | 20 | callable failure-only shim |
| `LibreMetaverse.Imaging.Skia` | 1 | 3 | callable failure-only shim | | `LibreMetaverse.Imaging.Skia` | 1 | 3 | callable failure-only shim |
| `LibreMetaverse.LslTools` | 164 | 768 | pending milestone issue | | `LibreMetaverse.LslTools` | 164 | 768 | callable failure-only shim |
| `LibreMetaverse.PrimMesher` | 17 | 207 | callable failure-only shim | | `LibreMetaverse.PrimMesher` | 17 | 207 | callable failure-only shim |
| `LibreMetaverse.RLV` | 28 | 499 | pending milestone issue | | `LibreMetaverse.RLV` | 28 | 499 | callable failure-only shim |
| `LibreMetaverse.Rendering.MeshFoundry` | 1 | 14 | callable failure-only shim | | `LibreMetaverse.Rendering.MeshFoundry` | 1 | 14 | callable failure-only shim |
| `LibreMetaverse.Rendering.Simple` | 1 | 6 | callable failure-only shim | | `LibreMetaverse.Rendering.Simple` | 1 | 6 | callable failure-only shim |
| `LibreMetaverse.StructuredData` | 16 | 295 | callable failure-only shim | | `LibreMetaverse.StructuredData` | 16 | 295 | callable failure-only shim |
| `LibreMetaverse.Types` | 45 | 942 | callable failure-only shim | | `LibreMetaverse.Types` | 45 | 942 | callable failure-only shim |
| `LibreMetaverse.Utilities` | 3 | 13 | pending milestone issue | | `LibreMetaverse.Utilities` | 3 | 13 | callable failure-only shim |
| `LibreMetaverse.Voice.Vivox` | 64 | 531 | pending milestone issue | | `LibreMetaverse.Voice.Vivox` | 64 | 531 | callable failure-only shim |
| `LibreMetaverse.Voice.WebRTC` | 12 | 210 | pending milestone issue | | `LibreMetaverse.Voice.WebRTC` | 12 | 210 | callable failure-only shim |
The `LibreMetaverse` assembly is complete across issue #7 wire/data, issue #8 core runtime/networking, The `LibreMetaverse` assembly is complete across issue #7 wire/data, issue #8 core runtime/networking,
issue #9 avatar-facing manager, and issue #10 world/social/service manager slices. issue #9 avatar-facing manager, and issue #10 world/social/service manager slices.
@@ -28,4 +28,4 @@ issue #9 avatar-facing manager, and issue #10 world/social/service manager slice
| Issue #9 avatar-facing managers | 193 | 1,934 | | Issue #9 avatar-facing managers | 193 | 1,934 |
| Issue #10 world/social/service managers | 198 | 1,577 | | Issue #10 world/social/service managers | 198 | 1,577 |
Current callable coverage: **2,795 types / 28,768 members**. Current callable coverage: **3,066 types / 30,789 members**.

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,7 @@
//! LSL parsing tools corresponding to `LibreMetaverse.LslTools`. //! LSL parsing tools corresponding to `LibreMetaverse.LslTools`.
extern crate self as libremetaverse_lsl_tools;
mod generated; mod generated;
pub use generated::*; pub use generated::*;

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,7 @@
//! Restrained Love Viewer support corresponding to `LibreMetaverse.RLV`. //! Restrained Love Viewer support corresponding to `LibreMetaverse.RLV`.
extern crate self as libremetaverse_rlv;
mod generated; mod generated;
pub use generated::*; pub use generated::*;

View File

@@ -136,3 +136,15 @@ pub struct Span<T>(pub PhantomData<fn(T)>);
pub struct RandomSource; pub struct RandomSource;
pub struct IAsyncEnumerable<T>(pub PhantomData<fn() -> T>); pub struct IAsyncEnumerable<T>(pub PhantomData<fn() -> T>);
pub struct ImmutableDictionary<TKey, TValue>(pub PhantomData<fn(TKey, TValue)>);
pub struct ImmutableList<T>(pub PhantomData<fn(T)>);
pub struct ICollection;
pub struct UnicodeCategory(pub i32);
pub struct TextEncoding;
pub struct SocketException;

View File

@@ -1,27 +1,116 @@
// @generated by tools/generate_surface.py; do not edit by hand. // @generated by tools/generate_api_shims.py; do not edit by hand.
// Source: LibreMetaverse 2aa70bb68513b39795da5d13c88f31b86e85a3ba #![allow(clippy::missing_errors_doc)]
#![allow(clippy::must_use_candidate)]
#![allow(clippy::all, clippy::pedantic, dead_code, unused_variables)]
#![allow(non_camel_case_types)] #![allow(non_camel_case_types)]
#![allow(non_snake_case)]
/// `class` shim for C# `LibreMetaverse.Utilities.ConnectionManager`; members remain intentionally unimplemented. /// C# type: `T:LibreMetaverse.Utilities.ConnectionManager`.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ConnectionManager; pub struct ConnectionManager;
impl ConnectionManager { impl ConnectionManager {
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Utilities.ConnectionManager"; /// C# member: `M:LibreMetaverse.Utilities.ConnectionManager.#ctor(LibreMetaverse.GridClient,System.Int32)`.
pub const CSHARP_KIND: &'static str = "class"; pub fn new(
client: libremetaverse::GridClient,
timer_frequency: i32,
) -> Result<Self, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Utilities.ConnectionManager.#ctor(LibreMetaverse.GridClient,System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.Utilities.ConnectionManager.PersistentLogin(LibreMetaverse.GridClient,System.String,System.String,System.String,System.String,System.String,System.String)`.
pub async fn persistent_login(
client: libremetaverse::GridClient,
first_name: String,
last_name: String,
password: String,
user_agent: String,
start: String,
author: String,
) -> Result<bool, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Utilities.ConnectionManager.PersistentLogin(LibreMetaverse.GridClient,System.String,System.String,System.String,System.String,System.String,System.String)",
)
}
/// C# member: `M:LibreMetaverse.Utilities.ConnectionManager.StayInSim(System.UInt64,LibreMetaverse.Vector3)`.
pub fn stay_in_sim(
&self,
handle: u64,
desired_position: libremetaverse_types::Vector3,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Utilities.ConnectionManager.StayInSim(System.UInt64,LibreMetaverse.Vector3)",
)
}
/// C# member: `M:LibreMetaverse.Utilities.ConnectionManager.Stop`.
pub fn stop(&self) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented("M:LibreMetaverse.Utilities.ConnectionManager.Stop")
}
} }
/// `class` shim for C# `LibreMetaverse.Utilities.Realism`; members remain intentionally unimplemented. /// C# type: `T:LibreMetaverse.Utilities.Realism`.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Realism; pub struct Realism;
impl Realism { impl Realism {
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Utilities.Realism"; /// C# member: `M:LibreMetaverse.Utilities.Realism.Chat(LibreMetaverse.GridClient,System.String)`.
pub const CSHARP_KIND: &'static str = "class"; pub fn chat_with_grid_client_string(
client: libremetaverse::GridClient,
message: String,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Utilities.Realism.Chat(LibreMetaverse.GridClient,System.String)",
)
}
/// C# member: `M:LibreMetaverse.Utilities.Realism.Chat(LibreMetaverse.GridClient,System.String,LibreMetaverse.ChatType,System.Int32)`.
pub fn chat_with_grid_client_string_chat_type_int32(
client: libremetaverse::GridClient,
message: String,
type_: libremetaverse::ChatType,
cps: i32,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Utilities.Realism.Chat(LibreMetaverse.GridClient,System.String,LibreMetaverse.ChatType,System.Int32)",
)
}
/// C# member: `M:LibreMetaverse.Utilities.Realism.ChatAsync(LibreMetaverse.GridClient,System.String,LibreMetaverse.ChatType,System.Int32,System.Threading.CancellationToken)`.
pub async fn chat_with_grid_client_string_chat_type_int32_cancellation_token(
client: libremetaverse::GridClient,
message: String,
type_: libremetaverse::ChatType,
cps: i32,
cancellation_token: Option<libremetaverse_types::compat::CancellationToken>,
) -> Result<(), crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Utilities.Realism.ChatAsync(LibreMetaverse.GridClient,System.String,LibreMetaverse.ChatType,System.Int32,System.Threading.CancellationToken)",
)
}
/// C# member: `M:LibreMetaverse.Utilities.Realism.Shoot(LibreMetaverse.GridClient)`.
pub fn shoot_with_grid_client(
client: libremetaverse::GridClient,
) -> Result<bool, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Utilities.Realism.Shoot(LibreMetaverse.GridClient)",
)
}
/// C# member: `M:LibreMetaverse.Utilities.Realism.Shoot(LibreMetaverse.GridClient,LibreMetaverse.Vector3)`.
pub fn shoot_with_grid_client_vector3(
client: libremetaverse::GridClient,
target: libremetaverse_types::Vector3,
) -> Result<bool, crate::Error> {
libremetaverse_types::not_implemented(
"M:LibreMetaverse.Utilities.Realism.Shoot(LibreMetaverse.GridClient,LibreMetaverse.Vector3)",
)
}
} }
/// `enum` shim for C# `LibreMetaverse.Utilities.WaterType`; members remain intentionally unimplemented. /// C# type: `T:LibreMetaverse.Utilities.WaterType`.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub struct WaterType; #[repr(i32)]
impl WaterType { pub enum WaterType {
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Utilities.WaterType"; /// C# member: `F:LibreMetaverse.Utilities.WaterType.Dry`.
pub const CSHARP_KIND: &'static str = "enum"; Dry = 1,
/// C# member: `F:LibreMetaverse.Utilities.WaterType.Underwater`.
Underwater = 3,
/// C# member: `F:LibreMetaverse.Utilities.WaterType.Unknown`.
Unknown = 0,
/// C# member: `F:LibreMetaverse.Utilities.WaterType.Waterfront`.
Waterfront = 2,
} }

View File

@@ -1,5 +1,7 @@
//! Utilities corresponding to `LibreMetaverse.Utilities`. //! Utilities corresponding to `LibreMetaverse.Utilities`.
extern crate self as libremetaverse_utilities;
mod generated; mod generated;
pub use generated::*; pub use generated::*;

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,7 @@
//! Vivox adapter corresponding to `LibreMetaverse.Voice.Vivox`. //! Vivox adapter corresponding to `LibreMetaverse.Voice.Vivox`.
extern crate self as libremetaverse_voice_vivox;
mod generated; mod generated;
pub use generated::*; pub use generated::*;

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,33 @@
//! WebRTC voice adapter corresponding to `LibreMetaverse.Voice.WebRTC`. //! WebRTC voice adapter corresponding to `LibreMetaverse.Voice.WebRTC`.
extern crate self as libremetaverse_voice_webrtc;
mod generated; mod generated;
pub use generated::*; pub use generated::*;
pub use libremetaverse as core; pub use libremetaverse as core;
pub use libremetaverse_structured_data as structured_data; pub use libremetaverse_structured_data as structured_data;
pub use libremetaverse_types::NotImplemented as Error; pub use libremetaverse_types::NotImplemented as Error;
/// Project-owned boundary types for external JSON signatures.
pub mod signaling {
pub struct JsonValue;
}
/// Project-owned boundary types for external WebRTC transport signatures.
pub mod transport {
pub struct RTCDataChannel;
pub struct RTCPeerConnection;
}
/// Project-owned boundary types for external media signatures.
pub mod media {
pub struct AudioSamplingRatesEnum(pub i32);
}
/// Project-owned boundary types for external audio signatures.
pub mod audio {
pub struct NoiseSuppressionLevel(pub i32);
pub struct SoundFlowAudioEndPoint;
pub struct SoundFlowAudioSource;
}

View File

@@ -23783,7 +23783,7 @@ pub struct PrimitiveConstructionData {
/// C# member: `F:LibreMetaverse.Primitive.ConstructionData.State`. /// C# member: `F:LibreMetaverse.Primitive.ConstructionData.State`.
pub state: u8, pub state: u8,
/// C# member: `F:LibreMetaverse.Primitive.ConstructionData.profileCurve`. /// C# member: `F:LibreMetaverse.Primitive.ConstructionData.profileCurve`.
pub profile_curve: u8, pub profile_curve_with_field: u8,
} }
impl PrimitiveConstructionData { impl PrimitiveConstructionData {
/// C# member: `M:LibreMetaverse.Primitive.ConstructionData.#ctor`. /// C# member: `M:LibreMetaverse.Primitive.ConstructionData.#ctor`.

View File

@@ -0,0 +1,84 @@
use libremetaverse::GridClient;
use libremetaverse_lsl_tools::{Parser, YyParser};
use libremetaverse_rlv::{RlvActionCallbacksDefault, RlvRestrictionManager, RlvService};
use libremetaverse_types::compat::{CancellationToken, Guid, Subscription};
use libremetaverse_utilities::ConnectionManager;
use libremetaverse_voice_vivox::{TCPPipe, VoiceManager as VivoxVoiceManager};
use libremetaverse_voice_webrtc::{LibreMetaverseVoiceLogger, VoiceManager as WebRtcVoiceManager};
fn member_id<T>(result: Result<T, libremetaverse_types::NotImplemented>) -> &'static str {
result
.err()
.expect("failure-only shim unexpectedly returned a value")
.csharp_member()
}
async fn compile_rlv_calls(
service: &RlvService,
restrictions: &RlvRestrictionManager,
sender_id: Guid,
token: CancellationToken,
) {
let _: Subscription = restrictions.subscribe_restriction_updated(None);
let _ = service
.process_message(String::new(), sender_id, String::new(), Some(token))
.await;
}
fn compile_parser_call(parser: &Parser) {
let _ = parser.parse_with_string(String::new());
}
async fn compile_utility_call(client: GridClient) {
let _ = ConnectionManager::persistent_login(
client,
String::new(),
String::new(),
String::new(),
String::new(),
String::new(),
String::new(),
)
.await;
}
fn compile_vivox_calls(manager: &VivoxVoiceManager, status: &mut i32) {
let _: Subscription = manager.subscribe_on_login(None);
let _ = manager.login(String::new(), String::new(), String::new(), status);
let _ = manager.request_parcel_voice_info();
}
async fn compile_webrtc_calls(manager: &WebRtcVoiceManager) {
let _: Subscription = manager.subscribe_on_group_voice_joined(None);
let _ = manager.connect_primary_region().await;
let _ = manager.request_parcel_voice_info().await;
}
#[test]
fn extension_flows_have_typed_callable_signatures() {
let _ = compile_rlv_calls;
let _ = compile_parser_call;
let _ = compile_utility_call;
let _ = compile_vivox_calls;
let _ = compile_webrtc_calls;
}
#[test]
fn extension_constructors_fail_with_catalog_ids() {
assert_eq!(
member_id(YyParser::new()),
"M:LibreMetaverse.LslTools.YyParser.#ctor"
);
assert_eq!(
member_id(RlvActionCallbacksDefault::new()),
"M:LibreMetaverse.RLV.RlvActionCallbacksDefault.#ctor"
);
assert_eq!(
member_id(TCPPipe::new()),
"M:LibreMetaverse.Voice.Vivox.TCPPipe.#ctor"
);
assert_eq!(
member_id(LibreMetaverseVoiceLogger::new()),
"M:LibreMetaverse.Voice.WebRTC.LibreMetaverseVoiceLogger.#ctor"
);
}

View File

@@ -21,11 +21,16 @@ COVERAGE = ROOT / "api/SHIM-COVERAGE.md"
TARGETS = { TARGETS = {
"LibreMetaverse.Imaging.Abstractions": ROOT / "crates/libremetaverse-imaging/src/generated.rs", "LibreMetaverse.Imaging.Abstractions": ROOT / "crates/libremetaverse-imaging/src/generated.rs",
"LibreMetaverse.Imaging.Skia": ROOT / "crates/libremetaverse-imaging-skia/src/generated.rs", "LibreMetaverse.Imaging.Skia": ROOT / "crates/libremetaverse-imaging-skia/src/generated.rs",
"LibreMetaverse.LslTools": ROOT / "crates/libremetaverse-lsl-tools/src/generated.rs",
"LibreMetaverse.PrimMesher": ROOT / "crates/libremetaverse-prim-mesher/src/generated.rs", "LibreMetaverse.PrimMesher": ROOT / "crates/libremetaverse-prim-mesher/src/generated.rs",
"LibreMetaverse.RLV": ROOT / "crates/libremetaverse-rlv/src/generated.rs",
"LibreMetaverse.Rendering.MeshFoundry": ROOT / "crates/libremetaverse-rendering-mesh-foundry/src/generated.rs", "LibreMetaverse.Rendering.MeshFoundry": ROOT / "crates/libremetaverse-rendering-mesh-foundry/src/generated.rs",
"LibreMetaverse.Rendering.Simple": ROOT / "crates/libremetaverse-rendering-simple/src/generated.rs", "LibreMetaverse.Rendering.Simple": ROOT / "crates/libremetaverse-rendering-simple/src/generated.rs",
"LibreMetaverse.Types": ROOT / "crates/libremetaverse-types/src/generated.rs", "LibreMetaverse.Types": ROOT / "crates/libremetaverse-types/src/generated.rs",
"LibreMetaverse.StructuredData": ROOT / "crates/libremetaverse-structured-data/src/generated.rs", "LibreMetaverse.StructuredData": ROOT / "crates/libremetaverse-structured-data/src/generated.rs",
"LibreMetaverse.Utilities": ROOT / "crates/libremetaverse-utilities/src/generated.rs",
"LibreMetaverse.Voice.Vivox": ROOT / "crates/libremetaverse-voice-vivox/src/generated.rs",
"LibreMetaverse.Voice.WebRTC": ROOT / "crates/libremetaverse-voice-webrtc/src/generated.rs",
} }
MAIN_TARGET = ROOT / "crates/libremetaverse/src/generated.rs" MAIN_TARGET = ROOT / "crates/libremetaverse/src/generated.rs"
@@ -297,12 +302,6 @@ PRIVATE_LAYOUTS = {
"T:LibreMetaverse.StructuredData.OSDUri": [("value", "libremetaverse_types::compat::Uri")], "T:LibreMetaverse.StructuredData.OSDUri": [("value", "libremetaverse_types::compat::Uri")],
"T:LibreMetaverse.Imaging.ManagedImage": [("data", "Vec<u8>")], "T:LibreMetaverse.Imaging.ManagedImage": [("data", "Vec<u8>")],
} }
BOXED_FIELDS = {
"F:LibreMetaverse.Caps.Simulator",
"F:LibreMetaverse.Simulator.Caps",
}
def generic_names(item: dict) -> list[str]: def generic_names(item: dict) -> list[str]:
return [parameter["name"] for parameter in item.get("generic_parameters", [])] return [parameter["name"] for parameter in item.get("generic_parameters", [])]
@@ -418,16 +417,14 @@ def render_type(item: dict, type_row: dict, member_rows: dict[str, dict[str, str
lines.append(f"pub struct {rust_name};") lines.append(f"pub struct {rust_name};")
else: else:
lines.append(f"pub struct {rust_name}{suffix} {{") lines.append(f"pub struct {rust_name}{suffix} {{")
generics = set(names)
for field in fields: for field in fields:
field_type = mapper.type(field["type"], field.get("nullability"), generics) field_signature = member_rows[field["doc_id"]]["rust_signature"]
if field["doc_id"] in BOXED_FIELDS: field_name_match = re.fullmatch(r"pub ([^:]+): (.+)", field_signature)
field_type = ( if not field_name_match:
f"Option<Box<{field_type[7:-1]}>>" raise ValueError(f"invalid mapped field signature: {field_signature}")
if field_type.startswith("Option<") field_name = field_name_match.group(1)
else f"Box<{field_type}>" field_type = field_name_match.group(2)
) lines += [f" /// C# member: `{field['doc_id']}`.", f" pub {field_name}: {field_type},"]
lines += [f" /// C# member: `{field['doc_id']}`.", f" pub {mapping.snake(field['name'])}: {field_type},"]
for field_name, field_type in private_fields: for field_name, field_type in private_fields:
lines.append(f" {field_name}: {field_type},") lines.append(f" {field_name}: {field_type},")
if names: if names:
@@ -534,10 +531,25 @@ def render_modules(items: list[tuple[dict, dict, bool]], member_rows: dict[str,
def generate_sources(catalog: dict) -> tuple[dict[Path, str], dict[str, tuple[int, int, bool]]]: def generate_sources(catalog: dict) -> tuple[dict[Path, str], dict[str, tuple[int, int, bool]]]:
type_rows, resolved = mapping.build_type_rows(catalog) type_rows, resolved = mapping.build_type_rows(catalog)
type_by_id = {row["csharp_type_id"]: row for row in type_rows} type_by_id = {row["csharp_type_id"]: row for row in type_rows}
member_by_id = {
member["doc_id"]: member
for assembly in catalog["assemblies"]
for item in assembly["types"]
for member in item["members"]
}
configured_main_ids = WIRE_ROOT_TYPES | CORE_ROOT_TYPES | AVATAR_ROOT_TYPES configured_main_ids = WIRE_ROOT_TYPES | CORE_ROOT_TYPES | AVATAR_ROOT_TYPES
missing_configured_ids = configured_main_ids - type_by_id.keys() missing_configured_ids = configured_main_ids - type_by_id.keys()
if missing_configured_ids: if missing_configured_ids:
raise ValueError(f"unknown configured main-slice IDs: {sorted(missing_configured_ids)}") raise ValueError(f"unknown configured main-slice IDs: {sorted(missing_configured_ids)}")
missing_boxed_fields = mapping.BOXED_FIELD_IDS - member_by_id.keys()
if missing_boxed_fields:
raise ValueError(f"unknown configured boxed fields: {sorted(missing_boxed_fields)}")
if invalid_boxed_fields := [
member_id
for member_id in mapping.BOXED_FIELD_IDS
if member_by_id[member_id]["kind"] != "field"
]:
raise ValueError(f"configured boxed members are not fields: {sorted(invalid_boxed_fields)}")
interfaces = { interfaces = {
*{mapping.type_parts(item["signature"])[0] for assembly in catalog["assemblies"] for item in assembly["types"] if item["kind"] == "interface"}, *{mapping.type_parts(item["signature"])[0] for assembly in catalog["assemblies"] for item in assembly["types"] if item["kind"] == "interface"},
*{ *{

View File

@@ -170,6 +170,21 @@ SUPPORT_TYPES = {
MEMBER_RETURN_OVERRIDES = { MEMBER_RETURN_OVERRIDES = {
"M:LibreMetaverse.Caps.Capabilities": "Vec<String>", "M:LibreMetaverse.Caps.Capabilities": "Vec<String>",
} }
BOXED_FIELD_IDS = {
"F:LibreMetaverse.Caps.Simulator",
"F:LibreMetaverse.Simulator.Caps",
"F:LibreMetaverse.LslTools.CommentList.tail",
"F:LibreMetaverse.LslTools.CSymbol.m_parser",
"F:LibreMetaverse.LslTools.CSymbol.m_prod",
"F:LibreMetaverse.LslTools.CSymbol.m_refSymbol",
"F:LibreMetaverse.LslTools.Dfa.Action.a_next",
"F:LibreMetaverse.LslTools.LineList.tail",
"F:LibreMetaverse.LslTools.ParseState.m_sgen",
"F:LibreMetaverse.LslTools.Precedence.m_next",
"F:LibreMetaverse.LslTools.Regex.m_sub",
"F:LibreMetaverse.LslTools.SymbolSet.m_next",
"F:LibreMetaverse.LslTools.SymbolSet.m_symbols",
}
RUST_KEYWORDS = { RUST_KEYWORDS = {
"as", "break", "const", "continue", "crate", "else", "enum", "extern", "false", "fn", "as", "break", "const", "continue", "crate", "else", "enum", "extern", "false", "fn",
"for", "if", "impl", "in", "let", "loop", "match", "mod", "move", "mut", "pub", "ref", "for", "if", "impl", "in", "let", "loop", "match", "mod", "move", "mut", "pub", "ref",
@@ -592,6 +607,12 @@ def member_signature(mapper: Mapper, owner: dict, item: dict, rust_name: str) ->
error_model = "infallible_placeholder" error_model = "infallible_placeholder"
if kind in {"field", "constant", "enum_value"}: if kind in {"field", "constant", "enum_value"}:
value_type = mapper.type(item["type"], item.get("nullability"), generics) value_type = mapper.type(item["type"], item.get("nullability"), generics)
if item["doc_id"] in BOXED_FIELD_IDS:
value_type = (
f"Option<Box<{value_type[7:-1]}>>"
if value_type.startswith("Option<")
else f"Box<{value_type}>"
)
if kind == "enum_value": if kind == "enum_value":
signature = f"{rust_name}: {value_type}" signature = f"{rust_name}: {value_type}"
elif kind == "constant": elif kind == "constant":
@@ -757,7 +778,20 @@ def validate(catalog: dict, type_rows: list[dict[str, str]], member_rows: list[d
raise ValueError("invalid type mapping status") raise ValueError("invalid type mapping status")
if {row["status"] for row in member_rows} - VALID_MEMBER_STATUSES: if {row["status"] for row in member_rows} - VALID_MEMBER_STATUSES:
raise ValueError("invalid member mapping status") raise ValueError("invalid member mapping status")
catalog_ids = {member["doc_id"] for assembly in catalog["assemblies"] for item in assembly["types"] for member in item["members"]} catalog_members = {
member["doc_id"]: member
for assembly in catalog["assemblies"]
for item in assembly["types"]
for member in item["members"]
}
catalog_ids = catalog_members.keys()
missing_boxed_fields = BOXED_FIELD_IDS - catalog_ids
if missing_boxed_fields:
raise ValueError(f"unknown configured boxed fields: {sorted(missing_boxed_fields)}")
if invalid_boxed_fields := [
member_id for member_id in BOXED_FIELD_IDS if catalog_members[member_id]["kind"] != "field"
]:
raise ValueError(f"configured boxed members are not fields: {sorted(invalid_boxed_fields)}")
mapped_ids = {row["csharp_id"] for row in member_rows} mapped_ids = {row["csharp_id"] for row in member_rows}
if catalog_ids != mapped_ids: if catalog_ids != mapped_ids:
raise ValueError(f"catalog/mapping ID mismatch: missing={len(catalog_ids - mapped_ids)}, stale={len(mapped_ids - catalog_ids)}") raise ValueError(f"catalog/mapping ID mismatch: missing={len(catalog_ids - mapped_ids)}, stale={len(mapped_ids - catalog_ids)}")