54 lines
1.4 KiB
Rust

use std::collections::HashMap;
use uuid::Uuid;
pub trait Sessions {
fn create_session(&mut self, user_uuid: &str) -> String;
fn delete_session(&mut self, user_uuid: &str);
}
#[derive(Default)]
pub struct SessionsImpl {
uuid_to_session: HashMap<String, String>,
}
impl Sessions for SessionsImpl {
fn create_session(&mut self, user_uuid: &str) -> String {
let session: String = Uuid::new_v4().to_string(); // Create a new session using Uuid::new_v4().
self.uuid_to_session
.insert(user_uuid.to_owned(), session.clone());
session
}
fn delete_session(&mut self, user_uuid: &str) {
self.uuid_to_session.remove(user_uuid);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn should_create_session() {
let mut session_service = SessionsImpl::default();
assert_eq!(session_service.uuid_to_session.len(), 0);
let session = session_service.create_session("123456");
assert_eq!(session_service.uuid_to_session.len(), 1);
assert_eq!(
session_service.uuid_to_session.get("123456").unwrap(),
&session
);
}
#[test]
fn should_delete_session() {
let mut session_service = SessionsImpl::default();
session_service.create_session("123456");
session_service.delete_session("123456");
assert_eq!(session_service.uuid_to_session.len(), 0);
}
}