summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibIMAP
diff options
context:
space:
mode:
authorsin-ack <sin-ack@users.noreply.github.com>2022-07-11 17:32:29 +0000
committerAndreas Kling <kling@serenityos.org>2022-07-12 23:11:35 +0200
commit3f3f45580ab7266258e97cb3cecf1e24716d61c5 (patch)
tree152c7a187c98184d58bf91a326357e0af435edcf /Userland/Libraries/LibIMAP
parente5f09ea1703bacfbb79a4ad3c587a7d5d3d7bb13 (diff)
downloadserenity-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.cpp24
-rw-r--r--Userland/Libraries/LibIMAP/Objects.cpp20
-rw-r--r--Userland/Libraries/LibIMAP/Parser.cpp340
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] == '{')) {