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