use super::*;
use crate::object::TextStrLike;
pub struct Rendition<'a> {
dict: Dict<'a>,
}
writer!(Rendition: |obj| {
let mut dict = obj.dict();
dict.pair(Name(b"Type"), Name(b"Rendition"));
Self { dict }
});
impl Rendition<'_> {
pub fn subtype(&mut self, kind: RenditionType) -> &mut Self {
self.pair(Name(b"S"), kind.to_name());
self
}
pub fn name(&mut self, text: impl TextStrLike) -> &mut Self {
self.pair(Name(b"N"), text);
self
}
pub fn media_clip(&mut self) -> MediaClip<'_> {
self.insert(Name(b"C")).start()
}
pub fn media_play_params(&mut self) -> MediaPlayParams<'_> {
self.insert(Name(b"P")).start()
}
}
deref!('a, Rendition<'a> => Dict<'a>, dict);
pub struct MediaClip<'a> {
dict: Dict<'a>,
}
writer!(MediaClip: |obj| {
let mut dict = obj.dict();
dict.pair(Name(b"Type"), Name(b"MediaClip"));
Self { dict }
});
impl MediaClip<'_> {
pub fn subtype(&mut self, kind: MediaClipType) -> &mut Self {
self.pair(Name(b"S"), kind.to_name());
self
}
pub fn name(&mut self, text: impl TextStrLike) -> &mut Self {
self.pair(Name(b"N"), text);
self
}
pub fn data(&mut self) -> FileSpec<'_> {
self.insert(Name(b"D")).start()
}
pub fn data_type(&mut self, tf: Str) -> &mut Self {
self.pair(Name(b"CT"), tf);
self
}
pub fn permissions(&mut self) -> MediaPermissions<'_> {
self.insert(Name(b"P")).start()
}
pub fn alt_texts<'b>(
&mut self,
texts: impl IntoIterator<Item = TextStr<'b>>,
) -> &mut Self {
self.insert(Name(b"Alt")).array().items(texts);
self
}
}
deref!('a, MediaClip<'a> => Dict<'a>, dict);
pub struct MediaPlayParams<'a> {
dict: Dict<'a>,
}
writer!(MediaPlayParams: |obj| {
let mut dict = obj.dict();
dict.pair(Name(b"Type"), Name(b"MediaPlayParams"));
Self { dict }
});
impl MediaPlayParams<'_> {
pub fn controls(&mut self, c: bool) -> &mut Self {
self.insert(Name(b"BE")).dict().pair(Name(b"C"), c);
self
}
}
deref!('a, MediaPlayParams<'a> => Dict<'a>, dict);
pub struct MediaPermissions<'a> {
dict: Dict<'a>,
}
writer!(MediaPermissions: |obj| {
let mut dict = obj.dict();
dict.pair(Name(b"Type"), Name(b"MediaPermissions"));
Self { dict }
});
impl MediaPermissions<'_> {
pub fn temp_file(&mut self, tf: TempFileType) -> &mut Self {
self.pair(Name(b"TF"), tf.to_str());
self
}
}
deref!('a, MediaPermissions<'a> => Dict<'a>, dict);
#[derive(Debug, Copy, Clone, Default, Eq, PartialEq, Hash)]
pub enum TempFileType {
#[default]
Never,
Extract,
Access,
Always,
}
impl TempFileType {
pub(crate) fn to_str(self) -> Str<'static> {
match self {
Self::Never => Str(b"TEMPNEVER"),
Self::Extract => Str(b"TEMPEXTRACT"),
Self::Access => Str(b"TEMPACCESS"),
Self::Always => Str(b"TEMPALWAYS"),
}
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
pub enum RenditionType {
Media,
Selector,
}
impl RenditionType {
pub(crate) fn to_name(self) -> Name<'static> {
match self {
Self::Media => Name(b"MR"),
Self::Selector => Name(b"SR"),
}
}
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
pub enum MediaClipType {
Data,
Section,
}
impl MediaClipType {
pub(crate) fn to_name(self) -> Name<'static> {
match self {
Self::Data => Name(b"MCD"),
Self::Section => Name(b"MCS"),
}
}
}