[−][src]Crate spinner
This library is useful for console applications with long running processes.
You create a Spinner
and then update it however you see fit. Since this
happens asynchronously, your user will not be left in the dark about what
your app is doing.
There are two parts to Spinner, one part is the spinner itself, the other a simple interface to build menus.
Spinners
To use a Spinner simply go and create one using the SpinnerBuilder:
use spinner::SpinnerBuilder; let sp = SpinnerBuilder::new("Long Running operation, please wait...".into()).start();
Will inform the user that your app currently is doing background processing.
sp
is a SpinnerHandle
, through which you can tell the user for example how
far along the process you are, or perhaps a message in between.
use spinner::SpinnerBuilder; let sp = SpinnerBuilder::new("Long Running operation, please wait...".into()).start(); sp.message("Updating...".into()); sp.update(format!("Finished {} out of {}.", i, max));
Customizing
A spinner can be customized in three ways:
- The
step
duration, which is the 'refresh' period of the message. - The
format
, how a given string is printed, due to limitations this is done through a closure, but it also allows more special formatting than just a format string. - The
spinner
itself, which is the list of characters that change every step.
Menus
Menus are simple, type checked ways to ask the user for information.
A simple menu might look like this:
use spinner::menu::*; let m = Menu::new(vec![ MenuOption("First Name".into(), MenuType::Text, MenuOptional::Optional, None), MenuOption("Last Name".into(), MenuType::Text, MenuOptional::Required, None), MenuOption("Age".into(), MenuType::Integer, MenuOptional::Optional, Some(MenuValue::Integer(1))), MenuOption("How much Ketchup?".into(), MenuType::Float, MenuOptional::Optional, None), ]); let results = m.display();
In results will then be an array of MenuValue
, which can then be retrieved by
either get_{string,int,float}
, calling one of these on the wrong type will
panic!. So be careful to take out the correct value out of the correct menu
questions.
MenuOption
A MenuOption is a NewType. It consists of a string which will constitute the
question being presented to the user. Then a MenuType, telling the checker what
input is expected. If you need something else use MenuType::Text
and work with
that. You also have to tell whether that input is optional or not.
(true=optional, false=not optional). At last, an Option<MenuValue>
which allows
you to put in either None
, for no default value or Some<MenuValue>
which
will be used if the user inputs nothing.
Re-exports
pub use menu::Menu; |
pub use menu::MenuOption; |
Modules
menu | Module defining the menu part of this crate |
Structs
SpinnerBuilder | The struct with which to create a Spinner, check out the crate documentation for some more details |
SpinnerHandle | A handle to the Spinner Thread. |
Statics
DANCING_KIRBY | A possible string for the spinner, check out the kirby example for a possible use case. |