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