8 releases

0.3.1 Jun 8, 2022
0.3.0 Feb 6, 2020
0.2.0 Dec 14, 2019
0.1.5 Jul 29, 2018
0.1.4 May 31, 2018

#154 in Command-line interface

Download history 14038/week @ 2024-11-16 16399/week @ 2024-11-23 14263/week @ 2024-11-30 12973/week @ 2024-12-07 11857/week @ 2024-12-14 6731/week @ 2024-12-21 7910/week @ 2024-12-28 13469/week @ 2025-01-04 14849/week @ 2025-01-11 13869/week @ 2025-01-18 17293/week @ 2025-01-25 15864/week @ 2025-02-01 14870/week @ 2025-02-08 16804/week @ 2025-02-15 17599/week @ 2025-02-22 13475/week @ 2025-03-01

65,072 downloads per month
Used in 37 crates (30 directly)

MIT license

19KB
281 lines

promptly

A simple, opinionated prompting library

Features include:

  • Re-prompt until valid
  • Prompts for several types, and extensible
  • Sane handling of escapes via rustyline
  • Path completion when prompting for paths
  • Dead simple to use. Perhaps too simple.

Usage

Simply call prompt or prompt_default to prompt for any Promptable type:

  • prompt(msg) - prompt until input can be parsed as the inferred return type. Re-prompts if input is empty.
  • prompt_opt(msg) - prompt until input can be parsed as the inferred return type. Returns None if input is empty.
  • prompt_default(msg, default) - prompt until input can be parsed as the inferred return type. Uses default value if input is empty.
use promptly::{prompt, prompt_default, prompt_opt};

// Prompt until a non-empty string is provided
let name: String = prompt("Enter your name")?;

// Prompt for other `FromStr` types
let age: u32 = prompt("Enter your age")?;

// Prompt for optional paths with path completion. Returns `None` if empty input.
let photo: Option<PathBuf> = prompt_opt("Enter a path to a profile picture")?;

// Prompt Y/n with a default value when input is empty
let fallback = prompt_default("Would you like to receive marketing emails", true);

// Prompt for a url using the url crate (requires either 'nightly' or 'url' feature)
let website: Url = prompt("Enter a website URL");

More...

The API surface of this crate is opinionated and experimental, but open to fresh ideas.

Dependencies

~6–15MB
~219K SLoC