#解析器 #转义 #版本 #Python #读取 #msd #garcia

msdparser

由Garcia(https://github.com/garcia/msdparser/)编写的MSD解析器的Rust版本。

1个不稳定发布

0.1.0 2024年6月21日

#1694 in 解析实现

MIT 协议

42KB
650

Rust MSDParser

这是Garcia(https://github.com/garcia/msdparser/)编写的MSD解析器库的Rust移植版。该库公开了与Python原始版本类似的API,即parse_msd函数。

fn parse_msd<R: Read>(input: R, escapes: bool, ignore_stray_text: bool) -> MSDParser<R>;

返回的结构是一个迭代器,它产生Result<MSDParameter, MSDParserError>,其中MSDParameter是一个键值对。可以通过使用.key().value()分别访问键和值。

请参见下面的示例以了解其工作原理。

用法

use msdparser::{MSDParameter, parse_msd};
use std::error::Error;
use std::vec::Vec;

let example_input = b"\
#VERSION:0.83;
#TITLE:Springtime;
#SUBTITLE:;
#ARTIST:Kommisar;";
let mut result: Vec<MSDParameter> = Vec::new();

// here we set `escapes` to true and `ignore_stray_text` to false
// which is the default value in the original python library
for parameter in parse_msd(example_input.as_ref(), true, false) {
    match parameter {
       Ok(parameter) => result.push(parameter),
       Err(e) => panic!("{}", e), // = MSDParserError
    }   
}

assert_eq!(result.len(), 4);
assert_eq!(result[0].key().unwrap(), "VERSION".to_string());
assert_eq!(result[1].value().unwrap(), "Springtime".to_string());
assert_eq!(result[2].value().unwrap(), "".to_string());
assert_eq!(result[3].key().unwrap(), "ARTIST".to_string());

安装

  1. 将以下内容添加到您的Cargo.toml
[dependencies]
msdparser = { version = "0.1.0", git = "https://github.com/smdbs01/rust_msdparser.git" }

或者

  1. 使用Cargo add msdparser

贡献

这是我使用Rust的第一个项目,所以代码库可能还不够“Rustify”。因此,如果您发现任何错误或建议,请随时提出问题或PR。

依赖

~2.2–3MB
~54K SLoC