rush_sync_server/commands/
parsing.rs1#[derive(Debug)]
4pub enum BulkMode {
5 Single(String),
6 Range(u32, u32),
7 All,
8 Invalid(String),
9}
10
11pub fn parse_bulk_args(args: &[&str]) -> BulkMode {
14 if args.len() != 1 {
15 return BulkMode::Invalid("Too many arguments".to_string());
16 }
17
18 let arg = args[0];
19
20 if arg.eq_ignore_ascii_case("all") {
21 return BulkMode::All;
22 }
23
24 if let Some((start_str, end_str)) = arg.split_once('-') {
26 match (start_str.parse::<u32>(), end_str.parse::<u32>()) {
27 (Ok(start), Ok(end)) => {
28 if start == 0 || end == 0 {
29 return BulkMode::Invalid("Range indices must be > 0".to_string());
30 }
31 if start > end {
32 return BulkMode::Invalid("Start must be <= end in range".to_string());
33 }
34 if end - start > 500 {
35 return BulkMode::Invalid("Maximum 500 servers in range operation".to_string());
36 }
37 BulkMode::Range(start, end)
38 }
39 _ => BulkMode::Single(arg.to_string()),
40 }
41 } else {
42 BulkMode::Single(arg.to_string())
43 }
44}