Expand description

§Variable Len Reader

Crate GitHub last commit GitHub issues GitHub pull requests GitHub

Read this in other languages: English, 简体中文.

§Description

A Rust crate to read variable length data based on varint format.

§Usage

Add this to your Cargo.toml:

[dependencies]
variable-len-reader = "2"

§Example

Directly use in tcp stream:

use std::net::{TcpListener, TcpStream};
use variable_len_reader::{VariableReader, VariableWriter};

fn main() {
    let addr = "localhost:25564";
    let server = TcpListener::bind(addr).unwrap();
    let mut client = TcpStream::connect(addr).unwrap();
    let mut server = server.incoming().next().unwrap().unwrap();

    // Write
    client.write_string(&"Hello world!").unwrap();

    // Read
    let message = server.read_string().unwrap();
    assert_eq!("Hello world!", message);
}

Use with bytes crate:

use bytes::{Buf, BufMut, BytesMut};
use variable_len_reader::{VariableReader, VariableWriter};

fn main() {
    let message = "Hello world!";
    let mut writer = BytesMut::new().writer();

    // Write
    writer.write_string(message).unwrap();

    let bytes = writer.into_inner();
    assert_eq!(message.len() as u8, bytes[0]);
    assert_eq!(message.as_bytes(), &bytes[1..]);
    let mut reader = bytes.reader();

    // Read
    let string = reader.read_string().unwrap();
    assert_eq!(message, string);
}

Async mode with tokio crate: (Require ‘async_default’ feature)

use tokio::net::{TcpListener, TcpStream};
use variable_len_reader::{AsyncVariableReader, AsyncVariableWriter};

#[tokio::main]
async fn main() {
    let addr = "localhost:25564";
    let server = TcpListener::bind(addr).await.unwrap();
    let mut client = TcpStream::connect(addr).await.unwrap();
    let (mut server, _) = server.accept().await.unwrap();

    // Write
    client.write_string(&"Hello tokio!").await.unwrap();

    // Read
    let message = server.read_string().await.unwrap();
    assert_eq!("Hello tokio!", message);
}

Modules§

Macros§

Structs§

Traits§