ffmpeg_the_third/codec/
traits.rs1use 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}