1 #[cfg(feature = "serde")] 2 use serde::{Deserialize, Serialize}; 3 4 use crate::MediaTrackSettings; 5 6 /// The settings of a [`MediaStream`][media_stream] object. 7 /// 8 /// # W3C Spec Compliance 9 /// 10 /// There exists no corresponding type in the W3C ["Media Capture and Streams"][media_capture_and_streams_spec] spec. 11 /// 12 /// [media_stream]: https://www.w3.org/TR/mediacapture-streams/#dom-mediastream 13 /// [media_capture_and_streams_spec]: https://www.w3.org/TR/mediacapture-streams 14 #[derive(Default, Debug, Clone, PartialEq)] 15 #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] 16 #[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))] 17 pub(crate) struct MediaStreamSettings { 18 #[cfg_attr( 19 feature = "serde", 20 serde(skip_serializing_if = "core::option::Option::is_none") 21 )] 22 pub audio: Option<MediaTrackSettings>, 23 #[cfg_attr( 24 feature = "serde", 25 serde(skip_serializing_if = "core::option::Option::is_none") 26 )] 27 pub video: Option<MediaTrackSettings>, 28 } 29 30 #[cfg(feature = "serde")] 31 #[cfg(test)] 32 mod serde_tests { 33 use crate::macros::test_serde_symmetry; 34 35 use super::*; 36 37 type Subject = MediaStreamSettings; 38 39 #[test] default()40 fn default() { 41 let subject = Subject::default(); 42 let json = serde_json::json!({}); 43 44 test_serde_symmetry!(subject: subject, json: json); 45 } 46 47 #[test] customized()48 fn customized() { 49 let subject = MediaStreamSettings { 50 audio: Some(MediaTrackSettings::default()), 51 video: None, 52 }; 53 let json = serde_json::json!({ 54 "audio": {} 55 }); 56 57 test_serde_symmetry!(subject: subject, json: json); 58 } 59 } 60