rust_web_server/client_hint/
mod.rs1#[cfg(test)]
2mod tests;
3
4use crate::header::Header;
5
6#[derive(PartialEq, Eq, Clone, Debug)]
7pub struct ClientHint;
8
9impl ClientHint {
10 pub const ACCEPT_CLIENT_HINTS: &'static str = "Accept-CH";
11 pub const CRITICAL_CLIENT_HINTS: &'static str = "Critical-CH";
12
13 pub const USER_AGENT_CPU_ARCHITECTURE: &'static str = "Sec-CH-UA-Arch";
14 pub const USER_AGENT_CPU_BITNESS: &'static str = "Sec-CH-UA-Bitness";
15 pub const USER_AGENT_FULL_BRAND_INFORMATION: &'static str = "Sec-CH-UA-Full-Version-List";
16 pub const USER_AGENT_DEVICE_MODEL: &'static str = "Sec-CH-UA-Model";
17 pub const USER_AGENT_OPERATING_SYSTEM_VERSION: &'static str = "Sec-CH-UA-Platform-Version";
18 pub const NETWORK_DOWNLOAD_SPEED: &'static str = "Downlink"; pub const NETWORK_EFFECTIVE_CONNECTION_TYPE: &'static str = "ECT"; pub const NETWORK_ROUND_TRIP_TIME: &'static str = "RTT"; pub const NETWORK_SAVE_DATA: &'static str = "Save-Data";
22 pub const DEVICE_MEMORY: &'static str = "Device-Memory";
23 pub const PREFERS_REDUCED_MOTION: &'static str = "Sec-CH-Prefers-Reduced-Motion";
24 pub const PREFERS_COLOR_SCHEME: &'static str = "Sec-CH-Prefers-Color-Scheme";
25
26 pub fn get_client_hint_list() -> String {
27 let hint_list = [
28 ClientHint::USER_AGENT_CPU_ARCHITECTURE,
29 ClientHint::USER_AGENT_CPU_BITNESS,
30 ClientHint::USER_AGENT_FULL_BRAND_INFORMATION,
31 ClientHint::USER_AGENT_DEVICE_MODEL,
32 ClientHint::USER_AGENT_OPERATING_SYSTEM_VERSION,
33 ClientHint::NETWORK_DOWNLOAD_SPEED,
34 ClientHint::NETWORK_EFFECTIVE_CONNECTION_TYPE,
35 ClientHint::NETWORK_ROUND_TRIP_TIME,
36 ClientHint::NETWORK_SAVE_DATA,
37 ClientHint::DEVICE_MEMORY,
38 ClientHint::PREFERS_REDUCED_MOTION,
39 ClientHint::PREFERS_COLOR_SCHEME,
40 ];
41 let hint_header_value = hint_list.join(", ");
42 hint_header_value
43 }
44
45 pub fn get_accept_client_hints_header() -> Header {
46 let hint_header_value = ClientHint::get_client_hint_list();
47 let header = Header { name: ClientHint::ACCEPT_CLIENT_HINTS.to_string(), value: hint_header_value.to_string() };
48 header
49 }
50
51 pub fn get_critical_client_hints_header() -> Header {
52 let hint_header_value = ClientHint::get_client_hint_list();
53 let header = Header { name: ClientHint::CRITICAL_CLIENT_HINTS.to_string(), value: hint_header_value.to_string() };
54 header
55 }
56
57 pub fn get_vary_header_value() -> String {
58 let hint_list = [
59 ClientHint::USER_AGENT_CPU_ARCHITECTURE,
60 ClientHint::USER_AGENT_CPU_BITNESS,
61 ClientHint::USER_AGENT_FULL_BRAND_INFORMATION,
62 ClientHint::USER_AGENT_DEVICE_MODEL,
63 ClientHint::USER_AGENT_OPERATING_SYSTEM_VERSION,
64 ClientHint::NETWORK_SAVE_DATA,
65 ClientHint::DEVICE_MEMORY,
66 Header::_UPGRADE_INSECURE_REQUESTS,
67 ClientHint::PREFERS_REDUCED_MOTION,
68 ClientHint::PREFERS_COLOR_SCHEME,
69 ];
70 let vary_client_hint = hint_list.join(", ");
71 vary_client_hint
72 }
73
74}