7 releases

0.2.4 Feb 7, 2025
0.2.3 Dec 16, 2024
0.2.2 Aug 15, 2024
0.1.1 Dec 25, 2023
0.1.0 Aug 22, 2023

#768 in Rust patterns

Download history 4/week @ 2024-11-02 11/week @ 2024-11-16 10/week @ 2024-11-23 8/week @ 2024-11-30 23/week @ 2024-12-07 147/week @ 2024-12-14 12/week @ 2024-12-21 1/week @ 2025-01-04 1/week @ 2025-01-11 89/week @ 2025-02-01 50/week @ 2025-02-08

139 downloads per month
Used in 4 crates (3 directly)

MIT/Apache

30KB
594 lines

hierr

原来的名字为hun_error. 包装OS的错误码, 统一错误码的查询和获取接口

错误码有两种使用场景:

  1. 需要区分具体错误码: 比如底层target提供接口,需要调用者显示区分target.
  2. 无需区分具体错误码: 一般有高层次,粗粒度的容错处理机制,错误码用于日志输出. 对于后一种场景,调用者决定日志输出方式,因此接口的返回值也多使用Result<T, Error>. 这里就会存在Error具体取值的构造尽可能和Target无关,因此为此场景定义了几个常用业务下需要使用到的错误码(v0.2.4):
  3. Error::inval
  4. Error::noent
  5. Error::perm
  6. Error::nomem
  7. Error::busy
  8. Error::timedout
  9. Error::general 借用Target定义的错误码来表达业务层的常见错误. 因为此场景并不鼓励基于具体错误码进行容错处理,因此并不提供对应的is_***接口.

版本更新说明

  1. 0.2.4版本: 针对无需细分错误码场景提供常见错误构造函数
  2. 0.2.3版本: 支持mingw(target_os = "windows", target_env = "gnu"), 同linux.
  3. 0.2.2版本: 解决widows下无法正确输出中文信息的bug

接口和使用样例

1. fn errno() -> i32;
2. fn set_errno(i32);
3. fn errmsg(i32, &mut [u8]) -> &str;

封装i32为Error

Example

use hierr;

let err = hierr::Error::last();
println!("{}", err);

let mut buf = [0_u8; 64];
println!("{}: {}",  hierr::errno(), hierr::errmsg(hierr::errno(), &mut buf[..]));

hierr::set_errno(100);
let err = hierr::Error::last();
assert_eq!(err, 100.into());
assert_eq!(hierr::errno(), 100);

No runtime deps