Implement native inventory manager workflows (#62)
All checks were successful
Native code generation / deterministic (push) Successful in 13m14s
Imaging and meshing gate / native (push) Successful in 4m13s
Native Rust workspace compile / compile (push) Successful in 4m19s

This commit is contained in:
2026-08-10 06:00:28 +00:00
parent eb7be428c6
commit 61d6721287
15 changed files with 5564 additions and 576 deletions

View File

@@ -0,0 +1,152 @@
#!/usr/bin/env python3
"""Audit issue 62's native UDP inventory-manager boundary."""
from __future__ import annotations
from pathlib import Path
import re
import generate_api_shims
ROOT = Path(__file__).resolve().parents[1]
SOURCE = ROOT / "crates" / "libremetaverse" / "src" / "inventory_manager.rs"
DOC = ROOT / "docs" / "inventory.md"
MANAGER_TESTS = ROOT / "tests" / "compat" / "tests" / "inventory_manager_semantics.rs"
TASK_TESTS = ROOT / "tests" / "compat" / "tests" / "task_inventory_semantics.rs"
STUB_RE = re.compile(r"\b(?:not_implemented|unimplemented_api)\b|\b(?:todo|unimplemented)!\s*\(")
REQUIRED_TYPES = {
"T:LibreMetaverse.FindObjectByPathReplyEventArgs",
"T:LibreMetaverse.FolderUpdatedEventArgs",
"T:LibreMetaverse.InventoryManager",
"T:LibreMetaverse.InventoryManager.CopyItemsResult",
"T:LibreMetaverse.InventoryManager.FolderUpdateResult",
"T:LibreMetaverse.InventoryObjectOfferedEventArgs",
"T:LibreMetaverse.ItemReceivedEventArgs",
"T:LibreMetaverse.SaveAssetToInventoryEventArgs",
"T:LibreMetaverse.ScriptRunningReplyEventArgs",
"T:LibreMetaverse.TaskInventoryReplyEventArgs",
"T:LibreMetaverse.TaskItemReceivedEventArgs",
}
REQUIRED_MEMBERS = {
"E:LibreMetaverse.InventoryManager.FindObjectByPathReply",
"E:LibreMetaverse.InventoryManager.FolderUpdated",
"E:LibreMetaverse.InventoryManager.InventoryObjectOffered",
"E:LibreMetaverse.InventoryManager.ItemReceived",
"E:LibreMetaverse.InventoryManager.ScriptRunningReply",
"E:LibreMetaverse.InventoryManager.TaskInventoryReply",
"E:LibreMetaverse.InventoryManager.TaskItemReceived",
"M:LibreMetaverse.InventoryManager.#ctor(LibreMetaverse.GridClient)",
"M:LibreMetaverse.InventoryManager.CreateFolder(LibreMetaverse.UUID,System.String,LibreMetaverse.FolderType)",
"M:LibreMetaverse.InventoryManager.CreateItemAsync(LibreMetaverse.UUID,System.String,System.String,LibreMetaverse.AssetType,LibreMetaverse.UUID,LibreMetaverse.InventoryType,LibreMetaverse.WearableType,LibreMetaverse.PermissionMask,System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.CreateLinkAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.String,LibreMetaverse.InventoryType,LibreMetaverse.UUID,System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.FetchItemAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.FindObjectByPathAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.FolderContentsAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean,System.Boolean,LibreMetaverse.InventorySortOrder,System.Threading.CancellationToken,System.Boolean)",
"M:LibreMetaverse.InventoryManager.GetTaskInventoryAsync(LibreMetaverse.UUID,System.UInt32,LibreMetaverse.Simulator,System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.GiveFolderAsync(LibreMetaverse.UUID,System.String,LibreMetaverse.UUID,System.Boolean,System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.GiveItem(LibreMetaverse.UUID,System.String,LibreMetaverse.AssetType,LibreMetaverse.UUID,System.Boolean)",
"M:LibreMetaverse.InventoryManager.MoveFolders(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.MoveItemsAsync(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.RemoveItemsAsync(System.Collections.Generic.IEnumerable{LibreMetaverse.UUID},System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.RequestCopyItemsWithResultAsync(System.Collections.Generic.List{LibreMetaverse.UUID},System.Collections.Generic.List{LibreMetaverse.UUID},System.Collections.Generic.List{System.String},LibreMetaverse.UUID,System.Threading.CancellationToken)",
"M:LibreMetaverse.InventoryManager.RequestDeRezToInventory(System.UInt32,LibreMetaverse.DeRezDestination,LibreMetaverse.UUID,LibreMetaverse.UUID)",
"M:LibreMetaverse.InventoryManager.RequestFetchInventoryAsync(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken,System.Action{System.Collections.Generic.List{LibreMetaverse.InventoryItem}})",
"M:LibreMetaverse.InventoryManager.RequestRezFromInventory(LibreMetaverse.Simulator,LibreMetaverse.UUID,LibreMetaverse.Quaternion,LibreMetaverse.Vector3,LibreMetaverse.InventoryItem,LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean)",
"M:LibreMetaverse.InventoryManager.RequestTaskInventory(System.UInt32,LibreMetaverse.Simulator)",
"M:LibreMetaverse.InventoryManager.RequestUpdateItems(System.Collections.Generic.List{LibreMetaverse.InventoryItem},LibreMetaverse.UUID)",
"M:LibreMetaverse.InventoryManager.UpdateTaskInventory(System.UInt32,LibreMetaverse.InventoryItem,LibreMetaverse.Simulator,System.Boolean)",
"M:LibreMetaverse.InventoryManager.WaitForNextInventoryOfferAsync(System.Threading.CancellationToken)",
}
def require_markers(path: Path, markers: tuple[str, ...]) -> None:
source = path.read_text()
missing = [marker for marker in markers if marker not in source]
if missing:
raise SystemExit(f"{path.name}: audit evidence missing: " + ", ".join(missing))
def main() -> None:
native_types = (
generate_api_shims.NATIVE_TYPES.keys()
| generate_api_shims.NATIVE_DECLARATIONS.keys()
)
missing_types = sorted(REQUIRED_TYPES - native_types)
if missing_types:
raise SystemExit("issue 62 native types missing: " + ", ".join(missing_types))
missing_members = sorted(
REQUIRED_MEMBERS - generate_api_shims.NATIVE_MEMBER_BODIES.keys()
)
if missing_members:
raise SystemExit("issue 62 native members missing: " + ", ".join(missing_members))
update_task = (
"M:LibreMetaverse.InventoryManager.UpdateTaskInventory(System.UInt32,"
"LibreMetaverse.InventoryItem,LibreMetaverse.Simulator,System.Boolean)"
)
if "only_mod_meta.unwrap_or(true)" not in generate_api_shims.NATIVE_MEMBER_BODIES[update_task]:
raise SystemExit("UpdateTaskInventory must retain the C# metadata-only default")
for update_member in (
"M:LibreMetaverse.InventoryManager.RequestUpdateItem(LibreMetaverse.InventoryItem)",
"M:LibreMetaverse.InventoryManager.RequestUpdateItems(System.Collections.Generic.List{LibreMetaverse.InventoryItem})",
):
if "UUID::random()?" not in generate_api_shims.NATIVE_MEMBER_BODIES[update_member]:
raise SystemExit(f"{update_member} must generate a transaction ID")
if STUB_RE.search(SOURCE.read_text()):
raise SystemExit("issue 62 owned Rust stubs remain in inventory_manager.rs")
require_markers(
SOURCE,
(
"MAX_TASK_INVENTORY_BYTES",
"MAX_PENDING_REQUESTS",
"encode_multiple",
"pending_created",
"pending_fetches",
"pending_task_replies",
"callbacks are not invoked while an inventory lock is held",
"cancelling_one_fetch_waiter_preserves_concurrent_correlation",
"fake_bulk_copy_reply_waits_for_every_block",
"asset_type_without_folder_type_falls_back_to_inventory_root",
"stale_descendents_packet_cannot_mutate_store",
"task_xfer_rejects_announced_data_above_bound",
),
)
require_markers(
DOC,
(
"UDP inventory manager",
"4,096 pending operations",
"16 MiB",
"RequestXfer",
"No store lock is held across an await",
),
)
require_markers(
MANAGER_TESTS,
(
"inventory_manager_null_throws",
"encrypt_decrypt_round_trip",
"item_crc_is_deterministic_and_changes_when_fields_change",
"create_inventory_item_returns_correct_subclass",
),
)
require_markers(
TASK_TESTS,
(
"cap_available_returns_contents_folder_and_decrypts_shadow_id",
"plain_asset_id_parses_without_decryption",
"non_success_status_returns_contents_folder_only",
"no_capability_does_not_make_http_request",
),
)
print(
"issue 62 audit: native inventory packet mappings, bounded correlation and Xfer, "
"lock-free callback evidence, documentation, and translated compatibility cases are present"
)
if __name__ == "__main__":
main()

View File

@@ -82,12 +82,22 @@ NATIVE_TYPES = {
"T:LibreMetaverse.InventoryObjectAddedEventArgs": "crate::inventory::InventoryObjectAddedEventArgs",
"T:LibreMetaverse.InventoryObjectRemovedEventArgs": "crate::inventory::InventoryObjectRemovedEventArgs",
"T:LibreMetaverse.InventoryObjectUpdatedEventArgs": "crate::inventory::InventoryObjectUpdatedEventArgs",
"T:LibreMetaverse.InventoryObjectOfferedEventArgs": "crate::inventory_manager::InventoryObjectOfferedEventArgs",
"T:LibreMetaverse.InventoryManager.CopyItemsResult": "crate::inventory_manager::InventoryManagerCopyItemsResult",
"T:LibreMetaverse.InventoryManager.FolderUpdateResult": "crate::inventory_manager::InventoryManagerFolderUpdateResult",
"T:LibreMetaverse.ItemReceivedEventArgs": "crate::inventory_manager::ItemReceivedEventArgs",
"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.FindObjectByPathReplyEventArgs": "crate::inventory_manager::FindObjectByPathReplyEventArgs",
"T:LibreMetaverse.FolderUpdatedEventArgs": "crate::inventory_manager::FolderUpdatedEventArgs",
"T:LibreMetaverse.SaveAssetToInventoryEventArgs": "crate::inventory_manager::SaveAssetToInventoryEventArgs",
"T:LibreMetaverse.ScriptRunningReplyEventArgs": "crate::inventory_manager::ScriptRunningReplyEventArgs",
"T:LibreMetaverse.TaskInventoryReplyEventArgs": "crate::inventory_manager::TaskInventoryReplyEventArgs",
"T:LibreMetaverse.TaskItemReceivedEventArgs": "crate::inventory_manager::TaskItemReceivedEventArgs",
"T:LibreMetaverse.ChatEventArgs": "crate::agent_messages::ChatEventArgs",
"T:LibreMetaverse.ChatSessionMember": "crate::agent_messages::ChatSessionMember",
"T:LibreMetaverse.ChatSessionMemberAddedEventArgs": "crate::agent_messages::ChatSessionMemberAddedEventArgs",
@@ -251,6 +261,7 @@ NATIVE_TYPES = {
NATIVE_DECLARATIONS = {
"T:LibreMetaverse.AgentManager": "crate::agent_manager::AgentManager",
"T:LibreMetaverse.GridClient": "crate::client_core::GridClient",
"T:LibreMetaverse.InventoryManager": "crate::inventory_manager::InventoryManager",
"T:LibreMetaverse.NetworkManager": "crate::network_manager::NetworkManager",
"T:LibreMetaverse.Settings": "crate::client_core::Settings",
"T:LibreMetaverse.Simulator": "crate::network_manager::Simulator",
@@ -322,12 +333,192 @@ NATIVE_MEMBER_BODIES = {
"self.native_http_caps_client()",
"P:LibreMetaverse.GridClient.HttpCapsClient#set":
"self.native_set_http_caps_client(value)",
"P:LibreMetaverse.GridClient.Inventory":
"self.native_inventory().unwrap_or_else(|_| panic!(\"failed to construct InventoryManager\"))",
"P:LibreMetaverse.GridClient.Inventory#set":
"self.native_set_inventory(value)",
"P:LibreMetaverse.GridClient.Network":
"self.native_network().unwrap_or_else(|_| panic!(\"failed to construct NetworkManager\"))",
"P:LibreMetaverse.GridClient.Network#set":
"self.native_set_network(value)",
"P:LibreMetaverse.GridClient.Self":
"self.native_self()",
"E:LibreMetaverse.InventoryManager.FindObjectByPathReply":
"self.native_subscribe_find_object_by_path_reply(handler)",
"E:LibreMetaverse.InventoryManager.FolderUpdated":
"self.native_subscribe_folder_updated(handler)",
"E:LibreMetaverse.InventoryManager.InventoryObjectOffered":
"self.native_subscribe_inventory_object_offered(handler)",
"E:LibreMetaverse.InventoryManager.ItemReceived":
"self.native_subscribe_item_received(handler)",
"E:LibreMetaverse.InventoryManager.SaveAssetToInventory":
"self.native_subscribe_save_asset_to_inventory(handler)",
"E:LibreMetaverse.InventoryManager.ScriptRunningReply":
"self.native_subscribe_script_running_reply(handler)",
"E:LibreMetaverse.InventoryManager.TaskInventoryReply":
"self.native_subscribe_task_inventory_reply(handler)",
"E:LibreMetaverse.InventoryManager.TaskItemReceived":
"self.native_subscribe_task_item_received(handler)",
"F:LibreMetaverse.InventoryManager.MAGIC_ID":
"crate::inventory_manager::InventoryManager::native_magic_id()",
"M:LibreMetaverse.InventoryManager.#ctor(LibreMetaverse.GridClient)":
"crate::inventory_manager::InventoryManager::native_new(client)",
"M:LibreMetaverse.InventoryManager.CreateInventoryItem(LibreMetaverse.InventoryType,LibreMetaverse.UUID)":
"crate::inventory_manager::InventoryManager::native_create_inventory_item(type_, id)",
"M:LibreMetaverse.InventoryManager.CopyItemAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_copy_item(item, new_parent, new_name, old_owner_id, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.CopyItemAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Threading.CancellationToken)":
"self.native_copy_item_default_owner(item, new_parent, new_name, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.CopyScriptToTask(System.UInt32,LibreMetaverse.InventoryItem,System.Boolean,LibreMetaverse.Simulator)":
"self.native_copy_script_to_task(object_local_id, item, enable_script, simulator)",
"M:LibreMetaverse.InventoryManager.CreateFolder(LibreMetaverse.UUID,System.String)":
"self.native_create_folder(parent_id, name, libremetaverse_types::FolderType::None)",
"M:LibreMetaverse.InventoryManager.CreateFolder(LibreMetaverse.UUID,System.String,LibreMetaverse.FolderType)":
"self.native_create_folder(parent_id, name, preferred_type)",
"M:LibreMetaverse.InventoryManager.CreateItemAsync(LibreMetaverse.UUID,System.String,System.String,LibreMetaverse.AssetType,LibreMetaverse.UUID,LibreMetaverse.InventoryType,LibreMetaverse.PermissionMask,System.Threading.CancellationToken)":
"self.native_create_item(parent_folder, name, description, type_, asset_transaction_id, inv_type, libremetaverse_types::WearableType::Shape, next_owner_mask, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.CreateItemAsync(LibreMetaverse.UUID,System.String,System.String,LibreMetaverse.AssetType,LibreMetaverse.UUID,LibreMetaverse.InventoryType,LibreMetaverse.WearableType,LibreMetaverse.PermissionMask,System.Threading.CancellationToken)":
"self.native_create_item(parent_folder, name, description, type_, asset_transaction_id, inv_type, wearable_type, next_owner_mask, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.CreateLinkAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.String,LibreMetaverse.InventoryType,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_create_link(folder_id, item_id, name, description, inv_type, transaction_id, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.CreateLinksAsync(LibreMetaverse.UUID,System.Collections.Generic.IEnumerable{System.ValueTuple{LibreMetaverse.InventoryBase,System.String}},System.Action{System.Boolean},System.Threading.CancellationToken)":
"self.native_create_links(folder_id, links_to_create, callback, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.CreateOrRetrieveInventoryItem(LibreMetaverse.InventoryType,LibreMetaverse.UUID)":
"self.native_create_or_retrieve_inventory_item(inv_type, item_id)",
"M:LibreMetaverse.InventoryManager.DecryptShadowID(LibreMetaverse.UUID)":
"crate::inventory_manager::InventoryManager::native_decrypt_shadow_id(shadow_id)",
"M:LibreMetaverse.InventoryManager.Dispose":
"self.native_dispose()",
"M:LibreMetaverse.InventoryManager.EncryptAssetID(LibreMetaverse.UUID)":
"crate::inventory_manager::InventoryManager::native_encrypt_asset_id(asset_id)",
"M:LibreMetaverse.InventoryManager.EmptyFolder(LibreMetaverse.UUID)":
"self.native_empty_folder(folder_id)",
"M:LibreMetaverse.InventoryManager.EmptyLostAndFoundAsync(System.Threading.CancellationToken)":
"self.native_empty_system_folder(libremetaverse_types::FolderType::LostAndFound, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.EmptyTrashAsync(System.Threading.CancellationToken)":
"self.native_empty_system_folder(libremetaverse_types::FolderType::Trash, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.FetchItemAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_fetch_item(item_id, owner_id, cancellation_token, false).await",
"M:LibreMetaverse.InventoryManager.FetchItemHttpAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_fetch_item(item_id, owner_id, token, true).await",
"M:LibreMetaverse.InventoryManager.FindFolderForType(LibreMetaverse.AssetType)":
"Ok(self.native_find_folder_for_asset_type(type_))",
"M:LibreMetaverse.InventoryManager.FindFolderForType(LibreMetaverse.FolderType)":
"Ok(self.native_find_folder_for_type(type_))",
"M:LibreMetaverse.InventoryManager.FindObjectByPathAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Threading.CancellationToken)":
"self.native_find_object_by_path(base_folder, inventory_owner, path, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.FolderContentsAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean,System.Boolean,LibreMetaverse.InventorySortOrder,System.Threading.CancellationToken,System.Boolean)":
"self.native_folder_contents(folder, owner, fetch_folders, fetch_items, order, cancellation_token, follow_links.unwrap_or(false)).await",
"M:LibreMetaverse.InventoryManager.GetInventoryRecursiveAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Collections.Generic.List{LibreMetaverse.InventoryFolder},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken)":
"self.native_get_inventory_recursive(folder_id, owner, cats, items, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.GetTaskInventoryAsync(LibreMetaverse.UUID,System.UInt32,LibreMetaverse.Simulator,System.Threading.CancellationToken)":
"self.native_get_task_inventory(object_id, object_local_id, simulator, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.GiveFolderAsync(LibreMetaverse.UUID,System.String,LibreMetaverse.UUID,System.Boolean,System.Threading.CancellationToken)":
"self.native_give_folder(folder_id, folder_name, recipient, do_effect, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.GiveItem(LibreMetaverse.UUID,System.String,LibreMetaverse.AssetType,LibreMetaverse.UUID,System.Boolean)":
"self.native_give_item(item_id, item_name, asset_type, recipient, do_effect)",
"M:LibreMetaverse.InventoryManager.ItemCRC(LibreMetaverse.InventoryItem)":
"crate::inventory_manager::InventoryManager::native_item_crc(&iitem)",
"M:LibreMetaverse.InventoryManager.ParseTaskInventory(System.String)":
"crate::inventory_manager::InventoryManager::native_parse_task_inventory(task_data)",
"M:LibreMetaverse.InventoryManager.LocalFind(LibreMetaverse.UUID,System.String[],System.Int32,System.Boolean)":
"self.native_local_find(base_folder, path, level, first_only)",
"M:LibreMetaverse.InventoryManager.Move(LibreMetaverse.InventoryBase,LibreMetaverse.InventoryFolder)":
"self.native_move_object(item, new_parent)",
"M:LibreMetaverse.InventoryManager.MoveFolder(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_move_folders(std::collections::HashMap::from([(folder_id, new_parent_id)]), cancellation_token)",
"M:LibreMetaverse.InventoryManager.MoveFolderAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_move_folders_async(std::collections::HashMap::from([(folder_id, new_parent_id)]), cancellation_token).await",
"M:LibreMetaverse.InventoryManager.MoveFolders(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken)":
"self.native_move_folders(folders_new_parents, cancellation_token)",
"M:LibreMetaverse.InventoryManager.MoveFoldersAsync(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken)":
"self.native_move_folders_async(folders_new_parents, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.MoveItem(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Threading.CancellationToken)":
"self.native_move_items(std::collections::HashMap::from([(item_id, (folder_id, new_name))]), cancellation_token)",
"M:LibreMetaverse.InventoryManager.MoveItem(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_move_items(std::collections::HashMap::from([(item_id, (folder_id, String::new()))]), cancellation_token)",
"M:LibreMetaverse.InventoryManager.MoveItemAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Threading.CancellationToken)":
"self.native_move_items_async(std::collections::HashMap::from([(item_id, (folder_id, new_name))]), cancellation_token).await",
"M:LibreMetaverse.InventoryManager.MoveItemAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_move_items_async(std::collections::HashMap::from([(item_id, (folder_id, String::new()))]), cancellation_token).await",
"M:LibreMetaverse.InventoryManager.MoveItems(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken)":
"self.native_move_items(items_new_folders.into_iter().map(|(item, folder)| (item, (folder, String::new()))).collect(), cancellation_token)",
"M:LibreMetaverse.InventoryManager.MoveItemsAsync(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken)":
"self.native_move_items_async(items_new_folders.into_iter().map(|(item, folder)| (item, (folder, String::new()))).collect(), cancellation_token).await",
"M:LibreMetaverse.InventoryManager.MoveTaskInventory(System.UInt32,LibreMetaverse.UUID,LibreMetaverse.UUID,LibreMetaverse.Simulator)":
"self.native_move_task_inventory(object_local_id, task_item_id, inventory_folder_id, simulator)",
"M:LibreMetaverse.InventoryManager.RemoveDescendantsAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_remove_descendants(folder, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RemoveFolderAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_remove_inventory_objects(Vec::new(), vec![folder], cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RemoveItemAsync(LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_remove_inventory_objects(vec![item], Vec::new(), cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RemoveItemsAsync(System.Collections.Generic.IEnumerable{LibreMetaverse.UUID},System.Threading.CancellationToken)":
"self.native_remove_inventory_objects(items.collect(), Vec::new(), cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RemoveTaskInventory(System.UInt32,LibreMetaverse.UUID,LibreMetaverse.Simulator)":
"self.native_remove_task_inventory(object_local_id, task_item_id, simulator)",
"M:LibreMetaverse.InventoryManager.RequestCopyItemAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_copy_item(item, new_parent, new_name, old_owner_id, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RequestCopyItemAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Threading.CancellationToken)":
"self.native_copy_item_default_owner(item, new_parent, new_name, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RequestCopyItemFromNotecardAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken,System.IProgress{LibreMetaverse.HttpCapsClient.ProgressReport})":
"self.native_copy_item_from_notecard(object_id, notecard_id, folder_id, item_id, cancellation_token, progress).await",
"M:LibreMetaverse.InventoryManager.RequestCopyItemsAsync(System.Collections.Generic.List{LibreMetaverse.UUID},System.Collections.Generic.List{LibreMetaverse.UUID},System.Collections.Generic.List{System.String},LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_copy_items(items, target_folders, new_names, old_owner_id, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RequestCopyItemsWithResultAsync(System.Collections.Generic.List{LibreMetaverse.UUID},System.Collections.Generic.List{LibreMetaverse.UUID},System.Collections.Generic.List{System.String},LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_copy_items(items, target_folders, new_names, old_owner_id, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RequestDeRezToInventory(System.UInt32)":
"self.native_de_rez_to_objects_folder(object_local_id)",
"M:LibreMetaverse.InventoryManager.RequestDeRezToInventory(System.UInt32,LibreMetaverse.DeRezDestination,LibreMetaverse.UUID,LibreMetaverse.UUID)":
"self.native_de_rez_to_inventory(object_local_id, dest_type, dest_folder, transaction_id)",
"M:LibreMetaverse.InventoryManager.RequestFetchInventory(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_request_fetch_inventory(std::collections::HashMap::from([(item_id, owner_id)]), cancellation_token)",
"M:LibreMetaverse.InventoryManager.RequestFetchInventory(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken)":
"self.native_request_fetch_inventory(items, cancellation_token)",
"M:LibreMetaverse.InventoryManager.RequestFetchInventoryAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Threading.CancellationToken)":
"self.native_request_fetch_inventory_async(std::collections::HashMap::from([(item_id, owner_id)]), cancellation_token, None).await",
"M:LibreMetaverse.InventoryManager.RequestFetchInventoryAsync(System.Collections.Generic.Dictionary{LibreMetaverse.UUID,LibreMetaverse.UUID},System.Threading.CancellationToken,System.Action{System.Collections.Generic.List{LibreMetaverse.InventoryItem}})":
"self.native_request_fetch_inventory_async(items, cancellation_token, callback).await",
"M:LibreMetaverse.InventoryManager.RequestFindObjectByPathAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Threading.CancellationToken)":
"self.native_find_object_by_path(base_folder, inventory_owner, path, cancellation_token).await.map(|_| ())",
"M:LibreMetaverse.InventoryManager.RequestFolderContentsAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean,System.Boolean,LibreMetaverse.InventorySortOrder,System.Threading.CancellationToken)":
"self.native_request_folder_contents(folder_id, owner_id, fetch_folders, fetch_items, order, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RequestFolderContentsAsync(System.Collections.Generic.List{LibreMetaverse.InventoryFolder},System.Uri,System.Boolean,System.Boolean,LibreMetaverse.InventorySortOrder,System.Threading.CancellationToken)":
"self.native_request_folder_contents_batch(batch, capability_uri, fetch_folders, fetch_items, order, cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RequestFolderUpdateAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean,System.Boolean,LibreMetaverse.InventorySortOrder,System.Threading.CancellationToken)":
"self.native_request_folder_update(folder_id, owner_id, fetch_folders.unwrap_or(true), fetch_items.unwrap_or(true), order.unwrap_or(crate::InventorySortOrder::BY_NAME), cancellation_token).await",
"M:LibreMetaverse.InventoryManager.RequestGetScriptRunning(LibreMetaverse.UUID,LibreMetaverse.UUID)":
"self.native_request_get_script_running(object_id, script_id)",
"M:LibreMetaverse.InventoryManager.RequestRestoreRezFromInventory(LibreMetaverse.Simulator,LibreMetaverse.InventoryItem,LibreMetaverse.UUID)":
"self.native_restore_rez_from_inventory(simulator, item, query_id)",
"M:LibreMetaverse.InventoryManager.RequestRezFromInventory(LibreMetaverse.Simulator,LibreMetaverse.Quaternion,LibreMetaverse.Vector3,LibreMetaverse.InventoryItem)":
"self.native_rez_from_inventory_default(simulator, rotation, position, item, None)",
"M:LibreMetaverse.InventoryManager.RequestRezFromInventory(LibreMetaverse.Simulator,LibreMetaverse.Quaternion,LibreMetaverse.Vector3,LibreMetaverse.InventoryItem,LibreMetaverse.UUID)":
"self.native_rez_from_inventory_default(simulator, rotation, position, item, Some(group_owner))",
"M:LibreMetaverse.InventoryManager.RequestRezFromInventory(LibreMetaverse.Simulator,LibreMetaverse.UUID,LibreMetaverse.Quaternion,LibreMetaverse.Vector3,LibreMetaverse.InventoryItem,LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean)":
"self.native_rez_from_inventory(simulator, task_id, rotation, position, item, group_owner, query_id, rez_selected)",
"M:LibreMetaverse.InventoryManager.RequestSetScriptRunning(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean)":
"self.native_request_set_script_running(object_id, script_id, running)",
"M:LibreMetaverse.InventoryManager.RequestTaskInventory(System.UInt32)":
"self.native_request_task_inventory(object_local_id, None)",
"M:LibreMetaverse.InventoryManager.RequestTaskInventory(System.UInt32,LibreMetaverse.Simulator)":
"self.native_request_task_inventory(object_local_id, simulator)",
"M:LibreMetaverse.InventoryManager.RequestUpdateItem(LibreMetaverse.InventoryItem)":
"self.native_request_update_items(vec![item], libremetaverse_types::UUID::random()?)",
"M:LibreMetaverse.InventoryManager.RequestUpdateItems(System.Collections.Generic.List{LibreMetaverse.InventoryItem})":
"self.native_request_update_items(items, libremetaverse_types::UUID::random()?)",
"M:LibreMetaverse.InventoryManager.RequestUpdateItems(System.Collections.Generic.List{LibreMetaverse.InventoryItem},LibreMetaverse.UUID)":
"self.native_request_update_items(items, transaction_id)",
"M:LibreMetaverse.InventoryManager.UpdateFolderProperties(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,LibreMetaverse.FolderType)":
"self.native_update_folder_properties(folder_id, parent_id, name, type_)",
"M:LibreMetaverse.InventoryManager.UpdateTaskInventory(System.UInt32,LibreMetaverse.InventoryItem,LibreMetaverse.Simulator,System.Boolean)":
"self.native_update_task_inventory(object_local_id, item, simulator, only_mod_meta.unwrap_or(true))",
"M:LibreMetaverse.InventoryManager.WaitForNextInventoryOfferAsync(System.Threading.CancellationToken)":
"self.native_wait_for_next_inventory_offer(cancellation_token).await",
"P:LibreMetaverse.InventoryManager.NoResults":
"crate::inventory_manager::InventoryManager::native_no_results()",
"P:LibreMetaverse.InventoryManager.Store":
"self.native_store()",
"E:LibreMetaverse.AgentManager.IM":
"self.native_subscribe_im(handler)",
"E:LibreMetaverse.AgentManager.AgentDataReply":

View File

@@ -994,6 +994,7 @@ def validate_generated_shims() -> None:
"crate::gesture::",
"crate::json_codec::",
"crate::inventory::",
"crate::inventory_manager::",
"crate::message_codec::",
"crate::message_decoder::",
"crate::notation::",