sim_lib_midi_core/
meta_view.rs1use crate::{MetaBucket, SmpteOffset};
8
9pub fn as_text(bucket: &MetaBucket) -> Option<&str> {
11 (bucket.type_byte == 0x01)
12 .then(|| std::str::from_utf8(&bucket.data).ok())
13 .flatten()
14}
15
16pub fn as_track_name(bucket: &MetaBucket) -> Option<&str> {
19 (bucket.type_byte == 0x03)
20 .then(|| std::str::from_utf8(&bucket.data).ok())
21 .flatten()
22}
23
24pub fn as_marker(bucket: &MetaBucket) -> Option<&str> {
26 (bucket.type_byte == 0x06)
27 .then(|| std::str::from_utf8(&bucket.data).ok())
28 .flatten()
29}
30
31pub fn as_smpte_offset(bucket: &MetaBucket) -> Option<SmpteOffset> {
34 (bucket.type_byte == 0x54 && bucket.data.len() == 5).then(|| SmpteOffset {
35 hours: bucket.data[0],
36 minutes: bucket.data[1],
37 seconds: bucket.data[2],
38 frames: bucket.data[3],
39 subframes: bucket.data[4],
40 })
41}
42
43pub fn make_text(value: &str) -> MetaBucket {
45 MetaBucket {
46 type_byte: 0x01,
47 data: value.as_bytes().to_vec(),
48 }
49}
50
51pub fn make_track_name(value: &str) -> MetaBucket {
53 MetaBucket {
54 type_byte: 0x03,
55 data: value.as_bytes().to_vec(),
56 }
57}
58
59pub fn make_marker(value: &str) -> MetaBucket {
61 MetaBucket {
62 type_byte: 0x06,
63 data: value.as_bytes().to_vec(),
64 }
65}
66
67pub fn make_smpte_offset(offset: SmpteOffset) -> MetaBucket {
69 MetaBucket {
70 type_byte: 0x54,
71 data: vec![
72 offset.hours,
73 offset.minutes,
74 offset.seconds,
75 offset.frames,
76 offset.subframes,
77 ],
78 }
79}