1 #[cfg(feature = "serde")]
2 use serde::{Deserialize, Serialize};
3 
4 /// A capability specifying a range of supported values.
5 ///
6 /// # W3C Spec Compliance
7 ///
8 /// Corresponds to [`sequence<T>`][sequence] from the W3C ["WebIDL"][webidl_spec] spec:
9 ///
10 /// | Rust                                      | W3C                   |
11 /// | ----------------------------------------- | --------------------- |
12 /// | `MediaTrackValueSequenceCapability<bool>` | `sequence<boolean>`   |
13 /// | `MediaTrackValueSequenceCapability<String>`  | `sequence<DOMString>` |
14 ///
15 /// [sequence]: https://webidl.spec.whatwg.org/#idl-sequence
16 /// [webidl_spec]: https://webidl.spec.whatwg.org/
17 #[derive(Default, Debug, Clone, PartialEq)]
18 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19 #[cfg_attr(feature = "serde", serde(transparent))]
20 pub struct MediaTrackValueSequenceCapability<T> {
21     pub values: Vec<T>,
22 }
23 
24 impl<T> From<T> for MediaTrackValueSequenceCapability<T> {
25     fn from(value: T) -> Self {
26         Self {
27             values: vec![value],
28         }
29     }
30 }
31 
32 impl<T> From<Vec<T>> for MediaTrackValueSequenceCapability<T> {
33     fn from(values: Vec<T>) -> Self {
34         Self { values }
35     }
36 }
37 
38 #[cfg(feature = "serde")]
39 #[cfg(test)]
40 mod serde_tests {
41     use crate::macros::test_serde_symmetry;
42 
43     use super::*;
44 
45     type Subject = MediaTrackValueSequenceCapability<i64>;
46 
47     #[test]
48     fn customized() {
49         let subject = Subject {
50             values: vec![1, 2, 3],
51         };
52         let json = serde_json::json!([1, 2, 3]);
53 
54         test_serde_symmetry!(subject: subject, json: json);
55     }
56 }
57