typesense/include/option.h
2023-06-26 15:19:06 +05:30

62 lines
1.1 KiB
C++

#pragma once
#include <stdint.h>
#include <string>
template <typename T=uint32_t>
class Option {
private:
T value;
bool is_ok;
std::string error_msg;
uint32_t error_code{};
public:
explicit Option() = delete;
explicit Option(const T & value): value(value), is_ok(true) {
}
Option(const uint32_t code, const std::string & error_msg): is_ok(false), error_msg(error_msg), error_code(code) {
}
Option(const Option &obj) {
value = obj.value;
is_ok = obj.is_ok;
error_msg = obj.error_msg;
error_code = obj.error_code;
}
Option& operator=(Option&& obj) noexcept {
if (&obj == this)
return *this;
value = obj.value;
is_ok = obj.is_ok;
error_msg = obj.error_msg;
error_code = obj.error_code;
return *this;
}
bool ok() const {
return is_ok;
}
T get() const {
return value;
}
std::string error() const {
return error_msg;
}
uint32_t code() const {
return error_code;
}
};