const KNOWN_CONTAINER_NAMES: &[&str] = &[
"CS:GO Weapon Case",
"eSports 2013 Case",
"Operation Bravo Case",
"CS:GO Weapon Case 2",
"eSports 2013 Winter Case",
"Winter Offensive Weapon Case",
"CS:GO Weapon Case 3",
"Operation Phoenix Weapon Case",
"Huntsman Weapon Case",
"Operation Breakout Weapon Case",
"eSports 2014 Summer Case",
"Operation Vanguard Weapon Case",
"Chroma Case",
"Chroma 2 Case",
"Falchion Case",
"Shadow Case",
"Revolver Case",
"Operation Wildfire Case",
"Chroma 3 Case",
"Gamma Case",
"Gamma 2 Case",
"Glove Case",
"Spectrum Case",
"Operation Hydra Case",
"Spectrum 2 Case",
"Clutch Case",
"CS20 Case",
"Danger Zone Case",
"Horizon Case",
"Prisma Case",
"Shattered Web Case",
"Prisma 2 Case",
"Fracture Case",
"Operation Broken Fang Case",
"Snakebite Case",
"Operation Riptide Case",
"Dreams & Nightmares Case",
"Recoil Case",
"Revolution Case",
"Kilowatt Case",
"Gallery Case",
"Sealed Genesis Terminal",
"Sticker Capsule",
"Sticker Capsule 2",
"Community Sticker Capsule 1",
];
pub fn is_inventory_container_item<'a, I>(item_type: &str, item_name: &str, tags: I) -> bool
where
I: IntoIterator<Item = (&'a str, &'a str)>,
{
if item_type == "Base Grade Container" {
return true;
}
if tags.into_iter().any(|(category, localized_tag_name)| category == "Type" && localized_tag_name == "Container") {
return true;
}
KNOWN_CONTAINER_NAMES.contains(&item_name)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn detects_via_item_type() {
assert!(is_inventory_container_item("Base Grade Container", "Some Random Name", std::iter::empty::<(&str, &str)>()));
}
#[test]
fn detects_via_tag() {
assert!(is_inventory_container_item("", "Some Random Name", [("Type", "Container")]));
assert!(!is_inventory_container_item("", "Some Random Name", [("Quality", "Container")]));
assert!(!is_inventory_container_item("", "Some Random Name", [("Type", "Weapon")]));
}
#[test]
fn detects_via_single_canonical_tag() {
let tags = [
("Rarity", "Mil-Spec"), ("Quality", "Normal"), ("Type", "Container"), ("Weapon", "AK-47"), ];
assert!(is_inventory_container_item("", "Anything", tags));
}
#[test]
fn detects_via_known_name() {
assert!(is_inventory_container_item("", "Kilowatt Case", std::iter::empty::<(&str, &str)>()));
assert!(!is_inventory_container_item("", "AK-47 | Redline", std::iter::empty::<(&str, &str)>()));
}
#[test]
fn rejects_non_container() {
assert!(!is_inventory_container_item("Rifle", "AK-47 | Redline", [("Type", "Weapon")]));
}
}