15 #ifndef GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_WELL_KNOWN_PARAMETERS_H
16 #define GOOGLE_CLOUD_CPP_GOOGLE_CLOUD_STORAGE_WELL_KNOWN_PARAMETERS_H
18 #include "google/cloud/storage/version.h"
19 #include "google/cloud/internal/ios_flags_saver.h"
20 #include "google/cloud/optional.h"
21 #include "absl/types/optional.h"
37 template <
typename P,
typename T>
38 class WellKnownParameter {
40 WellKnownParameter() =
default;
41 explicit WellKnownParameter(T&& value) : value_(std::forward<T>(value)) {}
42 explicit WellKnownParameter(T
const& value) : value_(value) {}
44 char const* parameter_name()
const {
return P::well_known_parameter_name(); }
45 bool has_value()
const {
return value_.has_value(); }
46 T
const& value()
const {
return value_.value(); }
48 T value_or(U&& default_val) {
49 return value_.value_or(std::forward<U>(default_val));
53 absl::optional<T> value_;
56 template <
typename P,
typename T>
57 std::ostream& operator<<(std::ostream& os,
58 WellKnownParameter<P, T>
const& rhs) {
59 if (rhs.has_value()) {
60 return os << rhs.parameter_name() <<
"=" << rhs.value();
62 return os << rhs.parameter_name() <<
"=<not set>";
66 std::ostream& operator<<(std::ostream& os,
67 WellKnownParameter<P,
bool>
const& rhs) {
68 if (rhs.has_value()) {
70 return os << rhs.parameter_name() <<
"=" << std::boolalpha << rhs.value();
72 return os << rhs.parameter_name() <<
"=<not set>";
84 using WellKnownParameter<
ContentEncoding, std::string>::WellKnownParameter;
92 using WellKnownParameter<
Deleted,
bool>::WellKnownParameter;
112 std::string>::WellKnownParameter;
114 return "destinationKmsKeyName";
129 struct Fields :
public internal::WellKnownParameter<
Fields, std::string> {
130 using WellKnownParameter<
Fields, std::string>::WellKnownParameter;
145 :
public internal::WellKnownParameter<
Generation, std::int64_t> {
146 using WellKnownParameter<
Generation, std::int64_t>::WellKnownParameter;
171 std::int64_t>::WellKnownParameter;
173 return "ifGenerationNotMatch";
183 std::int64_t>::WellKnownParameter;
185 return "ifMetagenerationMatch";
196 std::int64_t>::WellKnownParameter;
198 return "ifMetagenerationNotMatch";
212 std::int64_t>::WellKnownParameter;
214 return "ifSourceGenerationMatch";
226 std::int64_t>::WellKnownParameter;
228 return "ifSourceGenerationNotMatch";
240 std::int64_t>::WellKnownParameter;
242 return "ifSourceMetagenerationMatch";
254 std::int64_t>::WellKnownParameter;
256 return "ifSourceMetagenerationNotMatch";
274 :
public internal::WellKnownParameter<
KmsKeyName, std::string> {
275 using WellKnownParameter<
KmsKeyName, std::string>::WellKnownParameter;
287 :
public internal::WellKnownParameter<
MaxResults, std::int64_t> {
288 using WellKnownParameter<
MaxResults, std::int64_t>::WellKnownParameter;
303 std::int64_t>::WellKnownParameter;
305 return "maxBytesRewrittenPerCall";
320 :
public internal::WellKnownParameter<
PredefinedAcl, std::string> {
321 using WellKnownParameter<
PredefinedAcl, std::string>::WellKnownParameter;
359 std::string>::WellKnownParameter;
361 return "destinationPredefinedAcl";
404 std::string>::WellKnownParameter;
406 return "predefinedDefaultObjectAcl";
436 struct Prefix :
public internal::WellKnownParameter<
Prefix, std::string> {
437 using WellKnownParameter<
Prefix, std::string>::WellKnownParameter;
452 using WellKnownParameter<
Delimiter, std::string>::WellKnownParameter;
468 return "includeTrailingDelimiter";
480 :
public internal::WellKnownParameter<
StartOffset, std::string> {
481 using WellKnownParameter<
StartOffset, std::string>::WellKnownParameter;
492 using WellKnownParameter<
EndOffset, std::string>::WellKnownParameter;
507 :
public internal::WellKnownParameter<
Projection, std::string> {
508 using WellKnownParameter<
Projection, std::string>::WellKnownParameter;
525 using WellKnownParameter<
QuotaUser, std::string>::WellKnownParameter;
535 std::string>::WellKnownParameter;
537 return "serviceAccountEmail";
554 using WellKnownParameter<
SourceGeneration, std::int64_t>::WellKnownParameter;
573 :
public internal::WellKnownParameter<
UserProject, std::string> {
574 using WellKnownParameter<
UserProject, std::string>::WellKnownParameter;
588 using WellKnownParameter<
Versions,
bool>::WellKnownParameter;
605 std::int64_t>::WellKnownParameter;
607 return "optionsRequestedPolicyVersion";