gioser
⎇ d6b8f18b43c9bd9bf7268e48b61392a2d62bb229 crates/ente-zero/src/events.rs Rust · 55 líneas · 1.7 KB Historia Quién tocó qué crudo

Pausa: 11 crates del fractal Ente #0 con cerebro completo d6b8f18b4 · Sergio ·

1//! Eventos internos del bucle primordial. Todo cambio de estado del fractal
2//! pasa por aquí — la única vía de mutación del grafo desde tasks externas.
3
4use ente_bus::{BusMessage, BusRequest, BusResponse, PeerCreds};
5use ente_card::{Capability, EntityCard};
6use nix::sys::signal::Signal;
7use tokio::sync::{mpsc, oneshot};
8use ulid::Ulid;
9
10#[derive(Debug)]
11pub enum GraphEvent {
12    EnteDied { id: Ulid, status: ExitStatus },
13    CapabilityRequested {
14        from: Ulid,
15        cap: Capability,
16        reply: oneshot::Sender<CapabilityGrant>,
17    },
18    SpawnRequest { card: EntityCard, requester: Ulid },
19    /// Request del bus interno. `peer` es no-falsificable (kernel-injected
20    /// via SO_PEERCRED). `from` es la identidad reclamada por el cliente —
21    /// el grafo la verifica contra `peer.pid`.
22    BusRequest {
23        peer: PeerCreds,
24        from: Option<Ulid>,
25        request: BusRequest,
26        outbound: mpsc::Sender<BusMessage>,
27        reply: oneshot::Sender<BusResponse>,
28    },
29    /// Response a un Invoke forwardeado por el grafo a un proveedor.
30    /// `seq` debe coincidir con una entry en pending_invokes.
31    BusResponse { seq: u64, response: BusResponse },
32    /// Cliente del bus cerró su conexión. Si había anunciado identidad,
33    /// el grafo retira esa conexión del registry.
34    BusConnClosed { ente_id: Option<Ulid> },
35    Shutdown { reason: ShutdownReason },
36}
37
38#[derive(Debug, Clone)]
39pub enum ExitStatus {
40    Exit(i32),
41    Killed(Signal),
42}
43
44#[derive(Debug, Clone)]
45pub enum ShutdownReason {
46    SeedRequested,
47    Signal(Signal),
48}
49
50#[derive(Debug)]
51pub enum CapabilityGrant {
52    Granted { token: u64 },
53    NoProvider,
54    Denied { reason: &'static str },
55}