1 个不稳定版本
0.1.0 | 2022年1月17日 |
---|
#2797 在 解析器实现
17KB
269 行
片段解析器
片段文件格式是一种人类可读的字符串存储格式,非常适合开发者。
有关格式的更多信息,请参阅 片段规范。
片段文件的示例
-- my snippet --
This snippet contains a string
-- end --
Text here is ignored, so it can be used to write comments
-- my second snippet --
This snippet contains multiple lines --
-- end --
关于此解析器
这是一个用 Rust 编写的 片段 解析器。它可以用于读取和写入片段。当从文件中读取片段时,它们仅按需读入内存。
概述
在本节中,我们将定义 snippets.snip
为
-- snippet1 --
Are we human?
Or are we dancer?
-- end --
-- snippet2 --
This is my church.
This is where I heal my hurts.
-- end --
This is a comment
-- snippet3 --
Never gonna give you up
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye
Never gonna tell a lie and hurt you
-- end --
从文件中读取
let parser = SnippetParser::read("snippet.snip").unwrap();
现在我们已经有了解析器,我们可以读取片段的方式
迭代器
assert_eq!(
Snippet::new("snippet1".to_string(), "Are we human?\nOr are we dancer?".to_string),
parser.next()
);
或者
let snippets = vec![
Snippet::new("snippet1".to_string(), "Are we human?\nOr are we dancer?".to_string),
Snippet::new("snippet2".to_string(), /*..*/),
Snippet::new("snippet3".to_string(), /*...*/),
];
let snippets_from_iterator = parser.into_iter().map(|snip| snip).collect::<Vec<Snippet>>();
assert_eq!(snippets, snippets_from_iterator);
获取片段
assert_eq!(snippets, parser.get_snippets().unwrap());
根据标题获取片段
assert_eq!(
Snippet::new("snippet1".to_string(), "Are we human?\nOr are we dancer?".to_string),
parser.get_snippet("snippet1")
);
将片段添加到解析器中
您可以使用以下方式将片段添加到解析器中
parser.add_snippet(Snippet::new("snippet4".to_string(), "No one knows".to_string));
您还可以创建一个空解析器并向其中添加片段,或者直接使用片段初始化解析器。
let mut parser1 = SnippetParser::new();
parser1.add_snippet(Snippet::new("snippet4".to_string(), "No one knows".to_string));
let parser2 = SnippetParser::from_snippets(vec![Snippet::new("snippet4".to_string(), "No one knows".to_string)]);
assert_eq!(parser1.get_snippets(), parser2.get_snippets());
保存到新文件
// Get file contents
let file_contents = parser.to_string();
// Write file
let f = OpenOptions::new()
.append(true)
.open("output_file.snip")
.expect("Unable to open file");
let mut f = BufWriter::new(f);
f.write_all(file_contents.as_bytes()).expect("Unable to write data");
安装
此包已发布到 crates.io,因此只需将以下内容添加到您的 cargo.toml 中
snippets-rs = "0.1.0"
贡献
可以对此包进行许多优化,因此请随时提交问题并创建拉取请求。只需确保测试正在运行。
许可证
此包根据 MIT 许可证 许可