1 /**
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  * SPDX-License-Identifier: Apache-2.0.
4  */
5 
6 #pragma once
7 #include <aws/core/utils/HashingUtils.h>
8 #include <aws/core/utils/event/EventStreamHandler.h>
9 #include <aws/core/client/AWSError.h>
10 #include <aws/s3-crt/S3Crt_EXPORTS.h>
11 #include <aws/s3-crt/S3CrtErrors.h>
12 
13 #include <aws/s3-crt/model/RecordsEvent.h>
14 #include <aws/s3-crt/model/StatsEvent.h>
15 #include <aws/s3-crt/model/ProgressEvent.h>
16 
17 namespace Aws
18 {
19 namespace S3Crt
20 {
21 namespace Model
22 {
23     enum class SelectObjectContentEventType
24     {
25         RECORDS,
26         STATS,
27         PROGRESS,
28         CONT,
29         END,
30         UNKNOWN
31     };
32 
33     class AWS_S3CRT_API SelectObjectContentHandler : public Aws::Utils::Event::EventStreamHandler
34     {
35         typedef std::function<void(const RecordsEvent&)> RecordsEventCallback;
36         typedef std::function<void(const StatsEvent&)> StatsEventCallback;
37         typedef std::function<void(const ProgressEvent&)> ProgressEventCallback;
38         typedef std::function<void()> ContinuationEventCallback;
39         typedef std::function<void()> EndEventCallback;
40         typedef std::function<void(const Aws::Client::AWSError<S3CrtErrors>& error)> ErrorCallback;
41 
42     public:
43         SelectObjectContentHandler();
44         SelectObjectContentHandler& operator=(const SelectObjectContentHandler&) = default;
45 
46         virtual void OnEvent() override;
47 
SetRecordsEventCallback(const RecordsEventCallback & callback)48         inline void SetRecordsEventCallback(const RecordsEventCallback& callback) { m_onRecordsEvent = callback; }
SetStatsEventCallback(const StatsEventCallback & callback)49         inline void SetStatsEventCallback(const StatsEventCallback& callback) { m_onStatsEvent = callback; }
SetProgressEventCallback(const ProgressEventCallback & callback)50         inline void SetProgressEventCallback(const ProgressEventCallback& callback) { m_onProgressEvent = callback; }
SetContinuationEventCallback(const ContinuationEventCallback & callback)51         inline void SetContinuationEventCallback(const ContinuationEventCallback& callback) { m_onContinuationEvent = callback; }
SetEndEventCallback(const EndEventCallback & callback)52         inline void SetEndEventCallback(const EndEventCallback& callback) { m_onEndEvent = callback; }
SetOnErrorCallback(const ErrorCallback & callback)53         inline void SetOnErrorCallback(const ErrorCallback& callback) { m_onError = callback; }
54 
55     private:
56         void HandleEventInMessage();
57         void HandleErrorInMessage();
58         void MarshallError(const Aws::String& errorCode, const Aws::String& errorMessage);
59 
60         RecordsEventCallback m_onRecordsEvent;
61         StatsEventCallback m_onStatsEvent;
62         ProgressEventCallback m_onProgressEvent;
63         ContinuationEventCallback m_onContinuationEvent;
64         EndEventCallback m_onEndEvent;
65         ErrorCallback m_onError;
66     };
67 
68 namespace SelectObjectContentEventMapper
69 {
70     AWS_S3CRT_API SelectObjectContentEventType GetSelectObjectContentEventTypeForName(const Aws::String& name);
71 
72     AWS_S3CRT_API Aws::String GetNameForSelectObjectContentEventType(SelectObjectContentEventType value);
73 } // namespace SelectObjectContentEventMapper
74 } // namespace Model
75 } // namespace S3Crt
76 } // namespace Aws
77