有一些读取二进制文件的代码,在尝试读取未知文件时必须抛出异常,或者只是因为错误而崩溃,因为。我仍然不太了解该语言的语法,请告诉我如何做到这一点:
impl Header {
fn read(file: &mut std::fs::File) -> Header {
file.rewind();
let sig: String;
let ver: u32;
let web: String;
let min: String;
let mut file_reader = BufReader::new(file);
let mut buffer = Vec::new();
file_reader.read_until(0u8, &mut buffer);
let good = {
let valid = String::from("UnityFS");
let res = valid == String::from_utf8(buffer).unwrap();
if res {
sig = valid;
}
res
};
// Нужно здесь выбросить ошибку
assert_eq!(good, false, "Unknown file type.");
...
Header {
signature: sig,
version: ver,
web_version: web,
min_version: min
}
}
}
Rust 中错误处理的一种常见方法是使用默认的Result类型:
有很好的API指南来确定错误数据类型。如果这种情况下的错误要在内部处理,您可以使用anyhow
Error
提供的简单类型。如果它是一个库或大型应用程序,则值得更详细且符合人体工程学地定义类型,例如使用来自thiserror的派生宏:值得注意的是,此结构不包含任何描述错误的行:它们是在过程宏生成的实现中动态生成的
Display
。此定义还将允许您方便地处理示例中可能出现但在原始代码中被忽略或恐慌的所有其他错误情况。宏生成的转换
From
允许您使用运算符?
: