1use std::fmt;
4
5#[derive(Debug)]
7#[non_exhaustive]
8pub enum RenderError {
9 Fmt(fmt::Error),
11}
12
13impl fmt::Display for RenderError {
14 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15 match self {
16 Self::Fmt(e) => write!(f, "render formatting error: {e}"),
17 }
18 }
19}
20
21impl std::error::Error for RenderError {
22 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
23 match self {
24 Self::Fmt(e) => Some(e),
25 }
26 }
27}
28
29impl From<fmt::Error> for RenderError {
30 fn from(e: fmt::Error) -> Self {
31 Self::Fmt(e)
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38
39 #[test]
40 fn test_render_error_display_fmt() {
41 let inner = fmt::Error;
42 let err = RenderError::Fmt(inner);
43 let msg = format!("{err}");
44 assert!(msg.contains("render formatting error"));
45 }
46
47 #[test]
48 fn test_render_error_debug() {
49 let err = RenderError::Fmt(fmt::Error);
50 let debug = format!("{err:?}");
51 assert!(debug.contains("Fmt"));
52 }
53
54 #[test]
55 fn test_render_error_source() {
56 let err = RenderError::Fmt(fmt::Error);
57 let source = std::error::Error::source(&err);
58 assert!(source.is_some());
59 }
60
61 #[test]
62 fn test_render_error_from_fmt_error() {
63 let inner = fmt::Error;
64 let err: RenderError = inner.into();
65 assert!(matches!(err, RenderError::Fmt(_)));
66 }
67}