Skip to content

Commit 9a2d4eb

Browse files
committed
Splited status.h
1 parent 9ef7a0a commit 9a2d4eb

File tree

5 files changed

+174
-156
lines changed

5 files changed

+174
-156
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#pragma once
2+
3+
#include <util/generic/singleton.h>
4+
#include <util/system/yassert.h>
5+
6+
#include <optional>
7+
8+
namespace NKikimr {
9+
10+
template <class TDerived, class TErrorDescription, class TStatus, TStatus StatusOk, TStatus DefaultError>
11+
class TConclusionStatusGenericImpl {
12+
protected:
13+
std::optional<TErrorDescription> ErrorDescription;
14+
TStatus Status = StatusOk;
15+
16+
TConclusionStatusGenericImpl() = default;
17+
18+
TConclusionStatusGenericImpl(const TErrorDescription& error, TStatus status = DefaultError)
19+
: ErrorDescription(error)
20+
, Status(status) {
21+
Y_ABORT_UNLESS(!!ErrorDescription);
22+
}
23+
24+
TConclusionStatusGenericImpl(TErrorDescription&& error, TStatus status = DefaultError)
25+
: ErrorDescription(std::move(error))
26+
, Status(status) {
27+
Y_ABORT_UNLESS(!!ErrorDescription);
28+
}
29+
30+
public:
31+
virtual ~TConclusionStatusGenericImpl() = default;
32+
33+
public:
34+
[[nodiscard]] const TErrorDescription& GetErrorDescription() const {
35+
return ErrorDescription ? *ErrorDescription : Default<TErrorDescription>();
36+
}
37+
38+
[[nodiscard]] TStatus GetStatus() const {
39+
return Status;
40+
}
41+
42+
template <class TErrorMessage>
43+
[[nodiscard]] static TDerived Fail(const TErrorMessage& errorMessage) {
44+
return TDerived(errorMessage);
45+
}
46+
47+
template <class TErrorMessage>
48+
[[nodiscard]] static TDerived Fail(const TStatus& status, const TErrorMessage& errorMessage) {
49+
Y_ABORT_UNLESS(DefaultError == StatusOk || status != StatusOk);
50+
return TDerived(errorMessage, status);
51+
}
52+
53+
[[nodiscard]] bool IsFail() const {
54+
return !Ok();
55+
}
56+
57+
[[nodiscard]] bool IsSuccess() const {
58+
return Ok();
59+
}
60+
61+
[[nodiscard]] bool Ok() const {
62+
return !ErrorDescription;
63+
}
64+
65+
[[nodiscard]] bool operator!() const {
66+
return !!ErrorDescription;
67+
}
68+
69+
[[nodiscard]] static TDerived Success() {
70+
return TDerived();
71+
}
72+
};
73+
74+
} // namespace NKikimr

ydb/library/conclusion/generic/status.h

Lines changed: 0 additions & 155 deletions
This file was deleted.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#pragma once
2+
3+
#include "generic_status.h"
4+
5+
#include <util/generic/string.h>
6+
7+
namespace NKikimr {
8+
9+
template <class TStatus, TStatus StatusOk, TStatus DefaultError>
10+
class TConclusionStatusImpl : public TConclusionStatusGenericImpl<TConclusionStatusImpl<TStatus, StatusOk, DefaultError>, TString, TStatus, StatusOk, DefaultError> {
11+
protected:
12+
using TSelf = TConclusionStatusImpl<TStatus, StatusOk, DefaultError>;
13+
using TBase = TConclusionStatusGenericImpl<TSelf, TString, TStatus, StatusOk, DefaultError>;
14+
using TBase::TBase;
15+
16+
friend class TConclusionStatusGenericImpl<TSelf, TString, TStatus, StatusOk, DefaultError>;
17+
18+
TConclusionStatusImpl() = default;
19+
20+
TConclusionStatusImpl(const char* errorMessage, TStatus status = DefaultError)
21+
: TBase(TString(errorMessage), status) {
22+
}
23+
24+
TConclusionStatusImpl(const std::string& errorMessage, TStatus status = DefaultError)
25+
: TBase(TString(errorMessage), status) {
26+
}
27+
28+
public:
29+
void Validate(const TString& processInfo = Default<TString>()) const {
30+
if (processInfo) {
31+
Y_ABORT_UNLESS(TBase::Ok(), "error=%s, processInfo=%s", GetErrorMessage().c_str(), processInfo.c_str());
32+
} else {
33+
Y_ABORT_UNLESS(TBase::Ok(), "error=%s", GetErrorMessage().c_str());
34+
}
35+
}
36+
37+
[[nodiscard]] TString GetErrorMessage() const {
38+
return TBase::GetErrorDescription();
39+
}
40+
};
41+
42+
} // namespace NKikimr
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#pragma once
2+
3+
#include "generic_status.h"
4+
5+
#include <yql/essentials/public/issue/yql_issue.h>
6+
7+
namespace NKikimr {
8+
9+
template <class TStatus, TStatus StatusOk, TStatus DefaultError>
10+
class TYQLConclusionStatusImpl : public TConclusionStatusGenericImpl<TYQLConclusionStatusImpl<TStatus, StatusOk, DefaultError>, NYql::TIssues, TStatus, StatusOk, DefaultError> {
11+
protected:
12+
using TSelf = TYQLConclusionStatusImpl<TStatus, StatusOk, DefaultError>;
13+
using TBase = TConclusionStatusGenericImpl<TSelf, NYql::TIssues, TStatus, StatusOk, DefaultError>;
14+
using TBase::TBase;
15+
16+
friend class TConclusionStatusGenericImpl<TSelf, NYql::TIssues, TStatus, StatusOk, DefaultError>;
17+
18+
TYQLConclusionStatusImpl() = default;
19+
20+
TYQLConclusionStatusImpl(const TString& errorMessage, TStatus status = DefaultError)
21+
: TBase({NYql::TIssue(errorMessage)}, status) {
22+
}
23+
24+
public:
25+
TYQLConclusionStatusImpl& AddParentIssue(NYql::TIssue issue) {
26+
Y_ABORT_UNLESS(!!TBase::ErrorMessage);
27+
for (const auto& childIssue : *TBase::ErrorMessage) {
28+
issue.AddSubIssue(MakeIntrusive<NYql::TIssue>(childIssue));
29+
}
30+
TBase::ErrorMessage = {std::move(issue)};
31+
return *this;
32+
}
33+
34+
TYQLConclusionStatusImpl& AddParentIssue(const TString& message) {
35+
AddParentIssue(NYql::TIssue(message));
36+
return *this;
37+
}
38+
39+
TYQLConclusionStatusImpl& AddIssue(NYql::TIssue issue) {
40+
Y_ABORT_UNLESS(!!TBase::ErrorMessage);
41+
TBase::ErrorMessage->AddIssue(std::move(issue));
42+
return *this;
43+
}
44+
45+
TYQLConclusionStatusImpl& AddIssue(const TString& message) {
46+
AddIssue(NYql::TIssue(message));
47+
return *this;
48+
}
49+
50+
[[nodiscard]] TString GetErrorMessage() const {
51+
return TBase::GetErrorDescription().ToOneLineString();
52+
}
53+
};
54+
55+
} // namespace NKikimr

ydb/library/conclusion/status.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
2-
#include <ydb/library/conclusion/generic/status.h>
2+
3+
#include <ydb/library/conclusion/generic/string_status.h>
4+
#include <ydb/library/conclusion/generic/yql_status.h>
35

46
namespace NKikimr {
57

0 commit comments

Comments
 (0)