viewpoint_core/devices/
mod.rs1mod android;
23mod desktop;
24mod ipad;
25mod iphone;
26
27pub use android::*;
28pub use desktop::*;
29pub use ipad::*;
30pub use iphone::*;
31
32use crate::context::ViewportSize;
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
36pub enum BrowserType {
37 #[default]
39 Chromium,
40 Firefox,
42 Webkit,
44}
45
46#[derive(Debug, Clone)]
51pub struct DeviceDescriptor {
52 pub name: &'static str,
54 pub user_agent: &'static str,
56 pub viewport: ViewportSize,
58 pub device_scale_factor: f64,
60 pub is_mobile: bool,
62 pub has_touch: bool,
64 pub default_browser_type: BrowserType,
66}
67
68impl DeviceDescriptor {
69 pub const fn new(
71 name: &'static str,
72 user_agent: &'static str,
73 viewport: ViewportSize,
74 device_scale_factor: f64,
75 is_mobile: bool,
76 has_touch: bool,
77 default_browser_type: BrowserType,
78 ) -> Self {
79 Self {
80 name,
81 user_agent,
82 viewport,
83 device_scale_factor,
84 is_mobile,
85 has_touch,
86 default_browser_type,
87 }
88 }
89}
90
91pub fn all_devices() -> Vec<&'static DeviceDescriptor> {
93 vec![
94 &IPHONE_14_PRO_MAX,
96 &IPHONE_14_PRO,
97 &IPHONE_14,
98 &IPHONE_13_PRO_MAX,
99 &IPHONE_13_PRO,
100 &IPHONE_13,
101 &IPHONE_13_MINI,
102 &IPHONE_12_PRO_MAX,
103 &IPHONE_12_PRO,
104 &IPHONE_12,
105 &IPHONE_12_MINI,
106 &IPHONE_11_PRO_MAX,
107 &IPHONE_11_PRO,
108 &IPHONE_11,
109 &IPHONE_SE_3,
110 &IPHONE_SE,
111 &IPHONE_13_LANDSCAPE,
112 &IPAD_PRO_12_9,
114 &IPAD_PRO_11,
115 &IPAD_AIR,
116 &IPAD,
117 &IPAD_MINI,
118 &IPAD_PRO_11_LANDSCAPE,
119 &PIXEL_7_PRO,
121 &PIXEL_7,
122 &PIXEL_6_PRO,
123 &PIXEL_6,
124 &PIXEL_5,
125 &PIXEL_4,
126 &PIXEL_7_LANDSCAPE,
127 &GALAXY_S23_ULTRA,
129 &GALAXY_S23,
130 &GALAXY_S21,
131 &GALAXY_TAB_S8,
132 &DESKTOP_CHROME,
134 &DESKTOP_CHROME_HIDPI,
135 &DESKTOP_SAFARI,
136 &DESKTOP_FIREFOX,
137 &DESKTOP_EDGE,
138 ]
139}
140
141pub fn find_device(name: &str) -> Option<&'static DeviceDescriptor> {
143 let name_lower = name.to_lowercase();
144 all_devices()
145 .into_iter()
146 .find(|d| d.name.to_lowercase() == name_lower)
147}
148
149#[cfg(test)]
150mod tests;