Generate wire and data model API shims

This commit is contained in:
2026-08-08 12:18:28 +02:00
parent e2889d758d
commit 7086af9a6f
13 changed files with 153952 additions and 9018 deletions

View File

@@ -590,6 +590,8 @@ def member_signature(mapper: Mapper, owner: dict, item: dict, rust_name: str) ->
if kind == "enum_value":
signature = f"{rust_name}: {value_type}"
elif kind == "constant":
if item["type"] == "System.String":
value_type = "&'static str"
signature = f"pub const {rust_name}: {value_type}"
elif item.get("static"):
signature = f"pub fn {rust_name}() -> {value_type}"
@@ -665,6 +667,16 @@ def build_member_rows(catalog: dict, mapper: Mapper) -> list[dict[str, str]]:
for owner in assembly["types"]:
_, module, owner_path = declared_type_path(assembly_name, owner)
groups = Counter(member_base_name(member) for member in owner["members"])
synthetic_names = {
f"set_{member_base_name(member)}"
for member in owner["members"]
if member["kind"] in {"property", "indexer"}
and any(accessor["kind"] == "set" for accessor in member.get("accessors", []))
} | {
f"subscribe_{member_base_name(member)}"
for member in owner["members"]
if member["kind"] == "event"
}
enum_values = [member.get("value", {}).get("value") for member in owner["members"] if member["kind"] == "enum_value"]
enum_constants = owner["kind"] == "enum" and (
any(attribute["type"] == "System.FlagsAttribute" for attribute in owner.get("attributes", []))
@@ -677,7 +689,7 @@ def build_member_rows(catalog: dict, mapper: Mapper) -> list[dict[str, str]]:
base_name = snake(item["name"]).upper()
rust_name = base_name
decision = "direct_snake_case"
if groups[base_name] > 1:
if groups[base_name] > 1 or (item["kind"] == "method" and base_name in synthetic_names):
suffixes = []
for parameter in item.get("parameters", []):
suffixes.append(parameter_slug(parameter["type"]))