#async-io #tokio #peek #async #network-programming #future

peekable

Peekable reader and async reader, which enhance your network programming experience

4 releases

0.3.0 Feb 21, 2025
0.2.4 Dec 20, 2024
0.2.3 Mar 21, 2024
0.2.1 Feb 9, 2024
0.1.0 Jan 24, 2024

#1 in #network-programming

Download history 7/week @ 2024-11-27 15/week @ 2024-12-04 21/week @ 2024-12-11 1148/week @ 2024-12-18 1027/week @ 2024-12-25 204/week @ 2025-01-01 308/week @ 2025-01-08 384/week @ 2025-01-15 485/week @ 2025-01-22 726/week @ 2025-01-29 740/week @ 2025-02-05 651/week @ 2025-02-12 1798/week @ 2025-02-19 2155/week @ 2025-02-26 1230/week @ 2025-03-05 782/week @ 2025-03-12

6,065 downloads per month
Used in 10 crates (4 directly)

MIT/Apache

98KB
1.5K SLoC

Peekable

Peekable reader and async reader, which enhance your network programming experience.

github LoC Build codecov

docs.rs crates.io crates.io license

English | 简体中文

Installation

  • Std

    [dependencies]
    peekable = "0.3"
    
  • Tokio I/O

    [dependencies]
    peekable = { version = "0.3", features = ["tokio"] }
    
  • Futures I/O

    [dependencies]
    peekable = { version = "0.3", features = ["future"] }
    

Examples

  • Std

    use std::{net::TcpStream, io::Read};
    use peekable::Peekable;
    
    let conn = TcpStream::connect("127.0.0.1:8080").unwrap();
    let mut peekable = Peekable::from(conn);
    
    let mut peeked = [0; 16];
    peekable.peek_exact(&mut peeked).unwrap();
    
    let mut readed = [0; 16];
    peekable.read_exact(&mut readed).unwrap();
    
    assert_eq!(peeked, readed);
    
  • Tokio I/O

    use tokio::{net::TcpStream, io::AsyncReadExt};
    use peekable::tokio::AsyncPeekable;
    
    let conn = TcpStream::connect("127.0.0.1:8080").await.unwrap();
    let mut peekable = AsyncPeekable::from(conn);
    
    let mut peeked = [0; 16];
    peekable.peek_exact(&mut peeked).await.unwrap();
    
    let mut readed = [0; 16];
    peekable.read_exact(&mut readed).await.unwrap();
    
    assert_eq!(peeked, readed);
    
  • Futures I/O

    use async_std::net::TcpStream;
    use futures::AsyncReadExt;
    use peekable::future::AsyncPeekable;
    
    let conn = TcpStream::connect("127.0.0.1:8080").await.unwrap();
    let mut peekable = AsyncPeekable::from(conn);
    
    let mut peeked = [0; 16];
    peekable.peek_exact(&mut peeked).await.unwrap();
    
    let mut readed = [0; 16];
    peekable.read_exact(&mut readed).await.unwrap();
    
    assert_eq!(peeked, readed);
    

License

peekable is under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE, LICENSE-MIT for details.

Copyright (c) 2024 Al Liu.

Dependencies

~0–6MB
~25K SLoC