4个版本 (2个破坏性更新)
0.3.1 | 2023年12月15日 |
---|---|
0.3.0 | 2022年2月5日 |
0.2.0 | 2022年1月10日 |
0.1.0 | 2022年1月3日 |
在算法中排名925
每月下载39次
在dotnetdll中使用
15KB
208 行
scroll-buffer
为使用Scroll提供的附加Pwrite
缓冲区。
文档
文档可在docs.rs找到。
概述
由于Scroll的写入特性对其目标缓冲区是通用的,如果你觉得默认的可变字节切片太受限,你可以使用这个crate中的类型来获得更强大的功能,如动态分配。
目前,这个crate只定义了一个这样的缓冲区:当写入类型时,会按需增长的DynamicBuffer
类型。
使用方法
添加到你的Cargo.toml
[dependencies]
scroll-buffer = "0.3.0"
你现在可以更改你的TryIntoCtx
实现并开始编写!
use scroll::{LE, Pwrite, ctx::TryIntoCtx};
use scroll_buffer::DynamicBuffer;
fn main() -> Result<(), scroll::Error> {
let mut buf = DynamicBuffer::new();
// works with regular ints, of course...
buf.pwrite_with(0xbeefu16, 0, LE)?;
assert_eq!(buf.get(), [0xef, 0xbe]);
// ...but also custom types!
struct MyCoolStruct(bool, u32);
impl TryIntoCtx<(), DynamicBuffer> for MyCoolStruct {
type Error = scroll::Error;
fn try_into_ctx(self, buf: &mut DynamicBuffer, _: ()) -> Result<usize, Self::Error> {
let offset = &mut 0;
if self.0 {
buf.gwrite_with(0xffu8, offset, LE)?;
} else {
buf.gwrite_with(self.1, offset, LE)?;
}
Ok(*offset)
}
}
buf.clear();
buf.pwrite(MyCoolStruct(false, 1), 0)?;
assert_eq!(buf.get(), [0x01, 0x00, 0x00, 0x00]);
buf.pwrite(MyCoolStruct(true, 0), 4)?;
assert_eq!(buf.get(), [0x01, 0x00, 0x00, 0x00, 0xff]);
Ok(())
}
依赖
~95KB