polyester/codecs/
analytics.rs1use crate::errors::{Error, Result};
4use crate::proto::chain::analytics::v1::ChainAnalyticsRange;
5
6pub fn resolve_analytics_range(range_key: &str) -> Result<ChainAnalyticsRange> {
7 match range_key.trim().to_ascii_lowercase().as_str() {
8 "1d" => Ok(ChainAnalyticsRange::Day1),
9 "7d" => Ok(ChainAnalyticsRange::Day7),
10 "30d" => Ok(ChainAnalyticsRange::Day30),
11 "90d" => Ok(ChainAnalyticsRange::Day90),
12 "180d" => Ok(ChainAnalyticsRange::Day180),
13 "365d" => Ok(ChainAnalyticsRange::Day365),
14 _ => Err(Error::validation(
15 "range must be one of '1d', '7d', '30d', '90d', '180d', or '365d'",
16 )),
17 }
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn resolves_known_ranges() {
26 assert_eq!(
27 resolve_analytics_range("7d").unwrap(),
28 ChainAnalyticsRange::Day7
29 );
30 assert_eq!(
31 resolve_analytics_range("365D").unwrap(),
32 ChainAnalyticsRange::Day365
33 );
34 }
35
36 #[test]
37 fn rejects_unknown_range() {
38 assert!(resolve_analytics_range("2d").is_err());
39 }
40}