use facet::Facet;
#[derive(Facet, Debug)]
#[facet(derive(Error))]
#[repr(u8)]
pub enum SimpleError {
Unknown,
InvalidValue(String),
}
#[test]
fn test_display_unit_variant() {
let err = SimpleError::Unknown;
assert_eq!(format!("{err}"), "something went wrong");
}
#[test]
fn test_display_tuple_variant() {
let err = SimpleError::InvalidValue("bad".to_string());
assert!(format!("{err}").contains("invalid value"));
}
#[derive(Facet, Debug)]
#[facet(derive(Error))]
#[repr(u8)]
pub enum ErrorWithSource {
Network(String),
InvalidHeader { expected: String, found: String },
Unknown,
}
#[test]
fn test_tuple_variant_with_interpolation() {
let err = ErrorWithSource::Network("connection refused".to_string());
let display = format!("{err}");
assert!(display.contains("network error"));
assert!(display.contains("connection refused"));
}
#[test]
fn test_struct_variant_display() {
let err = ErrorWithSource::InvalidHeader {
expected: "application/json".to_string(),
found: "text/html".to_string(),
};
let display = format!("{err}");
assert!(display.contains("expected application/json"));
assert!(display.contains("found text/html"));
}
#[test]
fn test_unit_variant_with_custom_message() {
let err = ErrorWithSource::Unknown;
assert_eq!(format!("{err}"), "unknown error");
}