-
Notifications
You must be signed in to change notification settings - Fork 1
API Functions
ChouChiu edited this page Sep 23, 2026
·
1 revision
pub fn parse_auto(input: &str) -> Option<LyricsData>自动识别输入歌词的格式并完成解析。实现在 lyrics-parsers 的 parsers::parse_lyrics_auto。
返回 None 的两种情况:
- 无法匹配任何已知格式(
LyricsRawTypes::Unknown)。 - 输入为外层传输信封(
QrcFull、YrcFull、AppleJson)。外层信封需要调用方先取出内嵌歌词文本再传入。
use lyrics_helper::parse_auto;
let content = "[00:12.00]Hello World\n[00:15.50]Second line";
let data = parse_auto(content).expect("解析失败");
assert_eq!(data.lines.as_ref().unwrap().len(), 2);pub fn parse(input: &str, raw_type: LyricsRawTypes) -> Option<LyricsData>按指定的 LyricsRawTypes 解析歌词。已知格式时使用可避免类型检测开销。
返回 None 的情况严格限定为以下三类:
- 传入
LyricsRawTypes::Unknown; - 传入信封格式
QrcFull、YrcFull或AppleJson; - 格式为
Spotify或Musixmatch时,输入文本不是符合结构的 JSON。
对于其余 7 种文本格式(Lrc、Qrc、Krc、Yrc、Ttml、LyricifySyllable、LyricifyLines),只要输入非信封,函数始终返回 Some(LyricsData)。若文本中没有任何合法歌词行,得到的将是 lines 为空列表的结构体,而非 None。
pub fn parser_for(raw_type: LyricsRawTypes) -> Option<&'static dyn LyricsParser>获取指定格式对应的解析器单例。parse(input, raw_type) 内部即通过 parser_for(raw_type)?.parse(input) 分发。
-
Unknown与三个信封格式没有独立解析器,返回None。 - 各格式解析器类型(如
LrcParser、QrcParser等)定义在lyrics_helper::parsers::parsers,直接使用其实例需引入use lyrics_helper::traits::LyricsParser;。
pub fn generate_string(lyrics_data: &LyricsData, lyrics_type: LyricsTypes) -> Option<String>将 LyricsData 序列化为目标格式的字符串。
返回 None 的情况:
- 目标格式不支持生成(
Ttml、Spotify、Musixmatch、Unknown仅作为来源标记,无生成器)。 - 生成结果为空字符串(例如:将只有行级时间戳的 LRC 数据转为 QRC、KRC、YRC 或 Lyricify Syllable 逐字格式时,因没有音节数据而输出为空)。
use lyrics_helper::{generate_string, parse, LyricsRawTypes, LyricsTypes};
let data = parse("[0,2000]Hel(0,500)lo(500,500) World(1000,1000)", LyricsRawTypes::Qrc).unwrap();
let qrc = generate_string(&data, LyricsTypes::Qrc).unwrap();
assert!(qrc.contains("Hel(0,500)lo(500,500)"));
// 无音节数据的行级歌词无法生成逐字格式
let lrc = parse("[00:12.00]Hello World", LyricsRawTypes::Lrc).unwrap();
assert!(generate_string(&lrc, LyricsTypes::Qrc).is_none());pub fn generator_for(lyrics_type: LyricsTypes) -> Option<&'static dyn LyricsGenerator>获取指定格式对应的生成器单例。支持的生成格式包括:Lrc、Qrc、Krc、Yrc、LyricifySyllable、LyricifyLines。
pub fn decrypt_qrc(encrypted: &str) -> Option<String>
pub fn decrypt_krc(encrypted: &str) -> Option<String>-
decrypt_qrc:接收十六进制密文,执行 3DES-EDE 解密与 zlib 解压。空白字符自动忽略。 -
decrypt_krc:接收 Base64 字符串(完整 KRC 文件),跳过 4 字节krc1魔数头、循环异或解密、zlib 解压并剥离 UTF-8 BOM。
解密过程任意环节失败均返回 None。
实现 LyricsDecrypter trait 的具体解密器,通过返回 Result<String, DecryptError> 报告明确失败原因:
use lyrics_helper::traits::{DecryptError, LyricsDecrypter};
use lyrics_helper::QrcDecrypter;
match QrcDecrypter.decrypt("invalid_hex") {
Ok(text) => println!("{text}"),
Err(DecryptError::InvalidInput) => eprintln!("输入不是合法十六进制/Base64 或长度不足"),
Err(DecryptError::DecompressionFailed) => eprintln!("zlib 解压缩失败"),
Err(DecryptError::InvalidEncoding) => eprintln!("解压结果非有效 UTF-8"),
Err(err) => eprintln!("解密失败: {err}"),
}