steam_user/utils/
container.rs1const KNOWN_CONTAINER_NAMES: &[&str] = &[
17 "CS:GO Weapon Case",
19 "eSports 2013 Case",
20 "Operation Bravo Case",
21 "CS:GO Weapon Case 2",
22 "eSports 2013 Winter Case",
23 "Winter Offensive Weapon Case",
24 "CS:GO Weapon Case 3",
25 "Operation Phoenix Weapon Case",
26 "Huntsman Weapon Case",
27 "Operation Breakout Weapon Case",
28 "eSports 2014 Summer Case",
29 "Operation Vanguard Weapon Case",
30 "Chroma Case",
31 "Chroma 2 Case",
32 "Falchion Case",
33 "Shadow Case",
34 "Revolver Case",
35 "Operation Wildfire Case",
36 "Chroma 3 Case",
37 "Gamma Case",
38 "Gamma 2 Case",
39 "Glove Case",
40 "Spectrum Case",
41 "Operation Hydra Case",
42 "Spectrum 2 Case",
43 "Clutch Case",
44 "CS20 Case",
45 "Danger Zone Case",
46 "Horizon Case",
47 "Prisma Case",
48 "Shattered Web Case",
49 "Prisma 2 Case",
50 "Fracture Case",
51 "Operation Broken Fang Case",
52 "Snakebite Case",
53 "Operation Riptide Case",
54 "Dreams & Nightmares Case",
55 "Recoil Case",
56 "Revolution Case",
57 "Kilowatt Case",
58 "Gallery Case",
59 "Sealed Genesis Terminal",
61 "Sticker Capsule",
63 "Sticker Capsule 2",
64 "Community Sticker Capsule 1",
65];
66
67pub fn is_inventory_container_item<'a, I>(item_type: &str, item_name: &str, tags: I) -> bool
88where
89 I: IntoIterator<Item = (&'a str, &'a str)>,
90{
91 if item_type == "Base Grade Container" {
92 return true;
93 }
94 if tags.into_iter().any(|(category, localized_tag_name)| category == "Type" && localized_tag_name == "Container") {
95 return true;
96 }
97 KNOWN_CONTAINER_NAMES.contains(&item_name)
98}
99
100#[cfg(test)]
101mod tests {
102 use super::*;
103
104 #[test]
105 fn detects_via_item_type() {
106 assert!(is_inventory_container_item("Base Grade Container", "Some Random Name", std::iter::empty::<(&str, &str)>()));
107 }
108
109 #[test]
110 fn detects_via_tag() {
111 assert!(is_inventory_container_item("", "Some Random Name", [("Type", "Container")]));
112 assert!(!is_inventory_container_item("", "Some Random Name", [("Quality", "Container")]));
113 assert!(!is_inventory_container_item("", "Some Random Name", [("Type", "Weapon")]));
114 }
115
116 #[test]
119 fn detects_via_single_canonical_tag() {
120 let tags = [
122 ("Rarity", "Mil-Spec"), ("Quality", "Normal"), ("Type", "Container"), ("Weapon", "AK-47"), ];
127 assert!(is_inventory_container_item("", "Anything", tags));
128 }
129
130 #[test]
131 fn detects_via_known_name() {
132 assert!(is_inventory_container_item("", "Kilowatt Case", std::iter::empty::<(&str, &str)>()));
133 assert!(!is_inventory_container_item("", "AK-47 | Redline", std::iter::empty::<(&str, &str)>()));
134 }
135
136 #[test]
137 fn rejects_non_container() {
138 assert!(!is_inventory_container_item("Rifle", "AK-47 | Redline", [("Type", "Weapon")]));
139 }
140}