error_stack/fmt/
location.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use core::{fmt, panic::Location};

use crate::fmt::color::{Color, ColorMode, DisplayStyle, Style};

pub(super) struct LocationAttachment<'a, 'loc> {
    location: &'a Location<'loc>,
    mode: ColorMode,
}

impl<'a, 'loc> LocationAttachment<'a, 'loc> {
    #[must_use]
    pub(super) const fn new(location: &'a Location<'loc>, mode: ColorMode) -> Self {
        Self { location, mode }
    }
}

impl fmt::Display for LocationAttachment<'_, '_> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let location = self.location;

        let mut style = Style::new();

        match self.mode {
            ColorMode::None => {}
            ColorMode::Color => style.set_foreground(Color::Black, true),
            ColorMode::Emphasis => style.set_display(DisplayStyle::new().with_italic(true)),
        };

        f.write_fmt(format_args!("at {}", style.apply(&location)))?;

        Ok(())
    }
}