4 个版本

使用旧的 Rust 2015

0.1.3 2022年4月13日
0.1.2 2022年4月13日
0.1.1 2022年4月13日
0.1.0 2022年4月13日

#1673解析器实现

Download history 37/week @ 2024-03-11 22/week @ 2024-03-18 29/week @ 2024-03-25 66/week @ 2024-04-01 9/week @ 2024-04-08 15/week @ 2024-04-15 15/week @ 2024-04-22 19/week @ 2024-04-29 45/week @ 2024-05-06 20/week @ 2024-05-13 56/week @ 2024-05-20 35/week @ 2024-05-27 28/week @ 2024-06-03 19/week @ 2024-06-10 37/week @ 2024-06-17 17/week @ 2024-06-24

109 每月下载量
2 个crate中使用 (通过 bliss-audio)

MIT 许可证

40KB
767

rcue

crates.io

文档

为 Rust 提供简单的 CUE 表格读取器。无依赖项,并可在稳定版本上编译。

用法

请参阅 生成的文档parser.rs 中的用法和一些示例。

将以下内容添加到您的 Cargo.toml 中的 [dependencies]

通过 crates.io

rcue = "*"

或直接从 GitHub

rcue = { git = "https://github.com/gyng/rcue" }

在您的程序中

extern crate rcue;

use rcue::parser::parse;
use rcue::parser::parse_from_file;

fn main() {
    let cue = parse_from_file("test/fixtures/unicode.cue", true).unwrap();
    assert_eq!(cue.title, Some("マジコカタストロフィ".to_string()));

    let file = std::fs::File::open("test/fixtures/unicode.cue").unwrap();
    let mut buf_reader = std::io::BufReader::new(file);
    let cue = parse(&mut buf_reader, true).unwrap();
    assert_eq!(cue.title, Some("マジコカタストロフィ".to_string()));
}

限制和说明

当前实现有以下已知限制

  • 缩进被视为不重要(=没有适当的环境支持)。例如,如果 REM 字段出现在 TRACK 字段之后(但缩进到 FILE 的级别,它将被错误地分配给 TRACK)。

    FILE "audio.wav" WAVE
        TRACK 01 AUDIO
            TITLE "track1"
    REM DISCID 860B640B ← This is wrongly(?) assigned to the TRACK
    
  • 字段之间多余的空白会导致解析失败。

    REM COMMENT           "A lot of extra spaces"
    
  • 字符串中的转义双引号 " 被转义为 "

开发

详细日志信息

为了将详细日志信息输出到 STDOUT 以及在宽松模式下跳过的行的详细信息,请使用环境变量 RCUE_LOG 设置为 1 运行 rcue。例如

# myapp.rs
RCUE_LOG=1 cargo run

模糊测试

可以使用 cargo fuzz 在 nightly 中运行 rcue 的解析器模糊测试。

cargo install cargo-fuzz -f
cargo +nightly fuzz run fuzz_parser

Clippy

使用以下方式运行 Clippy

rustup install nightly # if not installed
rustup update nightly
cargo +nightly install clippy --force # --force to update
rustup run nightly cargo clippy

待办事项

  • 重要的缩进/环境支持
  • 序列化器
  • 进一步清理解析

无运行时依赖项