Skip to main content

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 context;
19pub mod envelope;
20pub mod error;
21mod forwarder;
22pub mod lifecycle;
23pub mod main_engine;
24pub mod plugin;
25pub mod registry;
26pub mod section;
27pub mod service;
28pub mod worker;
29
30pub use context::PluginContext;
31pub use envelope::{
32    Envelope, OneshotErr, OneshotReceiver, OneshotSender, ReplyErr, e_req_type, e_to_type,
33};
34pub use error::{AskError, PluginError};
35pub use lifecycle::{
36    EVENT_PLUG_DOWN, EVENT_PLUG_DOWN_EVENT_PREFIX, EVENT_PLUG_DOWN_PREFIX, EVENT_PLUG_UP,
37    EVENT_PLUG_UP_PREFIX, EVENT_SRV_CHG, EVENT_SRV_CHG_PREFIX,
38};
39pub use main_engine::{MailStats, MainEngine, PluginInfo, PluginState};
40pub use plugin::{MAILBOX_CAP, PANIC_LIMIT, Plugin};
41pub use section::{ApplyReport, Configurable, Field, SectionMap, valid_config_ns};
42pub use service::{PlugNotice, ProviderRef, ServiceDesc};