#string #text #parser #store #file-format

snippets-rs

字符串存储的片段文件格式的解析器,是一种人类可读的文件格式

1 个不稳定版本

0.1.0 2022年1月17日

#2797解析器实现

MIT 许可证

17KB
269

片段解析器

tests Language Licenses Crates.io Docs.rs

片段文件格式是一种人类可读的字符串存储格式,非常适合开发者。

有关格式的更多信息,请参阅 片段规范

片段文件的示例

-- 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 许可证 许可

无运行时依赖