tawasuyu

tawasuyu/brahman

Rust 483TOML 191Markdown 50JSON 176777 Definitions

⎇ 53dbdf0f1deea10d6fc567ea2b43e1e75d6d60cd crates/modules/ui_engine/libs/bus/src/lib.rs Rust · 44 lines · 1.7 KB History Who touched what raw

chore: monorepo inicial con arje + minga + yahweh absorbidos 53dbdf0f1 · Sergio ·

1//! `yahweh_bus` — `AppBus` + `AppEvent` para comunicación cross-widget.
2//!
3//! Es un `Entity<AppBus>` que emite [`AppEvent`]. Cualquier widget se
4//! subscribe con `cx.subscribe(&bus, |this, _, ev, cx| { ... })`. La
5//! Shell crea exactamente un AppBus al boot y lo distribuye:
6//!
7//! - **Productores** (FileExplorer, DatabaseExplorer): el LayoutHost los
8//!   subscribe individualmente y reenvía sus eventos tipados al bus,
9//!   normalizando al formato `{provider, id, …}` agnóstico.
10//! - **Consumidores** (TextViewer, ImageViewer, …): reciben el handle del
11//!   bus en su constructor y se subscriben directo.
12//!
13//! Por qué un bus y no `cx.subscribe` directo entre productor y consumidor:
14//! los viewers no saben qué explorers existen (ni viceversa). El bus
15//! desacopla — puede haber 0, 1 o N explorers de distintos providers, y
16//! varios viewers en paralelo viendo el mismo evento.
17
18use gpui::EventEmitter;
19
20/// Eventos cross-widget. Diseñados para ser agnósticos del dominio:
21/// `provider` es el id (string) del DataProvider que sabe interpretar el
22/// `id`. `provider_path` es el contexto opcional (ej. el .sqlite del
23/// DatabaseExplorer) que el viewer necesita para construir su provider.
24#[derive(Clone, Debug)]
25pub enum AppEvent {
26    /// Una entidad fue seleccionada (single click). Suele triggerear un
27    /// preview en el viewer activo.
28    EntitySelected {
29        provider: String,
30        provider_path: Option<String>,
31        id: String,
32    },
33    /// Una entidad fue ejecutada (doble click u "Open" del menú).
34    EntityOpened {
35        provider: String,
36        provider_path: Option<String>,
37        id: String,
38    },
39}
40
41#[derive(Default)]
42pub struct AppBus;
43
44impl EventEmitter<AppEvent> for AppBus {}