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, 93u32, 171u32, 192u32, 238u32, 334u32, 355u32, 376u32, 456u32, 534u32, 612u32, 690u32,
768u32, 846u32, 914u32, 996u32, 1074u32, 1170u32, 1265u32, 1343u32, 1371u32, 1459u32, 1532u32,
1607u32, 1677u32, 1784u32, 1871u32, 1981u32, 2072u32, 2174u32, 2225u32, 2288u32, 2366u32,
2439u32, 2517u32, 2616u32, 2709u32, 2825u32, 2918u32, 2996u32, 3074u32, 3169u32, 3273u32,
3351u32, 3444u32, 3537u32, 3615u32, 3708u32, 3791u32, 3905u32, 3956u32, 4048u32, 4135u32,
4186u32, 4298u32, 4381u32, 4479u32, 4593u32, 4704u32, 4797u32, 4894u32, 4980u32, 5049u32,
5156u32, 5244u32, 5300u32, 5354u32, 5442u32, 5520u32, 5574u32, 5673u32, 5751u32, 5857u32,
5930u32, 5976u32, 6044u32, 6142u32, 6232u32, 6332u32, 6431u32, 6469u32, 6547u32, 6610u32,
6669u32, 6747u32, 6829u32, 6887u32, 6949u32, 7027u32, 7091u32, 7150u32, 7208u32, 7286u32,
7354u32, 7450u32, 7549u32, 7612u32, 7714u32, 7720u32, 7746u32, 7809u32, 7889u32, 7907u32,
7989u32, 8005u32, 8088u32, 8149u32, 8162u32, 8249u32, 8361u32, 8459u32, 8554u32, 8622u32,
8700u32, 8758u32, 8836u32, 8924u32, 9022u32, 9131u32, 9221u32, 9284u32, 9297u32, 9310u32,
9368u32, 9461u32, 9488u32, 9563u32, 9657u32, 9765u32, 9883u32, 9931u32, 10016u32, 10074u32,
10179u32, 10262u32, 10363u32, 10436u32, 10537u32, 10638u32, 10715u32, 10793u32, 10856u32,
10976u32, 10977u32, 11077u32, 11155u32, 11170u32, 11248u32, 11346u32, 11416u32, 11489u32,
11547u32, 11645u32, 11747u32, 11865u32, 11936u32, 11992u32, 12086u32, 12194u32, 12278u32,
12329u32, 12431u32, 12518u32, 12574u32, 12671u32, 12754u32, 12822u32, 12853u32, 12925u32,
13022u32, 13097u32, 13170u32, 13248u32, 13326u32, 13421u32, 13517u32, 13617u32, 13703u32,
13781u32, 13874u32, 13966u32, 14029u32, 14122u32, 14220u32, 14310u32, 14349u32, 14461u32,
14510u32, 14588u32, 14599u32, 14663u32, 14765u32, 14848u32, 14951u32, 15043u32, 15121u32,
15205u32, 15206u32, 15284u32, 15341u32, 15434u32, 15522u32, 15559u32, 15655u32, 15755u32,
15830u32, 15891u32, 15952u32, 16054u32, 16152u32, 16188u32, 16272u32, 16386u32, 16413u32,
16499u32, 16615u32, 16713u32, 16831u32, 16907u32, 16908u32, 16991u32, 17096u32, 17192u32,
17265u32, 17363u32, 17459u32, 17565u32, 17643u32, 17729u32, 17822u32, 17858u32, 17936u32,
18034u32, 18112u32, 18208u32, 18304u32, 18397u32, 18480u32, 18548u32, 18626u32, 18724u32,
18806u32, 18895u32, 18901u32, 19017u32, 19128u32, 19210u32, 19288u32, 19370u32, 19448u32,
19534u32, 19612u32, 19699u32, 19712u32, 19796u32, 19878u32, 19978u32, 20087u32, 20180u32,
20273u32, 20321u32, 20408u32, 20520u32, 20598u32, 20676u32, 20769u32, 20855u32, 20951u32,
21034u32, 21112u32, 21171u32, 21204u32, 21311u32, 21374u32, 21452u32, 21551u32, 21639u32,
21737u32, 21845u32, 21950u32, 22052u32, 22125u32, 22222u32, 22328u32, 22442u32, 22538u32,
22631u32, 22677u32, 22759u32, 22852u32, 22865u32, 22931u32, 23029u32, 23124u32, 23223u32,
23269u32, 23381u32, 23450u32, 23535u32, 23607u32, 23702u32, 23703u32, 23786u32, 23842u32,
23858u32, 23954u32, 24022u32, 24058u32, 24146u32, 24257u32, 24345u32, 24445u32, 24543u32,
24649u32, 24734u32, 24823u32, 24920u32, 25021u32, 25105u32, 25158u32, 25231u32, 25306u32,
25384u32, 25479u32, 25576u32, 25682u32, 25775u32, 25875u32, 25968u32, 26064u32, 26164u32,
26252u32, 26338u32, 26389u32, 26467u32, 26554u32, 26565u32, 26578u32, 26594u32, 26672u32,
26770u32, 26862u32, 26947u32, 27030u32, 27073u32, 27163u32, 27262u32, 27367u32, 27464u32,
27480u32, 27578u32, 27664u32, 27731u32, 27818u32, 27891u32, 27973u32, 28051u32, 28128u32,
28184u32, 28268u32, 28290u32, 28410u32, 28411u32, 28522u32, 28620u32, 28694u32, 28806u32,
28867u32, 28923u32, 28979u32, 29035u32, 29091u32, 29147u32, 29203u32, 29259u32, 29342u32,
29421u32, 29489u32, 29577u32, 29583u32, 29613u32, 29701u32, 29757u32, 29853u32, 29948u32,
29954u32, 30051u32, 30147u32, 30255u32, 30341u32, 30434u32, 30529u32, 30551u32, 30646u32,
30706u32, 30781u32, 30859u32, 30950u32, 30966u32, 31044u32, 31050u32, 31128u32, 31205u32,
31292u32, 31334u32, 31422u32, 31500u32, 31603u32, 31683u32, 31729u32, 31826u32, 31904u32,
31997u32, 32090u32, 32168u32, 32221u32, 32227u32, 32324u32, 32389u32, 32432u32, 32505u32,
32536u32, 32614u32, 32671u32, 32734u32, 32830u32, 32924u32, 33017u32, 33060u32, 33061u32,
33139u32, 33217u32, 33317u32, 33395u32, 33479u32, 33495u32, 33573u32, 33601u32, 33673u32,
33771u32, 33873u32, 33964u32, 33990u32, 34068u32, 34156u32, 34242u32, 34346u32, 34443u32,
34514u32, 34592u32, 34682u32, 34760u32, 34840u32, 34933u32, 34984u32, 35061u32, 35148u32,
35243u32, 35338u32, 35449u32, 35517u32, 35538u32, 35643u32, 35720u32, 35802u32, 35818u32,
35854u32, 35936u32, 36004u32, 36066u32, 36164u32, 36226u32, 36274u32, 36332u32, 36427u32,
36488u32, 36574u32, 36669u32, 36752u32, 36840u32, 36851u32, 36882u32, 36960u32, 37064u32,
37174u32, 37274u32, 37317u32, 37431u32, 37521u32, 37619u32, 37725u32, 37814u32, 37867u32,
37940u32, 38028u32, 38106u32, 38139u32, 38140u32, 38218u32, 38313u32, 38409u32, 38477u32,
38562u32, 38660u32, 38740u32, 38815u32, 38913u32, 38995u32, 39080u32, 39171u32, 39264u32,
39333u32, 39424u32, 39528u32, 39573u32, 39651u32, 39729u32, 39807u32, 39871u32, 39951u32,
40051u32, 40142u32, 40230u32, 40312u32, 40395u32, 40461u32, 40556u32, 40574u32, 40633u32,
40691u32, 40792u32, 40885u32, 40953u32, 41031u32, 41094u32, 41157u32, 41215u32, 41256u32,
41297u32, 41360u32, 41423u32, 41486u32, 41549u32, 41590u32, 41653u32, 41716u32, 41762u32,
41825u32, 41908u32, 42001u32, 42091u32, 42154u32, 42200u32, 42227u32, 42279u32, 42359u32,
42427u32, 42520u32, 42598u32, 42647u32, 42663u32, 42689u32, 42783u32, 42794u32, 42887u32,
42992u32, 43060u32, 43101u32, 43119u32, 43212u32, 43307u32, 43338u32, 43416u32, 43509u32,
43589u32, 43692u32, 43810u32, 43908u32, 44009u32, 44120u32, 44216u32, 44222u32, 44336u32,
44386u32,
];
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]))
}