use crate::unist::{Point, Position};
use alloc::{boxed::Box, fmt, string::String};
#[derive(Clone, Debug, PartialEq)]
pub struct Message {
pub place: Option<Box<Place>>,
pub reason: String,
pub rule_id: Box<String>,
pub source: Box<String>,
}
impl fmt::Display for Message {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
if let Some(ref place) = self.place {
write!(f, "{}: ", place)?;
}
write!(f, "{} ({}:{})", self.reason, self.source, self.rule_id)
}
}
#[derive(Clone, Debug, PartialEq)]
pub enum Place {
Position(Position),
Point(Point),
}
impl fmt::Display for Place {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Place::Position(position) => write!(
f,
"{}:{}-{}:{}",
position.start.line, position.start.column, position.end.line, position.end.column
),
Place::Point(point) => write!(f, "{}:{}", point.line, point.column),
}
}
}