1
1
#pragma once
2
+
2
3
#include " abstract.h"
3
4
#include " s3_out.h"
4
5
5
6
#include < ydb/library/actors/core/event_local.h>
6
7
7
- #include < ydb/core/base/events.h>
8
- #include < ydb/core/protos/flat_scheme_op.pb.h>
9
-
10
- #include < util/generic/ptr.h>
11
-
12
8
namespace NKikimr ::NWrappers::NExternalStorage {
13
9
14
10
template <typename TDerived, ui32 EventType, typename T>
15
11
struct TGenericRequest : public NActors ::TEventLocal<TDerived, EventType> {
16
12
private:
17
13
IRequestContext::TPtr RequestContext;
14
+
18
15
public:
19
16
using TRequest = T;
20
17
TRequest Request;
18
+
21
19
IRequestContext::TPtr GetRequestContext () const {
22
20
return RequestContext;
23
21
}
@@ -30,11 +28,7 @@ struct TGenericRequest: public NActors::TEventLocal<TDerived, EventType> {
30
28
return Request;
31
29
}
32
30
33
- explicit TGenericRequest (const TRequest& request)
34
- : Request(request) {
35
- }
36
-
37
- explicit TGenericRequest (const TRequest& request, IRequestContext::TPtr requestContext)
31
+ explicit TGenericRequest (const TRequest& request, IRequestContext::TPtr requestContext = nullptr )
38
32
: RequestContext(requestContext)
39
33
, Request(request)
40
34
{
@@ -57,7 +51,8 @@ struct TRequestWithBody: public TGenericRequest<TDerived, EventType, T> {
57
51
58
52
explicit TRequestWithBody (const typename TGeneric::TRequest& request, TString&& body)
59
53
: TGeneric(request)
60
- , Body(std::move(body)) {
54
+ , Body(std::move(body))
55
+ {
61
56
}
62
57
63
58
TString ToString () const override {
@@ -70,81 +65,59 @@ struct TRequestWithBody: public TGenericRequest<TDerived, EventType, T> {
70
65
using TBase = TRequestWithBody<TDerived, EventType, T>;
71
66
};
72
67
73
- template <typename TDerived, ui32 EventType, typename TAwsResultExt , typename U = TAwsResultExt >
74
- struct TBaseGenericResponse : public NActors ::TEventLocal<TDerived, EventType> {
68
+ template <typename TDerived, ui32 EventType, typename T , typename U = T >
69
+ struct TGenericResponse : public NActors ::TEventLocal<TDerived, EventType> {
75
70
private:
76
- using TBase = NActors::TEventLocal<TDerived, EventType>;
77
71
IRequestContext::TPtr RequestContext;
72
+
78
73
public:
79
- using TOutcome = Aws::Utils::Outcome<TAwsResultExt , Aws::S3::S3Error>;
74
+ using TOutcome = Aws::Utils::Outcome<T , Aws::S3::S3Error>;
80
75
using TResult = Aws::Utils::Outcome<U, Aws::S3::S3Error>;
81
76
using TAwsResult = U;
82
- using TAwsOutcome = TResult;
83
77
using TKey = std::optional<TString>;
84
78
79
+ TKey Key;
85
80
TResult Result;
86
81
87
- explicit TBaseGenericResponse (const TOutcome& outcome)
88
- : Result(TDerived::ResultFromOutcome(outcome)) {
82
+ explicit TGenericResponse (const TOutcome& outcome, IRequestContext::TPtr requestContext = nullptr )
83
+ : RequestContext(requestContext)
84
+ , Result(TDerived::ResultFromOutcome(outcome))
85
+ {
89
86
}
90
87
91
- explicit TBaseGenericResponse (const TOutcome& outcome, IRequestContext::TPtr requestContext)
88
+ explicit TGenericResponse (const TKey& key, const TOutcome& outcome, IRequestContext::TPtr requestContext = nullptr )
92
89
: RequestContext(requestContext)
93
- , Result(TDerived::ResultFromOutcome(outcome)) {
90
+ , Key(key)
91
+ , Result(TDerived::ResultFromOutcome(outcome))
92
+ {
94
93
}
95
94
96
95
bool IsSuccess () const {
97
96
return Result.IsSuccess ();
98
97
}
98
+
99
99
const Aws::S3::S3Error& GetError () const {
100
100
return Result.GetError ();
101
101
}
102
+
102
103
const U& GetResult () const {
103
104
return Result.GetResult ();
104
105
}
105
106
106
- template <class T >
107
- std::shared_ptr<T> GetRequestContextAs () const {
108
- return dynamic_pointer_cast<T>(RequestContext);
107
+ template <typename Type>
108
+ std::shared_ptr<Type> GetRequestContextAs () const {
109
+ Y_ABORT_UNLESS (RequestContext);
110
+ return dynamic_pointer_cast<Type>(RequestContext);
109
111
}
110
112
111
113
static TResult ResultFromOutcome (const TOutcome& outcome) {
112
114
return outcome;
113
115
}
114
116
115
- TString ToString () const override {
116
- return TStringBuilder () << this ->ToStringHeader () << " {"
117
- << " Result: " << Result
118
- << " }" ;
119
- }
120
- };
121
-
122
- template <typename TDerived, ui32 EventType, typename TAwsResult, typename U = TAwsResult>
123
- struct TGenericResponse : public TBaseGenericResponse <TDerived, EventType, TAwsResult, U> {
124
- private:
125
- using TBase = TBaseGenericResponse<TDerived, EventType, TAwsResult, U>;
126
- public:
127
- using TOutcome = typename TBase::TOutcome;
128
- using TResult = typename TBase::TResult;
129
- using TKey = std::optional<TString>;
130
-
131
- TKey Key;
132
-
133
- explicit TGenericResponse (const TKey& key, const TOutcome& outcome)
134
- : TBase(outcome)
135
- , Key(key) {
136
- }
137
-
138
- explicit TGenericResponse (const TKey& key, const TOutcome& outcome, IRequestContext::TPtr requestContext)
139
- : TBase(outcome, requestContext)
140
- , Key(key)
141
- {
142
- }
143
-
144
117
TString ToString () const override {
145
118
return TStringBuilder () << this ->ToStringHeader () << " {"
146
119
<< " Key: " << (Key ? " null" : *Key)
147
- << " Result: " << TBase:: Result
120
+ << " Result: " << Result
148
121
<< " }" ;
149
122
}
150
123
};
@@ -153,18 +126,21 @@ template <typename TDerived, ui32 EventType, typename T, typename U>
153
126
struct TResponseWithBody : public TGenericResponse <TDerived, EventType, T, U> {
154
127
private:
155
128
using TBase = TGenericResponse<TDerived, EventType, T, U>;
129
+
156
130
public:
157
131
using TKey = typename TBase::TKey;
158
132
159
133
TString Body;
160
134
161
135
explicit TResponseWithBody (const TKey& key, const typename TBase::TOutcome& outcome)
162
- : TBase(key, outcome) {
136
+ : TBase(key, outcome)
137
+ {
163
138
}
164
139
165
140
explicit TResponseWithBody (const TKey& key, const typename TBase::TOutcome& outcome, TString&& body)
166
141
: TBase(key, outcome)
167
- , Body(std::move(body)) {
142
+ , Body(std::move(body))
143
+ {
168
144
}
169
145
170
146
TString ToString () const override {
@@ -177,34 +153,34 @@ struct TResponseWithBody: public TGenericResponse<TDerived, EventType, T, U> {
177
153
};
178
154
179
155
#define DEFINE_REQUEST (name, base ) \
180
- struct TEv ##name##Request: public base<TEv##name##Request, Ev##name##Request, Aws::S3::Model::name##Request> { \
181
- using TBase::TBase; \
182
- }
156
+ struct TEv ##name##Request: public base<TEv##name##Request, Ev##name##Request, Aws::S3::Model::name##Request> { \
157
+ using TBase::TBase; \
158
+ }
183
159
184
160
#define DEFINE_GENERIC_REQUEST (name ) \
185
- DEFINE_REQUEST (name, TGenericRequest)
161
+ DEFINE_REQUEST (name, TGenericRequest)
186
162
187
163
#define DECLARE_GENERIC_RESPONSE (name ) \
188
- struct TEv ##name##Response: public TGenericResponse<TEv##name##Response, Ev##name##Response, Aws::S3::Model::name##Result> {\
189
- private: \
190
- using TBase = TGenericResponse<TEv##name##Response, Ev##name##Response, Aws::S3::Model::name##Result>;\
191
- public: \
192
- using TBase::TBase;
164
+ struct TEv ##name##Response: public TGenericResponse<TEv##name##Response, Ev##name##Response, Aws::S3::Model::name##Result> { \
165
+ private: \
166
+ using TBase = TGenericResponse<TEv##name##Response, Ev##name##Response, Aws::S3::Model::name##Result>; \
167
+ public: \
168
+ using TBase::TBase;
193
169
194
170
#define DECLARE_RESPONSE_WITH_BODY (name, result_t ) \
195
- struct TEv ##name##Response: public TResponseWithBody<TEv##name##Response, Ev##name##Response, Aws::S3::Model::name##Result, result_t > {\
196
- private: \
197
- using TBase = TResponseWithBody<TEv##name##Response, Ev##name##Response, Aws::S3::Model::name##Result, result_t >;\
198
- public: \
199
- using TBase::TBase;
171
+ struct TEv ##name##Response: public TResponseWithBody<TEv##name##Response, Ev##name##Response, Aws::S3::Model::name##Result, result_t > { \
172
+ private: \
173
+ using TBase = TResponseWithBody<TEv##name##Response, Ev##name##Response, Aws::S3::Model::name##Result, result_t >; \
174
+ public: \
175
+ using TBase::TBase;
200
176
201
177
#define DEFINE_GENERIC_RESPONSE (name ) \
202
- DECLARE_GENERIC_RESPONSE (name) \
203
- }
178
+ DECLARE_GENERIC_RESPONSE (name) \
179
+ }
204
180
205
181
#define DEFINE_GENERIC_REQUEST_RESPONSE (name ) \
206
- DEFINE_GENERIC_REQUEST (name); \
207
- DEFINE_GENERIC_RESPONSE (name)
182
+ DEFINE_GENERIC_REQUEST (name); \
183
+ DEFINE_GENERIC_RESPONSE (name)
208
184
209
185
DEFINE_REQUEST(PutObject, TRequestWithBody);
210
186
DEFINE_GENERIC_RESPONSE (PutObject);
0 commit comments