use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum SameSite {
Strict,
Lax,
None,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Cookie {
pub name: String,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub secure: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expiry: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none", rename = "sameSite")]
pub same_site: Option<SameSite>,
}
impl Cookie {
pub fn new(name: impl Into<String>, value: impl Into<String>) -> Self {
Cookie {
name: name.into(),
value: value.into(),
path: None,
domain: None,
secure: None,
expiry: None,
same_site: None,
}
}
pub fn set_path(&mut self, path: impl Into<String>) {
self.path = Some(path.into());
}
pub fn set_domain(&mut self, domain: impl Into<String>) {
self.domain = Some(domain.into());
}
pub fn set_secure(&mut self, secure: bool) {
self.secure = Some(secure);
}
pub fn set_expiry(&mut self, expiry: i64) {
self.expiry = Some(expiry);
}
pub fn set_same_site(&mut self, same_site: SameSite) {
self.same_site = Some(same_site);
}
}