blob: 4c3544298c2c9d443082c0646aeb6b2ddfffc735 [file] [log] [blame] [edit]
/**
* Copyright 2022 Rive Inc.
*/
#ifndef _IMAGE_DIFF_ARGUMENTS_HPP_
#define _IMAGE_DIFF_ARGUMENTS_HPP_
#include <iostream>
#include <memory>
#include <string>
#include "args.hxx"
class ImageDiffArguments
{
public:
ImageDiffArguments(int argc, const char** argv)
{
m_Parser = std::make_unique<args::ArgumentParser>(
"Reads two png files and compares them, "
"writing the status to a status file, "
"and writing any diff images to a diff directory");
args::HelpFlag help(*m_Parser,
"help",
"Display this help menu",
{'h', "help"});
args::Group required(*m_Parser,
"required arguments:",
args::Group::Validators::All);
args::Group optional(*m_Parser,
"optional arguments:",
args::Group::Validators::DontCare);
args::ValueFlag<std::string> name(required,
"name",
"image/test name",
{'n', "name"});
args::ValueFlag<std::string> golden(required,
"path",
"original file path",
{'g', "golden"});
args::ValueFlag<std::string> candidate(required,
"path",
"candidate file path",
{'c', "candidate"});
args::ValueFlag<std::string> status(optional,
"path",
"status file to append",
{'s', "status"});
args::ValueFlag<std::string> output(optional,
"path",
"diff directory",
{'o', "output"});
args::CompletionFlag completion(*m_Parser, {"complete"});
try
{
m_Parser->ParseCLI(argc, argv);
}
catch (const std::invalid_argument e)
{
std::cout << e.what();
throw;
}
catch (const args::Completion& e)
{
std::cout << e.what();
throw;
}
catch (const args::Help&)
{
std::cout << *m_Parser;
throw;
}
catch (const args::ParseError& e)
{
std::cerr << e.what() << std::endl;
std::cerr << *m_Parser;
throw;
}
catch (args::ValidationError e)
{
std::cerr << e.what() << std::endl;
std::cerr << *m_Parser;
throw;
}
m_Name = args::get(name);
m_Golden = args::get(golden);
m_Candidate = args::get(candidate);
m_Status = args::get(status);
m_Output = args::get(output);
}
const std::string& name() const { return m_Name; }
const std::string& golden() const { return m_Golden; }
const std::string& candidate() const { return m_Candidate; }
const std::string& status() const { return m_Status; }
const std::string& output() const { return m_Output; }
private:
std::unique_ptr<args::ArgumentParser> m_Parser;
std::string m_Name;
std::string m_Golden;
std::string m_Candidate;
std::string m_Status;
std::string m_Output;
};
#endif