Translate appearance and outfit parity tests
This commit is contained in:
@@ -73,7 +73,12 @@ WIRE_ROOT_TYPES = {
|
||||
"T:LibreMetaverse.TreeDefinition",
|
||||
}
|
||||
COMPOSED_BASE_TYPES = {
|
||||
"T:LibreMetaverse.InventoryAttachment",
|
||||
"T:LibreMetaverse.InventoryFolder",
|
||||
"T:LibreMetaverse.InventoryItem",
|
||||
"T:LibreMetaverse.InventoryObject",
|
||||
"T:LibreMetaverse.InventoryTexture",
|
||||
"T:LibreMetaverse.InventoryWearable",
|
||||
"T:LibreMetaverse.Messages.Linden.ChatSessionAcceptInvitation",
|
||||
"T:LibreMetaverse.Messages.Linden.ChatSessionRequestMuteUpdate",
|
||||
"T:LibreMetaverse.Messages.Linden.ChatSessionRequestStartConference",
|
||||
@@ -82,6 +87,11 @@ COMPOSED_BASE_TYPES = {
|
||||
"T:LibreMetaverse.Packets.TestMessagePacket",
|
||||
"T:LibreMetaverse.Rendering.Joint",
|
||||
}
|
||||
OPEN_ENUM_IDS = {"T:LibreMetaverse.BakeType"}
|
||||
TRAIT_SUPERTRAITS = {
|
||||
"T:LibreMetaverse.IBakingTextureProvider": "std::any::Any",
|
||||
"T:LibreMetaverse.Appearance.ICurrentOutfitPolicy": "Send + Sync",
|
||||
}
|
||||
CORE_NAMESPACES = (
|
||||
"LibreMetaverse.Http",
|
||||
"LibreMetaverse.Stats",
|
||||
@@ -476,6 +486,21 @@ def render_enum(item: dict, rust_name: str) -> list[str]:
|
||||
underlying = UNDERLYING[item["enum_underlying_type"]]
|
||||
values = [member for member in item["members"] if member["kind"] == "enum_value"]
|
||||
lines = [f"/// C# type: `{item['doc_id']}`."]
|
||||
if item["doc_id"] in OPEN_ENUM_IDS:
|
||||
lines += [
|
||||
"#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]",
|
||||
"#[repr(transparent)]",
|
||||
f"pub struct {rust_name}(pub {underlying});",
|
||||
"#[allow(non_upper_case_globals)]",
|
||||
f"impl {rust_name} {{",
|
||||
]
|
||||
for member in values:
|
||||
lines += [
|
||||
f" /// C# member: `{member['doc_id']}`.",
|
||||
f" pub const {mapping.pascal(member['name'])}: Self = Self({member['value']['value']});",
|
||||
]
|
||||
lines.append("}")
|
||||
return lines
|
||||
if flags_enum(item) or duplicate_enum_values(item):
|
||||
lines += [
|
||||
"#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]",
|
||||
@@ -508,7 +533,7 @@ def render_body(signature: str, member_id: str, error_model: str, asyncness: str
|
||||
if error_model.startswith("Result")
|
||||
else f"libremetaverse_types::unimplemented_api!({json.dumps(member_id)})"
|
||||
)
|
||||
if asyncness == "boxed_future":
|
||||
if asyncness == "boxed_future" or "std::pin::Pin<Box<dyn std::future::Future" in signature:
|
||||
failure = f"Box::pin(async {{ {failure} }})"
|
||||
return f" {signature} {{ {failure} }}"
|
||||
|
||||
@@ -535,7 +560,9 @@ def render_type(item: dict, type_row: dict, member_rows: dict[str, dict[str, str
|
||||
trait = item["kind"] == "interface"
|
||||
lines = [f"/// C# type: `{item['doc_id']}`."]
|
||||
if trait:
|
||||
lines.append(f"pub trait {rust_name}{suffix} {{")
|
||||
supertrait = TRAIT_SUPERTRAITS.get(item["doc_id"])
|
||||
inheritance = f": {supertrait}" if supertrait else ""
|
||||
lines.append(f"pub trait {rust_name}{suffix}{inheritance} {{")
|
||||
else:
|
||||
fields = [member for member in item["members"] if member["kind"] == "field" and not member.get("static")]
|
||||
private_fields = PRIVATE_LAYOUTS.get(item["doc_id"], [])
|
||||
|
||||
Reference in New Issue
Block a user