1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:48:11 +00:00

AK: Add a try variant of StringBuilder::append_escaped_for_json

This will allow us to make a fallible version of the JSON serializers.
This commit is contained in:
Idan Horowitz 2022-02-24 19:15:31 +02:00 committed by Andreas Kling
parent 7440b632fe
commit 9da8c78133
2 changed files with 14 additions and 7 deletions

View file

@ -171,31 +171,37 @@ void StringBuilder::append_as_lowercase(char ch)
} }
void StringBuilder::append_escaped_for_json(StringView string) void StringBuilder::append_escaped_for_json(StringView string)
{
MUST(try_append_escaped_for_json(string));
}
ErrorOr<void> StringBuilder::try_append_escaped_for_json(StringView string)
{ {
for (auto ch : string) { for (auto ch : string) {
switch (ch) { switch (ch) {
case '\b': case '\b':
append("\\b"); TRY(try_append("\\b"));
break; break;
case '\n': case '\n':
append("\\n"); TRY(try_append("\\n"));
break; break;
case '\t': case '\t':
append("\\t"); TRY(try_append("\\t"));
break; break;
case '\"': case '\"':
append("\\\""); TRY(try_append("\\\""));
break; break;
case '\\': case '\\':
append("\\\\"); TRY(try_append("\\\\"));
break; break;
default: default:
if (ch >= 0 && ch <= 0x1f) if (ch >= 0 && ch <= 0x1f)
appendff("\\u{:04x}", ch); TRY(try_appendff("\\u{:04x}", ch));
else else
append(ch); TRY(try_append(ch));
} }
} }
return {};
} }
} }

View file

@ -35,6 +35,7 @@ public:
return vformat(*this, fmtstr.view(), variadic_format_params); return vformat(*this, fmtstr.view(), variadic_format_params);
} }
ErrorOr<void> try_append(char const*, size_t); ErrorOr<void> try_append(char const*, size_t);
ErrorOr<void> try_append_escaped_for_json(StringView);
void append(StringView); void append(StringView);
#ifndef KERNEL #ifndef KERNEL