Crate streamweave_stdio

Crate streamweave_stdio 

Source
Expand description

ยงstreamweave-stdio

Crates.io Documentation License: CC BY-SA 4.0

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 producer
  • produce() - Generate stream from stdin

ยงStdoutConsumer

Writes items to standard output:

pub struct StdoutConsumer {
    // Internal state
}

Key Methods:

  • new() - Create new stdout consumer
  • consume(stream) - Write stream items to stdout

ยงStderrConsumer

Writes items to standard error:

pub struct StderrConsumer {
    // Internal state
}

Key Methods:

  • new() - Create new stderr consumer
  • consume(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:

  1. StdinProducer reads lines from stdin
  2. Lines flow through transformers
  3. StdoutConsumer writes to stdout
  4. 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 traits
  • streamweave-error - Error handling
  • streamweave-message (optional) - Message envelope support
  • tokio - Async runtime
  • futures - Stream utilities
  • async-stream - Stream generation

ยง๐ŸŽฏ Use Cases

Standard I/O is used for:

  1. Command-Line Tools: Build CLI tools that process stdin/stdout
  2. Interactive Pipelines: Process data interactively
  3. Unix Pipelines: Integrate with Unix pipe operations
  4. Text Processing: Process text streams line by line
  5. Error Handling: Separate normal output from error output

ยง๐Ÿ“– Documentation

ยง๐Ÿ”— See Also

ยง๐Ÿค Contributing

Contributions are welcome! Please see the Contributing Guide for details.

ยง๐Ÿ“„ License

This project is licensed under the CC BY-SA 4.0 license.

Re-exportsยง

pub use consumers::*;
pub use producers::*;

Modulesยง

consumers
Standard output (stdout) and standard error (stderr) consumers for StreamWeave
producers
Standard input (stdin) producer for StreamWeave