42 lines
813 B
Rust
42 lines
813 B
Rust
use log::info;
|
|
|
|
struct Parser<'a> {
|
|
data: &'a str,
|
|
pos: usize,
|
|
}
|
|
|
|
impl<'a> Parser<'a> {
|
|
fn new(data: &'a str) -> Parser {
|
|
Parser { data: data, pos: 0 }
|
|
}
|
|
|
|
fn parse_until(&mut self, needle: char) -> bool {
|
|
let mut count = 0;
|
|
for c in self.data[self.pos..].chars() {
|
|
if c == needle {
|
|
self.pos += count - 1;
|
|
return true;
|
|
} else {
|
|
count += 1;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_parser() {
|
|
let s = "hey there #hashtag";
|
|
let mut parser = Parser::new(s);
|
|
parser.parse_until('#');
|
|
assert_eq!(parser.pos, 9);
|
|
parser.parse_until('t');
|
|
assert_eq!(parser.pos, 14);
|
|
}
|
|
}
|