Crate lines_inclusive

Source
Expand description

Every non-final iterator item ends with a line feed:

use lines_inclusive::LinesInclusive;
let lines: Vec<_> = "ABC\nDEF\nGHI".lines_inclusive().collect();
assert_eq!(lines, ["ABC\n", "DEF\n", "GHI"]);

If the text has a single trailing line feed, that line feed is part of the final iterator item:

use lines_inclusive::LinesInclusive;
let lines: Vec<_> = "ABC\nDEF\nGHI\n".lines_inclusive().collect();
assert_eq!(lines, ["ABC\n", "DEF\n", "GHI\n"]);

If the text has multiple extra trailing line feeds, these line feeds are their own iterator items:

use lines_inclusive::LinesInclusive;
let lines: Vec<_> = "ABC\nDEF\nGHI\n\n\n".lines_inclusive().collect();
assert_eq!(lines, ["ABC\n", "DEF\n", "GHI\n", "\n", "\n"]);

Handling of carriage returns:

use lines_inclusive::LinesInclusive;
let lines: Vec<_> = "ABC\r\nDEF\n\rGHI".lines_inclusive().collect();
assert_eq!(lines, ["ABC\r\n", "DEF\n", "\rGHI"]);

Empty lines are turned into lines of single line feed:

use lines_inclusive::LinesInclusive;
let lines: Vec<_> = "ABC\nDEF\n\nGHI\n".lines_inclusive().collect();
assert_eq!(lines, ["ABC\n", "DEF\n", "\n", "GHI\n"]);

Structs§

LinesInclusiveIter
Iterator over inclusive lines of strings.

Traits§

LinesInclusive
Extension trait that provides lines_inclusive method for str.