use std::fmt::{Debug, Display}; #[derive(Copy, Clone)] pub struct CodePos { pub line: u32, pub col: u32, } impl Default for CodePos { fn default() -> Self { Self { line: 1, col: 0 } } } impl Display for CodePos { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "line {}, col {}", self.line, self.col) } } impl Debug for CodePos { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}:{}", self.line, self.col) } } /*====================================================================================================================*/ pub fn indent(s: String) -> String { s.split('\n') .map(|line| format!("\t{line}")) .collect::>() .join("\n") }