#文件 #二进制 #解析器 #brickadia

bin+lib brs

读取和写入Brickadia存档文件

2个不稳定版本

0.2.0 2020年5月8日
0.1.0 2019年4月19日
0.0.0 2019年4月14日

#1992编码

MIT许可证

42KB
933

brs on crates.io brs on docs.rs

读取和写入Brickadia存档文件的接口。

旨在能够像游戏一样读取所有以前的版本,但只能写入最新版本的格式。

用法

读取

首先,从任何Read源创建一个读取器,例如文件或缓冲区。

let reader = brs::Reader::new(File::open("village.brs")?)?;

Brickadia存档文件的信息被分成几个部分,按照顺序排列,这样可以在不解析整个文件的情况下提取简单信息。

这个库通过在类型级别严格强制执行读取和提供数据的方式来实现这一点;你不会出错。

继续,读取第一个标题可以获得基本信息。有关可用的详细信息,请参阅HasHeader1

use brs::HasHeader1;
let reader = reader.read_header1();
println!("Brick count: {}", reader.brick_count());
println!("Map: {}", reader.map());

下一个标题包含不太可能对简单探索相关的数据,而是如加载砖块表之类的数据。请参阅HasHeader2

use brs::HasHeader2;
let reader = reader.read_header2();
println!("Mods: {:?}", reader.mods());
println!("Color count: {}", reader.colors().len());
// Properties from header 1 are still available:
println!("Description: {}", reader.description();

读取了这两个标题后,你现在可以遍历砖块。请参阅Brick

for brick in reader.iter_bricks()? {
    let brick = brick?;
    println!("{:?}", brick);
}

在获取迭代器的同时,您可以保留对标题信息的访问权

let (rdr, bricks) = reader.iter_bricks_and_reader()?;

写入

目前写入存档文件并不复杂,您只需将所有数据放入WriteData结构中,并将其与Write目标一起传递给write_save

let data = brs::WriteData {
    map: String::from("Plate"),
    description: String::from("A quaint park full of ducks and turkeys."),
    // ...
};
brs::write_save(&mut File::create("park.brs")?, &data)?;

依赖关系

~4MB
~75K SLoC