feat(core): brahman-card-wit — extractor opcional de contratos WIT

Crate nuevo crates/core/brahman-card-wit que parsea texto WIT con
wit-parser y devuelve un Vec<WitInterface> (de brahman-card),
listo para acoplarse a una ResolvedCard::from_conscious(card, wit).

Ámbito intencional: sólo parsing texto, no toca wasm-tools ni
wit-component. Es opt-in: brahman-card no depende de éste.

API pública:
- parse_wit(source: &str) -> Result<Vec<WitInterface>, WitError>
- parse_wit_file(path: impl AsRef<Path>) -> Result<...>

Cada WitInterface incluye: package, world, imports, exports.
Las interfaces importadas/exportadas (no sólo funciones) se
resuelven por nombre via resolve.interfaces[id].name; las
funciones inline aparecen como WorldKey::Name directo.

Example CLI: brahman-wit-info <ruta.wit> imprime los worlds.

  $ brahman-wit-info shared_wit/protocol.wit
  2 world(s):
    package: brahman:protocol@0.1.0
    world:   module
    imports: types, handshake, lifecycle
    exports: run
    ...

Tests: 4/4 (inline + archivo real + parse error + world vacío).
Workspace: 0 errores.

CHANGELOG.md actualizado con la entrada nueva y la del commit
anterior (7b589b8) que faltaba.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-05-08 17:05:17 +00:00
parent 7b589b863d
commit f4dc019004
6 changed files with 292 additions and 2 deletions
Generated
+41 -2
View File
@@ -1176,6 +1176,16 @@ dependencies = [
"ulid",
]
[[package]]
name = "brahman-card-wit"
version = "0.1.0"
dependencies = [
"anyhow",
"brahman-card",
"thiserror 2.0.18",
"wit-parser 0.230.0",
]
[[package]]
name = "brahman-handshake"
version = "0.1.0"
@@ -10277,6 +10287,17 @@ dependencies = [
"indexmap 2.14.0",
]
[[package]]
name = "wasmparser"
version = "0.230.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "808198a69b5a0535583370a51d459baa14261dfab04800c4864ee9e1a14346ed"
dependencies = [
"bitflags 2.11.1",
"indexmap 2.14.0",
"semver",
]
[[package]]
name = "wasmparser"
version = "0.244.0"
@@ -11123,7 +11144,7 @@ checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
dependencies = [
"anyhow",
"heck 0.5.0",
"wit-parser",
"wit-parser 0.244.0",
]
[[package]]
@@ -11173,7 +11194,25 @@ dependencies = [
"wasm-encoder 0.244.0",
"wasm-metadata",
"wasmparser 0.244.0",
"wit-parser",
"wit-parser 0.244.0",
]
[[package]]
name = "wit-parser"
version = "0.230.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "679fde5556495f98079a8e6b9ef8c887f731addaffa3d48194075c1dd5cd611b"
dependencies = [
"anyhow",
"id-arena",
"indexmap 2.14.0",
"log",
"semver",
"serde",
"serde_derive",
"serde_json",
"unicode-xid",
"wasmparser 0.230.0",
]
[[package]]