pub fn one_of<'a, I, S>(set: &'a S) -> Parser<'a, I, I>where
I: Clone + PartialEq + Display + Debug,
S: Set<I> + ?Sized,
Expand description
Success when current input symbol is one of the set.
Examples found in repository?
examples/json.rs (line 19)
18 19 20 21 22 23 24 25 26 27 28 29 30 31
fn space<'a>() -> Parser<'a, u8, ()> {
one_of(b" \t\r\n").repeat(0..).discard()
}
fn number<'a>() -> Parser<'a, u8, f64> {
let integer = one_of(b"123456789") - one_of(b"0123456789").repeat(0..) | sym(b'0');
let frac = sym(b'.') + one_of(b"0123456789").repeat(1..);
let exp = one_of(b"eE") + one_of(b"+-").opt() + one_of(b"0123456789").repeat(1..);
let number = sym(b'-').opt() + integer + frac.opt() + exp.opt();
number
.collect()
.convert(str::from_utf8)
.convert(f64::from_str)
}
More examples
examples/json_file.rs (line 21)
20 21 22 23 24 25 26 27 28 29 30 31 32 33
fn space<'a>() -> Parser<'a, u8, ()> {
one_of(b" \t\r\n").repeat(0..).discard()
}
fn number<'a>() -> Parser<'a, u8, f64> {
let integer = one_of(b"123456789") - one_of(b"0123456789").repeat(0..) | sym(b'0');
let frac = sym(b'.') + one_of(b"0123456789").repeat(1..);
let exp = one_of(b"eE") + one_of(b"+-").opt() + one_of(b"0123456789").repeat(1..);
let number = sym(b'-').opt() + integer + frac.opt() + exp.opt();
number
.collect()
.convert(str::from_utf8)
.convert(f64::from_str)
}
examples/json_char.rs (line 19)
18 19 20 21 22 23 24 25 26 27 28 29 30 31
fn space<'a>() -> Parser<'a, char, ()> {
one_of(" \t\r\n").repeat(0..).discard()
}
fn number<'a>() -> Parser<'a, char, f64> {
let integer = one_of("123456789") - one_of("0123456789").repeat(0..) | sym('0');
let frac = sym('.') + one_of("0123456789").repeat(1..);
let exp = one_of("eE") + one_of("+-").opt() + one_of("0123456789").repeat(1..);
let number = sym('-').opt() + integer + frac.opt() + exp.opt();
number
.collect()
.map(String::from_iter)
.convert(|s| f64::from_str(&s))
}
examples/whitespace.rs (line 15)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
fn whitespace<'a>() -> Parser<'a, u8, ()> {
one_of(b" \t\r\n").repeat(0..).discard()
}
fn linebreak<'a>() -> Parser<'a, u8, ()> {
sym(b'\r').opt() * sym(b'\n').discard()
}
fn indented<'a>() -> Parser<'a, u8, Vec<u8>> {
sym(b'\t') * none_of(b"\n\r").repeat(1..) - linebreak()
}
fn empty<'a>() -> Parser<'a, u8, ()> {
one_of(b" \t").repeat(0..).discard() - linebreak()
}
examples/duration.rs (line 19)
17 18 19 20 21 22 23 24 25 26 27 28 29 30
fn number_separator() -> Parser<u8, ()> {
// either '.' or ',' can be used as a separator between the whole and decimal part of a number
one_of(b".,").discard()
}
fn number() -> Parser<u8, f32> {
let integer = one_of(b"0123456789").repeat(0..);
let frac = number_separator() + one_of(b"0123456789").repeat(1..);
let number = integer + frac.opt();
number
.collect()
.convert(str::from_utf8)
.convert(f32::from_str)
}