symphonia_metadata/
riff.rs1use lazy_static::lazy_static;
11use std::collections::HashMap;
12use symphonia_core::meta::{StandardTagKey, Tag, Value};
13
14lazy_static! {
15 static ref RIFF_INFO_MAP: HashMap<&'static str, StandardTagKey> = {
16 let mut m = HashMap::new();
17 m.insert("ages", StandardTagKey::Rating);
18 m.insert("cmnt", StandardTagKey::Comment);
19 m.insert("comm", StandardTagKey::Comment);
21 m.insert("dtim", StandardTagKey::OriginalDate);
22 m.insert("genr", StandardTagKey::Genre);
23 m.insert("iart", StandardTagKey::Artist);
24 m.insert("icmt", StandardTagKey::Comment);
26 m.insert("icop", StandardTagKey::Copyright);
27 m.insert("icrd", StandardTagKey::Date);
28 m.insert("idit", StandardTagKey::OriginalDate);
29 m.insert("ienc", StandardTagKey::EncodedBy);
30 m.insert("ieng", StandardTagKey::Engineer);
31 m.insert("ifrm", StandardTagKey::TrackTotal);
32 m.insert("ignr", StandardTagKey::Genre);
33 m.insert("ilng", StandardTagKey::Language);
34 m.insert("imus", StandardTagKey::Composer);
35 m.insert("inam", StandardTagKey::TrackTitle);
36 m.insert("iprd", StandardTagKey::Album);
37 m.insert("ipro", StandardTagKey::Producer);
38 m.insert("iprt", StandardTagKey::TrackNumber);
39 m.insert("irtd", StandardTagKey::Rating);
40 m.insert("isft", StandardTagKey::Encoder);
41 m.insert("isgn", StandardTagKey::Genre);
42 m.insert("isrf", StandardTagKey::MediaFormat);
43 m.insert("itch", StandardTagKey::EncodedBy);
44 m.insert("iwri", StandardTagKey::Writer);
45 m.insert("lang", StandardTagKey::Language);
46 m.insert("prt1", StandardTagKey::TrackNumber);
47 m.insert("prt2", StandardTagKey::TrackTotal);
48 m.insert("titl", StandardTagKey::TrackTitle);
50 m.insert("torg", StandardTagKey::Label);
51 m.insert("trck", StandardTagKey::TrackNumber);
52 m.insert("tver", StandardTagKey::Version);
53 m.insert("year", StandardTagKey::Date);
54 m
55 };
56}
57
58pub fn parse(tag: [u8; 4], buf: &[u8]) -> Tag {
61 let key = String::from_utf8_lossy(&tag);
63 let value = String::from_utf8_lossy(buf);
64
65 let std_tag = RIFF_INFO_MAP.get(key.to_lowercase().as_str()).copied();
67
68 Tag::new(std_tag, &key, Value::from(value))
69}