Expand description
单号生成器插件:遵循 TaskPlugin 模式的薄封装
插件本身不持有任何数据库连接或 SQL 语句。
所有持久化逻辑通过 SerialGenerator trait 委托给业务方实现。
§使用方式
§方式一:内存后端(零配置)
plugins.enabled = ["serial"]
[plugins.serial]
backend = "memory"
[[plugins.serial.rules]]
key = "order"
format = "ORD{YYYY}{MM}{DD}{SEQ:8}"
cycle = "daily"§方式二:自定义后端(参考 TaskPlugin)
ⓘ
// 业务方实现 SerialGenerator trait
let my_backend = Arc::new(MyDbSerialBackend::new(db_pool));
let plugin = SerialPlugin::new(cfg.plugins.serial, my_backend);
app.plugin(plugin).scan().start().await;§在 Handler 中使用
ⓘ
#[alun::get("/api/serial/next/{rule_key}")]
async fn next_serial(
Extension(plugin): Extension<SerialPlugin>,
Path(rule_key): Path<String>,
) -> Result<Res<String>, ApiError> {
let no = plugin.generator().generate(&rule_key).await
.map_err(|e| ApiError::internal(e.to_string()))?;
Ok(Res::ok(no))
}Structs§
- Serial
Plugin - 单号生成器插件