use crate::data::caniuse::{compression::LazyData, features::Feature};
static KEYS: LazyData<Vec<String>> =
LazyData::new(include_bytes!("caniuse_feature_keys.bin.deflate"));
static RANGES: &[u32] = &[
0u32, 95u32, 173u32, 194u32, 240u32, 338u32, 360u32, 381u32, 462u32, 541u32, 620u32, 698u32,
776u32, 855u32, 924u32, 1006u32, 1084u32, 1182u32, 1279u32, 1359u32, 1387u32, 1477u32, 1550u32,
1625u32, 1695u32, 1804u32, 1892u32, 2004u32, 2096u32, 2198u32, 2249u32, 2312u32, 2390u32,
2464u32, 2542u32, 2643u32, 2738u32, 2854u32, 2949u32, 3027u32, 3105u32, 3202u32, 3308u32,
3387u32, 3482u32, 3576u32, 3654u32, 3748u32, 3832u32, 3947u32, 3998u32, 4092u32, 4179u32,
4230u32, 4343u32, 4428u32, 4528u32, 4642u32, 4753u32, 4848u32, 4947u32, 5033u32, 5102u32,
5211u32, 5299u32, 5355u32, 5409u32, 5497u32, 5575u32, 5629u32, 5730u32, 5810u32, 5916u32,
5989u32, 6036u32, 6104u32, 6203u32, 6293u32, 6393u32, 6494u32, 6532u32, 6610u32, 6673u32,
6732u32, 6810u32, 6892u32, 6951u32, 7013u32, 7091u32, 7155u32, 7203u32, 7261u32, 7339u32,
7407u32, 7505u32, 7605u32, 7669u32, 7772u32, 7778u32, 7804u32, 7868u32, 7948u32, 7967u32,
8049u32, 8065u32, 8149u32, 8211u32, 8224u32, 8312u32, 8426u32, 8526u32, 8623u32, 8692u32,
8770u32, 8828u32, 8906u32, 8995u32, 9095u32, 9205u32, 9295u32, 9358u32, 9371u32, 9384u32,
9442u32, 9536u32, 9563u32, 9639u32, 9733u32, 9841u32, 9959u32, 10007u32, 10094u32, 10152u32,
10258u32, 10342u32, 10443u32, 10516u32, 10617u32, 10718u32, 10795u32, 10873u32, 10936u32,
11056u32, 11057u32, 11159u32, 11237u32, 11252u32, 11330u32, 11430u32, 11500u32, 11573u32,
11631u32, 11731u32, 11835u32, 11953u32, 12024u32, 12080u32, 12174u32, 12283u32, 12368u32,
12419u32, 12522u32, 12609u32, 12666u32, 12764u32, 12847u32, 12916u32, 12947u32, 13019u32,
13118u32, 13195u32, 13268u32, 13346u32, 13424u32, 13519u32, 13617u32, 13719u32, 13807u32,
13885u32, 13978u32, 14070u32, 14133u32, 14226u32, 14326u32, 14417u32, 14456u32, 14568u32,
14617u32, 14695u32, 14706u32, 14770u32, 14874u32, 14957u32, 15062u32, 15155u32, 15233u32,
15317u32, 15318u32, 15396u32, 15454u32, 15548u32, 15637u32, 15674u32, 15772u32, 15874u32,
15951u32, 16014u32, 16077u32, 16179u32, 16279u32, 16315u32, 16399u32, 16515u32, 16542u32,
16629u32, 16747u32, 16847u32, 16965u32, 17041u32, 17042u32, 17126u32, 17232u32, 17330u32,
17403u32, 17503u32, 17601u32, 17708u32, 17787u32, 17875u32, 17970u32, 18006u32, 18084u32,
18184u32, 18262u32, 18360u32, 18458u32, 18552u32, 18637u32, 18707u32, 18785u32, 18885u32,
18967u32, 19056u32, 19062u32, 19180u32, 19291u32, 19373u32, 19452u32, 19534u32, 19612u32,
19698u32, 19776u32, 19865u32, 19878u32, 19962u32, 20044u32, 20146u32, 20255u32, 20350u32,
20445u32, 20494u32, 20581u32, 20694u32, 20772u32, 20850u32, 20944u32, 21030u32, 21128u32,
21211u32, 21289u32, 21348u32, 21383u32, 21490u32, 21553u32, 21631u32, 21732u32, 21822u32,
21922u32, 22032u32, 22138u32, 22240u32, 22314u32, 22413u32, 22521u32, 22637u32, 22735u32,
22830u32, 22876u32, 22958u32, 23053u32, 23066u32, 23132u32, 23232u32, 23329u32, 23430u32,
23476u32, 23589u32, 23658u32, 23743u32, 23815u32, 23911u32, 23912u32, 23997u32, 24053u32,
24069u32, 24167u32, 24235u32, 24271u32, 24360u32, 24473u32, 24561u32, 24663u32, 24762u32,
24868u32, 24954u32, 25043u32, 25142u32, 25245u32, 25329u32, 25382u32, 25457u32, 25532u32,
25610u32, 25706u32, 25805u32, 25913u32, 26008u32, 26109u32, 26204u32, 26301u32, 26403u32,
26491u32, 26577u32, 26628u32, 26706u32, 26795u32, 26806u32, 26819u32, 26835u32, 26913u32,
27013u32, 27105u32, 27192u32, 27277u32, 27320u32, 27411u32, 27510u32, 27616u32, 27715u32,
27731u32, 27829u32, 27917u32, 27984u32, 28072u32, 28145u32, 28227u32, 28307u32, 28384u32,
28441u32, 28525u32, 28547u32, 28667u32, 28668u32, 28779u32, 28879u32, 28954u32, 29068u32,
29129u32, 29187u32, 29244u32, 29301u32, 29358u32, 29415u32, 29472u32, 29529u32, 29613u32,
29692u32, 29760u32, 29849u32, 29855u32, 29885u32, 29975u32, 30031u32, 30129u32, 30226u32,
30232u32, 30330u32, 30428u32, 30538u32, 30624u32, 30719u32, 30816u32, 30838u32, 30935u32,
30995u32, 31072u32, 31150u32, 31241u32, 31257u32, 31335u32, 31341u32, 31419u32, 31496u32,
31585u32, 31627u32, 31717u32, 31795u32, 31899u32, 31980u32, 32026u32, 32125u32, 32203u32,
32298u32, 32393u32, 32471u32, 32524u32, 32530u32, 32627u32, 32692u32, 32737u32, 32810u32,
32841u32, 32919u32, 32973u32, 33037u32, 33135u32, 33229u32, 33324u32, 33369u32, 33370u32,
33448u32, 33526u32, 33628u32, 33706u32, 33790u32, 33807u32, 33886u32, 33914u32, 33986u32,
34086u32, 34189u32, 34280u32, 34308u32, 34386u32, 34475u32, 34561u32, 34667u32, 34766u32,
34837u32, 34915u32, 35005u32, 35084u32, 35166u32, 35260u32, 35311u32, 35388u32, 35475u32,
35572u32, 35669u32, 35780u32, 35849u32, 35870u32, 35976u32, 36053u32, 36135u32, 36151u32,
36187u32, 36269u32, 36337u32, 36400u32, 36500u32, 36562u32, 36610u32, 36668u32, 36765u32,
36826u32, 36912u32, 37007u32, 37090u32, 37180u32, 37191u32, 37222u32, 37300u32, 37406u32,
37518u32, 37620u32, 37663u32, 37778u32, 37870u32, 37970u32, 38077u32, 38168u32, 38221u32,
38296u32, 38385u32, 38463u32, 38496u32, 38497u32, 38576u32, 38671u32, 38769u32, 38837u32,
38923u32, 39023u32, 39104u32, 39179u32, 39277u32, 39359u32, 39445u32, 39538u32, 39633u32,
39702u32, 39795u32, 39901u32, 39946u32, 40024u32, 40102u32, 40181u32, 40245u32, 40325u32,
40427u32, 40520u32, 40608u32, 40690u32, 40775u32, 40841u32, 40938u32, 40956u32, 41015u32,
41073u32, 41175u32, 41270u32, 41338u32, 41416u32, 41479u32, 41542u32, 41600u32, 41641u32,
41682u32, 41745u32, 41808u32, 41871u32, 41934u32, 41975u32, 42038u32, 42101u32, 42147u32,
42210u32, 42295u32, 42390u32, 42480u32, 42543u32, 42589u32, 42610u32, 42662u32, 42742u32,
42810u32, 42905u32, 42983u32, 43032u32, 43048u32, 43075u32, 43169u32, 43180u32, 43273u32,
43380u32, 43448u32, 43489u32, 43507u32, 43601u32, 43698u32, 43729u32, 43807u32, 43902u32,
43982u32, 44086u32, 44205u32, 44305u32, 44406u32, 44517u32, 44615u32, 44621u32, 44736u32,
44786u32,
];
pub fn get_feature_stat(name: &str) -> Option<Feature> {
let index = KEYS.get().binary_search_by(|key| key.as_str().cmp(name)).ok()?;
Some(Feature::new(RANGES[index], RANGES[index + 1]))
}