Implement enum and conversion compatibility

This commit is contained in:
2026-08-08 23:22:06 +00:00
parent 66997128e7
commit 28bd5a0296
16 changed files with 1943 additions and 767 deletions

View File

@@ -40,6 +40,8 @@ TARGETS = {
NATIVE_TYPES = {
"T:LibreMetaverse.Color4": "crate::color4::Color4",
"T:LibreMetaverse.CRC32": "crate::crc32::CRC32",
"T:LibreMetaverse.EnumInfoAttribute": "crate::enum_compat::EnumInfoAttribute",
"T:LibreMetaverse.EnumInfoExtensions": "crate::enum_compat::EnumInfoExtensions",
"T:LibreMetaverse.Matrix4": "crate::geometry::Matrix4",
"T:LibreMetaverse.Quaternion": "crate::geometry::Quaternion",
"T:LibreMetaverse.Ray": "crate::vectors::Ray",
@@ -48,6 +50,7 @@ NATIVE_TYPES = {
"T:LibreMetaverse.Vector3": "crate::vectors::Vector3",
"T:LibreMetaverse.Vector3d": "crate::vectors::Vector3d",
"T:LibreMetaverse.Vector4": "crate::vectors::Vector4",
"T:LibreMetaverse.Utils": "crate::utils::Utils",
}
NATIVE_MEMBER_BODIES = {
@@ -453,6 +456,11 @@ def render_compile_fixture(
row = member_rows[member["doc_id"]]
method_names = generic_names(member)
parameters = [*owner_names, *generic_declarations(member, mapper, owner_names)]
if member["doc_id"] == "M:LibreMetaverse.Utils.EnumTryParse``1(System.String,``0@)":
parameters = [
*owner_names,
"T: libremetaverse_types::EnumValueMetadata",
]
if trait:
parameters.append(f"__Probe: {owner_type}")
declaration = generic_suffix(parameters)
@@ -838,7 +846,10 @@ def coverage_report(catalog: dict, coverage: dict[str, tuple[int, int, bool]]) -
if complete and (types, members) != (got_types, got_members):
raise ValueError(f"incomplete generated slice for {name}")
native_type_ids = {
item["doc_id"] for item in assembly["types"] if item["doc_id"] in NATIVE_TYPES
item["doc_id"]
for item in assembly["types"]
if item["doc_id"] in NATIVE_TYPES
or (name == "LibreMetaverse.Types" and item["kind"] == "enum")
}
native_member_ids = {
member["doc_id"]