Expand description
ยงstreamweave-stdio
Standard I/O integration for StreamWeave
Read from stdin and write to stdout/stderr with StreamWeave pipelines.
The streamweave-stdio package provides producers and consumers for integrating StreamWeave with POSIX standard streams (stdin, stdout, stderr). It enables building command-line tools and interactive pipelines that process data from standard input and output results to standard output or error streams.
ยงโจ Key Features
- StdinProducer: Read lines from standard input
- StdoutConsumer: Write items to standard output
- StderrConsumer: Write items to standard error
- Line-by-Line Processing: Process input line by line
- Interactive Pipelines: Build interactive command-line tools
ยง๐ฆ Installation
Add this to your Cargo.toml:
[dependencies]
streamweave-stdio = "0.3.0"ยง๐ Quick Start
ยงBasic Pipeline
use streamweave_stdio::{StdinProducer, StdoutConsumer};
use streamweave_pipeline::PipelineBuilder;
let pipeline = PipelineBuilder::new()
.producer(StdinProducer::new())
.transformer(/* your transformer */)
.consumer(StdoutConsumer::new());
pipeline.run().await?;ยงReading from Stdin
use streamweave_stdio::StdinProducer;
let producer = StdinProducer::new();
// Reads lines from stdin and produces them as String itemsยงWriting to Stdout
use streamweave_stdio::StdoutConsumer;
let consumer = StdoutConsumer::new();
// Writes items to stdoutยงWriting to Stderr
use streamweave_stdio::StderrConsumer;
let consumer = StderrConsumer::new();
// Writes items to stderr (for error output)ยง๐ API Overview
ยงStdinProducer
Reads lines from standard input:
pub struct StdinProducer {
// Internal state
}Key Methods:
new()- Create new stdin producerproduce()- Generate stream from stdin
ยงStdoutConsumer
Writes items to standard output:
pub struct StdoutConsumer {
// Internal state
}Key Methods:
new()- Create new stdout consumerconsume(stream)- Write stream items to stdout
ยงStderrConsumer
Writes items to standard error:
pub struct StderrConsumer {
// Internal state
}Key Methods:
new()- Create new stderr consumerconsume(stream)- Write stream items to stderr
ยง๐ Usage Examples
ยงSimple Echo Pipeline
Echo input to output:
use streamweave_stdio::{StdinProducer, StdoutConsumer};
use streamweave_pipeline::PipelineBuilder;
let pipeline = PipelineBuilder::new()
.producer(StdinProducer::new())
.consumer(StdoutConsumer::new());
pipeline.run().await?;ยงTransform and Output
Transform input before outputting:
use streamweave_stdio::{StdinProducer, StdoutConsumer};
use streamweave_pipeline::PipelineBuilder;
use streamweave_transformers::MapTransformer;
let pipeline = PipelineBuilder::new()
.producer(StdinProducer::new())
.transformer(MapTransformer::new(|line: String| {
line.to_uppercase()
}))
.consumer(StdoutConsumer::new());
pipeline.run().await?;ยงError Output
Write errors to stderr:
use streamweave_stdio::{StdinProducer, StderrConsumer};
use streamweave_pipeline::PipelineBuilder;
let pipeline = PipelineBuilder::new()
.producer(StdinProducer::new())
.transformer(/* filter errors */)
.consumer(StderrConsumer::new());
pipeline.run().await?;ยงInteractive Processing
Process input interactively:
use streamweave_stdio::{StdinProducer, StdoutConsumer};
use streamweave_pipeline::PipelineBuilder;
// Process input as it arrives
let pipeline = PipelineBuilder::new()
.producer(StdinProducer::new())
.transformer(/* process each line */)
.consumer(StdoutConsumer::new());
// Run interactively
pipeline.run().await?;ยง๐๏ธ Architecture
Standard I/O integration:
โโโโโโโโโโโโ
โ stdin โโโโ> StdinProducer โโโ> Stream โโโ> Transformer โโโ> Stream โโโ> StdoutConsumer โโโ> stdout
โโโโโโโโโโโโ โโโโโโโโโโโโ
โโโโโโโโโโโโ
โ stderr โ
โโโโโโโโโโโโI/O Flow:
- StdinProducer reads lines from stdin
- Lines flow through transformers
- StdoutConsumer writes to stdout
- StderrConsumer writes to stderr (for errors)
ยง๐ง Configuration
ยงProducer Configuration
Configure stdin producer:
let producer = StdinProducer::new()
.with_config(ProducerConfig::default()
.with_name("stdin".to_string()));ยงConsumer Configuration
Configure stdout/stderr consumers:
let consumer = StdoutConsumer::new()
.with_config(ConsumerConfig {
error_strategy: ErrorStrategy::Skip,
name: "stdout".to_string(),
});ยง๐ Error Handling
Standard I/O errors are handled through the error system:
use streamweave_error::ErrorStrategy;
let pipeline = PipelineBuilder::new()
.with_error_strategy(ErrorStrategy::Skip)
.producer(StdinProducer::new())
.consumer(StdoutConsumer::new());ยงโก Performance Considerations
- Line Buffering: Input is read line by line
- Streaming: Output is streamed, not buffered
- Interactive: Suitable for interactive use
- Memory Efficient: Processes one line at a time
ยง๐ Examples
For more examples, see:
ยง๐ Dependencies
streamweave-stdio depends on:
streamweave- Core traitsstreamweave-error- Error handlingstreamweave-message(optional) - Message envelope supporttokio- Async runtimefutures- Stream utilitiesasync-stream- Stream generation
ยง๐ฏ Use Cases
Standard I/O is used for:
- Command-Line Tools: Build CLI tools that process stdin/stdout
- Interactive Pipelines: Process data interactively
- Unix Pipelines: Integrate with Unix pipe operations
- Text Processing: Process text streams line by line
- Error Handling: Separate normal output from error output
ยง๐ Documentation
ยง๐ See Also
- streamweave - Core traits
- streamweave-file - File I/O
- streamweave-pipeline - Pipeline API
ยง๐ค Contributing
Contributions are welcome! Please see the Contributing Guide for details.
ยง๐ License
This project is licensed under the CC BY-SA 4.0 license.