...
This commit is contained in:
@@ -509,6 +509,82 @@ static_assert(mcc_telemetry_data_c<MccTelemetryData>, "");
|
||||
/* DEFAULT SERIALIZER/DESERIALIZER FOR COORDINATE-RELATED CLASSES */
|
||||
|
||||
|
||||
enum class MccCoordinateConvErrorCode : int {
|
||||
ERROR_OK,
|
||||
ERROR_ARG_LEN,
|
||||
ERROR_NONNUM_ARG,
|
||||
ERROR_NONSGM_ARG,
|
||||
ERROR_INVALID_CPAIR,
|
||||
ERROR_TIMEPOINT,
|
||||
ERROR_INVALID_COORD_FMT,
|
||||
ERROR_INVALID_COORD_PREC
|
||||
};
|
||||
|
||||
class MccCoordinateConvErrorCategory : public std::error_category
|
||||
{
|
||||
public:
|
||||
const char* name() const noexcept
|
||||
{
|
||||
return "MCC-COORD-CONV";
|
||||
}
|
||||
|
||||
std::string message(int ec) const
|
||||
{
|
||||
MccCoordinateConvErrorCode err = static_cast<MccCoordinateConvErrorCode>(ec);
|
||||
|
||||
switch (err) {
|
||||
case MccCoordinateConvErrorCode::ERROR_OK:
|
||||
return "OK";
|
||||
case MccCoordinateConvErrorCode::ERROR_ARG_LEN:
|
||||
return "invalid argument length or number of argument elements";
|
||||
case MccCoordinateConvErrorCode::ERROR_NONNUM_ARG:
|
||||
return "non-numeric or out-of-range argument";
|
||||
case MccCoordinateConvErrorCode::ERROR_NONSGM_ARG:
|
||||
return "non-sexagesimal argument";
|
||||
case MccCoordinateConvErrorCode::ERROR_INVALID_CPAIR:
|
||||
return "invalid coordinate pair name";
|
||||
case MccCoordinateConvErrorCode::ERROR_TIMEPOINT:
|
||||
return "invalid time point";
|
||||
case MccCoordinateConvErrorCode::ERROR_INVALID_COORD_FMT:
|
||||
return "invalid coordinate formatter string";
|
||||
case MccCoordinateConvErrorCode::ERROR_INVALID_COORD_PREC:
|
||||
return "invalid coordinate formatter precision string";
|
||||
defaut:
|
||||
return "unknown";
|
||||
};
|
||||
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
static const MccCoordinateConvErrorCategory& get()
|
||||
{
|
||||
static const MccCoordinateConvErrorCategory constInst;
|
||||
return constInst;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace mcc
|
||||
|
||||
|
||||
namespace std
|
||||
{
|
||||
|
||||
template <>
|
||||
class is_error_code_enum<mcc::MccCoordinateConvErrorCode> : public true_type
|
||||
{
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
|
||||
|
||||
namespace mcc
|
||||
{
|
||||
|
||||
inline std::error_code make_error_code(mcc::MccCoordinateConvErrorCode ec)
|
||||
{
|
||||
return std::error_code(static_cast<int>(ec), mcc::MccCoordinateConvErrorCategory::get());
|
||||
}
|
||||
|
||||
static constexpr std::string_view MccCoordinateDefaultDelimiter{","};
|
||||
|
||||
// base class
|
||||
@@ -572,7 +648,8 @@ protected:
|
||||
|
||||
bool ok = cep.fromCharRange(bytes);
|
||||
if (!ok) {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_TIMEPOINT;
|
||||
}
|
||||
|
||||
mcc_tp2tp(cep.UTC(), cp.time_point);
|
||||
@@ -588,7 +665,8 @@ protected:
|
||||
if (ang) {
|
||||
ang_value = MccAngle(ang.value(), MccDegreeTag{});
|
||||
} else {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_NONNUM_ARG;
|
||||
}
|
||||
|
||||
return {};
|
||||
@@ -602,7 +680,8 @@ protected:
|
||||
if (ang) {
|
||||
ang_value = MccAngle(ang.value(), MccDegreeTag{});
|
||||
} else {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_NONNUM_ARG;
|
||||
}
|
||||
|
||||
return {};
|
||||
@@ -761,7 +840,8 @@ public:
|
||||
auto els = splitToElements(std::forward<IR>(bytes));
|
||||
|
||||
if (els.size() < 2) { // at least coordinate pair must be given
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_ARG_LEN;
|
||||
}
|
||||
|
||||
MccCelestialPoint pt{.pair_kind = MccCoordPairKind::COORDS_KIND_RADEC_ICRS};
|
||||
@@ -769,7 +849,8 @@ public:
|
||||
if (els.size() > 2) { // pair of coordinates and the pair kind
|
||||
pt.pair_kind = MccCoordStrToPairKind(els[2]);
|
||||
if (pt.pair_kind == MccCoordPairKind::COORDS_KIND_UNKNOWN) {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_INVALID_CPAIR;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -804,12 +885,14 @@ public:
|
||||
ang1 = mcc::utils::parsAngleString(els[0]);
|
||||
}
|
||||
if (!ang1) {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_NONNUM_ARG;
|
||||
}
|
||||
|
||||
ang2 = mcc::utils::parsAngleString(els[1]);
|
||||
if (!ang2) {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_NONNUM_ARG;
|
||||
}
|
||||
|
||||
|
||||
@@ -886,13 +969,15 @@ public:
|
||||
|
||||
auto els = splitToElements(std::forward<IR>(bytes));
|
||||
if (els.size() < 10) {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_ARG_LEN;
|
||||
}
|
||||
|
||||
MccEqtHrzCoords pt;
|
||||
pt.pair_kind = MccCoordStrToPairKind(els[8]);
|
||||
if (pt.pair_kind == MccCoordPairKind::COORDS_KIND_UNKNOWN) {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_INVALID_CPAIR;
|
||||
}
|
||||
|
||||
auto err = parseTimePoint(els[9], pt);
|
||||
@@ -999,7 +1084,8 @@ public:
|
||||
|
||||
auto els = splitToElements(std::forward<IR>(bytes));
|
||||
if (els.size() < 12) {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_ARG_LEN;
|
||||
}
|
||||
|
||||
MccPointingTarget pt;
|
||||
@@ -1068,7 +1154,8 @@ public:
|
||||
|
||||
auto els = splitToElements(std::forward<IR>(bytes));
|
||||
if (els.size() < 12) {
|
||||
return std::make_error_code(std::errc::invalid_argument);
|
||||
// return std::make_error_code(std::errc::invalid_argument);
|
||||
return MccCoordinateConvErrorCode::ERROR_ARG_LEN;
|
||||
}
|
||||
|
||||
MccTelemetryData tdata;
|
||||
|
||||
Reference in New Issue
Block a user