#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct Pos { line: usize, column: usize, cursor: usize, } impl Pos { pub fn new(line: usize, column: usize, cursor: usize) -> Self { Self { line, column, cursor, } } pub fn line(self) -> usize { self.line } pub fn column(self) -> usize { self.column } pub fn cursor(self) -> usize { self.cursor } } #[derive(Clone, Debug)] pub struct Span { inner: T, start: Pos, end: Pos, } impl Span { pub fn new(inner: T, start: Pos, end: Pos) -> Self { Self { inner, start, end } } pub fn inner(&self) -> &T { &self.inner } pub fn inner_mut(&mut self) -> &mut T { &mut self.inner } pub fn into_inner(self) -> T { self.inner } pub fn start(&self) -> Pos { self.start } pub fn end(&self) -> Pos { self.end } }