#byte-buffer #byte #io #buffer #endian #utility

bytey

Bytey提供方便且易于使用的字节存储。

5个版本 (3个破坏性版本)

0.3.0 2022年4月2日
0.2.0 2022年2月8日
0.1.1 2022年1月28日
0.1.0 2022年1月28日
0.0.0 2021年12月28日

#2264编码

每月25次下载

MIT许可证

43KB
527 代码行

Bytey

Bytey提供方便且易于使用的字节存储。

文档

文档链接可在此处找到。

安装

要开始使用此crate,您只需将其添加到您的Cargo.toml

[dependencies]
bytey = "0.3.0"

用法

use bytey::ByteBuffer;

fn main() {
    let mut buffer = ByteBuffer::new().unwrap();

    let value1: u16 = 1234;
    let value2: i32 = -2000;
    let value3: usize = usize::MAX;

    // Initially the buffer will have a size of 8 bytes, unless you create the buffer using the with_capacity method
    // The buffer will resize itself to fit all data inside of it
    buffer.write(&value1);
    buffer.write(&value2);
    buffer.write(&value3);

    // When you write a value to the buffer, the cursor will move along
    // So if we want to read the values we just put in, we have to move it back to 0
    buffer.move_cursor(0);

    // Read and print the values stored inside the buffer
    println!("{}", buffer.read::<u16>().unwrap()); // prints "1234"
    println!("{}", buffer.read::<i32>().unwrap()); // prints "-2000"
    println!("{}", buffer.read::<usize>().unwrap()); // prints what the MAX is for usize on the system
}

写入ByteBuffer的任何值都必须实现ByteBufferWrite特质。默认情况下,此特质在所有数值原语(u8, u16, i8, i16等...)上实现。

从ByteBuffer中读取类型需要该类型实现ByteBufferRead特质,此特质也已在所有数值原语上默认实现。

如果您想看到更多这些特质的默认实现,请通过GitHub上的问题告诉我!

Bytey包含两个与特质同名的derive宏ByteBufferWriteByteBufferRead,您可以在自己的结构和枚举中使用它们。

use bytey::{ByteBuffer, ByteBufferRead, ByteBufferWrite};

fn main() {
    #[derive(ByteBufferRead, ByteBufferWrite, Debug, PartialEq)]
    struct Test {
      a: u8,
      b: u16,
      c: isize,
    }

    let mut buffer = ByteBuffer::new().unwrap();
    let val = Test { a: 1, b: 2, c: 3 };

    buffer.write(&val);
    buffer.move_cursor(0);

    assert_eq!(val, buffer.read::<Test>().unwrap());
}

请注意,结构或枚举内的所有字段都必须实现该特质,否则您将得到错误。

变更日志

  • 0.3.0

    • 添加了ByteBufferWrite和ByteBufferRead特质的derive宏
  • 0.2.0

    • 添加了功能门控的Bincode支持
    • ByteBuffer添加了Clone特质
    • ByteBuffer添加了truncate方法

贡献

请自由贡献,发送pull请求。对于重大更改或如果您有任何可以改进Bytey的想法,请打开问题!

请确保您在贡献时适当更新测试。

许可证

MIT

依赖关系

~1.5MB
~36K SLoC