# nydus-error
The `nydus-error` crate is a collection of helper utilities to handle error codes for [`Nydus Image Service`](https://github.com/dragonflyoss/image-service) project, which provides:
- `macro define_error_macro!()` to optionally augment Posix errno with backtrace information.
- `macro einval!(), enoent!()` etc for commonly used error codes.
- `struct ErrorHolder` to provide a circular buffer to hold the latest error messages.
## Support
**Platforms**:
- x86_64
- aarch64
**Operating Systems**:
- Linux
## Usage
Add `nydus-error` as a dependency in `Cargo.toml`
```toml
[dependencies]
nydus-error = "*"
```
Then add `extern crate nydus-error;` to your crate root if needed.
## Examples
- Return an error with backtracing information:
```rust
fn check_size(size: usize) -> std::io::Result<()> {
if size > 0x1000 {
return Err(einval!());
}
Ok(())
}
```
- Put an error message into an `ErrorHolder` object.
```rust
fn record_error(size: usize) {
let mut holder = ErrorHolder::new(10, 80);
let error_msg = "123456789";
let r = holder.push(error_msg);
assert_eq!(r.is_ok(), true);
let _msg = holder.export().unwrap();
}
```
## License
This code is licensed under [Apache-2.0](LICENSE-APACHE) or [BSD-3-Clause](LICENSE-BSD-3-Clause).