crates/forge_select/README.md
A centralized crate for user interaction prompts using dialoguer.
This crate provides a unified interface for terminal user interactions across the forge codebase. It encapsulates all direct dependencies on dialoguer, ensuring no other crates need to depend on it directly.
use forge_select::ForgeSelect;
let options = vec!["Option 1", "Option 2", "Option 3"];
let selected = ForgeSelect::select("Choose an option:", options)
.with_starting_cursor(1)
.prompt()?;
use forge_select::ForgeSelect;
let confirmed = ForgeSelect::confirm("Are you sure?")
.with_default(true)
.prompt()?;
use forge_select::ForgeSelect;
let name = ForgeSelect::input("Enter your name:")
.allow_empty(false)
.with_default("John")
.prompt()?;
use forge_select::ForgeSelect;
let options = vec!["Red", "Green", "Blue"];
let selected = ForgeSelect::multi_select("Choose colors:", options)
.prompt()?;
All prompt types use a builder pattern for configuration:
ForgeSelect::select(), ForgeSelect::confirm(), etc..with_*() methods.prompt()Two variants for select operations:
select(): Requires Clone for options, useful when you need the list after selectionselect_owned(): Takes ownership, no Clone required, more efficientAll prompts use a consistent ColorfulTheme from dialoguer, providing a unified look across the application.
This crate is used by:
forge_main: For CLI user interactionsforge_infra: For implementing the UserInfra traitNo other crates should depend on dialoguer directly - use this crate instead.