#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(not(feature = "std"))]
use alloc::{format, vec::Vec};
use super::Event;
#[cfg(debug_assertions)]
use core::ops::Range;
impl Event<'_> {
#[must_use]
pub fn to_ass_string(&self) -> alloc::string::String {
let event_type_str = self.event_type.as_str();
format!(
"{event_type_str}: {},{},{},{},{},{},{},{},{},{}",
self.layer,
self.start,
self.end,
self.style,
self.name,
self.margin_l,
self.margin_r,
self.margin_v,
self.effect,
self.text
)
}
#[must_use]
pub fn to_ass_string_with_format(&self, format: &[&str]) -> alloc::string::String {
let event_type_str = self.event_type.as_str();
let mut field_values = Vec::with_capacity(format.len());
for field in format {
let value = match *field {
"Layer" => self.layer,
"Start" => self.start,
"End" => self.end,
"Style" => self.style,
"Name" | "Actor" => self.name,
"MarginL" => self.margin_l,
"MarginR" => self.margin_r,
"MarginV" => self.margin_v,
"MarginT" => self.margin_t.unwrap_or("0"),
"MarginB" => self.margin_b.unwrap_or("0"),
"Effect" => self.effect,
"Text" => self.text,
_ => "", };
field_values.push(value);
}
format!("{event_type_str}: {}", field_values.join(","))
}
#[cfg(debug_assertions)]
#[must_use]
pub fn validate_spans(&self, source_range: &Range<usize>) -> bool {
let spans = [
self.layer,
self.start,
self.end,
self.style,
self.name,
self.margin_l,
self.margin_r,
self.margin_v,
self.effect,
self.text,
];
spans.iter().all(|span| {
let ptr = span.as_ptr() as usize;
source_range.contains(&ptr)
})
}
}