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:
parent
7440b632fe
commit
9da8c78133
2 changed files with 14 additions and 7 deletions
|
@ -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 {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue