diff --git a/src/storage/v3/result.hpp b/src/storage/v3/result.hpp index 86fdb10d0..ecec4ad1e 100644 --- a/src/storage/v3/result.hpp +++ b/src/storage/v3/result.hpp @@ -11,6 +11,7 @@ #pragma once +#include <string> #include <type_traits> #include "utils/result.hpp" @@ -19,16 +20,35 @@ namespace memgraph::storage::v3 { static_assert(std::is_same_v<uint8_t, unsigned char>); -enum class Error : uint8_t { +enum class ErrorCode { SERIALIZATION_ERROR, NONEXISTENT_OBJECT, DELETED_OBJECT, VERTEX_HAS_EDGES, PROPERTIES_DISABLED, - VERTEX_ALREADY_INSERTED + VERTEX_ALREADY_INSERTED, + // Schema Violations + SCHEMA_NO_SCHEMA_DEFINED_FOR_LABEL, + SCHEMA_VERTEX_PROPERTY_WRONG_TYPE, + SCHEMA_VERTEX_UPDATE_PRIMARY_KEY, + SCHEMA_VERTEX_UPDATE_PRIMARY_LABEL, + SCHEMA_VERTEX_SECONDARY_LABEL_IS_PRIMARY, + SCHEMA_VERTEX_PRIMARY_PROPERTIES_UNDEFINED, }; +struct ShardError { + ShardError(ErrorCode code, std::string message, std::string source) + : code{code}, message{std::move(message)}, source{std::move(source)} {} + + ErrorCode code; + // TODO Maybe add category + std::string message; + std::string source; +}; + +#define SHARD_ERROR(...) memgraph::storage::v3::ShardError(__VA_ARGS__, fmt::format("{}:{}", __FILE__, __LINE__)) + template <class TValue> -using Result = utils::BasicResult<Error, TValue>; +using Result = utils::BasicResult<ShardError, TValue>; } // namespace memgraph::storage::v3