1use crate::audiosample::Soniton;
4use crate::pixel::Formaton;
5
6use std::convert::From;
7use std::sync::Arc;
8
9#[derive(Debug)]
11pub enum Value<'a> {
12 I64(i64),
14 U64(u64),
16 Str(&'a str),
18 Bool(bool),
20 Pair(i64, i64),
22 Formaton(Arc<Formaton>),
24 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}