Implement capability event queue processing (#55)
Some checks failed
Native code generation / deterministic (push) Failing after 1m15s
Imaging and meshing gate / native (push) Successful in 3m58s
Native Rust workspace compile / compile (push) Successful in 4m1s

This commit is contained in:
2026-08-09 16:49:20 +00:00
parent 3032b16e7b
commit aa269f1785
11 changed files with 5041 additions and 919 deletions

View File

@@ -38,15 +38,23 @@ TARGETS = {
# implementations. The generated module keeps catalog markers and re-exports
# the hand-written type so coverage remains deterministic.
NATIVE_TYPES = {
"T:LibreMetaverse.AgentDisplayName": "crate::message_decoder::AgentDisplayName",
"T:LibreMetaverse.CapabilitiesReceivedEventArgs": "crate::caps::CapabilitiesReceivedEventArgs",
"T:LibreMetaverse.Caps": "crate::caps::Caps",
"T:LibreMetaverse.CapsRateLimiter": "crate::caps_http::CapsRateLimiter",
"T:LibreMetaverse.CapsRateLimiterOptions": "crate::caps_http::CapsRateLimiterOptions",
"T:LibreMetaverse.Http.DownloadManager": "crate::download_manager::DownloadManager",
"T:LibreMetaverse.Http.DownloadRequest": "crate::download_manager::DownloadRequest",
"T:LibreMetaverse.Http.EventQueueClient": "crate::event_queue::EventQueueClient",
"T:LibreMetaverse.Http.EventQueueClient.ConnectedCallback": "crate::event_queue::EventQueueClientConnectedCallback",
"T:LibreMetaverse.Http.EventQueueClient.EventCallback": "crate::event_queue::EventQueueClientEventCallback",
"T:LibreMetaverse.HttpCapsClient": "crate::caps_http::HttpCapsClient",
"T:LibreMetaverse.HttpCapsClient.ProgressReport": "crate::caps_http::HttpCapsClientProgressReport",
"T:LibreMetaverse.MediaEntry": "crate::message_decoder::MediaEntry",
"T:LibreMetaverse.Caps.EventQueueCallback": "crate::network_manager::CapsEventQueueCallback",
"T:LibreMetaverse.CapsEventDictionary": "crate::network_manager::CapsEventDictionary",
"T:LibreMetaverse.DisconnectedEventArgs": "crate::network_manager::DisconnectedEventArgs",
"T:LibreMetaverse.EventQueueRunningEventArgs": "crate::network_manager::EventQueueRunningEventArgs",
"T:LibreMetaverse.GenericStreamingMessageEventArgs": "crate::network_manager::GenericStreamingMessageEventArgs",
"T:LibreMetaverse.NetworkManager.IncomingPacket": "crate::network_manager::NetworkManagerIncomingPacket",
"T:LibreMetaverse.NetworkManager.OutgoingPacket": "crate::network_manager::NetworkManagerOutgoingPacket",
@@ -57,6 +65,13 @@ NATIVE_TYPES = {
"T:LibreMetaverse.SimConnectedEventArgs": "crate::network_manager::SimConnectedEventArgs",
"T:LibreMetaverse.SimConnectingEventArgs": "crate::network_manager::SimConnectingEventArgs",
"T:LibreMetaverse.SimDisconnectedEventArgs": "crate::network_manager::SimDisconnectedEventArgs",
"T:LibreMetaverse.Messages.Linden.EventMessageBlock": "crate::event_queue::EventMessageBlock",
"T:LibreMetaverse.Messages.Linden.EventQueueAck": "crate::event_queue::EventQueueAck",
"T:LibreMetaverse.Messages.Linden.EventQueueEvent": "crate::event_queue::EventQueueEvent",
"T:LibreMetaverse.Messages.Linden.EventQueueEvent.QueueEvent": "crate::event_queue::EventQueueEventQueueEvent",
"T:LibreMetaverse.Messages.Linden.EventQueueGetMessage": "crate::event_queue::EventQueueGetMessage",
"T:LibreMetaverse.Messages.Linden.AttachmentResourcesMessage": "crate::message_decoder::AttachmentResourcesMessage",
"T:LibreMetaverse.Primitive.PhysicsProperties": "crate::message_decoder::PrimitivePhysicsProperties",
"T:LibreMetaverse.ArchetypeParam": "crate::genepool_catalog::ArchetypeParam",
"T:LibreMetaverse.AttentionData": "crate::attention_catalog::AttentionData",
"T:LibreMetaverse.AttentionSet": "crate::attention_catalog::AttentionSet",
@@ -194,6 +209,8 @@ NATIVE_MEMBER_BODIES = {
"self.native_set_http_caps_client(value)",
"E:LibreMetaverse.NetworkManager.Disconnected":
"self.native_subscribe_disconnected(handler)",
"E:LibreMetaverse.NetworkManager.EventQueueRunning":
"self.native_subscribe_event_queue_running(handler)",
"E:LibreMetaverse.NetworkManager.GenericStreamingMessage":
"self.native_subscribe_generic_streaming_message(handler)",
"E:LibreMetaverse.NetworkManager.PacketSent":
@@ -228,6 +245,20 @@ NATIVE_MEMBER_BODIES = {
"self.native_enqueue_outgoing(packet)",
"M:LibreMetaverse.NetworkManager.FindSimulator(System.Net.IPEndPoint)":
"Ok(self.native_find_endpoint(end_point))",
"M:LibreMetaverse.Messages.MessageUtils.DecodeEvent(System.String,LibreMetaverse.StructuredData.OSDMap)":
"crate::message_decoder::decode_event(&event_name, &map)",
"M:LibreMetaverse.Messages.MessageUtils.FromDictionaryString(System.Collections.Generic.Dictionary{System.String,System.String})":
"crate::message_decoder::from_dictionary_string(dict)",
"M:LibreMetaverse.Messages.MessageUtils.FromDictionaryUri(System.Collections.Generic.Dictionary{System.Uri,System.Uri})":
"crate::message_decoder::from_dictionary_uri(dict)",
"M:LibreMetaverse.Messages.MessageUtils.FromIP(System.Net.IPAddress)":
"crate::message_decoder::from_ip(address)",
"M:LibreMetaverse.Messages.MessageUtils.ToDictionaryString(LibreMetaverse.StructuredData.OSD)":
"crate::message_decoder::to_dictionary_string(osd)",
"M:LibreMetaverse.Messages.MessageUtils.ToDictionaryUri(LibreMetaverse.StructuredData.OSD)":
"crate::message_decoder::to_dictionary_uri(osd)",
"M:LibreMetaverse.Messages.MessageUtils.ToIP(LibreMetaverse.StructuredData.OSD)":
"crate::message_decoder::to_ip(osd)",
"M:LibreMetaverse.NetworkManager.FindSimulator(System.UInt64)":
"Ok(self.native_find_handle(handle))",
"M:LibreMetaverse.NetworkManager.RegisterCallback(LibreMetaverse.Packets.PacketType,System.EventHandler{LibreMetaverse.PacketReceivedEventArgs})":
@@ -280,6 +311,8 @@ NATIVE_MEMBER_BODIES = {
"self.native_equals(obj)",
"M:LibreMetaverse.Simulator.GetHashCode":
"self.native_hash_code()",
"M:LibreMetaverse.Simulator.IsEventQueueRunning(System.Boolean)":
"self.native_is_event_queue_running(block_until_running)",
"M:LibreMetaverse.Simulator.Pause":
"self.native_pause()",
"M:LibreMetaverse.Simulator.Resume":
@@ -580,9 +613,15 @@ COMPOSED_BASE_TYPES = {
}
NATIVE_MESSAGE_CODEC_TYPES = {
"T:LibreMetaverse.Messages.Linden.AgentDropGroupMessage",
"T:LibreMetaverse.Messages.Linden.AgentDropGroupMessage.AgentData",
"T:LibreMetaverse.Messages.Linden.AgentGroupDataUpdateMessage",
"T:LibreMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.GroupData",
"T:LibreMetaverse.Messages.Linden.AgentGroupDataUpdateMessage.NewGroupData",
"T:LibreMetaverse.Messages.Linden.AgentStateUpdateMessage",
"T:LibreMetaverse.Messages.Linden.BulkUpdateInventoryMessage",
"T:LibreMetaverse.Messages.Linden.BulkUpdateInventoryMessage.FolderDataInfo",
"T:LibreMetaverse.Messages.Linden.BulkUpdateInventoryMessage.ItemDataInfo",
"T:LibreMetaverse.Messages.Linden.ChatSessionAcceptInvitation",
"T:LibreMetaverse.Messages.Linden.ChatSessionRequestBlock",
"T:LibreMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate",
@@ -593,16 +632,29 @@ NATIVE_MESSAGE_CODEC_TYPES = {
"T:LibreMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage",
"T:LibreMetaverse.Messages.Linden.ChatterboxSessionEventReplyMessage",
"T:LibreMetaverse.Messages.Linden.CopyInventoryFromNotecardMessage",
"T:LibreMetaverse.Messages.Linden.CrossedRegionMessage",
"T:LibreMetaverse.Messages.Linden.DirLandReplyMessage",
"T:LibreMetaverse.Messages.Linden.DirLandReplyMessage.QueryReply",
"T:LibreMetaverse.Messages.Linden.EnableSimulatorMessage",
"T:LibreMetaverse.Messages.Linden.EnableSimulatorMessage.SimulatorInfoBlock",
"T:LibreMetaverse.Messages.Linden.EstablishAgentCommunicationMessage",
"T:LibreMetaverse.Messages.Linden.ForceCloseChatterBoxSessionMessage",
"T:LibreMetaverse.Messages.Linden.GetDisplayNamesMessage",
"T:LibreMetaverse.Messages.Linden.GetObjectCostMessage",
"T:LibreMetaverse.Messages.Linden.GetObjectCostRequest",
"T:LibreMetaverse.Messages.Linden.LandResourcesMessage",
"T:LibreMetaverse.Messages.Linden.LandResourcesRequest",
"T:LibreMetaverse.Messages.Linden.LandStatReplyMessage",
"T:LibreMetaverse.Messages.Linden.LandStatReplyMessage.ReportDataBlock",
"T:LibreMetaverse.Messages.Linden.MapLayerMessageBase",
"T:LibreMetaverse.Messages.Linden.MapLayerReplyVariant",
"T:LibreMetaverse.Messages.Linden.MapLayerReplyVariant.LayerData",
"T:LibreMetaverse.Messages.Linden.NavMeshStatusUpdateMessage",
"T:LibreMetaverse.Messages.Linden.ObjectMediaNavigateMessage",
"T:LibreMetaverse.Messages.Linden.ObjectMediaRequest",
"T:LibreMetaverse.Messages.Linden.ObjectMediaResponse",
"T:LibreMetaverse.Messages.Linden.ObjectMediaUpdate",
"T:LibreMetaverse.Messages.Linden.ObjectPhysicsPropertiesMessage",
"T:LibreMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage",
"T:LibreMetaverse.Messages.Linden.ParcelObjectOwnersReplyMessage.PrimOwner",
"T:LibreMetaverse.Messages.Linden.ParcelPropertiesMessage",
@@ -612,9 +664,17 @@ NATIVE_MESSAGE_CODEC_TYPES = {
"T:LibreMetaverse.Messages.Linden.PlacesReplyMessage.QueryData",
"T:LibreMetaverse.Messages.Linden.ProvisionVoiceAccountRequestMessage",
"T:LibreMetaverse.Messages.Linden.RemoteParcelRequestReply",
"T:LibreMetaverse.Messages.Linden.RegionInfoMessage",
"T:LibreMetaverse.Messages.Linden.RenderMaterialsMessage",
"T:LibreMetaverse.Messages.Linden.RequiredVoiceVersionMessage",
"T:LibreMetaverse.Messages.Linden.ScriptRunningReplyMessage",
"T:LibreMetaverse.Messages.Linden.SearchStatRequestReply",
"T:LibreMetaverse.Messages.Linden.SearchStatRequestRequest",
"T:LibreMetaverse.Messages.Linden.SendPostcardMessage",
"T:LibreMetaverse.Messages.Linden.SetDisplayNameMessage",
"T:LibreMetaverse.Messages.Linden.SetDisplayNameReplyMessage",
"T:LibreMetaverse.Messages.Linden.DisplayNameUpdateMessage",
"T:LibreMetaverse.Messages.Linden.SimConsoleResponseMessage",
"T:LibreMetaverse.Messages.Linden.TeleportFailedMessage",
"T:LibreMetaverse.Messages.Linden.TeleportFinishMessage",
"T:LibreMetaverse.Messages.Linden.UpdateAgentInformationMessage",
@@ -622,6 +682,8 @@ NATIVE_MESSAGE_CODEC_TYPES = {
"T:LibreMetaverse.Messages.Linden.UpdateAgentLanguageMessage",
"T:LibreMetaverse.Messages.Linden.UpdateScriptAgentRequestMessage",
"T:LibreMetaverse.Messages.Linden.UpdateScriptTaskUpdateMessage",
"T:LibreMetaverse.Messages.Linden.UploaderRequestComplete",
"T:LibreMetaverse.Messages.Linden.UploaderRequestUpload",
"T:LibreMetaverse.Messages.Linden.ViewerStatsMessage",
}
OPEN_ENUM_IDS = {"T:LibreMetaverse.BakeType", "T:LibreMetaverse.HoleType"}
@@ -1341,7 +1403,22 @@ def render_type(item: dict, type_row: dict, member_rows: dict[str, dict[str, str
continue
mapped_arguments = [mapper.type(argument, None, set(names)) for argument in arguments]
trait_path = mapper.resolved[base] + generic_suffix(mapped_arguments)
lines.append(f"impl{suffix} {trait_path} for {rust_name}{suffix} {{}}")
if (
base == "LibreMetaverse.Interfaces.IMessage"
and item["doc_id"] in NATIVE_MESSAGE_CODEC_TYPES
):
lines += [
f"impl{suffix} {trait_path} for {rust_name}{suffix} {{",
" fn deserialize(&mut self, map: libremetaverse_structured_data::OSDMap) -> Result<(), crate::Error> {",
" <Self as crate::message_codec::GeneratedMessage>::deserialize_generated(self, &map)",
" }",
" fn serialize(&self) -> Result<libremetaverse_structured_data::OSDMap, crate::Error> {",
" <Self as crate::message_codec::GeneratedMessage>::serialize_generated(self)",
" }",
"}",
]
else:
lines.append(f"impl{suffix} {trait_path} for {rust_name}{suffix} {{}}")
return "\n".join(lines)