From 43bcf3f26fef0bf3c5a959bf450b5f45fc3e36a3 Mon Sep 17 00:00:00 2001 From: Ryth Azhur Date: Sun, 17 May 2026 18:26:32 -0400 Subject: [PATCH] Mizan codegen substrate: Rust kernel + Rust codegen binary, JS generator deleted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Mizan codegen substrate moves off JavaScript template-literal emission onto a compiled Rust binary that consumes the same OpenAPI + x-mizan-* IR the JS substrate consumed. Three structural wins fall out of one move: 1. Moat closes. The codegen logic (how `affects` becomes auto-invalidation, how named contexts collapse onto bundled fetches, how the registry-to- Provider mapping is shaped) ships compiled instead of as source bytes in every consumer's node_modules. 2. Pattern F (lines.push append-walls) becomes structurally unauthorable. The emit substrate is askama templates in templates//*.j2 — actual target-language files with {{ ... }} substitution markers, syntax-highlighted natively, type-checked against the render context structs at compile time. The Rust emit modules build typed render contexts and call .render(); no string-builder surface exists. 3. OpenAPI `default`-bearing fields now emit as non-optional in TS / Python / Rust — the server always populates them, so consumer code reads them without nullable checks. Surfaced by Blazr's typecheck on regeneration. Layout: frontends/mizan-rust/ — Rust port of @mizan/base; #[cfg(feature="pyo3")] exposes PyMizanClient for the Python target. protocol/mizan-codegen/ — codegen binary source + askama templates. protocol/mizan-generate/ — npm-package shim. bin/launcher.mjs dispatches to the platform-appropriate prebuilt binary. Old generator/ JS tree deleted. tests/rust/ — wire-parity drivers. drive_kernel exercises raw client.call() / fetch_context(); drive_emitted exercises the typed crate the codegen emits. tests/afi/afi_codegen_app.py — codegen entrypoint module (imports + registers). backends/mizan-fastapi/.../schema.py — adds outputNullable so the Rust codegen can wrap T | None responses in Option. Verification: - 20 mizan-codegen tests green (IR deserialization, byte-equivalent parity vs JS baseline for stage1/rust/python/react/vue/svelte, structural test for channels). - tests/rust/run_wire_parity.py — 12/12 probes green via the Rust binary driving the FastAPI fixture end-to-end. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../mizan-fastapi/src/mizan_fastapi/schema.py | 36 +- .../mizan-python/src/mizan_core/type_utils.py | 104 + frontends/mizan-rust/.gitignore | 1 + frontends/mizan-rust/Cargo.lock | 1697 +++++++++++++++++ frontends/mizan-rust/Cargo.toml | 24 + frontends/mizan-rust/src/client.rs | 195 ++ frontends/mizan-rust/src/context.rs | 365 ++++ frontends/mizan-rust/src/error.rs | 121 ++ frontends/mizan-rust/src/invalidation.rs | 148 ++ frontends/mizan-rust/src/lib.rs | 28 + frontends/mizan-rust/src/merge.rs | 107 ++ frontends/mizan-rust/src/pyo3_bridge.rs | 252 +++ frontends/mizan-rust/src/transport.rs | 153 ++ protocol/mizan-codegen/.gitignore | 1 + protocol/mizan-codegen/Cargo.lock | 470 +++++ protocol/mizan-codegen/Cargo.toml | 22 + protocol/mizan-codegen/src/config.rs | 119 ++ protocol/mizan-codegen/src/emit/casing.rs | 137 ++ protocol/mizan-codegen/src/emit/channels.rs | 163 ++ protocol/mizan-codegen/src/emit/mod.rs | 67 + protocol/mizan-codegen/src/emit/python.rs | 330 ++++ protocol/mizan-codegen/src/emit/react.rs | 142 ++ protocol/mizan-codegen/src/emit/rust.rs | 474 +++++ protocol/mizan-codegen/src/emit/stage1.rs | 369 ++++ protocol/mizan-codegen/src/emit/svelte.rs | 78 + protocol/mizan-codegen/src/emit/vue.rs | 107 ++ protocol/mizan-codegen/src/fetch.rs | 149 ++ protocol/mizan-codegen/src/ir.rs | 248 +++ protocol/mizan-codegen/src/lib.rs | 10 + protocol/mizan-codegen/src/main.rs | 164 ++ .../templates/channels/channels.hooks.tsx.j2 | 26 + .../templates/channels/channels.ts.j2 | 26 + .../templates/python/__init__.py.j2 | 5 + .../templates/python/client.py.j2 | 39 + .../templates/python/types.py.j2 | 10 + .../templates/react/react.tsx.j2 | 180 ++ .../templates/rust/Cargo.toml.j2 | 11 + .../mizan-codegen/templates/rust/call.rs.j2 | 17 + .../templates/rust/context.rs.j2 | 37 + .../mizan-codegen/templates/rust/lib.rs.j2 | 9 + .../mizan-codegen/templates/rust/mod.rs.j2 | 5 + .../mizan-codegen/templates/rust/types.rs.j2 | 8 + .../mizan-codegen/templates/stage1/call.ts.j2 | 17 + .../templates/stage1/context.ts.j2 | 28 + .../templates/stage1/index.ts.j2 | 20 + .../templates/svelte/svelte.ts.j2 | 31 + .../mizan-codegen/templates/vue/vue.ts.j2 | 65 + .../mizan-codegen/tests/channels_smoke.rs | 80 + .../tests/fixtures/afi_schema.json | 685 +++++++ .../tests/fixtures/channels_schema.json | 55 + .../tests/fixtures/js_python/__init__.py | 4 + .../tests/fixtures/js_python/client.py | 67 + .../tests/fixtures/js_python/types.py | 66 + .../tests/fixtures/js_react/react.tsx | 157 ++ .../tests/fixtures/js_rust/Cargo.toml | 10 + .../fixtures/js_rust/src/contexts/mod.rs | 3 + .../fixtures/js_rust/src/contexts/user.rs | 29 + .../fixtures/js_rust/src/functions/echo.rs | 14 + .../js_rust/src/functions/find_user.rs | 14 + .../fixtures/js_rust/src/functions/mod.rs | 6 + .../js_rust/src/functions/rename_user.rs | 14 + .../fixtures/js_rust/src/functions/whoami.rs | 14 + .../tests/fixtures/js_rust/src/lib.rs | 8 + .../fixtures/js_rust/src/mutations/mod.rs | 3 + .../js_rust/src/mutations/update_profile.rs | 14 + .../tests/fixtures/js_rust/src/types.rs | 98 + .../tests/fixtures/js_stage1/contexts/user.ts | 18 + .../fixtures/js_stage1/functions/echo.ts | 9 + .../fixtures/js_stage1/functions/findUser.ts | 9 + .../js_stage1/functions/renameUser.ts | 9 + .../fixtures/js_stage1/functions/whoami.ts | 9 + .../tests/fixtures/js_stage1/index.ts | 11 + .../js_stage1/mutations/updateProfile.ts | 9 + .../tests/fixtures/js_svelte/svelte.ts | 29 + .../tests/fixtures/js_vue/vue.ts | 96 + .../mizan-codegen/tests/ir_deserialization.rs | 103 + protocol/mizan-codegen/tests/python_parity.rs | 75 + protocol/mizan-codegen/tests/react_parity.rs | 54 + protocol/mizan-codegen/tests/rust_parity.rs | 96 + protocol/mizan-codegen/tests/stage1_parity.rs | 143 ++ .../mizan-codegen/tests/vue_svelte_parity.rs | 66 + protocol/mizan-generate/bin/launcher.mjs | 41 + .../bin/mizan-generate-linux-x64 | Bin 0 -> 2379408 bytes protocol/mizan-generate/generator/cli.mjs | 235 --- .../generator/lib/adapters/react.mjs | 298 --- .../generator/lib/adapters/svelte.mjs | 78 - .../generator/lib/adapters/vue.mjs | 104 - .../mizan-generate/generator/lib/channels.mjs | 155 -- .../mizan-generate/generator/lib/fetch.mjs | 117 -- .../mizan-generate/generator/lib/index.mjs | 164 -- .../mizan-generate/generator/lib/mizan.mjs | 980 ---------- .../mizan-generate/generator/lib/stage1.mjs | 198 -- protocol/mizan-generate/package.json | 12 +- tests/afi/afi_codegen_app.py | 12 + tests/rust/.gitignore | 1 + tests/rust/Cargo.lock | 1595 ++++++++++++++++ tests/rust/Cargo.toml | 20 + tests/rust/fixture_client/Cargo.toml | 10 + tests/rust/fixture_client/src/contexts/mod.rs | 3 + .../rust/fixture_client/src/contexts/user.rs | 29 + .../rust/fixture_client/src/functions/echo.rs | 14 + .../fixture_client/src/functions/find_user.rs | 14 + .../rust/fixture_client/src/functions/mod.rs | 6 + .../src/functions/rename_user.rs | 14 + .../fixture_client/src/functions/whoami.rs | 14 + tests/rust/fixture_client/src/lib.rs | 8 + .../rust/fixture_client/src/mutations/mod.rs | 3 + .../src/mutations/update_profile.rs | 14 + tests/rust/fixture_client/src/types.rs | 98 + tests/rust/mizan.toml | 11 + tests/rust/regen_fixture_client.py | 40 + tests/rust/run_wire_parity.py | 103 + tests/rust/src/drive_emitted.rs | 75 + tests/rust/src/drive_kernel.rs | 74 + 114 files changed, 11090 insertions(+), 2342 deletions(-) create mode 100644 cores/mizan-python/src/mizan_core/type_utils.py create mode 100644 frontends/mizan-rust/.gitignore create mode 100644 frontends/mizan-rust/Cargo.lock create mode 100644 frontends/mizan-rust/Cargo.toml create mode 100644 frontends/mizan-rust/src/client.rs create mode 100644 frontends/mizan-rust/src/context.rs create mode 100644 frontends/mizan-rust/src/error.rs create mode 100644 frontends/mizan-rust/src/invalidation.rs create mode 100644 frontends/mizan-rust/src/lib.rs create mode 100644 frontends/mizan-rust/src/merge.rs create mode 100644 frontends/mizan-rust/src/pyo3_bridge.rs create mode 100644 frontends/mizan-rust/src/transport.rs create mode 100644 protocol/mizan-codegen/.gitignore create mode 100644 protocol/mizan-codegen/Cargo.lock create mode 100644 protocol/mizan-codegen/Cargo.toml create mode 100644 protocol/mizan-codegen/src/config.rs create mode 100644 protocol/mizan-codegen/src/emit/casing.rs create mode 100644 protocol/mizan-codegen/src/emit/channels.rs create mode 100644 protocol/mizan-codegen/src/emit/mod.rs create mode 100644 protocol/mizan-codegen/src/emit/python.rs create mode 100644 protocol/mizan-codegen/src/emit/react.rs create mode 100644 protocol/mizan-codegen/src/emit/rust.rs create mode 100644 protocol/mizan-codegen/src/emit/stage1.rs create mode 100644 protocol/mizan-codegen/src/emit/svelte.rs create mode 100644 protocol/mizan-codegen/src/emit/vue.rs create mode 100644 protocol/mizan-codegen/src/fetch.rs create mode 100644 protocol/mizan-codegen/src/ir.rs create mode 100644 protocol/mizan-codegen/src/lib.rs create mode 100644 protocol/mizan-codegen/src/main.rs create mode 100644 protocol/mizan-codegen/templates/channels/channels.hooks.tsx.j2 create mode 100644 protocol/mizan-codegen/templates/channels/channels.ts.j2 create mode 100644 protocol/mizan-codegen/templates/python/__init__.py.j2 create mode 100644 protocol/mizan-codegen/templates/python/client.py.j2 create mode 100644 protocol/mizan-codegen/templates/python/types.py.j2 create mode 100644 protocol/mizan-codegen/templates/react/react.tsx.j2 create mode 100644 protocol/mizan-codegen/templates/rust/Cargo.toml.j2 create mode 100644 protocol/mizan-codegen/templates/rust/call.rs.j2 create mode 100644 protocol/mizan-codegen/templates/rust/context.rs.j2 create mode 100644 protocol/mizan-codegen/templates/rust/lib.rs.j2 create mode 100644 protocol/mizan-codegen/templates/rust/mod.rs.j2 create mode 100644 protocol/mizan-codegen/templates/rust/types.rs.j2 create mode 100644 protocol/mizan-codegen/templates/stage1/call.ts.j2 create mode 100644 protocol/mizan-codegen/templates/stage1/context.ts.j2 create mode 100644 protocol/mizan-codegen/templates/stage1/index.ts.j2 create mode 100644 protocol/mizan-codegen/templates/svelte/svelte.ts.j2 create mode 100644 protocol/mizan-codegen/templates/vue/vue.ts.j2 create mode 100644 protocol/mizan-codegen/tests/channels_smoke.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/afi_schema.json create mode 100644 protocol/mizan-codegen/tests/fixtures/channels_schema.json create mode 100644 protocol/mizan-codegen/tests/fixtures/js_python/__init__.py create mode 100644 protocol/mizan-codegen/tests/fixtures/js_python/client.py create mode 100644 protocol/mizan-codegen/tests/fixtures/js_python/types.py create mode 100644 protocol/mizan-codegen/tests/fixtures/js_react/react.tsx create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/Cargo.toml create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/contexts/mod.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/contexts/user.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/echo.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/find_user.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/mod.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/rename_user.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/whoami.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/lib.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/mutations/mod.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/mutations/update_profile.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_rust/src/types.rs create mode 100644 protocol/mizan-codegen/tests/fixtures/js_stage1/contexts/user.ts create mode 100644 protocol/mizan-codegen/tests/fixtures/js_stage1/functions/echo.ts create mode 100644 protocol/mizan-codegen/tests/fixtures/js_stage1/functions/findUser.ts create mode 100644 protocol/mizan-codegen/tests/fixtures/js_stage1/functions/renameUser.ts create mode 100644 protocol/mizan-codegen/tests/fixtures/js_stage1/functions/whoami.ts create mode 100644 protocol/mizan-codegen/tests/fixtures/js_stage1/index.ts create mode 100644 protocol/mizan-codegen/tests/fixtures/js_stage1/mutations/updateProfile.ts create mode 100644 protocol/mizan-codegen/tests/fixtures/js_svelte/svelte.ts create mode 100644 protocol/mizan-codegen/tests/fixtures/js_vue/vue.ts create mode 100644 protocol/mizan-codegen/tests/ir_deserialization.rs create mode 100644 protocol/mizan-codegen/tests/python_parity.rs create mode 100644 protocol/mizan-codegen/tests/react_parity.rs create mode 100644 protocol/mizan-codegen/tests/rust_parity.rs create mode 100644 protocol/mizan-codegen/tests/stage1_parity.rs create mode 100644 protocol/mizan-codegen/tests/vue_svelte_parity.rs create mode 100755 protocol/mizan-generate/bin/launcher.mjs create mode 100755 protocol/mizan-generate/bin/mizan-generate-linux-x64 delete mode 100755 protocol/mizan-generate/generator/cli.mjs delete mode 100644 protocol/mizan-generate/generator/lib/adapters/react.mjs delete mode 100644 protocol/mizan-generate/generator/lib/adapters/svelte.mjs delete mode 100644 protocol/mizan-generate/generator/lib/adapters/vue.mjs delete mode 100644 protocol/mizan-generate/generator/lib/channels.mjs delete mode 100644 protocol/mizan-generate/generator/lib/fetch.mjs delete mode 100644 protocol/mizan-generate/generator/lib/index.mjs delete mode 100644 protocol/mizan-generate/generator/lib/mizan.mjs delete mode 100644 protocol/mizan-generate/generator/lib/stage1.mjs create mode 100644 tests/afi/afi_codegen_app.py create mode 100644 tests/rust/.gitignore create mode 100644 tests/rust/Cargo.lock create mode 100644 tests/rust/Cargo.toml create mode 100644 tests/rust/fixture_client/Cargo.toml create mode 100644 tests/rust/fixture_client/src/contexts/mod.rs create mode 100644 tests/rust/fixture_client/src/contexts/user.rs create mode 100644 tests/rust/fixture_client/src/functions/echo.rs create mode 100644 tests/rust/fixture_client/src/functions/find_user.rs create mode 100644 tests/rust/fixture_client/src/functions/mod.rs create mode 100644 tests/rust/fixture_client/src/functions/rename_user.rs create mode 100644 tests/rust/fixture_client/src/functions/whoami.rs create mode 100644 tests/rust/fixture_client/src/lib.rs create mode 100644 tests/rust/fixture_client/src/mutations/mod.rs create mode 100644 tests/rust/fixture_client/src/mutations/update_profile.rs create mode 100644 tests/rust/fixture_client/src/types.rs create mode 100644 tests/rust/mizan.toml create mode 100644 tests/rust/regen_fixture_client.py create mode 100644 tests/rust/run_wire_parity.py create mode 100644 tests/rust/src/drive_emitted.rs create mode 100644 tests/rust/src/drive_kernel.rs diff --git a/backends/mizan-fastapi/src/mizan_fastapi/schema.py b/backends/mizan-fastapi/src/mizan_fastapi/schema.py index dc4c041..34b480d 100644 --- a/backends/mizan-fastapi/src/mizan_fastapi/schema.py +++ b/backends/mizan-fastapi/src/mizan_fastapi/schema.py @@ -17,9 +17,10 @@ from typing import Any from fastapi import FastAPI from fastapi.openapi.utils import get_openapi -from pydantic import BaseModel, create_model +from pydantic import BaseModel, RootModel, create_model from mizan_core.registry import get_all_functions, get_context_groups, get_function +from mizan_core.type_utils import extract_list_element, extract_optional __all__ = ["build_schema", "snake_to_camel"] @@ -62,12 +63,20 @@ def _function_metadata(name: str, fn_class: Any) -> dict[str, Any]: input_cls = getattr(fn_class, "Input", None) has_input = _has_input(input_cls) + output_cls = getattr(fn_class, "Output", None) + _, output_nullable = extract_optional(output_cls) if output_cls is not None else (None, False) + entry: dict[str, Any] = { "name": name, "camelName": camel, "hasInput": has_input, "inputType": f"{camel}Input" if has_input else None, "outputType": f"{camel}Output", + # Nullability of the response model — Pydantic `T | None` returns. Carried + # on the function entry rather than the schema class because OpenAPI emits + # `anyOf: [{$ref}, {type:null}]` at the response level, which strict + # deserializers (Rust serde) won't decode as Option without this hint. + "outputNullable": output_nullable, "transport": "websocket" if meta.get("websocket") else "http", "isContext": meta.get("context", False), # Form metadata — always emitted so the schema shape matches Django's, @@ -79,6 +88,8 @@ def _function_metadata(name: str, fn_class: Any) -> dict[str, Any]: if meta.get("affects"): entry["affects"] = meta["affects"] + if meta.get("merge"): + entry["merge"] = meta["merge"] return entry @@ -154,13 +165,28 @@ def build_schema() -> dict[str, Any]: input_type_name = f"{camel}Input" if has_input else None output_type_name = f"{camel}Output" + # Strip Optional so the rename gets a concrete base — nullability is + # carried on the response declaration, not the schema class itself. + output_inner, output_nullable = extract_optional(output_cls) + if has_input: schema_classes[input_type_name] = create_model( input_type_name, __base__=input_cls, ) - schema_classes[output_type_name] = create_model( - output_type_name, __base__=output_cls, - ) + if extract_list_element(output_inner) is not None: + # list[T] — RootModel makes the rename emit `type: array` rather + # than wrapping the list in a property. + schema_classes[output_type_name] = type( + output_type_name, (RootModel[output_inner],), {}, + ) + else: + schema_classes[output_type_name] = create_model( + output_type_name, __base__=output_inner, + ) + + response_model = schema_classes[output_type_name] + if output_nullable: + response_model = response_model | None # Stub endpoint — only exists so FastAPI walks Pydantic types into # components.schemas. Never invoked. Annotations are set explicitly @@ -177,7 +203,7 @@ def build_schema() -> dict[str, Any]: schema_app.post( f"/mizan/{name}", - response_model=schema_classes[output_type_name], + response_model=response_model, operation_id=camel, summary=fn_class.__doc__ or f"Call {name}", )(stub) diff --git a/cores/mizan-python/src/mizan_core/type_utils.py b/cores/mizan-python/src/mizan_core/type_utils.py new file mode 100644 index 0000000..4b91cbb --- /dev/null +++ b/cores/mizan-python/src/mizan_core/type_utils.py @@ -0,0 +1,104 @@ +""" +Type-introspection helpers shared across backend adapters. + +Both mizan-django and mizan-fastapi need to walk @client-decorated function +annotations the same way during schema export. Drift here breaks AFI parity, +so the helpers live in core. +""" + +from __future__ import annotations + +import types +from typing import Any, Union, get_args, get_origin + +from pydantic import BaseModel + + +__all__ = [ + "extract_optional", + "extract_list_element", + "is_structured_output", + "types_match_for_merge", +] + + +def extract_optional(annotation: Any) -> tuple[Any, bool]: + """Unwrap `Optional[T]` / `T | None`. + + Returns `(T, True)` for a union containing exactly one non-None member + and `None` itself. For anything else, returns `(annotation, False)`. + + Multi-arm unions like `A | B | None` are returned as-is — protocol-level + discriminated unions aren't supported yet, and silently picking one arm + would hide that. + """ + origin = get_origin(annotation) + if origin is Union or isinstance(annotation, types.UnionType): + non_none = [a for a in get_args(annotation) if a is not type(None)] + if len(non_none) == 1: + return non_none[0], True + return annotation, False + + +def extract_list_element(annotation: Any) -> Any | None: + """If `annotation` is `list[T]` (or sibling container of one), return `T`. + + Recognizes `list`, `tuple`, `set`, `frozenset`. For `tuple[T, ...]` the + variadic shape is treated as a homogeneous container; heterogeneous + tuples are not unwrapped. + """ + origin = get_origin(annotation) + if origin not in (list, tuple, set, frozenset): + return None + args = get_args(annotation) + if len(args) == 1: + return args[0] + if origin is tuple and len(args) == 2 and args[1] is Ellipsis: + return args[0] + return None + + +def is_structured_output(annotation: Any) -> bool: + """Recognize return types that don't need a `{result: ...}` primitive wrap. + + Matches `BaseModel`, `Optional[BaseModel]` / `BaseModel | None`, and + container-of-BaseModel (`list[T]`, `tuple[T, ...]`, etc.). Anything else + (primitives, dicts, raw `Any`) is treated as primitive and gets wrapped + so it can ride through Pydantic's typed serialization. + """ + if isinstance(annotation, type) and issubclass(annotation, BaseModel): + return True + origin = get_origin(annotation) + if origin is Union or isinstance(annotation, types.UnionType): + return any( + arg is not type(None) and is_structured_output(arg) + for arg in get_args(annotation) + ) + if origin in (list, tuple, set, frozenset): + return any(is_structured_output(arg) for arg in get_args(annotation)) + return False + + +def types_match_for_merge(slot_type: Any, value_type: Any) -> bool: + """True if a `value_type` mutation return can splice into a `slot_type` context slot. + + Used by backend dispatch to resolve `@client(merge=ctx)` to a concrete + function-name slot inside the context bundle. Three shapes match: + + - direct: slot is `T`, value is `T` → replace + - upsert: slot is `list[T]`, value is `T` → upsert by id + - list replace: slot is `list[T]`, value is `list[T]` + + `Optional[T]` is unwrapped on both sides before comparison. + """ + slot_inner, _ = extract_optional(slot_type) + value_inner, _ = extract_optional(value_type) + if slot_inner is value_inner: + return True + slot_elem = extract_list_element(slot_inner) + if slot_elem is not None and slot_elem is value_inner: + return True + value_elem = extract_list_element(value_inner) + if slot_elem is not None and value_elem is not None and slot_elem is value_elem: + return True + return False diff --git a/frontends/mizan-rust/.gitignore b/frontends/mizan-rust/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/frontends/mizan-rust/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/frontends/mizan-rust/Cargo.lock b/frontends/mizan-rust/Cargo.lock new file mode 100644 index 0000000..0c0717b --- /dev/null +++ b/frontends/mizan-rust/Cargo.lock @@ -0,0 +1,1697 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cc" +version = "1.2.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indoc" +version = "2.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" +dependencies = [ + "rustversion", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +dependencies = [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mio" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "mizan-rust" +version = "0.1.0" +dependencies = [ + "pyo3", + "pythonize", + "reqwest", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", +] + +[[package]] +name = "num-conv" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "portable-atomic" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + +[[package]] +name = "pyo3" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "once_cell", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "pythonize" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcf491425978bd889015d5430f6473d91bdfa2097262f1e731aadcf6c2113e" +dependencies = [ + "pyo3", + "serde", +] + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes", + "cookie", + "cookie_store", + "futures-core", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + +[[package]] +name = "rustls" +version = "0.23.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unindent" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.3+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "yoke" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/frontends/mizan-rust/Cargo.toml b/frontends/mizan-rust/Cargo.toml new file mode 100644 index 0000000..de9a11d --- /dev/null +++ b/frontends/mizan-rust/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "mizan-rust" +version = "0.1.0" +edition = "2021" +description = "Mizan client kernel — Rust port of @mizan/base. Context registry, fetch/call, merge, invalidation, error envelope parsing. Same wire as the TS / Vue / Svelte clients." +license = "MIT" + +[features] +default = [] +pyo3 = ["dep:pyo3", "dep:pythonize"] + +[dependencies] +tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time", "io-util", "io-std"] } +tokio-util = "0.7" +reqwest = { version = "0.12", default-features = false, features = ["json", "cookies", "rustls-tls"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +serde_urlencoded = "0.7" + +pyo3 = { version = "0.22", optional = true, features = ["extension-module", "abi3-py311"] } +pythonize = { version = "0.22", optional = true } + +[dev-dependencies] +tokio = { version = "1", features = ["full"] } diff --git a/frontends/mizan-rust/src/client.rs b/frontends/mizan-rust/src/client.rs new file mode 100644 index 0000000..1436c12 --- /dev/null +++ b/frontends/mizan-rust/src/client.rs @@ -0,0 +1,195 @@ +//! `MizanClient` — the kernel entry point. +//! +//! Mirrors the `configure(opts)` + module-level state in +//! `frontends/mizan-base/src/index.ts`, but as an owned struct because +//! Rust lacks module-level mutable state. Consumers hold an +//! `Arc` and pass it everywhere the TS code would have +//! used the module-level `config`. +//! +//! Public surface: +//! - `MizanClient::new(config)` — build with reqwest cookie jar. +//! - `client.fetch_context(name, params)` — async, returns parsed JSON bundle. +//! - `client.call(fn_name, args)` — async, applies merge + invalidation +//! from the response then returns `result`. +//! - `client.register_context(name, params, fetch_fn)` — register an +//! instance; returns a `ContextHandle`. +//! - `client.invalidate(name)` / `client.invalidate_scoped(name, params)` +//! — schedule invalidation via the kernel queue. +//! - `client.merge(context, params, slot, value)` — splice a value into +//! a context bundle slot. + +use std::sync::Arc; +use std::time::Duration; + +use reqwest::cookie::CookieStore; +use reqwest::header::{HeaderMap, HeaderName, HeaderValue, ACCEPT}; +use reqwest::Url; +use serde_json::Value; +use tokio::sync::OnceCell; + +use crate::context::{ContextHandle, ContextRegistry, FetchFn}; +use crate::error::MizanError; +use crate::invalidation::InvalidationQueue; +use crate::transport; + + +pub struct MizanConfig { + pub base_url: String, + pub session: bool, + pub csrf_cookie_name: String, + pub csrf_header_name: String, + pub extra_headers: Vec<(String, String)>, +} + + +impl Default for MizanConfig { + fn default() -> Self { + Self { + base_url: "/api/mizan".to_string(), + session: true, + csrf_cookie_name: "csrftoken".to_string(), + csrf_header_name: "X-CSRFToken".to_string(), + extra_headers: Vec::new(), + } + } +} + + +pub struct MizanClient { + config: Arc, + http: reqwest::Client, + cookie_jar: Arc, + registry: Arc, + queue: Arc, + session_ready: OnceCell<()>, +} + + +impl MizanClient { + pub fn new(config: MizanConfig) -> Arc { + let cookie_jar = Arc::new(reqwest::cookie::Jar::default()); + let http = reqwest::Client::builder() + .cookie_provider(Arc::clone(&cookie_jar)) + .build() + .expect("reqwest client construction"); + let registry = Arc::new(ContextRegistry::new()); + let queue = InvalidationQueue::new(Arc::clone(®istry)); + Arc::new(Self { + config: Arc::new(config), + http, + cookie_jar, + registry, + queue, + session_ready: OnceCell::new(), + }) + } + + pub fn config(&self) -> &MizanConfig { + &self.config + } + + pub fn http(&self) -> &reqwest::Client { + &self.http + } + + pub fn context_registry(&self) -> &Arc { + &self.registry + } + + pub fn invalidation_queue(&self) -> &Arc { + &self.queue + } + + /// Hit `/session/` once on first call to bootstrap the CSRF cookie. + /// No-op when `config.session == false`. Three attempts with 100ms + /// × attempt backoff. + pub async fn ensure_session_ready(&self) -> Result<(), MizanError> { + if !self.config.session { + return Ok(()); + } + self.session_ready + .get_or_try_init(|| async { + if self.read_csrf_cookie().is_some() { + return Ok(()); + } + let url = Url::parse(&format!("{}/session/", self.config.base_url.trim_end_matches('/'))) + .map_err(|e| MizanError::transport(format!("invalid base_url: {e}")))?; + for attempt in 0..3 { + let res = self.http.get(url.clone()).send().await; + if res.is_ok() && self.read_csrf_cookie().is_some() { + return Ok(()); + } + if attempt < 2 { + tokio::time::sleep(Duration::from_millis(100 * (attempt as u64 + 1))).await; + } + } + // Mirror TS: failing to bootstrap is non-fatal — subsequent + // calls proceed without CSRF and may still succeed (e.g., + // FastAPI configs that don't require it). + Ok(()) + }) + .await + .copied() + } + + pub(crate) async fn resolve_headers(&self) -> HeaderMap { + let mut headers = HeaderMap::new(); + for (name, value) in &self.config.extra_headers { + if let (Ok(n), Ok(v)) = (HeaderName::try_from(name.as_str()), HeaderValue::try_from(value.as_str())) { + headers.insert(n, v); + } + } + if let Some(token) = self.read_csrf_cookie() { + if let (Ok(n), Ok(v)) = ( + HeaderName::try_from(self.config.csrf_header_name.as_str()), + HeaderValue::try_from(token.as_str()), + ) { + headers.insert(n, v); + } + } + headers.insert(ACCEPT, HeaderValue::from_static("application/json")); + headers + } + + fn read_csrf_cookie(&self) -> Option { + let url = Url::parse(&self.config.base_url).ok()?; + let header = self.cookie_jar.cookies(&url)?; + let raw = header.to_str().ok()?; + let needle = format!("{}=", self.config.csrf_cookie_name); + raw.split(';') + .map(|p| p.trim()) + .find_map(|p| p.strip_prefix(&needle)) + .map(|v| v.trim_matches('"').to_string()) + } + + // ── High-level API ───────────────────────────────────────────────── + + pub async fn fetch_context(&self, context: &str, params: &Value) -> Result { + transport::mizan_fetch(self, context, params).await + } + + pub async fn call(&self, fn_name: &str, args: Value) -> Result { + transport::mizan_call(self, fn_name, args).await + } + + pub async fn register_context( + self: &Arc, + name: impl Into, + params: Value, + fetch_fn: FetchFn, + ) -> ContextHandle { + self.registry.register(name, params, fetch_fn, None).await + } + + pub async fn invalidate(self: &Arc, name: impl Into) { + self.queue.invalidate(name).await; + } + + pub async fn invalidate_scoped(self: &Arc, name: impl Into, params: Value) { + self.queue.invalidate_scoped(name, params).await; + } + + pub async fn merge(&self, context: &str, params: Option<&Value>, slot: &str, value: &Value) { + self.registry.merge(context, params, slot, value).await; + } +} diff --git a/frontends/mizan-rust/src/context.rs b/frontends/mizan-rust/src/context.rs new file mode 100644 index 0000000..82ca971 --- /dev/null +++ b/frontends/mizan-rust/src/context.rs @@ -0,0 +1,365 @@ +//! Context registry. +//! +//! Mirrors the `contexts: Map>` +//! shape in `frontends/mizan-base/src/index.ts`. Each entry holds the +//! latest `ContextState`, a `tokio::sync::watch::Sender` for notifying +//! subscribers, and a fetch function the registry invokes on demand. +//! +//! Subscribers receive a `ContextHandle` whose `rx: watch::Receiver` +//! they read from in their own loop. Watch channels overwrite the +//! previous value if the receiver hasn't consumed it yet — the render +//! loop sees only the latest state on each tick, never an intermediate +//! one. The TS kernel achieves the same effect via React's external +//! store re-render coalescing. + +use std::collections::BTreeMap; +use std::collections::HashMap; +use std::future::Future; +use std::pin::Pin; +use std::sync::Arc; + +use serde_json::Value; +use tokio::sync::{Mutex, RwLock, mpsc, watch}; +use tokio_util::sync::CancellationToken; + +use crate::error::MizanError; + + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ContextStatus { + Idle, + Loading, + Success, + Error, +} + + +#[derive(Debug, Clone)] +pub struct ContextState { + pub data: Option, + pub status: ContextStatus, + pub error: Option>, +} + + +pub type ContextStateRaw = ContextState; + + +impl ContextStateRaw { + pub fn idle() -> Self { + Self { data: None, status: ContextStatus::Idle, error: None } + } +} + + +pub type FetchFn = Arc< + dyn Fn() -> Pin> + Send + 'static>> + + Send + + Sync, +>; + + +struct ContextEntry { + #[allow(dead_code)] + params: Value, + tx: watch::Sender, + fetch_fn: FetchFn, + refetch_tx: mpsc::UnboundedSender<()>, + /// Cancel signal for the entry's spawned refetch loop. Set when the + /// last handle on the entry unregisters. + cancel: CancellationToken, +} + + +pub struct ContextRegistry { + /// Outer key: context name. Inner key: `stable_key(params)`. + entries: RwLock>>>>, +} + + +impl Default for ContextRegistry { + fn default() -> Self { + Self::new() + } +} + + +impl ContextRegistry { + pub fn new() -> Self { + Self { entries: RwLock::new(HashMap::new()) } + } + + /// Register an instance of `(context_name, params)`. Idempotent — + /// re-registering the same key returns a handle on the existing + /// entry (the fetch_fn closure is replaced so the latest binding + /// wins). + pub async fn register( + self: &Arc, + name: impl Into, + params: Value, + fetch_fn: FetchFn, + initial_data: Option, + ) -> ContextHandle { + let name = name.into(); + let key = stable_key(¶ms); + + let mut outer = self.entries.write().await; + let inner = outer.entry(name.clone()).or_default(); + + if let Some(existing) = inner.get(&key).cloned() { + // Update the fetch closure so the latest registration's + // closure wins (matches the TS Strict-Mode behavior). + { + let mut entry = existing.lock().await; + entry.fetch_fn = fetch_fn; + } + let entry = existing.lock().await; + return ContextHandle { + rx: entry.tx.subscribe(), + refetch_tx: entry.refetch_tx.clone(), + cancel: entry.cancel.clone(), + registry: Arc::clone(self), + name, + key, + }; + } + + let initial = match initial_data { + Some(data) => ContextState { data: Some(data), status: ContextStatus::Success, error: None }, + None => ContextStateRaw::idle(), + }; + let (tx, _rx) = watch::channel(initial); + let (refetch_tx, mut refetch_rx) = mpsc::unbounded_channel::<()>(); + let cancel = CancellationToken::new(); + + let entry = Arc::new(Mutex::new(ContextEntry { + params: params.clone(), + tx: tx.clone(), + fetch_fn: fetch_fn.clone(), + refetch_tx: refetch_tx.clone(), + cancel: cancel.clone(), + })); + inner.insert(key.clone(), Arc::clone(&entry)); + drop(outer); + + // Spawn the entry's refetch loop. The loop owns its own fetch + // closure handle resolution via the entry mutex — each tick + // reads the latest closure, so updates via re-register apply. + let entry_for_task = Arc::clone(&entry); + let cancel_for_task = cancel.clone(); + tokio::spawn(async move { + loop { + tokio::select! { + _ = cancel_for_task.cancelled() => break, + msg = refetch_rx.recv() => { + if msg.is_none() { break; } + let (fetch_fn, tx) = { + let entry = entry_for_task.lock().await; + (entry.fetch_fn.clone(), entry.tx.clone()) + }; + // Loading state + let cur = tx.borrow().clone(); + let loading = ContextState { data: cur.data, status: ContextStatus::Loading, error: None }; + let _ = tx.send(loading); + // Drive the fetch + match fetch_fn().await { + Ok(data) => { + let _ = tx.send(ContextState { data: Some(data), status: ContextStatus::Success, error: None }); + } + Err(err) => { + let cur = tx.borrow().clone(); + let _ = tx.send(ContextState { + data: cur.data, + status: ContextStatus::Error, + error: Some(Arc::new(err)), + }); + } + } + } + } + } + }); + + ContextHandle { + rx: tx.subscribe(), + refetch_tx, + cancel, + registry: Arc::clone(self), + name, + key, + } + } + + /// Merge a value into a context entry's bundle slot. Mirrors the + /// TS kernel `merge(context, params, slot, value)` call. + pub async fn merge( + &self, + name: &str, + params: Option<&Value>, + slot: &str, + value: &Value, + ) { + let key = match params { + Some(p) => stable_key(p), + None => stable_key(&Value::Object(Default::default())), + }; + let entry_handle = { + let outer = self.entries.read().await; + outer.get(name).and_then(|inner| inner.get(&key)).cloned() + }; + let Some(entry_arc) = entry_handle else { return }; + let entry = entry_arc.lock().await; + let cur = entry.tx.borrow().clone(); + let Some(bundle) = cur.data.as_ref() else { return }; + let Some(merged) = crate::merge::merge_into_bundle(bundle, slot, value) else { return }; + let _ = entry.tx.send(ContextState { + data: Some(merged), + status: ContextStatus::Success, + error: None, + }); + } + + /// Trigger refetch on every entry of `name`. + pub async fn invalidate_broad(&self, name: &str) { + let entries = { + let outer = self.entries.read().await; + outer.get(name).map(|inner| inner.values().cloned().collect::>()) + }; + let Some(entries) = entries else { return }; + for entry in entries { + let tx = { + let e = entry.lock().await; + e.refetch_tx.clone() + }; + let _ = tx.send(()); + } + } + + /// Trigger refetch on the single entry matching `(name, params)`. + pub async fn invalidate_scoped(&self, name: &str, params: &Value) { + let key = stable_key(params); + let entry_arc = { + let outer = self.entries.read().await; + outer.get(name).and_then(|inner| inner.get(&key)).cloned() + }; + let Some(entry_arc) = entry_arc else { return }; + let tx = { + let entry = entry_arc.lock().await; + entry.refetch_tx.clone() + }; + let _ = tx.send(()); + } + + async fn unregister(&self, name: &str, key: &str) { + let mut outer = self.entries.write().await; + if let Some(inner) = outer.get_mut(name) { + if let Some(entry) = inner.remove(key) { + let entry = entry.lock().await; + entry.cancel.cancel(); + } + if inner.is_empty() { + outer.remove(name); + } + } + } +} + + +pub struct ContextHandle { + pub rx: watch::Receiver, + refetch_tx: mpsc::UnboundedSender<()>, + cancel: CancellationToken, + registry: Arc, + name: String, + key: String, +} + + +impl ContextHandle { + /// Drive a refetch. Returns immediately; the new state lands on + /// `rx` once the kernel's refetch task finishes the fetch. + pub fn refetch(&self) { + let _ = self.refetch_tx.send(()); + } + + pub fn state(&self) -> ContextStateRaw { + self.rx.borrow().clone() + } + + pub fn cancel_token(&self) -> CancellationToken { + self.cancel.clone() + } + + pub async fn unregister(self) { + self.registry.unregister(&self.name, &self.key).await; + } +} + + +/// Byte-identical to TS `JSON.stringify(params, Object.keys(params).sort())`. +/// +/// Uses `BTreeMap` for deterministic key ordering and serializes via +/// `serde_json::to_string` (compact, no whitespace) — matches the TS +/// default. Non-object / non-string params (numbers, booleans) pass +/// through serde_json's standard JSON representation. +pub fn stable_key(params: &Value) -> String { + match params { + Value::Object(map) => { + let sorted: BTreeMap<&String, &Value> = map.iter().collect(); + serde_json::to_string(&sorted).unwrap_or_default() + } + other => serde_json::to_string(other).unwrap_or_default(), + } +} + + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + + #[test] + fn stable_key_sorts_object_keys() { + let a = stable_key(&json!({"b": 1, "a": 2})); + let b = stable_key(&json!({"a": 2, "b": 1})); + assert_eq!(a, b); + assert_eq!(a, r#"{"a":2,"b":1}"#); + } + + #[test] + fn stable_key_handles_empty_object() { + assert_eq!(stable_key(&json!({})), "{}"); + } + + #[tokio::test] + async fn register_and_refetch() { + let registry = Arc::new(ContextRegistry::new()); + let counter = Arc::new(std::sync::atomic::AtomicU32::new(0)); + let counter_clone = Arc::clone(&counter); + let fetch_fn: FetchFn = Arc::new(move || { + let counter = Arc::clone(&counter_clone); + Box::pin(async move { + let n = counter.fetch_add(1, std::sync::atomic::Ordering::SeqCst) + 1; + Ok(json!({ "count": n })) + }) + }); + + let mut handle = registry.register("test", json!({}), fetch_fn, None).await; + handle.refetch(); + // Poll until success — watch::Receiver::changed() returns once + // per "newest value seen" advance, so back-to-back sends from the + // refetch task can coalesce into a single notification. The loop + // ignores intermediate Loading states and waits for Success. + loop { + tokio::time::timeout(std::time::Duration::from_secs(2), handle.rx.changed()) + .await + .expect("changed timed out") + .unwrap(); + if handle.state().status == ContextStatus::Success { + break; + } + } + let state = handle.state(); + assert_eq!(state.data.unwrap()["count"], 1); + } +} diff --git a/frontends/mizan-rust/src/error.rs b/frontends/mizan-rust/src/error.rs new file mode 100644 index 0000000..2df9138 --- /dev/null +++ b/frontends/mizan-rust/src/error.rs @@ -0,0 +1,121 @@ +//! Wire error envelope. Mirrors `MizanError` in `frontends/mizan-base/src/index.ts`. +//! +//! Two envelope shapes are tolerated: +//! +//! - FastAPI: `{"error": {"code": "...", "message": "...", "details": ...}}` +//! - Django: `{"error": true, "code": "...", "message": "...", "details": ...}` +//! +//! When neither shape parses, `code` falls back to `HTTP_` and the +//! raw response body is the message. + +use serde::Deserialize; +use serde_json::Value; + + +#[derive(Debug, Clone)] +pub struct MizanError { + pub status: u16, + pub code: String, + pub message: String, + pub details: Option, + pub raw_body: String, +} + + +impl MizanError { + pub fn from_response(status: u16, body: String) -> Self { + let parsed = serde_json::from_str::(&body).ok(); + let (code, message, details) = match parsed { + Some(Envelope::Fastapi { error }) => ( + error.code.unwrap_or_else(|| format!("HTTP_{status}")), + error.message.unwrap_or_else(|| format!("Mizan call failed ({status})")), + error.details, + ), + Some(Envelope::Django { code, message, details, .. }) => ( + code.unwrap_or_else(|| format!("HTTP_{status}")), + message.unwrap_or_else(|| format!("Mizan call failed ({status})")), + details, + ), + None => ( + format!("HTTP_{status}"), + format!("Mizan call failed ({status})"), + None, + ), + }; + Self { status, code, message, details, raw_body: body } + } + + pub fn transport(message: impl Into) -> Self { + Self { + status: 0, + code: "TRANSPORT".to_string(), + message: message.into(), + details: None, + raw_body: String::new(), + } + } +} + + +impl std::fmt::Display for MizanError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Mizan {} ({}): {}", self.status, self.code, self.message) + } +} + + +impl std::error::Error for MizanError {} + + +#[derive(Deserialize)] +#[serde(untagged)] +enum Envelope { + Fastapi { error: NestedError }, + Django { + // Django form is `{"error": true, "code": ..., "message": ..., "details": ...}`. + // `error` is a bool sentinel; the actual fields are siblings. + #[allow(dead_code)] + error: bool, + code: Option, + message: Option, + details: Option, + }, +} + + +#[derive(Deserialize)] +struct NestedError { + code: Option, + message: Option, + details: Option, +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn parses_fastapi_envelope() { + let body = r#"{"error":{"code":"BAD_REQUEST","message":"oops","details":{"k":1}}}"#; + let e = MizanError::from_response(400, body.to_string()); + assert_eq!(e.code, "BAD_REQUEST"); + assert_eq!(e.message, "oops"); + assert_eq!(e.details, Some(serde_json::json!({"k": 1}))); + } + + #[test] + fn parses_django_envelope() { + let body = r#"{"error":true,"code":"NOT_FOUND","message":"missing","details":null}"#; + let e = MizanError::from_response(404, body.to_string()); + assert_eq!(e.code, "NOT_FOUND"); + assert_eq!(e.message, "missing"); + } + + #[test] + fn falls_back_on_unparseable_body() { + let e = MizanError::from_response(500, "Internal Server Error".to_string()); + assert_eq!(e.code, "HTTP_500"); + assert!(e.message.contains("500")); + } +} diff --git a/frontends/mizan-rust/src/invalidation.rs b/frontends/mizan-rust/src/invalidation.rs new file mode 100644 index 0000000..18c2736 --- /dev/null +++ b/frontends/mizan-rust/src/invalidation.rs @@ -0,0 +1,148 @@ +//! Invalidation queue. +//! +//! Mirrors the TS kernel's `pending` / `pendingScoped` / `flush()` pair +//! at `frontends/mizan-base/src/index.ts`. Mutations accumulate +//! invalidation targets; the queue batches them and triggers refetches +//! on the matching context entries. +//! +//! The TS kernel uses `queueMicrotask(flush)` to batch within a single +//! event-loop tick. The Rust equivalent is a `tokio::task::yield_now()` +//! debounce: when `invalidate()` is called, push to the queue, and if +//! no flush is scheduled spawn a task that yields once then flushes. +//! That gives the same "batch within a single async tick" semantics. + +use std::collections::HashSet; +use std::sync::Arc; +use std::sync::atomic::{AtomicBool, Ordering}; + +use serde_json::Value; +use tokio::sync::Mutex; + +use crate::context::ContextRegistry; + + +#[derive(Debug, Clone)] +pub struct ScopedTarget { + pub context: String, + pub params: Value, +} + + +#[derive(Default)] +struct Pending { + broad: HashSet, + scoped: Vec, +} + + +pub struct InvalidationQueue { + pending: Mutex, + scheduled: AtomicBool, + registry: Arc, +} + + +impl InvalidationQueue { + pub fn new(registry: Arc) -> Arc { + Arc::new(Self { + pending: Mutex::new(Pending::default()), + scheduled: AtomicBool::new(false), + registry, + }) + } + + /// Schedule a broad invalidation (every entry of `name` refetches). + pub async fn invalidate(self: &Arc, name: impl Into) { + { + let mut pending = self.pending.lock().await; + pending.broad.insert(name.into()); + } + self.schedule_flush(); + } + + /// Schedule a scoped invalidation (the entry matching `(name, + /// params)` refetches). + pub async fn invalidate_scoped(self: &Arc, name: impl Into, params: Value) { + { + let mut pending = self.pending.lock().await; + pending.scoped.push(ScopedTarget { context: name.into(), params }); + } + self.schedule_flush(); + } + + fn schedule_flush(self: &Arc) { + if self.scheduled.swap(true, Ordering::SeqCst) { + return; + } + let this = Arc::clone(self); + tokio::spawn(async move { + // Yield once to batch invalidations queued in the same + // async tick — equivalent to TS `queueMicrotask`. + tokio::task::yield_now().await; + this.flush().await; + this.scheduled.store(false, Ordering::SeqCst); + }); + } + + async fn flush(&self) { + let snapshot = { + let mut pending = self.pending.lock().await; + let broad = std::mem::take(&mut pending.broad); + let scoped = std::mem::take(&mut pending.scoped); + (broad, scoped) + }; + let (broad, scoped) = snapshot; + + // Broad first — they cover all scoped variants of the same name. + for name in &broad { + self.registry.invalidate_broad(name).await; + } + for target in &scoped { + if broad.contains(&target.context) { + continue; + } + self.registry.invalidate_scoped(&target.context, &target.params).await; + } + } +} + + +#[cfg(test)] +mod tests { + use super::*; + use crate::context::{ContextHandle, ContextRegistry, ContextStatus, FetchFn}; + use serde_json::json; + + fn counted_fetch(counter: Arc) -> FetchFn { + Arc::new(move || { + let counter = Arc::clone(&counter); + Box::pin(async move { + let n = counter.fetch_add(1, Ordering::SeqCst) + 1; + Ok(json!({ "count": n })) + }) + }) + } + + async fn wait_for_success(handle: &mut ContextHandle) { + loop { + handle.rx.changed().await.unwrap(); + if handle.state().status == ContextStatus::Success { + return; + } + } + } + + #[tokio::test] + async fn broad_invalidate_triggers_refetch() { + let registry = Arc::new(ContextRegistry::new()); + let queue = InvalidationQueue::new(Arc::clone(®istry)); + let counter = Arc::new(std::sync::atomic::AtomicU32::new(0)); + let mut handle = registry.register("user", json!({}), counted_fetch(Arc::clone(&counter)), None).await; + handle.refetch(); + wait_for_success(&mut handle).await; + assert_eq!(counter.load(Ordering::SeqCst), 1); + queue.invalidate("user").await; + wait_for_success(&mut handle).await; + assert_eq!(counter.load(Ordering::SeqCst), 2); + } +} diff --git a/frontends/mizan-rust/src/lib.rs b/frontends/mizan-rust/src/lib.rs new file mode 100644 index 0000000..da39769 --- /dev/null +++ b/frontends/mizan-rust/src/lib.rs @@ -0,0 +1,28 @@ +//! Mizan client kernel. +//! +//! Rust port of `@mizan/base` (frontends/mizan-base/src/index.ts). Same +//! public surface, same protocol, same wire shape. Consumers — generated +//! per-app crates, the GPU worker, the Python `PyMizanClient` — depend +//! on this kernel and never construct HTTP requests directly. +//! +//! Modules: +//! - [`client`] — `MizanClient`, `MizanConfig`, session init +//! - [`context`] — registry, `ContextState`, `ContextHandle`, `stable_key` +//! - [`error`] — `MizanError`, envelope parsing +//! - [`transport`] — `mizan_fetch`, `mizan_call`, retry, header resolution +//! - [`merge`] — `splice_slot` +//! - [`invalidation`] — `InvalidationQueue`, debounced flush + +pub mod client; +pub mod context; +pub mod error; +pub mod invalidation; +pub mod merge; +pub mod transport; + +#[cfg(feature = "pyo3")] +pub mod pyo3_bridge; + +pub use client::{MizanClient, MizanConfig}; +pub use context::{ContextHandle, ContextState, ContextStateRaw, ContextStatus, stable_key}; +pub use error::MizanError; diff --git a/frontends/mizan-rust/src/merge.rs b/frontends/mizan-rust/src/merge.rs new file mode 100644 index 0000000..867f91a --- /dev/null +++ b/frontends/mizan-rust/src/merge.rs @@ -0,0 +1,107 @@ +//! Mutation-driven merge of a value into a context's bundle slot. +//! +//! Mirrors `spliceSlot` in `frontends/mizan-base/src/index.ts`. The server +//! has already resolved which slot the value lands in (by matching the +//! mutation's return type against each context function's return type), +//! so the kernel does no inference — it writes directly to `bundle[slot]`. +//! +//! Rules: +//! - If the existing slot is an array and the new value is also an array, +//! the array replaces the slot wholesale. +//! - If the existing slot is an array and the new value is an object with +//! an `id` field, upsert by `id` — replace the matching entry in place +//! or append. +//! - Otherwise the slot is replaced with the new value. + +use serde_json::Value; + + +pub fn splice_slot(slot: &Value, value: &Value) -> Value { + if let Value::Array(slot_arr) = slot { + if let Value::Array(_) = value { + return value.clone(); + } + if let Some(id) = value.get("id") { + let mut next = slot_arr.clone(); + let idx = next.iter().position(|item| item.get("id") == Some(id)); + match idx { + Some(i) => next[i] = value.clone(), + None => next.push(value.clone()), + } + return Value::Array(next); + } + } + value.clone() +} + + +/// Apply a merge entry to the bundle of a context entry. Returns the new +/// bundle, or `None` if the slot wasn't present in the bundle (caller +/// should treat that as a no-op so server-driven merges into stale +/// caches don't fabricate slots). +pub fn merge_into_bundle(bundle: &Value, slot_name: &str, value: &Value) -> Option { + let obj = bundle.as_object()?; + if !obj.contains_key(slot_name) { + return None; + } + let mut next = obj.clone(); + let spliced = splice_slot(obj.get(slot_name)?, value); + next.insert(slot_name.to_string(), spliced); + Some(Value::Object(next)) +} + + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + + #[test] + fn replaces_scalar_slot() { + let slot = json!(1); + let value = json!(2); + assert_eq!(splice_slot(&slot, &value), json!(2)); + } + + #[test] + fn upserts_array_by_id() { + let slot = json!([{"id": 1, "name": "a"}, {"id": 2, "name": "b"}]); + let value = json!({"id": 1, "name": "A"}); + assert_eq!( + splice_slot(&slot, &value), + json!([{"id": 1, "name": "A"}, {"id": 2, "name": "b"}]), + ); + } + + #[test] + fn appends_when_id_not_in_array() { + let slot = json!([{"id": 1, "name": "a"}]); + let value = json!({"id": 9, "name": "z"}); + assert_eq!( + splice_slot(&slot, &value), + json!([{"id": 1, "name": "a"}, {"id": 9, "name": "z"}]), + ); + } + + #[test] + fn array_replaces_array() { + let slot = json!([1, 2, 3]); + let value = json!([7, 8]); + assert_eq!(splice_slot(&slot, &value), json!([7, 8])); + } + + #[test] + fn merge_into_bundle_skips_missing_slot() { + let bundle = json!({"existing": 1}); + let value = json!(42); + assert!(merge_into_bundle(&bundle, "missing", &value).is_none()); + } + + #[test] + fn merge_into_bundle_updates_present_slot() { + let bundle = json!({"user_profile": {"id": 1, "name": "old"}}); + let value = json!({"id": 1, "name": "new"}); + let merged = merge_into_bundle(&bundle, "user_profile", &value).unwrap(); + assert_eq!(merged["user_profile"]["name"], "new"); + } +} diff --git a/frontends/mizan-rust/src/pyo3_bridge.rs b/frontends/mizan-rust/src/pyo3_bridge.rs new file mode 100644 index 0000000..0918682 --- /dev/null +++ b/frontends/mizan-rust/src/pyo3_bridge.rs @@ -0,0 +1,252 @@ +//! PyO3 façade — exposes `MizanClient` to Python as `PyMizanClient`. +//! +//! Same kernel, same wire. The Python wrapper that the codegen emits +//! adds typed methods on top of this client (Pydantic in / Pydantic +//! out); this module's job is the GIL boundary plus the async-to-sync +//! bridge. +//! +//! Architecture: +//! - One tokio multi-thread runtime owned by the `PyMizanClient`. +//! - `call` / `fetch_context` use `py.allow_threads(|| rt.block_on(...))` +//! so the GIL is released across the network round-trip. +//! - `subscribe_context` spawns a tokio task that owns a watch +//! receiver; on each change the task acquires the GIL via +//! `Python::with_gil` and fires the Python callback. The returned +//! `CancellationToken` (wrapped as `PyContextSubscription`) lets +//! Python cancel the watcher. + +use std::sync::Arc; + +use pyo3::prelude::*; +use pyo3::types::{PyDict}; +use pythonize::{depythonize, pythonize}; +use serde_json::Value; +use tokio::runtime::Runtime; +use tokio::sync::watch; +use tokio_util::sync::CancellationToken; + +use crate::client::{MizanClient, MizanConfig}; +use crate::context::{ContextStateRaw, ContextStatus}; + + +#[pyclass] +pub struct PyMizanClient { + inner: Arc, + rt: Arc, +} + + +#[pyclass] +pub struct PyContextSubscription { + cancel: CancellationToken, +} + + +#[pymethods] +impl PyContextSubscription { + fn cancel(&self) { + self.cancel.cancel(); + } +} + + +#[pymethods] +impl PyMizanClient { + #[new] + #[pyo3(signature = (base_url, *, session = false, csrf_cookie_name = String::from("csrftoken"), csrf_header_name = String::from("X-CSRFToken")))] + fn new( + base_url: String, + session: bool, + csrf_cookie_name: String, + csrf_header_name: String, + ) -> PyResult { + let rt = Runtime::new() + .map_err(|e| PyErr::new::(format!("tokio runtime: {e}")))?; + let config = MizanConfig { + base_url, + session, + csrf_cookie_name, + csrf_header_name, + extra_headers: Vec::new(), + }; + Ok(Self { + inner: MizanClient::new(config), + rt: Arc::new(rt), + }) + } + + /// Invoke a mutation or plain function. `args` is a Python dict (or + /// any pythonize-compatible object). Returns the unwrapped `result` + /// from the server response as a Python object. + fn call(&self, py: Python<'_>, fn_name: String, args: &Bound<'_, PyDict>) -> PyResult { + let args_value: Value = depythonize(args.as_any()) + .map_err(|e| PyErr::new::(format!("args: {e}")))?; + let inner = Arc::clone(&self.inner); + let result: Value = py.allow_threads(|| { + self.rt.block_on(async move { inner.call(&fn_name, args_value).await }) + }) + .map_err(mizan_err_to_py)?; + pythonize(py, &result) + .map_err(|e| PyErr::new::(format!("encode result: {e}"))) + .map(|bound| bound.unbind()) + } + + /// One-shot context fetch (does not register a subscription). + fn fetch_context(&self, py: Python<'_>, name: String, params: &Bound<'_, PyDict>) -> PyResult { + let params_value: Value = depythonize(params.as_any()) + .map_err(|e| PyErr::new::(format!("params: {e}")))?; + let inner = Arc::clone(&self.inner); + let result: Value = py.allow_threads(|| { + self.rt.block_on(async move { inner.fetch_context(&name, ¶ms_value).await }) + }) + .map_err(mizan_err_to_py)?; + pythonize(py, &result) + .map_err(|e| PyErr::new::(format!("encode result: {e}"))) + .map(|bound| bound.unbind()) + } + + /// Register a subscription. The kernel owns the fetch lifecycle; + /// `callback` is invoked from the watcher task once per state + /// change. Returns a handle whose `.cancel()` ends the subscription. + /// + /// The callback receives a dict with keys: `data`, `status`, + /// `error`. Status is one of `"idle"`, `"loading"`, `"success"`, + /// `"error"`. Error is a dict with `code`, `message`, `status`, + /// `details` (or None). + #[pyo3(signature = (name, params, callback))] + fn subscribe_context( + &self, + py: Python<'_>, + name: String, + params: &Bound<'_, PyDict>, + callback: PyObject, + ) -> PyResult { + let params_value: Value = depythonize(params.as_any()) + .map_err(|e| PyErr::new::(format!("params: {e}")))?; + + // Build a serde-friendly fetch closure that delegates to the + // kernel's `fetch_context` (which itself runs the typed HTTP + // pipeline). The subscription's refetches go through this. + let inner_for_fetch = Arc::clone(&self.inner); + let name_for_fetch = name.clone(); + let params_for_fetch = params_value.clone(); + let fetch_fn = Arc::new(move || { + let inner = Arc::clone(&inner_for_fetch); + let name = name_for_fetch.clone(); + let params = params_for_fetch.clone(); + Box::pin(async move { inner.fetch_context(&name, ¶ms).await }) + as std::pin::Pin + Send + 'static>> + }); + + let inner = Arc::clone(&self.inner); + let handle = py.allow_threads(|| { + self.rt.block_on(async move { + inner.register_context(name.clone(), params_value, fetch_fn).await + }) + }); + let cancel = handle.cancel_token(); + let cancel_for_task = cancel.clone(); + let callback = Arc::new(callback); + let callback_for_task = Arc::clone(&callback); + // Drive an initial refetch before destructuring so the first + // state lands without requiring the caller to invalidate. + handle.refetch(); + let rx: watch::Receiver = handle.rx; + + self.rt.spawn(async move { + let mut rx = rx; + loop { + tokio::select! { + _ = cancel_for_task.cancelled() => break, + res = rx.changed() => { + if res.is_err() { break; } + let snapshot = rx.borrow_and_update().clone(); + Python::with_gil(|py| { + let dict = match state_to_pydict(py, &snapshot) { + Ok(d) => d, + Err(e) => { eprintln!("[pyo3_bridge] encode state: {e}"); return; } + }; + if let Err(e) = callback_for_task.call1(py, (dict,)) { + eprintln!("[pyo3_bridge] callback raised: {e}"); + } + }); + } + } + } + }); + + Ok(PyContextSubscription { cancel }) + } + + /// Schedule a broad invalidation. + fn invalidate(&self, py: Python<'_>, name: String) { + let inner = Arc::clone(&self.inner); + py.allow_threads(|| { + self.rt.block_on(async move { inner.invalidate(name).await }) + }); + } + + /// Schedule a scoped invalidation. + fn invalidate_scoped(&self, py: Python<'_>, name: String, params: &Bound<'_, PyDict>) -> PyResult<()> { + let params_value: Value = depythonize(params.as_any()) + .map_err(|e| PyErr::new::(format!("params: {e}")))?; + let inner = Arc::clone(&self.inner); + py.allow_threads(|| { + self.rt.block_on(async move { inner.invalidate_scoped(name, params_value).await }) + }); + Ok(()) + } +} + + +fn state_to_pydict<'py>(py: Python<'py>, state: &ContextStateRaw) -> PyResult> { + let dict = PyDict::new_bound(py); + let status = match state.status { + ContextStatus::Idle => "idle", + ContextStatus::Loading => "loading", + ContextStatus::Success => "success", + ContextStatus::Error => "error", + }; + dict.set_item("status", status)?; + match &state.data { + Some(v) => { + let obj = pythonize(py, v) + .map_err(|e| PyErr::new::(format!("encode state.data: {e}")))?; + dict.set_item("data", obj)?; + } + None => dict.set_item("data", py.None())?, + } + match &state.error { + Some(err) => { + let err_dict = PyDict::new_bound(py); + err_dict.set_item("status", err.status)?; + err_dict.set_item("code", &err.code)?; + err_dict.set_item("message", &err.message)?; + if let Some(details) = &err.details { + let obj = pythonize(py, details) + .map_err(|e| PyErr::new::(format!("encode error.details: {e}")))?; + err_dict.set_item("details", obj)?; + } else { + err_dict.set_item("details", py.None())?; + } + dict.set_item("error", err_dict)?; + } + None => dict.set_item("error", py.None())?, + } + Ok(dict) +} + + +fn mizan_err_to_py(err: crate::MizanError) -> PyErr { + PyErr::new::(format!("{err}")) +} + + +/// Python extension module entry point. Wheels built via `maturin +/// develop --features pyo3` import the module as `mizan_rust`. +#[pymodule] +fn mizan_rust(m: &Bound<'_, PyModule>) -> PyResult<()> { + m.add_class::()?; + m.add_class::()?; + Ok(()) +} diff --git a/frontends/mizan-rust/src/transport.rs b/frontends/mizan-rust/src/transport.rs new file mode 100644 index 0000000..f1111a1 --- /dev/null +++ b/frontends/mizan-rust/src/transport.rs @@ -0,0 +1,153 @@ +//! HTTP transport. Mirrors `mizanFetch` and `mizanCall` in +//! `frontends/mizan-base/src/index.ts`. +//! +//! - `mizan_fetch(client, context, params)` → `GET /api/mizan/ctx//?params` +//! - `mizan_call(client, fn_name, args)` → `POST /api/mizan/call/` with +//! `{fn, args}` body. On response, applies any `merge` entries first, +//! then `invalidate` entries, then returns the `result` field. +//! +//! Retries: 3 attempts total, 200ms × attempt linear backoff. Retries +//! on network errors and 5xx; surfaces 4xx immediately (matches TS). +//! +//! CSRF: the reqwest cookie jar stores the CSRF cookie from the +//! `/session/` bootstrap; on every call we read it via +//! `reqwest::cookie::Jar::cookies(&url)` and add it as the configured +//! header. Both names come from `MizanConfig`. + +use std::time::Duration; + +use reqwest::{Method, Url}; +use serde::Deserialize; +use serde_json::Value; + +use crate::client::MizanClient; +use crate::error::MizanError; + + +const MAX_ATTEMPTS: u32 = 3; +const BACKOFF_BASE: Duration = Duration::from_millis(200); + + +/// `GET /api/mizan/ctx//?params`. +pub async fn mizan_fetch(client: &MizanClient, context: &str, params: &Value) -> Result { + let mut url = Url::parse(&format!("{}/ctx/{}/", client.config().base_url.trim_end_matches('/'), context)) + .map_err(|e| MizanError::transport(format!("invalid base_url: {e}")))?; + if let Value::Object(map) = params { + let mut qp = url.query_pairs_mut(); + for (k, v) in map { + let s = match v { + Value::String(s) => s.clone(), + other => other.to_string(), + }; + qp.append_pair(k, &s); + } + } + + let body = request_with_retry(client, Method::GET, url, None).await?; + serde_json::from_str(&body).map_err(|e| MizanError::transport(format!("decode: {e}"))) +} + + +/// `POST /api/mizan/call/` with `{fn, args}` body. Applies merge + +/// invalidation entries from the response before returning `result`. +pub async fn mizan_call(client: &MizanClient, fn_name: &str, args: Value) -> Result { + let url = Url::parse(&format!("{}/call/", client.config().base_url.trim_end_matches('/'))) + .map_err(|e| MizanError::transport(format!("invalid base_url: {e}")))?; + let payload = serde_json::json!({ "fn": fn_name, "args": args }); + let body_bytes = serde_json::to_vec(&payload) + .map_err(|e| MizanError::transport(format!("encode: {e}")))?; + let body = request_with_retry(client, Method::POST, url, Some(body_bytes)).await?; + + let response: CallResponse = serde_json::from_str(&body) + .map_err(|e| MizanError::transport(format!("decode: {e}")))?; + + if let Some(merges) = response.merge { + for entry in &merges { + client.context_registry() + .merge(&entry.context, entry.params.as_ref(), &entry.slot, &entry.value) + .await; + } + } + if let Some(invalidations) = response.invalidate { + for entry in invalidations { + match entry { + InvalidateEntry::Broad(name) => { + client.invalidation_queue().invalidate(name).await; + } + InvalidateEntry::Scoped { context, params } => { + client.invalidation_queue().invalidate_scoped(context, params).await; + } + } + } + } + + Ok(response.result.unwrap_or(Value::Null)) +} + + +async fn request_with_retry( + client: &MizanClient, + method: Method, + url: Url, + body: Option>, +) -> Result { + client.ensure_session_ready().await?; + + let mut last_err: Option = None; + for attempt in 0..MAX_ATTEMPTS { + let headers = client.resolve_headers().await; + let mut req = client.http().request(method.clone(), url.clone()).headers(headers); + if let Some(bytes) = &body { + req = req.header(reqwest::header::CONTENT_TYPE, "application/json") + .body(bytes.clone()); + } + match req.send().await { + Ok(res) => { + let status = res.status().as_u16(); + let text = res.text().await.unwrap_or_default(); + if status < 400 { + return Ok(text); + } + if (400..500).contains(&status) { + return Err(MizanError::from_response(status, text)); + } + last_err = Some(MizanError::from_response(status, text)); + } + Err(e) => { + last_err = Some(MizanError::transport(e.to_string())); + } + } + if attempt + 1 < MAX_ATTEMPTS { + tokio::time::sleep(BACKOFF_BASE.saturating_mul(attempt + 1)).await; + } + } + Err(last_err.unwrap_or_else(|| MizanError::transport("retry budget exhausted"))) +} + + +#[derive(Deserialize)] +struct CallResponse { + result: Option, + #[serde(default)] + merge: Option>, + #[serde(default)] + invalidate: Option>, +} + + +#[derive(Deserialize)] +struct MergeEntry { + context: String, + #[serde(default)] + params: Option, + slot: String, + value: Value, +} + + +#[derive(Deserialize)] +#[serde(untagged)] +enum InvalidateEntry { + Broad(String), + Scoped { context: String, params: Value }, +} diff --git a/protocol/mizan-codegen/.gitignore b/protocol/mizan-codegen/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/protocol/mizan-codegen/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/protocol/mizan-codegen/Cargo.lock b/protocol/mizan-codegen/Cargo.lock new file mode 100644 index 0000000..c742feb --- /dev/null +++ b/protocol/mizan-codegen/Cargo.lock @@ -0,0 +1,470 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anstream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + +[[package]] +name = "anstyle-parse" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "askama" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28" +dependencies = [ + "askama_derive", + "askama_escape", + "humansize", + "num-traits", + "percent-encoding", +] + +[[package]] +name = "askama_derive" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83" +dependencies = [ + "askama_parser", + "basic-toml", + "mime", + "mime_guess", + "proc-macro2", + "quote", + "serde", + "syn", +] + +[[package]] +name = "askama_escape" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" + +[[package]] +name = "askama_parser" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0" +dependencies = [ + "nom", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "basic-toml" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba62675e8242a4c4e806d12f11d136e626e6c8361d6b829310732241652a178a" +dependencies = [ + "serde", +] + +[[package]] +name = "clap" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + +[[package]] +name = "colorchoice" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown", + "serde", + "serde_core", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "mizan-codegen" +version = "0.1.0" +dependencies = [ + "anyhow", + "askama", + "clap", + "indexmap", + "serde", + "serde_json", + "toml", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "indexmap", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" +dependencies = [ + "memchr", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/protocol/mizan-codegen/Cargo.toml b/protocol/mizan-codegen/Cargo.toml new file mode 100644 index 0000000..2283755 --- /dev/null +++ b/protocol/mizan-codegen/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "mizan-codegen" +version = "0.1.0" +edition = "2021" +description = "Mizan codegen substrate — consumes Mizan IR; emits typed clients for React/Vue/Svelte/Rust/Python." +license = "MIT" + +[[bin]] +name = "mizan-generate" +path = "src/main.rs" + +[lib] +path = "src/lib.rs" + +[dependencies] +askama = "0.12" +clap = { version = "4", features = ["derive"] } +serde = { version = "1", features = ["derive"] } +serde_json = { version = "1", features = ["preserve_order"] } +toml = "0.8" +anyhow = "1" +indexmap = { version = "2", features = ["serde"] } diff --git a/protocol/mizan-codegen/src/config.rs b/protocol/mizan-codegen/src/config.rs new file mode 100644 index 0000000..45b8b70 --- /dev/null +++ b/protocol/mizan-codegen/src/config.rs @@ -0,0 +1,119 @@ +//! Codegen configuration — deserialized from `mizan.toml` at the consumer +//! project root. Replaces the JS substrate's `mizan.config.mjs`. +//! +//! Example: +//! +//! ```toml +//! project_id = "blazr-studio" +//! output = "src/api" +//! targets = ["react"] +//! +//! [source.fastapi] +//! module = "blazr_session.handlers" +//! cwd = "../.." +//! command = ["uv", "run", "python"] +//! +//! [rust_kernel] +//! path = "../../mizan/frontends/mizan-rust" +//! ``` + +use std::collections::BTreeMap; +use std::path::PathBuf; + +use serde::Deserialize; + + +#[derive(Debug, Deserialize)] +pub struct Config { + #[serde(default)] + pub project_id: Option, + + #[serde(default = "default_output")] + pub output: PathBuf, + + #[serde(default = "default_targets")] + pub targets: Vec, + + #[serde(default)] + pub source: SourceConfig, + + #[serde(default)] + pub rust_kernel: Option, + + #[serde(default)] + pub rust_crate_name: Option, +} + + +fn default_output() -> PathBuf { + PathBuf::from("src/api") +} + + +fn default_targets() -> Vec { + vec!["react".to_string()] +} + + +#[derive(Debug, Deserialize, Default)] +pub struct SourceConfig { + #[serde(default)] + pub fastapi: Option, + + #[serde(default)] + pub django: Option, +} + + +#[derive(Debug, Deserialize)] +pub struct FastapiSource { + pub module: String, + + #[serde(default)] + pub cwd: Option, + + #[serde(default)] + pub python: Option, + + #[serde(default)] + pub command: Option>, + + #[serde(default)] + pub env: BTreeMap, +} + + +#[derive(Debug, Deserialize)] +pub struct DjangoSource { + pub manage_path: PathBuf, + + #[serde(default)] + pub python: Option, + + #[serde(default)] + pub command: Option>, + + #[serde(default)] + pub env: BTreeMap, +} + + +#[derive(Debug, Deserialize, Clone)] +#[serde(untagged)] +pub enum RustKernelSpec { + Path { + path: String, + }, + Git { + git: String, + #[serde(default)] + tag: Option, + #[serde(default)] + rev: Option, + #[serde(default)] + branch: Option, + }, + Version { + version: String, + }, +} diff --git a/protocol/mizan-codegen/src/emit/casing.rs b/protocol/mizan-codegen/src/emit/casing.rs new file mode 100644 index 0000000..5a7f3b7 --- /dev/null +++ b/protocol/mizan-codegen/src/emit/casing.rs @@ -0,0 +1,137 @@ +//! Casing transforms — port of `protocol/mizan-generate/generator/lib/casing.mjs`. +//! +//! The Mizan IR uses snake_case names (`user_id`, `update_profile`). Per-target +//! identifier conventions vary: TypeScript wants `pascalCase`/`camelCase`, +//! Rust wants `snake_case` (with `r#`-escaping for keywords). These helpers +//! pin the conversion so emit-targets share one vocabulary. + + +fn split_parts(s: &str) -> Vec<&str> { + s.split(|c: char| c == '.' || c == '-' || c == '_') + .filter(|p| !p.is_empty()) + .collect() +} + + +fn uppercase_first(s: &str) -> String { + let mut chars = s.chars(); + match chars.next() { + Some(first) => first.to_uppercase().chain(chars).collect(), + None => String::new(), + } +} + + +fn lowercase_first(s: &str) -> String { + let mut chars = s.chars(); + match chars.next() { + Some(first) => first.to_lowercase().chain(chars).collect(), + None => String::new(), + } +} + + +pub fn pascal_case(s: &str) -> String { + split_parts(s).into_iter().map(uppercase_first).collect() +} + + +pub fn camel_case(s: &str) -> String { + let pascal = pascal_case(s); + lowercase_first(&pascal) +} + + +/// Insert underscores at lowercase/digit-to-uppercase boundaries, unify with +/// the existing `.`/`-`/`_` separators, then lowercase + join. +pub fn snake_case(s: &str) -> String { + let mut with_boundaries = String::with_capacity(s.len() + 4); + let mut prev: Option = None; + for c in s.chars() { + if let Some(p) = prev { + if (p.is_ascii_lowercase() || p.is_ascii_digit()) && c.is_ascii_uppercase() { + with_boundaries.push('_'); + } + } + with_boundaries.push(c); + prev = Some(c); + } + split_parts(&with_boundaries) + .into_iter() + .map(|p| p.to_ascii_lowercase()) + .collect::>() + .join("_") +} + + +/// Rust reserved words that can be escaped via `r#` (excludes `crate`, `self`, +/// `Self`, `super`, `extern`, which can't be raw-escaped on stable). +const RUST_RAW_KEYWORDS: &[&str] = &[ + "as", "break", "const", "continue", "else", "enum", "false", "fn", "for", + "if", "impl", "in", "let", "loop", "match", "mod", "move", "mut", "pub", + "ref", "return", "static", "struct", "trait", "true", "type", "unsafe", + "use", "where", "while", "async", "await", "dyn", "abstract", "become", + "box", "do", "final", "macro", "override", "priv", "typeof", "unsized", + "virtual", "yield", "try", "union", +]; + +const RUST_HARD_RESERVED: &[&str] = &["crate", "self", "Self", "super", "extern"]; + + +pub fn rust_ident(name: &str) -> String { + let snake = snake_case(name); + if RUST_HARD_RESERVED.contains(&snake.as_str()) { + format!("{snake}_") + } else if RUST_RAW_KEYWORDS.contains(&snake.as_str()) { + format!("r#{snake}") + } else { + snake + } +} + + +pub fn rust_type_ident(name: &str) -> String { + let pascal = pascal_case(name); + if RUST_HARD_RESERVED.contains(&pascal.as_str()) { + format!("{pascal}_") + } else if RUST_RAW_KEYWORDS.contains(&pascal.as_str()) { + format!("r#{pascal}") + } else { + pascal + } +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn pascal_case_matches_js_codegen() { + assert_eq!(pascal_case("user_profile"), "UserProfile"); + assert_eq!(pascal_case("find-user"), "FindUser"); + assert_eq!(pascal_case("api.v1.users"), "ApiV1Users"); + assert_eq!(pascal_case(""), ""); + } + + #[test] + fn camel_case_matches_js_codegen() { + assert_eq!(camel_case("user_profile"), "userProfile"); + assert_eq!(camel_case("UpdateProfile"), "updateProfile"); + } + + #[test] + fn snake_case_inserts_pascal_boundaries() { + assert_eq!(snake_case("UserProfile"), "user_profile"); + assert_eq!(snake_case("camelCase"), "camel_case"); + assert_eq!(snake_case("already_snake"), "already_snake"); + assert_eq!(snake_case("HTTPResponse"), "httpresponse"); // matches JS behavior + } + + #[test] + fn rust_ident_escapes_keywords() { + assert_eq!(rust_ident("type"), "r#type"); + assert_eq!(rust_ident("normal"), "normal"); + assert_eq!(rust_ident("self"), "self_"); + } +} diff --git a/protocol/mizan-codegen/src/emit/channels.rs b/protocol/mizan-codegen/src/emit/channels.rs new file mode 100644 index 0000000..531125e --- /dev/null +++ b/protocol/mizan-codegen/src/emit/channels.rs @@ -0,0 +1,163 @@ +//! Channels target — emits `channels.ts` (typed message envelopes + channel +//! registry) and `channels.hooks.tsx` (`useXChannel` React hooks) from the +//! `x-mizan-channels` extension. Django-only feature; the FastAPI backend's +//! IR carries an empty channels list and this target emits nothing. + +use std::path::PathBuf; + +use askama::Template; +use indexmap::IndexMap; + +use crate::config::Config; +use crate::emit::CodegenTarget; +use crate::emit::EmittedFile; +use crate::ir::{JsonSchema, MizanChannel, MizanIR}; + + +pub struct ChannelsTarget; + + +impl CodegenTarget for ChannelsTarget { + fn name(&self) -> &'static str { "channels" } + + fn emit(&self, ir: &MizanIR, _config: &Config) -> Vec { + if ir.channels.is_empty() { + return Vec::new(); + } + + let schemas_block = emit_channel_schemas(&ir.channels, &ir.components.schemas); + + let types_content = ChannelsTypes { + channels: ir.channels.iter().map(ChannelView::from_ir).collect(), + schemas_block, + }.render().expect("channels.ts renders"); + + let mut type_imports: Vec = Vec::new(); + for ch in &ir.channels { + if ch.has_params { if let Some(t) = &ch.params_type { type_imports.push(t.clone()); } } + if ch.has_react_message { if let Some(t) = &ch.react_message_type { type_imports.push(t.clone()); } } + if ch.has_django_message { if let Some(t) = &ch.django_message_type { type_imports.push(t.clone()); } } + } + + let hooks_content = ChannelsHooks { + channels: ir.channels.iter().map(ChannelView::from_ir).collect(), + type_imports, + }.render().expect("channels.hooks.tsx renders"); + + vec![ + EmittedFile::new(PathBuf::from("channels.ts"), types_content), + EmittedFile::new(PathBuf::from("channels.hooks.tsx"), hooks_content), + ] + } +} + + +#[derive(Template)] +#[template(path = "channels/channels.ts.j2", escape = "none")] +struct ChannelsTypes<'a> { + channels: Vec>, + schemas_block: String, +} + + +#[derive(Template)] +#[template(path = "channels/channels.hooks.tsx.j2", escape = "none")] +struct ChannelsHooks<'a> { + channels: Vec>, + type_imports: Vec, +} + + +struct ChannelView<'a> { + name: &'a str, + pascal_name: &'a str, + has_params: bool, + has_react_message: bool, + has_django_message: bool, + params_type: String, + react_message_type: String, + django_message_type: String, + params_type_or_record: String, + react_msg_type_or_never: String, + django_msg_type_or_never: String, +} + + +impl<'a> ChannelView<'a> { + fn from_ir(ch: &'a MizanChannel) -> Self { + let params_type = ch.params_type.clone().unwrap_or_default(); + let react_message_type = ch.react_message_type.clone().unwrap_or_default(); + let django_message_type = ch.django_message_type.clone().unwrap_or_default(); + + Self { + name: &ch.name, + pascal_name: &ch.pascal_name, + has_params: ch.has_params, + has_react_message: ch.has_react_message, + has_django_message: ch.has_django_message, + params_type_or_record: if ch.has_params { params_type.clone() } else { "Record".to_string() }, + react_msg_type_or_never: if ch.has_react_message { react_message_type.clone() } else { "never".to_string() }, + django_msg_type_or_never: if ch.has_django_message { django_message_type.clone() } else { "never".to_string() }, + params_type, + react_message_type, + django_message_type, + } + } +} + + +fn emit_channel_schemas( + channels: &[MizanChannel], + schemas: &IndexMap, +) -> String { + let mut blocks: Vec = Vec::new(); + for ch in channels { + for ty in [&ch.params_type, &ch.react_message_type, &ch.django_message_type].iter().filter_map(|t| t.as_ref()) { + if let Some(schema) = schemas.get(ty) { + blocks.push(emit_schema_as_ts(ty, schema)); + } + } + } + blocks.join("\n\n") +} + + +fn emit_schema_as_ts(name: &str, schema: &JsonSchema) -> String { + if let Some(props) = &schema.properties { + let required: std::collections::HashSet<&str> = + schema.required.iter().map(String::as_str).collect(); + let fields = props.iter() + .map(|(field_name, field_schema)| { + let opt = if required.contains(field_name.as_str()) { "" } else { "?" }; + let ty = ts_type_expression(field_schema); + format!(" {field_name}{opt}: {ty}") + }) + .collect::>() + .join("\n"); + if fields.is_empty() { + format!("export interface {name} {{}}") + } else { + format!("export interface {name} {{\n{fields}\n}}") + } + } else { + format!("export type {name} = {}", ts_type_expression(schema)) + } +} + + +fn ts_type_expression(schema: &JsonSchema) -> String { + if let Some(ref_name) = schema.ref_name() { + return ref_name.to_string(); + } + match schema.ty.as_deref() { + Some("integer") | Some("number") => "number".to_string(), + Some("boolean") => "boolean".to_string(), + Some("string") => "string".to_string(), + Some("array") => { + let elem = ts_type_expression(schema.items.as_deref().unwrap_or(&JsonSchema::default())); + format!("{elem}[]") + } + Some("object") => "Record".to_string(), + _ => "unknown".to_string(), + } +} diff --git a/protocol/mizan-codegen/src/emit/mod.rs b/protocol/mizan-codegen/src/emit/mod.rs new file mode 100644 index 0000000..1ee1511 --- /dev/null +++ b/protocol/mizan-codegen/src/emit/mod.rs @@ -0,0 +1,67 @@ +//! Emit substrate — per-target codegen lives here. +//! +//! Every target implements `CodegenTarget` and returns the same shape: +//! a `Vec`. The dispatcher in `main.rs` iterates one target +//! per `--target` flag and writes each `EmittedFile` to disk under the +//! configured output directory. +//! +//! Targets land in subsequent phases; Phase 2 establishes the trait so +//! the dispatch surface is settled before any target's emit logic is +//! written. + +use std::path::PathBuf; + +use crate::config::Config; +use crate::ir::MizanIR; + +pub mod casing; +pub mod channels; +pub mod python; +pub mod react; +pub mod rust; +pub mod stage1; +pub mod svelte; +pub mod vue; + + +pub trait CodegenTarget { + /// Stable identifier — matches the `--target` flag value and the + /// `targets = [...]` entry in `mizan.toml`. + fn name(&self) -> &'static str; + + /// Walk the IR and produce the per-target file set. Each path is + /// relative to the consumer's configured `output` directory. + fn emit(&self, ir: &MizanIR, config: &Config) -> Vec; +} + + +pub struct EmittedFile { + pub rel_path: PathBuf, + pub content: String, +} + + +impl EmittedFile { + pub fn new(rel_path: impl Into, content: impl Into) -> Self { + Self { + rel_path: rel_path.into(), + content: content.into(), + } + } +} + + +/// Look up a registered target by name. Returns `None` for unknown +/// targets so the CLI can warn instead of panicking. +pub fn target_by_name(name: &str) -> Option> { + match name { + "stage1" => Some(Box::new(stage1::Stage1)), + "rust" => Some(Box::new(rust::RustCrate)), + "python" => Some(Box::new(python::PythonClient)), + "react" => Some(Box::new(react::ReactAdapter)), + "vue" => Some(Box::new(vue::VueAdapter)), + "svelte" => Some(Box::new(svelte::SvelteAdapter)), + "channels" => Some(Box::new(channels::ChannelsTarget)), + _ => None, + } +} diff --git a/protocol/mizan-codegen/src/emit/python.rs b/protocol/mizan-codegen/src/emit/python.rs new file mode 100644 index 0000000..77dfd41 --- /dev/null +++ b/protocol/mizan-codegen/src/emit/python.rs @@ -0,0 +1,330 @@ +//! Python target — emits a Pydantic-typed client wrapping the PyO3 +//! extension exposed by `mizan-rust`. +//! +//! Output shape lives at `templates/python/*.j2`. Per-method bodies are +//! pre-rendered in Rust before passing into `client.py.j2` so the template +//! only owns top-level section layout, not Python method-signature details. + +use std::path::PathBuf; + +use askama::Template; +use indexmap::IndexMap; + +use crate::config::Config; +use crate::emit::CodegenTarget; +use crate::emit::EmittedFile; +use crate::emit::casing::{pascal_case, rust_ident, snake_case}; +use crate::ir::{IsContext, JsonSchema, MizanContext, MizanFunction, MizanIR}; + + +pub struct PythonClient; + + +impl CodegenTarget for PythonClient { + fn name(&self) -> &'static str { "python" } + + fn emit(&self, ir: &MizanIR, _config: &Config) -> Vec { + let schemas_block = ir.components.schemas.iter() + .map(|(name, schema)| emit_schema_block(name, schema)) + .collect::>() + .join("\n\n"); + + let types_py = TypesTemplate { schemas_block }.render().expect("types.py renders"); + let client_py = build_client_template(ir).render().expect("client.py renders"); + let init_py = InitTemplate {}.render().expect("__init__.py renders"); + + vec![ + EmittedFile::new(PathBuf::from("types.py"), types_py), + EmittedFile::new(PathBuf::from("client.py"), client_py), + EmittedFile::new(PathBuf::from("__init__.py"), init_py), + ] + } +} + + +#[derive(Template)] +#[template(path = "python/__init__.py.j2", escape = "none")] +struct InitTemplate {} + + +#[derive(Template)] +#[template(path = "python/types.py.j2", escape = "none")] +struct TypesTemplate { + schemas_block: String, +} + + +#[derive(Template)] +#[template(path = "python/client.py.j2", escape = "none")] +struct ClientTemplate { + ctx_methods_block: String, + call_methods_block: String, + data_classes_block: String, +} + + +// ─── types.py schema bodies ──────────────────────────────────────────────── + + +fn emit_schema_block(raw_name: &str, schema: &JsonSchema) -> String { + let name = pascal_case(raw_name); + + if let Some(values) = &schema.r#enum { + if schema.ty.as_deref() == Some("string") { + let literal = values.iter() + .filter_map(|v| v.as_str()) + .map(|v| format!("\"{v}\"")) + .collect::>() + .join(", "); + return format!("{name} = Literal[{literal}]"); + } + } + + if schema.ty.as_deref() == Some("array") { + let elem = py_type_from_schema(schema.items.as_deref().unwrap_or(&JsonSchema::default())); + return format!("{name} = list[{elem}]"); + } + + if schema.ty.as_deref() == Some("object") { + if let Some(props) = &schema.properties { + return emit_pydantic_class(&name, schema, props); + } + } + + let ty = py_type_from_schema(schema); + format!("{name} = {ty}") +} + + +fn emit_pydantic_class( + name: &str, + schema: &JsonSchema, + properties: &IndexMap, +) -> String { + if properties.is_empty() { + return format!("class {name}(BaseModel):\n pass"); + } + let required: std::collections::HashSet<&str> = + schema.required.iter().map(String::as_str).collect(); + + let field_lines = properties.iter() + .map(|(field_raw, field_schema)| { + let mut ty = py_type_from_schema(field_schema); + let is_required = required.contains(field_raw.as_str()) + || field_schema.default.is_some(); + if !is_required { + if !ty.ends_with(" | None") { + ty = format!("{ty} | None"); + } + format!(" {}: {ty} = None", rust_ident(field_raw)) + } else { + format!(" {}: {ty}", rust_ident(field_raw)) + } + }) + .collect::>() + .join("\n"); + + format!("class {name}(BaseModel):\n{field_lines}") +} + + +fn py_type_from_schema(schema: &JsonSchema) -> String { + if let Some(ref_name) = schema.ref_name() { + return pascal_case(ref_name); + } + + if let Some(any_of) = &schema.any_of { + let has_null = any_of.iter().any(|s| s.ty.as_deref() == Some("null")); + let non_null: Vec<&JsonSchema> = any_of + .iter() + .filter(|s| s.ty.as_deref() != Some("null")) + .collect(); + if has_null && non_null.len() == 1 { + return format!("{} | None", py_type_from_schema(non_null[0])); + } + } + + let nullable = schema.nullable; + let inner = inner_py_type(schema); + if nullable { + format!("{inner} | None") + } else { + inner + } +} + + +fn inner_py_type(schema: &JsonSchema) -> String { + if let Some(values) = &schema.r#enum { + if schema.ty.as_deref() == Some("string") { + let parts = values.iter() + .filter_map(|v| v.as_str()) + .map(|v| format!("\"{v}\"")) + .collect::>() + .join(", "); + return format!("Literal[{parts}]"); + } + } + match schema.ty.as_deref() { + Some("integer") => "int".to_string(), + Some("number") => "float".to_string(), + Some("boolean") => "bool".to_string(), + Some("string") => "str".to_string(), + Some("array") => { + let elem = py_type_from_schema(schema.items.as_deref().unwrap_or(&JsonSchema::default())); + format!("list[{elem}]") + } + Some("object") => { + if schema.properties.is_some() { "Any".to_string() } + else { "dict[str, Any]".to_string() } + } + _ => "Any".to_string(), + } +} + + +// ─── client.py method blocks ─────────────────────────────────────────────── + + +fn build_client_template(ir: &MizanIR) -> ClientTemplate { + let ctx_methods_block = ir.contexts.iter() + .map(|(ctx_name, ctx_meta)| { + let fetch = emit_fetch_method(ctx_name, ctx_meta); + let subscribe = emit_subscribe_method(ctx_name, ctx_meta); + format!("{fetch}{subscribe}") + }) + .collect::>() + .join("\n"); + + let call_methods_block = ir.functions.iter() + .filter(|f| matches!(f.is_context, IsContext::No) && !f.is_form) + .map(emit_call_method) + .collect::>() + .join("\n"); + + let data_classes_block = ir.contexts.iter() + .map(|(ctx_name, _)| { + let ctx_fns: Vec<&MizanFunction> = ir.functions.iter() + .filter(|f| f.is_context.as_str() == Some(ctx_name)) + .collect(); + emit_context_data_class(ctx_name, &ctx_fns) + }) + .collect::>() + .join("\n"); + + ClientTemplate { ctx_methods_block, call_methods_block, data_classes_block } +} + + +fn py_arg_type(json_ty: &str) -> &'static str { + match json_ty { + "integer" => "int", + "number" => "float", + "boolean" => "bool", + _ => "str", + } +} + + +fn emit_fetch_method(ctx_name: &str, ctx_meta: &MizanContext) -> String { + let method_name = format!("fetch_{}_context", snake_case(ctx_name)); + let param_args = ctx_meta.params.iter() + .map(|(n, m)| { + let ident = rust_ident(n); + let ty = py_arg_type(&m.ty); + if m.required { format!("{ident}: {ty}") } + else { format!("{ident}: {ty} | None = None") } + }) + .collect::>() + .join(", "); + let param_dict = if ctx_meta.params.is_empty() { + "{}".to_string() + } else { + let pairs = ctx_meta.params.iter() + .map(|(n, _)| format!("\"{n}\": {}", rust_ident(n))) + .collect::>() + .join(", "); + format!("{{{pairs}}}") + }; + let data_class = format!("{}ContextData", pascal_case(ctx_name)); + let arg_sig = if param_args.is_empty() { String::new() } else { format!(", {param_args}") }; + + format!( + " def {method_name}(self{arg_sig}) -> \"{data_class}\":\n raw = self._inner.fetch_context(\"{ctx_name}\", {param_dict})\n return {data_class}(**raw)\n", + ) +} + + +fn emit_subscribe_method(ctx_name: &str, ctx_meta: &MizanContext) -> String { + let param_args = ctx_meta.params.iter() + .map(|(n, m)| { + let ident = rust_ident(n); + let ty = py_arg_type(&m.ty); + if m.required { format!("{ident}: {ty}") } + else { format!("{ident}: {ty} | None = None") } + }) + .collect::>() + .join(", "); + let param_dict = if ctx_meta.params.is_empty() { + "{}".to_string() + } else { + let pairs = ctx_meta.params.iter() + .map(|(n, _)| format!("\"{n}\": {}", rust_ident(n))) + .collect::>() + .join(", "); + format!("{{{pairs}}}") + }; + let arg_sig = if param_args.is_empty() { String::new() } else { format!(", {param_args}") }; + let snake = snake_case(ctx_name); + let indent_39 = " ".repeat(39); + + format!( + " def subscribe_{snake}_context(self{arg_sig},\n{indent_39}callback: Callable[[dict[str, Any]], None]) -> PyContextSubscription:\n return self._inner.subscribe_context(\"{ctx_name}\", {param_dict}, callback)\n", + ) +} + + +fn emit_call_method(fn_meta: &MizanFunction) -> String { + let method_name = format!("call_{}", snake_case(&fn_meta.name)); + let pascal_output = pascal_case(&fn_meta.output_type); + + let input_arg = if fn_meta.has_input { + let it = fn_meta.input_type.as_deref().unwrap_or(""); + format!(", args: {}", pascal_case(it)) + } else { + String::new() + }; + let args_expr = if fn_meta.has_input { "args.model_dump()" } else { "{}" }; + let return_type = if fn_meta.output_nullable { + format!("{pascal_output} | None") + } else { + pascal_output.clone() + }; + let decode_expr = if fn_meta.output_nullable { + format!("{pascal_output}(**raw) if raw is not None else None") + } else { + format!("{pascal_output}(**raw)") + }; + + format!( + " def {method_name}(self{input_arg}) -> {return_type}:\n raw = self._inner.call(\"{wire}\", {args_expr})\n return {decode_expr}\n", + wire = fn_meta.name, + ) +} + + +fn emit_context_data_class(ctx_name: &str, ctx_fns: &[&MizanFunction]) -> String { + let class_name = format!("{}ContextData", pascal_case(ctx_name)); + let field_lines = ctx_fns.iter() + .map(|fn_meta| { + let pascal_out = pascal_case(&fn_meta.output_type); + let ty = if fn_meta.output_nullable { format!("{pascal_out} | None") } else { pascal_out }; + format!(" {}: {ty}", rust_ident(&fn_meta.name)) + }) + .collect::>() + .join("\n"); + format!( + "class {class_name}(BaseModel):\n \"\"\"Bundled return of fetch_{snake}_context.\"\"\"\n{field_lines}\n", + snake = snake_case(ctx_name), + ) +} diff --git a/protocol/mizan-codegen/src/emit/react.rs b/protocol/mizan-codegen/src/emit/react.rs new file mode 100644 index 0000000..80ebfd2 --- /dev/null +++ b/protocol/mizan-codegen/src/emit/react.rs @@ -0,0 +1,142 @@ +//! React target — Stage 2 emit on top of Stage 1. Wraps each registered +//! context in a React Provider so kernel subscription happens once per +//! provider mount; consumer hooks read from React Context. +//! +//! Output shape lives at `templates/react/react.tsx.j2`. + +use std::path::PathBuf; + +use askama::Template; + +use crate::config::Config; +use crate::emit::CodegenTarget; +use crate::emit::EmittedFile; +use crate::emit::casing::pascal_case; +use crate::ir::{IsContext, MizanFunction, MizanIR}; + + +pub struct ReactAdapter; + + +impl CodegenTarget for ReactAdapter { + fn name(&self) -> &'static str { "react" } + + fn emit(&self, ir: &MizanIR, _config: &Config) -> Vec { + let content = build_template(ir).render().expect("react template renders"); + vec![EmittedFile::new(PathBuf::from("react.tsx"), content)] + } +} + + +#[derive(Template)] +#[template(path = "react/react.tsx.j2", escape = "none")] +struct ReactTemplate<'a> { + has_global: bool, + stage1_imports: Vec, + global_fns: Vec>, + named_contexts: Vec>, + calls: Vec, +} + + +struct HookRender<'a> { + pascal: String, + output_type: &'a str, + name: &'a str, +} + + +struct CtxRender<'a> { + pascal: String, + name: &'a str, + has_params: bool, + fns: Vec>, +} + + +struct CallRender { + pascal: String, + has_input: bool, +} + + +fn dedupe_preserving_order(items: impl IntoIterator) -> Vec { + let mut seen = std::collections::HashSet::new(); + items.into_iter().filter(|s| seen.insert(s.clone())).collect() +} + + +fn build_template(ir: &MizanIR) -> ReactTemplate<'_> { + let has_global = ir.contexts.contains_key("global"); + + let global_fns: Vec = ir.functions.iter() + .filter(|f| f.is_context.as_str() == Some("global")) + .map(|f| HookRender { + pascal: pascal_case(&f.camel_name), + output_type: &f.output_type, + name: &f.name, + }) + .collect(); + + let named_contexts: Vec = ir.contexts.iter() + .filter(|(n, _)| n.as_str() != "global") + .map(|(ctx_name, ctx_meta)| { + let ctx_fns: Vec = ir.functions.iter() + .filter(|f| f.is_context.as_str() == Some(ctx_name.as_str())) + .map(|f| HookRender { + pascal: pascal_case(&f.camel_name), + output_type: &f.output_type, + name: &f.name, + }) + .collect(); + CtxRender { + pascal: pascal_case(ctx_name), + name: ctx_name, + has_params: !ctx_meta.params.is_empty(), + fns: ctx_fns, + } + }) + .collect(); + + let mutations: Vec<&MizanFunction> = ir.functions.iter() + .filter(|f| matches!(f.is_context, IsContext::No) && !f.is_form && !f.affects.is_empty()) + .collect(); + let plain_fns: Vec<&MizanFunction> = ir.functions.iter() + .filter(|f| matches!(f.is_context, IsContext::No) && !f.is_form && f.affects.is_empty()) + .collect(); + + let calls: Vec = mutations.iter().chain(plain_fns.iter()) + .map(|f| CallRender { + pascal: pascal_case(&f.camel_name), + has_input: f.has_input, + }) + .collect(); + + let mut stage1: Vec = Vec::new(); + for ctx_name in ir.contexts.keys() { + let p = pascal_case(ctx_name); + stage1.push(format!("fetch{p}Context")); + stage1.push(format!("type {p}ContextData")); + stage1.push(format!("type {p}ContextParams")); + } + for fn_meta in mutations.iter().chain(plain_fns.iter()) { + stage1.push(format!("call{}", pascal_case(&fn_meta.camel_name))); + } + let context_fns: Vec<&MizanFunction> = ir.functions.iter() + .filter(|f| !matches!(f.is_context, IsContext::No)) + .collect(); + let output_types = dedupe_preserving_order( + context_fns.iter().map(|f| f.output_type.clone()), + ); + for t in output_types { + stage1.push(format!("type {t}")); + } + + ReactTemplate { + has_global, + stage1_imports: stage1, + global_fns, + named_contexts, + calls, + } +} diff --git a/protocol/mizan-codegen/src/emit/rust.rs b/protocol/mizan-codegen/src/emit/rust.rs new file mode 100644 index 0000000..b1959dc --- /dev/null +++ b/protocol/mizan-codegen/src/emit/rust.rs @@ -0,0 +1,474 @@ +//! Rust target — emits a complete Cargo crate consuming the +//! `mizan-rust` kernel. Output shape lives at `templates/rust/*.j2`. + +use std::path::PathBuf; + +use askama::Template; +use indexmap::IndexMap; + +use crate::config::{Config, RustKernelSpec}; +use crate::emit::CodegenTarget; +use crate::emit::EmittedFile; +use crate::emit::casing::{pascal_case, rust_ident, rust_type_ident, snake_case}; +use crate::ir::{IsContext, JsonSchema, MizanContext, MizanFunction, MizanIR}; + + +pub struct RustCrate; + + +impl CodegenTarget for RustCrate { + fn name(&self) -> &'static str { "rust" } + + fn emit(&self, ir: &MizanIR, config: &Config) -> Vec { + let crate_name = config + .rust_crate_name + .clone() + .unwrap_or_else(|| "mizan_client".to_string()); + + let kernel_dep = format_kernel_dep(config.rust_kernel.as_ref()); + + let mut out: Vec = Vec::new(); + + out.push(EmittedFile::new( + "Cargo.toml", + CargoTemplate { crate_name: &crate_name, kernel_dep: &kernel_dep } + .render().expect("Cargo.toml renders"), + )); + + out.push(EmittedFile::new("src/types.rs", emit_types_rs(&ir.components.schemas))); + + let mut context_modules: Vec = Vec::new(); + for (ctx_name, ctx_meta) in &ir.contexts { + let module_name = snake_case(ctx_name); + out.push(EmittedFile::new( + PathBuf::from("src/contexts").join(format!("{module_name}.rs")), + emit_context_file(ctx_name, ctx_meta, &ir.functions), + )); + context_modules.push(module_name); + } + if !context_modules.is_empty() { + out.push(EmittedFile::new("src/contexts/mod.rs", emit_mod_file(&context_modules))); + } + + let mut mutation_modules: Vec = Vec::new(); + let mut function_modules: Vec = Vec::new(); + for fn_meta in &ir.functions { + if !matches!(fn_meta.is_context, IsContext::No) || fn_meta.is_form { continue; } + let is_mutation = !fn_meta.affects.is_empty(); + let kind = if is_mutation { "mutations" } else { "functions" }; + let module_name = snake_case(&fn_meta.camel_name); + out.push(EmittedFile::new( + PathBuf::from(format!("src/{kind}")).join(format!("{module_name}.rs")), + emit_call_file(fn_meta), + )); + if is_mutation { + mutation_modules.push(module_name); + } else { + function_modules.push(module_name); + } + } + if !mutation_modules.is_empty() { + out.push(EmittedFile::new("src/mutations/mod.rs", emit_mod_file(&mutation_modules))); + } + if !function_modules.is_empty() { + out.push(EmittedFile::new("src/functions/mod.rs", emit_mod_file(&function_modules))); + } + + out.push(EmittedFile::new( + "src/lib.rs", + LibTemplate { + has_contexts: !context_modules.is_empty(), + has_mutations: !mutation_modules.is_empty(), + has_functions: !function_modules.is_empty(), + }.render().expect("lib.rs renders"), + )); + + out + } +} + + +#[derive(Template)] +#[template(path = "rust/Cargo.toml.j2", escape = "none")] +struct CargoTemplate<'a> { + crate_name: &'a str, + kernel_dep: &'a str, +} + + +#[derive(Template)] +#[template(path = "rust/lib.rs.j2", escape = "none")] +struct LibTemplate { + has_contexts: bool, + has_mutations: bool, + has_functions: bool, +} + + +#[derive(Template)] +#[template(path = "rust/mod.rs.j2", escape = "none")] +struct ModTemplate { + modules: Vec, +} + + +#[derive(Template)] +#[template(path = "rust/context.rs.j2", escape = "none")] +struct ContextTemplate<'a> { + pascal: String, + snake: String, + ctx_name: &'a str, + type_imports: Vec, + data_fields: Vec, + params: Vec, +} + + +#[derive(Template)] +#[template(path = "rust/call.rs.j2", escape = "none")] +struct CallTemplate<'a> { + snake: String, + name: &'a str, + return_type: String, + type_imports: Vec, + input_param: String, + args_value: &'static str, +} + + +#[derive(Template)] +#[template(path = "rust/types.rs.j2", escape = "none")] +struct TypesTemplate { + schemas_block: String, + hoisted_enums_block: String, +} + + +struct StructField { + raw_name: String, + ident: String, + ty: String, + has_rename: bool, +} + + +fn dedupe_preserving_order(items: impl IntoIterator) -> Vec { + let mut seen = std::collections::HashSet::new(); + items.into_iter().filter(|s| seen.insert(s.clone())).collect() +} + + +// ─── Cargo.toml ──────────────────────────────────────────────────────────── + + +fn format_kernel_dep(spec: Option<&RustKernelSpec>) -> String { + match spec { + Some(RustKernelSpec::Path { path }) => format!("{{ path = {} }}", json_str(path)), + Some(RustKernelSpec::Git { git, tag, rev, branch }) => { + let mut parts = vec![format!("git = {}", json_str(git))]; + if let Some(t) = tag { parts.push(format!("tag = {}", json_str(t))); } + if let Some(r) = rev { parts.push(format!("rev = {}", json_str(r))); } + if let Some(b) = branch { parts.push(format!("branch = {}", json_str(b))); } + format!("{{ {} }}", parts.join(", ")) + } + Some(RustKernelSpec::Version { version }) => format!("{{ version = {} }}", json_str(version)), + None => "{ version = \"0.1\" }".to_string(), + } +} + + +fn json_str(s: &str) -> String { + serde_json::to_string(s).expect("string literal serializes") +} + + +// ─── mod.rs ──────────────────────────────────────────────────────────────── + + +fn emit_mod_file(module_names: &[String]) -> String { + let mut sorted = module_names.to_vec(); + sorted.sort(); + ModTemplate { modules: sorted }.render().expect("mod.rs renders") +} + + +// ─── Context file ────────────────────────────────────────────────────────── + + +fn emit_context_file( + ctx_name: &str, + ctx_meta: &MizanContext, + all_functions: &[MizanFunction], +) -> String { + let pascal = pascal_case(ctx_name); + let snake = snake_case(ctx_name); + + let ctx_fns: Vec<&MizanFunction> = all_functions + .iter() + .filter(|f| f.is_context.as_str() == Some(ctx_name)) + .collect(); + + let type_imports = dedupe_preserving_order( + ctx_fns.iter().map(|f| rust_type_ident(&f.output_type)), + ); + + let data_fields: Vec = ctx_fns.iter() + .map(|f| { + let ident = rust_ident(&f.name); + StructField { + has_rename: ident != f.name, + raw_name: f.name.clone(), + ident, + ty: rust_type_ident(&f.output_type), + } + }) + .collect(); + + let params: Vec = ctx_meta.params.iter() + .map(|(p_name, p_meta)| { + let ident = rust_ident(p_name); + let base = param_rust_type(&p_meta.ty); + let ty = if p_meta.required { base.to_string() } else { format!("Option<{base}>") }; + StructField { + has_rename: ident != *p_name, + raw_name: p_name.clone(), + ident, + ty, + } + }) + .collect(); + + ContextTemplate { + pascal, + snake, + ctx_name, + type_imports, + data_fields, + params, + }.render().expect("context.rs renders") +} + + +fn param_rust_type(json_ty: &str) -> &'static str { + match json_ty { + "integer" => "i64", + "number" => "f64", + "boolean" => "bool", + _ => "String", + } +} + + +// ─── Call file ───────────────────────────────────────────────────────────── + + +fn emit_call_file(fn_meta: &MizanFunction) -> String { + let output_type = rust_type_ident(&fn_meta.output_type); + let return_type = if fn_meta.output_nullable { + format!("Option<{output_type}>") + } else { + output_type.clone() + }; + + let input_type = fn_meta.input_type.as_deref().map(rust_type_ident); + + let mut used_seed: Vec = vec![output_type.clone()]; + if let Some(t) = &input_type { used_seed.push(t.clone()); } + let type_imports = dedupe_preserving_order(used_seed); + + let (input_param, args_value) = if fn_meta.has_input { + let it = input_type.as_deref().unwrap_or(""); + ( + format!(", args: &{it}"), + "serde_json::to_value(args).unwrap_or(Value::Object(Default::default()))", + ) + } else { + ( + String::new(), + "Value::Object(Default::default())", + ) + }; + + CallTemplate { + snake: snake_case(&fn_meta.name), + name: &fn_meta.name, + return_type, + type_imports, + input_param, + args_value, + }.render().expect("call.rs renders") +} + + +// ─── types.rs ────────────────────────────────────────────────────────────── + + +struct EnumCtx { + hoisted: Vec<(String, Vec)>, + depth: usize, + enum_name: Option, +} + + +fn emit_types_rs(schemas: &IndexMap) -> String { + let mut ctx = EnumCtx { hoisted: Vec::new(), depth: 0, enum_name: None }; + + let schemas_block = schemas.iter() + .map(|(raw_name, schema)| { + let name = rust_type_ident(raw_name); + if let Some(values) = &schema.r#enum { + if schema.ty.as_deref() == Some("string") { + return emit_string_enum(&name, values); + } + } + if schema.ty.as_deref() == Some("array") { + return emit_transparent_array(&name, schema, &mut ctx); + } + if schema.ty.as_deref() == Some("object") { + if let Some(props) = &schema.properties { + return emit_struct(&name, schema, props, &mut ctx); + } + } + emit_type_alias(&name, schema, &mut ctx) + }) + .collect::>() + .join("\n"); + + let hoisted_enums_block = ctx.hoisted.iter() + .map(|(n, v)| emit_string_enum(n, v)) + .collect::>() + .join("\n"); + + TypesTemplate { schemas_block, hoisted_enums_block } + .render().expect("types.rs renders") +} + + +fn emit_string_enum(name: &str, variants: &[serde_json::Value]) -> String { + let body = variants.iter() + .filter_map(|v| v.as_str()) + .map(|v| { + let ident = pascal_case(v); + let rename = if ident == v { + String::new() + } else { + format!(" #[serde(rename = {})]\n", json_str(v)) + }; + format!("{rename} {ident},") + }) + .collect::>() + .join("\n"); + format!( + "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum {name} {{\n{body}\n}}\n", + name = rust_type_ident(name), + ) +} + + +fn emit_transparent_array(name: &str, schema: &JsonSchema, ctx: &mut EnumCtx) -> String { + ctx.depth = 1; + ctx.enum_name = None; + let inner = rust_type_from_schema(schema.items.as_deref().unwrap_or(&JsonSchema::default()), ctx); + format!( + "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(transparent)]\npub struct {name}(pub Vec<{inner}>);\n", + ) +} + + +fn emit_struct( + name: &str, + schema: &JsonSchema, + properties: &IndexMap, + ctx: &mut EnumCtx, +) -> String { + let required: std::collections::HashSet<&str> = + schema.required.iter().map(String::as_str).collect(); + + let fields = properties.iter() + .map(|(field_raw, field_schema)| { + let field_name = rust_ident(field_raw); + ctx.depth = 1; + ctx.enum_name = Some(format!("{name}_{}", pascal_case(field_raw))); + let mut ty = rust_type_from_schema(field_schema, ctx); + let is_required = required.contains(field_raw.as_str()) + || field_schema.default.is_some(); + if !is_required && !ty.starts_with("Option<") { + ty = format!("Option<{ty}>"); + } + let rename = if field_name == *field_raw { + String::new() + } else { + format!(" #[serde(rename = \"{field_raw}\")]\n") + }; + format!("{rename} pub {field_name}: {ty},") + }) + .collect::>() + .join("\n"); + + format!( + "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct {name} {{\n{fields}\n}}\n", + ) +} + + +fn emit_type_alias(name: &str, schema: &JsonSchema, ctx: &mut EnumCtx) -> String { + ctx.depth = 0; + ctx.enum_name = Some(name.to_string()); + let ty = rust_type_from_schema(schema, ctx); + format!("pub type {name} = {ty};\n") +} + + +fn rust_type_from_schema(schema: &JsonSchema, ctx: &mut EnumCtx) -> String { + if let Some(r) = schema.ref_name() { + return rust_type_ident(r); + } + + if let Some(any_of) = &schema.any_of { + let has_null = any_of.iter().any(|s| s.ty.as_deref() == Some("null")); + let non_null: Vec<&JsonSchema> = any_of + .iter() + .filter(|s| s.ty.as_deref() != Some("null")) + .collect(); + if has_null && non_null.len() == 1 { + ctx.enum_name = None; + return format!("Option<{}>", rust_type_from_schema(non_null[0], ctx)); + } + } + + let nullable = schema.nullable; + let inner = inner_rust_type(schema, ctx); + if nullable { + format!("Option<{inner}>") + } else { + inner + } +} + + +fn inner_rust_type(schema: &JsonSchema, ctx: &mut EnumCtx) -> String { + if let Some(values) = &schema.r#enum { + if schema.ty.as_deref() == Some("string") { + let enum_name = ctx + .enum_name + .clone() + .unwrap_or_else(|| format!("Enum_{}", ctx.depth)); + ctx.hoisted.push((enum_name.clone(), values.clone())); + return enum_name; + } + } + match schema.ty.as_deref() { + Some("integer") => "i64".to_string(), + Some("number") => "f64".to_string(), + Some("boolean") => "bool".to_string(), + Some("string") => "String".to_string(), + Some("array") => { + ctx.depth += 1; + ctx.enum_name = None; + let inner = rust_type_from_schema(schema.items.as_deref().unwrap_or(&JsonSchema::default()), ctx); + format!("Vec<{inner}>") + } + Some("object") => "serde_json::Value".to_string(), + _ => "serde_json::Value".to_string(), + } +} diff --git a/protocol/mizan-codegen/src/emit/stage1.rs b/protocol/mizan-codegen/src/emit/stage1.rs new file mode 100644 index 0000000..a7b954e --- /dev/null +++ b/protocol/mizan-codegen/src/emit/stage1.rs @@ -0,0 +1,369 @@ +//! Stage 1 — framework-agnostic TypeScript emission. +//! +//! Output mirrors `protocol/mizan-generate/generator/lib/stage1.mjs`: +//! +//! types.ts — typed declarations for every Pydantic model +//! contexts/.ts — `fetchContext(params)` per context group +//! mutations/.ts — `call(args)` per mutation +//! functions/.ts — `call(args)` per plain function +//! index.ts — re-exports +//! +//! The deterministic per-function/per-context files match the JS codegen +//! byte-for-byte against an identical IR; types.ts emits Pydantic schemas +//! directly as TS interfaces instead of routing through openapi-typescript. +//! Consumers import by name from index.ts so the structural shape of +//! types.ts is not load-bearing — only the named exports are. + +use std::path::PathBuf; + +use askama::Template; +use indexmap::IndexMap; + +use crate::config::Config; +use crate::ir::{IsContext, JsonSchema, MizanContext, MizanFunction, MizanIR}; +use crate::emit::CodegenTarget; +use crate::emit::EmittedFile; +use crate::emit::casing::pascal_case; + + +#[derive(Template)] +#[template(path = "stage1/call.ts.j2", escape = "none")] +struct CallTemplate<'a> { + pascal: &'a str, + name: &'a str, + has_input: bool, + input_type: &'a str, + output_type: &'a str, + type_imports: Vec, +} + + +#[derive(Template)] +#[template(path = "stage1/context.ts.j2", escape = "none")] +struct ContextTemplate<'a> { + pascal: &'a str, + ctx_name: &'a str, + type_imports: Vec, + data_fields: Vec>, + has_params: bool, + params: Vec>, +} + + +struct ContextDataField<'a> { + name: &'a str, + output_type: &'a str, +} + + +struct ContextParamField<'a> { + name: &'a str, + ts_type: &'static str, + required: bool, +} + + +#[derive(Template)] +#[template(path = "stage1/index.ts.j2", escape = "none")] +struct IndexTemplate<'a> { + contexts: Vec>, + calls: Vec>, + framework_adapters: Vec<&'static str>, +} + + +struct IndexContext<'a> { + pascal: String, + name: &'a str, +} + + +struct IndexCall<'a> { + pascal: String, + camel_name: &'a str, + dir: &'static str, +} + + +pub struct Stage1; + + +impl CodegenTarget for Stage1 { + fn name(&self) -> &'static str { "stage1" } + + fn emit(&self, ir: &MizanIR, config: &Config) -> Vec { + let mut out: Vec = Vec::new(); + + out.push(EmittedFile::new("types.ts", emit_types(&ir.components.schemas))); + + for (ctx_name, ctx_meta) in &ir.contexts { + let content = emit_context_file(ctx_name, ctx_meta, &ir.functions); + out.push(EmittedFile::new( + PathBuf::from("contexts").join(format!("{ctx_name}.ts")), + content, + )); + } + + for fn_meta in regular_functions(&ir.functions) { + let dir = if fn_meta.affects.is_empty() { "functions" } else { "mutations" }; + let content = emit_call_file(fn_meta); + out.push(EmittedFile::new( + PathBuf::from(dir).join(format!("{}.ts", fn_meta.camel_name)), + content, + )); + } + + out.push(EmittedFile::new("index.ts", emit_stage1_index(ir, config))); + + out + } +} + + +fn regular_functions(functions: &[MizanFunction]) -> impl Iterator { + functions.iter().filter(|f| matches!(f.is_context, IsContext::No) && !f.is_form) +} + + +fn dedupe_preserving_order(items: impl IntoIterator) -> Vec { + let mut seen = std::collections::HashSet::new(); + items.into_iter().filter(|s| seen.insert(s.clone())).collect() +} + + +// ─── Per-context file ────────────────────────────────────────────────────── + + +fn emit_context_file( + ctx_name: &str, + ctx_meta: &MizanContext, + all_functions: &[MizanFunction], +) -> String { + let pascal = pascal_case(ctx_name); + let ctx_fns: Vec<&MizanFunction> = all_functions + .iter() + .filter(|f| f.is_context.as_str() == Some(ctx_name)) + .collect(); + + let type_imports = dedupe_preserving_order( + ctx_fns.iter().map(|f| f.output_type.clone()), + ); + + let data_fields: Vec = ctx_fns + .iter() + .map(|f| ContextDataField { name: &f.name, output_type: &f.output_type }) + .collect(); + + let params: Vec = ctx_meta.params.iter() + .map(|(name, meta)| ContextParamField { + name, + ts_type: json_ty_to_ts(&meta.ty), + required: meta.required, + }) + .collect(); + + let template = ContextTemplate { + pascal: &pascal, + ctx_name, + type_imports, + data_fields, + has_params: !ctx_meta.params.is_empty(), + params, + }; + template.render().expect("context template renders") +} + + +fn json_ty_to_ts(json_ty: &str) -> &'static str { + match json_ty { + "integer" | "number" => "number", + "boolean" => "boolean", + _ => "string", + } +} + + +// ─── Per-function (call) file — same shape for mutations + plain ────────── + + +fn emit_call_file(fn_meta: &MizanFunction) -> String { + let pascal = pascal_case(&fn_meta.camel_name); + + let mut imports: Vec = Vec::new(); + if fn_meta.has_input { + if let Some(t) = &fn_meta.input_type { imports.push(t.clone()); } + } + imports.push(fn_meta.output_type.clone()); + let type_imports = dedupe_preserving_order(imports); + + let template = CallTemplate { + pascal: &pascal, + name: &fn_meta.name, + has_input: fn_meta.has_input, + input_type: fn_meta.input_type.as_deref().unwrap_or(""), + output_type: &fn_meta.output_type, + type_imports, + }; + template.render().expect("call template renders") +} + + +// ─── Stage 1 index ───────────────────────────────────────────────────────── + + +fn emit_stage1_index(ir: &MizanIR, config: &Config) -> String { + let contexts: Vec = ir.contexts.keys() + .map(|ctx_name| IndexContext { pascal: pascal_case(ctx_name), name: ctx_name }) + .collect(); + + let calls: Vec = regular_functions(&ir.functions) + .map(|fn_meta| IndexCall { + pascal: pascal_case(&fn_meta.camel_name), + camel_name: &fn_meta.camel_name, + dir: if fn_meta.affects.is_empty() { "functions" } else { "mutations" }, + }) + .collect(); + + // Stage 2 single-file frontend adapters get re-exported from index.ts so + // consumers can `import { MizanContext, useEcho } from './api'`. + let framework_adapters: Vec<&'static str> = ["react", "vue", "svelte"].iter() + .copied() + .filter(|t| config.targets.iter().any(|cfg_t| cfg_t == t)) + .collect(); + + IndexTemplate { contexts, calls, framework_adapters } + .render().expect("index template renders") +} + + +// ─── types.ts ────────────────────────────────────────────────────────────── + + +fn emit_types(schemas: &IndexMap) -> String { + let mut out = String::new(); + out.push_str("// AUTO-GENERATED by mizan — do not edit\n\n"); + for (raw_name, schema) in schemas { + out.push_str(&emit_schema_decl(raw_name, schema)); + out.push('\n'); + } + out +} + + +fn emit_schema_decl(name: &str, schema: &JsonSchema) -> String { + // String enum → union of string literals. + if let Some(values) = &schema.r#enum { + if schema.ty.as_deref() == Some("string") { + let union = values + .iter() + .filter_map(|v| v.as_str()) + .map(|s| format!("\"{s}\"")) + .collect::>() + .join(" | "); + return format!("export type {name} = {union}\n"); + } + } + + // Top-level array → array alias. + if schema.ty.as_deref() == Some("array") { + let elem = ts_type_expression(schema.items.as_deref().unwrap_or(&JsonSchema::default())); + return format!("export type {name} = {elem}[]\n"); + } + + // Object with properties → interface declaration. + if schema.ty.as_deref() == Some("object") { + if let Some(props) = &schema.properties { + return emit_interface(name, schema, props); + } + } + + // Fallback — alias to a structural expression. + let expr = ts_type_expression(schema); + format!("export type {name} = {expr}\n") +} + + +fn emit_interface( + name: &str, + schema: &JsonSchema, + properties: &IndexMap, +) -> String { + let required: std::collections::HashSet<&str> = + schema.required.iter().map(String::as_str).collect(); + + let fields = properties + .iter() + .map(|(field_name, field_schema)| { + // Fields are non-optional if they're explicitly required OR + // if they carry a default value (server always populates). + let is_required = required.contains(field_name.as_str()) + || field_schema.default.is_some(); + let opt = if is_required { "" } else { "?" }; + let ty = ts_type_expression(field_schema); + format!(" {field_name}{opt}: {ty}") + }) + .collect::>() + .join("\n"); + + if fields.is_empty() { + format!("export interface {name} {{}}\n") + } else { + format!("export interface {name} {{\n{fields}\n}}\n") + } +} + + +fn ts_type_expression(schema: &JsonSchema) -> String { + // `$ref` → bare type name reference into components.schemas. + if let Some(ref_name) = schema.ref_name() { + return ref_name.to_string(); + } + + // `anyOf` with a null variant → `T | null`. + if let Some(any_of) = &schema.any_of { + let has_null = any_of.iter().any(|s| s.ty.as_deref() == Some("null")); + let non_null: Vec<&JsonSchema> = any_of + .iter() + .filter(|s| s.ty.as_deref() != Some("null")) + .collect(); + if has_null && non_null.len() == 1 { + return format!("{} | null", ts_type_expression(non_null[0])); + } + let union = any_of + .iter() + .map(ts_type_expression) + .collect::>() + .join(" | "); + return union; + } + + if let Some(values) = &schema.r#enum { + if schema.ty.as_deref() == Some("string") { + return values + .iter() + .filter_map(|v| v.as_str()) + .map(|s| format!("\"{s}\"")) + .collect::>() + .join(" | "); + } + } + + let base = match schema.ty.as_deref() { + Some("integer") | Some("number") => "number".to_string(), + Some("boolean") => "boolean".to_string(), + Some("string") => "string".to_string(), + Some("array") => { + let elem = ts_type_expression(schema.items.as_deref().unwrap_or(&JsonSchema::default())); + format!("{elem}[]") + } + Some("object") => "Record".to_string(), + Some("null") => "null".to_string(), + _ => "unknown".to_string(), + }; + + if schema.nullable { + format!("{base} | null") + } else { + base + } +} diff --git a/protocol/mizan-codegen/src/emit/svelte.rs b/protocol/mizan-codegen/src/emit/svelte.rs new file mode 100644 index 0000000..6f294d6 --- /dev/null +++ b/protocol/mizan-codegen/src/emit/svelte.rs @@ -0,0 +1,78 @@ +//! Svelte target — readable store per context, re-export per call. +//! Output shape lives at `templates/svelte/svelte.ts.j2`. + +use std::path::PathBuf; + +use askama::Template; + +use crate::config::Config; +use crate::emit::CodegenTarget; +use crate::emit::EmittedFile; +use crate::emit::casing::pascal_case; +use crate::ir::{IsContext, MizanIR}; + + +pub struct SvelteAdapter; + + +impl CodegenTarget for SvelteAdapter { + fn name(&self) -> &'static str { "svelte" } + + fn emit(&self, ir: &MizanIR, _config: &Config) -> Vec { + let content = build_template(ir).render().expect("svelte template renders"); + vec![EmittedFile::new(PathBuf::from("svelte.ts"), content)] + } +} + + +#[derive(Template)] +#[template(path = "svelte/svelte.ts.j2", escape = "none")] +struct SvelteTemplate<'a> { + stage1_imports: Vec, + contexts: Vec>, + call_exports: Vec, +} + + +struct CtxRender<'a> { + pascal: String, + name: &'a str, + has_params: bool, + params_arg: &'static str, +} + + +fn build_template(ir: &MizanIR) -> SvelteTemplate<'_> { + let contexts: Vec = ir.contexts.iter() + .map(|(ctx_name, ctx_meta)| { + let has_params = !ctx_meta.params.is_empty(); + CtxRender { + pascal: pascal_case(ctx_name), + name: ctx_name, + has_params, + params_arg: if has_params { "params" } else { "{} as any" }, + } + }) + .collect(); + + let mutations = ir.functions.iter() + .filter(|f| matches!(f.is_context, IsContext::No) && !f.is_form && !f.affects.is_empty()); + let plain_fns = ir.functions.iter() + .filter(|f| matches!(f.is_context, IsContext::No) && !f.is_form && f.affects.is_empty()); + let call_exports: Vec = mutations.chain(plain_fns) + .map(|f| pascal_case(&f.camel_name)) + .collect(); + + let mut stage1: Vec = Vec::new(); + for ctx_name in ir.contexts.keys() { + let p = pascal_case(ctx_name); + stage1.push(format!("fetch{p}Context")); + stage1.push(format!("type {p}ContextData")); + stage1.push(format!("type {p}ContextParams")); + } + for c in &call_exports { + stage1.push(format!("call{c}")); + } + + SvelteTemplate { stage1_imports: stage1, contexts, call_exports } +} diff --git a/protocol/mizan-codegen/src/emit/vue.rs b/protocol/mizan-codegen/src/emit/vue.rs new file mode 100644 index 0000000..86077a6 --- /dev/null +++ b/protocol/mizan-codegen/src/emit/vue.rs @@ -0,0 +1,107 @@ +//! Vue target — composable per context + composable per call. +//! Output shape lives at `templates/vue/vue.ts.j2`. + +use std::path::PathBuf; + +use askama::Template; + +use crate::config::Config; +use crate::emit::CodegenTarget; +use crate::emit::EmittedFile; +use crate::emit::casing::pascal_case; +use crate::ir::{IsContext, MizanFunction, MizanIR}; + + +pub struct VueAdapter; + + +impl CodegenTarget for VueAdapter { + fn name(&self) -> &'static str { "vue" } + + fn emit(&self, ir: &MizanIR, _config: &Config) -> Vec { + let content = build_template(ir).render().expect("vue template renders"); + vec![EmittedFile::new(PathBuf::from("vue.ts"), content)] + } +} + + +#[derive(Template)] +#[template(path = "vue/vue.ts.j2", escape = "none")] +struct VueTemplate<'a> { + stage1_imports: Vec, + contexts: Vec>, + calls: Vec, +} + + +struct CtxRender<'a> { + pascal: String, + name: &'a str, + has_params: bool, + params_arg: &'static str, + fns: Vec>, +} + + +struct FnRender<'a> { + camel_name: &'a str, + name: &'a str, + output_type: &'a str, +} + + +struct CallRender { + pascal: String, + has_input: bool, +} + + +fn build_template(ir: &MizanIR) -> VueTemplate<'_> { + let contexts: Vec = ir.contexts.iter() + .map(|(ctx_name, ctx_meta)| { + let has_params = !ctx_meta.params.is_empty(); + let ctx_fns: Vec = ir.functions.iter() + .filter(|f| f.is_context.as_str() == Some(ctx_name.as_str())) + .map(|f| FnRender { + camel_name: &f.camel_name, + name: &f.name, + output_type: &f.output_type, + }) + .collect(); + CtxRender { + pascal: pascal_case(ctx_name), + name: ctx_name, + has_params, + params_arg: if has_params { "params" } else { "{} as any" }, + fns: ctx_fns, + } + }) + .collect(); + + let mutations: Vec<&MizanFunction> = ir.functions.iter() + .filter(|f| matches!(f.is_context, IsContext::No) && !f.is_form && !f.affects.is_empty()) + .collect(); + let plain_fns: Vec<&MizanFunction> = ir.functions.iter() + .filter(|f| matches!(f.is_context, IsContext::No) && !f.is_form && f.affects.is_empty()) + .collect(); + + let calls: Vec = mutations.iter().chain(plain_fns.iter()) + .map(|f| CallRender { + pascal: pascal_case(&f.camel_name), + has_input: f.has_input, + }) + .collect(); + + let mut stage1: Vec = Vec::new(); + for ctx_name in ir.contexts.keys() { + let p = pascal_case(ctx_name); + stage1.push(format!("fetch{p}Context")); + stage1.push(format!("type {p}ContextData")); + stage1.push(format!("type {p}ContextParams")); + } + for fn_meta in mutations.iter().chain(plain_fns.iter()) { + stage1.push(format!("call{}", pascal_case(&fn_meta.camel_name))); + } + + VueTemplate { stage1_imports: stage1, contexts, calls } +} diff --git a/protocol/mizan-codegen/src/fetch.rs b/protocol/mizan-codegen/src/fetch.rs new file mode 100644 index 0000000..b63b7da --- /dev/null +++ b/protocol/mizan-codegen/src/fetch.rs @@ -0,0 +1,149 @@ +//! Schema fetching — spawns the configured backend's schema-export command +//! and deserializes its stdout into a typed `MizanIR`. +//! +//! Two backends recognized today: +//! - FastAPI: `python -m mizan_fastapi.cli ` +//! - Django: `python manage.py export_mizan_schema --indent 0` +//! +//! The fetcher reads stdout, skips any banner text before the first `{`, +//! and parses the remainder as JSON. + +use std::path::{Path, PathBuf}; +use std::process::Command; + +use anyhow::{anyhow, Context, Result}; + +use crate::config::{Config, DjangoSource, FastapiSource}; +use crate::ir::MizanIR; + + +pub fn fetch_schema(config: &Config, config_dir: &Path) -> Result { + let raw = if let Some(fa) = &config.source.fastapi { + run_fastapi(fa, config_dir)? + } else if let Some(dj) = &config.source.django { + run_django(dj, config_dir)? + } else { + return Err(anyhow!( + "config.source must declare either [source.fastapi] or [source.django]" + )); + }; + + parse_ir(&raw) +} + + +fn run_fastapi(src: &FastapiSource, config_dir: &Path) -> Result { + let cwd = match &src.cwd { + Some(rel) => config_dir.join(rel), + None => config_dir.to_path_buf(), + }; + + let (program, mut args) = resolve_command(&src.command, &src.python); + args.extend([ + "-m".to_string(), + "mizan_fastapi.cli".to_string(), + src.module.clone(), + ]); + + run_subprocess(&program, &args, &cwd, &src.env, "FastAPI schema export") +} + + +fn run_django(src: &DjangoSource, config_dir: &Path) -> Result { + let manage_path = config_dir.join(&src.manage_path); + let manage_dir = manage_path + .parent() + .ok_or_else(|| anyhow!("django manage_path has no parent: {}", manage_path.display()))? + .to_path_buf(); + + let (program, mut args) = resolve_command(&src.command, &src.python); + + // If the user supplied an explicit command (e.g. `uv run python`), they + // expect to invoke from the manage_dir without a path prefix on manage.py. + // Otherwise we pass the absolute manage_path so the python interpreter + // doesn't depend on cwd. + if src.command.is_some() { + args.push("manage.py".to_string()); + } else { + args.push(manage_path.to_string_lossy().into_owned()); + } + args.extend([ + "export_mizan_schema".to_string(), + "--indent".to_string(), + "0".to_string(), + ]); + + run_subprocess(&program, &args, &manage_dir, &src.env, "Django schema export") +} + + +fn resolve_command( + explicit: &Option>, + python_override: &Option, +) -> (String, Vec) { + if let Some(cmd) = explicit { + let (head, tail) = cmd.split_first().expect("command must be non-empty"); + return (head.clone(), tail.to_vec()); + } + let python = python_override.as_deref().unwrap_or("python"); + (python.to_string(), Vec::new()) +} + + +fn run_subprocess( + program: &str, + args: &[String], + cwd: &Path, + env: &std::collections::BTreeMap, + label: &str, +) -> Result { + let mut cmd = Command::new(program); + cmd.args(args).current_dir(cwd); + for (k, v) in env { + cmd.env(k, v); + } + + let output = cmd + .output() + .with_context(|| format!("spawning {label} ({program})"))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + let stdout = String::from_utf8_lossy(&output.stdout); + return Err(anyhow!( + "{label} failed (exit {:?})\n--- stderr ---\n{stderr}\n--- stdout ---\n{stdout}", + output.status.code(), + )); + } + + let stdout = String::from_utf8(output.stdout) + .with_context(|| format!("{label}: non-UTF-8 stdout"))?; + Ok(stdout) +} + + +fn parse_ir(raw: &str) -> Result { + let json_start = raw + .find('{') + .ok_or_else(|| anyhow!("no JSON object found in schema-export output"))?; + serde_json::from_str(&raw[json_start..]).context("deserializing Mizan IR from schema JSON") +} + + +/// Library helper for tests: deserialize an IR from a pre-fetched JSON string +/// (no subprocess). Mirrors `parse_ir` but exposed for crate-external callers. +pub fn parse_ir_from_str(json: &str) -> Result { + parse_ir(json) +} + + +/// Library helper: resolve a path relative to the config directory, returning +/// an absolute path. Consumers may want this when constructing output paths. +pub fn resolve_path(config_dir: &Path, p: impl Into) -> PathBuf { + let p = p.into(); + if p.is_absolute() { + p + } else { + config_dir.join(p) + } +} diff --git a/protocol/mizan-codegen/src/ir.rs b/protocol/mizan-codegen/src/ir.rs new file mode 100644 index 0000000..1187aa9 --- /dev/null +++ b/protocol/mizan-codegen/src/ir.rs @@ -0,0 +1,248 @@ +//! Mizan IR — strongly-typed deserialization of the backends' schema export. +//! +//! Every Mizan backend (Django, FastAPI, mizan-ts) emits the same OpenAPI +//! document with three load-bearing extension fields: +//! - `x-mizan-functions` — array of function entries +//! - `x-mizan-contexts` — map of context groups +//! - `components.schemas` — OpenAPI Pydantic→JSONSchema per Input/Output +//! +//! The structs here deserialize that JSON envelope into typed Rust values +//! the emit targets walk. The OpenAPI document body (paths, info, etc.) is +//! intentionally not modeled — the codegen consumes only the extensions. + +use std::collections::BTreeMap; + +use indexmap::IndexMap; +use serde::Deserialize; + + +#[derive(Debug, Deserialize)] +pub struct MizanIR { + #[serde(rename = "x-mizan-functions", default)] + pub functions: Vec, + + #[serde(rename = "x-mizan-contexts", default)] + pub contexts: IndexMap, + + /// Django-only channel registrations. FastAPI backends emit an empty list. + #[serde(rename = "x-mizan-channels", default)] + pub channels: Vec, + + #[serde(default)] + pub components: Components, +} + + +#[derive(Debug, Deserialize, Clone)] +pub struct MizanChannel { + pub name: String, + #[serde(rename = "pascalName")] + pub pascal_name: String, + #[serde(rename = "hasParams", default)] + pub has_params: bool, + #[serde(rename = "hasReactMessage", default)] + pub has_react_message: bool, + #[serde(rename = "hasDjangoMessage", default)] + pub has_django_message: bool, + #[serde(rename = "paramsType", default)] + pub params_type: Option, + #[serde(rename = "reactMessageType", default)] + pub react_message_type: Option, + #[serde(rename = "djangoMessageType", default)] + pub django_message_type: Option, +} + + +#[derive(Debug, Deserialize, Clone)] +pub struct MizanFunction { + pub name: String, + + #[serde(rename = "camelName")] + pub camel_name: String, + + #[serde(rename = "hasInput")] + pub has_input: bool, + + #[serde(rename = "inputType")] + pub input_type: Option, + + #[serde(rename = "outputType")] + pub output_type: String, + + #[serde(rename = "outputNullable", default)] + pub output_nullable: bool, + + pub transport: Transport, + + #[serde(rename = "isContext", default)] + pub is_context: IsContext, + + #[serde(rename = "isForm", default)] + pub is_form: bool, + + #[serde(rename = "formName", default)] + pub form_name: Option, + + #[serde(rename = "formRole", default)] + pub form_role: Option, + + #[serde(default)] + pub affects: Vec, + + /// Names of contexts whose state is patched by this function's return + /// body via the kernel's `splice_slot` merger. Empty when the function + /// is not a merge target. + #[serde(default)] + pub merge: Vec, +} + + +#[derive(Debug, Deserialize, Default, Clone, Copy, PartialEq, Eq)] +#[serde(rename_all = "lowercase")] +pub enum Transport { + #[default] + Http, + Websocket, + Both, +} + + +/// IR-level `isContext` value. The backends emit `false` for non-context +/// functions and a string (`"global"`, `"user"`, …) for context-grouped +/// functions. Custom Deserialize bridges the boolean/string union into a +/// typed Rust enum. +#[derive(Debug, Default, Clone, PartialEq, Eq)] +pub enum IsContext { + #[default] + No, + Yes(String), +} + +impl IsContext { + pub fn as_str(&self) -> Option<&str> { + match self { + IsContext::No => None, + IsContext::Yes(s) => Some(s.as_str()), + } + } +} + +impl<'de> Deserialize<'de> for IsContext { + fn deserialize(de: D) -> Result + where + D: serde::Deserializer<'de>, + { + let v = serde_json::Value::deserialize(de)?; + match v { + serde_json::Value::Bool(false) => Ok(IsContext::No), + serde_json::Value::Bool(true) => Err(serde::de::Error::custom( + "isContext: bare `true` is not a valid context name", + )), + serde_json::Value::String(s) => Ok(IsContext::Yes(s)), + serde_json::Value::Null => Ok(IsContext::No), + other => Err(serde::de::Error::custom(format!( + "isContext: expected `false` or string, got {other:?}" + ))), + } + } +} + + +#[derive(Debug, Deserialize, Clone)] +pub struct AffectTarget { + #[serde(rename = "type")] + pub kind: AffectKind, + pub name: String, + #[serde(default)] + pub context: Option, +} + + +#[derive(Debug, Deserialize, Clone, Copy, PartialEq, Eq)] +#[serde(rename_all = "lowercase")] +pub enum AffectKind { + Context, + Function, +} + + +#[derive(Debug, Deserialize, Default, Clone)] +pub struct MizanContext { + #[serde(default)] + pub functions: Vec, + #[serde(default)] + pub params: IndexMap, +} + + +#[derive(Debug, Deserialize, Clone)] +pub struct ContextParam { + #[serde(rename = "type")] + pub ty: String, + + pub required: bool, + + #[serde(rename = "sharedBy", default)] + pub shared_by: Vec, +} + + +#[derive(Debug, Deserialize, Default)] +pub struct Components { + #[serde(default)] + pub schemas: IndexMap, +} + + +/// JSON Schema subset used by the emit targets. Mirrors the surface the +/// existing JS adapters traverse (`$ref`, `anyOf`, `enum`, `type`, `items`, +/// `properties`, `required`, `nullable`). Unknown fields are stashed in +/// `extra` so backends can include schema annotations the codegen ignores. +#[derive(Debug, Deserialize, Default, Clone)] +pub struct JsonSchema { + #[serde(rename = "type", default)] + pub ty: Option, + + #[serde(rename = "$ref", default)] + pub r#ref: Option, + + #[serde(rename = "enum", default)] + pub r#enum: Option>, + + #[serde(rename = "anyOf", default)] + pub any_of: Option>, + + #[serde(default)] + pub nullable: bool, + + #[serde(default)] + pub items: Option>, + + #[serde(default)] + pub properties: Option>, + + #[serde(default)] + pub required: Vec, + + #[serde(rename = "additionalProperties", default)] + pub additional_properties: Option, + + /// Presence of this field means the schema has a default — the server + /// always populates it. Consumers can treat the field as non-optional + /// even if it's absent from `required`. + #[serde(default)] + pub default: Option, + + #[serde(flatten)] + pub extra: BTreeMap, +} + + +impl JsonSchema { + /// `$ref: "#/components/schemas/Foo"` → `Some("Foo")`. + pub fn ref_name(&self) -> Option<&str> { + self.r#ref + .as_deref() + .and_then(|s| s.strip_prefix("#/components/schemas/")) + } +} diff --git a/protocol/mizan-codegen/src/lib.rs b/protocol/mizan-codegen/src/lib.rs new file mode 100644 index 0000000..f7118f8 --- /dev/null +++ b/protocol/mizan-codegen/src/lib.rs @@ -0,0 +1,10 @@ +//! Mizan codegen — library surface for tests and tooling. +//! +//! The binary `mizan-generate` (src/main.rs) is the consumer entry point; +//! the library re-exports IR / config / fetch / emit so integration tests +//! can drive the substrate without spawning the binary. + +pub mod config; +pub mod emit; +pub mod fetch; +pub mod ir; diff --git a/protocol/mizan-codegen/src/main.rs b/protocol/mizan-codegen/src/main.rs new file mode 100644 index 0000000..1551115 --- /dev/null +++ b/protocol/mizan-codegen/src/main.rs @@ -0,0 +1,164 @@ +//! `mizan-generate` — Rust codegen binary. +//! +//! Replaces the Node-based `protocol/mizan-generate/generator/cli.mjs`. +//! Reads `mizan.toml`, spawns the configured backend to fetch the IR, and +//! dispatches each `--target` to its `CodegenTarget` impl. Per-target file +//! emission writes under the configured `output` directory. + +use std::fs; +use std::path::{Path, PathBuf}; + +use anyhow::{Context, Result}; +use clap::Parser; + +use mizan_codegen::{config, emit, fetch}; + + +#[derive(Parser, Debug)] +#[command( + name = "mizan-generate", + about = "Mizan code generator — consumes Mizan IR; emits typed clients.", +)] +struct Cli { + /// Path to the codegen config file. + #[arg(short, long, default_value = "mizan.toml")] + config: PathBuf, + + /// Output directory (overrides `output` in config). + #[arg(short, long)] + output: Option, + + /// Comma-separated list of targets (overrides `targets` in config). + #[arg(short, long)] + target: Option, + + /// Read the IR from a JSON file instead of spawning the backend's + /// schema-export command. The fixture path used by integration tests. + #[arg(long)] + from_json: Option, +} + + +fn main() -> Result<()> { + let cli = Cli::parse(); + + let config_exists = cli.config.exists(); + let mut config: config::Config = if config_exists { + let config_text = fs::read_to_string(&cli.config) + .with_context(|| format!("reading config: {}", cli.config.display()))?; + toml::from_str(&config_text) + .with_context(|| format!("parsing TOML: {}", cli.config.display()))? + } else if cli.from_json.is_some() { + // --from-json bypasses the fetcher, so a missing config is fine — + // CLI flags supply output + targets. + config::Config { + project_id: None, + output: PathBuf::from("."), + targets: vec![], + source: Default::default(), + rust_kernel: None, + rust_crate_name: None, + } + } else { + return Err(anyhow::anyhow!( + "config not found: {} (pass --from-json to skip fetch)", + cli.config.display(), + )); + }; + + if let Some(o) = cli.output { + config.output = o; + } + if let Some(t) = cli.target { + config.targets = t.split(',').map(|s| s.trim().to_string()).collect(); + } + + let config_dir = if config_exists { + resolve_config_dir(&cli.config)? + } else { + std::env::current_dir()? + }; + + let ir = if let Some(json_path) = &cli.from_json { + let abs = if json_path.is_absolute() { + json_path.clone() + } else { + config_dir.join(json_path) + }; + eprintln!("[mizan] Reading IR from {}", abs.display()); + let raw = fs::read_to_string(&abs) + .with_context(|| format!("read {}", abs.display()))?; + fetch::parse_ir_from_str(&raw)? + } else { + eprintln!("[mizan] Fetching schema..."); + fetch::fetch_schema(&config, &config_dir)? + }; + + eprintln!( + "[mizan] Loaded {} function(s), {} context group(s), {} schema(s)", + ir.functions.len(), + ir.contexts.len(), + ir.components.schemas.len(), + ); + + // Stage 1 is the framework-agnostic foundation that react/vue/svelte + // import from. Auto-include it whenever any consumer of `./index` + // (the Stage 1 re-export root) is in the target set. + let needs_stage1 = config.targets.iter() + .any(|t| matches!(t.as_str(), "react" | "vue" | "svelte")); + if needs_stage1 && !config.targets.iter().any(|t| t == "stage1") { + config.targets.insert(0, "stage1".to_string()); + } + // Channels schema piggybacks on the main schema (x-mizan-channels); + // auto-include the channels emit when react is the target and the + // schema actually carries channels. + if config.targets.iter().any(|t| t == "react") + && !ir.channels.is_empty() + && !config.targets.iter().any(|t| t == "channels") + { + config.targets.push("channels".to_string()); + } + + eprintln!("[mizan] Targets: {}", config.targets.join(", ")); + + let output_dir = if config.output.is_absolute() { + config.output.clone() + } else { + config_dir.join(&config.output) + }; + + for target_name in &config.targets { + let Some(target) = emit::target_by_name(target_name) else { + eprintln!("[mizan] WARN: target '{target_name}' has no emitter yet (Phase 2 scaffold)"); + continue; + }; + let files = target.emit(&ir, &config); + for file in files { + let path = output_dir.join(&file.rel_path); + write_output(&path, &file.content)?; + eprintln!("[mizan] {} -> {}", target.name(), file.rel_path.display()); + } + } + + eprintln!("[mizan] Generation complete."); + Ok(()) +} + + +fn resolve_config_dir(config_path: &Path) -> Result { + let abs = fs::canonicalize(config_path) + .with_context(|| format!("canonicalize {}", config_path.display()))?; + Ok(abs + .parent() + .map(|p| p.to_path_buf()) + .unwrap_or_else(|| PathBuf::from("."))) +} + + +fn write_output(path: &Path, content: &str) -> Result<()> { + if let Some(parent) = path.parent() { + fs::create_dir_all(parent) + .with_context(|| format!("mkdir {}", parent.display()))?; + } + fs::write(path, content).with_context(|| format!("write {}", path.display())) +} diff --git a/protocol/mizan-codegen/templates/channels/channels.hooks.tsx.j2 b/protocol/mizan-codegen/templates/channels/channels.hooks.tsx.j2 new file mode 100644 index 0000000..54f64b0 --- /dev/null +++ b/protocol/mizan-codegen/templates/channels/channels.hooks.tsx.j2 @@ -0,0 +1,26 @@ +'use client' + +// AUTO-GENERATED by mizan — do not edit + +import { useChannel, type ChannelSubscription } from 'mizan/channels' + +{% if !type_imports.is_empty() -%} +import type { {{ type_imports|join(", ") }} } from './channels' + +{% endif -%} +// ── Channel Hooks ───────────────────────────────────────────────────────── + +{% for ch in channels -%} +/** + * Hook for the {{ ch.name }} channel. + */ +{% if ch.has_params -%} +export function use{{ ch.pascal_name }}Channel(params: {{ ch.params_type_or_record }}): ChannelSubscription<{{ ch.params_type_or_record }}, {{ ch.django_msg_type_or_never }}, {{ ch.react_msg_type_or_never }}> { + return useChannel('{{ ch.name }}', params) +} +{% else -%} +export function use{{ ch.pascal_name }}Channel(): ChannelSubscription, {{ ch.django_msg_type_or_never }}, {{ ch.react_msg_type_or_never }}> { + return useChannel('{{ ch.name }}', {}) +} +{% endif %} +{% endfor -%} diff --git a/protocol/mizan-codegen/templates/channels/channels.ts.j2 b/protocol/mizan-codegen/templates/channels/channels.ts.j2 new file mode 100644 index 0000000..677188b --- /dev/null +++ b/protocol/mizan-codegen/templates/channels/channels.ts.j2 @@ -0,0 +1,26 @@ +// AUTO-GENERATED by mizan — do not edit + +{{ schemas_block }} +// ── Channel Registry ────────────────────────────────────────────────────── + +export const CHANNELS = { +{%- for ch in channels %} + {{ ch.name }}: { + name: '{{ ch.name }}', + pascalName: '{{ ch.pascal_name }}', + hasParams: {{ ch.has_params }}, + hasReactMessage: {{ ch.has_react_message }}, + hasDjangoMessage: {{ ch.has_django_message }}, +{%- if ch.has_params %} + paramsType: '{{ ch.params_type }}', +{%- endif %} +{%- if ch.has_react_message %} + reactMessageType: '{{ ch.react_message_type }}', +{%- endif %} +{%- if ch.has_django_message %} + djangoMessageType: '{{ ch.django_message_type }}', +{%- endif %} + }, +{%- endfor %} +} as const + diff --git a/protocol/mizan-codegen/templates/python/__init__.py.j2 b/protocol/mizan-codegen/templates/python/__init__.py.j2 new file mode 100644 index 0000000..dc55c53 --- /dev/null +++ b/protocol/mizan-codegen/templates/python/__init__.py.j2 @@ -0,0 +1,5 @@ +# AUTO-GENERATED by mizan — do not edit + +from .client import MizanClient # noqa: F401 +from .types import * # noqa: F401, F403 + diff --git a/protocol/mizan-codegen/templates/python/client.py.j2 b/protocol/mizan-codegen/templates/python/client.py.j2 new file mode 100644 index 0000000..eb1fc6d --- /dev/null +++ b/protocol/mizan-codegen/templates/python/client.py.j2 @@ -0,0 +1,39 @@ +# AUTO-GENERATED by mizan — do not edit + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +# Built from frontends/mizan-rust with `maturin develop --features pyo3`. +from mizan_rust import PyMizanClient, PyContextSubscription + +from .types import * # noqa: F401, F403 +from .types import BaseModel # re-import for the synthesized ContextData classes + + +class MizanClient: + """Typed Python facade over the PyO3 mizan-rust kernel.""" + + def __init__(self, base_url: str, *, session: bool = False, + csrf_cookie_name: str = "csrftoken", + csrf_header_name: str = "X-CSRFToken") -> None: + self._inner = PyMizanClient( + base_url, + session=session, + csrf_cookie_name=csrf_cookie_name, + csrf_header_name=csrf_header_name, + ) + +{{ ctx_methods_block }} +{{ call_methods_block }} + def invalidate(self, context: str) -> None: + self._inner.invalidate(context) + + def invalidate_scoped(self, context: str, params: dict[str, Any]) -> None: + self._inner.invalidate_scoped(context, params) + + +# ── Context data shapes (per-context bundle) ────────────────────────────── + +{{ data_classes_block }} diff --git a/protocol/mizan-codegen/templates/python/types.py.j2 b/protocol/mizan-codegen/templates/python/types.py.j2 new file mode 100644 index 0000000..2d233b1 --- /dev/null +++ b/protocol/mizan-codegen/templates/python/types.py.j2 @@ -0,0 +1,10 @@ +# AUTO-GENERATED by mizan — do not edit + +from __future__ import annotations + +from typing import Any, Literal + +from pydantic import BaseModel + +{{ schemas_block }} + diff --git a/protocol/mizan-codegen/templates/react/react.tsx.j2 b/protocol/mizan-codegen/templates/react/react.tsx.j2 new file mode 100644 index 0000000..8895b19 --- /dev/null +++ b/protocol/mizan-codegen/templates/react/react.tsx.j2 @@ -0,0 +1,180 @@ +'use client' + +// AUTO-GENERATED by mizan — do not edit + +import { + createContext, + useCallback, + useContext, + useEffect, + useRef, + useState, + useSyncExternalStore, + type ReactNode, +} from 'react' +import { + configure, + initSession, + mizanCall, + mizanFetch, + MizanError, + registerContext, + type ContextState, +} from '@mizan/base' + +{% if !stage1_imports.is_empty() -%} +import { {{ stage1_imports|join(", ") }} } from './index' + +{% endif -%} +// Internal — runs inside a Provider, registers with the kernel exactly once. +function useContextSubscription( + name: string, + params: Record, + fetchFn: () => Promise, + initialData?: T, +): ContextState { + const ref = useRef | null>(null) + if (!ref.current) { + ref.current = registerContext(name, params, fetchFn, initialData) + } + const handle = ref.current + + useEffect(() => { + if (handle.getState().status === 'idle') handle.refetch() + return () => handle.unregister() + }, [handle]) + + return useSyncExternalStore(handle.subscribe, handle.getState, handle.getState) +} + +// Internal — wraps an imperative call() with isPending / error state. +interface MutationHook { + mutate: (args: TArgs) => Promise + isPending: boolean + error: Error | null +} + +function useMutation( + callFn: (args: TArgs) => Promise, +): MutationHook { + const [isPending, setIsPending] = useState(false) + const [error, setError] = useState(null) + + const mutate = useCallback(async (args: TArgs) => { + setIsPending(true) + setError(null) + try { + return await callFn(args) + } catch (e) { + setError(e as Error) + throw e + } finally { + setIsPending(false) + } + }, [callFn]) + + return { mutate, isPending, error } +} +{% if has_global %} +// ── Global Context ── + +const GlobalCtx = createContext | null>(null) + +export function GlobalContextProvider({ children }: { children: ReactNode }) { + const ssrData = typeof window !== 'undefined' ? (window as any).__MIZAN_SSR_DATA__ : undefined + const state = useContextSubscription('global', {}, () => fetchGlobalContext({} as any), ssrData) + return {children} +} + +export function useGlobalContext(): ContextState { + const ctx = useContext(GlobalCtx) + if (!ctx) throw new Error('useGlobalContext requires or ') + return ctx +} +{% for fn in global_fns %} +export function use{{ fn.pascal }}(): {{ fn.output_type }} | null { + return useGlobalContext().data?.{{ fn.name }} ?? null +} +{% endfor -%} +{% endif -%} +{% for ctx in named_contexts %} +// ── {{ ctx.pascal }} Context ── + +const {{ ctx.pascal }}Ctx = createContext | null>(null) + +{% if ctx.has_params -%} +export function {{ ctx.pascal }}Context({ children, ...params }: {{ ctx.pascal }}ContextParams & { children: ReactNode }) { + const state = useContextSubscription('{{ ctx.name }}', params, () => fetch{{ ctx.pascal }}Context(params)) + return <{{ ctx.pascal }}Ctx.Provider value={state}>{children} +} +{% else -%} +export function {{ ctx.pascal }}Context({ children }: { children: ReactNode }) { + const state = useContextSubscription('{{ ctx.name }}', {}, () => fetch{{ ctx.pascal }}Context({} as any)) + return <{{ ctx.pascal }}Ctx.Provider value={state}>{children} +} +{% endif %} +export function use{{ ctx.pascal }}Context(): ContextState<{{ ctx.pascal }}ContextData> { + const ctx = useContext({{ ctx.pascal }}Ctx) + if (!ctx) throw new Error('use{{ ctx.pascal }}Context requires <{{ ctx.pascal }}Context>') + return ctx +} +{% for fn in ctx.fns %} +export function use{{ fn.pascal }}(): {{ fn.output_type }} | null { + return use{{ ctx.pascal }}Context().data?.{{ fn.name }} ?? null +} +{% endfor -%} +{% endfor -%} +{% for call in calls %} +{% if call.has_input -%} +export function use{{ call.pascal }}() { + return useMutation[0], Awaited>>(call{{ call.pascal }}) +} +{% else -%} +export function use{{ call.pascal }}() { + return useMutation>>(() => call{{ call.pascal }}() as any) +} +{% endif -%} +{% endfor %} +// ── MizanContext root provider ── + +export interface MizanContextProps { + /** Base URL for protocol endpoints. Defaults to "/api/mizan". */ + baseUrl?: string + /** Set to `false` for backends without a `/session/` endpoint (e.g. FastAPI). */ + session?: boolean + children: ReactNode +} + +/** + * Root provider — calls configure() once and mounts the global context (if defined). + * Must wrap any component using Mizan-generated hooks. + */ +export function MizanContext({ baseUrl, session, children }: MizanContextProps) { + const configured = useRef(false) + if (!configured.current) { + const opts: Parameters[0] = {} + if (baseUrl !== undefined) opts.baseUrl = baseUrl + if (session !== undefined) opts.session = session + if (Object.keys(opts).length > 0) configure(opts) + configured.current = true + } +{%- if has_global %} + return {children} +{%- else %} + return <>{children} +{%- endif %} +} + +// ── Imperative escape hatch ── + +/** + * Returns the imperative kernel API. For test harnesses or rare cases where + * a typed generated hook does not fit. Most app code should use the typed hooks. + */ +export function useMizan() { + return { call: mizanCall, fetch: mizanFetch } +} + +export type { ContextState } from '@mizan/base' +export { configure, initSession, MizanError } from '@mizan/base' + diff --git a/protocol/mizan-codegen/templates/rust/Cargo.toml.j2 b/protocol/mizan-codegen/templates/rust/Cargo.toml.j2 new file mode 100644 index 0000000..32c4380 --- /dev/null +++ b/protocol/mizan-codegen/templates/rust/Cargo.toml.j2 @@ -0,0 +1,11 @@ +[package] +name = "{{ crate_name }}" +version = "0.1.0" +edition = "2021" + +[dependencies] +mizan-rust = {{ kernel_dep }} +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tokio = { version = "1", features = ["rt", "macros"] } + diff --git a/protocol/mizan-codegen/templates/rust/call.rs.j2 b/protocol/mizan-codegen/templates/rust/call.rs.j2 new file mode 100644 index 0000000..e4da810 --- /dev/null +++ b/protocol/mizan-codegen/templates/rust/call.rs.j2 @@ -0,0 +1,17 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +{% if !type_imports.is_empty() -%} +use crate::types::{ {{- type_imports|join(", ") -}} }; + +{% endif -%} +pub async fn call_{{ snake }}(client: &MizanClient{{ input_param }}) -> Result<{{ return_type }}, MizanError> { + let args_value = {{ args_value }}; + let raw = client.call("{{ name }}", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode {{ name }} result: {e}"))) +} + diff --git a/protocol/mizan-codegen/templates/rust/context.rs.j2 b/protocol/mizan-codegen/templates/rust/context.rs.j2 new file mode 100644 index 0000000..da0352d --- /dev/null +++ b/protocol/mizan-codegen/templates/rust/context.rs.j2 @@ -0,0 +1,37 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +{% if !type_imports.is_empty() -%} +use crate::types::{ {{- type_imports|join(", ") -}} }; + +{% endif -%} +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct {{ pascal }}ContextData { +{% for field in data_fields -%} +{% if field.has_rename %} #[serde(rename = "{{ field.raw_name }}")] +{% endif %} pub {{ field.ident }}: {{ field.ty }}, +{% endfor -%} +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct {{ pascal }}ContextParams { +{% for p in params -%} +{% if p.has_rename %} #[serde(rename = "{{ p.raw_name }}")] +{% endif %} pub {{ p.ident }}: {{ p.ty }}, +{% endfor -%} +} + +pub async fn fetch_{{ snake }}_context( + client: &MizanClient, + params: &{{ pascal }}ContextParams, +) -> Result<{{ pascal }}ContextData, MizanError> { + let params_value = serde_json::to_value(params).unwrap_or(Value::Object(Default::default())); + let raw = client.fetch_context("{{ ctx_name }}", ¶ms_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode {{ ctx_name }} context: {e}"))) +} + diff --git a/protocol/mizan-codegen/templates/rust/lib.rs.j2 b/protocol/mizan-codegen/templates/rust/lib.rs.j2 new file mode 100644 index 0000000..73b0663 --- /dev/null +++ b/protocol/mizan-codegen/templates/rust/lib.rs.j2 @@ -0,0 +1,9 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod types; +{% if has_contexts %}pub mod contexts; +{% endif %}{% if has_mutations %}pub mod mutations; +{% endif %}{% if has_functions %}pub mod functions; +{% endif %} +pub use mizan_rust::{MizanClient, MizanConfig, MizanError}; + diff --git a/protocol/mizan-codegen/templates/rust/mod.rs.j2 b/protocol/mizan-codegen/templates/rust/mod.rs.j2 new file mode 100644 index 0000000..e953794 --- /dev/null +++ b/protocol/mizan-codegen/templates/rust/mod.rs.j2 @@ -0,0 +1,5 @@ +// AUTO-GENERATED by mizan — do not edit + +{% for name in modules -%} +pub mod {{ name }}; +{% endfor %} diff --git a/protocol/mizan-codegen/templates/rust/types.rs.j2 b/protocol/mizan-codegen/templates/rust/types.rs.j2 new file mode 100644 index 0000000..6d68675 --- /dev/null +++ b/protocol/mizan-codegen/templates/rust/types.rs.j2 @@ -0,0 +1,8 @@ +// AUTO-GENERATED by mizan — do not edit + +#![allow(non_camel_case_types)] + +use serde::{Deserialize, Serialize}; + +{{ schemas_block }} +{{ hoisted_enums_block }} diff --git a/protocol/mizan-codegen/templates/stage1/call.ts.j2 b/protocol/mizan-codegen/templates/stage1/call.ts.j2 new file mode 100644 index 0000000..979ae71 --- /dev/null +++ b/protocol/mizan-codegen/templates/stage1/call.ts.j2 @@ -0,0 +1,17 @@ +// AUTO-GENERATED by mizan — do not edit + +import { mizanCall } from '@mizan/base' + +{% if !type_imports.is_empty() -%} +import type { {{ type_imports|join(", ") }} } from '../types' + +{% endif -%} +{% if has_input -%} +export function call{{ pascal }}(args: {{ input_type }}): Promise<{{ output_type }}> { + return mizanCall('{{ name }}', args) +} +{% else -%} +export function call{{ pascal }}(): Promise<{{ output_type }}> { + return mizanCall('{{ name }}', {}) +} +{% endif %} diff --git a/protocol/mizan-codegen/templates/stage1/context.ts.j2 b/protocol/mizan-codegen/templates/stage1/context.ts.j2 new file mode 100644 index 0000000..2ff0a7f --- /dev/null +++ b/protocol/mizan-codegen/templates/stage1/context.ts.j2 @@ -0,0 +1,28 @@ +// AUTO-GENERATED by mizan — do not edit + +import { mizanFetch } from '@mizan/base' + +{% if !type_imports.is_empty() -%} +import type { {{ type_imports|join(", ") }} } from '../types' + +{% endif -%} +export interface {{ pascal }}ContextData { +{%- for field in data_fields %} + {{ field.name }}: {{ field.output_type }} +{%- endfor %} +} + +{% if has_params -%} +export interface {{ pascal }}ContextParams { +{%- for p in params %} + {{ p.name }}{% if !p.required %}?{% endif %}: {{ p.ts_type }} +{%- endfor %} +} +{%- else -%} +export type {{ pascal }}ContextParams = Record +{%- endif %} + +export function fetch{{ pascal }}Context(params: {{ pascal }}ContextParams): Promise<{{ pascal }}ContextData> { + return mizanFetch('{{ ctx_name }}', params) +} + diff --git a/protocol/mizan-codegen/templates/stage1/index.ts.j2 b/protocol/mizan-codegen/templates/stage1/index.ts.j2 new file mode 100644 index 0000000..ad6c431 --- /dev/null +++ b/protocol/mizan-codegen/templates/stage1/index.ts.j2 @@ -0,0 +1,20 @@ +// AUTO-GENERATED by mizan — do not edit + +export * from './types' +{% if !contexts.is_empty() %} +{%- for ctx in contexts %} +export { fetch{{ ctx.pascal }}Context, type {{ ctx.pascal }}ContextData, type {{ ctx.pascal }}ContextParams } from './contexts/{{ ctx.name }}' +{%- endfor %} +{% endif -%} +{% if !calls.is_empty() %} +{%- for call in calls %} +export { call{{ call.pascal }} } from './{{ call.dir }}/{{ call.camel_name }}' +{%- endfor %} +{% endif -%} +{% if !framework_adapters.is_empty() %} +// Stage 2 framework adapter +{%- for name in framework_adapters %} +export * from './{{ name }}' +{%- endfor %} +{% endif -%} + diff --git a/protocol/mizan-codegen/templates/svelte/svelte.ts.j2 b/protocol/mizan-codegen/templates/svelte/svelte.ts.j2 new file mode 100644 index 0000000..afa5f43 --- /dev/null +++ b/protocol/mizan-codegen/templates/svelte/svelte.ts.j2 @@ -0,0 +1,31 @@ +// AUTO-GENERATED by mizan — do not edit + +import { readable, type Readable } from 'svelte/store' +import { registerContext, type ContextState } from '@mizan/base' + +{% if !stage1_imports.is_empty() -%} +import { {{ stage1_imports|join(", ") }} } from '../index' + +{% endif -%} +{% for ctx in contexts -%} +export function create{{ ctx.pascal }}Context({% if ctx.has_params %}params: {{ ctx.pascal }}ContextParams{% endif %}) { + const store = readable>( + { data: null, status: 'idle', error: null }, + (set) => { + const handle = registerContext('{{ ctx.name }}', {{ ctx.params_arg }}, () => fetch{{ ctx.pascal }}Context({{ ctx.params_arg }})) + const unsub = handle.subscribe(() => set(handle.getState())) + handle.refetch() + return () => { unsub(); handle.unregister() } + }, + ) + + return store +} + +{% endfor -%} +{% for call in call_exports -%} +export { call{{ call }} } from '../index' +{% endfor %} +export type { ContextState } from '@mizan/base' +export { configure, initSession, MizanError } from '@mizan/base' + diff --git a/protocol/mizan-codegen/templates/vue/vue.ts.j2 b/protocol/mizan-codegen/templates/vue/vue.ts.j2 new file mode 100644 index 0000000..26fcfbd --- /dev/null +++ b/protocol/mizan-codegen/templates/vue/vue.ts.j2 @@ -0,0 +1,65 @@ +// AUTO-GENERATED by mizan — do not edit + +import { ref, computed, onMounted, onUnmounted, onServerPrefetch, type ComputedRef } from 'vue' +import { registerContext, type ContextState } from '@mizan/base' + +{% if !stage1_imports.is_empty() -%} +import { {{ stage1_imports|join(", ") }} } from '../index' + +{% endif -%} +{% for ctx in contexts -%} +export function use{{ ctx.pascal }}Context({% if ctx.has_params %}params: {{ ctx.pascal }}ContextParams{% endif %}) { + const state = ref>({ data: null, status: 'idle', error: null }) + let handle: ReturnType | null = null + + onMounted(() => { + handle = registerContext('{{ ctx.name }}', {{ ctx.params_arg }}, () => fetch{{ ctx.pascal }}Context({{ ctx.params_arg }})) + handle.subscribe(() => { state.value = handle!.getState() }) + handle.refetch() + }) + + onServerPrefetch(async () => { + handle = registerContext('{{ ctx.name }}', {{ ctx.params_arg }}, () => fetch{{ ctx.pascal }}Context({{ ctx.params_arg }})) + await handle.refetch() + state.value = handle.getState() + }) + + onUnmounted(() => { handle?.unregister() }) + + return { + state, +{%- for fn in ctx.fns %} + {{ fn.camel_name }}: computed(() => state.value.data?.{{ fn.name }} ?? null) as ComputedRef<{{ fn.output_type }} | null>, +{%- endfor %} + loading: computed(() => state.value.status === 'loading'), + error: computed(() => state.value.error), + } +} + +{% endfor -%} +{% for call in calls -%} +export function use{{ call.pascal }}() { + const isPending = ref(false) + const error = ref(null) +{%- if call.has_input %} + async function mutate(args: Parameters[0]) { + isPending.value = true; error.value = null + try { return await call{{ call.pascal }}(args) } + catch (e) { error.value = e as Error; throw e } + finally { isPending.value = false } + } +{%- else %} + async function mutate() { + isPending.value = true; error.value = null + try { return await call{{ call.pascal }}() } + catch (e) { error.value = e as Error; throw e } + finally { isPending.value = false } + } +{%- endif %} + return { mutate, isPending, error } +} + +{% endfor -%} +export type { ContextState } from '@mizan/base' +export { configure, initSession, MizanError } from '@mizan/base' + diff --git a/protocol/mizan-codegen/tests/channels_smoke.rs b/protocol/mizan-codegen/tests/channels_smoke.rs new file mode 100644 index 0000000..48eacf9 --- /dev/null +++ b/protocol/mizan-codegen/tests/channels_smoke.rs @@ -0,0 +1,80 @@ +//! Smoke test for the channels target against a synthetic fixture. +//! The JS channels.mjs runs types through `openapi-typescript` which the +//! Rust codegen replaces with direct interface emission; byte-equivalence +//! against the JS baseline is intentionally not the gate. Instead this +//! test checks structural properties of the emitted output. + +use std::collections::BTreeMap; +use std::path::PathBuf; + +use mizan_codegen::config::{Config, SourceConfig}; +use mizan_codegen::emit::CodegenTarget; +use mizan_codegen::emit::channels::ChannelsTarget; +use mizan_codegen::fetch::parse_ir_from_str; + + +fn fixture_config() -> Config { + Config { + project_id: None, + output: PathBuf::from("/tmp"), + targets: vec!["channels".to_string()], + source: SourceConfig { fastapi: None, django: None }, + rust_kernel: None, + rust_crate_name: None, + } +} + + +#[test] +fn channels_target_emits_expected_files() { + let raw = std::fs::read_to_string( + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/channels_schema.json"), + ).unwrap(); + let ir = parse_ir_from_str(&raw).unwrap(); + + let files = ChannelsTarget.emit(&ir, &fixture_config()); + assert_eq!(files.len(), 2, "channels target emits 2 files when channels present"); + + let by_path: BTreeMap = + files.iter().map(|f| (f.rel_path.clone(), f.content.as_str())).collect(); + + let ts = by_path.get(&PathBuf::from("channels.ts")) + .expect("channels.ts emitted"); + for expected in [ + "export interface ChatChannelParams", + "export interface ChatReactMessage", + "export interface ChatDjangoMessage", + "export interface NotificationsDjangoMessage", + "export const CHANNELS = {", + "chat: {", + "notifications: {", + "hasParams: true", + "hasParams: false", + ] { + assert!(ts.contains(expected), "channels.ts must contain {expected:?}"); + } + + let hooks = by_path.get(&PathBuf::from("channels.hooks.tsx")) + .expect("channels.hooks.tsx emitted"); + for expected in [ + "import { useChannel, type ChannelSubscription } from 'mizan/channels'", + "export function useChatChannel(params: ChatChannelParams)", + "export function useNotificationsChannel()", + "ChannelSubscription", + "ChannelSubscription, NotificationsDjangoMessage, never>", + ] { + assert!(hooks.contains(expected), "channels.hooks.tsx must contain {expected:?}"); + } +} + + +#[test] +fn channels_target_emits_nothing_when_empty() { + // AFI fixture has no channels — target should produce zero files. + let raw = std::fs::read_to_string( + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/afi_schema.json"), + ).unwrap(); + let ir = parse_ir_from_str(&raw).unwrap(); + let files = ChannelsTarget.emit(&ir, &fixture_config()); + assert!(files.is_empty(), "no channels → no files"); +} diff --git a/protocol/mizan-codegen/tests/fixtures/afi_schema.json b/protocol/mizan-codegen/tests/fixtures/afi_schema.json new file mode 100644 index 0000000..e7bdba7 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/afi_schema.json @@ -0,0 +1,685 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "mizan Server Functions", + "description": "Auto-generated schema for mizan server functions", + "version": "1.0.0" + }, + "paths": { + "/mizan/echo": { + "post": { + "summary": "Echoes the input back.", + "operationId": "echo", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/echoInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/echoOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-mizan": { + "transport": "http", + "isContext": false + } + } + }, + "/mizan/whoami": { + "post": { + "summary": "Returns the current user identity.", + "operationId": "whoami", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/whoamiOutput" + } + } + } + } + }, + "x-mizan": { + "transport": "http", + "isContext": false + } + } + }, + "/mizan/user_profile": { + "post": { + "summary": "One half of the user context.", + "operationId": "userProfile", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userProfileInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userProfileOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-mizan": { + "transport": "http", + "isContext": "user" + } + } + }, + "/mizan/user_orders": { + "post": { + "summary": "Other half of the user context \u2014 same param, proves param elevation.", + "operationId": "userOrders", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userOrdersInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userOrdersOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-mizan": { + "transport": "http", + "isContext": "user" + } + } + }, + "/mizan/update_profile": { + "post": { + "summary": "Mutation declaring affects on the user context.", + "operationId": "updateProfile", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/updateProfileInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/updateProfileOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-mizan": { + "transport": "http", + "isContext": false + } + } + }, + "/mizan/find_user": { + "post": { + "summary": "Optional return \u2014 exercises Pydantic `T | None` schema introspection.", + "operationId": "findUser", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/findUserInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/findUserOutput" + }, + { + "type": "null" + } + ], + "title": "Response Finduser" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-mizan": { + "transport": "http", + "isContext": false + } + } + }, + "/mizan/rename_user": { + "post": { + "summary": "Merge target \u2014 kernel splices return value into the user context.", + "operationId": "renameUser", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/renameUserInput" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/renameUserOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-mizan": { + "transport": "http", + "isContext": false + } + } + } + }, + "components": { + "schemas": { + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "OrderOutput": { + "properties": { + "id": { + "type": "integer", + "title": "Id" + }, + "user_id": { + "type": "integer", + "title": "User Id" + }, + "total": { + "type": "integer", + "title": "Total" + } + }, + "type": "object", + "required": [ + "id", + "user_id", + "total" + ], + "title": "OrderOutput" + }, + "ValidationError": { + "properties": { + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array", + "title": "Location" + }, + "msg": { + "type": "string", + "title": "Message" + }, + "type": { + "type": "string", + "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" + } + }, + "type": "object", + "required": [ + "loc", + "msg", + "type" + ], + "title": "ValidationError" + }, + "echoInput": { + "properties": { + "text": { + "type": "string", + "title": "Text" + } + }, + "type": "object", + "required": [ + "text" + ], + "title": "echoInput" + }, + "echoOutput": { + "properties": { + "message": { + "type": "string", + "title": "Message" + } + }, + "type": "object", + "required": [ + "message" + ], + "title": "echoOutput" + }, + "findUserInput": { + "properties": { + "user_id": { + "type": "integer", + "title": "User Id" + } + }, + "type": "object", + "required": [ + "user_id" + ], + "title": "findUserInput" + }, + "findUserOutput": { + "properties": { + "user_id": { + "type": "integer", + "title": "User Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "user_id", + "name" + ], + "title": "findUserOutput" + }, + "renameUserInput": { + "properties": { + "user_id": { + "type": "integer", + "title": "User Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "user_id", + "name" + ], + "title": "renameUserInput" + }, + "renameUserOutput": { + "properties": { + "user_id": { + "type": "integer", + "title": "User Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "user_id", + "name" + ], + "title": "renameUserOutput" + }, + "updateProfileInput": { + "properties": { + "user_id": { + "type": "integer", + "title": "User Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "user_id", + "name" + ], + "title": "updateProfileInput" + }, + "updateProfileOutput": { + "properties": { + "ok": { + "type": "boolean", + "title": "Ok" + } + }, + "type": "object", + "required": [ + "ok" + ], + "title": "updateProfileOutput" + }, + "userOrdersInput": { + "properties": { + "user_id": { + "type": "integer", + "title": "User Id" + } + }, + "type": "object", + "required": [ + "user_id" + ], + "title": "userOrdersInput" + }, + "userOrdersOutput": { + "items": { + "$ref": "#/components/schemas/OrderOutput" + }, + "type": "array", + "title": "userOrdersOutput" + }, + "userProfileInput": { + "properties": { + "user_id": { + "type": "integer", + "title": "User Id" + } + }, + "type": "object", + "required": [ + "user_id" + ], + "title": "userProfileInput" + }, + "userProfileOutput": { + "properties": { + "user_id": { + "type": "integer", + "title": "User Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "user_id", + "name" + ], + "title": "userProfileOutput" + }, + "whoamiOutput": { + "properties": { + "email": { + "type": "string", + "title": "Email" + }, + "authenticated": { + "type": "boolean", + "title": "Authenticated" + } + }, + "type": "object", + "required": [ + "email", + "authenticated" + ], + "title": "whoamiOutput" + } + } + }, + "x-mizan-functions": [ + { + "name": "echo", + "camelName": "echo", + "hasInput": true, + "inputType": "echoInput", + "outputType": "echoOutput", + "outputNullable": false, + "transport": "http", + "isContext": false, + "isForm": false, + "formName": null, + "formRole": null + }, + { + "name": "whoami", + "camelName": "whoami", + "hasInput": false, + "inputType": null, + "outputType": "whoamiOutput", + "outputNullable": false, + "transport": "http", + "isContext": false, + "isForm": false, + "formName": null, + "formRole": null + }, + { + "name": "user_profile", + "camelName": "userProfile", + "hasInput": true, + "inputType": "userProfileInput", + "outputType": "userProfileOutput", + "outputNullable": false, + "transport": "http", + "isContext": "user", + "isForm": false, + "formName": null, + "formRole": null + }, + { + "name": "user_orders", + "camelName": "userOrders", + "hasInput": true, + "inputType": "userOrdersInput", + "outputType": "userOrdersOutput", + "outputNullable": false, + "transport": "http", + "isContext": "user", + "isForm": false, + "formName": null, + "formRole": null + }, + { + "name": "update_profile", + "camelName": "updateProfile", + "hasInput": true, + "inputType": "updateProfileInput", + "outputType": "updateProfileOutput", + "outputNullable": false, + "transport": "http", + "isContext": false, + "isForm": false, + "formName": null, + "formRole": null, + "affects": [ + { + "type": "context", + "name": "user" + } + ] + }, + { + "name": "find_user", + "camelName": "findUser", + "hasInput": true, + "inputType": "findUserInput", + "outputType": "findUserOutput", + "outputNullable": true, + "transport": "http", + "isContext": false, + "isForm": false, + "formName": null, + "formRole": null + }, + { + "name": "rename_user", + "camelName": "renameUser", + "hasInput": true, + "inputType": "renameUserInput", + "outputType": "renameUserOutput", + "outputNullable": false, + "transport": "http", + "isContext": false, + "isForm": false, + "formName": null, + "formRole": null, + "merge": [ + "user" + ] + } + ], + "x-mizan-contexts": { + "user": { + "functions": [ + "user_profile", + "user_orders" + ], + "params": { + "user_id": { + "type": "integer", + "sharedBy": [ + "user_profile", + "user_orders" + ], + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/protocol/mizan-codegen/tests/fixtures/channels_schema.json b/protocol/mizan-codegen/tests/fixtures/channels_schema.json new file mode 100644 index 0000000..618365e --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/channels_schema.json @@ -0,0 +1,55 @@ +{ + "x-mizan-channels": [ + { + "name": "chat", + "pascalName": "Chat", + "hasParams": true, + "hasReactMessage": true, + "hasDjangoMessage": true, + "paramsType": "ChatChannelParams", + "reactMessageType": "ChatReactMessage", + "djangoMessageType": "ChatDjangoMessage" + }, + { + "name": "notifications", + "pascalName": "Notifications", + "hasParams": false, + "hasReactMessage": false, + "hasDjangoMessage": true, + "djangoMessageType": "NotificationsDjangoMessage" + } + ], + "components": { + "schemas": { + "ChatChannelParams": { + "type": "object", + "properties": { + "room_id": { "type": "string" } + }, + "required": ["room_id"] + }, + "ChatReactMessage": { + "type": "object", + "properties": { + "text": { "type": "string" } + }, + "required": ["text"] + }, + "ChatDjangoMessage": { + "type": "object", + "properties": { + "text": { "type": "string" }, + "from_user": { "type": "string" } + }, + "required": ["text", "from_user"] + }, + "NotificationsDjangoMessage": { + "type": "object", + "properties": { + "body": { "type": "string" } + }, + "required": ["body"] + } + } + } +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_python/__init__.py b/protocol/mizan-codegen/tests/fixtures/js_python/__init__.py new file mode 100644 index 0000000..6c39b89 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_python/__init__.py @@ -0,0 +1,4 @@ +# AUTO-GENERATED by mizan — do not edit + +from .client import MizanClient # noqa: F401 +from .types import * # noqa: F401, F403 diff --git a/protocol/mizan-codegen/tests/fixtures/js_python/client.py b/protocol/mizan-codegen/tests/fixtures/js_python/client.py new file mode 100644 index 0000000..45d29a8 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_python/client.py @@ -0,0 +1,67 @@ +# AUTO-GENERATED by mizan — do not edit + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +# Built from frontends/mizan-rust with `maturin develop --features pyo3`. +from mizan_rust import PyMizanClient, PyContextSubscription + +from .types import * # noqa: F401, F403 +from .types import BaseModel # re-import for the synthesized ContextData classes + + +class MizanClient: + """Typed Python facade over the PyO3 mizan-rust kernel.""" + + def __init__(self, base_url: str, *, session: bool = False, + csrf_cookie_name: str = "csrftoken", + csrf_header_name: str = "X-CSRFToken") -> None: + self._inner = PyMizanClient( + base_url, + session=session, + csrf_cookie_name=csrf_cookie_name, + csrf_header_name=csrf_header_name, + ) + + def fetch_user_context(self, user_id: int) -> "UserContextData": + raw = self._inner.fetch_context("user", {"user_id": user_id}) + return UserContextData(**raw) + def subscribe_user_context(self, user_id: int, + callback: Callable[[dict[str, Any]], None]) -> PyContextSubscription: + return self._inner.subscribe_context("user", {"user_id": user_id}, callback) + + def call_echo(self, args: EchoInput) -> EchoOutput: + raw = self._inner.call("echo", args.model_dump()) + return EchoOutput(**raw) + + def call_whoami(self) -> WhoamiOutput: + raw = self._inner.call("whoami", {}) + return WhoamiOutput(**raw) + + def call_update_profile(self, args: UpdateProfileInput) -> UpdateProfileOutput: + raw = self._inner.call("update_profile", args.model_dump()) + return UpdateProfileOutput(**raw) + + def call_find_user(self, args: FindUserInput) -> FindUserOutput | None: + raw = self._inner.call("find_user", args.model_dump()) + return FindUserOutput(**raw) if raw is not None else None + + def call_rename_user(self, args: RenameUserInput) -> RenameUserOutput: + raw = self._inner.call("rename_user", args.model_dump()) + return RenameUserOutput(**raw) + + def invalidate(self, context: str) -> None: + self._inner.invalidate(context) + + def invalidate_scoped(self, context: str, params: dict[str, Any]) -> None: + self._inner.invalidate_scoped(context, params) + + +# ── Context data shapes (per-context bundle) ────────────────────────────── + +class UserContextData(BaseModel): + """Bundled return of fetch_user_context.""" + user_profile: UserProfileOutput + user_orders: UserOrdersOutput diff --git a/protocol/mizan-codegen/tests/fixtures/js_python/types.py b/protocol/mizan-codegen/tests/fixtures/js_python/types.py new file mode 100644 index 0000000..996be73 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_python/types.py @@ -0,0 +1,66 @@ +# AUTO-GENERATED by mizan — do not edit + +from __future__ import annotations + +from typing import Any, Literal + +from pydantic import BaseModel + +class HTTPValidationError(BaseModel): + detail: list[ValidationError] | None = None + +class OrderOutput(BaseModel): + id: int + user_id: int + total: int + +class ValidationError(BaseModel): + loc: list[Any] + msg: str + r#type: str + input: Any | None = None + ctx: dict[str, Any] | None = None + +class EchoInput(BaseModel): + text: str + +class EchoOutput(BaseModel): + message: str + +class FindUserInput(BaseModel): + user_id: int + +class FindUserOutput(BaseModel): + user_id: int + name: str + +class RenameUserInput(BaseModel): + user_id: int + name: str + +class RenameUserOutput(BaseModel): + user_id: int + name: str + +class UpdateProfileInput(BaseModel): + user_id: int + name: str + +class UpdateProfileOutput(BaseModel): + ok: bool + +class UserOrdersInput(BaseModel): + user_id: int + +UserOrdersOutput = list[OrderOutput] + +class UserProfileInput(BaseModel): + user_id: int + +class UserProfileOutput(BaseModel): + user_id: int + name: str + +class WhoamiOutput(BaseModel): + email: str + authenticated: bool diff --git a/protocol/mizan-codegen/tests/fixtures/js_react/react.tsx b/protocol/mizan-codegen/tests/fixtures/js_react/react.tsx new file mode 100644 index 0000000..6fc7c64 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_react/react.tsx @@ -0,0 +1,157 @@ +'use client' + +// AUTO-GENERATED by mizan — do not edit + +import { + createContext, + useCallback, + useContext, + useEffect, + useRef, + useState, + useSyncExternalStore, + type ReactNode, +} from 'react' +import { + configure, + initSession, + mizanCall, + mizanFetch, + MizanError, + registerContext, + type ContextState, +} from '@mizan/base' + +import { fetchUserContext, type UserContextData, type UserContextParams, callUpdateProfile, callEcho, callWhoami, callFindUser, callRenameUser, type userProfileOutput, type userOrdersOutput } from './index' + +// Internal — runs inside a Provider, registers with the kernel exactly once. +function useContextSubscription( + name: string, + params: Record, + fetchFn: () => Promise, + initialData?: T, +): ContextState { + const ref = useRef | null>(null) + if (!ref.current) { + ref.current = registerContext(name, params, fetchFn, initialData) + } + const handle = ref.current + + useEffect(() => { + if (handle.getState().status === 'idle') handle.refetch() + return () => handle.unregister() + }, [handle]) + + return useSyncExternalStore(handle.subscribe, handle.getState, handle.getState) +} + +// Internal — wraps an imperative call() with isPending / error state. +interface MutationHook { + mutate: (args: TArgs) => Promise + isPending: boolean + error: Error | null +} + +function useMutation( + callFn: (args: TArgs) => Promise, +): MutationHook { + const [isPending, setIsPending] = useState(false) + const [error, setError] = useState(null) + + const mutate = useCallback(async (args: TArgs) => { + setIsPending(true) + setError(null) + try { + return await callFn(args) + } catch (e) { + setError(e as Error) + throw e + } finally { + setIsPending(false) + } + }, [callFn]) + + return { mutate, isPending, error } +} + +// ── User Context ── + +const UserCtx = createContext | null>(null) + +export function UserContext({ children, ...params }: UserContextParams & { children: ReactNode }) { + const state = useContextSubscription('user', params, () => fetchUserContext(params)) + return {children} +} + +export function useUserContext(): ContextState { + const ctx = useContext(UserCtx) + if (!ctx) throw new Error('useUserContext requires ') + return ctx +} + +export function useUserProfile(): userProfileOutput | null { + return useUserContext().data?.user_profile ?? null +} + +export function useUserOrders(): userOrdersOutput | null { + return useUserContext().data?.user_orders ?? null +} + +export function useUpdateProfile() { + return useMutation[0], Awaited>>(callUpdateProfile) +} + +export function useEcho() { + return useMutation[0], Awaited>>(callEcho) +} + +export function useWhoami() { + return useMutation>>(() => callWhoami() as any) +} + +export function useFindUser() { + return useMutation[0], Awaited>>(callFindUser) +} + +export function useRenameUser() { + return useMutation[0], Awaited>>(callRenameUser) +} + +// ── MizanContext root provider ── + +export interface MizanContextProps { + /** Base URL for protocol endpoints. Defaults to "/api/mizan". */ + baseUrl?: string + /** Set to `false` for backends without a `/session/` endpoint (e.g. FastAPI). */ + session?: boolean + children: ReactNode +} + +/** + * Root provider — calls configure() once and mounts the global context (if defined). + * Must wrap any component using Mizan-generated hooks. + */ +export function MizanContext({ baseUrl, session, children }: MizanContextProps) { + const configured = useRef(false) + if (!configured.current) { + const opts: Parameters[0] = {} + if (baseUrl !== undefined) opts.baseUrl = baseUrl + if (session !== undefined) opts.session = session + if (Object.keys(opts).length > 0) configure(opts) + configured.current = true + } + return <>{children} +} + +// ── Imperative escape hatch ── + +/** + * Returns the imperative kernel API. For test harnesses or rare cases where + * a typed generated hook does not fit. Most app code should use the typed hooks. + */ +export function useMizan() { + return { call: mizanCall, fetch: mizanFetch } +} + +export type { ContextState } from '@mizan/base' +export { configure, initSession, MizanError } from '@mizan/base' diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/Cargo.toml b/protocol/mizan-codegen/tests/fixtures/js_rust/Cargo.toml new file mode 100644 index 0000000..0b6de81 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "fixture_client" +version = "0.1.0" +edition = "2021" + +[dependencies] +mizan-rust = { path = "../../../frontends/mizan-rust" } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tokio = { version = "1", features = ["rt", "macros"] } diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/contexts/mod.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/contexts/mod.rs new file mode 100644 index 0000000..10d1453 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/contexts/mod.rs @@ -0,0 +1,3 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod user; diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/contexts/user.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/contexts/user.rs new file mode 100644 index 0000000..c9d1cdb --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/contexts/user.rs @@ -0,0 +1,29 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{UserProfileOutput, UserOrdersOutput}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserContextData { + pub user_profile: UserProfileOutput, + pub user_orders: UserOrdersOutput, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserContextParams { + pub user_id: i64, +} + +pub async fn fetch_user_context( + client: &MizanClient, + params: &UserContextParams, +) -> Result { + let params_value = serde_json::to_value(params).unwrap_or(Value::Object(Default::default())); + let raw = client.fetch_context("user", ¶ms_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode user context: {e}"))) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/echo.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/echo.rs new file mode 100644 index 0000000..86ef70e --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/echo.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{EchoOutput, EchoInput}; + +pub async fn call_echo(client: &MizanClient, args: &EchoInput) -> Result { + let args_value = serde_json::to_value(args).unwrap_or(Value::Object(Default::default())); + let raw = client.call("echo", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode echo result: {e}"))) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/find_user.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/find_user.rs new file mode 100644 index 0000000..3d7f9f0 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/find_user.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{FindUserOutput, FindUserInput}; + +pub async fn call_find_user(client: &MizanClient, args: &FindUserInput) -> Result, MizanError> { + let args_value = serde_json::to_value(args).unwrap_or(Value::Object(Default::default())); + let raw = client.call("find_user", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode find_user result: {e}"))) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/mod.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/mod.rs new file mode 100644 index 0000000..e277fc5 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/mod.rs @@ -0,0 +1,6 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod echo; +pub mod find_user; +pub mod rename_user; +pub mod whoami; diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/rename_user.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/rename_user.rs new file mode 100644 index 0000000..cc9820b --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/rename_user.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{RenameUserOutput, RenameUserInput}; + +pub async fn call_rename_user(client: &MizanClient, args: &RenameUserInput) -> Result { + let args_value = serde_json::to_value(args).unwrap_or(Value::Object(Default::default())); + let raw = client.call("rename_user", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode rename_user result: {e}"))) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/whoami.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/whoami.rs new file mode 100644 index 0000000..4512523 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/functions/whoami.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{WhoamiOutput}; + +pub async fn call_whoami(client: &MizanClient) -> Result { + let args_value = Value::Object(Default::default()); + let raw = client.call("whoami", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode whoami result: {e}"))) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/lib.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/lib.rs new file mode 100644 index 0000000..cfc3e80 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/lib.rs @@ -0,0 +1,8 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod types; +pub mod contexts; +pub mod mutations; +pub mod functions; + +pub use mizan_rust::{MizanClient, MizanConfig, MizanError}; diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/mutations/mod.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/mutations/mod.rs new file mode 100644 index 0000000..4410f89 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/mutations/mod.rs @@ -0,0 +1,3 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod update_profile; diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/mutations/update_profile.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/mutations/update_profile.rs new file mode 100644 index 0000000..819af92 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/mutations/update_profile.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{UpdateProfileOutput, UpdateProfileInput}; + +pub async fn call_update_profile(client: &MizanClient, args: &UpdateProfileInput) -> Result { + let args_value = serde_json::to_value(args).unwrap_or(Value::Object(Default::default())); + let raw = client.call("update_profile", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode update_profile result: {e}"))) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_rust/src/types.rs b/protocol/mizan-codegen/tests/fixtures/js_rust/src/types.rs new file mode 100644 index 0000000..7067fdb --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_rust/src/types.rs @@ -0,0 +1,98 @@ +// AUTO-GENERATED by mizan — do not edit + +#![allow(non_camel_case_types)] + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct HTTPValidationError { + pub detail: Option>, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct OrderOutput { + pub id: i64, + pub user_id: i64, + pub total: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ValidationError { + pub loc: Vec, + pub msg: String, + #[serde(rename = "type")] + pub r#type: String, + pub input: Option, + pub ctx: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct EchoInput { + pub text: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct EchoOutput { + pub message: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct FindUserInput { + pub user_id: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct FindUserOutput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct RenameUserInput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct RenameUserOutput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateProfileInput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateProfileOutput { + pub ok: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserOrdersInput { + pub user_id: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(transparent)] +pub struct UserOrdersOutput(pub Vec); + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserProfileInput { + pub user_id: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserProfileOutput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WhoamiOutput { + pub email: String, + pub authenticated: bool, +} + diff --git a/protocol/mizan-codegen/tests/fixtures/js_stage1/contexts/user.ts b/protocol/mizan-codegen/tests/fixtures/js_stage1/contexts/user.ts new file mode 100644 index 0000000..24ababc --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_stage1/contexts/user.ts @@ -0,0 +1,18 @@ +// AUTO-GENERATED by mizan — do not edit + +import { mizanFetch } from '@mizan/base' + +import type { userProfileOutput, userOrdersOutput } from '../types' + +export interface UserContextData { + user_profile: userProfileOutput + user_orders: userOrdersOutput +} + +export interface UserContextParams { + user_id: number +} + +export function fetchUserContext(params: UserContextParams): Promise { + return mizanFetch('user', params) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/echo.ts b/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/echo.ts new file mode 100644 index 0000000..5374efe --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/echo.ts @@ -0,0 +1,9 @@ +// AUTO-GENERATED by mizan — do not edit + +import { mizanCall } from '@mizan/base' + +import type { echoInput, echoOutput } from '../types' + +export function callEcho(args: echoInput): Promise { + return mizanCall('echo', args) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/findUser.ts b/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/findUser.ts new file mode 100644 index 0000000..a04ecab --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/findUser.ts @@ -0,0 +1,9 @@ +// AUTO-GENERATED by mizan — do not edit + +import { mizanCall } from '@mizan/base' + +import type { findUserInput, findUserOutput } from '../types' + +export function callFindUser(args: findUserInput): Promise { + return mizanCall('find_user', args) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/renameUser.ts b/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/renameUser.ts new file mode 100644 index 0000000..3117ea6 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/renameUser.ts @@ -0,0 +1,9 @@ +// AUTO-GENERATED by mizan — do not edit + +import { mizanCall } from '@mizan/base' + +import type { renameUserInput, renameUserOutput } from '../types' + +export function callRenameUser(args: renameUserInput): Promise { + return mizanCall('rename_user', args) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/whoami.ts b/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/whoami.ts new file mode 100644 index 0000000..9e2e136 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_stage1/functions/whoami.ts @@ -0,0 +1,9 @@ +// AUTO-GENERATED by mizan — do not edit + +import { mizanCall } from '@mizan/base' + +import type { whoamiOutput } from '../types' + +export function callWhoami(): Promise { + return mizanCall('whoami', {}) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_stage1/index.ts b/protocol/mizan-codegen/tests/fixtures/js_stage1/index.ts new file mode 100644 index 0000000..25059d6 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_stage1/index.ts @@ -0,0 +1,11 @@ +// AUTO-GENERATED by mizan — do not edit + +export * from './types' + +export { fetchUserContext, type UserContextData, type UserContextParams } from './contexts/user' + +export { callEcho } from './functions/echo' +export { callWhoami } from './functions/whoami' +export { callUpdateProfile } from './mutations/updateProfile' +export { callFindUser } from './functions/findUser' +export { callRenameUser } from './functions/renameUser' diff --git a/protocol/mizan-codegen/tests/fixtures/js_stage1/mutations/updateProfile.ts b/protocol/mizan-codegen/tests/fixtures/js_stage1/mutations/updateProfile.ts new file mode 100644 index 0000000..0ed94d9 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_stage1/mutations/updateProfile.ts @@ -0,0 +1,9 @@ +// AUTO-GENERATED by mizan — do not edit + +import { mizanCall } from '@mizan/base' + +import type { updateProfileInput, updateProfileOutput } from '../types' + +export function callUpdateProfile(args: updateProfileInput): Promise { + return mizanCall('update_profile', args) +} diff --git a/protocol/mizan-codegen/tests/fixtures/js_svelte/svelte.ts b/protocol/mizan-codegen/tests/fixtures/js_svelte/svelte.ts new file mode 100644 index 0000000..f0b667d --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_svelte/svelte.ts @@ -0,0 +1,29 @@ +// AUTO-GENERATED by mizan — do not edit + +import { readable, type Readable } from 'svelte/store' +import { registerContext, type ContextState } from '@mizan/base' + +import { fetchUserContext, type UserContextData, type UserContextParams, callUpdateProfile, callEcho, callWhoami, callFindUser, callRenameUser } from '../index' + +export function createUserContext(params: UserContextParams) { + const store = readable>( + { data: null, status: 'idle', error: null }, + (set) => { + const handle = registerContext('user', params, () => fetchUserContext(params)) + const unsub = handle.subscribe(() => set(handle.getState())) + handle.refetch() + return () => { unsub(); handle.unregister() } + }, + ) + + return store +} + +export { callUpdateProfile } from '../index' +export { callEcho } from '../index' +export { callWhoami } from '../index' +export { callFindUser } from '../index' +export { callRenameUser } from '../index' + +export type { ContextState } from '@mizan/base' +export { configure, initSession, MizanError } from '@mizan/base' diff --git a/protocol/mizan-codegen/tests/fixtures/js_vue/vue.ts b/protocol/mizan-codegen/tests/fixtures/js_vue/vue.ts new file mode 100644 index 0000000..f9fe057 --- /dev/null +++ b/protocol/mizan-codegen/tests/fixtures/js_vue/vue.ts @@ -0,0 +1,96 @@ +// AUTO-GENERATED by mizan — do not edit + +import { ref, computed, onMounted, onUnmounted, onServerPrefetch, type ComputedRef } from 'vue' +import { registerContext, type ContextState } from '@mizan/base' + +import { fetchUserContext, type UserContextData, type UserContextParams, callUpdateProfile, callEcho, callWhoami, callFindUser, callRenameUser } from '../index' + +export function useUserContext(params: UserContextParams) { + const state = ref>({ data: null, status: 'idle', error: null }) + let handle: ReturnType | null = null + + onMounted(() => { + handle = registerContext('user', params, () => fetchUserContext(params)) + handle.subscribe(() => { state.value = handle!.getState() }) + handle.refetch() + }) + + onServerPrefetch(async () => { + handle = registerContext('user', params, () => fetchUserContext(params)) + await handle.refetch() + state.value = handle.getState() + }) + + onUnmounted(() => { handle?.unregister() }) + + return { + state, + userProfile: computed(() => state.value.data?.user_profile ?? null) as ComputedRef, + userOrders: computed(() => state.value.data?.user_orders ?? null) as ComputedRef, + loading: computed(() => state.value.status === 'loading'), + error: computed(() => state.value.error), + } +} + +export function useUpdateProfile() { + const isPending = ref(false) + const error = ref(null) + async function mutate(args: Parameters[0]) { + isPending.value = true; error.value = null + try { return await callUpdateProfile(args) } + catch (e) { error.value = e as Error; throw e } + finally { isPending.value = false } + } + return { mutate, isPending, error } +} + +export function useEcho() { + const isPending = ref(false) + const error = ref(null) + async function mutate(args: Parameters[0]) { + isPending.value = true; error.value = null + try { return await callEcho(args) } + catch (e) { error.value = e as Error; throw e } + finally { isPending.value = false } + } + return { mutate, isPending, error } +} + +export function useWhoami() { + const isPending = ref(false) + const error = ref(null) + async function mutate() { + isPending.value = true; error.value = null + try { return await callWhoami() } + catch (e) { error.value = e as Error; throw e } + finally { isPending.value = false } + } + return { mutate, isPending, error } +} + +export function useFindUser() { + const isPending = ref(false) + const error = ref(null) + async function mutate(args: Parameters[0]) { + isPending.value = true; error.value = null + try { return await callFindUser(args) } + catch (e) { error.value = e as Error; throw e } + finally { isPending.value = false } + } + return { mutate, isPending, error } +} + +export function useRenameUser() { + const isPending = ref(false) + const error = ref(null) + async function mutate(args: Parameters[0]) { + isPending.value = true; error.value = null + try { return await callRenameUser(args) } + catch (e) { error.value = e as Error; throw e } + finally { isPending.value = false } + } + return { mutate, isPending, error } +} + +export type { ContextState } from '@mizan/base' +export { configure, initSession, MizanError } from '@mizan/base' diff --git a/protocol/mizan-codegen/tests/ir_deserialization.rs b/protocol/mizan-codegen/tests/ir_deserialization.rs new file mode 100644 index 0000000..d8dfc84 --- /dev/null +++ b/protocol/mizan-codegen/tests/ir_deserialization.rs @@ -0,0 +1,103 @@ +//! IR deserialization tests against the AFI fixture schema. +//! +//! The fixture is captured from the FastAPI backend's `build_schema()` +//! against `tests/afi/fixture.py`. Each test exercises a different facet +//! of the IR — function set, per-function field decoding, context-param +//! elevation, and components.schemas presence — to confirm the typed +//! Rust structs match the JSON shape the backends emit. + +use std::path::PathBuf; + +use mizan_codegen::fetch::parse_ir_from_str; +use mizan_codegen::ir::{AffectKind, IsContext, Transport}; + + +fn load_fixture() -> mizan_codegen::ir::MizanIR { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/afi_schema.json"); + let raw = std::fs::read_to_string(&path) + .unwrap_or_else(|e| panic!("read {}: {e}", path.display())); + parse_ir_from_str(&raw).unwrap_or_else(|e| panic!("parse IR: {e}")) +} + + +#[test] +fn afi_fixture_deserializes_function_set() { + let ir = load_fixture(); + let names: Vec<&str> = ir.functions.iter().map(|f| f.name.as_str()).collect(); + + // Seven fixture functions per tests/afi/fixture.py. + assert_eq!(ir.functions.len(), 7, "expected 7 functions, got {}: {names:?}", ir.functions.len()); + + for expected in [ + "echo", "whoami", + "user_profile", "user_orders", + "update_profile", "find_user", "rename_user", + ] { + assert!(names.contains(&expected), "missing function {expected:?} in {names:?}"); + } +} + + +#[test] +fn afi_fixture_function_field_decode() { + let ir = load_fixture(); + let echo = ir.functions.iter().find(|f| f.name == "echo").unwrap(); + assert_eq!(echo.camel_name, "echo"); + assert!(echo.has_input); + assert_eq!(echo.input_type.as_deref(), Some("echoInput")); + assert_eq!(echo.output_type, "echoOutput"); + assert!(!echo.output_nullable); + assert_eq!(echo.transport, Transport::Http); + assert_eq!(echo.is_context, IsContext::No); + + let whoami = ir.functions.iter().find(|f| f.name == "whoami").unwrap(); + assert!(!whoami.has_input); + + // `find_user` returns `ProfileOutput | None` — outputNullable must be true. + let find_user = ir.functions.iter().find(|f| f.name == "find_user").unwrap(); + assert!(find_user.output_nullable, "find_user must be outputNullable"); + + // Context-typed function picks up the context name. + let user_profile = ir.functions.iter().find(|f| f.name == "user_profile").unwrap(); + assert_eq!(user_profile.is_context.as_str(), Some("user")); + + // Mutation with `affects="user"` lands in `affects` as a context target. + let update_profile = ir.functions.iter().find(|f| f.name == "update_profile").unwrap(); + assert_eq!(update_profile.affects.len(), 1); + assert_eq!(update_profile.affects[0].kind, AffectKind::Context); + assert_eq!(update_profile.affects[0].name, "user"); +} + + +#[test] +fn afi_fixture_context_param_elevation() { + let ir = load_fixture(); + let user = ir.contexts.get("user").expect("user context group"); + + // Both context functions share `user_id` as a required param. + let user_id = user.params.get("user_id").expect("user_id param"); + assert_eq!(user_id.ty, "integer"); + assert!(user_id.required, "user_id is required (declared by every fn in the group)"); + assert!(user_id.shared_by.contains(&"user_profile".to_string())); + assert!(user_id.shared_by.contains(&"user_orders".to_string())); +} + + +#[test] +fn afi_fixture_components_schemas_present() { + let ir = load_fixture(); + // Each fixture function pairs with an *Input/Output schema in components. + for expected in [ + "echoInput", "echoOutput", + "whoamiOutput", + "userProfileInput", "userProfileOutput", + "updateProfileInput", "updateProfileOutput", + "findUserInput", "findUserOutput", + ] { + assert!( + ir.components.schemas.contains_key(expected), + "missing schema {expected:?}", + ); + } +} diff --git a/protocol/mizan-codegen/tests/python_parity.rs b/protocol/mizan-codegen/tests/python_parity.rs new file mode 100644 index 0000000..68261a9 --- /dev/null +++ b/protocol/mizan-codegen/tests/python_parity.rs @@ -0,0 +1,75 @@ +//! Byte-equivalence test for the Python target against the JS baseline. + +use std::collections::BTreeMap; +use std::path::PathBuf; + +use mizan_codegen::config::{Config, SourceConfig}; +use mizan_codegen::emit::{CodegenTarget, EmittedFile}; +use mizan_codegen::emit::python::PythonClient; +use mizan_codegen::fetch::parse_ir_from_str; + + +fn load_ir() -> mizan_codegen::ir::MizanIR { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/afi_schema.json"); + parse_ir_from_str(&std::fs::read_to_string(&path).unwrap()).unwrap() +} + + +fn fixture_config() -> Config { + Config { + project_id: None, + output: PathBuf::from("/tmp"), + targets: vec!["python".to_string()], + source: SourceConfig { fastapi: None, django: None }, + rust_kernel: None, + rust_crate_name: None, + } +} + + +fn read_baseline(rel: &str) -> String { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/js_python") + .join(rel); + std::fs::read_to_string(&path) + .unwrap_or_else(|e| panic!("read baseline {}: {e}", path.display())) +} + + +fn emit_index(files: &[EmittedFile]) -> BTreeMap { + files.iter().map(|f| (f.rel_path.clone(), f.content.as_str())).collect() +} + + +fn assert_byte_equal(rel: &str, files: &BTreeMap) { + let actual = files + .get(&PathBuf::from(rel)) + .unwrap_or_else(|| panic!("Python target did not produce {rel}")); + let expected = read_baseline(rel); + if *actual != expected { + for (lineno, (a, b)) in actual.lines().zip(expected.lines()).enumerate() { + if a != b { + panic!( + "{rel} diverges at line {}:\n expected: {b:?}\n actual: {a:?}", + lineno + 1, + ); + } + } + panic!( + "{rel} diverges in length: actual={} expected={}", + actual.len(), expected.len(), + ); + } +} + + +#[test] +fn python_target_all_files_match_baseline() { + let ir = load_ir(); + let files = PythonClient.emit(&ir, &fixture_config()); + let index = emit_index(&files); + + for rel in ["types.py", "client.py", "__init__.py"] { + assert_byte_equal(rel, &index); + } +} diff --git a/protocol/mizan-codegen/tests/react_parity.rs b/protocol/mizan-codegen/tests/react_parity.rs new file mode 100644 index 0000000..464698d --- /dev/null +++ b/protocol/mizan-codegen/tests/react_parity.rs @@ -0,0 +1,54 @@ +//! Byte-equivalence test for the React target against the JS baseline. + +use std::path::PathBuf; + +use mizan_codegen::config::{Config, SourceConfig}; +use mizan_codegen::emit::CodegenTarget; +use mizan_codegen::emit::react::ReactAdapter; +use mizan_codegen::fetch::parse_ir_from_str; + + +fn load_ir() -> mizan_codegen::ir::MizanIR { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/afi_schema.json"); + parse_ir_from_str(&std::fs::read_to_string(&path).unwrap()).unwrap() +} + + +fn fixture_config() -> Config { + Config { + project_id: None, + output: PathBuf::from("/tmp"), + targets: vec!["react".to_string()], + source: SourceConfig { fastapi: None, django: None }, + rust_kernel: None, + rust_crate_name: None, + } +} + + +#[test] +fn react_target_byte_match() { + let ir = load_ir(); + let files = ReactAdapter.emit(&ir, &fixture_config()); + assert_eq!(files.len(), 1); + let actual = &files[0].content; + + let expected_path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/js_react/react.tsx"); + let expected = std::fs::read_to_string(&expected_path).unwrap(); + + if *actual != expected { + for (lineno, (a, b)) in actual.lines().zip(expected.lines()).enumerate() { + if a != b { + panic!( + "react.tsx diverges at line {}:\n expected: {b:?}\n actual: {a:?}", + lineno + 1, + ); + } + } + panic!( + "react.tsx diverges in length: actual={} expected={}", + actual.len(), expected.len(), + ); + } +} diff --git a/protocol/mizan-codegen/tests/rust_parity.rs b/protocol/mizan-codegen/tests/rust_parity.rs new file mode 100644 index 0000000..9a25f30 --- /dev/null +++ b/protocol/mizan-codegen/tests/rust_parity.rs @@ -0,0 +1,96 @@ +//! Byte-equivalence between the Rust target and the JS rust.mjs baseline +//! against the AFI fixture. The downstream forcing function is the wire- +//! parity drivers under `tests/rust/`; this test catches divergence +//! earlier in the cycle without needing to spin a FastAPI fixture up. + +use std::collections::BTreeMap; +use std::path::PathBuf; + +use mizan_codegen::config::{Config, RustKernelSpec, SourceConfig}; +use mizan_codegen::emit::{CodegenTarget, EmittedFile}; +use mizan_codegen::emit::rust::RustCrate; +use mizan_codegen::fetch::parse_ir_from_str; + + +fn load_ir() -> mizan_codegen::ir::MizanIR { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/afi_schema.json"); + parse_ir_from_str(&std::fs::read_to_string(&path).unwrap()).unwrap() +} + + +fn fixture_config() -> Config { + Config { + project_id: None, + output: PathBuf::from("/tmp"), + targets: vec!["rust".to_string()], + source: SourceConfig { fastapi: None, django: None }, + rust_kernel: Some(RustKernelSpec::Path { + path: "../../../frontends/mizan-rust".to_string(), + }), + rust_crate_name: Some("fixture_client".to_string()), + } +} + + +fn read_baseline(rel: &str) -> String { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/js_rust") + .join(rel); + std::fs::read_to_string(&path) + .unwrap_or_else(|e| panic!("read baseline {}: {e}", path.display())) +} + + +fn emit_index(files: &[EmittedFile]) -> BTreeMap { + files.iter().map(|f| (f.rel_path.clone(), f.content.as_str())).collect() +} + + +fn assert_byte_equal(rel: &str, files: &BTreeMap) { + let actual = files + .get(&PathBuf::from(rel)) + .unwrap_or_else(|| panic!("Rust target did not produce {rel}")); + let expected = read_baseline(rel); + if *actual != expected { + for (lineno, (a, b)) in actual.lines().zip(expected.lines()).enumerate() { + if a != b { + panic!( + "{rel} diverges at line {}:\n expected: {b:?}\n actual: {a:?}", + lineno + 1, + ); + } + } + panic!( + "{rel} diverges in length: actual={} expected={}\n--- actual (last 200) ---\n{}\n--- expected (last 200) ---\n{}", + actual.len(), expected.len(), + &actual[actual.len().saturating_sub(200)..], + &expected[expected.len().saturating_sub(200)..], + ); + } +} + + +#[test] +fn rust_target_all_files_match_baseline() { + let ir = load_ir(); + let files = RustCrate.emit(&ir, &fixture_config()); + let index = emit_index(&files); + + for rel in [ + "Cargo.toml", + "src/lib.rs", + "src/types.rs", + "src/contexts/user.rs", + "src/contexts/mod.rs", + "src/functions/echo.rs", + "src/functions/whoami.rs", + "src/functions/find_user.rs", + "src/functions/rename_user.rs", + "src/functions/mod.rs", + "src/mutations/update_profile.rs", + "src/mutations/mod.rs", + ] { + assert_byte_equal(rel, &index); + } +} diff --git a/protocol/mizan-codegen/tests/stage1_parity.rs b/protocol/mizan-codegen/tests/stage1_parity.rs new file mode 100644 index 0000000..5861dc8 --- /dev/null +++ b/protocol/mizan-codegen/tests/stage1_parity.rs @@ -0,0 +1,143 @@ +//! Byte-equivalence tests for the deterministic Stage 1 files (contexts, +//! mutations, functions, index). Baseline output captured from the JS +//! codegen at `protocol/mizan-generate/generator/lib/stage1.mjs` against +//! the AFI fixture schema (`tests/fixtures/afi_schema.json`). +//! +//! `types.ts` is NOT byte-checked here — the JS codegen routes type +//! emission through openapi-typescript while the Rust substrate emits +//! Pydantic schemas directly. Equivalence for types.ts is structural +//! (named exports present and importable), checked in a separate test. + +use std::collections::BTreeMap; +use std::path::PathBuf; + +use mizan_codegen::config::{Config, SourceConfig}; +use mizan_codegen::emit::{CodegenTarget, EmittedFile}; +use mizan_codegen::emit::stage1::Stage1; +use mizan_codegen::fetch::parse_ir_from_str; + + +fn load_ir() -> mizan_codegen::ir::MizanIR { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/afi_schema.json"); + let raw = std::fs::read_to_string(&path).unwrap(); + parse_ir_from_str(&raw).unwrap() +} + + +fn synthetic_config() -> Config { + Config { + project_id: None, + output: PathBuf::from("/tmp"), + targets: vec!["stage1".to_string()], + source: SourceConfig { fastapi: None, django: None }, + rust_kernel: None, + rust_crate_name: None, + } +} + + +fn emit_index(files: &[EmittedFile]) -> BTreeMap { + files.iter().map(|f| (f.rel_path.clone(), f.content.as_str())).collect() +} + + +fn read_baseline(rel: &str) -> String { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/js_stage1") + .join(rel); + std::fs::read_to_string(&path) + .unwrap_or_else(|e| panic!("read baseline {}: {e}", path.display())) +} + + +fn assert_byte_equal(rel: &str, files: &BTreeMap) { + let actual = files + .get(&PathBuf::from(rel)) + .unwrap_or_else(|| panic!("emitter did not produce {rel}")); + let expected = read_baseline(rel); + if *actual != expected { + // Surface a diff-friendly failure message — first divergent line wins. + for (lineno, (a, b)) in actual.lines().zip(expected.lines()).enumerate() { + if a != b { + panic!( + "{rel} diverges at line {}:\n expected: {b:?}\n actual: {a:?}", + lineno + 1, + ); + } + } + panic!( + "{rel} diverges in length: actual={} expected={}", + actual.len(), expected.len(), + ); + } +} + + +#[test] +fn stage1_contexts_user_byte_match() { + let ir = load_ir(); + let files = Stage1.emit(&ir, &synthetic_config()); + let index = emit_index(&files); + assert_byte_equal("contexts/user.ts", &index); +} + + +#[test] +fn stage1_function_files_byte_match() { + let ir = load_ir(); + let files = Stage1.emit(&ir, &synthetic_config()); + let index = emit_index(&files); + for rel in ["functions/echo.ts", "functions/whoami.ts", + "functions/findUser.ts", "functions/renameUser.ts"] { + assert_byte_equal(rel, &index); + } +} + + +#[test] +fn stage1_mutation_files_byte_match() { + let ir = load_ir(); + let files = Stage1.emit(&ir, &synthetic_config()); + let index = emit_index(&files); + assert_byte_equal("mutations/updateProfile.ts", &index); +} + + +#[test] +fn stage1_index_byte_match() { + let ir = load_ir(); + let files = Stage1.emit(&ir, &synthetic_config()); + let index = emit_index(&files); + assert_byte_equal("index.ts", &index); +} + + +#[test] +fn stage1_types_exports_expected_names() { + let ir = load_ir(); + let files = Stage1.emit(&ir, &synthetic_config()); + let index = emit_index(&files); + let types = index + .get(&PathBuf::from("types.ts")) + .expect("types.ts must be emitted"); + + // Every Pydantic schema named in the IR must surface as a top-level + // exported type or interface so Stage 2 adapters can import by name. + for expected in [ + "echoInput", "echoOutput", + "whoamiOutput", + "userProfileInput", "userProfileOutput", + "userOrdersInput", + "updateProfileInput", "updateProfileOutput", + "findUserInput", "findUserOutput", + "renameUserInput", "renameUserOutput", + ] { + let needle_interface = format!("export interface {expected} "); + let needle_type = format!("export type {expected} ="); + assert!( + types.contains(&needle_interface) || types.contains(&needle_type), + "types.ts must export {expected:?} (interface or type)", + ); + } +} diff --git a/protocol/mizan-codegen/tests/vue_svelte_parity.rs b/protocol/mizan-codegen/tests/vue_svelte_parity.rs new file mode 100644 index 0000000..c60d328 --- /dev/null +++ b/protocol/mizan-codegen/tests/vue_svelte_parity.rs @@ -0,0 +1,66 @@ +//! Byte-equivalence tests for Vue + Svelte targets against JS baselines. + +use std::path::PathBuf; + +use mizan_codegen::config::{Config, SourceConfig}; +use mizan_codegen::emit::CodegenTarget; +use mizan_codegen::emit::svelte::SvelteAdapter; +use mizan_codegen::emit::vue::VueAdapter; +use mizan_codegen::fetch::parse_ir_from_str; + + +fn load_ir() -> mizan_codegen::ir::MizanIR { + let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/afi_schema.json"); + parse_ir_from_str(&std::fs::read_to_string(&path).unwrap()).unwrap() +} + + +fn fixture_config(target: &str) -> Config { + Config { + project_id: None, + output: PathBuf::from("/tmp"), + targets: vec![target.to_string()], + source: SourceConfig { fastapi: None, django: None }, + rust_kernel: None, + rust_crate_name: None, + } +} + + +fn assert_byte_equal(actual: &str, baseline_path: &str, label: &str) { + let baseline = std::fs::read_to_string( + PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(baseline_path), + ).unwrap(); + if actual != baseline { + for (lineno, (a, b)) in actual.lines().zip(baseline.lines()).enumerate() { + if a != b { + panic!( + "{label} diverges at line {}:\n expected: {b:?}\n actual: {a:?}", + lineno + 1, + ); + } + } + panic!( + "{label} diverges in length: actual={} expected={}", + actual.len(), baseline.len(), + ); + } +} + + +#[test] +fn vue_target_byte_match() { + let ir = load_ir(); + let files = VueAdapter.emit(&ir, &fixture_config("vue")); + assert_eq!(files.len(), 1); + assert_byte_equal(&files[0].content, "tests/fixtures/js_vue/vue.ts", "vue.ts"); +} + + +#[test] +fn svelte_target_byte_match() { + let ir = load_ir(); + let files = SvelteAdapter.emit(&ir, &fixture_config("svelte")); + assert_eq!(files.len(), 1); + assert_byte_equal(&files[0].content, "tests/fixtures/js_svelte/svelte.ts", "svelte.ts"); +} diff --git a/protocol/mizan-generate/bin/launcher.mjs b/protocol/mizan-generate/bin/launcher.mjs new file mode 100755 index 0000000..047cc71 --- /dev/null +++ b/protocol/mizan-generate/bin/launcher.mjs @@ -0,0 +1,41 @@ +#!/usr/bin/env node +// Mizan codegen npm-package shim — dispatches to the platform-appropriate +// `mizan-generate` Rust binary in this directory. Source for the binary +// lives at `protocol/mizan-codegen/`; published releases ship one binary +// per supported platform. + +import { spawn } from 'child_process' +import { fileURLToPath } from 'url' +import { dirname, join } from 'path' +import { existsSync } from 'fs' +import { platform, arch } from 'os' + +const here = dirname(fileURLToPath(import.meta.url)) + +const platforms = { + 'linux-x64': 'mizan-generate-linux-x64', + 'darwin-arm64': 'mizan-generate-darwin-arm64', + 'darwin-x64': 'mizan-generate-darwin-x64', + 'win32-x64': 'mizan-generate-win32-x64.exe', +} + +const key = `${platform()}-${arch()}` +const binName = platforms[key] +if (!binName) { + console.error(`[mizan-generate] no prebuilt binary for ${key}`) + process.exit(1) +} + +const binPath = join(here, binName) +if (!existsSync(binPath)) { + console.error(`[mizan-generate] binary missing: ${binPath}`) + console.error('[mizan-generate] build from source: cargo build --release --manifest-path /protocol/mizan-codegen/Cargo.toml') + process.exit(1) +} + +const child = spawn(binPath, process.argv.slice(2), { stdio: 'inherit' }) +child.on('exit', code => process.exit(code ?? 1)) +child.on('error', err => { + console.error(`[mizan-generate] failed to spawn ${binPath}: ${err.message}`) + process.exit(1) +}) diff --git a/protocol/mizan-generate/bin/mizan-generate-linux-x64 b/protocol/mizan-generate/bin/mizan-generate-linux-x64 new file mode 100755 index 0000000000000000000000000000000000000000..94787073b65c6bb29d5389eb98dedfe778e7951b GIT binary patch literal 2379408 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

3|jw|xDq@Wz}Oq~ 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

    s6Q48#V5-;4jX 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

    G8%o4Cb>(cDfV! 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

  1. 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Ć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

    }Ui1#gF1ZQPRT9LKGcA_gd8aeep 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

    hQm8 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 z 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

    Y0Xk(gm%G0FB!kWoKHOqQrY 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 p.charAt(0).toUpperCase() + p.slice(1)).join('') -} - -async function generate(config, options = {}) { - const { output, target: targetFlag } = options - const outputDir = output || config.output || 'src/api' - const targets = (targetFlag || config.target || 'react').split(',').map(t => t.trim()) - - console.log(`[mizan] Starting generation (targets: ${targets.join(', ')})...`) - - const fullOutputDir = path.resolve(frontendDir, outputDir) - let mizanSchema = null - let channelsSchema = null - - // ── Channels (React-only for now) ─────────────────────────────────── - - try { - console.log('[mizan] Fetching channels schema...') - channelsSchema = await fetchChannelsSchema(config.source, frontendDir) - const channelCount = channelsSchema['x-mizan-channels']?.length || 0 - if (channelCount > 0 && targets.includes('react')) { - console.log(`[mizan] Found ${channelCount} channels`) - const { types, hooks } = await generateChannelsFiles(channelsSchema) - await writeOutput(path.join(fullOutputDir, 'channels.ts'), types) - if (hooks) await writeOutput(path.join(fullOutputDir, 'channels.hooks.tsx'), hooks) - } - } catch (err) { - console.log(`[mizan] Channels not available: ${err.message}`) - } - - // ── Mizan functions ───────────────────────────────────────────────── - - try { - console.log('[mizan] Fetching mizan schema...') - mizanSchema = await fetchMizanSchema(config.source, frontendDir) - - const functions = mizanSchema['x-mizan-functions'] || [] - const contextGroups = mizanSchema['x-mizan-contexts'] || {} - - if (functions.length === 0) { - console.log('[mizan] No functions registered') - return - } - - console.log(`[mizan] Found ${functions.length} functions`) - - // ── Stage 1: Framework-agnostic ───────────────────────────────── - - // Types - const types = await generateTypes(mizanSchema) - await writeOutput(path.join(fullOutputDir, 'types.ts'), types) - console.log('[mizan] Stage 1 -> types.ts') - - // Context files - await fs.mkdir(path.join(fullOutputDir, 'contexts'), { recursive: true }) - for (const [ctxName, ctxMeta] of Object.entries(contextGroups)) { - const content = generateContextFile(ctxName, ctxMeta, functions) - await writeOutput(path.join(fullOutputDir, 'contexts', `${ctxName}.ts`), content) - console.log(`[mizan] Stage 1 -> contexts/${ctxName}.ts`) - } - - // Mutation + function files - const regularFns = functions.filter(fn => !fn.isContext && !fn.isForm) - if (regularFns.length > 0) { - await fs.mkdir(path.join(fullOutputDir, 'mutations'), { recursive: true }) - await fs.mkdir(path.join(fullOutputDir, 'functions'), { recursive: true }) - - for (const fn of regularFns) { - const dir = fn.affects ? 'mutations' : 'functions' - const content = fn.affects ? generateMutationFile(fn) : generateFunctionFile(fn) - await writeOutput(path.join(fullOutputDir, dir, `${fn.camelName}.ts`), content) - console.log(`[mizan] Stage 1 -> ${dir}/${fn.camelName}.ts`) - } - } - - // Stage 1 index - const stage1Index = generateStage1Index(mizanSchema) - await writeOutput(path.join(fullOutputDir, 'index.ts'), stage1Index) - console.log('[mizan] Stage 1 -> index.ts') - - // ── Stage 2: Framework-specific ───────────────────────────────── - - for (const target of targets) { - let content - let filename - - switch (target) { - case 'react': - content = generateReactAdapter(mizanSchema) - filename = 'react.tsx' - break - case 'vue': - content = generateVueAdapter(mizanSchema) - filename = 'vue.ts' - break - case 'svelte': - content = generateSvelteAdapter(mizanSchema) - filename = 'svelte.ts' - break - default: - console.warn(`[mizan] Unknown target: ${target}`) - continue - } - - if (content) { - await writeOutput(path.join(fullOutputDir, filename), content) - console.log(`[mizan] Stage 2 -> ${filename}`) - } - } - - // Append Stage 2 re-exports to index.ts so `import { useEcho, MizanContext } from './api'` works - const adapterExports = targets - .map(t => ({ react: 'react', vue: 'vue', svelte: 'svelte' })[t]) - .filter(Boolean) - .map(name => `export * from './${name}'`) - .join('\n') - if (adapterExports) { - const indexPath = path.join(fullOutputDir, 'index.ts') - const existing = await fs.readFile(indexPath, 'utf8') - await writeOutput(indexPath, `${existing}\n// Stage 2 framework adapter\n${adapterExports}\n`) - } - - // Schema JSON - await writeOutput( - path.join(fullOutputDir, 'schema.json'), - JSON.stringify(mizanSchema, null, 2), - ) - - } catch (err) { - console.log(`[mizan] Schema not available: ${err.message}`) - } - - console.log('[mizan] Generation complete!') -} - -async function main() { - const args = process.argv.slice(2) - - let configPath = 'django.config.mjs' - let watchMode = false - let output = null - let target = null - - for (let i = 0; i < args.length; i++) { - if (args[i] === '--config' || args[i] === '-c') configPath = args[++i] - else if (args[i] === '--watch' || args[i] === '-w') watchMode = true - else if (args[i] === '--output' || args[i] === '-o') output = args[++i] - else if (args[i] === '--target' || args[i] === '-t') target = args[++i] - else if (args[i] === '--help' || args[i] === '-h') { - console.log(` -mizan Code Generator - -Usage: - npx mizan-generate [options] - -Options: - -c, --config Config file (default: django.config.mjs) - -t, --target Comma-separated: react,vue,svelte (default: react) - -o, --output

    Output directory (default: src/api) - -w, --watch Watch mode - -h, --help Show help -`) - process.exit(0) - } - } - - const config = await loadConfig(configPath) - const options = { output, target } - - if (watchMode) { - await generate(config, options) - console.log('[mizan] Watching for changes...') - const { watch: chokidarWatch } = await import('chokidar') - if (config.source.django) { - const djangoDir = path.resolve(frontendDir, path.dirname(config.source.django.managePath)) - let timeout = null - const watcher = chokidarWatch([path.join(djangoDir, '**/*.py')], { - ignored: ['**/node_modules/**', '**/__pycache__/**', '**/migrations/**'], - ignoreInitial: true, - }) - watcher.on('change', () => { - if (timeout) clearTimeout(timeout) - timeout = setTimeout(() => generate(config, options), 1000) - }) - } - process.on('SIGINT', () => process.exit(0)) - } else { - await generate(config, options) - } -} - -main().catch(err => { - console.error('[mizan] Error:', err.message) - process.exit(1) -}) diff --git a/protocol/mizan-generate/generator/lib/adapters/react.mjs b/protocol/mizan-generate/generator/lib/adapters/react.mjs deleted file mode 100644 index 4d4cc86..0000000 --- a/protocol/mizan-generate/generator/lib/adapters/react.mjs +++ /dev/null @@ -1,298 +0,0 @@ -/** - * React Stage 2 — Generates idiomatic React providers + hooks on top of the kernel. - * - * The kernel (@mizan/base) owns data, status, error. This adapter wraps each - * registered context in a React Provider component so kernel subscription happens - * once per provider mount, and consumer hooks read from React Context. - * - * Output shape: - * root — calls configure(), auto-mounts global - * per-named-context provider - * - * - * - * - * useGlobalContext() full ContextState - * useCurrentUser() convenience: data field - * useUserContext() full ContextState - * useUserProfile() convenience: data field - * useEcho() mutation/plain — { mutate, isPending, error } - * useMizan() escape hatch — { call, fetch } - */ - -function pascalCase(str) { - return str.split(/[.\-_]/).map(p => p.charAt(0).toUpperCase() + p.slice(1)).join('') -} - -export function generateReactAdapter(schema) { - const functions = schema['x-mizan-functions'] || [] - const contextGroups = schema['x-mizan-contexts'] || {} - const namedContexts = Object.entries(contextGroups).filter(([n]) => n !== 'global') - const hasGlobal = !!contextGroups.global - const globalFns = functions.filter(fn => fn.isContext === 'global') - const mutations = functions.filter(fn => !fn.isContext && !fn.isForm && fn.affects) - const plainFns = functions.filter(fn => !fn.isContext && !fn.isForm && !fn.affects) - - const lines = [] - - // ── Header + imports ───────────────────────────────────────────────── - - lines.push( - "'use client'", - '', - '// AUTO-GENERATED by mizan — do not edit', - '', - "import {", - " createContext,", - " useCallback,", - " useContext,", - " useEffect,", - " useRef,", - " useState,", - " useSyncExternalStore,", - " type ReactNode,", - "} from 'react'", - "import {", - " configure,", - " initSession,", - " mizanCall,", - " mizanFetch,", - " MizanError,", - " registerContext,", - " type ContextState,", - "} from '@mizan/base'", - '', - ) - - const stage1Imports = [] - for (const [ctxName] of Object.entries(contextGroups)) { - const p = pascalCase(ctxName) - stage1Imports.push(`fetch${p}Context`, `type ${p}ContextData`, `type ${p}ContextParams`) - } - for (const fn of [...mutations, ...plainFns]) { - stage1Imports.push(`call${pascalCase(fn.camelName)}`) - } - if (stage1Imports.length > 0) { - lines.push(`import { ${stage1Imports.join(', ')} } from './index'`, '') - } - - // ── Internal helper: subscribe to kernel state from a Provider ────── - - lines.push( - '// Internal — runs inside a Provider, registers with the kernel exactly once.', - 'function useContextSubscription(', - ' name: string,', - ' params: Record,', - ' fetchFn: () => Promise,', - ' initialData?: T,', - '): ContextState {', - ' const ref = useRef | null>(null)', - ' if (!ref.current) {', - ' ref.current = registerContext(name, params, fetchFn, initialData)', - ' }', - ' const handle = ref.current', - '', - ' useEffect(() => {', - " if (handle.getState().status === 'idle') handle.refetch()", - ' return () => handle.unregister()', - ' }, [handle])', - '', - ' return useSyncExternalStore(handle.subscribe, handle.getState, handle.getState)', - '}', - '', - ) - - // ── Internal helper: mutation wrapper ─────────────────────────────── - - lines.push( - '// Internal — wraps an imperative call() with isPending / error state.', - 'interface MutationHook {', - ' mutate: (args: TArgs) => Promise', - ' isPending: boolean', - ' error: Error | null', - '}', - '', - 'function useMutation(', - ' callFn: (args: TArgs) => Promise,', - '): MutationHook {', - ' const [isPending, setIsPending] = useState(false)', - ' const [error, setError] = useState(null)', - '', - ' const mutate = useCallback(async (args: TArgs) => {', - ' setIsPending(true)', - ' setError(null)', - ' try {', - ' return await callFn(args)', - ' } catch (e) {', - ' setError(e as Error)', - ' throw e', - ' } finally {', - ' setIsPending(false)', - ' }', - ' }, [callFn])', - '', - ' return { mutate, isPending, error }', - '}', - '', - ) - - // ── Global context provider + hooks ───────────────────────────────── - - if (hasGlobal) { - lines.push( - '// ── Global Context ──', - '', - 'const GlobalCtx = createContext | null>(null)', - '', - 'export function GlobalContextProvider({ children }: { children: ReactNode }) {', - " const ssrData = typeof window !== 'undefined' ? (window as any).__MIZAN_SSR_DATA__ : undefined", - " const state = useContextSubscription('global', {}, () => fetchGlobalContext({} as any), ssrData)", - ' return {children}', - '}', - '', - 'export function useGlobalContext(): ContextState {', - ' const ctx = useContext(GlobalCtx)', - " if (!ctx) throw new Error('useGlobalContext requires or ')", - ' return ctx', - '}', - '', - ) - - for (const fn of globalFns) { - const p = pascalCase(fn.camelName) - lines.push( - `export function use${p}(): ${fn.outputType} | null {`, - ` return useGlobalContext().data?.${fn.name} ?? null`, - '}', - '', - ) - } - } - - // ── Named context providers + hooks ───────────────────────────────── - - for (const [ctxName, ctxMeta] of namedContexts) { - const p = pascalCase(ctxName) - const ctxFunctions = functions.filter(fn => fn.isContext === ctxName) - const paramKeys = Object.keys(ctxMeta.params || {}) - const hasParams = paramKeys.length > 0 - - lines.push( - `// ── ${p} Context ──`, - '', - `const ${p}Ctx = createContext | null>(null)`, - '', - ) - - if (hasParams) { - lines.push( - `export function ${p}Context({ children, ...params }: ${p}ContextParams & { children: ReactNode }) {`, - ` const state = useContextSubscription('${ctxName}', params, () => fetch${p}Context(params))`, - ` return <${p}Ctx.Provider value={state}>{children}`, - '}', - ) - } else { - lines.push( - `export function ${p}Context({ children }: { children: ReactNode }) {`, - ` const state = useContextSubscription('${ctxName}', {}, () => fetch${p}Context({} as any))`, - ` return <${p}Ctx.Provider value={state}>{children}`, - '}', - ) - } - lines.push('') - - lines.push( - `export function use${p}Context(): ContextState<${p}ContextData> {`, - ` const ctx = useContext(${p}Ctx)`, - ` if (!ctx) throw new Error('use${p}Context requires <${p}Context>')`, - ' return ctx', - '}', - '', - ) - - for (const fn of ctxFunctions) { - const fnPascal = pascalCase(fn.camelName) - lines.push( - `export function use${fnPascal}(): ${fn.outputType} | null {`, - ` return use${p}Context().data?.${fn.name} ?? null`, - '}', - '', - ) - } - } - - // ── Mutation + plain function hooks ───────────────────────────────── - - for (const fn of [...mutations, ...plainFns]) { - const p = pascalCase(fn.camelName) - if (fn.hasInput) { - lines.push( - `export function use${p}() {`, - ` return useMutation[0], Awaited>>(call${p})`, - '}', - '', - ) - } else { - lines.push( - `export function use${p}() {`, - ` return useMutation>>(() => call${p}() as any)`, - '}', - '', - ) - } - } - - // ── Root MizanContext provider ────────────────────────────────────── - - lines.push( - '// ── MizanContext root provider ──', - '', - 'export interface MizanContextProps {', - ' /** Base URL for protocol endpoints. Defaults to "/api/mizan". */', - ' baseUrl?: string', - ' children: ReactNode', - '}', - '', - '/**', - " * Root provider — calls configure() once and mounts the global context (if defined).", - ' * Must wrap any component using Mizan-generated hooks.', - ' */', - 'export function MizanContext({ baseUrl, children }: MizanContextProps) {', - ' const configured = useRef(false)', - ' if (!configured.current) {', - ' if (baseUrl) configure({ baseUrl })', - ' configured.current = true', - ' }', - ) - if (hasGlobal) { - lines.push(' return {children}') - } else { - lines.push(' return <>{children}') - } - lines.push('}', '') - - // ── Escape hatch: useMizan ────────────────────────────────────────── - - lines.push( - '// ── Imperative escape hatch ──', - '', - '/**', - ' * Returns the imperative kernel API. For test harnesses or rare cases where', - ' * a typed generated hook does not fit. Most app code should use the typed hooks.', - ' */', - 'export function useMizan() {', - ' return { call: mizanCall, fetch: mizanFetch }', - '}', - '', - ) - - // ── Re-exports ────────────────────────────────────────────────────── - - lines.push( - "export type { ContextState } from '@mizan/base'", - "export { configure, initSession, MizanError } from '@mizan/base'", - '', - ) - - return lines.join('\n') -} diff --git a/protocol/mizan-generate/generator/lib/adapters/svelte.mjs b/protocol/mizan-generate/generator/lib/adapters/svelte.mjs deleted file mode 100644 index bc580fb..0000000 --- a/protocol/mizan-generate/generator/lib/adapters/svelte.mjs +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Svelte Stage 2 — Generates stores from Stage 1 output. - * - * Subscribes to the kernel for state. Returns readable stores. - */ - -function pascalCase(str) { - return str.split(/[.\-_]/).map(p => p.charAt(0).toUpperCase() + p.slice(1)).join('') -} - -export function generateSvelteAdapter(schema) { - const functions = schema['x-mizan-functions'] || [] - const contextGroups = schema['x-mizan-contexts'] || {} - const mutations = functions.filter(fn => !fn.isContext && !fn.isForm && fn.affects) - const plainFns = functions.filter(fn => !fn.isContext && !fn.isForm && !fn.affects) - - const lines = [ - '// AUTO-GENERATED by mizan — do not edit', - '', - "import { readable, type Readable } from 'svelte/store'", - "import { registerContext, type ContextState } from '@mizan/base'", - '', - ] - - const stage1Imports = [] - for (const [ctxName] of Object.entries(contextGroups)) { - const p = pascalCase(ctxName) - stage1Imports.push(`fetch${p}Context`, `type ${p}ContextData`, `type ${p}ContextParams`) - } - for (const fn of [...mutations, ...plainFns]) { - stage1Imports.push(`call${pascalCase(fn.camelName)}`) - } - if (stage1Imports.length > 0) { - lines.push(`import { ${stage1Imports.join(', ')} } from '../index'`) - lines.push('') - } - - for (const [ctxName, ctxMeta] of Object.entries(contextGroups)) { - const p = pascalCase(ctxName) - const ctxFunctions = functions.filter(fn => fn.isContext === ctxName) - const paramEntries = Object.entries(ctxMeta.params || {}) - const paramsArg = paramEntries.length > 0 ? 'params' : '{} as any' - - if (paramEntries.length > 0) { - lines.push(`export function create${p}Context(params: ${p}ContextParams) {`) - } else { - lines.push(`export function create${p}Context() {`) - } - - // Use readable store backed by kernel subscription - lines.push(` const store = readable>(`) - lines.push(` { data: null, status: 'idle', error: null },`) - lines.push(` (set) => {`) - lines.push(` const handle = registerContext('${ctxName}', ${paramsArg}, () => fetch${p}Context(${paramsArg}))`) - lines.push(` const unsub = handle.subscribe(() => set(handle.getState()))`) - lines.push(` handle.refetch()`) - lines.push(` return () => { unsub(); handle.unregister() }`) - lines.push(` },`) - lines.push(` )`) - lines.push('') - lines.push(` return store`) - lines.push('}') - lines.push('') - } - - // Re-export mutations as-is from Stage 1 - for (const fn of [...mutations, ...plainFns]) { - const p = pascalCase(fn.camelName) - lines.push(`export { call${p} } from '../index'`) - } - lines.push('') - - lines.push("export type { ContextState } from '@mizan/base'") - lines.push("export { configure, initSession, MizanError } from '@mizan/base'") - lines.push('') - - return lines.join('\n') -} diff --git a/protocol/mizan-generate/generator/lib/adapters/vue.mjs b/protocol/mizan-generate/generator/lib/adapters/vue.mjs deleted file mode 100644 index 13ce58a..0000000 --- a/protocol/mizan-generate/generator/lib/adapters/vue.mjs +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Vue Stage 2 — Generates composables from Stage 1 output. - * - * Subscribes to the kernel for state. Vue reactivity wraps kernel notifications. - */ - -function pascalCase(str) { - return str.split(/[.\-_]/).map(p => p.charAt(0).toUpperCase() + p.slice(1)).join('') -} - -export function generateVueAdapter(schema) { - const functions = schema['x-mizan-functions'] || [] - const contextGroups = schema['x-mizan-contexts'] || {} - const mutations = functions.filter(fn => !fn.isContext && !fn.isForm && fn.affects) - const plainFns = functions.filter(fn => !fn.isContext && !fn.isForm && !fn.affects) - - const lines = [ - '// AUTO-GENERATED by mizan — do not edit', - '', - "import { ref, computed, onMounted, onUnmounted, onServerPrefetch, type ComputedRef } from 'vue'", - "import { registerContext, type ContextState } from '@mizan/base'", - '', - ] - - const stage1Imports = [] - for (const [ctxName] of Object.entries(contextGroups)) { - const p = pascalCase(ctxName) - stage1Imports.push(`fetch${p}Context`, `type ${p}ContextData`, `type ${p}ContextParams`) - } - for (const fn of [...mutations, ...plainFns]) { - stage1Imports.push(`call${pascalCase(fn.camelName)}`) - } - if (stage1Imports.length > 0) { - lines.push(`import { ${stage1Imports.join(', ')} } from '../index'`) - lines.push('') - } - - for (const [ctxName, ctxMeta] of Object.entries(contextGroups)) { - const p = pascalCase(ctxName) - const ctxFunctions = functions.filter(fn => fn.isContext === ctxName) - const paramEntries = Object.entries(ctxMeta.params || {}) - const paramsArg = paramEntries.length > 0 ? 'params' : '{} as any' - - if (paramEntries.length > 0) { - lines.push(`export function use${p}Context(params: ${p}ContextParams) {`) - } else { - lines.push(`export function use${p}Context() {`) - } - - lines.push(` const state = ref>({ data: null, status: 'idle', error: null })`) - lines.push(` let handle: ReturnType | null = null`) - lines.push('') - lines.push(` onMounted(() => {`) - lines.push(` handle = registerContext('${ctxName}', ${paramsArg}, () => fetch${p}Context(${paramsArg}))`) - lines.push(` handle.subscribe(() => { state.value = handle!.getState() })`) - lines.push(` handle.refetch()`) - lines.push(` })`) - lines.push('') - lines.push(` onServerPrefetch(async () => {`) - lines.push(` handle = registerContext('${ctxName}', ${paramsArg}, () => fetch${p}Context(${paramsArg}))`) - lines.push(` await handle.refetch()`) - lines.push(` state.value = handle.getState()`) - lines.push(` })`) - lines.push('') - lines.push(` onUnmounted(() => { handle?.unregister() })`) - lines.push('') - lines.push(` return {`) - lines.push(` state,`) - for (const fn of ctxFunctions) { - lines.push(` ${fn.camelName}: computed(() => state.value.data?.${fn.name} ?? null) as ComputedRef<${fn.outputType} | null>,`) - } - lines.push(` loading: computed(() => state.value.status === 'loading'),`) - lines.push(` error: computed(() => state.value.error),`) - lines.push(` }`) - lines.push('}') - lines.push('') - } - - for (const fn of [...mutations, ...plainFns]) { - const p = pascalCase(fn.camelName) - lines.push(`export function use${p}() {`) - lines.push(` const isPending = ref(false)`) - lines.push(` const error = ref(null)`) - if (fn.hasInput) { - lines.push(` async function mutate(args: Parameters[0]) {`) - } else { - lines.push(` async function mutate() {`) - } - lines.push(` isPending.value = true; error.value = null`) - lines.push(` try { return await call${p}(${fn.hasInput ? 'args' : ''}) }`) - lines.push(` catch (e) { error.value = e as Error; throw e }`) - lines.push(` finally { isPending.value = false }`) - lines.push(` }`) - lines.push(` return { mutate, isPending, error }`) - lines.push('}') - lines.push('') - } - - lines.push("export type { ContextState } from '@mizan/base'") - lines.push("export { configure, initSession, MizanError } from '@mizan/base'") - lines.push('') - - return lines.join('\n') -} diff --git a/protocol/mizan-generate/generator/lib/channels.mjs b/protocol/mizan-generate/generator/lib/channels.mjs deleted file mode 100644 index d634c37..0000000 --- a/protocol/mizan-generate/generator/lib/channels.mjs +++ /dev/null @@ -1,155 +0,0 @@ -/** - * Channels Code Generator - * - * Generates TypeScript types and React hooks from Channels OpenAPI schema. - * Uses openapi-typescript for robust type generation. - */ - -import openapiTS, { astToString } from 'openapi-typescript' - -/** - * Generate channels TypeScript types using openapi-typescript. - */ -export async function generateChannelsTypes(schema) { - // Generate types using openapi-typescript - const ast = await openapiTS(schema) - const typesCode = astToString(ast) - - const lines = [ - '// AUTO-GENERATED by mizan - do not edit manually', - '// Regenerate with: npm run schemas', - '', - '// ============================================================================', - '// OpenAPI Types (generated by openapi-typescript)', - '// ============================================================================', - '', - typesCode, - '', - ] - - // Extract channel metadata from x-mizan-channels extension - const channels = schema['x-mizan-channels'] || [] - - if (channels.length > 0) { - lines.push('// ============================================================================') - lines.push('// Convenience Type Exports') - lines.push('// ============================================================================') - lines.push('') - - for (const channel of channels) { - if (channel.hasParams) { - lines.push(`export type ${channel.paramsType} = components["schemas"]["${channel.paramsType}"]`) - } - if (channel.hasReactMessage) { - lines.push(`export type ${channel.reactMessageType} = components["schemas"]["${channel.reactMessageType}"]`) - } - if (channel.hasDjangoMessage) { - lines.push(`export type ${channel.djangoMessageType} = components["schemas"]["${channel.djangoMessageType}"]`) - } - } - - lines.push('') - lines.push('// ============================================================================') - lines.push('// Channel Registry') - lines.push('// ============================================================================') - lines.push('') - lines.push('export const CHANNELS = {') - for (const channel of channels) { - lines.push(` ${channel.name}: {`) - lines.push(` name: '${channel.name}',`) - lines.push(` pascalName: '${channel.pascalName}',`) - lines.push(` hasParams: ${channel.hasParams},`) - lines.push(` hasReactMessage: ${channel.hasReactMessage},`) - lines.push(` hasDjangoMessage: ${channel.hasDjangoMessage},`) - if (channel.hasParams) { - lines.push(` paramsType: '${channel.paramsType}',`) - } - if (channel.hasReactMessage) { - lines.push(` reactMessageType: '${channel.reactMessageType}',`) - } - if (channel.hasDjangoMessage) { - lines.push(` djangoMessageType: '${channel.djangoMessageType}',`) - } - lines.push(` },`) - } - lines.push('} as const') - } else { - lines.push('export const CHANNELS = {} as const') - } - - lines.push('') - - return lines.join('\n') -} - -/** - * Generate channel hooks from metadata. - */ -export function generateChannelsHooks(schema) { - const channels = schema['x-mizan-channels'] || [] - - if (channels.length === 0) { - return null - } - - const lines = [ - "'use client'", - '', - '// AUTO-GENERATED by mizan - do not edit manually', - '// Regenerate with: npm run schemas', - '', - "import { useChannel, type ChannelSubscription } from 'mizan/channels'", - '', - ] - - // Collect type imports - const typeImports = [] - for (const channel of channels) { - if (channel.hasParams) typeImports.push(channel.paramsType) - if (channel.hasReactMessage) typeImports.push(channel.reactMessageType) - if (channel.hasDjangoMessage) typeImports.push(channel.djangoMessageType) - } - - if (typeImports.length > 0) { - lines.push(`import type { ${typeImports.join(', ')} } from './generated.channels'`) - lines.push('') - } - - // Generate hooks for each channel - lines.push('// ============================================================================') - lines.push('// Channel Hooks') - lines.push('// ============================================================================') - lines.push('') - - for (const channel of channels) { - const paramsType = channel.hasParams ? channel.paramsType : 'Record' - const reactMsgType = channel.hasReactMessage ? channel.reactMessageType : 'never' - const djangoMsgType = channel.hasDjangoMessage ? channel.djangoMessageType : 'never' - - lines.push(`/**`) - lines.push(` * Hook for the ${channel.name} channel.`) - lines.push(` */`) - - if (channel.hasParams) { - lines.push(`export function use${channel.pascalName}Channel(params: ${paramsType}): ChannelSubscription<${paramsType}, ${djangoMsgType}, ${reactMsgType}> {`) - lines.push(` return useChannel('${channel.name}', params)`) - } else { - lines.push(`export function use${channel.pascalName}Channel(): ChannelSubscription, ${djangoMsgType}, ${reactMsgType}> {`) - lines.push(` return useChannel('${channel.name}', {})`) - } - lines.push('}') - lines.push('') - } - - return lines.join('\n') -} - -/** - * Generate all channels files. - */ -export async function generateChannelsFiles(schema) { - const types = await generateChannelsTypes(schema) - const hooks = generateChannelsHooks(schema) - - return { types, hooks } -} diff --git a/protocol/mizan-generate/generator/lib/fetch.mjs b/protocol/mizan-generate/generator/lib/fetch.mjs deleted file mode 100644 index 26d4100..0000000 --- a/protocol/mizan-generate/generator/lib/fetch.mjs +++ /dev/null @@ -1,117 +0,0 @@ -/** - * Schema Fetching — dispatches on the backend type configured in - * `source.django` or `source.fastapi`. - * - * Both flavors spawn a Python subprocess that prints schema JSON to stdout: - * Django: `python manage.py export_mizan_schema --indent 0` - * FastAPI: `python -m mizan_fastapi.cli ` - */ - -import { spawn } from 'child_process' -import path from 'path' - - -function runSubprocess(cmd, args, opts) { - const { cwd, env, label } = opts - return new Promise((resolve, reject) => { - const proc = spawn(cmd, args, { - cwd, - stdio: ['ignore', 'pipe', 'pipe'], - shell: process.platform === 'win32', - env, - }) - - let stdout = '' - let stderr = '' - - proc.stdout.on('data', (data) => { stdout += data.toString() }) - proc.stderr.on('data', (data) => { stderr += data.toString() }) - - proc.on('close', (code) => { - if (code !== 0) { - reject(new Error(`${label} command failed (exit ${code}):\n${stderr}`)) - return - } - - const jsonStart = stdout.indexOf('{') - if (jsonStart === -1) { - reject(new Error(`No JSON found in ${label} output:\n${stdout}\n${stderr}`)) - return - } - - try { - resolve(JSON.parse(stdout.slice(jsonStart))) - } catch (err) { - reject(new Error(`Failed to parse JSON from ${label}:\n${err.message}\n${stdout}`)) - } - }) - - proc.on('error', (err) => { - reject(new Error(`Failed to spawn ${label} command: ${err.message}`)) - }) - }) -} - - -function runDjangoCommand(source, cwd, command) { - const managePath = path.resolve(cwd, source.django.managePath) - const manageDir = path.dirname(managePath) - - let cmd, args - if (source.django.command) { - cmd = source.django.command[0] - args = [...source.django.command.slice(1), 'manage.py', command, '--indent', '0'] - } else { - const python = source.django.python || 'python' - cmd = python - args = [managePath, command, '--indent', '0'] - } - - const env = source.django.env ? { ...process.env, ...source.django.env } : undefined - return runSubprocess(cmd, args, { cwd: manageDir, env, label: 'Django' }) -} - - -function runFastapiSchemaCommand(source, cwd) { - const fastapiCwd = source.fastapi.cwd - ? path.resolve(cwd, source.fastapi.cwd) - : cwd - - let cmd, args - if (source.fastapi.command) { - cmd = source.fastapi.command[0] - args = [...source.fastapi.command.slice(1), '-m', 'mizan_fastapi.cli', source.fastapi.module] - } else { - cmd = source.fastapi.python || 'python' - args = ['-m', 'mizan_fastapi.cli', source.fastapi.module] - } - - const env = source.fastapi.env ? { ...process.env, ...source.fastapi.env } : undefined - return runSubprocess(cmd, args, { cwd: fastapiCwd, env, label: 'FastAPI' }) -} - - -/** - * Fetch channels schema. Channels are a Django-only feature; FastAPI - * projects use native WebSockets and don't go through this path. - */ -export async function fetchChannelsSchema(source, cwd) { - if (!source.django) { - throw new Error('Channels schema export requires django source configuration') - } - return runDjangoCommand(source, cwd, 'export_channels_schema') -} - - -/** - * Fetch mizan schema. Dispatches on whichever backend source is configured. - */ -export async function fetchMizanSchema(source, cwd) { - if (source.fastapi) { - return runFastapiSchemaCommand(source, cwd) - } - if (source.django) { - return runDjangoCommand(source, cwd, 'export_mizan_schema') - } - throw new Error('mizan schema export requires source.django or source.fastapi') -} diff --git a/protocol/mizan-generate/generator/lib/index.mjs b/protocol/mizan-generate/generator/lib/index.mjs deleted file mode 100644 index 8a19ac8..0000000 --- a/protocol/mizan-generate/generator/lib/index.mjs +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Index File Generator - * - * Generates a consolidated index.ts that re-exports everything - * from the generated files for clean imports. - */ - -function pascalCase(str) { - return str.charAt(0).toUpperCase() + str.slice(1) -} - -function toPascalCase(str) { - return str - .split(/[.\-_]/) - .map(part => part.charAt(0).toUpperCase() + part.slice(1)) - .join('') -} - -/** - * Generate the consolidated index.ts file. - */ -export function generateIndex({ channelsSchema, mizanSchema }) { - const lines = [ - '/**', - ' * mizan API - Consolidated Exports', - ' *', - ' * Import everything from here:', - ' *', - ' * @example', - ' * ```tsx', - ' * import {', - ' * MizanContext,', - ' * useCurrentUser,', - ' * useEcho,', - ' * useChatChannel,', - ' * } from \'@/api\'', - ' * ```', - ' */', - '', - '// AUTO-GENERATED by mizan - do not edit manually', - '// Regenerate with: npm run schemas', - '', - ] - - const functions = mizanSchema?.['x-mizan-functions'] || [] - const contextGroups = mizanSchema?.['x-mizan-contexts'] || {} - const hasMizan = functions.length > 0 - - if (hasMizan) { - const globalContexts = functions.filter(fn => fn.isContext === 'global') - const regularFunctions = functions.filter(fn => !fn.isContext && !fn.isForm) - const namedContextEntries = Object.entries(contextGroups).filter(([name]) => name !== 'global') - - lines.push('// =============================================================================') - lines.push('// mizan Provider & Hooks') - lines.push('// =============================================================================') - lines.push('') - - // Server exports - if (globalContexts.length > 0) { - lines.push('export {') - lines.push(' getMizanHydration,') - lines.push(' getDjangoHydration,') - lines.push(' type MizanHydrationData,') - lines.push(' type DjangoHydration,') - lines.push("} from './generated.server'") - lines.push('') - } - - // Client exports - lines.push('export {') - lines.push(' // Provider') - lines.push(' MizanContext,') - lines.push(' type MizanContextProps,') - lines.push(' DjangoContext,') - lines.push(' type DjangoContextProps,') - - // Global context hooks - if (globalContexts.length > 0) { - lines.push('') - lines.push(' // Global context hooks') - for (const ctx of globalContexts) { - const hookPascal = pascalCase(ctx.camelName) - lines.push(` use${hookPascal},`) - } - lines.push('') - lines.push(' // Refresh hooks') - lines.push(' useMizanRefresh,') - lines.push(' useDjangoRefresh,') - } - - // Named context providers and hooks - if (namedContextEntries.length > 0) { - lines.push('') - lines.push(' // Named context providers') - for (const [ctxName, ctxMeta] of namedContextEntries) { - const ctxPascal = toPascalCase(ctxName) - lines.push(` ${ctxPascal}Context,`) - // Hooks for this context's functions - const ctxFunctions = functions.filter(fn => fn.isContext === ctxName) - for (const fn of ctxFunctions) { - const hookPascal = pascalCase(fn.camelName) - lines.push(` use${hookPascal},`) - } - } - } - - // Function hooks (mutations + plain) - if (regularFunctions.length > 0) { - lines.push('') - lines.push(' // Function hooks') - for (const fn of regularFunctions) { - const pascal = pascalCase(fn.camelName) - lines.push(` use${pascal},`) - } - } - - lines.push('') - lines.push(' // Re-exports from mizan library') - lines.push(' useMizan,') - lines.push(' useMizanStatus,') - lines.push(' usePush,') - lines.push(' DjangoError,') - lines.push(' type ConnectionStatus,') - lines.push(' type PushMessage,') - lines.push(' type PushListener,') - lines.push("} from './generated.provider'") - lines.push('') - } - - // ========================================================================== - // Channel Hooks - // ========================================================================== - - const channels = channelsSchema?.['x-mizan-channels'] || [] - - if (channels.length > 0) { - lines.push('// =============================================================================') - lines.push('// Channel Hooks') - lines.push('// =============================================================================') - lines.push('') - lines.push('export {') - for (const ch of channels) { - lines.push(` use${ch.pascalName}Channel,`) - } - lines.push("} from './generated.channels.hooks'") - lines.push('') - - lines.push('// =============================================================================') - lines.push('// Channel Types') - lines.push('// =============================================================================') - lines.push('') - lines.push('export type {') - for (const ch of channels) { - if (ch.hasParams) lines.push(` ${ch.paramsType},`) - if (ch.hasReactMessage) lines.push(` ${ch.reactMessageType},`) - if (ch.hasDjangoMessage) lines.push(` ${ch.djangoMessageType},`) - } - lines.push("} from './generated.channels'") - lines.push('') - } - - return lines.join('\n') -} diff --git a/protocol/mizan-generate/generator/lib/mizan.mjs b/protocol/mizan-generate/generator/lib/mizan.mjs deleted file mode 100644 index f8b455b..0000000 --- a/protocol/mizan-generate/generator/lib/mizan.mjs +++ /dev/null @@ -1,980 +0,0 @@ -/** - * mizan Code Generator - * - * Generates TypeScript types and React provider from mizan OpenAPI schema. - * Uses openapi-typescript for robust type generation. - * - * Output structure: - * - generated.mizan.ts - Types only (from OpenAPI) - * - generated.provider.tsx - Typed provider wrapping MizanProvider + hooks - * - generated.forms.ts - Typed form hooks with Zod schemas - */ - -import openapiTS, { astToString } from 'openapi-typescript' - -// TypeScript SyntaxKind values for AST manipulation -const SyntaxKind = { - InterfaceDeclaration: 265, - TypeAliasDeclaration: 266, - PropertySignature: 172, - TypeReference: 184, - IndexedAccessType: 200, - Identifier: 80, - StringLiteral: 11, -} - -/** - * Get identifier name from AST node. - */ -function idName(node) { - return node?.kind === SyntaxKind.Identifier ? node.escapedText : undefined -} - -/** - * Extract schema names from openapi-typescript AST. - */ -function getSchemaNamesFromAst(ast) { - if (!Array.isArray(ast)) return [] - - const componentsNode = ast.find( - node => - node?.kind === SyntaxKind.InterfaceDeclaration && - idName(node?.name) === 'components' - ) - - if (!componentsNode?.members) return [] - - const schemasProp = componentsNode.members.find( - member => - member?.kind === SyntaxKind.PropertySignature && - idName(member?.name) === 'schemas' && - Array.isArray(member?.type?.members) - ) - - if (!schemasProp) return [] - - return schemasProp.type.members - .map(member => - member?.kind === SyntaxKind.PropertySignature ? idName(member.name) : undefined - ) - .filter(n => typeof n === 'string') -} - -/** - * Build convenience type exports for schemas. - */ -function buildSchemaExports(schemaNames) { - if (!schemaNames.length) return '' - - return schemaNames - .map(name => `export type ${name} = components["schemas"]["${name}"]`) - .join('\n') -} - -/** - * Generate the types file using openapi-typescript. - */ -export async function generateMizanTypes(schema) { - // Generate types using openapi-typescript - const ast = await openapiTS(schema) - const schemaNames = getSchemaNamesFromAst(ast) - const typesCode = astToString(ast) - - const lines = [ - '// AUTO-GENERATED by mizan - do not edit manually', - '// Regenerate with: npm run schemas', - '', - '// ============================================================================', - '// OpenAPI Types (generated by openapi-typescript)', - '// ============================================================================', - '', - typesCode, - '', - '// ============================================================================', - '// Convenience Type Exports', - '// ============================================================================', - '', - buildSchemaExports(schemaNames), - '', - '// ============================================================================', - '// Function Registry (for reference)', - '// ============================================================================', - '', - "export type Transport = 'http' | 'websocket' | 'both'", - '', - ] - - // Extract function metadata from x-mizan-functions extension - const functions = schema['x-mizan-functions'] || [] - - if (functions.length > 0) { - lines.push('export const MIZAN_FUNCTIONS = {') - for (const fn of functions) { - lines.push(` ${fn.camelName}: {`) - lines.push(` name: '${fn.name}',`) - lines.push(` hasInput: ${fn.hasInput},`) - lines.push(` isContext: ${fn.isContext},`) - lines.push(` transport: '${fn.transport}' as Transport,`) - lines.push(` },`) - } - lines.push('} as const') - } else { - lines.push('export const MIZAN_FUNCTIONS = {} as const') - } - - lines.push('') - - return lines.join('\n') -} - -/** - * Extract unique context names from an affects array. - * Both context-level and function-level affects resolve to context names. - */ -function getAffectedContexts(affects) { - const contexts = new Set() - for (const target of affects) { - if (target.type === 'context') { - contexts.add(target.name) - } else if (target.type === 'function' && target.context) { - contexts.add(target.context) - } - } - return [...contexts] -} - -/** - * Map JSON schema type string to TypeScript type. - */ -function jsonTypeToTS(type) { - if (type === 'integer' || type === 'number') return 'number' - if (type === 'boolean') return 'boolean' - return 'string' -} - -/** - * Generate the React provider that wraps MizanProvider with typed hooks. - * - * The generated provider: - * - MizanContext: Root provider with global context bundled fetch - * - Named context providers: - * - Mutation hooks with auto-invalidation - * - Plain function hooks - */ -export function generateMizanProvider(schema, options = {}) { - const { hasChannels = false } = options - const functions = schema['x-mizan-functions'] || [] - const contextGroups = schema['x-mizan-contexts'] || {} - - if (functions.length === 0) { - return null - } - - // Partition functions - const globalContexts = functions.filter(fn => fn.isContext === 'global') - const regularFunctions = functions.filter(fn => !fn.isContext && !fn.isForm) - const mutationFunctions = regularFunctions.filter(fn => fn.affects) - const plainFunctions = regularFunctions.filter(fn => !fn.affects) - - // Named context groups (everything except 'global') - const namedContextEntries = Object.entries(contextGroups).filter(([name]) => name !== 'global') - - // Collect type imports - const typeImports = [] - for (const fn of functions) { - if (fn.hasInput && fn.inputType) { - typeImports.push(fn.inputType) - } - if (fn.outputType) { - typeImports.push(fn.outputType) - } - } - const uniqueTypeImports = [...new Set(typeImports)].sort() - - const lines = [ - "'use client'", - '', - '// AUTO-GENERATED by mizan - do not edit manually', - '// Regenerate with: npm run schemas', - '', - '// This file provides typed wrappers around the mizan library.', - '// - MizanContext: Root provider with global context', - '// - Named context providers: ', - '// - Typed hooks with auto-invalidation', - '', - "import { type ReactNode, useCallback, useState, useEffect, useRef, createContext, useContext } from 'react'", - "import {", - " MizanProvider,", - " useMizan,", - " useMizanContext,", - " useMizanCall,", - " type MizanHydration,", - " type Transport,", - "} from 'mizan'", - ...(hasChannels ? [ - "import { ChannelProvider, ChannelConnection } from 'mizan/channels'", - ] : []), - '', - ] - - if (uniqueTypeImports.length > 0) { - lines.push(`import type { ${uniqueTypeImports.join(', ')} } from './generated.mizan'`) - lines.push('') - } - - // ============================================================================ - // Hydration types (global contexts only) - // ============================================================================ - - lines.push('// ============================================================================') - lines.push('// Hydration Types') - lines.push('// ============================================================================') - lines.push('') - - if (globalContexts.length > 0) { - lines.push('/** Typed hydration data for SSR (global contexts only) */') - lines.push('export interface MizanHydrationData {') - for (const ctx of globalContexts) { - lines.push(` ${ctx.camelName}?: ${ctx.outputType}`) - } - lines.push('}') - lines.push('') - - lines.push('function toMizanHydration(hydration?: MizanHydrationData): MizanHydration | undefined {') - lines.push(' if (!hydration) return undefined') - lines.push(' const result: MizanHydration = {}') - for (const ctx of globalContexts) { - lines.push(` if (hydration.${ctx.camelName} !== undefined) result['${ctx.name}'] = hydration.${ctx.camelName}`) - } - lines.push(' return result') - lines.push('}') - lines.push('') - } - - // ============================================================================ - // Global Context Loader (inner component, fetches GET /ctx/global/) - // ============================================================================ - - if (globalContexts.length > 0) { - lines.push('// ============================================================================') - lines.push('// Global Context Loader') - lines.push('// ============================================================================') - lines.push('') - lines.push('function GlobalContextLoader({ children }: { children: ReactNode }) {') - lines.push(' const mizan = useMizan()') - lines.push(' const loaded = useRef(false)') - lines.push('') - lines.push(' useEffect(() => {') - lines.push(' if (loaded.current) return') - lines.push(' loaded.current = true') - lines.push('') - lines.push(' // Check for SSR hydration data first') - lines.push(" const ssr = typeof window !== 'undefined' && (window as any).__MIZAN_SSR_DATA__") - lines.push(' if (ssr) {') - lines.push(' for (const [name, data] of Object.entries(ssr)) {') - lines.push(' mizan.setContextData(name, data)') - lines.push(' }') - lines.push(' return') - lines.push(' }') - lines.push('') - lines.push(' ;(async () => {') - lines.push(' await mizan.whenReady') - lines.push(' try {') - lines.push(" const response = await mizan.request('GET', `${mizan.baseUrl}/ctx/global/`)") - lines.push(' const result = await response.json()') - lines.push(' for (const [name, data] of Object.entries(result)) {') - lines.push(' mizan.setContextData(name, data)') - lines.push(' }') - lines.push(' } catch (e) {') - lines.push(" console.error('[MizanContext] Global context fetch failed:', e)") - lines.push(' }') - lines.push(' })()') - lines.push(' }, [mizan])') - lines.push('') - lines.push(' return <>{children}') - lines.push('}') - lines.push('') - } - - // ============================================================================ - // Root Provider (MizanContext) - // ============================================================================ - - lines.push('// ============================================================================') - lines.push('// Root Provider') - lines.push('// ============================================================================') - lines.push('') - - lines.push('export interface MizanContextProps {') - lines.push(' children: ReactNode') - if (globalContexts.length > 0) { - lines.push(' /** SSR hydration data (global contexts only) */') - lines.push(' hydration?: MizanHydrationData') - } - lines.push(' /** WebSocket URL for RPC calls (default: /ws/) */') - lines.push(' wsUrl?: string') - lines.push(' /** Base URL for HTTP calls (default: /api/mizan) */') - lines.push(' baseUrl?: string') - lines.push('}') - lines.push('') - - lines.push('/**') - lines.push(' * Root mizan provider. Mount at your app root.') - lines.push(' *') - lines.push(' * Usage:') - lines.push(' * ') - lines.push(' * ') - lines.push(' * ') - lines.push(' */') - lines.push('export function MizanContext({') - lines.push(' children,') - if (globalContexts.length > 0) { - lines.push(' hydration,') - } - lines.push(' wsUrl,') - lines.push(' baseUrl,') - lines.push('}: MizanContextProps) {') - - if (hasChannels) { - lines.push(' const connectionRef = useRef(null)') - lines.push(' if (!connectionRef.current) {') - lines.push(" connectionRef.current = new ChannelConnection({ url: wsUrl || '/ws/' })") - lines.push(' }') - lines.push('') - } - - // Build the JSX tree - lines.push(' return (') - lines.push(' 0) { - lines.push(' hydration={toMizanHydration(hydration)}') - } - lines.push(' wsUrl={wsUrl}') - lines.push(' baseUrl={baseUrl}') - if (hasChannels) { - lines.push(' connection={connectionRef.current}') - } - lines.push(' >') - - // Inner content: GlobalContextLoader wraps children if needed - let innerContent = '{children}' - if (globalContexts.length > 0) { - innerContent = `{children}` - } - - if (hasChannels) { - lines.push(` `) - lines.push(` ${innerContent}`) - lines.push(` `) - } else { - lines.push(` ${innerContent}`) - } - - lines.push(' ') - lines.push(' )') - lines.push('}') - lines.push('') - - // Legacy alias - lines.push('/** @deprecated Use MizanContext instead */') - lines.push('export const DjangoContext = MizanContext') - lines.push('/** @deprecated Use MizanContextProps instead */') - lines.push('export type DjangoContextProps = MizanContextProps') - if (globalContexts.length > 0) { - lines.push('/** @deprecated Use MizanHydrationData instead */') - lines.push('export type DjangoHydration = MizanHydrationData') - } - lines.push('') - - // ============================================================================ - // Global Context Hooks - // ============================================================================ - - if (globalContexts.length > 0) { - lines.push('// ============================================================================') - lines.push('// Global Context Hooks') - lines.push('// ============================================================================') - lines.push('') - - for (const ctx of globalContexts) { - const pascal = pascalCase(ctx.camelName) - lines.push(`/** Get ${ctx.name} context data. @throws if not loaded yet */`) - lines.push(`export function use${pascal}(): ${ctx.outputType} {`) - lines.push(` const data = useMizanContext<${ctx.outputType}>('${ctx.name}')`) - lines.push(` if (data === undefined) throw new Error('use${pascal}: context not loaded yet')`) - lines.push(` return data`) - lines.push(`}`) - lines.push('') - } - - lines.push('/** Refresh functions for global contexts. */') - lines.push('export function useMizanRefresh() {') - lines.push(' const { invalidateContext } = useMizan()') - lines.push(' return {') - for (const ctx of globalContexts) { - const pascal = pascalCase(ctx.camelName) - lines.push(` refresh${pascal}: () => invalidateContext('${ctx.name}'),`) - } - lines.push(' }') - lines.push('}') - lines.push('') - - // Legacy alias - lines.push('/** @deprecated Use useMizanRefresh instead */') - lines.push('export const useDjangoRefresh = useMizanRefresh') - lines.push('') - } - - // ============================================================================ - // Named Context Providers - // ============================================================================ - - if (namedContextEntries.length > 0) { - lines.push('// ============================================================================') - lines.push('// Named Context Providers') - lines.push('// ============================================================================') - lines.push('') - - for (const [ctxName, ctxMeta] of namedContextEntries) { - const ctxPascal = toPascalCase(ctxName) - const ctxFunctions = functions.filter(fn => fn.isContext === ctxName) - const params = ctxMeta.params || {} - const paramEntries = Object.entries(params) - - // Internal React context type - lines.push(`const ${ctxPascal}ContextInternal = createContext<{`) - for (const fn of ctxFunctions) { - lines.push(` ${fn.name}: ${fn.outputType}`) - } - lines.push(`} | null>(null)`) - lines.push('') - - // Props interface - lines.push(`export interface ${ctxPascal}ContextProps {`) - lines.push(` children: ReactNode`) - for (const [pName, pMeta] of paramEntries) { - const tsType = jsonTypeToTS(pMeta.type) - const optional = pMeta.required ? '' : '?' - lines.push(` ${pName}${optional}: ${tsType}`) - } - lines.push(`}`) - lines.push('') - - // Provider component - lines.push(`export function ${ctxPascal}Context({ children, ...params }: ${ctxPascal}ContextProps) {`) - lines.push(` const mizan = useMizan()`) - - // SSR hydration check — initialize from __MIZAN_SSR_DATA__ if available - lines.push(` const [data, setData] = useState<{`) - for (const fn of ctxFunctions) { - lines.push(` ${fn.name}: ${fn.outputType}`) - } - lines.push(` } | null>(() => {`) - lines.push(` if (typeof window === 'undefined') return null`) - lines.push(` const ssr = (window as any).__MIZAN_SSR_DATA__`) - lines.push(` if (!ssr) return null`) - // Check if all functions for this context have SSR data - const firstFn = ctxFunctions[0] - lines.push(` if (ssr.${firstFn.name} === undefined) return null`) - lines.push(` return {`) - for (const fn of ctxFunctions) { - lines.push(` ${fn.name}: ssr.${fn.name},`) - } - lines.push(` }`) - lines.push(` })`) - lines.push('') - lines.push(` const refetch = useCallback(async () => {`) - lines.push(` await mizan.whenReady`) - lines.push(` const qs = new URLSearchParams()`) - for (const [pName] of paramEntries) { - lines.push(` if (params.${pName} !== undefined) qs.set('${pName}', String(params.${pName}))`) - } - lines.push(` const resp = await mizan.request('GET', \`\${mizan.baseUrl}/ctx/${ctxName}/?\${qs}\`)`) - lines.push(` const result = await resp.json()`) - lines.push(` setData(result)`) - - // Dependency array: mizan + each param - const deps = ['mizan', ...paramEntries.map(([pName]) => `params.${pName}`)] - lines.push(` }, [${deps.join(', ')}])`) - lines.push('') - lines.push(` useEffect(() => { refetch() }, [refetch])`) - lines.push(` useEffect(() => mizan.registerContextProvider('${ctxName}', refetch), [mizan, refetch])`) - lines.push('') - lines.push(` return <${ctxPascal}ContextInternal value={data}>{children}`) - lines.push(`}`) - lines.push('') - - // Individual data hooks - for (const fn of ctxFunctions) { - const hookPascal = pascalCase(fn.camelName) - lines.push(`export function use${hookPascal}(): ${fn.outputType} {`) - lines.push(` const ctx = useContext(${ctxPascal}ContextInternal)`) - lines.push(` if (!ctx) throw new Error('use${hookPascal} must be used within ${ctxPascal}Context')`) - lines.push(` return ctx.${fn.name}`) - lines.push(`}`) - lines.push('') - } - } - } - - // ============================================================================ - // Mutation Hooks (with auto-invalidation) - // ============================================================================ - - if (mutationFunctions.length > 0) { - lines.push('// ============================================================================') - lines.push('// Mutation Hooks (auto-invalidate on success)') - lines.push('// ============================================================================') - lines.push('') - - for (const fn of mutationFunctions) { - const pascal = pascalCase(fn.camelName) - const transport = fn.transport || 'http' - const affectedContexts = getAffectedContexts(fn.affects) - - lines.push(`/** Call ${fn.name}. Auto-invalidates: ${affectedContexts.join(', ')} */`) - lines.push(`export function use${pascal}() {`) - lines.push(` const mizan = useMizan()`) - - if (fn.hasInput) { - lines.push(` return useCallback(async (input: ${fn.inputType}) => {`) - lines.push(` const result = await mizan.call<${fn.inputType}, ${fn.outputType}>('${fn.name}', input, '${transport}')`) - } else { - lines.push(` return useCallback(async () => {`) - lines.push(` const result = await mizan.call('${fn.name}', undefined, '${transport}')`) - } - - // Invalidation - if (affectedContexts.length === 1) { - lines.push(` await mizan.invalidateContext('${affectedContexts[0]}')`) - } else if (affectedContexts.length > 1) { - lines.push(` await Promise.all([`) - for (const ctx of affectedContexts) { - lines.push(` mizan.invalidateContext('${ctx}'),`) - } - lines.push(` ])`) - } - - lines.push(` return result`) - lines.push(` }, [mizan])`) - lines.push(`}`) - lines.push('') - } - } - - // ============================================================================ - // Plain Function Hooks - // ============================================================================ - - if (plainFunctions.length > 0) { - lines.push('// ============================================================================') - lines.push('// Function Hooks') - lines.push('// ============================================================================') - lines.push('') - - for (const fn of plainFunctions) { - const pascal = pascalCase(fn.camelName) - const transport = fn.transport || 'http' - - if (fn.hasInput) { - lines.push(`/** Call ${fn.name}. Transport: ${transport} */`) - lines.push(`export function use${pascal}() {`) - lines.push(` return useMizanCall<${fn.inputType}, ${fn.outputType}>('${fn.name}', '${transport}')`) - lines.push(`}`) - } else { - lines.push(`/** Call ${fn.name}. Transport: ${transport} */`) - lines.push(`export function use${pascal}() {`) - lines.push(` return useMizanCall('${fn.name}', '${transport}')`) - lines.push(`}`) - } - lines.push('') - } - } - - // ============================================================================ - // Re-exports - // ============================================================================ - - lines.push('// ============================================================================') - lines.push('// Re-exports from mizan library') - lines.push('// ============================================================================') - lines.push('') - lines.push("export { useMizan, useMizanStatus, usePush, DjangoError } from 'mizan'") - lines.push("export type { ConnectionStatus, PushMessage, PushListener } from 'mizan'") - lines.push('') - - return lines.join('\n') -} - -/** - * Generate server-side hydration helper (runs in Next.js server components). - * This is separate from the client file because it needs to run on the server. - */ -export function generateMizanServer(schema) { - const functions = schema['x-mizan-functions'] || [] - const globalContexts = functions.filter(fn => fn.isContext === 'global') - - if (globalContexts.length === 0) { - return null - } - - // Collect type imports for global contexts - const typeImports = globalContexts.map(ctx => ctx.outputType).filter(Boolean) - const uniqueTypeImports = [...new Set(typeImports)].sort() - - const lines = [ - '// AUTO-GENERATED by mizan - do not edit manually', - '// Regenerate with: npm run schemas', - '//', - '// Server-side functions for SSR hydration.', - '// These run in Next.js server components/layouts.', - '', - ] - - if (uniqueTypeImports.length > 0) { - lines.push(`import type { ${uniqueTypeImports.join(', ')} } from './generated.mizan'`) - lines.push('') - } - - // Hydration type - lines.push('// ============================================================================') - lines.push('// Hydration Types') - lines.push('// ============================================================================') - lines.push('') - lines.push('/** Typed hydration data for SSR (global contexts only) */') - lines.push('export interface MizanHydrationData {') - for (const ctx of globalContexts) { - lines.push(` ${ctx.camelName}?: ${ctx.outputType}`) - } - lines.push('}') - lines.push('') - lines.push('/** @deprecated Use MizanHydrationData instead */') - lines.push('export type DjangoHydration = MizanHydrationData') - lines.push('') - - // SSR Hydration Helper — single bundled GET - lines.push('// ============================================================================') - lines.push('// SSR Hydration Helper') - lines.push('// ============================================================================') - lines.push('') - lines.push('/**') - lines.push(' * Fetch hydration data for SSR via bundled context endpoint.') - lines.push(' *') - lines.push(' * Call this in your server component:') - lines.push(' * const hydration = await getMizanHydration(client)') - lines.push(' * return ...') - lines.push(' */') - lines.push('export async function getMizanHydration(') - lines.push(" client: { request: (method: string, url: string, body?: unknown) => Promise }") - lines.push('): Promise {') - lines.push(' const hydration: MizanHydrationData = {}') - lines.push('') - lines.push(' try {') - lines.push(" const response = await client.request('GET', '/api/mizan/ctx/global/')") - lines.push(' if (response.ok) {') - lines.push(' const result = await response.json()') - for (const ctx of globalContexts) { - lines.push(` if (result?.${ctx.name} !== undefined) hydration.${ctx.camelName} = result.${ctx.name}`) - } - lines.push(' } else {') - lines.push(" console.error('[getMizanHydration] Global context fetch failed:', response.status)") - lines.push(' }') - lines.push(' } catch (e) {') - lines.push(" console.error('[getMizanHydration] Request failed:', e)") - lines.push(' }') - lines.push('') - lines.push(' return hydration') - lines.push('}') - lines.push('') - lines.push('/** @deprecated Use getMizanHydration instead */') - lines.push('export const getDjangoHydration = getMizanHydration') - lines.push('') - - return lines.join('\n') -} - -/** - * Generate all mizan files. - */ -export async function generateMizanFiles(schema, options = {}) { - const types = await generateMizanTypes(schema) - const provider = generateMizanProvider(schema, options) - const server = generateMizanServer(schema) - const forms = generateMizanForms(schema) - - return { types, provider, server, forms } -} - -/** - * Generate typed form hooks with Zod schemas. - */ -export function generateMizanForms(schema) { - const functions = schema['x-mizan-functions'] || [] - - // Group form functions by form name - const formFunctions = functions.filter(fn => fn.isForm) - const formGroups = new Map() - - for (const fn of formFunctions) { - const formName = fn.formName - if (!formGroups.has(formName)) { - formGroups.set(formName, { schema: null, validate: null, submit: null, formset: {} }) - } - const group = formGroups.get(formName) - - if (fn.formRole === 'schema') { - group.schema = fn - group.formFields = fn.formFields || [] - } else if (fn.formRole === 'validate') { - group.validate = fn - } else if (fn.formRole === 'submit') { - group.submit = fn - } else if (fn.formRole === 'formset_schema') { - group.formset.schema = fn - } else if (fn.formRole === 'formset_validate') { - group.formset.validate = fn - } else if (fn.formRole === 'formset_submit') { - group.formset.submit = fn - } - } - - if (formGroups.size === 0) { - return null - } - - const lines = [ - "'use client'", - '', - '// AUTO-GENERATED by mizan - do not edit manually', - '// Regenerate with: npm run schemas', - '', - '// Typed form hooks with Zod validation.', - '// Zod schemas are generated from Django form field definitions.', - '// Client-side validation matches Django constraints (required, max_length, email, etc.)', - '', - "import { z } from 'zod'", - "import {", - " useDjangoFormCore,", - " useDjangoFormsetCore,", - " type DjangoFormState,", - " type DjangoFormsetState,", - " type FormOptions,", - "} from 'mizan'", - '', - '// ============================================================================', - '// Zod Schemas', - '// ============================================================================', - '', - ] - - // Generate Zod schemas for each form - for (const [formName, group] of formGroups) { - if (!group.schema) continue - - const pascalName = toPascalCase(formName) - const schemaName = `${pascalName}Schema` - const fields = group.formFields || [] - - lines.push(`/**`) - lines.push(` * Zod schema for ${formName} form`) - lines.push(` * Generated from Django form field definitions`) - lines.push(` */`) - lines.push(`export const ${schemaName} = z.object({`) - - for (const field of fields) { - const zodField = generateZodField(field) - lines.push(` ${field.name}: ${zodField},`) - } - - lines.push(`})`) - lines.push('') - } - - // Generate TypeScript types from Zod schemas - lines.push('// ============================================================================') - lines.push('// Form Data Types (inferred from Zod schemas)') - lines.push('// ============================================================================') - lines.push('') - - for (const [formName, group] of formGroups) { - if (!group.schema) continue - - const pascalName = toPascalCase(formName) - const schemaName = `${pascalName}Schema` - const typeName = `${pascalName}FormData` - - lines.push(`/** Form data type for ${formName}, inferred from Zod schema */`) - lines.push(`export type ${typeName} = z.infer`) - lines.push('') - } - - lines.push('// ============================================================================') - lines.push('// Form Hooks') - lines.push('// ============================================================================') - lines.push('') - - // Generate hooks for each form - for (const [formName, group] of formGroups) { - if (!group.schema) continue - - const pascalName = toPascalCase(formName) - const hookName = `use${pascalName}Form` - const typeName = `${pascalName}FormData` - const schemaName = `${pascalName}Schema` - - lines.push(`/**`) - lines.push(` * Typed form hook for ${formName}`) - lines.push(` *`) - lines.push(` * Features:`) - lines.push(` * - Full TypeScript inference for form fields`) - lines.push(` * - Client-side Zod validation (instant feedback)`) - lines.push(` * - Server-side Django validation (authoritative)`) - lines.push(` */`) - lines.push(`export function ${hookName}(`) - lines.push(` options?: FormOptions`) - lines.push(`): DjangoFormState<${typeName}> {`) - lines.push(` return useDjangoFormCore<${typeName}>({`) - lines.push(` name: '${formName}',`) - lines.push(` zodSchema: ${schemaName},`) - lines.push(` options,`) - lines.push(` })`) - lines.push(`}`) - lines.push('') - - // Generate formset hook if formset is enabled - if (group.formset.schema) { - const formsetHookName = `use${pascalName}Formset` - - lines.push(`/**`) - lines.push(` * Typed formset hook for ${formName}`) - lines.push(` */`) - lines.push(`export function ${formsetHookName}(`) - lines.push(` initialCount?: number,`) - lines.push(` liveValidation?: boolean`) - lines.push(`): DjangoFormsetState<${typeName}> {`) - lines.push(` return useDjangoFormsetCore<${typeName}>({`) - lines.push(` name: '${formName}',`) - lines.push(` zodSchema: ${schemaName},`) - lines.push(` initialCount,`) - lines.push(` liveValidation,`) - lines.push(` })`) - lines.push(`}`) - lines.push('') - } - } - - // Export list of form names for reference - lines.push('// ============================================================================') - lines.push('// Form Registry') - lines.push('// ============================================================================') - lines.push('') - lines.push('export const MIZAN_FORMS = {') - for (const [formName, group] of formGroups) { - if (!group.schema) continue - const pascalName = toPascalCase(formName) - lines.push(` ${toCamelCase(formName)}: {`) - lines.push(` name: '${formName}',`) - lines.push(` schema: ${pascalName}Schema,`) - lines.push(` hook: 'use${pascalName}Form',`) - lines.push(` hasFormset: ${!!group.formset.schema},`) - lines.push(` },`) - } - lines.push('} as const') - lines.push('') - - return lines.join('\n') -} - -/** - * Generate a Zod field definition from Django field metadata. - */ -function generateZodField(field) { - const { zodType, required, constraints } = field - let zodCode = '' - - // Base type - switch (zodType) { - case 'boolean': - zodCode = 'z.boolean()' - break - case 'number': - zodCode = 'z.number()' - if (constraints.int) { - zodCode += '.int()' - } - break - case 'array': - zodCode = `z.array(z.${constraints.items || 'string'}())` - break - case 'file': - zodCode = 'z.any()' - break - default: - zodCode = 'z.string()' - } - - // Add constraints - if (zodType === 'string') { - if (constraints.email) { - zodCode += ".email('Invalid email address')" - } else if (constraints.url) { - zodCode += ".url('Invalid URL')" - } - - if (constraints.regex) { - const escapedRegex = constraints.regex.replace(/\\/g, '\\\\').replace(/'/g, "\\'") - const message = constraints.regexMessage || 'Invalid format' - zodCode += `.regex(new RegExp('${escapedRegex}'), '${message}')` - } - - if (constraints.min !== undefined) { - zodCode += `.min(${constraints.min})` - } - if (constraints.max !== undefined) { - zodCode += `.max(${constraints.max})` - } - } else if (zodType === 'number') { - if (constraints.min !== undefined) { - zodCode += `.min(${constraints.min})` - } - if (constraints.max !== undefined) { - zodCode += `.max(${constraints.max})` - } - } - - // Handle optional fields - if (!required) { - if (zodType === 'boolean') { - zodCode += '.default(false)' - } else { - zodCode += '.optional()' - } - } - - return zodCode -} - -/** - * Convert form name to PascalCase for type names. - */ -function toPascalCase(str) { - return str - .split(/[.\-_]/) - .map(part => part.charAt(0).toUpperCase() + part.slice(1)) - .join('') -} - -/** - * Convert form name to camelCase for object keys. - */ -function toCamelCase(str) { - const pascal = toPascalCase(str) - return pascal.charAt(0).toLowerCase() + pascal.slice(1) -} - -/** - * Convert camelCase to PascalCase. - */ -function pascalCase(str) { - return str.charAt(0).toUpperCase() + str.slice(1) -} diff --git a/protocol/mizan-generate/generator/lib/stage1.mjs b/protocol/mizan-generate/generator/lib/stage1.mjs deleted file mode 100644 index 248e87f..0000000 --- a/protocol/mizan-generate/generator/lib/stage1.mjs +++ /dev/null @@ -1,198 +0,0 @@ -/** - * Stage 1 Codegen — Framework-agnostic TypeScript output. - * - * Produces: - * types.ts — interfaces from OpenAPI schema - * contexts/.ts — fetchXxxContext(params) per context group - * mutations/.ts — callXxx(args) per mutation - * functions/.ts — callXxx(args) per plain function - * index.ts — re-exports - */ - -import openapiTS, { astToString } from 'openapi-typescript' - -// ─── Helpers ──────────────────────────────────────────────────────────────── - -function pascalCase(str) { - return str - .split(/[.\-_]/) - .map(part => part.charAt(0).toUpperCase() + part.slice(1)) - .join('') -} - -function camelCase(str) { - const p = pascalCase(str) - return p.charAt(0).toLowerCase() + p.slice(1) -} - -// TypeScript SyntaxKind values for openapi-typescript AST -const SyntaxKind = { - InterfaceDeclaration: 265, - PropertySignature: 172, - Identifier: 80, -} - -function idName(node) { - return node?.kind === SyntaxKind.Identifier ? node.escapedText : undefined -} - -function getSchemaNamesFromAst(ast) { - if (!Array.isArray(ast)) return [] - const componentsNode = ast.find( - n => n?.kind === SyntaxKind.InterfaceDeclaration && idName(n?.name) === 'components' - ) - if (!componentsNode?.members) return [] - const schemasProp = componentsNode.members.find( - m => m?.kind === SyntaxKind.PropertySignature && idName(m?.name) === 'schemas' && Array.isArray(m?.type?.members) - ) - if (!schemasProp) return [] - return schemasProp.type.members - .map(m => m?.kind === SyntaxKind.PropertySignature ? idName(m.name) : undefined) - .filter(n => typeof n === 'string') -} - -// ─── Types ────────────────────────────────────────────────────────────────── - -export async function generateTypes(schema) { - const ast = await openapiTS(schema) - const schemaNames = getSchemaNamesFromAst(ast) - const typesCode = astToString(ast) - - const lines = [ - '// AUTO-GENERATED by mizan — do not edit', - '', - typesCode, - '', - '// Convenience type exports', - ...schemaNames.map(name => `export type ${name} = components["schemas"]["${name}"]`), - '', - ] - - return lines.join('\n') -} - -// ─── Context Files ────────────────────────────────────────────────────────── - -export function generateContextFile(ctxName, ctxMeta, functions) { - const pascal = pascalCase(ctxName) - const ctxFunctions = functions.filter(fn => fn.isContext === ctxName) - - const lines = [ - '// AUTO-GENERATED by mizan — do not edit', - '', - "import { mizanFetch } from '@mizan/base'", - '', - ] - - // Import output types - const typeImports = ctxFunctions.map(fn => fn.outputType).filter(Boolean) - if (typeImports.length > 0) { - lines.push(`import type { ${[...new Set(typeImports)].join(', ')} } from '../types'`) - lines.push('') - } - - // Data interface - lines.push(`export interface ${pascal}ContextData {`) - for (const fn of ctxFunctions) { - lines.push(` ${fn.name}: ${fn.outputType}`) - } - lines.push('}') - lines.push('') - - // Params interface (from x-mizan-contexts) - const params = ctxMeta?.params || {} - const paramEntries = Object.entries(params) - - if (paramEntries.length > 0) { - lines.push(`export interface ${pascal}ContextParams {`) - for (const [pName, pMeta] of paramEntries) { - const tsType = pMeta.type === 'integer' || pMeta.type === 'number' ? 'number' : pMeta.type === 'boolean' ? 'boolean' : 'string' - const optional = pMeta.required ? '' : '?' - lines.push(` ${pName}${optional}: ${tsType}`) - } - lines.push('}') - } else { - lines.push(`export type ${pascal}ContextParams = Record`) - } - lines.push('') - - // Fetch function - lines.push(`export function fetch${pascal}Context(params: ${pascal}ContextParams): Promise<${pascal}ContextData> {`) - lines.push(` return mizanFetch('${ctxName}', params)`) - lines.push('}') - lines.push('') - - return lines.join('\n') -} - -// ─── Mutation Files ───────────────────────────────────────────────────────── - -export function generateMutationFile(fn) { - const pascal = pascalCase(fn.camelName) - - const lines = [ - '// AUTO-GENERATED by mizan — do not edit', - '', - "import { mizanCall } from '@mizan/base'", - '', - ] - - // Import types - const typeImports = [] - if (fn.hasInput && fn.inputType) typeImports.push(fn.inputType) - if (fn.outputType) typeImports.push(fn.outputType) - if (typeImports.length > 0) { - lines.push(`import type { ${[...new Set(typeImports)].join(', ')} } from '../types'`) - lines.push('') - } - - // Call function - if (fn.hasInput) { - lines.push(`export function call${pascal}(args: ${fn.inputType}): Promise<${fn.outputType}> {`) - } else { - lines.push(`export function call${pascal}(): Promise<${fn.outputType}> {`) - } - lines.push(` return mizanCall('${fn.name}', ${fn.hasInput ? 'args' : '{}'})`) - lines.push('}') - lines.push('') - - return lines.join('\n') -} - -// ─── Function Files (plain, no context, no affects) ───────────────────────── - -export function generateFunctionFile(fn) { - // Same shape as mutation, just different semantics - return generateMutationFile(fn) -} - -// ─── Index ────────────────────────────────────────────────────────────────── - -export function generateStage1Index(schema) { - const functions = schema['x-mizan-functions'] || [] - const contextGroups = schema['x-mizan-contexts'] || {} - - const lines = [ - '// AUTO-GENERATED by mizan — do not edit', - '', - "export * from './types'", - '', - ] - - // Context exports - for (const ctxName of Object.keys(contextGroups)) { - const pascal = pascalCase(ctxName) - lines.push(`export { fetch${pascal}Context, type ${pascal}ContextData, type ${pascal}ContextParams } from './contexts/${ctxName}'`) - } - if (Object.keys(contextGroups).length > 0) lines.push('') - - // Mutation + function exports - const regularFns = functions.filter(fn => !fn.isContext && !fn.isForm) - for (const fn of regularFns) { - const pascal = pascalCase(fn.camelName) - lines.push(`export { call${pascal} } from './${fn.affects ? 'mutations' : 'functions'}/${fn.camelName}'`) - } - if (regularFns.length > 0) lines.push('') - - return lines.join('\n') -} diff --git a/protocol/mizan-generate/package.json b/protocol/mizan-generate/package.json index 9a050b3..8806f46 100644 --- a/protocol/mizan-generate/package.json +++ b/protocol/mizan-generate/package.json @@ -1,14 +1,10 @@ { "name": "mizan-generate", - "version": "1.0.0", - "description": "Mizan codegen — fetches the schema from any backend adapter and emits typed React/Vue/Svelte client code on top of the runtime kernel.", + "version": "2.0.0", + "description": "Mizan codegen — consumes Mizan IR; emits typed React/Vue/Svelte/Rust/Python clients. Ships as a prebuilt Rust binary.", "type": "module", "bin": { - "mizan-generate": "./generator/cli.mjs" + "mizan-generate": "./bin/launcher.mjs" }, - "main": "./generator/cli.mjs", - "license": "MIT", - "dependencies": { - "openapi-typescript": "^7.13.0" - } + "license": "MIT" } diff --git a/tests/afi/afi_codegen_app.py b/tests/afi/afi_codegen_app.py new file mode 100644 index 0000000..a57bcf3 --- /dev/null +++ b/tests/afi/afi_codegen_app.py @@ -0,0 +1,12 @@ +""" +Codegen entrypoint for the AFI fixture. + +`mizan_fastapi.cli` imports a module and runs `build_schema()` from a +populated registry. The fixture's `register_fixture()` is a function +call, not an import side effect; this thin wrapper invokes it on +import so the CLI works without modifying fixture.py's semantics. +""" + +from fixture import register_fixture + +register_fixture() diff --git a/tests/rust/.gitignore b/tests/rust/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/tests/rust/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/tests/rust/Cargo.lock b/tests/rust/Cargo.lock new file mode 100644 index 0000000..735ebab --- /dev/null +++ b/tests/rust/Cargo.lock @@ -0,0 +1,1595 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" + +[[package]] +name = "bumpalo" +version = "3.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" + +[[package]] +name = "cc" +version = "1.2.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b2c103cf610ec6cae3da84a766285b42fd16aad564758459e6ecf128c75206" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fixture_client" +version = "0.1.0" +dependencies = [ + "mizan-rust", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "js-sys" +version = "0.3.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" +dependencies = [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "mio" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "mizan-rust" +version = "0.1.0" +dependencies = [ + "reqwest", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-util", +] + +[[package]] +name = "mizan-rust-wire-parity" +version = "0.0.0" +dependencies = [ + "fixture_client", + "mizan-rust", + "reqwest", + "serde_json", + "tokio", +] + +[[package]] +name = "num-conv" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags", +] + +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64", + "bytes", + "cookie", + "cookie_store", + "futures-core", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + +[[package]] +name = "rustls" +version = "0.23.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68d6fdd9f81c2819c9a8b0e0cd91660e7746a8e6ea2ba7c6b2b057985f6bcb51" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.3+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.121" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "yoke" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/tests/rust/Cargo.toml b/tests/rust/Cargo.toml new file mode 100644 index 0000000..972ff31 --- /dev/null +++ b/tests/rust/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "mizan-rust-wire-parity" +version = "0.0.0" +edition = "2021" +publish = false + +[dependencies] +mizan-rust = { path = "../../frontends/mizan-rust" } +fixture_client = { path = "./fixture_client" } +tokio = { version = "1", features = ["full"] } +serde_json = "1" +reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] } + +[[bin]] +name = "drive_kernel" +path = "src/drive_kernel.rs" + +[[bin]] +name = "drive_emitted" +path = "src/drive_emitted.rs" diff --git a/tests/rust/fixture_client/Cargo.toml b/tests/rust/fixture_client/Cargo.toml new file mode 100644 index 0000000..0b6de81 --- /dev/null +++ b/tests/rust/fixture_client/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "fixture_client" +version = "0.1.0" +edition = "2021" + +[dependencies] +mizan-rust = { path = "../../../frontends/mizan-rust" } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tokio = { version = "1", features = ["rt", "macros"] } diff --git a/tests/rust/fixture_client/src/contexts/mod.rs b/tests/rust/fixture_client/src/contexts/mod.rs new file mode 100644 index 0000000..10d1453 --- /dev/null +++ b/tests/rust/fixture_client/src/contexts/mod.rs @@ -0,0 +1,3 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod user; diff --git a/tests/rust/fixture_client/src/contexts/user.rs b/tests/rust/fixture_client/src/contexts/user.rs new file mode 100644 index 0000000..c9d1cdb --- /dev/null +++ b/tests/rust/fixture_client/src/contexts/user.rs @@ -0,0 +1,29 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{UserProfileOutput, UserOrdersOutput}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserContextData { + pub user_profile: UserProfileOutput, + pub user_orders: UserOrdersOutput, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserContextParams { + pub user_id: i64, +} + +pub async fn fetch_user_context( + client: &MizanClient, + params: &UserContextParams, +) -> Result { + let params_value = serde_json::to_value(params).unwrap_or(Value::Object(Default::default())); + let raw = client.fetch_context("user", ¶ms_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode user context: {e}"))) +} diff --git a/tests/rust/fixture_client/src/functions/echo.rs b/tests/rust/fixture_client/src/functions/echo.rs new file mode 100644 index 0000000..86ef70e --- /dev/null +++ b/tests/rust/fixture_client/src/functions/echo.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{EchoOutput, EchoInput}; + +pub async fn call_echo(client: &MizanClient, args: &EchoInput) -> Result { + let args_value = serde_json::to_value(args).unwrap_or(Value::Object(Default::default())); + let raw = client.call("echo", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode echo result: {e}"))) +} diff --git a/tests/rust/fixture_client/src/functions/find_user.rs b/tests/rust/fixture_client/src/functions/find_user.rs new file mode 100644 index 0000000..3d7f9f0 --- /dev/null +++ b/tests/rust/fixture_client/src/functions/find_user.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{FindUserOutput, FindUserInput}; + +pub async fn call_find_user(client: &MizanClient, args: &FindUserInput) -> Result, MizanError> { + let args_value = serde_json::to_value(args).unwrap_or(Value::Object(Default::default())); + let raw = client.call("find_user", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode find_user result: {e}"))) +} diff --git a/tests/rust/fixture_client/src/functions/mod.rs b/tests/rust/fixture_client/src/functions/mod.rs new file mode 100644 index 0000000..e277fc5 --- /dev/null +++ b/tests/rust/fixture_client/src/functions/mod.rs @@ -0,0 +1,6 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod echo; +pub mod find_user; +pub mod rename_user; +pub mod whoami; diff --git a/tests/rust/fixture_client/src/functions/rename_user.rs b/tests/rust/fixture_client/src/functions/rename_user.rs new file mode 100644 index 0000000..cc9820b --- /dev/null +++ b/tests/rust/fixture_client/src/functions/rename_user.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{RenameUserOutput, RenameUserInput}; + +pub async fn call_rename_user(client: &MizanClient, args: &RenameUserInput) -> Result { + let args_value = serde_json::to_value(args).unwrap_or(Value::Object(Default::default())); + let raw = client.call("rename_user", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode rename_user result: {e}"))) +} diff --git a/tests/rust/fixture_client/src/functions/whoami.rs b/tests/rust/fixture_client/src/functions/whoami.rs new file mode 100644 index 0000000..4512523 --- /dev/null +++ b/tests/rust/fixture_client/src/functions/whoami.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{WhoamiOutput}; + +pub async fn call_whoami(client: &MizanClient) -> Result { + let args_value = Value::Object(Default::default()); + let raw = client.call("whoami", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode whoami result: {e}"))) +} diff --git a/tests/rust/fixture_client/src/lib.rs b/tests/rust/fixture_client/src/lib.rs new file mode 100644 index 0000000..cfc3e80 --- /dev/null +++ b/tests/rust/fixture_client/src/lib.rs @@ -0,0 +1,8 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod types; +pub mod contexts; +pub mod mutations; +pub mod functions; + +pub use mizan_rust::{MizanClient, MizanConfig, MizanError}; diff --git a/tests/rust/fixture_client/src/mutations/mod.rs b/tests/rust/fixture_client/src/mutations/mod.rs new file mode 100644 index 0000000..4410f89 --- /dev/null +++ b/tests/rust/fixture_client/src/mutations/mod.rs @@ -0,0 +1,3 @@ +// AUTO-GENERATED by mizan — do not edit + +pub mod update_profile; diff --git a/tests/rust/fixture_client/src/mutations/update_profile.rs b/tests/rust/fixture_client/src/mutations/update_profile.rs new file mode 100644 index 0000000..819af92 --- /dev/null +++ b/tests/rust/fixture_client/src/mutations/update_profile.rs @@ -0,0 +1,14 @@ +// AUTO-GENERATED by mizan — do not edit + +use serde_json::Value; + +use mizan_rust::{MizanClient, MizanError}; + +use crate::types::{UpdateProfileOutput, UpdateProfileInput}; + +pub async fn call_update_profile(client: &MizanClient, args: &UpdateProfileInput) -> Result { + let args_value = serde_json::to_value(args).unwrap_or(Value::Object(Default::default())); + let raw = client.call("update_profile", args_value).await?; + serde_json::from_value(raw) + .map_err(|e| MizanError::transport(format!("decode update_profile result: {e}"))) +} diff --git a/tests/rust/fixture_client/src/types.rs b/tests/rust/fixture_client/src/types.rs new file mode 100644 index 0000000..7067fdb --- /dev/null +++ b/tests/rust/fixture_client/src/types.rs @@ -0,0 +1,98 @@ +// AUTO-GENERATED by mizan — do not edit + +#![allow(non_camel_case_types)] + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct HTTPValidationError { + pub detail: Option>, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct OrderOutput { + pub id: i64, + pub user_id: i64, + pub total: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ValidationError { + pub loc: Vec, + pub msg: String, + #[serde(rename = "type")] + pub r#type: String, + pub input: Option, + pub ctx: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct EchoInput { + pub text: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct EchoOutput { + pub message: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct FindUserInput { + pub user_id: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct FindUserOutput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct RenameUserInput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct RenameUserOutput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateProfileInput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UpdateProfileOutput { + pub ok: bool, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserOrdersInput { + pub user_id: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(transparent)] +pub struct UserOrdersOutput(pub Vec); + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserProfileInput { + pub user_id: i64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct UserProfileOutput { + pub user_id: i64, + pub name: String, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct WhoamiOutput { + pub email: String, + pub authenticated: bool, +} + diff --git a/tests/rust/mizan.toml b/tests/rust/mizan.toml new file mode 100644 index 0000000..3f72959 --- /dev/null +++ b/tests/rust/mizan.toml @@ -0,0 +1,11 @@ +output = "fixture_client" +targets = ["rust"] +rust_crate_name = "fixture_client" + +[source.fastapi] +module = "afi_codegen_app" +cwd = "../afi" +command = ["uv", "run", "python"] + +[rust_kernel] +path = "../../../frontends/mizan-rust" diff --git a/tests/rust/regen_fixture_client.py b/tests/rust/regen_fixture_client.py new file mode 100644 index 0000000..7629cf7 --- /dev/null +++ b/tests/rust/regen_fixture_client.py @@ -0,0 +1,40 @@ +"""Regenerate the wire-parity fixture_client crate via the Rust codegen binary. + +Drives the Rust `mizan-generate` binary against `tests/rust/mizan.toml`, +which points at the AFI fixture's FastAPI registration module. Output +lands under `tests/rust/fixture_client/` and is consumed by both +`drive_emitted` (typed-emitted-crate probes) and `drive_kernel` +(raw-kernel probes) via the parent `Cargo.toml` workspace. +""" + +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + + +HERE = Path(__file__).resolve().parent +REPO_ROOT = HERE.parents[1] +BINARY = REPO_ROOT / "protocol/mizan-codegen/target/release/mizan-generate" +CONFIG = HERE / "mizan.toml" + + +def main() -> int: + if not BINARY.exists(): + sys.stderr.write( + f"[regen] binary missing: {BINARY}\n" + "[regen] build it: cargo build --release " + "--manifest-path protocol/mizan-codegen/Cargo.toml\n" + ) + return 1 + + result = subprocess.run( + [str(BINARY), "--config", str(CONFIG)], + cwd=HERE, + ) + return result.returncode + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/rust/run_wire_parity.py b/tests/rust/run_wire_parity.py new file mode 100644 index 0000000..d336242 --- /dev/null +++ b/tests/rust/run_wire_parity.py @@ -0,0 +1,103 @@ +"""Drive the wire-parity check end-to-end. + +1. Boot the FastAPI fixture app via uvicorn on a free port. +2. Poll /openapi.json until the server is up. +3. Run the Rust `drive_kernel` binary (raw kernel calls) against it. +4. Run the Rust `drive_emitted` binary (typed codegen functions) against + the same server. +5. Tear the server down. + +Either non-zero driver exit propagates as the script's exit code. +""" + +from __future__ import annotations + +import os +import socket +import subprocess +import sys +import time +import urllib.error +import urllib.request +from pathlib import Path + + +REPO_ROOT = Path(__file__).resolve().parents[2] +AFI_DIR = REPO_ROOT / "tests" / "afi" +RUST_DIR = REPO_ROOT / "tests" / "rust" +BOOT_TIMEOUT_S = 15.0 +POLL_INTERVAL_S = 0.25 + + +def pick_free_port() -> int: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.bind(("127.0.0.1", 0)) + return s.getsockname()[1] + + +def wait_for_server(port: int, timeout_s: float) -> bool: + deadline = time.monotonic() + timeout_s + url = f"http://127.0.0.1:{port}/openapi.json" + while time.monotonic() < deadline: + try: + with urllib.request.urlopen(url, timeout=1.0) as resp: + if resp.status == 200: + return True + except (urllib.error.URLError, ConnectionError, OSError) as e: + # Surface the kind of failure so a stuck boot doesn't read + # as "silently waiting"; the loop continues until timeout. + sys.stderr.write(f"[wire_parity] waiting for server: {type(e).__name__}\n") + time.sleep(POLL_INTERVAL_S) + return False + + +def run_driver(name: str, base_url: str) -> int: + sys.stdout.write(f"\n=== {name} ===\n") + sys.stdout.flush() + return subprocess.run( + ["cargo", "run", "--quiet", "--bin", name, "--", base_url], + cwd=RUST_DIR, + ).returncode + + +def main() -> int: + port = pick_free_port() + base_url = f"http://127.0.0.1:{port}/api/mizan" + + server = subprocess.Popen( + ["uv", "run", "uvicorn", "fastapi_app:make_app", + "--factory", "--port", str(port), "--log-level", "warning"], + cwd=AFI_DIR, + stdout=subprocess.DEVNULL, + stderr=subprocess.PIPE, + ) + + try: + if not wait_for_server(port, BOOT_TIMEOUT_S): + sys.stderr.write( + f"[wire_parity] server failed to start within {BOOT_TIMEOUT_S}s\n", + ) + stderr_tail = server.stderr.read(4096) if server.stderr else b"" + if stderr_tail: + sys.stderr.write(stderr_tail.decode("utf-8", errors="replace")) + return 1 + + failures = 0 + for driver in ("drive_kernel", "drive_emitted"): + rc = run_driver(driver, base_url) + if rc != 0: + sys.stderr.write(f"[wire_parity] {driver} exited {rc}\n") + failures += 1 + + return 0 if failures == 0 else 1 + finally: + server.terminate() + try: + server.wait(timeout=3) + except subprocess.TimeoutExpired: + server.kill() + server.wait() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/rust/src/drive_emitted.rs b/tests/rust/src/drive_emitted.rs new file mode 100644 index 0000000..d221cd0 --- /dev/null +++ b/tests/rust/src/drive_emitted.rs @@ -0,0 +1,75 @@ +//! Drive the codegen-emitted `fixture_client` crate against a live +//! FastAPI fixture. Validates not just the kernel wire (which +//! `drive_kernel.rs` already covers) but that the codegen actually +//! produces typed-functions that round-trip cleanly through the same +//! kernel. + +use std::env; +use std::process::ExitCode; + +use mizan_rust::{MizanClient, MizanConfig}; + +use fixture_client::contexts::user::{fetch_user_context, UserContextParams}; +use fixture_client::functions::echo::call_echo; +use fixture_client::functions::find_user::call_find_user; +use fixture_client::functions::rename_user::call_rename_user; +use fixture_client::functions::whoami::call_whoami; +use fixture_client::mutations::update_profile::call_update_profile; +use fixture_client::types::{ + EchoInput, FindUserInput, RenameUserInput, UpdateProfileInput, +}; + + +#[tokio::main] +async fn main() -> ExitCode { + let base_url = env::args().nth(1) + .unwrap_or_else(|| "http://127.0.0.1:8765/api/mizan".to_string()); + let client = MizanClient::new(MizanConfig { + base_url, + session: false, + ..Default::default() + }); + + let mut failures = 0usize; + + match call_echo(&client, &EchoInput { text: "hello".to_string() }).await { + Ok(out) => println!("call_echo -> message={:?}", out.message), + Err(e) => { eprintln!("call_echo ERR {e}"); failures += 1; } + } + + match call_whoami(&client).await { + Ok(out) => println!("call_whoami -> authenticated={} email={:?}", out.authenticated, out.email), + Err(e) => { eprintln!("call_whoami ERR {e}"); failures += 1; } + } + + match call_find_user(&client, &FindUserInput { user_id: 99999 }).await { + Ok(None) => println!("call_find_user(99999) -> None"), + Ok(Some(out)) => println!("call_find_user(99999) -> user_id={} name={:?}", out.user_id, out.name), + Err(e) => { eprintln!("call_find_user ERR {e}"); failures += 1; } + } + + match call_update_profile(&client, &UpdateProfileInput { user_id: 5, name: "Ryth".to_string() }).await { + Ok(out) => println!("call_update_profile -> ok={}", out.ok), + Err(e) => { eprintln!("call_update_profile ERR {e}"); failures += 1; } + } + + match call_rename_user(&client, &RenameUserInput { user_id: 5, name: "RythR".to_string() }).await { + Ok(out) => println!("call_rename_user -> user_id={} name={:?}", out.user_id, out.name), + Err(e) => { eprintln!("call_rename_user ERR {e}"); failures += 1; } + } + + match fetch_user_context(&client, &UserContextParams { user_id: 5 }).await { + Ok(out) => println!( + "fetch_user_context(5) -> user_profile={{ user_id:{}, name:{:?} }} user_orders.len={}", + out.user_profile.user_id, out.user_profile.name, out.user_orders.0.len(), + ), + Err(e) => { eprintln!("fetch_user_context ERR {e}"); failures += 1; } + } + + if failures > 0 { + eprintln!("[drive_emitted] {failures} probe(s) failed"); + ExitCode::FAILURE + } else { + ExitCode::SUCCESS + } +} diff --git a/tests/rust/src/drive_kernel.rs b/tests/rust/src/drive_kernel.rs new file mode 100644 index 0000000..b69dd0b --- /dev/null +++ b/tests/rust/src/drive_kernel.rs @@ -0,0 +1,74 @@ +//! Drive the mizan-rust kernel against a live FastAPI fixture app and +//! print every response. Used by `run_wire_parity.sh` which: +//! +//! 1. Boots `tests/afi/fastapi_app.py` via uvicorn on port 8765. +//! 2. Polls `/openapi.json` until the server is up. +//! 3. Runs `cargo run --bin drive_kernel -- http://127.0.0.1:8765/api/mizan`. +//! 4. Diffs the stdout against a committed snapshot. +//! +//! The kernel exercises every endpoint the fixture declares: the two +//! plain functions (`echo`, `whoami`), the two-function `user` context, +//! the `update_profile` mutation, the `find_user` Optional path, and +//! the `rename_user` merge mutation. + +use std::env; +use std::process::ExitCode; + +use mizan_rust::{MizanClient, MizanConfig}; +use serde_json::{json, Value}; + + +#[tokio::main] +async fn main() -> ExitCode { + let base_url = env::args().nth(1) + .unwrap_or_else(|| "http://127.0.0.1:8765/api/mizan".to_string()); + let client = MizanClient::new(MizanConfig { + base_url, + session: false, + ..Default::default() + }); + + let mut failures = 0usize; + failures += probe(&client, "echo", json!({"text": "hello"})).await; + failures += probe(&client, "whoami", json!({})).await; + failures += probe(&client, "find_user", json!({"user_id": 99999})).await; + failures += probe(&client, "update_profile", json!({"user_id": 5, "name": "Ryth"})).await; + failures += probe(&client, "rename_user", json!({"user_id": 5, "name": "RythR"})).await; + + failures += probe_context(&client, "user", json!({"user_id": 5})).await; + + if failures > 0 { + eprintln!("[drive_kernel] {failures} probe(s) failed"); + ExitCode::FAILURE + } else { + ExitCode::SUCCESS + } +} + + +async fn probe(client: &MizanClient, fn_name: &str, args: Value) -> usize { + match client.call(fn_name, args.clone()).await { + Ok(result) => { + println!("call {fn_name} args={args} -> {result}"); + 0 + } + Err(err) => { + eprintln!("call {fn_name} args={args} -> ERR {err}"); + 1 + } + } +} + + +async fn probe_context(client: &MizanClient, name: &str, params: Value) -> usize { + match client.fetch_context(name, ¶ms).await { + Ok(data) => { + println!("ctx {name} params={params} -> {data}"); + 0 + } + Err(err) => { + eprintln!("ctx {name} params={params} -> ERR {err}"); + 1 + } + } +}
  2. 6xe?b<39N0T%9L_;GtMsWY`R9W%Y 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 z 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