atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
27256acf27800b63fd950b95ecc55b2a2486c1c5
1
ssh://brewery@pls.lobotomise.me:33/atagen/jelq.git

Blame: src/http/links.rs

a11497af08aaatagen2026-10-13 12:04 UTC1
use super::{run::RunResource, runs};
4f54028cba69atagen2026-10-14 11:45 UTC2
use crate::{
4f54028cba69atagen2026-10-14 11:45 UTC3
    game::{Branch, Run, SHOP},
4f54028cba69atagen2026-10-14 11:45 UTC4
    link::Link,
4f54028cba69atagen2026-10-14 11:45 UTC5
};
8b8e83329a1datagen2026-10-12 12:01 UTC6
8b8e83329a1datagen2026-10-12 12:01 UTC7
pub fn header(run: &Run) -> String {
8b8e83329a1datagen2026-10-12 12:01 UTC8
    let reach = run.reach();
4f54028cba69atagen2026-10-14 11:45 UTC9
    let mut links = Vec::new();
8b8e83329a1datagen2026-10-12 12:01 UTC10
    let resources: [(&str, &RunResource, bool); 15] = [
8b8e83329a1datagen2026-10-12 12:01 UTC11
        ("", &runs::RUN, true),
8b8e83329a1datagen2026-10-12 12:01 UTC12
        ("floor", &runs::FLOOR, true),
8b8e83329a1datagen2026-10-12 12:01 UTC13
        ("length", &runs::LENGTH, true),
8b8e83329a1datagen2026-10-12 12:01 UTC14
        ("foreskin", &runs::FORESKIN, reach.foreskin),
8b8e83329a1datagen2026-10-12 12:01 UTC15
        ("inventory", &runs::INVENTORY, true),
8b8e83329a1datagen2026-10-12 12:01 UTC16
        ("techniques", &runs::TECHNIQUES, true),
8b8e83329a1datagen2026-10-12 12:01 UTC17
        ("drawer", &runs::DRAWER, reach.drawer),
8b8e83329a1datagen2026-10-12 12:01 UTC18
        ("kitchen", &runs::KITCHEN, reach.kitchen),
a11497af08aaatagen2026-10-13 12:04 UTC19
        ("thread", &runs::THREAD, reach.thread),
8b8e83329a1datagen2026-10-12 12:01 UTC20
        ("grip", &runs::GRIP, true),
8b8e83329a1datagen2026-10-12 12:01 UTC21
        ("shop", &runs::SHOP, reach.shop),
8b8e83329a1datagen2026-10-12 12:01 UTC22
        ("portal", &runs::PORTAL, reach.portal),
8b8e83329a1datagen2026-10-12 12:01 UTC23
        ("elder", &runs::ELDER, reach.elder),
8b8e83329a1datagen2026-10-12 12:01 UTC24
        ("footage", &runs::FOOTAGE, reach.footage),
8b8e83329a1datagen2026-10-12 12:01 UTC25
        ("diagnosis", &runs::DIAGNOSIS, reach.diagnosis),
8b8e83329a1datagen2026-10-12 12:01 UTC26
    ];
8b8e83329a1datagen2026-10-12 12:01 UTC27
    for (rel, target, _) in resources.iter().filter(|(_, _, relevant)| *relevant) {
8b8e83329a1datagen2026-10-12 12:01 UTC28
        let href = if rel.is_empty() {
8b8e83329a1datagen2026-10-12 12:01 UTC29
            run.path("")
8b8e83329a1datagen2026-10-12 12:01 UTC30
        } else {
8b8e83329a1datagen2026-10-12 12:01 UTC31
            run.path(&format!("/{rel}"))
8b8e83329a1datagen2026-10-12 12:01 UTC32
        };
4f54028cba69atagen2026-10-14 11:45 UTC33
        let rel = if rel.is_empty() { "run" } else { rel };
4f54028cba69atagen2026-10-14 11:45 UTC34
        links.push(
4f54028cba69atagen2026-10-14 11:45 UTC35
            Link::jelq(&href, rel)
4f54028cba69atagen2026-10-14 11:45 UTC36
                .allow(&target.resource.allow(run))
4f54028cba69atagen2026-10-14 11:45 UTC37
                .to_string(),
4f54028cba69atagen2026-10-14 11:45 UTC38
        );
8b8e83329a1datagen2026-10-12 12:01 UTC39
    }
8b8e83329a1datagen2026-10-12 12:01 UTC40
    if reach.branch_pending {
4f54028cba69atagen2026-10-14 11:45 UTC41
        for branch in Branch::ALL {
4f54028cba69atagen2026-10-14 11:45 UTC42
            links.push(
4f54028cba69atagen2026-10-14 11:45 UTC43
                Link::jelq(&run.branch_path(branch), "branch")
4f54028cba69atagen2026-10-14 11:45 UTC44
                    .title(branch.title())
4f54028cba69atagen2026-10-14 11:45 UTC45
                    .allow("POST")
4f54028cba69atagen2026-10-14 11:45 UTC46
                    .to_string(),
4f54028cba69atagen2026-10-14 11:45 UTC47
            );
8b8e83329a1datagen2026-10-12 12:01 UTC48
        }
8b8e83329a1datagen2026-10-12 12:01 UTC49
    }
8b8e83329a1datagen2026-10-12 12:01 UTC50
    let run_path = run.path("");
8b8e83329a1datagen2026-10-12 12:01 UTC51
    for technique in run.techniques_now() {
8b8e83329a1datagen2026-10-12 12:01 UTC52
        let name = technique.name();
4f54028cba69atagen2026-10-14 11:45 UTC53
        links.push(
4f54028cba69atagen2026-10-14 11:45 UTC54
            Link::jelq(&format!("{run_path}?technique={name}"), "technique")
4f54028cba69atagen2026-10-14 11:45 UTC55
                .title(name)
4f54028cba69atagen2026-10-14 11:45 UTC56
                .allow("JELQ")
4f54028cba69atagen2026-10-14 11:45 UTC57
                .lubricant(technique.lubricant())
4f54028cba69atagen2026-10-14 11:45 UTC58
                .intensity(technique.intensity())
4f54028cba69atagen2026-10-14 11:45 UTC59
                .to_string(),
4f54028cba69atagen2026-10-14 11:45 UTC60
        );
8b8e83329a1datagen2026-10-12 12:01 UTC61
    }
8b8e83329a1datagen2026-10-12 12:01 UTC62
    if reach.shopping {
8b8e83329a1datagen2026-10-12 12:01 UTC63
        for item in SHOP {
8b8e83329a1datagen2026-10-12 12:01 UTC64
            let Some(price) = run.price(item) else {
8b8e83329a1datagen2026-10-12 12:01 UTC65
                continue;
8b8e83329a1datagen2026-10-12 12:01 UTC66
            };
4f54028cba69atagen2026-10-14 11:45 UTC67
            links.push(
4f54028cba69atagen2026-10-14 11:45 UTC68
                Link::jelq(&run.shop_path(item), "shop-item")
4f54028cba69atagen2026-10-14 11:45 UTC69
                    .title(&format!("{} for {price}", item.slug()))
4f54028cba69atagen2026-10-14 11:45 UTC70
                    .allow("POST")
4f54028cba69atagen2026-10-14 11:45 UTC71
                    .to_string(),
4f54028cba69atagen2026-10-14 11:45 UTC72
            );
8b8e83329a1datagen2026-10-12 12:01 UTC73
        }
8b8e83329a1datagen2026-10-12 12:01 UTC74
    }
4f54028cba69atagen2026-10-14 11:45 UTC75
    links.join(", ")
8b8e83329a1datagen2026-10-12 12:01 UTC76
}