Generate extension API shims
This commit is contained in:
@@ -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
|
||||
target. Types, StructuredData, Imaging, PrimMesher, both rendering adapters, and
|
||||
the main assembly's packet/message/asset/primitive wire-data, core
|
||||
runtime/networking, avatar-facing manager, and world/social/service manager
|
||||
slices now have complete callable, failure-only signatures; the remaining
|
||||
extension slices plus semantic Rust test translations are still required before
|
||||
the public API shim is complete.
|
||||
runtime/networking, avatar-facing manager, world/social/service manager, RLV,
|
||||
LSL tools, Utilities, Vivox, and WebRTC slices now have complete callable,
|
||||
failure-only signatures. The downstream 100% coverage audit and semantic Rust
|
||||
test translations are still required before Stage 0 is complete.
|
||||
|
||||
The source snapshot, compatibility rules, dependency research, and ordered
|
||||
implementation plan are in [RUSTREWRITE.md](RUSTREWRITE.md).
|
||||
|
||||
@@ -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;
|
||||
- the completed Types, StructuredData, Imaging, PrimMesher, rendering, main
|
||||
wire/data, core runtime/networking, avatar-facing manager, and
|
||||
world/social/service manager slices expose 2,795 final Rust-facing types and
|
||||
all 28,768 callable members with real fields/constants/enum values and
|
||||
standardized failing bodies;
|
||||
world/social/service manager, RLV, LSL tools, Utilities, Vivox, and WebRTC
|
||||
slices expose all 3,066 final Rust-facing types and all 30,789 callable
|
||||
members with real fields/constants/enum values and standardized failing
|
||||
bodies;
|
||||
- all 1,295 NUnit `[Test]`/`[TestCase]` invocations have compiling Rust test
|
||||
entries that intentionally panic with their source identity and body hash;
|
||||
- all nine sample/tool projects have compiling Rust binary targets;
|
||||
- the 128 TestClient command source files are retained as a command inventory.
|
||||
|
||||
The remaining 271 generated type shims preserve names and module placement, but
|
||||
do not yet expose their 2,021 callable members. `api/SURFACE.tsv` is an inventory aid,
|
||||
not proof of API coverage: it records declaration lines but does not fully parse
|
||||
multiline signatures. Likewise, a generated `pending` test is a parity
|
||||
placeholder, not a semantic translation. **This repository is therefore at
|
||||
Stage 0 and does not yet satisfy either the full API-shim gate or the full
|
||||
test-suite gate.**
|
||||
No generated type shells remain pending: all cataloged members are callable.
|
||||
`api/SURFACE.tsv` is still an inventory aid, not proof of API coverage: it
|
||||
records declaration lines but does not fully parse multiline signatures.
|
||||
Likewise, a generated `pending` test is a parity placeholder, not a semantic
|
||||
translation. **This repository is therefore at Stage 0 and still requires the
|
||||
independent downstream API audit and full test-suite gate.**
|
||||
|
||||
The avatar-facing slice preserves the C# agent, movement/camera, appearance and
|
||||
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
|
||||
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
|
||||
entire workspace, rather than one crate at a time:
|
||||
|
||||
|
||||
@@ -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.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.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.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
|
||||
@@ -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_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_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_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_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_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.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.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_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_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
|
||||
@@ -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.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.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.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
|
||||
@@ -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.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_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_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
|
||||
@@ -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.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.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_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
|
||||
@@ -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_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.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_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
|
||||
@@ -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.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.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_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_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: 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.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
|
||||
@@ -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.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.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.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
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -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.Imaging.Abstractions` | 3 | 20 | 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.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.Simple` | 1 | 6 | callable failure-only shim |
|
||||
| `LibreMetaverse.StructuredData` | 16 | 295 | callable failure-only shim |
|
||||
| `LibreMetaverse.Types` | 45 | 942 | callable failure-only shim |
|
||||
| `LibreMetaverse.Utilities` | 3 | 13 | pending milestone issue |
|
||||
| `LibreMetaverse.Voice.Vivox` | 64 | 531 | pending milestone issue |
|
||||
| `LibreMetaverse.Voice.WebRTC` | 12 | 210 | pending milestone issue |
|
||||
| `LibreMetaverse.Utilities` | 3 | 13 | callable failure-only shim |
|
||||
| `LibreMetaverse.Voice.Vivox` | 64 | 531 | callable failure-only shim |
|
||||
| `LibreMetaverse.Voice.WebRTC` | 12 | 210 | callable failure-only shim |
|
||||
|
||||
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.
|
||||
@@ -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 #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
@@ -1,5 +1,7 @@
|
||||
//! LSL parsing tools corresponding to `LibreMetaverse.LslTools`.
|
||||
|
||||
extern crate self as libremetaverse_lsl_tools;
|
||||
|
||||
mod generated;
|
||||
|
||||
pub use generated::*;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,7 @@
|
||||
//! Restrained Love Viewer support corresponding to `LibreMetaverse.RLV`.
|
||||
|
||||
extern crate self as libremetaverse_rlv;
|
||||
|
||||
mod generated;
|
||||
|
||||
pub use generated::*;
|
||||
|
||||
@@ -136,3 +136,15 @@ pub struct Span<T>(pub PhantomData<fn(T)>);
|
||||
pub struct RandomSource;
|
||||
|
||||
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;
|
||||
|
||||
@@ -1,27 +1,116 @@
|
||||
// @generated by tools/generate_surface.py; do not edit by hand.
|
||||
// Source: LibreMetaverse 2aa70bb68513b39795da5d13c88f31b86e85a3ba
|
||||
// @generated by tools/generate_api_shims.py; do not edit by hand.
|
||||
#![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_snake_case)]
|
||||
|
||||
/// `class` shim for C# `LibreMetaverse.Utilities.ConnectionManager`; members remain intentionally unimplemented.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
/// C# type: `T:LibreMetaverse.Utilities.ConnectionManager`.
|
||||
pub struct ConnectionManager;
|
||||
impl ConnectionManager {
|
||||
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Utilities.ConnectionManager";
|
||||
pub const CSHARP_KIND: &'static str = "class";
|
||||
/// C# member: `M:LibreMetaverse.Utilities.ConnectionManager.#ctor(LibreMetaverse.GridClient,System.Int32)`.
|
||||
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.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
/// C# type: `T:LibreMetaverse.Utilities.Realism`.
|
||||
pub struct Realism;
|
||||
impl Realism {
|
||||
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Utilities.Realism";
|
||||
pub const CSHARP_KIND: &'static str = "class";
|
||||
/// C# member: `M:LibreMetaverse.Utilities.Realism.Chat(LibreMetaverse.GridClient,System.String)`.
|
||||
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.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct WaterType;
|
||||
impl WaterType {
|
||||
pub const CSHARP_NAME: &'static str = "LibreMetaverse.Utilities.WaterType";
|
||||
pub const CSHARP_KIND: &'static str = "enum";
|
||||
/// C# type: `T:LibreMetaverse.Utilities.WaterType`.
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
|
||||
#[repr(i32)]
|
||||
pub enum WaterType {
|
||||
/// C# member: `F:LibreMetaverse.Utilities.WaterType.Dry`.
|
||||
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,
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
//! Utilities corresponding to `LibreMetaverse.Utilities`.
|
||||
|
||||
extern crate self as libremetaverse_utilities;
|
||||
|
||||
mod generated;
|
||||
|
||||
pub use generated::*;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,7 @@
|
||||
//! Vivox adapter corresponding to `LibreMetaverse.Voice.Vivox`.
|
||||
|
||||
extern crate self as libremetaverse_voice_vivox;
|
||||
|
||||
mod generated;
|
||||
|
||||
pub use generated::*;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,33 @@
|
||||
//! WebRTC voice adapter corresponding to `LibreMetaverse.Voice.WebRTC`.
|
||||
|
||||
extern crate self as libremetaverse_voice_webrtc;
|
||||
|
||||
mod generated;
|
||||
|
||||
pub use generated::*;
|
||||
pub use libremetaverse as core;
|
||||
pub use libremetaverse_structured_data as structured_data;
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -23783,7 +23783,7 @@ pub struct PrimitiveConstructionData {
|
||||
/// C# member: `F:LibreMetaverse.Primitive.ConstructionData.State`.
|
||||
pub state: u8,
|
||||
/// C# member: `F:LibreMetaverse.Primitive.ConstructionData.profileCurve`.
|
||||
pub profile_curve: u8,
|
||||
pub profile_curve_with_field: u8,
|
||||
}
|
||||
impl PrimitiveConstructionData {
|
||||
/// C# member: `M:LibreMetaverse.Primitive.ConstructionData.#ctor`.
|
||||
|
||||
84
tests/compat/tests/extension_shims.rs
Normal file
84
tests/compat/tests/extension_shims.rs
Normal 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"
|
||||
);
|
||||
}
|
||||
@@ -21,11 +21,16 @@ COVERAGE = ROOT / "api/SHIM-COVERAGE.md"
|
||||
TARGETS = {
|
||||
"LibreMetaverse.Imaging.Abstractions": ROOT / "crates/libremetaverse-imaging/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.RLV": ROOT / "crates/libremetaverse-rlv/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.Types": ROOT / "crates/libremetaverse-types/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"
|
||||
@@ -297,12 +302,6 @@ PRIVATE_LAYOUTS = {
|
||||
"T:LibreMetaverse.StructuredData.OSDUri": [("value", "libremetaverse_types::compat::Uri")],
|
||||
"T:LibreMetaverse.Imaging.ManagedImage": [("data", "Vec<u8>")],
|
||||
}
|
||||
BOXED_FIELDS = {
|
||||
"F:LibreMetaverse.Caps.Simulator",
|
||||
"F:LibreMetaverse.Simulator.Caps",
|
||||
}
|
||||
|
||||
|
||||
def generic_names(item: dict) -> list[str]:
|
||||
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};")
|
||||
else:
|
||||
lines.append(f"pub struct {rust_name}{suffix} {{")
|
||||
generics = set(names)
|
||||
for field in fields:
|
||||
field_type = mapper.type(field["type"], field.get("nullability"), generics)
|
||||
if field["doc_id"] in BOXED_FIELDS:
|
||||
field_type = (
|
||||
f"Option<Box<{field_type[7:-1]}>>"
|
||||
if field_type.startswith("Option<")
|
||||
else f"Box<{field_type}>"
|
||||
)
|
||||
lines += [f" /// C# member: `{field['doc_id']}`.", f" pub {mapping.snake(field['name'])}: {field_type},"]
|
||||
field_signature = member_rows[field["doc_id"]]["rust_signature"]
|
||||
field_name_match = re.fullmatch(r"pub ([^:]+): (.+)", field_signature)
|
||||
if not field_name_match:
|
||||
raise ValueError(f"invalid mapped field signature: {field_signature}")
|
||||
field_name = field_name_match.group(1)
|
||||
field_type = field_name_match.group(2)
|
||||
lines += [f" /// C# member: `{field['doc_id']}`.", f" pub {field_name}: {field_type},"]
|
||||
for field_name, field_type in private_fields:
|
||||
lines.append(f" {field_name}: {field_type},")
|
||||
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]]]:
|
||||
type_rows, resolved = mapping.build_type_rows(catalog)
|
||||
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
|
||||
missing_configured_ids = configured_main_ids - type_by_id.keys()
|
||||
if 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 = {
|
||||
*{mapping.type_parts(item["signature"])[0] for assembly in catalog["assemblies"] for item in assembly["types"] if item["kind"] == "interface"},
|
||||
*{
|
||||
|
||||
@@ -170,6 +170,21 @@ SUPPORT_TYPES = {
|
||||
MEMBER_RETURN_OVERRIDES = {
|
||||
"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 = {
|
||||
"as", "break", "const", "continue", "crate", "else", "enum", "extern", "false", "fn",
|
||||
"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"
|
||||
if kind in {"field", "constant", "enum_value"}:
|
||||
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":
|
||||
signature = f"{rust_name}: {value_type}"
|
||||
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")
|
||||
if {row["status"] for row in member_rows} - VALID_MEMBER_STATUSES:
|
||||
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}
|
||||
if catalog_ids != mapped_ids:
|
||||
raise ValueError(f"catalog/mapping ID mismatch: missing={len(catalog_ids - mapped_ids)}, stale={len(mapped_ids - catalog_ids)}")
|
||||
|
||||
Reference in New Issue
Block a user