LibKeyboard: Change some Optional<T> returns to ErrorOr<T>

Makes CharacterMapFile::load_from_file and CharacterMap::load_from_file
return ErrorOr instead of Optional. This makes them a little nicer to
use and a little easier to read, as they seem to have been approximating
this.
This commit is contained in:
RasmusNylander 2021-12-16 17:46:49 +01:00 committed by Andreas Kling
parent 017135b44e
commit 4e65c4dae4
Notes: sideshowbarker 2024-07-17 21:33:08 +09:00
5 changed files with 10 additions and 22 deletions

View file

@ -17,13 +17,11 @@ namespace Keyboard {
#ifndef KERNEL
// The Kernel explicitly and exclusively links only this file into it.
// Thus, we cannot even include a reference to the symbol `CharacterMapFile::load_from_file`.
Optional<CharacterMap> CharacterMap::load_from_file(const String& map_name)
ErrorOr<CharacterMap> CharacterMap::load_from_file(const String& map_name)
{
auto result = CharacterMapFile::load_from_file(map_name);
if (!result.has_value())
return {};
auto result = TRY(CharacterMapFile::load_from_file(map_name));
return CharacterMap(map_name, result.value());
return CharacterMap(map_name, result);
}
#endif

View file

@ -19,7 +19,7 @@ class CharacterMap {
public:
CharacterMap(const String& map_name, const CharacterMapData& map_data);
static Optional<CharacterMap> load_from_file(const String& filename);
static ErrorOr<CharacterMap> load_from_file(const String& filename);
#ifndef KERNEL
int set_system_map();

View file

@ -11,7 +11,7 @@
namespace Keyboard {
Optional<CharacterMapData> CharacterMapFile::load_from_file(const String& filename)
ErrorOr<CharacterMapData> CharacterMapFile::load_from_file(const String& filename)
{
auto path = filename;
if (!path.ends_with(".json")) {
@ -22,20 +22,10 @@ Optional<CharacterMapData> CharacterMapFile::load_from_file(const String& filena
path = full_path.to_string();
}
auto file = Core::File::construct(path);
file->open(Core::OpenMode::ReadOnly);
if (!file->is_open()) {
dbgln("Failed to open {}: {}", path, file->error_string());
return {};
}
auto file = TRY(Core::File::open(path, Core::OpenMode::ReadOnly));
auto file_contents = file->read_all();
auto json_result = JsonValue::from_string(file_contents);
if (json_result.is_error()) {
dbgln("Failed to load character map from file {}", path);
return {};
}
auto json = json_result.value().as_object();
auto json_result = TRY(JsonValue::from_string(file_contents));
const auto& json = json_result.as_object();
Vector<u32> map = read_map(json, "map");
Vector<u32> shift_map = read_map(json, "shift_map");

View file

@ -14,7 +14,7 @@ namespace Keyboard {
class CharacterMapFile {
public:
static Optional<CharacterMapData> load_from_file(const String& filename);
static ErrorOr<CharacterMapData> load_from_file(const String& filename);
private:
static Vector<u32> read_map(const JsonObject& json, const String& name);

View file

@ -34,7 +34,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
}
auto character_map = Keyboard::CharacterMap::load_from_file(path);
if (!character_map.has_value()) {
if (character_map.is_error()) {
warnln("Cannot read keymap {}", path);
warnln("Hint: Must be either a keymap name (e.g. 'en-us') or a full path.");
return 1;