Function tag

Source
pub fn tag<'a, 'b: 'a>(tag: &'b str) -> Parser<'a, char, &'a str>
Expand description

Success when tag matches current input.

Examples found in repository?
examples/json_char.rs (line 46)
33fn string<'a>() -> Parser<'a, char, String> {
34	let special_char = sym('\\')
35		| sym('/')
36		| sym('"')
37		| sym('b').map(|_| '\x08')
38		| sym('f').map(|_| '\x0C')
39		| sym('n').map(|_| '\n')
40		| sym('r').map(|_| '\r')
41		| sym('t').map(|_| '\t');
42	let escape_sequence = sym('\\') * special_char;
43	let char_string = (none_of("\\\"") | escape_sequence)
44		.repeat(1..)
45		.map(String::from_iter);
46	let utf16_char = tag("\\u") * is_a(|c: char| c.is_digit(16))
47		.repeat(4)
48		.map(String::from_iter)
49		.convert(|digits| u16::from_str_radix(&digits, 16));
50	let utf16_string = utf16_char.repeat(1..).map(|chars| {
51		decode_utf16(chars)
52			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
53			.collect::<String>()
54	});
55	let string = sym('"') * (char_string | utf16_string).repeat(0..) - sym('"');
56	string.map(|strings| strings.concat())
57}
58
59fn array<'a>() -> Parser<'a, char, Vec<JsonValue>> {
60	let elems = list(call(value), sym(',') * space());
61	sym('[') * space() * elems - sym(']')
62}
63
64fn object<'a>() -> Parser<'a, char, HashMap<String, JsonValue>> {
65	let member = string() - space() - sym(':') - space() + call(value);
66	let members = list(member, sym(',') * space());
67	let obj = sym('{') * space() * members - sym('}');
68	obj.map(|members| members.into_iter().collect::<HashMap<_, _>>())
69}
70
71fn value<'a>() -> Parser<'a, char, JsonValue> {
72	(tag("null").map(|_| JsonValue::Null)
73		| tag("true").map(|_| JsonValue::Bool(true))
74		| tag("false").map(|_| JsonValue::Bool(false))
75		| number().map(|num| JsonValue::Num(num))
76		| string().map(|text| JsonValue::Str(text))
77		| array().map(|arr| JsonValue::Array(arr))
78		| object().map(|obj| JsonValue::Object(obj)))
79		- space()
80}