ek_core/lib.rs
1//! ek-core —— 插件宿主 + Actor-over-Bus 运行时(基于已发布的 ek-event 0.1.0)。
2//!
3//! 核心协议:
4//! - **收** = 插件唯一入口 [`Plugin::on_mail`](plugin::Plugin);订阅面由 [`Plugin::routes`] 声明,
5//! 宿主 start() 时为每条 route 装配 forwarder(bounded 邮箱 + try_send,零阻塞)。
6//! - **发** = 插件唯一出口 [`PluginContext`](context::PluginContext):`put`(广播/业务日志)、
7//! `ask`(eReq+Oneshot 请求)、`notify`(eTo)。
8//! - 宿主不执行业务、零业务类型、零日志(0.3.0):插件之间不直调;
9//! 依赖在 add_plugin 时显式声明,start 按 deps 拓扑序装配,close 按逆序五步回收。
10//! - 宿主想说的话全是结构化事件:`ePlugUp`/`ePlugDown`/`ePlugQDown.<名>`/`eSrvChg`
11//! (见 [`lifecycle`]);运维诊断文本只走 stderr,不进总线不占类型。
12//! 业务日志与本宿主无关(插件自造自投,业务链上用 ek-data 的 LogData 到 "eLog")。
13//!
14//! 故障面:handler panic 由 worker catch_unwind 隔离,连续 [`PANIC_LIMIT`] 次 → Quarantined
15//! (worker 自退 + `ePlugQDown.<name>` 结构化广播);邮箱有界,溢出丢弃计数最终一致
16//! (stats.spilled,节流 stderr 提示)。
17
18pub mod audit;
19pub mod context;
20pub mod envelope;
21pub mod error;
22mod forwarder;
23pub mod lifecycle;
24pub mod main_engine;
25pub mod plugin;
26pub mod registry;
27pub mod section;
28pub mod service;
29pub mod worker;
30
31pub use context::PluginContext;
32pub use envelope::{
33 Envelope, OneshotErr, OneshotReceiver, OneshotSender, ReplyErr, e_req_type, e_to_type,
34};
35pub use error::{AskError, PluginError};
36pub use lifecycle::{
37 EVENT_PLUG_DOWN, EVENT_PLUG_DOWN_EVENT_PREFIX, EVENT_PLUG_DOWN_PREFIX, EVENT_PLUG_UP,
38 EVENT_PLUG_UP_PREFIX, EVENT_SRV_CHG, EVENT_SRV_CHG_PREFIX,
39};
40pub use main_engine::{MailStats, MainEngine, PluginInfo, PluginState};
41pub use plugin::{MAILBOX_CAP, PANIC_LIMIT, Plugin};
42pub use section::{ApplyReport, Configurable, Field, SectionMap, valid_config_ns};
43pub use service::{PlugNotice, ProviderRef, ServiceDesc};