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/S3_EXPORTS.h> 11 #include <aws/s3/S3Errors.h> 12 13 #include <aws/s3/model/RecordsEvent.h> 14 #include <aws/s3/model/StatsEvent.h> 15 #include <aws/s3/model/ProgressEvent.h> 16 17 namespace Aws 18 { 19 namespace S3 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_S3_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<S3Errors>& 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_S3_API SelectObjectContentEventType GetSelectObjectContentEventTypeForName(const Aws::String& name); 71 72 AWS_S3_API Aws::String GetNameForSelectObjectContentEventType(SelectObjectContentEventType value); 73 } // namespace SelectObjectContentEventMapper 74 } // namespace Model 75 } // namespace S3 76 } // namespace Aws 77