use std::sync::Arc;
use rama_http::header::USER_AGENT;
use serde::{Deserialize, Serialize};
use crate::{PlatformKind, UserAgentKind};
use super::JsProfile;
#[derive(Debug, Clone)]
pub struct UserAgentProfile {
pub ua_kind: UserAgentKind,
pub ua_version: Option<usize>,
pub platform: Option<PlatformKind>,
pub http: Arc<super::HttpProfile>,
#[cfg(feature = "tls")]
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub tls: Arc<super::TlsProfile>,
pub runtime: Option<Arc<UserAgentRuntimeProfile>>,
}
impl UserAgentProfile {
pub fn ua_str(&self) -> Option<&str> {
if let Some(ua) = self
.http
.h1
.headers
.navigate
.get(USER_AGENT)
.and_then(|v| v.to_str().ok())
{
Some(ua)
} else if let Some(ua) = self
.http
.h2
.headers
.navigate
.get(USER_AGENT)
.and_then(|v| v.to_str().ok())
{
Some(ua)
} else {
None
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserAgentRuntimeProfile {
pub source_info: Option<UserAgentSourceInfo>,
pub js_info: Option<JsProfile>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UserAgentSourceInfo {
#[serde(alias = "deviceName")]
pub device_name: Option<String>,
#[serde(alias = "os")]
pub os: Option<String>,
#[serde(alias = "osVersion")]
pub os_version: Option<String>,
#[serde(alias = "browserName")]
pub browser_name: Option<String>,
#[serde(alias = "browserVersion")]
pub browser_version: Option<String>,
}