blob: c89294aacfd5a21bfafcbfb7a9fab6e17bbe2c42 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <iostream>
#include <lib/fxl/command_line.h>
#include <lib/fxl/log_settings_command_line.h>
#include "garnet/bin/iquery/formatter.h"
#include "garnet/bin/iquery/modes.h"
int main(int argc, const char** argv) {
auto command_line = fxl::CommandLineFromArgcArgv(argc, argv);
if (!fxl::SetLogSettingsFromCommandLine(command_line))
return 1;
iquery::Options options(command_line);
if (!options.Valid()) {
return 1;
}
if (command_line.HasOption("help") || options.paths.size() == 0) {
options.Usage(command_line.argv0());
return 0;
}
std::vector<iquery::ObjectNode> results;
bool success = false;
// Dispatch to the correct mode.
if (options.mode == iquery::Options::Mode::CAT) {
success = iquery::RunCat(options, &results);
} else if (options.mode == iquery::Options::Mode::FIND) {
success = iquery::RunFind(options, &results);
} else if (options.mode == iquery::Options::Mode::LS) {
success = iquery::RunLs(options, &results);
} else {
FXL_LOG(ERROR) << "Unsupported mode";
return 1;
}
if (!success) {
FXL_LOG(ERROR) << "Failed running mode. Exiting.";
return 1;
}
// Formatter will handle the correct case according to the options values.
std::cout << options.formatter->Format(options, results);
return 0;
}