⎇ d6b8f18b43c9bd9bf7268e48b61392a2d62bb229
crates/ente-zero/src/events.rs
Historia
Quién tocó qué
crudo
Pausa: 11 crates del fractal Ente #0 con cerebro completo
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}