diff options
author | sin-ack <sin-ack@users.noreply.github.com> | 2022-07-11 17:32:29 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-07-12 23:11:35 +0200 |
commit | 3f3f45580ab7266258e97cb3cecf1e24716d61c5 (patch) | |
tree | 152c7a187c98184d58bf91a326357e0af435edcf /Userland/Libraries/LibIMAP | |
parent | e5f09ea1703bacfbb79a4ad3c587a7d5d3d7bb13 (diff) | |
download | serenity-3f3f45580ab7266258e97cb3cecf1e24716d61c5.zip |
Everywhere: Add sv suffix to strings relying on StringView(char const*)
Each of these strings would previously rely on StringView's char const*
constructor overload, which would call __builtin_strlen on the string.
Since we now have operator ""sv, we can replace these with much simpler
versions. This opens the door to being able to remove
StringView(char const*).
No functional changes.
Diffstat (limited to 'Userland/Libraries/LibIMAP')
-rw-r--r-- | Userland/Libraries/LibIMAP/Client.cpp | 24 | ||||
-rw-r--r-- | Userland/Libraries/LibIMAP/Objects.cpp | 20 | ||||
-rw-r--r-- | Userland/Libraries/LibIMAP/Parser.cpp | 340 |
3 files changed, 192 insertions, 192 deletions
diff --git a/Userland/Libraries/LibIMAP/Client.cpp b/Userland/Libraries/LibIMAP/Client.cpp index dfb99ec918..b4bd10c580 100644 --- a/Userland/Libraries/LibIMAP/Client.cpp +++ b/Userland/Libraries/LibIMAP/Client.cpp @@ -288,17 +288,17 @@ RefPtr<Promise<Optional<SolidResponse>>> Client::store(StoreMethod method, Seque StringBuilder data_item_name; switch (method) { case StoreMethod::Replace: - data_item_name.append("FLAGS"); + data_item_name.append("FLAGS"sv); break; case StoreMethod::Add: - data_item_name.append("+FLAGS"); + data_item_name.append("+FLAGS"sv); break; case StoreMethod::Remove: - data_item_name.append("-FLAGS"); + data_item_name.append("-FLAGS"sv); break; } if (silent) { - data_item_name.append(".SILENT"); + data_item_name.append(".SILENT"sv); } StringBuilder flags_builder; @@ -313,7 +313,7 @@ RefPtr<Promise<Optional<SolidResponse>>> Client::search(Optional<String> charset { Vector<String> args; if (charset.has_value()) { - args.append("CHARSET "); + args.append("CHARSET "sv); args.append(charset.value()); } for (auto const& item : keys) { @@ -332,7 +332,7 @@ RefPtr<Promise<Optional<SolidResponse>>> Client::finish_idle() { auto promise = Promise<Optional<Response>>::construct(); m_pending_promises.append(promise); - MUST(send_raw("DONE")); + MUST(send_raw("DONE"sv)); m_expecting_response = true; return cast_promise<SolidResponse>(promise); } @@ -343,19 +343,19 @@ RefPtr<Promise<Optional<SolidResponse>>> Client::status(StringView mailbox, Vect for (auto type : types) { switch (type) { case StatusItemType::Recent: - args.append("RECENT"); + args.append("RECENT"sv); break; case StatusItemType::UIDNext: - args.append("UIDNEXT"); + args.append("UIDNEXT"sv); break; case StatusItemType::UIDValidity: - args.append("UIDVALIDITY"); + args.append("UIDVALIDITY"sv); break; case StatusItemType::Unseen: - args.append("UNSEEN"); + args.append("UNSEEN"sv); break; case StatusItemType::Messages: - args.append("MESSAGES"); + args.append("MESSAGES"sv); break; } } @@ -378,7 +378,7 @@ RefPtr<Promise<Optional<SolidResponse>>> Client::append(StringView mailbox, Mess args.append(flags_sb.build()); } if (date_time.has_value()) - args.append(date_time.value().to_string("\"%d-%b-%Y %H:%M:%S +0000\"")); + args.append(date_time.value().to_string("\"%d-%b-%Y %H:%M:%S +0000\""sv)); args.append(String::formatted("{{{}}}", message.data.length())); diff --git a/Userland/Libraries/LibIMAP/Objects.cpp b/Userland/Libraries/LibIMAP/Objects.cpp index 97710a54a9..a076756290 100644 --- a/Userland/Libraries/LibIMAP/Objects.cpp +++ b/Userland/Libraries/LibIMAP/Objects.cpp @@ -29,9 +29,9 @@ String FetchCommand::DataItem::Section::serialize() const case SectionType::HeaderFields: case SectionType::HeaderFieldsNot: { if (type == SectionType::HeaderFields) - headers_builder.append("HEADER.FIELDS ("); + headers_builder.append("HEADER.FIELDS ("sv); else - headers_builder.append("HEADERS.FIELDS.NOT ("); + headers_builder.append("HEADERS.FIELDS.NOT ("sv); bool first = true; for (auto& field : headers.value()) { @@ -55,7 +55,7 @@ String FetchCommand::DataItem::Section::serialize() const first = false; } if (ends_with_mime) { - sb.append(".MIME"); + sb.append(".MIME"sv); } return sb.build(); } @@ -128,7 +128,7 @@ String serialize_astring(StringView string) // Try to quote auto can_be_quoted = !(string.contains('\n') || string.contains('\r')); if (can_be_quoted) { - auto escaped_str = string.replace("\\", "\\\\", ReplaceMode::All).replace("\"", "\\\"", ReplaceMode::All); + auto escaped_str = string.replace("\\"sv, "\\\\"sv, ReplaceMode::All).replace("\""sv, "\\\""sv, ReplaceMode::All); return String::formatted("\"{}\"", escaped_str); } @@ -151,7 +151,7 @@ String SearchKey::serialize() const [&](New const&) { return String("NEW"); }, [&](Not const& x) { return String::formatted("NOT {}", x.operand->serialize()); }, [&](Old const&) { return String("OLD"); }, - [&](On const& x) { return String::formatted("ON {}", x.date.to_string("%d-%b-%Y")); }, + [&](On const& x) { return String::formatted("ON {}", x.date.to_string("%d-%b-%Y"sv)); }, [&](Or const& x) { return String::formatted("OR {} {}", x.lhs->serialize(), x.rhs->serialize()); }, [&](Recent const&) { return String("RECENT"); }, [&](SearchKeys const& x) { @@ -160,18 +160,18 @@ String SearchKey::serialize() const bool first = true; for (const auto& item : x.keys) { if (!first) - sb.append(", "); + sb.append(", "sv); sb.append(item->serialize()); first = false; } return sb.build(); }, [&](Seen const&) { return String("SEEN"); }, - [&](SentBefore const& x) { return String::formatted("SENTBEFORE {}", x.date.to_string("%d-%b-%Y")); }, - [&](SentOn const& x) { return String::formatted("SENTON {}", x.date.to_string("%d-%b-%Y")); }, - [&](SentSince const& x) { return String::formatted("SENTSINCE {}", x.date.to_string("%d-%b-%Y")); }, + [&](SentBefore const& x) { return String::formatted("SENTBEFORE {}", x.date.to_string("%d-%b-%Y"sv)); }, + [&](SentOn const& x) { return String::formatted("SENTON {}", x.date.to_string("%d-%b-%Y"sv)); }, + [&](SentSince const& x) { return String::formatted("SENTSINCE {}", x.date.to_string("%d-%b-%Y"sv)); }, [&](SequenceSet const& x) { return x.sequence.serialize(); }, - [&](Since const& x) { return String::formatted("SINCE {}", x.date.to_string("%d-%b-%Y")); }, + [&](Since const& x) { return String::formatted("SINCE {}", x.date.to_string("%d-%b-%Y"sv)); }, [&](Smaller const& x) { return String::formatted("SMALLER {}", x.number); }, [&](Subject const& x) { return String::formatted("SUBJECT {}", serialize_astring(x.subject)); }, [&](Text const& x) { return String::formatted("TEXT {}", serialize_astring(x.text)); }, diff --git a/Userland/Libraries/LibIMAP/Parser.cpp b/Userland/Libraries/LibIMAP/Parser.cpp index 6275d75f75..acc3f92700 100644 --- a/Userland/Libraries/LibIMAP/Parser.cpp +++ b/Userland/Libraries/LibIMAP/Parser.cpp @@ -20,14 +20,14 @@ ParseStatus Parser::parse(ByteBuffer&& buffer, bool expecting_tag) m_response = SolidResponse(); } - if (try_consume("+")) { - consume(" "); + if (try_consume("+"sv)) { + consume(" "sv); auto data = consume_until_end_of_line(); - consume("\r\n"); + consume("\r\n"sv); return { true, { ContinueRequest { data } } }; } - while (try_consume("*")) { + while (try_consume("*"sv)) { parse_untagged(); } @@ -65,12 +65,12 @@ bool Parser::try_consume(StringView x) void Parser::parse_response_done() { - consume("A"); + consume("A"sv); auto tag = parse_number(); - consume(" "); + consume(" "sv); ResponseStatus status = parse_status(); - consume(" "); + consume(" "sv); m_response.m_tag = tag; m_response.m_status = status; @@ -82,7 +82,7 @@ void Parser::parse_response_done() position += 1; } - consume("\r\n"); + consume("\r\n"sv); m_response.m_response_text = response_data.build(); } @@ -123,98 +123,98 @@ unsigned Parser::parse_number() void Parser::parse_untagged() { - consume(" "); + consume(" "sv); // Certain messages begin with a number like: // * 15 EXISTS auto number = try_parse_number(); if (number.has_value()) { - consume(" "); + consume(" "sv); auto data_type = parse_atom().to_string(); if (data_type == "EXISTS"sv) { m_response.data().set_exists(number.value()); - consume("\r\n"); + consume("\r\n"sv); } else if (data_type == "RECENT"sv) { m_response.data().set_recent(number.value()); - consume("\r\n"); + consume("\r\n"sv); } else if (data_type == "FETCH"sv) { auto fetch_response = parse_fetch_response(); m_response.data().add_fetch_response(number.value(), move(fetch_response)); } else if (data_type == "EXPUNGE"sv) { m_response.data().add_expunged(number.value()); - consume("\r\n"); + consume("\r\n"sv); } return; } - if (try_consume("CAPABILITY")) { + if (try_consume("CAPABILITY"sv)) { parse_capability_response(); - } else if (try_consume("LIST")) { + } else if (try_consume("LIST"sv)) { auto item = parse_list_item(); m_response.data().add_list_item(move(item)); - } else if (try_consume("LSUB")) { + } else if (try_consume("LSUB"sv)) { auto item = parse_list_item(); m_response.data().add_lsub_item(move(item)); - } else if (try_consume("FLAGS")) { - consume(" "); + } else if (try_consume("FLAGS"sv)) { + consume(" "sv); auto flags = parse_list(+[](StringView x) { return String(x); }); m_response.data().set_flags(move(flags)); - consume("\r\n"); - } else if (try_consume("OK")) { - consume(" "); - if (try_consume("[")) { + consume("\r\n"sv); + } else if (try_consume("OK"sv)) { + consume(" "sv); + if (try_consume("["sv)) { auto actual_type = parse_atom(); if (actual_type == "CLOSED"sv) { // No-op. } else if (actual_type == "UIDNEXT"sv) { - consume(" "); + consume(" "sv); auto n = parse_number(); m_response.data().set_uid_next(n); } else if (actual_type == "UIDVALIDITY"sv) { - consume(" "); + consume(" "sv); auto n = parse_number(); m_response.data().set_uid_validity(n); } else if (actual_type == "UNSEEN"sv) { - consume(" "); + consume(" "sv); auto n = parse_number(); m_response.data().set_unseen(n); } else if (actual_type == "PERMANENTFLAGS"sv) { - consume(" "); + consume(" "sv); auto flags = parse_list(+[](StringView x) { return String(x); }); m_response.data().set_permanent_flags(move(flags)); } else if (actual_type == "HIGHESTMODSEQ"sv) { - consume(" "); + consume(" "sv); parse_number(); // No-op for now. } else { dbgln("Unknown: {}", actual_type); consume_while([](u8 x) { return x != ']'; }); } - consume("]"); + consume("]"sv); } consume_until_end_of_line(); - consume("\r\n"); - } else if (try_consume("SEARCH")) { + consume("\r\n"sv); + } else if (try_consume("SEARCH"sv)) { Vector<unsigned> ids; - while (!try_consume("\r\n")) { - consume(" "); + while (!try_consume("\r\n"sv)) { + consume(" "sv); auto id = parse_number(); ids.append(id); } m_response.data().set_search_results(move(ids)); - } else if (try_consume("BYE")) { + } else if (try_consume("BYE"sv)) { auto message = consume_until_end_of_line(); - consume("\r\n"); + consume("\r\n"sv); m_response.data().set_bye(message.is_empty() ? Optional<String>() : Optional<String>(message)); - } else if (try_consume("STATUS")) { - consume(" "); + } else if (try_consume("STATUS"sv)) { + consume(" "sv); auto mailbox = parse_astring(); - consume(" ("); + consume(" ("sv); auto status_item = StatusItem(); status_item.set_mailbox(mailbox); - while (!try_consume(")")) { + while (!try_consume(")"sv)) { auto status_att = parse_atom(); - consume(" "); + consume(" "sv); auto value = parse_number(); auto type = StatusItemType::Recent; @@ -236,14 +236,14 @@ void Parser::parse_untagged() status_item.set(type, value); if (!at_end() && m_buffer[position] != ')') - consume(" "); + consume(" "sv); } m_response.data().set_status(move(status_item)); - try_consume(" "); // Not in the spec but the Outlook server sends a space for some reason. - consume("\r\n"); + try_consume(" "sv); // Not in the spec but the Outlook server sends a space for some reason. + consume("\r\n"sv); } else { auto x = consume_until_end_of_line(); - consume("\r\n"); + consume("\r\n"sv); dbgln("ignored {}", x); } } @@ -251,13 +251,13 @@ void Parser::parse_untagged() StringView Parser::parse_quoted_string() { auto str = consume_while([](u8 x) { return x != '"'; }); - consume("\""); + consume("\""sv); return str; } StringView Parser::parse_string() { - if (try_consume("\"")) { + if (try_consume("\""sv)) { return parse_quoted_string(); } else { return parse_literal_string(); @@ -266,7 +266,7 @@ StringView Parser::parse_string() Optional<StringView> Parser::parse_nstring() { - if (try_consume("NIL")) + if (try_consume("NIL"sv)) return {}; else return { parse_string() }; @@ -274,14 +274,14 @@ Optional<StringView> Parser::parse_nstring() FetchResponseData Parser::parse_fetch_response() { - consume(" ("); + consume(" ("sv); auto fetch_response = FetchResponseData(); - while (!try_consume(")")) { + while (!try_consume(")"sv)) { auto data_item = parse_fetch_data_item(); switch (data_item.type) { case FetchCommand::DataItemType::BodyStructure: { - consume(" ("); + consume(" ("sv); auto structure = parse_body_structure(); fetch_response.set_body_structure(move(structure)); break; @@ -291,21 +291,21 @@ FetchResponseData Parser::parse_fetch_response() break; } case FetchCommand::DataItemType::Flags: { - consume(" "); + consume(" "sv); auto flags = parse_list(+[](StringView x) { return String(x); }); fetch_response.set_flags(move(flags)); break; } case FetchCommand::DataItemType::InternalDate: { - consume(" \""); + consume(" \""sv); auto date_view = consume_while([](u8 x) { return x != '"'; }); - consume("\""); - auto date = Core::DateTime::parse("%d-%b-%Y %H:%M:%S %z", date_view).value(); + consume("\""sv); + auto date = Core::DateTime::parse("%d-%b-%Y %H:%M:%S %z"sv, date_view).value(); fetch_response.set_internal_date(date); break; } case FetchCommand::DataItemType::UID: { - consume(" "); + consume(" "sv); fetch_response.set_uid(parse_number()); break; } @@ -320,34 +320,34 @@ FetchResponseData Parser::parse_fetch_response() } } if (!at_end() && m_buffer[position] != ')') - consume(" "); + consume(" "sv); } - consume("\r\n"); + consume("\r\n"sv); return fetch_response; } Envelope Parser::parse_envelope() { - consume(" ("); + consume(" ("sv); auto date = parse_nstring(); - consume(" "); + consume(" "sv); auto subject = parse_nstring(); - consume(" "); + consume(" "sv); auto from = parse_address_list(); - consume(" "); + consume(" "sv); auto sender = parse_address_list(); - consume(" "); + consume(" "sv); auto reply_to = parse_address_list(); - consume(" "); + consume(" "sv); auto to = parse_address_list(); - consume(" "); + consume(" "sv); auto cc = parse_address_list(); - consume(" "); + consume(" "sv); auto bcc = parse_address_list(); - consume(" "); + consume(" "sv); auto in_reply_to = parse_nstring(); - consume(" "); + consume(" "sv); auto message_id = parse_nstring(); - consume(")"); + consume(")"sv); Envelope envelope = { date.has_value() ? AK::Optional<String>(date.value()) : AK::Optional<String>(), subject.has_value() ? AK::Optional<String>(subject.value()) : AK::Optional<String>(), @@ -366,38 +366,38 @@ BodyStructure Parser::parse_body_structure() { if (!at_end() && m_buffer[position] == '(') { auto data = MultiPartBodyStructureData(); - while (try_consume("(")) { + while (try_consume("("sv)) { auto child = parse_body_structure(); data.bodies.append(make<BodyStructure>(move(child))); } - consume(" "); + consume(" "sv); data.media_type = parse_string(); - if (!try_consume(")")) { - consume(" "); - data.params = try_consume("NIL") ? Optional<HashMap<String, String>>() : parse_body_fields_params(); - if (!try_consume(")")) { - consume(" "); - if (!try_consume("NIL")) { + if (!try_consume(")"sv)) { + consume(" "sv); + data.params = try_consume("NIL"sv) ? Optional<HashMap<String, String>>() : parse_body_fields_params(); + if (!try_consume(")"sv)) { + consume(" "sv); + if (!try_consume("NIL"sv)) { data.disposition = { parse_disposition() }; } - if (!try_consume(")")) { - consume(" "); - if (!try_consume("NIL")) { + if (!try_consume(")"sv)) { + consume(" "sv); + if (!try_consume("NIL"sv)) { data.langs = { parse_langs() }; } - if (!try_consume(")")) { - consume(" "); - data.location = try_consume("NIL") ? Optional<String>() : Optional<String>(parse_string()); + if (!try_consume(")"sv)) { + consume(" "sv); + data.location = try_consume("NIL"sv) ? Optional<String>() : Optional<String>(parse_string()); - if (!try_consume(")")) { - consume(" "); + if (!try_consume(")"sv)) { + consume(" "sv); Vector<BodyExtension> extensions; - while (!try_consume(")")) { + while (!try_consume(")"sv)) { extensions.append(parse_body_extension()); - try_consume(" "); + try_consume(" "sv); } data.extensions = { move(extensions) }; } @@ -414,21 +414,21 @@ BodyStructure Parser::parse_body_structure() BodyStructure Parser::parse_one_part_body() { auto type = parse_string(); - consume(" "); + consume(" "sv); auto subtype = parse_string(); - consume(" "); - if (type.equals_ignoring_case("TEXT")) { + consume(" "sv); + if (type.equals_ignoring_case("TEXT"sv)) { // body-type-text auto params = parse_body_fields_params(); - consume(" "); + consume(" "sv); auto id = parse_nstring(); - consume(" "); + consume(" "sv); auto description = parse_nstring(); - consume(" "); + consume(" "sv); auto encoding = parse_string(); - consume(" "); + consume(" "sv); auto num_octets = parse_number(); - consume(" "); + consume(" "sv); auto num_lines = parse_number(); auto data = BodyStructureData { @@ -443,34 +443,34 @@ BodyStructure Parser::parse_one_part_body() {} }; - if (!try_consume(")")) { - consume(" "); + if (!try_consume(")"sv)) { + consume(" "sv); auto md5 = parse_nstring(); if (md5.has_value()) data.md5 = { md5.value() }; - if (!try_consume(")")) { - consume(" "); - if (!try_consume("NIL")) { + if (!try_consume(")"sv)) { + consume(" "sv); + if (!try_consume("NIL"sv)) { auto disposition = parse_disposition(); data.disposition = { disposition }; } - if (!try_consume(")")) { - consume(" "); - if (!try_consume("NIL")) { + if (!try_consume(")"sv)) { + consume(" "sv); + if (!try_consume("NIL"sv)) { data.langs = { parse_langs() }; } - if (!try_consume(")")) { - consume(" "); + if (!try_consume(")"sv)) { + consume(" "sv); auto location = parse_nstring(); if (location.has_value()) data.location = { location.value() }; Vector<BodyExtension> extensions; - while (!try_consume(")")) { + while (!try_consume(")"sv)) { extensions.append(parse_body_extension()); - try_consume(" "); + try_consume(" "sv); } data.extensions = { move(extensions) }; } @@ -479,18 +479,18 @@ BodyStructure Parser::parse_one_part_body() } return BodyStructure(move(data)); - } else if (type.equals_ignoring_case("MESSAGE") && subtype.equals_ignoring_case("RFC822")) { + } else if (type.equals_ignoring_case("MESSAGE"sv) && subtype.equals_ignoring_case("RFC822"sv)) { // body-type-message auto params = parse_body_fields_params(); - consume(" "); + consume(" "sv); auto id = parse_nstring(); - consume(" "); + consume(" "sv); auto description = parse_nstring(); - consume(" "); + consume(" "sv); auto encoding = parse_string(); - consume(" "); + consume(" "sv); auto num_octets = parse_number(); - consume(" "); + consume(" "sv); auto envelope = parse_envelope(); BodyStructureData data { @@ -509,15 +509,15 @@ BodyStructure Parser::parse_one_part_body() } else { // body-type-basic auto params = parse_body_fields_params(); - consume(" "); + consume(" "sv); auto id = parse_nstring(); - consume(" "); + consume(" "sv); auto description = parse_nstring(); - consume(" "); + consume(" "sv); auto encoding = parse_string(); - consume(" "); + consume(" "sv); auto num_octets = parse_number(); - consume(" "); + consume(" "sv); BodyStructureData data { type, @@ -537,12 +537,12 @@ BodyStructure Parser::parse_one_part_body() Vector<String> Parser::parse_langs() { AK::Vector<String> langs; - if (!try_consume("(")) { + if (!try_consume("("sv)) { langs.append(parse_string()); } else { - while (!try_consume(")")) { + while (!try_consume(")"sv)) { langs.append(parse_string()); - try_consume(" "); + try_consume(" "sv); } } return langs; @@ -550,21 +550,21 @@ Vector<String> Parser::parse_langs() Tuple<String, HashMap<String, String>> Parser::parse_disposition() { auto disposition_type = parse_string(); - consume(" "); + consume(" "sv); auto disposition_vals = parse_body_fields_params(); - consume(")"); + consume(")"sv); return { move(disposition_type), move(disposition_vals) }; } StringView Parser::parse_literal_string() { - consume("{"); + consume("{"sv); auto num_bytes = parse_number(); - consume("}\r\n"); + consume("}\r\n"sv); if (m_buffer.size() < position + num_bytes) { m_parsing_failed = true; - return ""; + return ""sv; } position += num_bytes; @@ -573,25 +573,25 @@ StringView Parser::parse_literal_string() ListItem Parser::parse_list_item() { - consume(" "); + consume(" "sv); auto flags_vec = parse_list(parse_mailbox_flag); unsigned flags = 0; for (auto flag : flags_vec) { flags |= static_cast<unsigned>(flag); } - consume(" \""); + consume(" \""sv); auto reference = consume_while([](u8 x) { return x != '"'; }); - consume("\" "); + consume("\" "sv); auto mailbox = parse_astring(); - consume("\r\n"); + consume("\r\n"sv); return ListItem { flags, String(reference), String(mailbox) }; } void Parser::parse_capability_response() { auto capability = AK::Vector<String>(); - while (!try_consume("\r\n")) { - consume(" "); + while (!try_consume("\r\n"sv)) { + consume(" "sv); auto x = String(parse_atom()); capability.append(x); } @@ -634,12 +634,12 @@ ResponseStatus Parser::parse_status() template<typename T> Vector<T> Parser::parse_list(T converter(StringView)) { - consume("("); + consume("("sv); Vector<T> x; bool first = true; - while (!try_consume(")")) { + while (!try_consume(")"sv)) { if (!first) - consume(" "); + consume(" "sv); auto item = consume_while([](u8 x) { return x != ' ' && x != ')'; }); @@ -701,79 +701,79 @@ StringView Parser::consume_until_end_of_line() FetchCommand::DataItem Parser::parse_fetch_data_item() { auto msg_attr = consume_while([](u8 x) { return is_ascii_alpha(x) != 0; }); - if (msg_attr.equals_ignoring_case("BODY") && try_consume("[")) { + if (msg_attr.equals_ignoring_case("BODY"sv) && try_consume("["sv)) { auto data_item = FetchCommand::DataItem { .type = FetchCommand::DataItemType::BodySection, .section = { {} } }; auto section_type = consume_while([](u8 x) { return x != ']' && x != ' '; }); - if (section_type.equals_ignoring_case("HEADER.FIELDS")) { + if (section_type.equals_ignoring_case("HEADER.FIELDS"sv)) { data_item.section->type = FetchCommand::DataItem::SectionType::HeaderFields; data_item.section->headers = Vector<String>(); - consume(" "); + consume(" "sv); auto headers = parse_list(+[](StringView x) { return x; }); for (auto& header : headers) { data_item.section->headers->append(header); } - consume("]"); - } else if (section_type.equals_ignoring_case("HEADER.FIELDS.NOT")) { + consume("]"sv); + } else if (section_type.equals_ignoring_case("HEADER.FIELDS.NOT"sv)) { data_item.section->type = FetchCommand::DataItem::SectionType::HeaderFieldsNot; data_item.section->headers = Vector<String>(); - consume(" ("); + consume(" ("sv); auto headers = parse_list(+[](StringView x) { return x; }); for (auto& header : headers) { data_item.section->headers->append(header); } - consume("]"); + consume("]"sv); } else if (is_ascii_digit(section_type[0])) { data_item.section->type = FetchCommand::DataItem::SectionType::Parts; data_item.section->parts = Vector<unsigned>(); - while (!try_consume("]")) { + while (!try_consume("]"sv)) { auto num = try_parse_number(); if (num.has_value()) { data_item.section->parts->append(num.value()); continue; } auto atom = parse_atom(); - if (atom.equals_ignoring_case("MIME")) { + if (atom.equals_ignoring_case("MIME"sv)) { data_item.section->ends_with_mime = true; continue; } } - } else if (section_type.equals_ignoring_case("TEXT")) { + } else if (section_type.equals_ignoring_case("TEXT"sv)) { data_item.section->type = FetchCommand::DataItem::SectionType::Text; - } else if (section_type.equals_ignoring_case("HEADER")) { + } else if (section_type.equals_ignoring_case("HEADER"sv)) { data_item.section->type = FetchCommand::DataItem::SectionType::Header; } else { dbgln("Unmatched section type {}", section_type); m_parsing_failed = true; } - if (try_consume("<")) { + if (try_consume("<"sv)) { auto start = parse_number(); data_item.partial_fetch = true; data_item.start = (int)start; - consume(">"); + consume(">"sv); } - try_consume(" "); + try_consume(" "sv); return data_item; - } else if (msg_attr.equals_ignoring_case("FLAGS")) { + } else if (msg_attr.equals_ignoring_case("FLAGS"sv)) { return FetchCommand::DataItem { .type = FetchCommand::DataItemType::Flags }; - } else if (msg_attr.equals_ignoring_case("UID")) { + } else if (msg_attr.equals_ignoring_case("UID"sv)) { return FetchCommand::DataItem { .type = FetchCommand::DataItemType::UID }; - } else if (msg_attr.equals_ignoring_case("INTERNALDATE")) { + } else if (msg_attr.equals_ignoring_case("INTERNALDATE"sv)) { return FetchCommand::DataItem { .type = FetchCommand::DataItemType::InternalDate }; - } else if (msg_attr.equals_ignoring_case("ENVELOPE")) { + } else if (msg_attr.equals_ignoring_case("ENVELOPE"sv)) { return FetchCommand::DataItem { .type = FetchCommand::DataItemType::Envelope }; - } else if (msg_attr.equals_ignoring_case("BODY") || msg_attr.equals_ignoring_case("BODYSTRUCTURE")) { + } else if (msg_attr.equals_ignoring_case("BODY"sv) || msg_attr.equals_ignoring_case("BODYSTRUCTURE"sv)) { return FetchCommand::DataItem { .type = FetchCommand::DataItemType::BodyStructure }; @@ -785,35 +785,35 @@ FetchCommand::DataItem Parser::parse_fetch_data_item() } Optional<Vector<Address>> Parser::parse_address_list() { - if (try_consume("NIL")) + if (try_consume("NIL"sv)) return {}; auto addresses = Vector<Address>(); - consume("("); - while (!try_consume(")")) { + consume("("sv); + while (!try_consume(")"sv)) { addresses.append(parse_address()); if (!at_end() && m_buffer[position] != ')') - consume(" "); + consume(" "sv); } return { addresses }; } Address Parser::parse_address() { - consume("("); + consume("("sv); auto address = Address(); auto name = parse_nstring(); address.name = Optional<String>(move(name)); - consume(" "); + consume(" "sv); auto source_route = parse_nstring(); address.source_route = Optional<String>(move(source_route)); - consume(" "); + consume(" "sv); auto mailbox = parse_nstring(); address.mailbox = Optional<String>(move(mailbox)); - consume(" "); + consume(" "sv); auto host = parse_nstring(); address.host = Optional<String>(move(host)); - consume(")"); + consume(")"sv); return address; } StringView Parser::parse_astring() @@ -825,30 +825,30 @@ StringView Parser::parse_astring() } HashMap<String, String> Parser::parse_body_fields_params() { - if (try_consume("NIL")) + if (try_consume("NIL"sv)) return {}; HashMap<String, String> fields; - consume("("); - while (!try_consume(")")) { + consume("("sv); + while (!try_consume(")"sv)) { auto key = parse_string(); - consume(" "); + consume(" "sv); auto value = parse_string(); fields.set(key, value); - try_consume(" "); + try_consume(" "sv); } return fields; } BodyExtension Parser::parse_body_extension() { - if (try_consume("NIL")) { + if (try_consume("NIL"sv)) { return BodyExtension { Optional<String> {} }; - } else if (try_consume("(")) { + } else if (try_consume("("sv)) { Vector<OwnPtr<BodyExtension>> extensions; - while (!try_consume(")")) { + while (!try_consume(")"sv)) { extensions.append(make<BodyExtension>(parse_body_extension())); - try_consume(" "); + try_consume(" "sv); } return BodyExtension { move(extensions) }; } else if (!at_end() && (m_buffer[position] == '"' || m_buffer[position] == '{')) { |