use super::EditorDocument;
use crate::core::errors::Result;
use crate::core::position::{Position, Range};
pub struct DocumentPosition<'a> {
document: &'a mut EditorDocument,
position: Position,
}
impl<'a> DocumentPosition<'a> {
pub fn insert_text(self, text: &str) -> Result<()> {
self.document.insert(self.position, text)
}
pub fn delete_range(self, len: usize) -> Result<()> {
let end_pos = Position::new(self.position.offset + len);
let range = Range::new(self.position, end_pos);
self.document.delete(range)
}
pub fn replace_text(self, len: usize, new_text: &str) -> Result<()> {
let end_pos = Position::new(self.position.offset + len);
let range = Range::new(self.position, end_pos);
self.document.replace(range, new_text)
}
}
impl EditorDocument {
pub fn at(&mut self, pos: Position) -> DocumentPosition<'_> {
DocumentPosition {
document: self,
position: pos,
}
}
}