The IR called them react-message and django-message, so a FastAPI channel had to declare a DjangoMessage. They are client-message and server-message now, and the direction words hold wherever a channel is declared: Params / ClientMessage / ServerMessage, with mizan-core deriving <Pascal>Params and friends so no backend names a type itself. Django's ReactChannel and FastAPI's ReactChannel are both Channel. mizan-fastapi never registered a channels extension, so build_ir() emitted no channel at all and every payload type was invisible to codegen. It registers one now. RegistryExtension is an ABC requiring all(), which is what the IR reads — an extension that cannot enumerate its registrations no longer exists. The gate that should have caught the rename could not: tests/afi registered no channel because mizan-rust had no channel registry to register one in, so a five-package rename of the wire contract passed byte-parity without a channel byte crossing it. mizan-rust grows ChannelSlotKind, a CHANNELS slice, a #[mizan::channel] macro, and KDL emission whose wire_to_pascal matches Python's split; the AFI fixture now carries a channel with every slot and one with a single slot, so all three backends prove the contract byte for byte. MizanChannel held three Option<String> beside three has_*() predicates and unwrapped them with defaults; it holds an ordered slot vector, so an absent slot is absent rather than defaulted. The channels target emitted a React hooks file that a stage1-only consumer could not compile — react emits that now. The codegen's parity tests byte-compared emitted source against baselines without ever compiling it: they compile the generated crate and run its tests, import the generated Python package and call every method, and typecheck each TypeScript target against a consumer. Also fixed at source: app_visitor printed its import diagnostic to stdout, the stream export_mizan_ir writes KDL to, so a failed import silently corrupted the IR; the apps root was hardcoded to "apps"; _default_literal crashed build_ir on any non-JSON-serializable field default; Django and mizan-core derived Pascal names two different ways, disagreeing on every dotted channel name. ir.py builds a document and renders templates/ir/document.kdl.j2 rather than appending KDL strings with hand-tracked indentation, and named types resolve to a fixed point — a model reachable only through a union branch was referenced by a ref that no type block ever defined. The rest is the write-gate's own classifiers run over the standing tree: relative imports, silent swallows, Protocol contracts that should be ABCs, emitters hand-rendering target source, catch-all arms over closed enums, and comments narrating the project rather than the code. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
313 lines
7.5 KiB
TOML
313 lines
7.5 KiB
TOML
# This file is automatically @generated by Cargo.
|
|
# It is not intended for manual editing.
|
|
version = 4
|
|
|
|
[[package]]
|
|
name = "async-trait"
|
|
version = "0.1.89"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
|
|
dependencies = [
|
|
"proc-macro2",
|
|
"quote",
|
|
"syn",
|
|
]
|
|
|
|
[[package]]
|
|
name = "autocfg"
|
|
version = "1.5.1"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
|
|
|
|
[[package]]
|
|
name = "cfg-if"
|
|
version = "1.0.4"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
|
|
|
[[package]]
|
|
name = "heck"
|
|
version = "0.5.0"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
|
|
[[package]]
|
|
name = "indoc"
|
|
version = "2.0.7"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
|
|
dependencies = [
|
|
"rustversion",
|
|
]
|
|
|
|
[[package]]
|
|
name = "itoa"
|
|
version = "1.0.18"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
|
|
|
[[package]]
|
|
name = "kdl"
|
|
version = "6.5.0"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "81a29e7b50079ff44549f68c0becb1c73d7f6de2a4ea952da77966daf3d4761e"
|
|
dependencies = [
|
|
"miette",
|
|
"num",
|
|
"winnow",
|
|
]
|
|
|
|
[[package]]
|
|
name = "linkme"
|
|
version = "0.3.36"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "e83272d46373fb8decca684579ac3e7c8f3d71d4cc3aa693df8759e260ae41cf"
|
|
dependencies = [
|
|
"linkme-impl",
|
|
]
|
|
|
|
[[package]]
|
|
name = "linkme-impl"
|
|
version = "0.3.36"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "32d59e20403c7d08fe62b4376edfe5c7fb2ef1e6b1465379686d0f21c8df444b"
|
|
dependencies = [
|
|
"proc-macro2",
|
|
"quote",
|
|
"syn",
|
|
]
|
|
|
|
[[package]]
|
|
name = "memchr"
|
|
version = "2.8.0"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
|
|
|
|
[[package]]
|
|
name = "memo-map"
|
|
version = "0.3.3"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "38d1115007560874e373613744c6fba374c17688327a71c1476d1a5954cc857b"
|
|
|
|
[[package]]
|
|
name = "miette"
|
|
version = "7.6.0"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7"
|
|
dependencies = [
|
|
"cfg-if",
|
|
"unicode-width",
|
|
]
|
|
|
|
[[package]]
|
|
name = "minijinja"
|
|
version = "2.21.0"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "cb3d648e68cea56d9858d535ee28f9538404e2dd8cb08ed0bd05dca379477f39"
|
|
dependencies = [
|
|
"memo-map",
|
|
"serde",
|
|
]
|
|
|
|
[[package]]
|
|
name = "mizan-core"
|
|
version = "0.1.0"
|
|
dependencies = [
|
|
"async-trait",
|
|
"indoc",
|
|
"kdl",
|
|
"linkme",
|
|
"minijinja",
|
|
"mizan-macros",
|
|
"serde",
|
|
"serde_json",
|
|
]
|
|
|
|
[[package]]
|
|
name = "mizan-macros"
|
|
version = "0.1.0"
|
|
dependencies = [
|
|
"heck",
|
|
"proc-macro2",
|
|
"quote",
|
|
"syn",
|
|
]
|
|
|
|
[[package]]
|
|
name = "num"
|
|
version = "0.4.3"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
|
|
dependencies = [
|
|
"num-bigint",
|
|
"num-complex",
|
|
"num-integer",
|
|
"num-iter",
|
|
"num-rational",
|
|
"num-traits",
|
|
]
|
|
|
|
[[package]]
|
|
name = "num-bigint"
|
|
version = "0.4.6"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
|
|
dependencies = [
|
|
"num-integer",
|
|
"num-traits",
|
|
]
|
|
|
|
[[package]]
|
|
name = "num-complex"
|
|
version = "0.4.6"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
|
|
dependencies = [
|
|
"num-traits",
|
|
]
|
|
|
|
[[package]]
|
|
name = "num-integer"
|
|
version = "0.1.46"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
|
|
dependencies = [
|
|
"num-traits",
|
|
]
|
|
|
|
[[package]]
|
|
name = "num-iter"
|
|
version = "0.1.45"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
|
|
dependencies = [
|
|
"autocfg",
|
|
"num-integer",
|
|
"num-traits",
|
|
]
|
|
|
|
[[package]]
|
|
name = "num-rational"
|
|
version = "0.4.2"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
|
|
dependencies = [
|
|
"num-bigint",
|
|
"num-integer",
|
|
"num-traits",
|
|
]
|
|
|
|
[[package]]
|
|
name = "num-traits"
|
|
version = "0.2.19"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
|
dependencies = [
|
|
"autocfg",
|
|
]
|
|
|
|
[[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 = "rustversion"
|
|
version = "1.0.22"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
|
|
|
|
[[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 = "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 = "unicode-ident"
|
|
version = "1.0.24"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
|
|
|
[[package]]
|
|
name = "unicode-width"
|
|
version = "0.1.14"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
|
|
|
|
[[package]]
|
|
name = "winnow"
|
|
version = "0.6.24"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a"
|
|
dependencies = [
|
|
"memchr",
|
|
]
|
|
|
|
[[package]]
|
|
name = "zmij"
|
|
version = "1.0.21"
|
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
|