use super::super::range::{Position, Range};
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct Label {
pub value: String,
pub location: Range,
}
impl Label {
fn default_location() -> Range {
Range::new(0..0, Position::new(0, 0), Position::new(0, 0))
}
pub fn new(value: String) -> Self {
Self {
value,
location: Self::default_location(),
}
}
pub fn from_string(value: &str) -> Self {
Self {
value: value.to_string(),
location: Self::default_location(),
}
}
pub fn at(mut self, location: Range) -> Self {
self.location = location;
self
}
}
impl fmt::Display for Label {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.value)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_label() {
let location = super::super::super::range::Range::new(
0..0,
super::super::super::range::Position::new(1, 0),
super::super::super::range::Position::new(1, 10),
);
let label = Label::new("test".to_string()).at(location.clone());
assert_eq!(label.location, location);
}
}