fframes 1.0.0

A video generation framework
#![allow(clippy::from_over_into)]
use crate::{AudioTimelineFrames, AudioTimelineUnit, ResolvedAudioMap, ResolvedScenesTimeline};

#[derive(Clone, serde::Serialize)]
pub struct NamedRange {
    pub name: String,
    pub start: usize,
    pub end: usize,
}

impl Into<NamedRange> for (String, std::ops::Range<usize>) {
    fn into(self) -> NamedRange {
        NamedRange {
            name: self.0,
            start: self.1.start,
            end: self.1.end,
        }
    }
}

impl Into<Vec<NamedRange>> for ResolvedAudioMap<AudioTimelineFrames> {
    fn into(self) -> Vec<NamedRange> {
        self.0
            .into_iter()
            .map(|track| NamedRange {
                name: track.file,
                start: track.range.start.as_usize(),
                end: track.range.end.as_usize(),
            })
            .collect::<Vec<_>>()
    }
}

impl Into<Vec<NamedRange>> for &ResolvedScenesTimeline<'_> {
    fn into(self) -> Vec<NamedRange> {
        self.iter()
            .map(|(range, _, scene)| NamedRange {
                name: scene.name().to_string(),
                start: range.start,
                end: range.end,
            })
            .collect::<Vec<_>>()
    }
}