1/** 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "options.h" 17 18#include <sstream> 19 20namespace panda::proto { 21// Options 22Options::Options() : argparser_(new panda::PandArgParser()) {} 23 24Options::~Options() 25{ 26 delete argparser_; 27} 28 29bool Options::Parse(int argc, const char **argv) 30{ 31 panda::PandArg<bool> opHelp("help", false, "Print this message and exit"); 32 33 panda::PandArg<std::string> protoPathInput("input", "", 34 "Path of Proto bin file or directory. If input path starts with '@', " 35 "it considered as a text file with list of files or directories."); 36 panda::PandArg<std::string> protoBinSuffix("suffix", "", "suffix of proto bin file"); 37 panda::PandArg<std::string> outputFileName("output", "", "name of merged panda file"); 38 panda::PandArg<std::string> outputFilePath("outputFilePath", "", "output path for merged panda file"); 39 40 argparser_->Add(&opHelp); 41 argparser_->Add(&protoPathInput); 42 argparser_->Add(&protoBinSuffix); 43 argparser_->Add(&outputFileName); 44 argparser_->Add(&outputFilePath); 45 46 if (!argparser_->Parse(argc, argv) || opHelp.GetValue() || protoPathInput.GetValue().empty()) { 47 std::stringstream ss; 48 49 ss << argparser_->GetErrorString() << std::endl; 50 ss << "Usage: " 51 << "merge_abc" 52 << " [OPTIONS] --input" << std::endl; 53 ss << std::endl; 54 ss << "optional arguments:" << std::endl; 55 ss << argparser_->GetHelpString() << std::endl; 56 57 errorMsg_ = ss.str(); 58 return false; 59 } 60 61 protoPathInput_ = protoPathInput.GetValue(); 62 if (!protoBinSuffix.GetValue().empty()) { 63 protoBinSuffix_ = protoBinSuffix.GetValue(); 64 } 65 if (!outputFileName.GetValue().empty()) { 66 outputFileName_ = outputFileName.GetValue(); 67 } 68 if (!outputFilePath.GetValue().empty()) { 69 outputFilePath_ = outputFilePath.GetValue(); 70 } 71 72 return true; 73} 74} 75