1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
use ropey::RopeSlice; pub trait RopeSliceExt: Sized { fn ends_with(self, text: &str) -> bool; fn starts_with(self, text: &str) -> bool; } impl RopeSliceExt for RopeSlice<'_> { fn ends_with(self, text: &str) -> bool { let len = self.len_bytes(); if len < text.len() { return false; } self.get_byte_slice(len - text.len()..) .map_or(false, |end| end == text) } fn starts_with(self, text: &str) -> bool { let len = self.len_bytes(); if len < text.len() { return false; } self.get_byte_slice(..len - text.len()) .map_or(false, |start| start == text) } }