use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum CookieSameSite {
Strict,
#[default]
Lax,
None,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum CookiePriority {
Low,
#[default]
Medium,
High,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum CookieSourceScheme {
#[default]
Unset,
NonSecure,
Secure,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Cookie {
pub name: String,
pub value: String,
pub domain: String,
pub path: String,
pub expires: f64,
pub size: i32,
pub http_only: bool,
pub secure: bool,
pub session: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub same_site: Option<CookieSameSite>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<CookiePriority>,
#[serde(skip_serializing_if = "Option::is_none")]
pub same_party: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_scheme: Option<CookieSourceScheme>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_port: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub partition_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub partition_key_opaque: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CookieParam {
pub name: String,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub secure: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub http_only: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub same_site: Option<CookieSameSite>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<CookiePriority>,
#[serde(skip_serializing_if = "Option::is_none")]
pub same_party: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_scheme: Option<CookieSourceScheme>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_port: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub partition_key: Option<String>,
}
impl CookieParam {
pub fn new(name: impl Into<String>, value: impl Into<String>) -> Self {
Self {
name: name.into(),
value: value.into(),
..Default::default()
}
}
#[must_use]
pub fn url(mut self, url: impl Into<String>) -> Self {
self.url = Some(url.into());
self
}
#[must_use]
pub fn domain(mut self, domain: impl Into<String>) -> Self {
self.domain = Some(domain.into());
self
}
#[must_use]
pub fn path(mut self, path: impl Into<String>) -> Self {
self.path = Some(path.into());
self
}
#[must_use]
pub fn secure(mut self, secure: bool) -> Self {
self.secure = Some(secure);
self
}
#[must_use]
pub fn http_only(mut self, http_only: bool) -> Self {
self.http_only = Some(http_only);
self
}
#[must_use]
pub fn same_site(mut self, same_site: CookieSameSite) -> Self {
self.same_site = Some(same_site);
self
}
#[must_use]
pub fn expires(mut self, expires: f64) -> Self {
self.expires = Some(expires);
self
}
}
#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct GetCookiesParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub urls: Option<Vec<String>>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetCookiesResult {
pub cookies: Vec<Cookie>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetCookiesParams {
pub cookies: Vec<CookieParam>,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DeleteCookiesParams {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub partition_key: Option<String>,
}
impl DeleteCookiesParams {
pub fn new(name: impl Into<String>) -> Self {
Self {
name: name.into(),
url: None,
domain: None,
path: None,
partition_key: None,
}
}
#[must_use]
pub fn url(mut self, url: impl Into<String>) -> Self {
self.url = Some(url.into());
self
}
#[must_use]
pub fn domain(mut self, domain: impl Into<String>) -> Self {
self.domain = Some(domain.into());
self
}
#[must_use]
pub fn path(mut self, path: impl Into<String>) -> Self {
self.path = Some(path.into());
self
}
}
#[derive(Debug, Clone, Serialize, Default)]
pub struct ClearBrowserCookiesParams {}