pub struct Spinner { /* private fields */ }
Available on crate feature
spinner
only.Expand description
Generic spinner for rendering spinner animations.
See more styles at rich repository.
Implementations§
source§impl Spinner
impl Spinner
sourcepub fn new(frames: &[&str], interval: f32, speed: f32) -> Self
pub fn new(frames: &[&str], interval: f32, speed: f32) -> Self
Create a new Spinner.
Example
use kdam::Spinner;
let spinner = Spinner::new(
&[
"▁▂▃", "▂▃▄", "▃▄▅", "▄▅▆", "▅▆▇",
"▆▇█", "▇█▇", "█▇▆", "▇▆▅", "▆▅▄",
"▅▄▃", "▄▃▂", "▃▂▁"
],
30.0,
1.0
);
println!("{}", spinner.render_frame(2.89));
Examples found in repository?
examples/showcase/spinner.rs (lines 8-26)
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
fn main() {
let spin = Spinner::new(
&[
"▁▂▃",
"▂▃▄",
"▃▄▅",
"▄▅▆",
"▅▆▇",
"▆▇█",
"▇█▇",
"█▇▆",
"▇▆▅",
"▆▅▄",
"▅▄▃",
"▄▃▂",
"▃▂▁",
],
30.0,
1.0,
);
let timer = Instant::now();
loop {
std::thread::sleep(Duration::from_secs_f32(0.02));
Writer::Stderr
.print_at(
0,
spin.render_frames(
timer.elapsed().as_secs_f32(),
NonZeroI16::new((term::width().unwrap_or(30) / 3) as i16).unwrap(),
)
.as_bytes(),
)
.unwrap();
}
}
More examples
examples/template.rs (lines 10-14)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
fn main() -> Result<()> {
let mut pb = tqdm!(
total = 300,
ncols = 40,
force_refresh = true,
bar_format = "{desc suffix=' '}|{animation}| {spinner} {count}/{total} [{percentage:.0}%] in {elapsed human=true} ({rate:.1}/s, eta: {remaining human=true})",
spinner = Spinner::new(
&["▁▂▃", "▂▃▄", "▃▄▅", "▄▅▆", "▅▆▇", "▆▇█", "▇█▇", "█▇▆", "▇▆▅", "▆▅▄", "▅▄▃", "▄▃▂", "▃▂▁"],
30.0,
1.0,
)
);
for _ in 0..300 {
std::thread::sleep(std::time::Duration::from_secs_f32(0.02));
pb.update(1)?;
}
pb.set_bar_format("{desc suffix=' '}|{animation}| {count}/{total} [{percentage:.0}%] in {elapsed human=true} ({rate:.1}/s)").unwrap();
pb.clear()?;
pb.refresh()?;
eprintln!();
Ok(())
}
examples/rich.rs (lines 16-20)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
fn main() -> Result<()> {
term::init(stderr().is_terminal());
term::hide_cursor()?;
let mut pb = RichProgress::new(
tqdm!(
total = 231231231,
unit_scale = true,
unit_divisor = 1024,
unit = "B"
),
vec![
Column::Spinner(Spinner::new(
&["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
80.0,
1.0,
)),
Column::Text("[bold blue]?".to_owned()),
Column::Animation,
Column::Percentage(1),
Column::Text("•".to_owned()),
Column::CountTotal,
Column::Text("•".to_owned()),
Column::Rate,
Column::Text("•".to_owned()),
Column::RemainingTime,
],
);
pb.write("download will begin in 5 seconds".colorize("bold red"))?;
while pb.pb.elapsed_time() <= 5.0 {
pb.refresh()?;
}
pb.replace(1, Column::Text("[bold blue]docker.exe".to_owned()));
pb.write("downloading docker.exe".colorize("bold cyan"))?;
let total_size = 231231231;
let mut downloaded = 0;
while downloaded < total_size {
let new = std::cmp::min(downloaded + 223211, total_size);
downloaded = new;
pb.update_to(new)?;
std::thread::sleep(std::time::Duration::from_millis(12));
}
pb.write("downloaded docker.exe".colorize("bold green"))?;
eprintln!();
Ok(())
}
sourcepub fn render_frame(&self, elapsed_time: f32) -> String
pub fn render_frame(&self, elapsed_time: f32) -> String
Render a single frame.
sourcepub fn render_frames(&self, elapsed_time: f32, ncols: NonZeroI16) -> String
pub fn render_frames(&self, elapsed_time: f32, ncols: NonZeroI16) -> String
Render multiple frames upto ncols
with an pulsating animation.
Examples found in repository?
examples/showcase/spinner.rs (lines 35-38)
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
fn main() {
let spin = Spinner::new(
&[
"▁▂▃",
"▂▃▄",
"▃▄▅",
"▄▅▆",
"▅▆▇",
"▆▇█",
"▇█▇",
"█▇▆",
"▇▆▅",
"▆▅▄",
"▅▄▃",
"▄▃▂",
"▃▂▁",
],
30.0,
1.0,
);
let timer = Instant::now();
loop {
std::thread::sleep(Duration::from_secs_f32(0.02));
Writer::Stderr
.print_at(
0,
spin.render_frames(
timer.elapsed().as_secs_f32(),
NonZeroI16::new((term::width().unwrap_or(30) / 3) as i16).unwrap(),
)
.as_bytes(),
)
.unwrap();
}
}
Trait Implementations§
Auto Trait Implementations§
impl RefUnwindSafe for Spinner
impl Send for Spinner
impl Sync for Spinner
impl Unpin for Spinner
impl UnwindSafe for Spinner
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more