anvil/server/beacon/
utils.rs

1use hyper::HeaderMap;
2
3/// Helper function to determine if the Accept header indicates a preference for SSZ (octet-stream)
4/// over JSON.
5pub fn must_be_ssz(headers: &HeaderMap) -> bool {
6    headers
7        .get(axum::http::header::ACCEPT)
8        .and_then(|v| v.to_str().ok())
9        .map(|accept_str| {
10            let mut octet_stream_q = 0.0;
11            let mut json_q = 0.0;
12
13            // Parse each media type in the Accept header
14            for media_type in accept_str.split(',') {
15                let media_type = media_type.trim();
16                let quality = media_type
17                    .split(';')
18                    .find_map(|param| {
19                        let param = param.trim();
20                        if let Some(q) = param.strip_prefix("q=") {
21                            q.parse::<f32>().ok()
22                        } else {
23                            None
24                        }
25                    })
26                    .unwrap_or(1.0); // Default quality factor is 1.0
27
28                if media_type.starts_with("application/octet-stream") {
29                    octet_stream_q = quality;
30                } else if media_type.starts_with("application/json") {
31                    json_q = quality;
32                }
33            }
34
35            // Prefer octet-stream if it has higher quality factor
36            octet_stream_q > json_q
37        })
38        .unwrap_or(false)
39}