Rattles 是一个极简、零依赖的 Rust 终端加载动画库,用于在命令行界面显示旋转指示器。它没有运行时或生命周期,spinner 可直接在渲染循环中构造,开销极低,并支持 no_std 环境。
安装:在 Cargo.toml 中添加 rattles = "0.1"(默认含 std);no_std 使用 rattles = { version = "0.1", default-features = false }。也可用 cargo add rattles 或 cargo add rattles --no-default-features。
核心概念:Rattler 是 spinner 定义(帧加间隔),无状态且构造廉价;TickedRattler 是有状态包装,用于基于 tick 的驱动(no_std 必需);Presets 是按类别组织的内置 spinner;rattle! 宏可在编译期定义自定义 spinner。
主要能力:预设分为 arrows、ascii、braille、emoji 等类别,prelude 重导出全部预设。Rattler API 提供 current_frame()(基于系统时钟,仅 std)、frame_at(Duration)(std 与 no_std 均可用)、frame(index)、set_interval()、reverse()、into_ticked() 等。TickedRattler 通过 tick() 推进并读取 current_frame()。no_std 下可用索引动画(frame(i))或外部时钟(frame_at(elapsed))。rattle! 宏可定义单行或多行自定义 spinner,需提供结构名、构造函数名、行数、间隔毫秒和关键帧字符串数组。
使用方式:std 下典型循环为 print!("\r{}", rattle.current_frame()) 后 flush stdout 并 sleep。可与 ratatui 集成,因 Rattler 无状态可按引用传递,无需 Arc<Mutex<>>。也提供 tokio 异步兼容示例和收集全部帧的写法。
限制与注意:no_std 下 current_frame() 不可用,需改用 frame_at、frame 或 into_ticked,并禁用默认特性。自定义 spinner 的关键帧必须是字符串字面量,行数需与关键帧视觉宽度匹配。部分 braille/emoji 帧需要终端支持 Unicode,可先用 ASCII 预设验证。若动画卡在第一帧,需确保 flush stdout、使用 \r 覆盖行,且 sleep 间隔不短于 spinner 间隔。
资料未提供收费、价格、平台或效果等信息。