diff options
| author | Jesper Jensen <jesper@jnsn.dev> | 2025-12-22 22:08:42 +0100 |
|---|---|---|
| committer | Jesper Jensen <jesper@jnsn.dev> | 2025-12-22 22:08:42 +0100 |
| commit | 9fc38dcb2774234d178fe76511cabfb22c768c7b (patch) | |
| tree | 731bf952904b449c72abca115f680f19a55cd122 /src/rfc8288.rs | |
| parent | 8c3313d02e3053a43cb0c4cfba5b5b78376dfa20 (diff) | |
Add the initial skeleton of the parser
Diffstat (limited to 'src/rfc8288.rs')
| -rw-r--r-- | src/rfc8288.rs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/rfc8288.rs b/src/rfc8288.rs new file mode 100644 index 0000000..b068573 --- /dev/null +++ b/src/rfc8288.rs @@ -0,0 +1,72 @@ +enum LinkParserEvent { + BeginLinkValue(usize), + EndLinkValue(usize), + + BeginLinkParam(usize), + EndLinkParam(usize), + + EndOfBuffer, +} + + +enum State { + Start, + UriRef, +} + +struct LinkParser { + state: State, + offset: usize, +} + +impl LinkParser { + fn new() -> Self { + return LinkParser { + state: State::Start, + offset: 0, + }; + } + + fn try_match_char(&self, buf: &[u8], b: u8) -> Option<usize> { + if buf[self.offset] != b { + return None; + } + + return Some(1); + } + + fn push(&mut self, new_data: &[u8]) -> LinkParserEvent { + match self.state { + State::Start => { + if let Some(len) = self.try_match_char(new_data, b'<') { + self.offset += len; + self.state = State::UriRef; + + return LinkParserEvent::BeginLinkValue(self.offset - len); + } + + todo!(); + }, + State::UriRef => { + loop { + if let Some(_) = self.try_match_char(new_data, b'>') { + break; + } else { + self.offset += 1; + } + } + todo!(); + }, + } + } + + fn finish(&mut self) { + } +} + +#[cfg(test)] +mod test { + #[test] + fn test() { + } +} |
