Implement Types collections and token bucket
This commit is contained in:
@@ -38,13 +38,23 @@ TARGETS = {
|
||||
# implementations. The generated module keeps catalog markers and re-exports
|
||||
# the hand-written type so coverage remains deterministic.
|
||||
NATIVE_TYPES = {
|
||||
"T:LibreMetaverse.CacheDictionary`2": "crate::collections::CacheDictionary",
|
||||
"T:LibreMetaverse.CacheDictionary`2.CacheDictionaryEnumerator": "crate::collections::CacheDictionaryCacheDictionaryEnumerator",
|
||||
"T:LibreMetaverse.Color4": "crate::color4::Color4",
|
||||
"T:LibreMetaverse.CRC32": "crate::crc32::CRC32",
|
||||
"T:LibreMetaverse.DoubleDictionary`3": "crate::collections::DoubleDictionary",
|
||||
"T:LibreMetaverse.EmptyRemovalStrategy`1": "crate::collections::EmptyRemovalStrategy",
|
||||
"T:LibreMetaverse.EnumInfoAttribute": "crate::enum_compat::EnumInfoAttribute",
|
||||
"T:LibreMetaverse.EnumInfoExtensions": "crate::enum_compat::EnumInfoExtensions",
|
||||
"T:LibreMetaverse.ExpiringCache`2": "crate::collections::ExpiringCache",
|
||||
"T:LibreMetaverse.ICacheDictionaryRemovalStrategy`1": "crate::collections::ICacheDictionaryRemovalStrategy",
|
||||
"T:LibreMetaverse.LruRemovalStrategy`1": "crate::collections::LruRemovalStrategy",
|
||||
"T:LibreMetaverse.Matrix4": "crate::geometry::Matrix4",
|
||||
"T:LibreMetaverse.MruRemovalStrategy`1": "crate::collections::MruRemovalStrategy",
|
||||
"T:LibreMetaverse.MultiValueDictionary`2": "crate::collections::MultiValueDictionary",
|
||||
"T:LibreMetaverse.Quaternion": "crate::geometry::Quaternion",
|
||||
"T:LibreMetaverse.Ray": "crate::vectors::Ray",
|
||||
"T:LibreMetaverse.TokenBucket": "crate::collections::TokenBucket",
|
||||
"T:LibreMetaverse.UUID": "crate::uuid::UUID",
|
||||
"T:LibreMetaverse.Vector2": "crate::vectors::Vector2",
|
||||
"T:LibreMetaverse.Vector3": "crate::vectors::Vector3",
|
||||
@@ -64,6 +74,33 @@ NATIVE_MEMBER_BODIES = {
|
||||
"crate::byte_order::write_double_little_endian(dest, pos, value)",
|
||||
}
|
||||
|
||||
NATIVE_OWNER_BOUNDS = {
|
||||
"T:LibreMetaverse.CacheDictionary`2": {
|
||||
"TKey": "TKey: Clone + PartialEq",
|
||||
"TValue": "TValue: Clone + PartialEq",
|
||||
},
|
||||
"T:LibreMetaverse.CacheDictionary`2.CacheDictionaryEnumerator": {
|
||||
"TKey": "TKey: Clone",
|
||||
"TValue": "TValue: Clone",
|
||||
},
|
||||
"T:LibreMetaverse.DoubleDictionary`3": {
|
||||
"TKey1": "TKey1: Clone + PartialEq",
|
||||
"TKey2": "TKey2: Clone + PartialEq",
|
||||
"TValue": "TValue: Clone + PartialEq",
|
||||
},
|
||||
"T:LibreMetaverse.EmptyRemovalStrategy`1": {"TKey": "TKey: Clone + PartialEq + Send"},
|
||||
"T:LibreMetaverse.ExpiringCache`2": {
|
||||
"TKey": "TKey: Clone + PartialEq",
|
||||
"TValue": "TValue: Clone",
|
||||
},
|
||||
"T:LibreMetaverse.LruRemovalStrategy`1": {"TKey": "TKey: Clone + PartialEq + Send"},
|
||||
"T:LibreMetaverse.MruRemovalStrategy`1": {"TKey": "TKey: Clone + PartialEq + Send"},
|
||||
"T:LibreMetaverse.MultiValueDictionary`2": {
|
||||
"TKey": "TKey: Clone + PartialEq",
|
||||
"TValue": "TValue: Clone + PartialEq",
|
||||
},
|
||||
}
|
||||
|
||||
MAIN_TARGET = ROOT / "crates/libremetaverse/src/generated.rs"
|
||||
WIRE_NAMESPACES = (
|
||||
"LibreMetaverse.Assets",
|
||||
@@ -455,7 +492,11 @@ def render_compile_fixture(
|
||||
member_index += 1
|
||||
row = member_rows[member["doc_id"]]
|
||||
method_names = generic_names(member)
|
||||
parameters = [*owner_names, *generic_declarations(member, mapper, owner_names)]
|
||||
owner_bounds = NATIVE_OWNER_BOUNDS.get(item["doc_id"], {})
|
||||
parameters = [
|
||||
*(owner_bounds.get(name, name) for name in owner_names),
|
||||
*generic_declarations(member, mapper, owner_names),
|
||||
]
|
||||
if member["doc_id"] == "M:LibreMetaverse.Utils.EnumTryParse``1(System.String,``0@)":
|
||||
parameters = [
|
||||
*owner_names,
|
||||
@@ -858,10 +899,16 @@ def coverage_report(catalog: dict, coverage: dict[str, tuple[int, int, bool]]) -
|
||||
if item["doc_id"] in native_type_ids or member["doc_id"] in NATIVE_MEMBER_BODIES
|
||||
}
|
||||
if native_type_ids or native_member_ids:
|
||||
status = (
|
||||
f"native implementation: {len(native_type_ids):,} types / "
|
||||
f"{len(native_member_ids):,} members; remaining surface is callable failure-only shims"
|
||||
)
|
||||
if (len(native_type_ids), len(native_member_ids)) == (types, members):
|
||||
status = (
|
||||
f"native implementation: {len(native_type_ids):,} types / "
|
||||
f"{len(native_member_ids):,} members; no generated shims remain"
|
||||
)
|
||||
else:
|
||||
status = (
|
||||
f"native implementation: {len(native_type_ids):,} types / "
|
||||
f"{len(native_member_ids):,} members; remaining surface is callable failure-only shims"
|
||||
)
|
||||
else:
|
||||
status = "callable failure-only shim" if complete else f"partial callable shim ({got_types:,} types / {got_members:,} members)"
|
||||
total_types += got_types
|
||||
|
||||
@@ -189,10 +189,22 @@ MEMBER_TYPE_OVERRIDES = {
|
||||
),
|
||||
}
|
||||
MEMBER_SIGNATURE_OVERRIDES = {
|
||||
"M:LibreMetaverse.CacheDictionary`2.CopyTo(System.Collections.Generic.KeyValuePair{`0,`1}[],System.Int32)": (
|
||||
"pub fn copy_to(&self, array: &mut [(TKey, Option<TValue>)], array_index: i32) -> Result<(), crate::Error>",
|
||||
"shared_self,mutable_borrow,owned",
|
||||
),
|
||||
"M:LibreMetaverse.Utils.DoubleToBytes(System.Double,System.Byte[],System.Int32)": (
|
||||
"pub fn double_to_bytes_with_double_bytes_int32(value: f64, dest: &mut [u8], pos: i32) -> Result<(), crate::Error>",
|
||||
"owned,mutable_borrow,owned",
|
||||
),
|
||||
"M:LibreMetaverse.ExpiringCache`2.CopyTo(System.Array,System.Int32)": (
|
||||
"pub fn copy_to(&self, array: &mut [(TKey, Option<TValue>)], start_index: i32) -> Result<(), crate::Error>",
|
||||
"shared_self,mutable_borrow,owned",
|
||||
),
|
||||
"P:LibreMetaverse.ExpiringCache`2.Item(`0)": (
|
||||
"pub fn item(&self, key: TKey) -> Option<TValue>",
|
||||
"shared_self,owned",
|
||||
),
|
||||
"M:LibreMetaverse.Utils.EnumTryParse``1(System.String,``0@)": (
|
||||
"pub fn enum_try_parse<T: crate::EnumValueMetadata>(str_type: String, result: &mut Option<T>) -> Result<bool, crate::Error>",
|
||||
"owned,mutable_borrow",
|
||||
|
||||
Reference in New Issue
Block a user