use tracing::{trace, warn};
use bytes::Bytes;
use crate::DashMpdError;
#[derive(Clone, Debug)]
pub struct VttDocument {
contents: Vec<String>,
warned_binary_contents: bool,
}
impl Default for VttDocument {
fn default() -> Self {
Self::new()
}
}
impl VttDocument {
#[must_use]
pub fn new() -> VttDocument {
VttDocument {
contents: Vec::new(),
warned_binary_contents: false,
}
}
pub fn add_bytes(&mut self, bytes: &Bytes) -> Result<(), DashMpdError> {
if let Ok(s) = str::from_utf8(bytes) {
self.add_content(s)?;
} else {
if !self.warned_binary_contents {
warn!("Ignoring invalid UTF-8 in VTT subs: {}", String::from_utf8_lossy(bytes));
self.warned_binary_contents = true;
}
}
Ok(())
}
pub fn add_content(&mut self, content: &str) -> Result<(), DashMpdError> {
trace!("adding VTT content {content}");
self.contents.push(content.to_string());
Ok(())
}
#[allow(clippy::inherent_to_string)]
pub fn to_string(&mut self) -> String {
self.contents.concat()
}
}