| Crates.io | moosicbox_parsing_utils |
| lib.rs | moosicbox_parsing_utils |
| version | 0.1.4 |
| created_at | 2025-05-07 13:18:32.240503+00 |
| updated_at | 2025-07-21 19:20:14.882257+00 |
| description | MoosicBox Parsing utils package |
| homepage | |
| repository | https://github.com/MoosicBox/MoosicBox |
| max_upload_size | |
| id | 1663824 |
| size | 10,121 |
Utilities for parsing and processing integer sequences and ranges.
The Parsing Utils package provides:
Add this to your Cargo.toml:
[dependencies]
parsing_utils = { path = "../parsing_utils" }
use parsing_utils::integer_range::parse_integer_sequences;
// Parse comma-separated integers
let result = parse_integer_sequences("1,2,3,4,5")?;
assert_eq!(result, vec![1, 2, 3, 4, 5]);
// Parse single integer
let result = parse_integer_sequences("42")?;
assert_eq!(result, vec![42]);
// Handle parsing errors
match parse_integer_sequences("1,abc,3") {
Ok(numbers) => println!("Parsed: {:?}", numbers),
Err(e) => println!("Parse error: {}", e),
}
use parsing_utils::integer_range::parse_integer_ranges;
// Parse simple range
let result = parse_integer_ranges("1-5")?;
assert_eq!(result, vec![1, 2, 3, 4, 5]);
// Parse comma-separated sequences (no ranges)
let result = parse_integer_ranges("1,3,5")?;
assert_eq!(result, vec![1, 3, 5]);
// Parse complex ranges with sequences
let result = parse_integer_ranges("1,3-5,8,10-12")?;
assert_eq!(result, vec![1, 3, 4, 5, 8, 10, 11, 12]);
use parsing_utils::integer_range::{parse_integer_ranges, ParseIntegersError};
// Handle different error types
match parse_integer_ranges("1-100000000") {
Ok(numbers) => println!("Parsed {} numbers", numbers.len()),
Err(ParseIntegersError::RangeTooLarge(range)) => {
println!("Range too large: {}", range);
}
Err(ParseIntegersError::ParseId(id)) => {
println!("Invalid integer: {}", id);
}
Err(ParseIntegersError::UnmatchedRange(range)) => {
println!("Malformed range: {}", range);
}
}
"1,2,3,4"[1, 2, 3, 4]"1-5"[1, 2, 3, 4, 5]"1,3-6,8,10-12"["1", "3-6", "8", "10-12"]"1" → [1]"3-6" → [3, 4, 5, 6]"8" → [8]"10-12" → [10, 11, 12][1, 3, 4, 5, 6, 8, 10, 11, 12]RangeTooLarge error for excessive rangespub enum ParseIntegersError {
// Invalid integer format
ParseId(String),
// Malformed range syntax
UnmatchedRange(String),
// Range exceeds 100,000 items
RangeTooLarge(String),
}
use parsing_utils::integer_range::parse_integer_ranges;
// ParseId error
let result = parse_integer_ranges("1,abc,3");
// Error: ParseId("abc")
// UnmatchedRange error
let result = parse_integer_ranges("1-2-3-4-5");
// Error: UnmatchedRange("1-2-3-4-5")
// RangeTooLarge error
let result = parse_integer_ranges("1-200000");
// Error: RangeTooLarge("1-200000")