use crate::{MetaBucket, SmpteOffset};
pub fn as_text(bucket: &MetaBucket) -> Option<&str> {
(bucket.type_byte == 0x01)
.then(|| std::str::from_utf8(&bucket.data).ok())
.flatten()
}
pub fn as_track_name(bucket: &MetaBucket) -> Option<&str> {
(bucket.type_byte == 0x03)
.then(|| std::str::from_utf8(&bucket.data).ok())
.flatten()
}
pub fn as_marker(bucket: &MetaBucket) -> Option<&str> {
(bucket.type_byte == 0x06)
.then(|| std::str::from_utf8(&bucket.data).ok())
.flatten()
}
pub fn as_smpte_offset(bucket: &MetaBucket) -> Option<SmpteOffset> {
(bucket.type_byte == 0x54 && bucket.data.len() == 5).then(|| SmpteOffset {
hours: bucket.data[0],
minutes: bucket.data[1],
seconds: bucket.data[2],
frames: bucket.data[3],
subframes: bucket.data[4],
})
}
pub fn make_text(value: &str) -> MetaBucket {
MetaBucket {
type_byte: 0x01,
data: value.as_bytes().to_vec(),
}
}
pub fn make_track_name(value: &str) -> MetaBucket {
MetaBucket {
type_byte: 0x03,
data: value.as_bytes().to_vec(),
}
}
pub fn make_marker(value: &str) -> MetaBucket {
MetaBucket {
type_byte: 0x06,
data: value.as_bytes().to_vec(),
}
}
pub fn make_smpte_offset(offset: SmpteOffset) -> MetaBucket {
MetaBucket {
type_byte: 0x54,
data: vec![
offset.hours,
offset.minutes,
offset.seconds,
offset.frames,
offset.subframes,
],
}
}