use crate::types::object::OnionObject;
pub mod fastmap;
const MAX_DEBUG_LEN: usize = 120;
pub fn format_object_summary(obj: &OnionObject) -> String {
let debug_str = obj.repr(&vec![]).unwrap_or("<unknown>".to_string());
if debug_str.len() > MAX_DEBUG_LEN {
let mut truncated: String = debug_str.chars().take(MAX_DEBUG_LEN).collect();
truncated.push_str("...");
truncated
} else {
debug_str
}
}
pub fn find_line_and_col_from_source(char_pos: usize, source: &str) -> (usize, usize) {
let chars: Vec<char> = source.chars().collect();
if char_pos >= chars.len() {
let line_count = source.lines().count();
return (line_count.saturating_sub(1), 0);
}
let mut current_line = 0;
let mut current_col = 0;
for (i, &ch) in chars.iter().enumerate() {
if i == char_pos {
return (current_line, current_col);
}
if ch == '\n' {
current_line += 1;
current_col = 0;
} else if ch == '\r' {
if i + 1 < chars.len() && chars[i + 1] == '\n' {
continue;
} else {
current_line += 1;
current_col = 0;
}
} else {
current_col += 1;
}
}
(current_line, current_col)
}