use serde::{Deserialize, Serialize};
use super::surface::Strategy;
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct SurfaceCfg {
pub strategy: Option<Strategy>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct UaSpec {
pub ua_string: Option<String>,
pub platform: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct WebglSpec {
pub strategy: Option<Strategy>,
pub unmasked_vendor: Option<String>,
pub unmasked_renderer: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct FontSpec {
pub strategy: Option<Strategy>,
pub available: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct WebrtcSpec {
pub strategy: Option<Strategy>,
pub fake_ip: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
pub struct HardwareSpec {
pub strategy: Option<Strategy>,
pub battery_level: Option<f64>,
pub media_devices: Option<u32>,
pub speech_voices: Option<Vec<String>>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn specs_round_trip_json() {
let w = WebglSpec {
strategy: Some(Strategy::Value),
unmasked_vendor: Some("Google Inc. (NVIDIA)".into()),
unmasked_renderer: Some("ANGLE (NVIDIA, ...)".into()),
};
let s = serde_json::to_string(&w).unwrap();
let back: WebglSpec = serde_json::from_str(&s).unwrap();
assert_eq!(w, back);
}
#[test]
fn empty_spec_omits_nothing_required() {
let f = FontSpec::default();
assert!(f.available.is_none());
}
}