thiserror/
display.rs
1use core::fmt::Display;
2#[cfg(feature = "std")]
3use std::path::{self, Path, PathBuf};
4
5#[doc(hidden)]
6pub trait AsDisplay<'a>: Sealed {
7 type Target: Display;
10
11 fn as_display(&'a self) -> Self::Target;
12}
13
14impl<'a, T> AsDisplay<'a> for &T
15where
16 T: Display + ?Sized + 'a,
17{
18 type Target = &'a T;
19
20 fn as_display(&'a self) -> Self::Target {
21 *self
22 }
23}
24
25#[cfg(feature = "std")]
26impl<'a> AsDisplay<'a> for Path {
27 type Target = path::Display<'a>;
28
29 #[inline]
30 fn as_display(&'a self) -> Self::Target {
31 self.display()
32 }
33}
34
35#[cfg(feature = "std")]
36impl<'a> AsDisplay<'a> for PathBuf {
37 type Target = path::Display<'a>;
38
39 #[inline]
40 fn as_display(&'a self) -> Self::Target {
41 self.display()
42 }
43}
44
45#[doc(hidden)]
46pub trait Sealed {}
47impl<T: Display + ?Sized> Sealed for &T {}
48#[cfg(feature = "std")]
49impl Sealed for Path {}
50#[cfg(feature = "std")]
51impl Sealed for PathBuf {}
52
53#[cfg(not(feature = "std"))]
59mod placeholder {
60 use super::{AsDisplay, Sealed};
61 use core::fmt::{self, Display};
62
63 pub struct Placeholder;
64
65 impl<'a> AsDisplay<'a> for Placeholder {
66 type Target = Self;
67
68 #[inline]
69 fn as_display(&'a self) -> Self::Target {
70 Placeholder
71 }
72 }
73
74 impl Display for Placeholder {
75 fn fmt(&self, _formatter: &mut fmt::Formatter) -> fmt::Result {
76 unreachable!()
77 }
78 }
79
80 impl Sealed for Placeholder {}
81}