use crate::sex_dungeon::SharedRequest;
use rand_pcg::Pcg64;
use rand_seeder::Seeder;
#[derive(Clone, Default)]
pub struct GobbledyGook(String);
impl GobbledyGook {
pub fn new<S: AsRef<str>>(initial_seed: S) -> Self {
Self(initial_seed.as_ref().to_owned())
}
pub fn from_request<S: AsRef<str>>(&self, request: &SharedRequest, group: S) -> Pcg64 {
let default_host = axum::http::HeaderValue::from_static("<unknown>");
let host = request
.0
.headers
.get("host")
.unwrap_or(&default_host)
.to_str()
.unwrap();
let path = &request.0.path;
let initial_seed = &self.0;
let serialized_params = request
.0
.params
.iter()
.map(|(k, v)| format!("{k}={v}"))
.collect::<Vec<_>>()
.join("-");
let group = group.as_ref();
let static_seed = format!("{host}/{path}#{initial_seed}{serialized_params}");
Seeder::from(format!("iocaine://{static_seed}/{group}")).into_rng()
}
pub fn from_seed<S: AsRef<str>>(&self, seed: S) -> Pcg64 {
Seeder::from(format!("iocaine://{}/{}", self.0, seed.as_ref())).into_rng()
}
}