xref: /webrtc/constraints/src/settings/stream.rs (revision 1ded8848)
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