如何将rust-snafu错误枚举移到一个模块中,并从另一个模块使用它



我正在将一个巨大的文件分解为多个模块,在分解之前一切正常,现在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((的两个编译器错误是:

  • 缺少backtracesource
  • 特征CCD_ 3不用于CCD_

我怀疑我需要导入其他东西,但不知道它可能是什么。

已解决。

#[derive(Debug, Snafu)]
#[snafu(visibility = "pub")]
pub enum Error {

然后将其添加到使用的模块中

use crate::util::StartTimeInvalid;

相关内容

最新更新