//! Emite los patrones compartidos como **escena de cable** (`EscenaWire`) //! serializada, para que el reproductor de wawa los pinte y se compare contra //! el camino directo. //! //! Es una de las tres mitades de una verificación que no cabe en un proceso: //! los backends de `llimphi-text` (`vello`, `cpu`, `wire`) son excluyentes, y //! por eso este crate y `llimphi-wawa` viven en workspaces aparte. Acá compone //! la jaula (backend `wire`, que **no shapea**); allá reproduce el kernel. //! //! ```bash //! cargo run --manifest-path 02_ruway/llimphi/llimphi-jaula/Cargo.toml \ //! --no-default-features --features std --example emitir_patron -- //! ``` //! //! **Sin el patrón de texto, y no es un olvido.** En el perfil `wire` medir una //! cadena es una *pregunta* que cruza la frontera y contesta el otro lado —eso //! es lo que W4 sacó de la jaula—. Un medidor sintético de este lado haría que //! el layout reservara un ancho y el reproductor pintara los glifos con otro: //! el test mediría esa discrepancia inventada y no la fidelidad del cable. Por //! eso el medidor de acá **paniquea**: si alguien mete texto en el patrón, se //! entera de por qué no puede estar en vez de leer un rojo confuso. use llimphi_jaula::{Jaula, Medida, Peticion}; include!("../../escena_patron.rs"); fn medidor(p: &Peticion<'_>) -> Medida { panic!( "el patrón del cable no puede llevar texto: medir «{}» es una pregunta \ que contesta el otro lado de la frontera (ver el encabezado)", p.cadena ); } fn main() { let dir = std::env::args().nth(1).unwrap_or_else(|| { eprintln!("uso: emitir_patron "); std::process::exit(2); }); let dir = std::path::PathBuf::from(dir); std::fs::create_dir_all(&dir).expect("crear el directorio de salida"); let mut emitidos = 0; for (nombre, vista) in patrones::<()>() { if nombre.starts_with("texto") { continue; } let mut jaula = Jaula::new(ANCHO as f32, ALTO as f32, medidor); let _montado = jaula.fotograma(vista); let bytes = postcard::to_allocvec(jaula.escena()).expect("serializar la escena"); let ruta = dir.join(format!("{nombre}.wire")); std::fs::write(&ruta, &bytes).expect("escribir la escena"); println!("{nombre}: {} bytes de cable → {}", bytes.len(), ruta.display()); emitidos += 1; } println!("patrones emitidos: {emitidos}"); }