use std::ops::Range;
use crate::ropetext::position::Revision;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Edit {
inserted: Range<usize>,
removed_bytes: usize,
}
impl Edit {
pub(crate) fn new(inserted: Range<usize>, removed_bytes: usize) -> Self {
Self {
inserted,
removed_bytes,
}
}
pub fn inserted(&self) -> Range<usize> {
self.inserted.clone()
}
pub fn removed_bytes(&self) -> usize {
self.removed_bytes
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Change {
revision: Revision,
edits: Option<Vec<Edit>>,
rows: Range<usize>,
line_delta: isize,
}
impl Change {
pub(crate) fn new(
revision: Revision,
edits: Option<Vec<Edit>>,
rows: Range<usize>,
line_delta: isize,
) -> Self {
Self {
revision,
edits,
rows,
line_delta,
}
}
pub fn revision(&self) -> Revision {
self.revision
}
pub fn edits(&self) -> Option<&[Edit]> {
self.edits.as_deref()
}
pub fn rows(&self) -> Range<usize> {
self.rows.clone()
}
pub fn line_delta(&self) -> isize {
self.line_delta
}
pub fn is_bulk(&self) -> bool {
self.line_delta != 0 || self.rows.end.saturating_sub(self.rows.start) > 1
}
}