跳到主要内容

错误类型参考

vpt-rs 使用单个 Error 枚举处理所有失败模式。便捷别名 Result<T> 包装 std::result::Result<T, Error>。枚举派生 thiserror::Error,因此每个变体自动实现 Display 和 std::error::Error。

use vpt_rs::{Error, Result};

Error 枚举​

UnsupportedOperation​

后端未实现请求的操作。

字段类型描述
operation&'static str失败操作的名称
backend&'static str不支持它的后端

MissingCapability​

后端存在但缺少特定能力。

字段类型描述
capability&'static str缺失的能力名称
backend&'static str缺少它的后端

InvalidVolume​

卷引用为空或格式错误。

字段类型描述
volumeString有问题的卷标识符

MissingPath​

预期的文件系统路径不存在。

字段类型描述
pathPathBuf缺失的文件系统路径

Io​

包装标准 I/O 错误。提供了 From<std::io::Error> 实现,因此 ? 操作符自动转换。

提示

因为 Error 实现了 From<std::io::Error>,你可以在返回 Result<T> 的函数中对任何 std::io 操作使用 ?。

InvalidArgument​

函数参数在语义上无效。

字段类型描述
messageString问题的人类可读解释

CommandFailed​

外部命令以非零状态退出。当后端调用 btrfs、zfs 或 dd 等工具时最常见的错误。

字段类型描述
commandString执行的命令
statusi32退出码
stderrString捕获的标准错误输出

Timeout​

外部命令超过配置的超时时间(默认 30 秒,通过 VPT_COMMAND_TIMEOUT_SECS 配置)。

字段类型描述
operation&'static str超时的操作
backend&'static str运行它的后端
timeout_secsu64超时值(秒)

Message​

不适合其他类别的错误的通用变体。

访问器​

timeout_secs()​

如果错误是 Timeout 变体返回 Some(u64),否则返回 None。

use vpt_rs::Error;

let err = Error::Timeout {
operation: "restore_volume", backend: "linux-lvm", timeout_secs: 60,
};
assert_eq!(err.timeout_secs(), Some(60));

错误处理模式​

使用 ? 操作符​

use std::fs;
use vpt_rs::{VolumeRef, Result};

fn read_and_snapshot(path: &str) -> Result<()> {
let _contents = fs::read_to_string(path)?; // io::Error -> Error::Io
Ok(())
}

使用上下文映射错误​

use vpt_rs::{Error, Result};

fn load_config(path: &str) -> Result<String> {
std::fs::read_to_string(path).map_err(|e| {
Error::Message {
message: format!("failed to load config from `{path}`: {e}"),
}
})
}
警告

不要在 Display 输出字符串上进行模式匹配。字符串格式不是公共 API 的一部分,可能会改变。始终在枚举变体上匹配。