Implement ManagedImage and codec abstraction (#38)

This commit is contained in:
2026-08-09 02:11:02 +00:00
parent d980692933
commit 2c806d80ff
9 changed files with 850 additions and 92 deletions

View File

@@ -38,6 +38,9 @@ TARGETS = {
# implementations. The generated module keeps catalog markers and re-exports
# the hand-written type so coverage remains deterministic.
NATIVE_TYPES = {
"T:LibreMetaverse.Imaging.ITextureCodec": "crate::managed_image::ITextureCodec",
"T:LibreMetaverse.Imaging.ManagedImage": "crate::managed_image::ManagedImage",
"T:LibreMetaverse.Imaging.ManagedImage.ImageChannels": "crate::managed_image::ManagedImageImageChannels",
"T:LibreMetaverse.StructuredData.OSD": "crate::model::OSD",
"T:LibreMetaverse.StructuredData.OSDArray": "crate::model::OSDArray",
"T:LibreMetaverse.StructuredData.OSDBinary": "crate::model::OSDBinary",
@@ -507,7 +510,6 @@ PRIVATE_LAYOUTS = {
"T:LibreMetaverse.StructuredData.OSDString": [("value", "String")],
"T:LibreMetaverse.StructuredData.OSDUUID": [("value", "libremetaverse_types::UUID")],
"T:LibreMetaverse.StructuredData.OSDUri": [("value", "libremetaverse_types::compat::Uri")],
"T:LibreMetaverse.Imaging.ManagedImage": [("data", "Vec<u8>")],
}
VALUE_DERIVES = {
"T:LibreMetaverse.Matrix4": "Clone, Copy, Debug",
@@ -838,6 +840,11 @@ def render_type(item: dict, type_row: dict, member_rows: dict[str, dict[str, str
base, arguments, _ = mapping.type_parts(interface)
if base not in mapper.interfaces or not base.startswith("LibreMetaverse."):
continue
# Native traits can have required methods. Their concrete adapters
# provide explicit implementations beside the adapter code instead
# of receiving an invalid empty generated impl.
if f"T:{base}" in NATIVE_TYPES:
continue
mapped_arguments = [mapper.type(argument, None, set(names)) for argument in arguments]
trait_path = mapper.resolved[base] + generic_suffix(mapped_arguments)
lines.append(f"impl{suffix} {trait_path} for {rust_name}{suffix} {{}}")