Crate asking[][src]

Expand description

Build async prompts for non-blocking user input!

Asynchronous I/O allows the (usually slow) I/O operations run concurrently with the rest of your (highlt efficient) code.

Features

  • Asynchronous - You can work while the user inputs something and even timeout!
  • Common patterns - Built-in common question patterns including
    • yn - yes/no questions.
    • date - dates in %Y-%m-%d format.
    • select - choose one option.
    • text - just a String.
    • T - your own type! (implementing or not the trait FromStr).
  • Cross-platform - Generic on reader and writer!
  • Help messages - Help the user to input a correct answer.
  • Test with feedback - Test the input and, optionally, give feedback upon errors.
  • Default values - Add a value for empty inputs.
  • Standardized error handling - You can manage errors!
  • Feedback - Display a final message depending on the accepted value.

Quick example

Give only five seconds to the user to confirm something, and continue upon no input! (instead of keep waiting)

use asking::error::Processing;
use std::time::Duration;

let question = asking::yn()
    .message("Shall I continue? (you have 5 seconds to answer)")
    .default_value(true) // value upon empty input
    .timeout(Duration::from_secs(5_u64))
    .ask();

match async_std::task::block_on(question) { // we decide to just wait, at most five secs
    Ok(true) => println!("Super!"),
    Ok(false) => println!("Okay, shutting down..."),
    Err(Processing::Timeout { .. }) => println!("I think you are not here, I will continue :)"), // Automatic decision!,
    _ => eprintln!("Error with questionnaire, try again later"),
}

Check out more examples!

Modules

Errors while asking a question.

Structs

Async I/O handler (in builder form).

Functions

Date question.

Question for types implementing FromStr trait.

Test if the value is inside an iterator

Test if the value is inside an iterator

Text question.

Yes/No questions.

Type Definitions

Question in the standard input/output of the current process.