Skip to main content

alun_plugin/
sid_plugin.rs

1//! 短ID生成插件:基于 UUID v4/v7 的分布式业务ID
2//!
3//! 使用方式:`state.sid.generate_order_id()`
4
5use async_trait::async_trait;
6use alun_core::{Plugin, Result};
7use alun_utils::Sid;
8
9/// 短 ID 生成插件
10///
11/// 封装 `alun_utils::Sid`,提供 UUID v4/v7、TSID、短 ID 等多种 ID 生成策略。
12pub struct SidPlugin;
13
14impl SidPlugin {
15    /// 创建短 ID 插件
16    pub fn new() -> Self { Self }
17
18    /// 生成 UUID v4(随机)
19    pub fn uuid(&self) -> String { Sid::uuid() }
20    /// 生成 16 字符短 ID(URL 安全)
21    pub fn short(&self) -> String { Sid::short() }
22    /// 生成 8 字符微型 ID
23    pub fn tiny(&self) -> String { Sid::tiny() }
24    /// 生成 UUID v7(时间有序)
25    pub fn uuid7(&self) -> String { Sid::uuid7() }
26    /// 生成 TSID(时间有序 64 位 ID)
27    pub fn tsid(&self) -> String { Sid::tsid() }
28
29    /// 带前缀的业务 ID,如 "ORD" + uuid7 → "ORD_0192331a..."
30    pub fn biz_id(&self, prefix: &str) -> String {
31        format!("{}_{}", prefix, Sid::uuid7())
32    }
33}
34
35impl Default for SidPlugin {
36    fn default() -> Self { Self }
37}
38
39#[async_trait]
40impl Plugin for SidPlugin {
41    fn name(&self) -> &str { "sid" }
42    async fn start(&self) -> Result<()> {
43        tracing::info!("短ID插件就绪");
44        Ok(())
45    }
46    async fn stop(&self) -> Result<()> { Ok(()) }
47}