1616#define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_BUCKET_ENCRYPTION_H
1717
1818#include " google/cloud/storage/version.h"
19+ #include " google/cloud/internal/format_time_point.h"
20+ #include < chrono>
21+ #include < iosfwd>
22+ #include < iostream>
23+ #include < string>
24+ #include < tuple>
1925#include < utility>
2026
2127namespace google {
2228namespace cloud {
2329namespace storage {
2430GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
2531
32+ template <typename Tag>
33+ struct EncryptionEnforcementConfigName ;
34+
35+ template <typename Tag>
36+ struct EncryptionEnforcementConfig {
37+ std::string restriction_mode;
38+ std::chrono::system_clock::time_point effective_time;
39+ };
40+
41+ template <typename Tag>
42+ inline bool operator ==(EncryptionEnforcementConfig<Tag> const & lhs,
43+ EncryptionEnforcementConfig<Tag> const & rhs) {
44+ return std::tie (lhs.restriction_mode , lhs.effective_time ) ==
45+ std::tie (rhs.restriction_mode , rhs.effective_time );
46+ }
47+
48+ template <typename Tag>
49+ inline bool operator <(EncryptionEnforcementConfig<Tag> const & lhs,
50+ EncryptionEnforcementConfig<Tag> const & rhs) {
51+ return std::tie (lhs.restriction_mode , lhs.effective_time ) <
52+ std::tie (rhs.restriction_mode , rhs.effective_time );
53+ }
54+
55+ template <typename Tag>
56+ inline bool operator !=(EncryptionEnforcementConfig<Tag> const & lhs,
57+ EncryptionEnforcementConfig<Tag> const & rhs) {
58+ return std::rel_ops::operator !=(lhs, rhs);
59+ }
60+
61+ template <typename Tag>
62+ inline bool operator >(EncryptionEnforcementConfig<Tag> const & lhs,
63+ EncryptionEnforcementConfig<Tag> const & rhs) {
64+ return std::rel_ops::operator >(lhs, rhs);
65+ }
66+
67+ template <typename Tag>
68+ inline bool operator <=(EncryptionEnforcementConfig<Tag> const & lhs,
69+ EncryptionEnforcementConfig<Tag> const & rhs) {
70+ return std::rel_ops::operator <=(lhs, rhs);
71+ }
72+
73+ template <typename Tag>
74+ inline bool operator >=(EncryptionEnforcementConfig<Tag> const & lhs,
75+ EncryptionEnforcementConfig<Tag> const & rhs) {
76+ return std::rel_ops::operator >=(lhs, rhs);
77+ }
78+
79+ template <typename Tag>
80+ inline std::ostream& operator <<(std::ostream& os,
81+ EncryptionEnforcementConfig<Tag> const & rhs) {
82+ return os << EncryptionEnforcementConfigName<Tag>::kValue
83+ << " ={restriction_mode=" << rhs.restriction_mode
84+ << " , effective_time="
85+ << google::cloud::internal::FormatRfc3339 (rhs.effective_time )
86+ << " }" ;
87+ }
88+
89+ struct GoogleManagedEncryptionEnforcementConfigTag {};
90+ using GoogleManagedEncryptionEnforcementConfig =
91+ EncryptionEnforcementConfig<GoogleManagedEncryptionEnforcementConfigTag>;
92+
93+ template <>
94+ struct EncryptionEnforcementConfigName <
95+ GoogleManagedEncryptionEnforcementConfigTag> {
96+ static constexpr char const * kValue =
97+ " GoogleManagedEncryptionEnforcementConfig" ;
98+ };
99+
100+ struct CustomerManagedEncryptionEnforcementConfigTag {};
101+ using CustomerManagedEncryptionEnforcementConfig =
102+ EncryptionEnforcementConfig<CustomerManagedEncryptionEnforcementConfigTag>;
103+
104+ template <>
105+ struct EncryptionEnforcementConfigName <
106+ CustomerManagedEncryptionEnforcementConfigTag> {
107+ static constexpr char const * kValue =
108+ " CustomerManagedEncryptionEnforcementConfig" ;
109+ };
110+
111+ struct CustomerSuppliedEncryptionEnforcementConfigTag {};
112+ using CustomerSuppliedEncryptionEnforcementConfig =
113+ EncryptionEnforcementConfig<CustomerSuppliedEncryptionEnforcementConfigTag>;
114+
115+ template <>
116+ struct EncryptionEnforcementConfigName <
117+ CustomerSuppliedEncryptionEnforcementConfigTag> {
118+ static constexpr char const * kValue =
119+ " CustomerSuppliedEncryptionEnforcementConfig" ;
120+ };
121+
26122/* *
27123 * Describes the default customer managed encryption key for a bucket.
28124 *
@@ -36,17 +132,49 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
36132 * Service.
37133 */
38134struct BucketEncryption {
135+ BucketEncryption () = default ;
136+ explicit BucketEncryption (std::string default_kms_key_name)
137+ : default_kms_key_name(std::move(default_kms_key_name)) {}
138+ BucketEncryption (std::string default_kms_key_name,
139+ GoogleManagedEncryptionEnforcementConfig gmek,
140+ CustomerManagedEncryptionEnforcementConfig cmek,
141+ CustomerSuppliedEncryptionEnforcementConfig csek)
142+ : default_kms_key_name(std::move(default_kms_key_name)),
143+ google_managed_encryption_enforcement_config (std::move(gmek)),
144+ customer_managed_encryption_enforcement_config(std::move(cmek)),
145+ customer_supplied_encryption_enforcement_config(std::move(csek)) {}
146+
39147 std::string default_kms_key_name;
148+ GoogleManagedEncryptionEnforcementConfig
149+ google_managed_encryption_enforcement_config;
150+ CustomerManagedEncryptionEnforcementConfig
151+ customer_managed_encryption_enforcement_config;
152+ CustomerSuppliedEncryptionEnforcementConfig
153+ customer_supplied_encryption_enforcement_config;
40154};
41155
42156inline bool operator ==(BucketEncryption const & lhs,
43157 BucketEncryption const & rhs) {
44- return lhs.default_kms_key_name == rhs.default_kms_key_name ;
158+ return std::tie (lhs.default_kms_key_name ,
159+ lhs.google_managed_encryption_enforcement_config ,
160+ lhs.customer_managed_encryption_enforcement_config ,
161+ lhs.customer_supplied_encryption_enforcement_config ) ==
162+ std::tie (rhs.default_kms_key_name ,
163+ rhs.google_managed_encryption_enforcement_config ,
164+ rhs.customer_managed_encryption_enforcement_config ,
165+ rhs.customer_supplied_encryption_enforcement_config );
45166}
46167
47168inline bool operator <(BucketEncryption const & lhs,
48169 BucketEncryption const & rhs) {
49- return lhs.default_kms_key_name < rhs.default_kms_key_name ;
170+ return std::tie (lhs.default_kms_key_name ,
171+ lhs.google_managed_encryption_enforcement_config ,
172+ lhs.customer_managed_encryption_enforcement_config ,
173+ lhs.customer_supplied_encryption_enforcement_config ) <
174+ std::tie (rhs.default_kms_key_name ,
175+ rhs.google_managed_encryption_enforcement_config ,
176+ rhs.customer_managed_encryption_enforcement_config ,
177+ rhs.customer_supplied_encryption_enforcement_config );
50178}
51179
52180inline bool operator !=(BucketEncryption const & lhs,
@@ -69,6 +197,17 @@ inline bool operator>=(BucketEncryption const& lhs,
69197 return std::rel_ops::operator >=(lhs, rhs);
70198}
71199
200+ inline std::ostream& operator <<(std::ostream& os, BucketEncryption const & rhs) {
201+ os << " BucketEncryption={default_kms_key_name=" << rhs.default_kms_key_name ;
202+ os << " , google_managed_encryption_enforcement_config="
203+ << rhs.google_managed_encryption_enforcement_config ;
204+ os << " , customer_managed_encryption_enforcement_config="
205+ << rhs.customer_managed_encryption_enforcement_config ;
206+ os << " , customer_supplied_encryption_enforcement_config="
207+ << rhs.customer_supplied_encryption_enforcement_config ;
208+ return os << " }" ;
209+ }
210+
72211GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
73212} // namespace storage
74213} // namespace cloud
0 commit comments