From d591c694dd3cb93112029c43cf2ee574a1417351 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 28 Jun 2023 23:24:47 -0400 Subject: [PATCH] Add simple parser Just getting warmed up. This will be used for note parsing. --- src/lib.rs | 1 + src/parser.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/parser.rs diff --git a/src/lib.rs b/src/lib.rs index a380f45c..627f0430 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ mod app; //mod camera; mod contacts; mod error; +mod parser; pub use app::Damus; pub use error::Error; diff --git a/src/parser.rs b/src/parser.rs new file mode 100644 index 00000000..17582dca --- /dev/null +++ b/src/parser.rs @@ -0,0 +1,41 @@ +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); + } +}