elf_lojban/src/strange.rs

54 lines
1.2 KiB
Rust

use std::ops::Range;
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct StrRange<'src_buf> {
src: &'src_buf str,
range: Range<usize>,
}
impl<'src_buf> StrRange<'src_buf> {
pub fn new(src: &'src_buf str, start: usize, length: usize) -> Self {
Self {
src,
range: start..(start + length),
}
}
pub fn src(&self) -> &'src_buf str {
self.src
}
pub fn increase_length(&mut self, add_len: usize) {
self.range = self.range.start..self.range.end + add_len;
}
pub fn as_str(&self) -> &'src_buf str {
&self.src[self.range.clone()]
}
pub fn len(&self) -> usize {
self.range.len()
}
pub fn is_empty(&self) -> bool {
self.range.is_empty()
}
// pub fn offset_range(&self, range: Range<usize>) -> Self {
// Self {
// range: (self.range.start + range.start)..(self.range.start + range.end),
// src: self.src,
// }
// }
pub fn start(&self) -> usize {
self.range.start
}
}
impl<'src_buf> core::fmt::Display for StrRange<'src_buf> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> core::fmt::Result {
write![f, "{}", self.as_str()]
}
}