#[derive(Debug)]
pub struct Cookie {
pub name: String,
pub value: String,
pub expires: Option<String>
}
#[allow(dead_code)]
impl Cookie {
pub fn new(name: String, value: String) -> Self {
Cookie {
name,
value,
expires: None
}
}
pub fn set_expires(&mut self, expires: String) {
self.expires = Some(expires);
}
pub fn build(&self) -> String {
let mut cookie = String::new();
cookie.push_str(&format!("{}={}; ", self.name, self.value));
if let Some(expires) = &self.expires {
cookie.push_str(&format!("Expires={}; ", expires));
}
cookie
}
}
#[derive(Debug)]
pub struct CookieBuilder {
pub cookies: Vec<Cookie>,
pub expires: Option<String>,
}
#[allow(dead_code)]
impl CookieBuilder {
pub fn new() -> Self {
CookieBuilder {
cookies: Vec::new(),
expires: None
}
}
pub fn add_cookie(&mut self, cookie: Cookie) {
self.cookies.push(cookie);
}
pub fn set_expires(&mut self, expires: String) {
self.expires = Some(expires);
}
pub fn build(&self) -> String {
let mut cookies = String::new();
for cookie in &self.cookies {
cookies.push_str(&cookie.build());
}
if let Some(expires) = &self.expires {
cookies.push_str(&format!("Expires={}; ", expires));
}
cookies
}
}