in sdk/storage/azure-storage-queues/src/rest_client.cpp [56:202]
Response<Models::SetServicePropertiesResult> ServiceClient::SetProperties(
Core::Http::_internal::HttpPipeline& pipeline,
const Core::Url& url,
const SetServicePropertiesOptions& options,
const Core::Context& context)
{
std::string xmlBody;
{
_internal::XmlWriter writer;
writer.Write(
_internal::XmlNode{_internal::XmlNodeType::StartTag, "StorageServiceProperties"});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "Logging"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Version",
options.QueueServiceProperties.Logging.Version});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Delete",
options.QueueServiceProperties.Logging.Delete ? "true" : "false"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Read",
options.QueueServiceProperties.Logging.Read ? "true" : "false"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Write",
options.QueueServiceProperties.Logging.Write ? "true" : "false"});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "RetentionPolicy"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Enabled",
options.QueueServiceProperties.Logging.RetentionPolicy.IsEnabled ? "true" : "false"});
if (options.QueueServiceProperties.Logging.RetentionPolicy.Days.HasValue())
{
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Days",
std::to_string(options.QueueServiceProperties.Logging.RetentionPolicy.Days.Value())});
}
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "HourMetrics"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Version",
options.QueueServiceProperties.HourMetrics.Version});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Enabled",
options.QueueServiceProperties.HourMetrics.IsEnabled ? "true" : "false"});
if (options.QueueServiceProperties.HourMetrics.IncludeApis.HasValue())
{
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"IncludeAPIs",
options.QueueServiceProperties.HourMetrics.IncludeApis.Value() ? "true" : "false"});
}
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "RetentionPolicy"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Enabled",
options.QueueServiceProperties.HourMetrics.RetentionPolicy.IsEnabled ? "true"
: "false"});
if (options.QueueServiceProperties.HourMetrics.RetentionPolicy.Days.HasValue())
{
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Days",
std::to_string(
options.QueueServiceProperties.HourMetrics.RetentionPolicy.Days.Value())});
}
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "MinuteMetrics"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Version",
options.QueueServiceProperties.MinuteMetrics.Version});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Enabled",
options.QueueServiceProperties.MinuteMetrics.IsEnabled ? "true" : "false"});
if (options.QueueServiceProperties.MinuteMetrics.IncludeApis.HasValue())
{
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"IncludeAPIs",
options.QueueServiceProperties.MinuteMetrics.IncludeApis.Value() ? "true" : "false"});
}
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "RetentionPolicy"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Enabled",
options.QueueServiceProperties.MinuteMetrics.RetentionPolicy.IsEnabled ? "true"
: "false"});
if (options.QueueServiceProperties.MinuteMetrics.RetentionPolicy.Days.HasValue())
{
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"Days",
std::to_string(
options.QueueServiceProperties.MinuteMetrics.RetentionPolicy.Days.Value())});
}
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "Cors"});
for (const auto& i1 : options.QueueServiceProperties.Cors)
{
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "CorsRule"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag, "AllowedOrigins", i1.AllowedOrigins});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag, "AllowedMethods", i1.AllowedMethods});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag, "AllowedHeaders", i1.AllowedHeaders});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag, "ExposedHeaders", i1.ExposedHeaders});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::StartTag,
"MaxAgeInSeconds",
std::to_string(i1.MaxAgeInSeconds)});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
}
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::End});
xmlBody = writer.GetDocument();
}
Core::IO::MemoryBodyStream requestBody(
reinterpret_cast<const uint8_t*>(xmlBody.data()), xmlBody.length());
auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url, &requestBody);
request.SetHeader("Content-Type", "application/xml; charset=UTF-8");
request.SetHeader("Content-Length", std::to_string(requestBody.Length()));
request.GetUrl().AppendQueryParameter("restype", "service");
request.GetUrl().AppendQueryParameter("comp", "properties");
request.SetHeader("x-ms-version", "2024-08-04");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Accepted)
{
throw StorageException::CreateFromResponse(std::move(pRawResponse));
}
Models::SetServicePropertiesResult response;
return Response<Models::SetServicePropertiesResult>(
std::move(response), std::move(pRawResponse));
}