12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /*
- * Copyright (c) 2021, Kyle Pereira <hey@xylepereira.me>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #pragma once
- #include <AK/ByteBuffer.h>
- #include <AK/Result.h>
- #include <LibIMAP/Objects.h>
- namespace IMAP {
- class Client;
- struct ParseStatus {
- bool successful;
- Optional<Response> response;
- };
- class Parser {
- public:
- ParseStatus parse(ByteBuffer&& buffer, bool expecting_tag);
- private:
- static MailboxFlag parse_mailbox_flag(StringView);
- void consume(StringView);
- bool try_consume(StringView);
- StringView consume_while(Function<bool(u8)> should_consume);
- StringView consume_until_end_of_line();
- bool at_end() { return position >= m_buffer.size(); };
- unsigned parse_number();
- Optional<unsigned> try_parse_number();
- void parse_response_done();
- void parse_untagged();
- void parse_capability_response();
- StringView parse_atom();
- StringView parse_quoted_string();
- StringView parse_literal_string();
- StringView parse_string();
- StringView parse_astring();
- Optional<StringView> parse_nstring();
- ResponseStatus parse_status();
- ListItem parse_list_item();
- FetchCommand::DataItem parse_fetch_data_item();
- FetchResponseData parse_fetch_response();
- Optional<Vector<Address>> parse_address_list();
- Address parse_address();
- HashMap<DeprecatedString, DeprecatedString> parse_body_fields_params();
- BodyStructure parse_body_structure();
- BodyStructure parse_one_part_body();
- BodyExtension parse_body_extension();
- Tuple<DeprecatedString, HashMap<DeprecatedString, DeprecatedString>> parse_disposition();
- Vector<DeprecatedString> parse_langs();
- Envelope parse_envelope();
- template<typename T>
- Vector<T> parse_list(T (*converter)(StringView));
- // To retain state if parsing is not finished
- ByteBuffer m_buffer;
- SolidResponse m_response;
- unsigned position { 0 };
- bool m_incomplete { false };
- bool m_parsing_failed { false };
- };
- }
|