ffmpeg_the_third/codec/
traits.rs

1use super::codec::UnknownType;
2use super::{decoder, encoder};
3use crate::codec::Id;
4use crate::Codec;
5
6pub trait Decoder<T> {
7    fn decoder(self) -> Option<Codec<T>>;
8}
9
10impl Decoder<UnknownType> for &str {
11    fn decoder(self) -> Option<Codec<UnknownType>> {
12        decoder::find_by_name(self)
13    }
14}
15
16impl Decoder<UnknownType> for Id {
17    fn decoder(self) -> Option<Codec<UnknownType>> {
18        decoder::find(self)
19    }
20}
21
22impl<T> Decoder<T> for Codec<T> {
23    fn decoder(self) -> Option<Codec<T>> {
24        if self.is_decoder() {
25            Some(self)
26        } else {
27            None
28        }
29    }
30}
31
32impl<T> Decoder<T> for Option<Codec<T>> {
33    fn decoder(self) -> Option<Codec<T>> {
34        self.and_then(|c| c.decoder())
35    }
36}
37
38pub trait Encoder<T> {
39    fn encoder(self) -> Option<Codec<T>>;
40}
41
42impl Encoder<UnknownType> for &str {
43    fn encoder(self) -> Option<Codec<UnknownType>> {
44        encoder::find_by_name(self)
45    }
46}
47
48impl Encoder<UnknownType> for Id {
49    fn encoder(self) -> Option<Codec<UnknownType>> {
50        encoder::find(self)
51    }
52}
53
54impl<T> Encoder<T> for Codec<T> {
55    fn encoder(self) -> Option<Codec<T>> {
56        if self.is_encoder() {
57            Some(self)
58        } else {
59            None
60        }
61    }
62}
63
64impl<T> Encoder<T> for Option<Codec<T>> {
65    fn encoder(self) -> Option<Codec<T>> {
66        self.and_then(|c| c.encoder())
67    }
68}