annotate irccdctl/plugin_config_cli.cpp @ 528:9daccaeedcce

Irccdctl: split cli.hpp, closes #726
author David Demelier <markand@malikania.fr>
date Thu, 16 Nov 2017 23:12:45 +0100
parents
children 27587ff92a64
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
528
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * plugin_config_cli.cpp -- implementation of irccdctl plugin-config
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr>
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <irccd/json_util.hpp>
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include "plugin_config_cli.hpp"
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 namespace irccd {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 namespace ctl {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 void plugin_config_cli::set(ctl::controller& ctl, const std::vector<std::string>&args)
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 request(ctl, {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 { "plugin", args[0] },
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 { "variable", args[1] },
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 { "value", args[2] }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 });
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
35
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 void plugin_config_cli::get(ctl::controller& ctl, const std::vector<std::string>& args)
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 auto json = nlohmann::json::object({
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 { "plugin", args[0] },
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 { "variable", args[1] }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 });
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 request(ctl, std::move(json), [args] (auto result) {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 if (result["variables"].is_object())
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 std::cout << json_util::pretty(result["variables"][args[1]]) << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 });
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 void plugin_config_cli::getall(ctl::controller& ctl, const std::vector<std::string> &args)
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 request(ctl, {{ "plugin", args[0] }}, [] (auto result) {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 auto variables = result["variables"];
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 for (auto v = variables.begin(); v != variables.end(); ++v)
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 std::cout << std::setw(16) << std::left << v.key() << " : " << json_util::pretty(v.value()) << std::endl;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 });
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
58
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 std::string plugin_config_cli::name() const
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 return "plugin-config";
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 void plugin_config_cli::exec(ctl::controller& ctl, const std::vector<std::string> &args)
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 switch (args.size()) {
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 case 3:
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 set(ctl, args);
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 break;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 case 2:
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 get(ctl, args);
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 break;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 case 1:
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 getall(ctl, args);
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 break;
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 default:
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 throw std::invalid_argument("plugin-config requires at least 1 argument");
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 }
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
80
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 } // !ctl
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
9daccaeedcce Irccdctl: split cli.hpp, closes #726
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 } // !irccd