3 个版本

0.0.2 2019年3月28日
0.0.1 2019年3月27日
0.0.0 2019年3月26日

#4 in #annotated


用于 position

CC0 许可

8KB
71

oi

crates.io docs

oi 提供了一种位置注解的错误类型,以便您可以向用户显示有用的错误信息。

没有位置信息的错误信息通常不可操作,尤其是在它们来自一个具有许多潜在错误来源的复杂程序时。

比较未注解的错误

$ foo
No such file or directory (os error 2)

…与注解错误

$ foo
Configuration.toml: No such file or directory (os error 2)

oi 的名字来源于感叹号,就像在 Oi! Oi! Oi! 中一样。想象一下提醒用户错误的位置:“Oi! 1.2.3.4 不可达!”

用法

此包提供了一种包装错误和位置的 Error 类型,一个用于错误位置的 Location trait,一个扩展 Result 并带有 err_at 方法的 ErrAt trait,以及一个作为更繁琐的 Result<T, Error<E, L>> 的别名的 Result<T, E, L> 类型。

pub struct Error<E: Fail, L: Location> {
  pub error: E,
  pub location: L,
}

pub trait Location: Debug + Send + Sync + 'static {
  fn fmt_error(&self, f: &mut Formatter, error: &dyn Fail) -> fmt::Result;
}

pub trait ErrAt<T, E: Fail> {
  fn err_at<L: Location, I: Into<L>>(self, location: I) -> Result<T, Error<E, L>>;
}

pub type Result<T, E, L> = std::result::Result<T, Error<E, L>>;

LocationPathBufSocketAddr 实现,并且可以轻松地为自定义位置类型实现。所需的一个方法是 fmt_error,它允许自定义类型控制错误注解的位置如何被渲染到错误信息中。

依赖项

~64KB