Translate wire semantics tests

This commit is contained in:
2026-08-08 18:00:11 +02:00
parent e656a4f6d2
commit de6e611ef0
32 changed files with 3488 additions and 1683 deletions

View File

@@ -170,6 +170,24 @@ SUPPORT_TYPES = {
MEMBER_RETURN_OVERRIDES = {
"M:LibreMetaverse.Caps.Capabilities": "Vec<String>",
}
MEMBER_SIGNATURE_OVERRIDES = {
"M:LibreMetaverse.Helpers.ZeroDecode(System.Byte[],System.Int32,System.Byte[])": (
"pub fn zero_decode(src: Option<&[u8]>, srclen: i32, dest: Option<&mut [u8]>) "
"-> Result<i32, crate::Error>",
"shared_borrow,owned,mutable_borrow",
),
"M:LibreMetaverse.Helpers.ZeroEncode(System.Byte[],System.Int32,System.Byte[])": (
"pub fn zero_encode(src: Option<&[u8]>, srclen: i32, dest: Option<&mut [u8]>) "
"-> Result<i32, crate::Error>",
"shared_borrow,owned,mutable_borrow",
),
"M:LibreMetaverse.Packets.InventoryDescendentsPacket.FromBytes(System.Byte[],System.Int32@,System.Int32@,System.Byte[])": (
"pub fn from_bytes_with_bytes_int32_int32_bytes(&mut self, bytes: Vec<u8>, "
"i: &mut i32, packet_end: &mut i32, zero_buffer: Option<&mut [u8]>) "
"-> Result<(), crate::Error>",
"mutable_self,owned,mutable_borrow,mutable_borrow,optional_mutable_borrow",
),
}
TYPE_USAGE_OVERRIDES = {
"LibreMetaverse.DictionaryChangeCallback": (
"std::sync::Arc<dyn Fn(libremetaverse::DictionaryEventAction, "
@@ -566,6 +584,15 @@ def generic_names(item: dict, owner: dict) -> set[str]:
def method_receiver(owner: dict, item: dict) -> tuple[str, str]:
if item.get("static") or item["kind"] == "constructor":
return "", "none"
if item["name"] == "Deserialize":
return "&mut self", "mutable_self"
if owner["doc_id"] == "T:LibreMetaverse.BitPack" and item["name"].startswith(("Pack", "Unpack")):
return "&mut self", "mutable_self"
if (
owner["doc_id"] == "T:LibreMetaverse.Packets.InventoryDescendentsPacket"
and item["name"].startswith("FromBytes")
):
return "&mut self", "mutable_self"
observers = ("Get", "TryGet", "Find", "Contains", "Has", "Is", "Can", "To", "Equals", "Compare")
if owner["kind"] == "struct" and not item["name"].startswith(observers) and not item["name"].startswith("op_"):
return "&mut self", "mutable_self"
@@ -615,6 +642,9 @@ def parameter_slug(value: str) -> str:
def member_signature(mapper: Mapper, owner: dict, item: dict, rust_name: str) -> tuple[str, str, str, str, str]:
if item["doc_id"] in MEMBER_SIGNATURE_OVERRIDES:
signature, ownership = MEMBER_SIGNATURE_OVERRIDES[item["doc_id"]]
return signature, ownership, "sync", "Result<_, crate::Error>", "method"
generics = generic_names(item, owner)
mapped_parameters = [map_parameter(mapper, parameter, generics) for parameter in item.get("parameters", [])]
own = [value[0] for value in mapped_parameters]