Serenity Operating System
at master 53 lines 1.7 kB view raw
1/* 2 * Copyright (c) 2021, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibConfig/Client.h> 8#include <LibCore/ArgsParser.h> 9#include <LibCore/EventLoop.h> 10#include <LibMain/Main.h> 11 12ErrorOr<int> serenity_main(Main::Arguments arguments) 13{ 14 Core::EventLoop loop; 15 DeprecatedString domain; 16 DeprecatedString group; 17 DeprecatedString key; 18 DeprecatedString value_to_write; 19 bool remove = false; 20 21 Core::ArgsParser args_parser; 22 args_parser.set_general_help("Show or modify values in the configuration files through ConfigServer."); 23 args_parser.add_option(remove, "Remove group or key", "remove", 'r'); 24 args_parser.add_positional_argument(domain, "Config domain", "domain"); 25 args_parser.add_positional_argument(group, "Group name", "group"); 26 args_parser.add_positional_argument(key, "Key name", "key", Core::ArgsParser::Required::No); 27 args_parser.add_positional_argument(value_to_write, "Value to write", "value", Core::ArgsParser::Required::No); 28 args_parser.parse(arguments); 29 30 if (remove) { 31 if (!key.is_null()) 32 Config::remove_key(domain, group, key); 33 else 34 Config::remove_group(domain, group); 35 return 0; 36 } 37 38 if (key.is_null() && value_to_write.is_null()) { 39 Config::add_group(domain, group); 40 return 0; 41 } 42 43 if (!key.is_null() && !value_to_write.is_null()) { 44 Config::write_string(domain, group, key, value_to_write); 45 return 0; 46 } 47 48 auto value_or_error = Config::Client::the().read_string_value(domain, group, key); 49 if (!value_or_error.has_value()) 50 return 1; 51 outln("{}", value_or_error.value()); 52 return 0; 53}