#include "errors.hpp"

#include <system_error>

namespace errors
{

using namespace std::literals::string_literals;

InvalidArgument::InvalidArgument(std::string_view propertyNameArg) :
    propertyName(propertyNameArg),
    errWhatDetailed(
        "Invalid argument was given for property: "s + description())
{}

InvalidArgument::InvalidArgument(std::string_view propertyNameArg,
                                 std::string_view info) :
    propertyName(propertyNameArg),
    errWhatDetailed(
        ("Invalid argument was given for property: "s + description() + ". "s)
            .append(info))
{}

const char* InvalidArgument::name() const noexcept
{
    return "org.freedesktop.DBus.Error.InvalidArgs";
}

const char* InvalidArgument::description() const noexcept
{
    return propertyName.c_str();
}

const char* InvalidArgument::what() const noexcept
{
    return errWhatDetailed.c_str();
}

int InvalidArgument::get_errno() const noexcept
{
    return static_cast<int>(std::errc::invalid_argument);
}

} // namespace errors