#range #string-parser #numbers #representation #kind #text #generic-range

range-parser

A rust library to parse ranges representation of any kind of numbers

3 releases

0.1.2 Jul 22, 2024
0.1.1 Jul 8, 2024
0.1.0 Jul 8, 2024

#946 in Parser implementations

Download history 24/week @ 2024-08-03 23/week @ 2024-08-10 1/week @ 2024-08-17 32/week @ 2024-09-14 15/week @ 2024-09-21 19/week @ 2024-09-28 1/week @ 2024-10-05 237/week @ 2024-10-12 104/week @ 2024-10-19 79/week @ 2024-10-26 57/week @ 2024-11-02 45/week @ 2024-11-09 89/week @ 2024-11-16

271 downloads per month
Used in cmfy-cli

MIT license

17KB
212 lines

range-parser

license-mit build-test downloads latest version Conventional Commits docs



About range-parser

range-parser is a simple Rust crate to parse range from text representation (e.g. 1-3,5-8, 1,3,4, 1-5) into a Vector containing all the items for that range.

Get started

  1. Include range-parser to your Cargo.toml

    range-parser = "0.1"
    
  2. Parse range from str

    let range_str = "1-3,5-8";
    let range: Vec<u64> = range_parser::parse(range_str).unwrap();
    
    assert_eq!(&range, &[1, 2, 3, 5, 6, 7, 8]);
    

Supported types

range-parser supports any kind of number primitive.

range-parser for custom types

It is possible to extend the range-parser for custom types as long as they satisfy these trait bounds: T: FromStr + Add<Output = T> + PartialEq + PartialOrd + Unit + Copy,.

This requires you to implement the trait Unit which is exposed by this library.

The trait Unit is defined as

pub trait Unit {
    fn unit() -> Self;
}

and should return the base unit for a type, which for numbers should be 1.

Examples

Parse a range with a dash

let range: Vec<u64> = range_parser::parse("1-3").unwrap();
assert_eq!(range, vec![1, 2, 3]);

Parse a range with commas

let range: Vec<u64> = range_parser::parse("1,3,4").unwrap();
assert_eq!(range, vec![1, 3, 4]);

Parse a mixed range

let range: Vec<u64> = range_parser::parse("1,3-5,2").unwrap();
assert_eq!(range, vec![1, 3, 4, 5, 2]);

Parse a range with negative numbers

let range: Vec<i32> = range_parser::parse("-8,-5--1,0-3,-1").unwrap();
assert_eq!(range, vec![-8, -5, -4, -3, -2, -1, 0, 1, 2, 3, -1]);

Parse a range with custom separators

// parse range using `;` as separator for values and `..` as separator for ranges
let range: Vec<i32> = range_parser::parse_with("-2;0..3;-1;7", ";", "..").unwrap();
assert_eq!(range, vec![-2, 0, 1, 2, 3, -1, 7]);

Changelog

View range-parser's changelog HERE


License

range-parser is licensed under the MIT license.

You can read the entire license HERE

Dependencies

~235–690KB
~16K SLoC