# Requestty ![RustCI](https://github.com/Lutetium-Vanadium/requestty/workflows/Default/badge.svg) ![RustCI](https://github.com/Lutetium-Vanadium/requestty/workflows/Crossterm/badge.svg) ![RustCI](https://github.com/Lutetium-Vanadium/requestty/workflows/Termion/badge.svg) [![Crates.io](https://img.shields.io/crates/v/requestty.svg)](https://crates.io/crates/requestty) [![License](https://img.shields.io/crates/l/requestty.svg)](./LICENSE) [![Documentation](https://docs.rs/requestty/badge.svg)](https://docs.rs/requestty) `requestty` (request-tty) is an easy-to-use collection of interactive cli prompts inspired by [Inquirer.js](https://github.com/SBoudrias/Inquirer.js). - Easy-to-use - The builder API and macros allow you to easily configure and use the in-built prompts. - Extensible - Easily create and use custom prompts with a companion ui rendering library. - Flexible - All prompts can be used standalone or chained together. - Dynamic - You can dynamically decide what questions should be asked based on previous questions. - Validation - You can validate user input with any prompt. - Examples - Every prompt is accompanied with an example as well as other [examples](./examples) for more complex workflows ## Usage Add this to your `Cargo.toml` ```toml [dependencies] requestty = "0.4.1" ``` To ask a question: ```rust let question = requestty::Question::expand("overwrite") .message("Conflict on `file.rs`") .choices(vec![ ('y', "Overwrite"), ('a', "Overwrite this one and all next"), ('d', "Show diff"), ]) .default_separator() .choice('x', "Abort") .build(); println!("{:#?}", requestty::prompt_one(question)); ``` More examples are available in the [documentation](https://docs.rs/requestty) and the [examples](https://github.com/Lutetium-Vanadium/requestty/tree/master/examples) directory. ## In-built prompts There are 11 in-built prompts: - ### Input Prompt that takes user input and returns a `String`. - ### Password Prompt that takes user input and hides it.
- ### Editor Prompt that takes launches the users preferred editor on a temporary file - ### Confirm Prompt that returns `true` or `false`. - ### Int Prompt that takes a `i64` as input. - ### Float Prompt that takes a `f64` as input. - ### Expand Prompt that allows the user to select from a list of options by key - ### Select Prompt that allows the user to select from a list of options - ### RawSelect Prompt that allows the user to select from a list of options with indices - ### MultiSelect Prompt that allows the user to select multiple items from a list of options - ### OrderSelect Prompt that allows the user to organize a list of options. ## Optional features - `macros`: Enabling this feature will allow you to use the `questions` and `prompt_module` macros. - `smallvec` (default): Enabling this feature will use [`SmallVec`](https://docs.rs/smallvec/latest/smallvec/struct.SmallVec.html) instead of `Vec` for auto completions. This allows inlining single completions. - `crossterm` (default): Enabling this feature will use the [`crossterm`](https://crates.io/crates/crossterm) library for terminal interactions such as drawing and receiving events. - `termion`: Enabling this feature will use the [`termion`](https://crates.io/crates/termion) library for terminal interactions such as drawing and receiving events. ## Minimum Supported Rust Version (MSRV) Minimum supported rust version (as per [cargo-msrv](https://crates.io/crates/cargo-msrv)) is `1.56.1`