use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct GeneratorRef {
pub rizzma: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct RendererRef {
pub version: String,
pub sha256: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct PosterRef {
pub chunk: String,
pub mime: String,
pub bytes: usize,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Meta {
pub width_px: u32,
pub height_px: u32,
pub alt: Option<String>,
pub title: Option<String>,
pub poster: Option<PosterRef>,
pub animated: bool,
#[serde(default)]
pub duration: f64,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Metadata {
pub schema: u32,
pub schema_supported: bool,
pub generator: GeneratorRef,
pub renderer: RendererRef,
pub meta: Option<Meta>,
pub chunks: Vec<super::container::ChunkRef>,
pub total_bytes: usize,
}
impl Metadata {
#[must_use]
pub fn poster<'a>(&self, bytes: &'a [u8]) -> Option<&'a [u8]> {
super::container::chunk(bytes, &self.chunks, super::container::TAG_PSTR)
}
#[must_use]
pub fn renderable(&self) -> bool {
self.schema_supported
}
}