1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef FRAMEWORK_NATIVE_CMDS_IDLCLI_IDLCLI_H_
18 #define FRAMEWORK_NATIVE_CMDS_IDLCLI_IDLCLI_H_
19 
20 #include "utils.h"
21 
22 namespace android {
23 namespace idlcli {
24 
25 class IdlCli : public CommandWithSubcommands<IdlCli> {
getDescription()26     std::string getDescription() const override { return "Invoke IDL APIs."; }
27 
getUsageSummary()28     std::string getUsageSummary() const override { return "<idl> [options] [arguments]"; }
29 
getUsageDetails()30     UsageDetails getUsageDetails() const override {
31         UsageDetails details{
32                 {"-n <name>", {"Get named service, rather than default."}},
33                 {"<idl>", CommandRegistry<IdlCli>::List()},
34         };
35         return details;
36     }
37 
doArgs(Args & args)38     Status doArgs(Args &args) override {
39         while (args.get<std::string>().value_or("").find("-") == 0) {
40             auto opt = *args.pop<std::string>();
41             if (opt == "--") {
42                 break;
43             } else if (opt == "-n") {
44                 if (auto name = args.pop<decltype(mName)>()) {
45                     mName = *name;
46                 } else {
47                     std::cerr << "Missing Value for Name!" << std::endl;
48                     return USAGE;
49                 }
50             } else {
51                 std::cerr << "Invalid Option '" << opt << "'!" << std::endl;
52                 return USAGE;
53             }
54         }
55         return CommandWithSubcommands::doArgs(args);
56     }
57 
IdlCli()58     IdlCli() {}
59 
60     std::string mName;
61 
62 public:
Get()63     static IdlCli &Get() {
64         static IdlCli instance;
65         return instance;
66     }
67 
getName()68     auto getName() { return mName; }
69 };
70 
71 } // namespace idlcli
72 } // namespace android
73 
74 #endif // FRAMEWORK_NATIVE_CMDS_IDLCLI_IDLCLI_H_
75