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;

Modules§

env
Environment abstractions for testability.
sources
Input source implementations.

Structs§

InputChain
Chain multiple input sources with fallback behavior.
ResolvedInput
Information about how input was resolved.

Enums§

InputError
Errors that can occur during input collection.
InputSourceKind
The kind of source that provided input.

Traits§

InputCollector
A source that can collect input of type T.