use rand::Rng;
use serde::Serialize;
use sha2::{Digest, Sha256};
#[derive(Debug, Serialize)]
pub struct VoiceflowSession {
#[serde(rename = "sessionID")]
session_id: String,
#[serde(rename = "userID")]
user_id: String,
}
impl VoiceflowSession {
fn new(session_id: String, user_id: String) -> Self{
Self{
session_id,
user_id
}
}
pub(crate) fn from_chat_id(chat_id: &str) -> Self {
fn hash(input: &str, suffix: &str) -> String {
let mut hasher = Sha256::new();
hasher.update(input);
hasher.update(suffix);
format!("{:x}", hasher.finalize())
}
let mut rng = rand::thread_rng();
let random_suffix: u64 = rng.gen();
let session_id = hash(chat_id, &format!("session_id_{}", random_suffix));
let user_id = hash(chat_id, &format!("user_id_{}", random_suffix));
Self::new(session_id, user_id)
}
}