Implement native inventory store and cache (#61)
All checks were successful
Native code generation / deterministic (push) Successful in 12m18s
Imaging and meshing gate / native (push) Successful in 4m2s
JPEG 2000 feature / linux (push) Successful in 2m34s
Native Rust workspace compile / compile (push) Successful in 4m4s
Skia feature / linux (push) Successful in 31m2s
All checks were successful
Native code generation / deterministic (push) Successful in 12m18s
Imaging and meshing gate / native (push) Successful in 4m2s
JPEG 2000 feature / linux (push) Successful in 2m34s
Native Rust workspace compile / compile (push) Successful in 4m4s
Skia feature / linux (push) Successful in 31m2s
This commit is contained in:
@@ -63,6 +63,31 @@ NATIVE_TYPES = {
|
||||
"T:LibreMetaverse.HttpCapsClient.ProgressReport": "crate::caps_http::HttpCapsClientProgressReport",
|
||||
"T:LibreMetaverse.InstantMessage": "crate::agent_manager::InstantMessage",
|
||||
"T:LibreMetaverse.InstantMessageEventArgs": "crate::agent_manager::InstantMessageEventArgs",
|
||||
"T:LibreMetaverse.Inventory": "crate::inventory::Inventory",
|
||||
"T:LibreMetaverse.InventoryAnimation": "crate::inventory::InventoryAnimation",
|
||||
"T:LibreMetaverse.InventoryAttachment": "crate::inventory::InventoryAttachment",
|
||||
"T:LibreMetaverse.InventoryBase": "crate::inventory::InventoryBase",
|
||||
"T:LibreMetaverse.InventoryCallingCard": "crate::inventory::InventoryCallingCard",
|
||||
"T:LibreMetaverse.InventoryCategory": "crate::inventory::InventoryCategory",
|
||||
"T:LibreMetaverse.InventoryFolder": "crate::inventory::InventoryFolder",
|
||||
"T:LibreMetaverse.InventoryGesture": "crate::inventory::InventoryGesture",
|
||||
"T:LibreMetaverse.InventoryItem": "crate::inventory::InventoryItem",
|
||||
"T:LibreMetaverse.InventoryLSL": "crate::inventory::InventoryLSL",
|
||||
"T:LibreMetaverse.InventoryLandmark": "crate::inventory::InventoryLandmark",
|
||||
"T:LibreMetaverse.InventoryMaterial": "crate::inventory::InventoryMaterial",
|
||||
"T:LibreMetaverse.InventoryNode": "crate::inventory::InventoryNode",
|
||||
"T:LibreMetaverse.InventoryNodeDictionary": "crate::inventory::InventoryNodeDictionary",
|
||||
"T:LibreMetaverse.InventoryNotecard": "crate::inventory::InventoryNotecard",
|
||||
"T:LibreMetaverse.InventoryObject": "crate::inventory::InventoryObject",
|
||||
"T:LibreMetaverse.InventoryObjectAddedEventArgs": "crate::inventory::InventoryObjectAddedEventArgs",
|
||||
"T:LibreMetaverse.InventoryObjectRemovedEventArgs": "crate::inventory::InventoryObjectRemovedEventArgs",
|
||||
"T:LibreMetaverse.InventoryObjectUpdatedEventArgs": "crate::inventory::InventoryObjectUpdatedEventArgs",
|
||||
"T:LibreMetaverse.InventorySettings": "crate::inventory::InventorySettings",
|
||||
"T:LibreMetaverse.InventorySnapshot": "crate::inventory::InventorySnapshot",
|
||||
"T:LibreMetaverse.InventorySound": "crate::inventory::InventorySound",
|
||||
"T:LibreMetaverse.InventoryTexture": "crate::inventory::InventoryTexture",
|
||||
"T:LibreMetaverse.InventoryWearable": "crate::inventory::InventoryWearable",
|
||||
"T:LibreMetaverse.Permissions": "crate::inventory::Permissions",
|
||||
"T:LibreMetaverse.ChatEventArgs": "crate::agent_messages::ChatEventArgs",
|
||||
"T:LibreMetaverse.ChatSessionMember": "crate::agent_messages::ChatSessionMember",
|
||||
"T:LibreMetaverse.ChatSessionMemberAddedEventArgs": "crate::agent_messages::ChatSessionMemberAddedEventArgs",
|
||||
@@ -1560,6 +1585,21 @@ VALUE_DERIVES = {
|
||||
"T:LibreMetaverse.Vector3d": "Clone, Copy, Debug",
|
||||
"T:LibreMetaverse.WorldSettings": "Clone, Debug, Eq, PartialEq",
|
||||
}
|
||||
|
||||
# Native implementations occasionally need Rust-only bounds that have no
|
||||
# direct C# metadata equivalent. C#'s `where T : class` permits returning a
|
||||
# reference to the stored object; the Rust inventory store returns an owned
|
||||
# value, so its generic compatibility accessors clone the concrete item.
|
||||
NATIVE_MEMBER_BOUNDS = {
|
||||
"M:LibreMetaverse.Inventory.GetValueOrDefault``1(LibreMetaverse.UUID)": {
|
||||
"T": "T: Clone + 'static",
|
||||
},
|
||||
"M:LibreMetaverse.Inventory.TryGetValue``1(LibreMetaverse.UUID,``0@)": {
|
||||
"T": "T: Clone + 'static",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def generic_names(item: dict) -> list[str]:
|
||||
return [parameter["name"] for parameter in item.get("generic_parameters", [])]
|
||||
|
||||
@@ -1649,6 +1689,11 @@ def render_compile_fixture(
|
||||
*(owner_bounds.get(name, name) for name in owner_names),
|
||||
*generic_declarations(member, mapper, owner_names),
|
||||
]
|
||||
member_bounds = NATIVE_MEMBER_BOUNDS.get(member["doc_id"], {})
|
||||
parameters = [
|
||||
member_bounds.get(parameter.split(":", 1)[0], parameter)
|
||||
for parameter in parameters
|
||||
]
|
||||
if member["doc_id"] == "M:LibreMetaverse.Utils.EnumTryParse``1(System.String,``0@)":
|
||||
parameters = [
|
||||
*owner_names,
|
||||
|
||||
Reference in New Issue
Block a user