tawasuyu

tawasuyu/brahman

Rust 332TOML 127JSON 17Markdown 154710 Sutichaykuna

⎇ main crates/init/arje-zero/src/events.rs Rust · 65 siq'ikuna · 2.2 KB Ñawpa willay Pi imata llamkarqan ch'uya

refactor(naming): A1 — ente→arje, vista→revista, pluma→fana b83d40a83 · 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//!
4//! Este módulo es **vocabulario**: declara el universo completo de eventos
5//! del fractal. Algunas variantes/campos están reservados para flujos
6//! aún no implementados (capabilities, signal-driven shutdown). Silenciar
7//! `dead_code` evita ruido sin perder la declaración del contrato.
8
9#![allow(dead_code)]
10
11use arje_bus::{BusMessage, BusRequest, BusResponse, PeerCreds};
12use arje_card::{Capability, EntityCard};
13use nix::sys::signal::Signal;
14use tokio::sync::{mpsc, oneshot};
15use ulid::Ulid;
16
17#[derive(Debug)]
18pub enum GraphEvent {
19    EnteDied { id: Ulid, status: ExitStatus },
20    CapabilityRequested {
21        from: Ulid,
22        cap: Capability,
23        reply: oneshot::Sender<CapabilityGrant>,
24    },
25    SpawnRequest { card: EntityCard, requester: Ulid },
26    /// Request del bus interno. `peer` es no-falsificable (kernel-injected
27    /// via SO_PEERCRED). `from` es la identidad reclamada por el cliente —
28    /// el grafo la verifica contra `peer.pid`.
29    BusRequest {
30        peer: PeerCreds,
31        from: Option<Ulid>,
32        request: BusRequest,
33        outbound: mpsc::Sender<BusMessage>,
34        reply: oneshot::Sender<BusResponse>,
35    },
36    /// Response a un Invoke forwardeado por el grafo a un proveedor.
37    /// `seq` debe coincidir con una entry en pending_invokes.
38    BusResponse { seq: u64, response: BusResponse },
39    /// Cliente del bus cerró su conexión. Si había anunciado identidad,
40    /// el grafo retira esa conexión del registry.
41    BusConnClosed { ente_id: Option<Ulid> },
42    Shutdown { reason: ShutdownReason },
43}
44
45#[derive(Debug, Clone)]
46pub enum ExitStatus {
47    Exit(i32),
48    Killed(Signal),
49}
50
51#[derive(Debug, Clone)]
52pub enum ShutdownReason {
53    SeedRequested,
54    Signal(Signal),
55}
56
57#[derive(Debug)]
58pub enum CapabilityGrant {
59    Granted { token: u64 },
60    NoProvider,
61    Denied { reason: &'static str },
62    /// El holder ya tiene el máximo de tokens activos para esta cap.
63    /// Debe esperar a que alguno expire o renovar uno existente.
64    QuotaExceeded { active: u32, limit: u32 },
65}