fix(basen): basen::Exception

This commit is contained in:
2024-09-30 18:15:45 +03:00
parent 8169651729
commit 6ffeb39801

View File

@ -41,7 +41,7 @@ namespace basen
if (isatty(fileno(stdin))) if (isatty(fileno(stdin)))
#endif #endif
{ {
throw std::logic_error("basen::getPipe: should use pipe syntax"); throw std::logic_error("should use pipe syntax ( | or < )");
} }
else else
{ {
@ -60,8 +60,9 @@ namespace basen
} }
uint8_t error(const std::string &str, argparse::ArgumentParser &program) noexcept uint8_t error(const std::string &str, argparse::ArgumentParser &program) noexcept
{ {
std::cerr << str << '\n'; std::cerr << "\033[31merror:\t\033[0m"
std::cerr << program << '\n'; << str << "\n\n"
<< program << '\n';
return 1; return 1;
} }
} }
@ -102,48 +103,48 @@ int main(int argc, char *argv[])
} }
catch (const std::exception &e) catch (const std::exception &e)
{ {
return basen::error("should use pipe syntax ( | or < )", program); return basen::error(e.what(), program);
} }
if (program.is_used("-t")) try
{ {
auto type = program.get<std::string>("-t"); if (program.is_used("-t"))
if (program.is_used("-d"))
{ {
auto data = (*basen::decoders.at(type))(str); auto type = program.get<std::string>("-t");
std::for_each(data.begin(), data.end(), [](uint8_t item) if (program.is_used("-d"))
{ std::cout << (char)item; }); {
std::cout << '\n'; auto data = (*basen::decoders.at(type))(str);
std::for_each(data.begin(), data.end(), [](uint8_t item)
{ std::cout << (char)item; });
std::cout << '\n';
}
else
{
std::span<uint8_t> dv((uint8_t *)str.data(), str.size());
std::cout << (*basen::encoders.at(type))(dv) << '\n';
}
} }
else if (program.is_used("-a"))
{
std::span<uint8_t> dv((uint8_t *)str.data(), str.size());
std::cout << (*basen::encoders.at(type))(dv) << '\n';
}
}
if (program.is_used("-a"))
{
auto alphabet = program.get<std::string>("-a");
uint8_t map[256];
try
{ {
auto alphabet = program.get<std::string>("-a");
uint8_t map[256];
baseN::digitsMap(alphabet.data(), alphabet.size(), map); baseN::digitsMap(alphabet.data(), alphabet.size(), map);
if (program.is_used("-d"))
{
auto data = baseN::decode(str, alphabet.size(), alphabet.data(), map);
std::for_each(data.begin(), data.end(), [](uint8_t item)
{ std::cout << (char)item; });
std::cout << '\n';
}
else
{
std::span<uint8_t> dv((uint8_t *)str.data(), str.size());
std::cout << baseN::encode(dv, alphabet.size(), alphabet.data()) << '\n';
}
} }
catch (const std::exception &e) }
{ catch (const basen::Exception &e)
return basen::error("alphabet contains same characters", program); {
} return basen::error(e.message(), program);
if (program.is_used("-d"))
{
auto data = baseN::decode(str, alphabet.size(), alphabet.data(), map);
std::for_each(data.begin(), data.end(), [](uint8_t item)
{ std::cout << (char)item; });
std::cout << '\n';
}
else
{
std::span<uint8_t> dv((uint8_t *)str.data(), str.size());
std::cout << baseN::encode(dv, alphabet.size(), alphabet.data()) << '\n';
}
} }
return 0; return 0;
} }