webrtc_constraints/
setting.rs1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, PartialEq)]
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16#[cfg_attr(feature = "serde", serde(untagged))]
17pub enum MediaTrackSetting {
18 Bool(bool),
20 Integer(i64),
22 Float(f64),
24 String(String),
26}
27
28impl std::fmt::Display for MediaTrackSetting {
29 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30 match self {
31 Self::Bool(setting) => f.write_fmt(format_args!("{:?}", setting)),
32 Self::Integer(setting) => f.write_fmt(format_args!("{:?}", setting)),
33 Self::Float(setting) => f.write_fmt(format_args!("{:?}", setting)),
34 Self::String(setting) => f.write_fmt(format_args!("{:?}", setting)),
35 }
36 }
37}
38
39impl From<bool> for MediaTrackSetting {
40 fn from(setting: bool) -> Self {
41 Self::Bool(setting)
42 }
43}
44
45impl From<i64> for MediaTrackSetting {
46 fn from(setting: i64) -> Self {
47 Self::Integer(setting)
48 }
49}
50
51impl From<f64> for MediaTrackSetting {
52 fn from(setting: f64) -> Self {
53 Self::Float(setting)
54 }
55}
56
57impl From<String> for MediaTrackSetting {
58 fn from(setting: String) -> Self {
59 Self::String(setting)
60 }
61}
62
63impl<'a> From<&'a str> for MediaTrackSetting {
64 fn from(setting: &'a str) -> Self {
65 Self::String(setting.to_owned())
66 }
67}
68
69#[cfg(test)]
70mod tests {
71 use super::*;
72
73 type Subject = MediaTrackSetting;
74
75 mod from {
76 use super::*;
77
78 #[test]
79 fn bool() {
80 let actual = Subject::from(true);
81 let expected = Subject::Bool(true);
82
83 assert_eq!(actual, expected);
84 }
85
86 #[test]
87 fn integer() {
88 let actual = Subject::from(42);
89 let expected = Subject::Integer(42);
90
91 assert_eq!(actual, expected);
92 }
93
94 #[test]
95 fn float() {
96 let actual = Subject::from(4.2);
97 let expected = Subject::Float(4.2);
98
99 assert_eq!(actual, expected);
100 }
101
102 #[test]
103 fn string() {
104 let actual = Subject::from("string".to_owned());
105 let expected = Subject::String("string".to_owned());
106
107 assert_eq!(actual, expected);
108 }
109 }
110
111 #[test]
112 fn to_string() {
113 assert_eq!(Subject::from(true).to_string(), "true");
114 assert_eq!(Subject::from(42).to_string(), "42");
115 assert_eq!(Subject::from(4.2).to_string(), "4.2");
116 assert_eq!(Subject::from("string".to_owned()).to_string(), "\"string\"");
117 }
118}
119
120#[cfg(feature = "serde")]
121#[cfg(test)]
122mod serde_tests {
123 use crate::macros::test_serde_symmetry;
124
125 use super::*;
126
127 type Subject = MediaTrackSetting;
128
129 #[test]
130 fn bool() {
131 let subject = Subject::Bool(true);
132 let json = serde_json::json!(true);
133
134 test_serde_symmetry!(subject: subject, json: json);
135 }
136
137 #[test]
138 fn integer() {
139 let subject = Subject::Integer(42);
140 let json = serde_json::json!(42);
141
142 test_serde_symmetry!(subject: subject, json: json);
143 }
144
145 #[test]
146 fn float() {
147 let subject = Subject::Float(4.2);
148 let json = serde_json::json!(4.2);
149
150 test_serde_symmetry!(subject: subject, json: json);
151 }
152
153 #[test]
154 fn string() {
155 let subject = Subject::String("string".to_owned());
156 let json = serde_json::json!("string");
157
158 test_serde_symmetry!(subject: subject, json: json);
159 }
160}