diff options
Diffstat (limited to 'vendor/snapbox/src/utils/lines.rs')
-rw-r--r-- | vendor/snapbox/src/utils/lines.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/vendor/snapbox/src/utils/lines.rs b/vendor/snapbox/src/utils/lines.rs new file mode 100644 index 000000000..f56408483 --- /dev/null +++ b/vendor/snapbox/src/utils/lines.rs @@ -0,0 +1,31 @@ +#[derive(Clone, Debug)] +pub struct LinesWithTerminator<'a> { + data: &'a str, +} + +impl<'a> LinesWithTerminator<'a> { + pub fn new(data: &'a str) -> LinesWithTerminator<'a> { + LinesWithTerminator { data } + } +} + +impl<'a> Iterator for LinesWithTerminator<'a> { + type Item = &'a str; + + #[inline] + fn next(&mut self) -> Option<&'a str> { + match self.data.find('\n') { + None if self.data.is_empty() => None, + None => { + let line = self.data; + self.data = ""; + Some(line) + } + Some(end) => { + let line = &self.data[..end + 1]; + self.data = &self.data[end + 1..]; + Some(line) + } + } + } +} |