#![no_std]
#![doc = include_str!("specs.md")]
use core::{iter::FusedIterator, str::SplitInclusive};
mod sealed {
pub trait Sealed {}
impl Sealed for str {}
}
pub trait LinesInclusive: sealed::Sealed {
fn lines_inclusive(&self) -> LinesInclusiveIter<'_>;
}
impl LinesInclusive for str {
fn lines_inclusive(&self) -> LinesInclusiveIter<'_> {
LinesInclusiveIter::new(self)
}
}
#[derive(Debug, Clone)]
pub struct LinesInclusiveIter<'a>(SplitInclusive<'a, char>);
impl<'a> LinesInclusiveIter<'a> {
fn new(text: &'a str) -> Self {
LinesInclusiveIter(text.split_inclusive('\n'))
}
}
impl<'a> Iterator for LinesInclusiveIter<'a> {
type Item = &'a str;
fn next(&mut self) -> Option<Self::Item> {
self.0.next()
}
}
impl DoubleEndedIterator for LinesInclusiveIter<'_> {
fn next_back(&mut self) -> Option<Self::Item> {
self.0.next_back()
}
}
impl FusedIterator for LinesInclusiveIter<'_> {}
#[doc = include_str!("README.md")]
mod test_readme {}