Merge cdc_stream into asset_stream_manager (#26)

Adds start and stop commands to asset_stream_manager.
asset_stream_manager will be renamed to cdc_stream next.
This commit is contained in:
Lutz Justen
2022-12-01 12:40:00 +01:00
committed by GitHub
parent 876e59409f
commit f0539226a2
23 changed files with 507 additions and 281 deletions
+42 -3
View File
@@ -14,6 +14,8 @@
#include "asset_stream_manager/base_command.h"
#include "absl/strings/str_format.h"
#include "absl_helper/jedec_size_flag.h"
#include "lyra/lyra.hpp"
namespace cdc_ft {
@@ -33,14 +35,38 @@ void BaseCommand::Register(lyra::cli& cli) {
RegisterCommandLineFlags(cmd);
// Workaround for Lyra treating --unknown_flags as positional argument.
// If this argument is not empty, it's an unknown arg.
cmd.add_argument(lyra::arg(invalid_arg_, ""));
// Detect extra positional args.
cmd.add_argument(lyra::arg(PosArgValidator(&extra_positional_arg_), ""));
// Register command with CLI.
cli.add_argument(std::move(cmd));
}
std::function<void(const std::string&)> BaseCommand::JedecParser(
const char* flag_name, uint64_t* bytes) {
return [flag_name, bytes,
error = &jedec_parse_error_](const std::string& value) {
JedecSize size;
if (AbslParseFlag(value, &size, error)) {
*bytes = size.Size();
} else {
*error = absl::StrFormat("Failed to parse %s=%s: %s", flag_name, value,
*error);
}
};
}
std::function<void(const std::string&)> BaseCommand::PosArgValidator(
std::string* str) {
return [str, invalid_arg = &invalid_arg_](const std::string& value) {
if (!value.empty() && value[0] == '-') {
*invalid_arg = value;
} else {
*str = value;
}
};
}
void BaseCommand::CommandHandler(const lyra::group& g) {
// Handle -h, --help.
if (show_help_) {
@@ -57,6 +83,19 @@ void BaseCommand::CommandHandler(const lyra::group& g) {
return;
}
if (!jedec_parse_error_.empty()) {
std::cerr << "Error: " << jedec_parse_error_ << std::endl;
*exit_code_ = 1;
return;
}
if (!extra_positional_arg_.empty()) {
std::cerr << "Error: Extraneous positional argument '"
<< extra_positional_arg_ << "'. Try -h for help." << std::endl;
*exit_code_ = 1;
return;
}
// Run and print error.
absl::Status status = Run();
if (!status.ok()) {