1
0
Fork 0
mirror of https://github.com/sile/hls_m3u8.git synced 2024-06-17 20:30:33 +00:00

internalize ExtXDiscontinuitySequence

This commit is contained in:
Luro02 2020-03-25 13:21:11 +01:00
parent 99b6b23acc
commit f48876ee07
No known key found for this signature in database
GPG key ID: B66FD4F74501A9CF
2 changed files with 9 additions and 48 deletions

View file

@ -1,50 +1,19 @@
use std::fmt; use std::fmt;
use std::str::FromStr; use std::str::FromStr;
use shorthand::ShortHand;
use crate::types::ProtocolVersion; use crate::types::ProtocolVersion;
use crate::utils::tag; use crate::utils::tag;
use crate::Error; use crate::{Error, RequiredVersion};
use crate::RequiredVersion;
/// Allows synchronization between different renditions of the same /// Allows synchronization between different renditions of the same
/// [`VariantStream`]. /// [`VariantStream`].
/// ///
/// [`VariantStream`]: crate::tags::VariantStream /// [`VariantStream`]: crate::tags::VariantStream
#[derive(ShortHand, Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Ord, PartialOrd)] #[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Ord, PartialOrd, Hash)]
#[shorthand(enable(must_use))] pub(crate) struct ExtXDiscontinuitySequence(pub usize);
pub struct ExtXDiscontinuitySequence {
/// Returns the discontinuity sequence number of
/// the first [`MediaSegment`] that appears in the associated playlist.
///
/// # Example
///
/// ```
/// # use hls_m3u8::tags::ExtXDiscontinuitySequence;
/// let mut discontinuity_sequence = ExtXDiscontinuitySequence::new(5);
///
/// discontinuity_sequence.set_seq_num(10);
/// assert_eq!(discontinuity_sequence.seq_num(), 10);
/// ```
///
/// [`MediaSegment`]: crate::MediaSegment
seq_num: u64,
}
impl ExtXDiscontinuitySequence { impl ExtXDiscontinuitySequence {
pub(crate) const PREFIX: &'static str = "#EXT-X-DISCONTINUITY-SEQUENCE:"; pub(crate) const PREFIX: &'static str = "#EXT-X-DISCONTINUITY-SEQUENCE:";
/// Makes a new [`ExtXDiscontinuitySequence`] tag.
///
/// # Example
///
/// ```
/// # use hls_m3u8::tags::ExtXDiscontinuitySequence;
/// let discontinuity_sequence = ExtXDiscontinuitySequence::new(5);
/// ```
#[must_use]
pub const fn new(seq_num: u64) -> Self { Self { seq_num } }
} }
/// This tag requires [`ProtocolVersion::V1`]. /// This tag requires [`ProtocolVersion::V1`].
@ -55,7 +24,7 @@ impl RequiredVersion for ExtXDiscontinuitySequence {
impl fmt::Display for ExtXDiscontinuitySequence { impl fmt::Display for ExtXDiscontinuitySequence {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// //
write!(f, "{}{}", Self::PREFIX, self.seq_num) write!(f, "{}{}", Self::PREFIX, self.0)
} }
} }
@ -66,7 +35,7 @@ impl FromStr for ExtXDiscontinuitySequence {
let input = tag(input, Self::PREFIX)?; let input = tag(input, Self::PREFIX)?;
let seq_num = input.parse().map_err(|e| Error::parse_int(input, e))?; let seq_num = input.parse().map_err(|e| Error::parse_int(input, e))?;
Ok(Self::new(seq_num)) Ok(Self(seq_num))
} }
} }
@ -78,7 +47,7 @@ mod test {
#[test] #[test]
fn test_display() { fn test_display() {
assert_eq!( assert_eq!(
ExtXDiscontinuitySequence::new(123).to_string(), ExtXDiscontinuitySequence(123).to_string(),
"#EXT-X-DISCONTINUITY-SEQUENCE:123".to_string() "#EXT-X-DISCONTINUITY-SEQUENCE:123".to_string()
); );
} }
@ -86,7 +55,7 @@ mod test {
#[test] #[test]
fn test_required_version() { fn test_required_version() {
assert_eq!( assert_eq!(
ExtXDiscontinuitySequence::new(123).required_version(), ExtXDiscontinuitySequence(123).required_version(),
ProtocolVersion::V1 ProtocolVersion::V1
) )
} }
@ -94,7 +63,7 @@ mod test {
#[test] #[test]
fn test_parser() { fn test_parser() {
assert_eq!( assert_eq!(
ExtXDiscontinuitySequence::new(123), ExtXDiscontinuitySequence(123),
"#EXT-X-DISCONTINUITY-SEQUENCE:123".parse().unwrap() "#EXT-X-DISCONTINUITY-SEQUENCE:123".parse().unwrap()
); );
@ -103,12 +72,4 @@ mod test {
Err(Error::parse_int("12A", "12A".parse::<u64>().expect_err(""))) Err(Error::parse_int("12A", "12A".parse::<u64>().expect_err("")))
); );
} }
#[test]
fn test_seq_num() {
let mut sequence = ExtXDiscontinuitySequence::new(123);
assert_eq!(sequence.seq_num(), 123);
sequence.set_seq_num(1);
assert_eq!(sequence.seq_num(), 1);
}
} }

View file

@ -5,7 +5,7 @@ mod media_sequence;
mod playlist_type; mod playlist_type;
mod target_duration; mod target_duration;
pub use discontinuity_sequence::*; pub(crate) use discontinuity_sequence::*;
pub(crate) use end_list::*; pub(crate) use end_list::*;
pub(crate) use i_frames_only::*; pub(crate) use i_frames_only::*;
pub use playlist_type::*; pub use playlist_type::*;