Skip to main content

standout_input/
lib.rs

1//! Declarative input collection for CLI applications.
2//!
3//! Sources implement [`InputCollector`] and compose into an [`InputChain`]
4//! that tries each in order until one resolves. [`InputSources`] is the
5//! explicit stdin/clipboard/prompt-responder for one invocation — production
6//! constructs it from the real process, tests put mocks in the same type;
7//! there is no process-global default-reader override.
8//!
9//! Feature flags: `editor` (default) enables [`EditorCollector`];
10//! `simple-prompts` (default) enables basic terminal prompts; `inquire`
11//! enables rich TUI prompts.
12//!
13//! The [`questionnaire`] module renders an application-defined questionnaire
14//! as an editable prose answer sheet, collects answers from prompts, a file,
15//! or stdin, and decodes every submission through one validation pipeline
16//! keyed by stable identity. See its module doc for the format and
17//! compatibility contract.
18
19mod chain;
20mod collector;
21pub mod env;
22mod error;
23mod input_sources;
24mod inputs;
25pub mod questionnaire;
26mod responder;
27pub mod sources;
28
29pub use chain::InputChain;
30pub use collector::{InputCollector, InputSourceKind, ResolvedInput};
31pub use error::InputError;
32pub use input_sources::InputSources;
33pub use inputs::{Inputs, MissingInput};
34pub use responder::{
35    PromptContext, PromptKind, PromptResponder, PromptResponse, ScriptedResponder,
36};
37
38pub use sources::{
39    read_if_piped, read_if_piped_from, ArgSource, ClipboardSource, DefaultSource, EnvSource,
40    FlagSource, StdinSource,
41};
42
43#[cfg(feature = "editor")]
44pub use sources::{EditorRunner, EditorSource, MockEditorResult, MockEditorRunner};
45
46#[cfg(feature = "simple-prompts")]
47pub use sources::{ConfirmPromptSource, MockTerminal, TerminalIO, TextPromptSource};
48
49#[cfg(feature = "inquire")]
50pub use sources::{
51    InquireConfirm, InquireEditor, InquireMultiSelect, InquirePassword, InquireSelect, InquireText,
52};
53
54pub use env::{MockClipboard, MockEnv, MockStdin};
55
56pub use env::{RealClipboard, RealStdin};