use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[non_exhaustive]
pub struct Frameset {
pub url_template: String,
pub frame_width: u32,
pub frame_height: u32,
pub page_count: u32,
pub total_count: u32,
pub duration_per_frame: u32,
pub frames_per_page_x: u32,
pub frames_per_page_y: u32,
}
pub struct FramesetUrls<'a> {
frameset: &'a Frameset,
i: u32,
}
impl Frameset {
pub fn urls(&self) -> FramesetUrls {
FramesetUrls {
frameset: self,
i: 0,
}
}
}
impl Iterator for FramesetUrls<'_> {
type Item = String;
fn next(&mut self) -> Option<Self::Item> {
if self.i < self.frameset.page_count {
let url = self
.frameset
.url_template
.replace("$M", &self.i.to_string());
self.i += 1;
Some(url)
} else {
None
}
}
}