iocaine 3.0.0

The deadliest poison known to AI
Documentation
// SPDX-FileCopyrightText: 2025 Gergely Nagy
// SPDX-FileContributor: Gergely Nagy
//
// SPDX-License-Identifier: MIT

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()
    }
}