av_data/
value.rs

1//! Option values definitions.
2
3use crate::audiosample::Soniton;
4use crate::pixel::Formaton;
5
6use std::convert::From;
7use std::sync::Arc;
8
9/// Accepted option values.
10#[derive(Debug)]
11pub enum Value<'a> {
12    /// Signed integer value.
13    I64(i64),
14    /// Unsigned integer value.
15    U64(u64),
16    /// Unicode string slice value.
17    Str(&'a str),
18    /// Boolean value.
19    Bool(bool),
20    /// Pair of signed integer values.
21    Pair(i64, i64),
22    /// Image colorspace representation value.
23    Formaton(Arc<Formaton>),
24    /// Audio format definition value.
25    Soniton(Arc<Soniton>),
26}
27
28impl<'a> From<i64> for Value<'a> {
29    fn from(v: i64) -> Self {
30        Value::I64(v)
31    }
32}
33
34impl<'a> From<u64> for Value<'a> {
35    fn from(v: u64) -> Self {
36        Value::U64(v)
37    }
38}
39
40impl<'a> From<&'a str> for Value<'a> {
41    fn from(v: &'a str) -> Self {
42        Value::Str(v)
43    }
44}
45
46impl<'a> From<bool> for Value<'a> {
47    fn from(v: bool) -> Self {
48        Value::Bool(v)
49    }
50}
51
52impl<'a> From<(i64, i64)> for Value<'a> {
53    fn from(v: (i64, i64)) -> Self {
54        Value::Pair(v.0, v.1)
55    }
56}
57
58impl<'a> From<Arc<Formaton>> for Value<'a> {
59    fn from(v: Arc<Formaton>) -> Self {
60        Value::Formaton(v)
61    }
62}
63
64impl<'a> From<Arc<Soniton>> for Value<'a> {
65    fn from(v: Arc<Soniton>) -> Self {
66        Value::Soniton(v)
67    }
68}
69
70#[cfg(test)]
71mod test {
72    use super::*;
73    use std::fmt::Debug;
74
75    fn p<'a, T>(v: T)
76    where
77        T: Into<Value<'a>> + Debug,
78    {
79        println!("{:?}", v);
80    }
81
82    #[test]
83    fn value_str() {
84        p("test");
85    }
86}