const SPINNER_FRAMES: &[char] = &['◐', '◓', '◑', '◒']; pub struct Spinner { frame: usize, } impl Spinner { pub fn new() -> Self { Self { frame: 0 } } pub fn tick(&mut self) { self.frame = (self.frame + 1) % SPINNER_FRAMES.len(); } pub fn current(&self) -> char { SPINNER_FRAMES[self.frame] } } impl Default for Spinner { fn default() -> Self { Self::new() } }