我正在将一个巨大的文件分解为多个模块,在分解之前一切正常,现在Snafu错误处理无法编译。
util.rs:
#[derive(Debug, Snafu)]
pub enum Error {
#[snafu(display("The start time {:#?} is invalid: {:#?}", start, source))]
StartTimeInvalid {
start: SystemTime,
source: SystemTimeError,
backtrace: Backtrace,
},
#[snafu(display("error: {}", desc))]
Any { desc: String },
}
pub trait Elapsed {
fn elapsed(&self) -> Result<u128, Error>;
}
timer.rs:
pub struct Timer {
start: SystemTime,
}
impl Timer {
pub fn new() -> Self { Self { start: SystemTime::now() } }
}
impl Elapsed for Timer {
fn elapsed(&self) -> Result<u128, Error> {
let start = self.start;
Ok(start.elapsed().context( Error::StartTimeInvalid{ start })?.as_nanos())
}
}
我得到context((的两个编译器错误是:
- 缺少
backtrace
、source
- 特征CCD_ 3不用于CCD_
我怀疑我需要导入其他东西,但不知道它可能是什么。
已解决。
#[derive(Debug, Snafu)]
#[snafu(visibility = "pub")]
pub enum Error {
然后将其添加到使用的模块中
use crate::util::StartTimeInvalid;