#![cfg_attr(
feature = "unstable-error-generic-member-access",
feature(error_generic_member_access)
)]
#![allow(
unused,
clippy::all,
reason = "derive-macro test fixtures intentionally trip style lints"
)]
use oopsie::{Contextual as _, Oopsie};
use std::error::Error as _;
use std::io;
#[derive(Debug, Oopsie)]
#[oopsie(module(false))]
enum RenamedFromEnum {
#[oopsie("wrapped: {inner}")]
Wrapped {
#[oopsie(from)]
inner: io::Error,
#[oopsie(capture)]
bt: Box<oopsie::Backtrace>,
},
}
#[test]
fn c1_renamed_from_source_plus_capture_enum() {
let io_err = io::Error::new(io::ErrorKind::BrokenPipe, "pipe broke");
let err: RenamedFromEnum = Wrapped.build_error(io_err);
assert!(matches!(err, RenamedFromEnum::Wrapped { .. }));
assert_eq!(err.source().expect("has source").to_string(), "pipe broke");
}
#[derive(Debug, Oopsie)]
struct RenamedFromStructError {
#[oopsie(from)]
inner: io::Error,
#[oopsie(capture)]
bt: Box<oopsie::Backtrace>,
}
#[test]
fn c2_renamed_from_source_plus_capture_struct() {
let io_err = io::Error::new(io::ErrorKind::BrokenPipe, "pipe broke");
let err: RenamedFromStructError = RenamedFromStructOopsie.build_error(io_err);
assert_eq!(err.source().expect("has source").to_string(), "pipe broke");
}
#[derive(Debug, Oopsie)]
#[oopsie(module(false))]
enum FieldNamedFEnum {
#[oopsie("value is {f}")]
Holds { f: u32 },
}
#[test]
fn c5_field_named_f_display_enum() {
let err = FieldNamedFEnum::Holds { f: 42 };
assert_eq!(err.to_string(), "value is 42");
}
#[derive(Debug, Oopsie)]
#[oopsie("value is {f}")]
struct FieldNamedFStruct {
f: u32,
}
#[test]
fn c6_field_named_f_display_struct() {
let err = FieldNamedFStruct { f: 7 };
assert_eq!(err.to_string(), "value is 7");
}
#[derive(Debug, Oopsie)]
#[oopsie(module(false))]
enum FieldNamedRequestEnum {
#[oopsie("req error")]
#[oopsie(provide(::oopsie::HelpText => ::oopsie::HelpText::from(request.clone())))]
V { request: String },
}
#[cfg(feature = "unstable-error-generic-member-access")]
#[test]
fn c7_field_named_request_in_provide() {
let err = FieldNamedRequestEnum::V {
request: "payload".to_owned(),
};
let help = core::error::request_value::<oopsie::HelpText>(&err);
assert_eq!(help.as_deref(), Some("payload"));
}