HttpRequestJobConfig.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <Framework/AWSApiJobConfig.h>
  10. namespace AWSCore
  11. {
  12. //! Provides configuration needed by HTTP request jobs.
  13. class IHttpRequestJobConfig
  14. : public virtual IAwsApiJobConfig
  15. {
  16. public:
  17. virtual std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> GetReadRateLimiter() = 0;
  18. virtual std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> GetWriteRateLimiter() = 0;
  19. virtual std::shared_ptr<Aws::Http::HttpClient> GetHttpClient() = 0;
  20. virtual const Aws::String& GetUserAgent() = 0;
  21. };
  22. // warning C4250: 'AWSCore::HttpRequestJobConfig' : inherits 'AWSCore::AwsApiJobConfig::AWSCore::AwsApiJobConfig::GetJobContext' via dominance
  23. // Thanks to http://stackoverflow.com/questions/11965596/diamond-inheritance-scenario-compiles-fine-in-g-but-produces-warnings-errors for the explanation
  24. // This is the expected and desired behavior. The warning is superfluous.
  25. AZ_PUSH_DISABLE_WARNING(4250, "-Wunknown-warning-option")
  26. //! Provides service job configuration using settings properties.
  27. class HttpRequestJobConfig
  28. : public AwsApiJobConfig
  29. , public virtual IHttpRequestJobConfig
  30. {
  31. public:
  32. AZ_CLASS_ALLOCATOR(HttpRequestJobConfig, AZ::SystemAllocator);
  33. using InitializerFunction = AZStd::function<void(HttpRequestJobConfig& config)>;
  34. /// Initialize an HttpRequestJobConfig object.
  35. ///
  36. /// \param defaultConfig - the config object that provides values when
  37. /// no override has been set in this object. The default is nullptr, which
  38. /// will cause a default value to be used.
  39. ///
  40. /// \param initializer - a function called to initialize this object.
  41. /// This simplifies the initialization of static instances. The default
  42. /// value is nullptr, in which case no initializer will be called.
  43. HttpRequestJobConfig(AwsApiJobConfig* defaultConfig = nullptr, InitializerFunction initializer = nullptr)
  44. : AwsApiJobConfig{ defaultConfig }
  45. {
  46. if (initializer)
  47. {
  48. initializer(*this);
  49. }
  50. }
  51. std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> GetReadRateLimiter() override
  52. {
  53. EnsureSettingsApplied();
  54. return m_readRateLimiter;
  55. }
  56. std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> GetWriteRateLimiter() override
  57. {
  58. EnsureSettingsApplied();
  59. return m_writeRateLimiter;
  60. }
  61. std::shared_ptr<Aws::Http::HttpClient> GetHttpClient() override
  62. {
  63. EnsureSettingsApplied();
  64. return m_httpClient;
  65. }
  66. const Aws::String& GetUserAgent() override
  67. {
  68. EnsureSettingsApplied();
  69. return m_userAgent;
  70. }
  71. void ApplySettings() override;
  72. private:
  73. std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> m_readRateLimiter{ nullptr };
  74. std::shared_ptr<Aws::Utils::RateLimits::RateLimiterInterface> m_writeRateLimiter{ nullptr };
  75. std::shared_ptr<Aws::Http::HttpClient> m_httpClient{ nullptr };
  76. Aws::String m_userAgent{};
  77. };
  78. AZ_POP_DISABLE_WARNING
  79. } // namespace AWSCore