Skip to main content

Crate standout_input

Crate standout_input 

Source
Expand description

Declarative input collection for CLI applications.

standout-input provides a unified way to acquire user input from multiple sources—CLI arguments, stdin, environment variables, editors, and interactive prompts—with automatic fallback chains.

§Quick Start

use standout_input::{InputChain, ArgSource, StdinSource, DefaultSource};

// Try argument first, then piped stdin, then default
let message = InputChain::<String>::new()
    .try_source(ArgSource::new("message"))
    .try_source(StdinSource::new())
    .default("default message".to_string())
    .resolve(&matches)?;

§Features

  • editor (default) - Enable [EditorCollector] for editor-based input
  • simple-prompts (default) - Enable basic terminal prompts
  • inquire - Enable rich TUI prompts via the inquire crate

§Architecture

The crate is built around the InputCollector trait, which all input sources implement. Sources are composed into InputChains that try each source in order until one provides input.

InputChain
├── ArgSource      → None (not provided)
├── StdinSource    → None (not piped)
├── EditorSource   → Some("user input") ← returns this
└── DefaultSource  → (not reached)

§Testing

All sources accept mock implementations for testing:

use standout_input::{StdinSource, env::MockStdin};

// Test with simulated piped input
let source = StdinSource::with_reader(MockStdin::piped("test input"));

Re-exports§

pub use sources::read_if_piped;
pub use sources::ArgSource;
pub use sources::ClipboardSource;
pub use sources::DefaultSource;
pub use sources::EnvSource;
pub use sources::FlagSource;
pub use sources::StdinSource;
pub use sources::EditorRunner;
pub use sources::EditorSource;
pub use sources::MockEditorResult;
pub use sources::MockEditorRunner;
pub use sources::ConfirmPromptSource;
pub use sources::MockTerminal;
pub use sources::TerminalIO;
pub use sources::TextPromptSource;
pub use env::MockClipboard;
pub use env::MockEnv;
pub use env::MockStdin;
pub use env::reset_default_clipboard_reader;
pub use env::reset_default_stdin_reader;
pub use env::set_default_clipboard_reader;
pub use env::set_default_stdin_reader;
pub use env::DefaultClipboard;
pub use env::DefaultStdin;

Modules§

env
Environment abstractions for testability.
sources
Input source implementations.

Structs§

InputChain
Chain multiple input sources with fallback behavior.
Inputs
Name-keyed storage for resolved inputs.
PromptContext
Context the source passes to a PromptResponder.
ResolvedInput
Information about how input was resolved.
ScriptedResponder
A position-based scripted responder.

Enums§

InputError
Errors that can occur during input collection.
InputSourceKind
The kind of source that provided input.
MissingInput
Error returned when a named input is missing or stored under a different type.
PromptKind
The kind of prompt being responded to.
PromptResponse
A response a PromptResponder can return.

Traits§

InputCollector
A source that can collect input of type T.
PromptResponder
Test seam for the .prompt() shortcut on interactive sources.

Functions§

reset_default_prompt_responder
Clears the override installed by set_default_prompt_responder.
set_default_prompt_responder
Installs a process-global PromptResponder that every .prompt() call on an interactive source will route through until reset_default_prompt_responder is called.