#reader #byte #tap #read #buffer #own #copies

tap-reader

Wraps an existing reader and copies the read bytes into it's own buffer

2 stable releases

Uses old Rust 2015

1.0.1 Sep 9, 2018

#2632 in Encoding

Download history 26/week @ 2024-11-16 51/week @ 2024-11-23 59/week @ 2024-11-30 113/week @ 2024-12-07 145/week @ 2024-12-14 31/week @ 2024-12-21 15/week @ 2024-12-28 81/week @ 2025-01-04 153/week @ 2025-01-11 110/week @ 2025-01-18 60/week @ 2025-01-25 226/week @ 2025-02-01 164/week @ 2025-02-08 93/week @ 2025-02-15 118/week @ 2025-02-22 64/week @ 2025-03-01

529 downloads per month
Used in 3 crates (2 directly)

GPL-3.0 license

15KB
79 lines

tap-reader

Wraps an existing reader and copies the read bytes into it's own buffer

Installation

Add the following line to your Cargo.toml:

[dependencies]
tap-reader = "1"

Usage

To use, add the following lines to your crate root (src/lib.rs, src/main.rs, etc.)

extern crate tap_reader;

use tap_reader::Tap;

Example

extern crate tap_reader;
extern crate serde_json;
extern crate serde;
#[macro_use] extern crate serde_derive;

use std::error::Error;
use std::io::Cursor;
use tap_reader::Tap;

#[derive(Debug, Deserialize, PartialEq)]
struct Foo {
    foo: String,
    bar: usize,
}

fn main() -> Result<(), Box<Error>> {
    let input = r#"{"foo":"hello, world!","bar":42}"#;
    let bytes = input.as_bytes();
    let reader = Cursor::new(bytes);
    let mut reader = Tap::new(reader);
    
    let foo: Foo = match serde_json::from_reader(&mut reader) {
        Ok(foo) => foo,
        Err(e) => {
            eprintln!("Error serializing Foo from input: '{}'\n error was: {}",
                      String::from_utf8_lossy(&reader.bytes),
                      e.description());
            return Err(());
        }
    };
    
    assert_eq!(
        foo,
        Foo {
            foo: "hello, world!".to_string(),
            bar: 42
        }
    );
    assert_eq!(reader.bytes, bytes);
    Ok(())
}

No runtime deps