void_core/support/
parse.rs1use crate::shard::PaddingStrategy;
7use crate::{Result, VoidError};
8
9pub fn parse_padding_strategy(padding: Option<&str>) -> Result<PaddingStrategy> {
29 match padding {
30 None | Some("power2") => Ok(PaddingStrategy::PowerOfTwo),
31 Some("none") => Ok(PaddingStrategy::None),
32 Some("buckets") => Ok(PaddingStrategy::Buckets),
33 Some(s) => s.parse::<usize>().map(PaddingStrategy::Fixed).map_err(|_| {
34 VoidError::Config(format!(
35 "invalid padding strategy: {}. Use 'none', 'power2', 'buckets', or a number",
36 s
37 ))
38 }),
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn parse_padding_strategy_defaults_to_power2() {
48 assert_eq!(
49 parse_padding_strategy(None).unwrap(),
50 PaddingStrategy::PowerOfTwo
51 );
52 assert_eq!(
53 parse_padding_strategy(Some("power2")).unwrap(),
54 PaddingStrategy::PowerOfTwo
55 );
56 }
57
58 #[test]
59 fn parse_padding_strategy_none() {
60 assert_eq!(
61 parse_padding_strategy(Some("none")).unwrap(),
62 PaddingStrategy::None
63 );
64 }
65
66 #[test]
67 fn parse_padding_strategy_buckets() {
68 assert_eq!(
69 parse_padding_strategy(Some("buckets")).unwrap(),
70 PaddingStrategy::Buckets
71 );
72 }
73
74 #[test]
75 fn parse_padding_strategy_fixed() {
76 assert_eq!(
77 parse_padding_strategy(Some("1024")).unwrap(),
78 PaddingStrategy::Fixed(1024)
79 );
80 assert_eq!(
81 parse_padding_strategy(Some("0")).unwrap(),
82 PaddingStrategy::Fixed(0)
83 );
84 }
85
86 #[test]
87 fn parse_padding_strategy_invalid() {
88 assert!(parse_padding_strategy(Some("invalid")).is_err());
89 assert!(parse_padding_strategy(Some("-1")).is_err());
90 assert!(parse_padding_strategy(Some("1.5")).is_err());
91 }
92}