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