Crate simple_stream

Source
Expand description

simple-stream is a buffered stream wrapper over anything that implements std::io::Read and std::io::Write. It works by buffering all reads and checking the buffers against a FrameBuilder, which will inform the stream that a complete Frame has been received, and removes it out of the buffer.

The crate comes with a few types of Framing options, and provides both a plain text and encrypted stream via rust-openssl.

§Example Usage

extern crate simple_stream as ss;

use std::net::TcpStream;

use ss::frame::{SimpleFrame, SimpleFrameBuilder};
use ss::{Plain, NonBlocking};


fn main() {
    // Create some non-blocking type that implements Read + Write
    let stream = TcpStream::connect("rust-lang.org:80").unwrap();
    stream.set_nonblocking(true).unwrap();

    // Create a Plain Text stream that sends and receives messages in the
    // `SimpleFrame` format.
    let mut plain_stream = Plain::<TcpStream, SimpleFrameBuilder>::new(stream);

    // Perform a non-blocking write
    let buf = vec!(1, 2, 3, 4);
    let frame = SimpleFrame::new(&buf[..]);
    match plain_stream.nb_send(&frame) {
        Ok(_) => { }
        Err(e) => println!("Error during write: {}", e)
    };

    // Perform a non-blocking read
    match plain_stream.nb_recv() {
        Ok(frames) => {
            for _ in frames {
                // Do stuff with received frames
            }
        }
        Err(e) => println!("Error during read: {}", e)
    };
}

Modules§

frame
The simple_stream::fame module contains Trait definitions and built-in types for coupling with a stream type to provide a structred way to send and receive message through streams.

Structs§

Plain
Plain text stream.
Secure
OpenSSL backed stream.

Traits§

Blocking
The Blocking trait provides method definitions for use with blocking streams.
NonBlocking
The NonBlocking trait provides method definitions for use with non-blocking streams.