AWS SDK for C++

AWS SDK for C++ Version 1.11.909

Loading...
Searching...
No Matches
SerdeTraits.h
1
5#pragma once
6
7#include <aws/core/utils/DateTime.h>
8#include <aws/core/utils/StringUtils.h>
9#include <aws/core/utils/memory/stl/AWSString.h>
10#include <smithy/client/schema/Schema.h>
11#include <smithy/client/schema/Trait.h>
12#include <smithy/client/schema/TraitKey.h>
13
14#include <cstdint>
15
16namespace smithy {
17namespace schema {
18
20 public:
21 enum class Format : std::uint8_t { DATE_TIME, HTTP_DATE, EPOCH_SECONDS };
22
23 explicit TimestampFormatTrait(Format format) : m_format(format) {}
24 Format GetFormat() const { return m_format; }
26
27 private:
28 Format m_format;
29};
30
31class Ec2QueryNameTrait : public Trait {
32 public:
33 explicit Ec2QueryNameTrait(const Aws::String& value) : m_value(value) {}
34 const Aws::String& GetValue() const { return m_value; }
36
37 private:
38 Aws::String m_value;
39};
40
41extern template class TraitKey<TimestampFormatTrait>;
42extern template class TraitKey<Ec2QueryNameTrait>;
43
45 TimestampFormatTrait::Format protocolDefault) {
46 const auto trait = schema.GetTrait(TimestampFormatTrait::KEY());
47 return trait ? trait->GetFormat() : protocolDefault;
48}
49
51 const int64_t millis = value.Millis();
52 const bool negative = millis < 0;
53 const int64_t magnitude = negative ? -millis : millis;
54 Aws::String out = (negative ? "-" : "") + Aws::Utils::StringUtils::to_string(magnitude / 1000);
55 const int64_t fraction = magnitude % 1000;
56 if (fraction != 0) {
58 digits = Aws::String(3 - digits.size(), '0') + digits;
59 while (digits.back() == '0') {
60 digits.pop_back();
61 }
62 out += "." + digits;
63 }
64 return out;
65}
66
68 switch (format) {
72 return EpochSecondsText(value);
74 default:
76 }
77}
78
79} // namespace schema
80} // namespace smithy
Aws::String ToGmtString(DateFormat format) const
int64_t Millis() const
static Aws::String to_string(T value)
Ec2QueryNameTrait(const Aws::String &value)
Definition SerdeTraits.h:33
const Aws::String & GetValue() const
Definition SerdeTraits.h:34
static const TraitKey< Ec2QueryNameTrait > & KEY()
Definition SerdeTraits.h:35
std::shared_ptr< const T > GetTrait(const TraitKey< T > &key) const
Definition Schema.h:68
static const TraitKey< TimestampFormatTrait > & KEY()
Definition SerdeTraits.h:25
static const TraitKey & Instance()
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition AWSString.h:97
Aws::String FormatTimestampText(const Aws::Utils::DateTime &value, TimestampFormatTrait::Format format)
Definition SerdeTraits.h:67
TimestampFormatTrait::Format ResolveTimestampFormat(const Schema &schema, TimestampFormatTrait::Format protocolDefault)
Definition SerdeTraits.h:44
Aws::String EpochSecondsText(const Aws::Utils::DateTime &value)
Definition SerdeTraits.h:50