Crates.io | unscanny |
lib.rs | unscanny |
version | 0.1.0 |
source | src |
created_at | 2022-04-17 13:38:15.16871 |
updated_at | 2022-04-17 13:38:15.16871 |
description | Painless string scanning. |
homepage | |
repository | https://github.com/typst/unscanny |
max_upload_size | |
id | 569446 |
size | 37,017 |
Painless string scanning.
[dependencies]
unscanny = "0.1"
Basically, you'll want to use this crate if it's too much pain to solve your
problem with a bare chars()
iterator. Speaking more broadly, unscanny
is
useful in these situations:
The Scanner
keeps an internal cursor, allows you to peek around it, advance it
beyond chars or other patterns and easily slice substrings before and after the
cursor.
Recognizing and parsing a simple comma separated list of floats.
let mut s = Scanner::new(" +12 , -15.3, 14.3 ");
let mut nums = vec![];
while !s.done() {
s.eat_whitespace();
let start = s.cursor();
s.eat_if(['+', '-']);
s.eat_while(char::is_ascii_digit);
s.eat_if('.');
s.eat_while(char::is_ascii_digit);
nums.push(s.from(start).parse::<f64>().unwrap());
s.eat_whitespace();
s.eat_if(',');
}
assert_eq!(nums, [12.0, -15.3, 14.3]);
This crate internally uses unsafe code for better performance. However, all unsafe code is documented with justification why its safe, all accesses are checked in debug mode and everything is tested.
This crate is dual-licensed under the MIT and Apache 2.0 licenses.