1 个不稳定版本
0.1.0 | 2024 年 4 月 18 日 |
---|
1117 在 Rust 模式
9KB
93 行
rangecutter
处理相邻范围的实用工具。
use std::ops::Range;
use rangecutter::RangeExt;
let source = "Line 1\nLine 2\n";
fn first_newline(s: &str) -> Option<Range<usize>> {
let sep = '\n';
let start = s.find(sep)?;
let end = start + sep.len_utf8();
Some(start..end)
}
let mut cursor = 0..source.len();
let lines_with_endings = std::iter::from_fn(|| {
let separator = match first_newline(&source[cursor.clone()]) {
Some(newline) => cursor.compose(&newline),
None if !cursor.is_empty() => {
cursor.end..cursor.end
}
None => return None,
};
let line;
(line, cursor) = cursor.cut(&separator);
let line_with_separator = line.concat(&separator);
Some(&source[line_with_separator])
}).collect::<Vec<_>>();
assert_eq!(
lines_with_endings,
[
"Line 1\n",
"Line 2\n",
],
);
限制
仅支持完全有界的包含范围 (Range<T>
)。
许可证:MIT