use super::Offset;
use std::fmt;
#[derive(Copy, Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct SourcePosition {
pub line_number: Offset,
pub line_offset: Offset,
}
impl SourcePosition {
pub(crate) fn new(line_offset: Offset, line_number: Offset) -> Self {
Self {
line_number,
line_offset,
}
}
}
impl From<(usize, usize)> for SourcePosition {
fn from((line_offset, line_number): (usize, usize)) -> Self {
Self::new(line_offset, line_number)
}
}
impl fmt::Display for SourcePosition {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}:{}", self.line_number + 1, self.line_offset)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display() {
assert_eq!(SourcePosition::new(0, 0).to_string(), "1:0");
}
}