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"], [])
|
||||
|
||||
@@ -174,6 +174,7 @@ MEMBER_RETURN_OVERRIDES = {
|
||||
),
|
||||
}
|
||||
MEMBER_TYPE_OVERRIDES = {
|
||||
"F:LibreMetaverse.Primitive.NameValues": "Option<Vec<libremetaverse::NameValue>>",
|
||||
"F:LibreMetaverse.Rendering.Face.Weights": (
|
||||
"Option<Vec<libremetaverse::rendering::VertexWeight>>"
|
||||
),
|
||||
@@ -182,6 +183,84 @@ MEMBER_TYPE_OVERRIDES = {
|
||||
),
|
||||
}
|
||||
MEMBER_SIGNATURE_OVERRIDES = {
|
||||
"M:LibreMetaverse.AvatarAppearanceEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.UUID,System.Boolean,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte},System.Byte,System.Int32,LibreMetaverse.AppearanceFlags,System.Int32)": (
|
||||
"pub fn new(sim: Option<libremetaverse::Simulator>, avatar_id: libremetaverse_types::UUID, "
|
||||
"is_trial: bool, default_texture: libremetaverse::PrimitiveTextureEntryFace, face_textures: "
|
||||
"Vec<libremetaverse::PrimitiveTextureEntryFace>, visual_params: Vec<u8>, appearance_version: "
|
||||
"u8, cof_version: i32, appearance_flags: libremetaverse::AppearanceFlags, child_count: i32) "
|
||||
"-> Result<Self, crate::Error>",
|
||||
"optional_owned,owned,owned,owned,owned,owned,owned,owned,owned,owned",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.AddPolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy)": (
|
||||
"pub fn add_policy(&self, policy_to_add: Option<std::sync::Arc<dyn "
|
||||
"libremetaverse::appearance::ICurrentOutfitPolicy>>) -> Result<&Self, crate::Error>",
|
||||
"shared_self,optional_shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.#ctor(LibreMetaverse.GridClient)": (
|
||||
"pub fn new(client: Option<std::sync::Arc<libremetaverse::GridClient>>) -> Result<Self, crate::Error>",
|
||||
"optional_shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.CanAttach(LibreMetaverse.InventoryItem)": (
|
||||
"pub fn can_attach(&self, item: Option<std::sync::Arc<libremetaverse::InventoryItem>>) "
|
||||
"-> Result<bool, crate::Error>",
|
||||
"shared_self,optional_shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.CanDetach(LibreMetaverse.InventoryItem)": (
|
||||
"pub fn can_detach(&self, item: Option<std::sync::Arc<libremetaverse::InventoryItem>>) "
|
||||
"-> Result<bool, crate::Error>",
|
||||
"shared_self,optional_shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.RemovePolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy)": (
|
||||
"pub fn remove_policy(&self, policy_to_remove: Option<std::sync::Arc<dyn "
|
||||
"libremetaverse::appearance::ICurrentOutfitPolicy>>) -> Result<(), crate::Error>",
|
||||
"shared_self,optional_shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken)": (
|
||||
"pub async fn report_item_change(&self, added_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, "
|
||||
"removed_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, cancellation_token: "
|
||||
"Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error>",
|
||||
"shared_self,optional_shared,optional_shared,optional_owned",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.AddPolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy)": (
|
||||
"pub fn add_policy(&self, policy_to_add: std::sync::Arc<dyn "
|
||||
"libremetaverse::appearance::ICurrentOutfitPolicy>) -> Result<std::sync::Arc<dyn "
|
||||
"libremetaverse::appearance::ICurrentOutfitPolicy>, crate::Error>",
|
||||
"shared_self,shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.RemovePolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy)": (
|
||||
"pub fn remove_policy(&self, policy_to_remove: std::sync::Arc<dyn "
|
||||
"libremetaverse::appearance::ICurrentOutfitPolicy>) -> Result<(), crate::Error>",
|
||||
"shared_self,shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.CurrentOutfitFolder.ResolveInventoryLink(LibreMetaverse.InventoryItem)": (
|
||||
"pub fn resolve_inventory_link(&self, item_link: std::sync::Arc<libremetaverse::InventoryItem>) "
|
||||
"-> Result<Option<std::sync::Arc<libremetaverse::InventoryItem>>, crate::Error>",
|
||||
"shared_self,shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.CanAttach(LibreMetaverse.InventoryItem)": (
|
||||
"pub fn can_attach(&self, item: Option<std::sync::Arc<libremetaverse::InventoryItem>>) "
|
||||
"-> Result<bool, crate::Error>",
|
||||
"shared_self,optional_shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.CanDetach(LibreMetaverse.InventoryItem)": (
|
||||
"pub fn can_detach(&self, item: Option<std::sync::Arc<libremetaverse::InventoryItem>>) "
|
||||
"-> Result<bool, crate::Error>",
|
||||
"shared_self,optional_shared",
|
||||
),
|
||||
"M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken)": (
|
||||
"pub fn report_item_change(&self, added_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, "
|
||||
"removed_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, cancellation_token: "
|
||||
"Option<libremetaverse_types::compat::CancellationToken>) -> std::pin::Pin<Box<dyn "
|
||||
"std::future::Future<Output = Result<(), crate::Error>> + Send + '_>>",
|
||||
"shared_self,optional_shared,optional_shared,optional_owned",
|
||||
),
|
||||
"M:LibreMetaverse.InventoryManager.CreateLinksAsync(LibreMetaverse.UUID,System.Collections.Generic.IEnumerable{System.ValueTuple{LibreMetaverse.InventoryBase,System.String}},System.Action{System.Boolean},System.Threading.CancellationToken)": (
|
||||
"pub async fn create_links(&self, folder_id: libremetaverse_types::UUID, links_to_create: "
|
||||
"Box<dyn Iterator<Item = (libremetaverse::InventoryItem, String)>>, callback: Option<Box<dyn "
|
||||
"Fn(bool) + Send + Sync>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) "
|
||||
"-> Result<(), crate::Error>",
|
||||
"shared_self,owned,owned,optional_owned,optional_owned",
|
||||
),
|
||||
"M:LibreMetaverse.Animesh.AnimationTrack.EvaluatePose(System.Collections.Generic.Dictionary{System.String,LibreMetaverse.Animesh.JointPose})": (
|
||||
"pub fn evaluate_pose(&self, pose: &mut std::collections::HashMap<String, "
|
||||
"libremetaverse::animesh::JointPose>) -> Result<(), crate::Error>",
|
||||
@@ -273,6 +352,12 @@ MEMBER_SIGNATURE_OVERRIDES = {
|
||||
),
|
||||
}
|
||||
PROPERTY_SIGNATURE_OVERRIDES = {
|
||||
"P:LibreMetaverse.AppearanceManager.TextureProvider": (
|
||||
"pub fn texture_provider(&self) -> std::sync::Arc<dyn libremetaverse::IBakingTextureProvider> ; "
|
||||
"pub fn set_texture_provider(&mut self, value: std::sync::Arc<dyn "
|
||||
"libremetaverse::IBakingTextureProvider>)",
|
||||
"shared_or_mutable_self",
|
||||
),
|
||||
"P:LibreMetaverse.Rendering.Joint.bone": (
|
||||
"pub fn bone(&self) -> Option<Vec<libremetaverse::rendering::Joint>> ; "
|
||||
"pub fn set_bone(&mut self, value: Option<Vec<libremetaverse::rendering::Joint>>)",
|
||||
@@ -706,6 +791,8 @@ def method_receiver(owner: dict, item: dict) -> tuple[str, str]:
|
||||
return "&mut self", "mutable_self"
|
||||
if owner["doc_id"] == "T:LibreMetaverse.AppearanceManager" and item["name"] == "UpdateLastReceivedCOFVersion":
|
||||
return "&mut self", "mutable_self"
|
||||
if owner["doc_id"] == "T:LibreMetaverse.Imaging.Baker" and item["name"] in {"AddTexture", "Bake"}:
|
||||
return "&mut self", "mutable_self"
|
||||
if owner["doc_id"] == "T:LibreMetaverse.PrimMesher.PrimMesh" and item["name"] in {
|
||||
"AddPos",
|
||||
"AddRot",
|
||||
|
||||
Reference in New Issue
Block a user