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