#![deny(
missing_docs,
missing_debug_implementations,
missing_copy_implementations,
trivial_casts,
trivial_numeric_casts,
unsafe_code,
unstable_features,
unused_import_braces,
unused_qualifications
)]
extern crate combine;
extern crate encoding_rs;
extern crate failure;
extern crate itertools;
extern crate vobsub;
#[macro_use]
pub mod errors;
mod formats;
pub mod timetypes;
use errors::*;
pub use formats::idx::IdxFile;
pub use formats::microdvd::MdvdFile;
pub use formats::srt::SrtFile;
pub use formats::ssa::SsaFile;
pub use formats::vobsub::VobFile;
pub use formats::{
get_subtitle_format, get_subtitle_format_by_extension, get_subtitle_format_by_extension_err, get_subtitle_format_err,
is_valid_extension_for_subtitle_format, parse_bytes, parse_str,
};
pub use formats::{SubtitleFile, SubtitleFormat};
use timetypes::TimeSpan;
pub trait SubtitleFileInterface {
fn get_subtitle_entries(&self) -> Result<Vec<SubtitleEntry>>;
fn update_subtitle_entries(&mut self, i: &[SubtitleEntry]) -> Result<()>;
fn to_data(&self) -> Result<Vec<u8>>;
}
#[derive(Debug)]
pub struct SubtitleEntry {
pub timespan: TimeSpan,
pub line: Option<String>,
}
impl SubtitleEntry {
fn new(timespan: TimeSpan, line: String) -> SubtitleEntry {
SubtitleEntry {
timespan: timespan,
line: Some(line),
}
}
}
impl From<TimeSpan> for SubtitleEntry {
fn from(f: TimeSpan) -> SubtitleEntry {
SubtitleEntry { timespan: f, line: None }
}
}