34 lines
1.2 KiB
C++
34 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <expected>
|
|
#include <string>
|
|
#include <utility>
|
|
|
|
#include <modulus.hpp>
|
|
|
|
namespace vamp_zero {
|
|
|
|
enum class error_code : std::int32_t {
|
|
OK = 0,
|
|
INVALID_ARGUMENT = 1,
|
|
NOT_FOUND = 2,
|
|
UNAVAILABLE = 3,
|
|
PERSISTENCE = 4,
|
|
CONFLICT = 5,
|
|
INTERNAL = 6,
|
|
};
|
|
|
|
auto make_error(vamp_zero::error_code code, std::string message, modulus::source_location location = modulus::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION())) -> modulus::error;
|
|
auto fail_void(vamp_zero::error_code code, std::string message, modulus::source_location location = modulus::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION())) -> std::expected<void, modulus::error>;
|
|
|
|
template <typename VALUE>
|
|
auto fail(vamp_zero::error_code code, std::string message, modulus::source_location location = modulus::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION())) -> std::expected<VALUE, modulus::error>;
|
|
|
|
}
|
|
|
|
template <typename VALUE>
|
|
auto vamp_zero::fail(vamp_zero::error_code code, std::string message, modulus::source_location location) -> std::expected<VALUE, modulus::error> {
|
|
return modulus::fail<VALUE>(vamp_zero::make_error(code, std::move(message), location));
|
|
}
|