#io-error #clone #eq #error #io

eieio

Error Implementing Eq + Clone replacing std::io::Error

1 stable release

1.0.0 May 17, 2020

#2671 in Rust patterns

Download history 6563/week @ 2024-12-14 3501/week @ 2024-12-21 7651/week @ 2024-12-28 6259/week @ 2025-01-04 5948/week @ 2025-01-11 5876/week @ 2025-01-18 5506/week @ 2025-01-25 7177/week @ 2025-02-01 8377/week @ 2025-02-08 5996/week @ 2025-02-15 6225/week @ 2025-02-22 6922/week @ 2025-03-01 5772/week @ 2025-03-08 7713/week @ 2025-03-15 7956/week @ 2025-03-22 5994/week @ 2025-03-29

28,670 downloads per month
Used in 7 crates (2 directly)

MIT license

6KB
114 lines

eieio — Error Implementing Eq + Clone replacing std::io::Error

eieio::Error is a replacement of std::io::Error which implements Eq + Clone. This type is intended as a "source" of other errors where a derived Eq + Clone implemented is desired.

// Constructs a standard io::Error...
let ioe = std::fs::read_dir("/dev/null").unwrap_err();

// Converts into an Eq + Clone error
let e1 = eieio::Error::from(ioe);
let e2 = e1.clone();
assert_eq!(e1, e2);

Clone

eieio::Error stores custom errors in an Arc rather than a Box to allow universal cloning.

Conversion from std::io::Error to eieio::Error may need to perform a copy of the entire custom error.

Equality

eieio::Error uses Arc::ptr_eq to compare equality of custom errors.

If the custom error carried by the original std::io::Error itself implements Eq, that custom equality is ignored:

use std::io::ErrorKind;

let e1 = eieio::Error::new(ErrorKind::Other, Box::from("foo"));
let e2 = eieio::Error::new(ErrorKind::Other, Box::from("foo"));
assert_ne!(e1, e2);

No runtime deps