Serenity Operating System
1/*
2 * Copyright (c) 2019-2021, Andreas Kling <kling@serenityos.org>
3 * Copyright (c) 2022, Samuel Atkins <atkinssj@serenityos.org>
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#pragma once
9
10#include <AK/DeprecatedString.h>
11#include <AK/JsonObject.h>
12#include <AK/Vector.h>
13#include <LibCore/File.h>
14#include <ctype.h>
15
16DeprecatedString title_casify(DeprecatedString const& dashy_name)
17{
18 auto parts = dashy_name.split('-');
19 StringBuilder builder;
20 for (auto& part : parts) {
21 if (part.is_empty())
22 continue;
23 builder.append(toupper(part[0]));
24 if (part.length() == 1)
25 continue;
26 builder.append(part.substring_view(1, part.length() - 1));
27 }
28 return builder.to_deprecated_string();
29}
30
31DeprecatedString camel_casify(StringView dashy_name)
32{
33 auto parts = dashy_name.split_view('-');
34 StringBuilder builder;
35 bool first = true;
36 for (auto& part : parts) {
37 if (part.is_empty())
38 continue;
39 char ch = part[0];
40 if (!first)
41 ch = toupper(ch);
42 else
43 first = false;
44 builder.append(ch);
45 if (part.length() == 1)
46 continue;
47 builder.append(part.substring_view(1, part.length() - 1));
48 }
49 return builder.to_deprecated_string();
50}
51
52DeprecatedString snake_casify(DeprecatedString const& dashy_name)
53{
54 return dashy_name.replace("-"sv, "_"sv, ReplaceMode::All);
55}
56
57ErrorOr<JsonValue> read_entire_file_as_json(StringView filename)
58{
59 auto file = TRY(Core::File::open(filename, Core::File::OpenMode::Read));
60 auto json_size = TRY(file->size());
61 auto json_data = TRY(ByteBuffer::create_uninitialized(json_size));
62 TRY(file->read_until_filled(json_data.bytes()));
63 return JsonValue::from_string(json_data);
64}