1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use Chars;
use PeekNth;
/// Optionally consumes the given sequence from the chars. Returns true if consumed.
///
/// # Example
/// ```
/// let s = "abcdef";
/// let mut chars = itertools::peek_nth(s.chars());
///
/// let found = ytmdl::parsing::consume(&mut chars, "abc");
/// assert_eq!(found, 3);
/// assert_eq!(chars.collect::<String>(), String::from("def"));
/// ```
///
///```
/// let s = "abcdef";
/// let mut chars = itertools::peek_nth(s.chars());
///
/// let found = ytmdl::parsing::consume(&mut chars, "cba");
/// assert_eq!(found, 0);
/// assert_eq!(chars.collect::<String>(), String::from("abcdef"));
/// ```
/// [consume]s the first of the sequences if possible and returns true,
/// else returns false and consumes nothing.
///
/// # Examples
/// ```
/// let url = "https://foo.bar";
/// let mut chars = itertools::peek_nth(url.chars());
///
/// let found = ytmdl::parsing::consume_mutually_exclusive(&mut chars, &["http://", "https://"]);
/// assert_eq!(found, 8);
/// assert_eq!(chars.collect::<String>(), String::from("foo.bar"));
/// ```
///
/// Here is an example of what **NOT** to do.
/// ```
/// let url = "https://foo.bar";
/// let mut chars = itertools::peek_nth(url.chars());
/// let found = ytmdl::parsing::consume_mutually_exclusive(&mut chars, &["http", "https"]);
/// assert_eq!(found, 4);
/// assert_eq!(chars.collect::<String>(), String::from("s://foo.bar")); // bad
/// ```