range-parser

Crates.iorange-parser
lib.rsrange-parser
version0.1.2
sourcesrc
created_at2024-07-08 08:57:03.654298
updated_at2024-07-22 10:15:28.062422
descriptionA rust library to parse ranges representation of any kind of numbers
homepagehttps://github.com/veeso/range-parser
repositoryhttps://github.com/veeso/range-parser
max_upload_size
id1295508
size18,175
Christian Visintin (veeso)

documentation

README

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

Commit count: 3

cargo fmt