in sdk/storage/azure-storage-blobs/src/rest_client.cpp [2209:2882]
Response<Models::_detail::ListBlobsResult> BlobContainerClient::ListBlobs(
Core::Http::_internal::HttpPipeline& pipeline,
const Core::Url& url,
const ListBlobContainerBlobsOptions& options,
const Core::Context& context)
{
auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url);
request.GetUrl().AppendQueryParameter("restype", "container");
request.GetUrl().AppendQueryParameter("comp", "list");
if (options.Prefix.HasValue() && !options.Prefix.Value().empty())
{
request.GetUrl().AppendQueryParameter(
"prefix", _internal::UrlEncodeQueryParameter(options.Prefix.Value()));
}
if (options.Marker.HasValue() && !options.Marker.Value().empty())
{
request.GetUrl().AppendQueryParameter(
"marker", _internal::UrlEncodeQueryParameter(options.Marker.Value()));
}
if (options.MaxResults.HasValue())
{
request.GetUrl().AppendQueryParameter(
"maxresults", std::to_string(options.MaxResults.Value()));
}
if (options.Include.HasValue()
&& !ListBlobsIncludeFlagsToString(options.Include.Value()).empty())
{
request.GetUrl().AppendQueryParameter(
"include",
_internal::UrlEncodeQueryParameter(
ListBlobsIncludeFlagsToString(options.Include.Value())));
}
request.SetHeader("x-ms-version", "2024-08-04");
auto pRawResponse = pipeline.Send(request, context);
auto httpStatusCode = pRawResponse->GetStatusCode();
if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
{
throw StorageException::CreateFromResponse(std::move(pRawResponse));
}
Models::_detail::ListBlobsResult response;
{
const auto& responseBody = pRawResponse->GetBody();
_internal::XmlReader reader(
reinterpret_cast<const char*>(responseBody.data()), responseBody.size());
enum class XmlTagEnum
{
kUnknown,
kEnumerationResults,
kPrefix,
kNextMarker,
kBlobs,
kBlob,
kName,
kDeleted,
kSnapshot,
kVersionId,
kIsCurrentVersion,
kProperties,
kCreationTime,
kLastModified,
kEtag,
kXMsBlobSequenceNumber,
kLeaseStatus,
kLeaseState,
kLeaseDuration,
kCopyId,
kCopyStatus,
kCopySource,
kCopyProgress,
kCopyCompletionTime,
kCopyStatusDescription,
kServerEncrypted,
kIncrementalCopy,
kCopyDestinationSnapshot,
kDeletedTime,
kRemainingRetentionDays,
kAccessTier,
kAccessTierInferred,
kArchiveStatus,
kCustomerProvidedKeySha256,
kEncryptionScope,
kAccessTierChangeTime,
kExpiryTime,
kSealed,
kRehydratePriority,
kLastAccessTime,
kLegalHold,
kContentType,
kContentEncoding,
kContentLanguage,
kContentMD5,
kContentDisposition,
kCacheControl,
kMetadata,
kTags,
kTagSet,
kTag,
kKey,
kValue,
kOrMetadata,
kImmutabilityPolicyUntilDate,
kImmutabilityPolicyMode,
kHasVersionsOnly,
kContentLength,
kBlobType,
kDeletionId,
};
const std::unordered_map<std::string, XmlTagEnum> XmlTagEnumMap{
{"EnumerationResults", XmlTagEnum::kEnumerationResults},
{"Prefix", XmlTagEnum::kPrefix},
{"NextMarker", XmlTagEnum::kNextMarker},
{"Blobs", XmlTagEnum::kBlobs},
{"Blob", XmlTagEnum::kBlob},
{"Name", XmlTagEnum::kName},
{"Deleted", XmlTagEnum::kDeleted},
{"Snapshot", XmlTagEnum::kSnapshot},
{"VersionId", XmlTagEnum::kVersionId},
{"IsCurrentVersion", XmlTagEnum::kIsCurrentVersion},
{"Properties", XmlTagEnum::kProperties},
{"Creation-Time", XmlTagEnum::kCreationTime},
{"Last-Modified", XmlTagEnum::kLastModified},
{"Etag", XmlTagEnum::kEtag},
{"x-ms-blob-sequence-number", XmlTagEnum::kXMsBlobSequenceNumber},
{"LeaseStatus", XmlTagEnum::kLeaseStatus},
{"LeaseState", XmlTagEnum::kLeaseState},
{"LeaseDuration", XmlTagEnum::kLeaseDuration},
{"CopyId", XmlTagEnum::kCopyId},
{"CopyStatus", XmlTagEnum::kCopyStatus},
{"CopySource", XmlTagEnum::kCopySource},
{"CopyProgress", XmlTagEnum::kCopyProgress},
{"CopyCompletionTime", XmlTagEnum::kCopyCompletionTime},
{"CopyStatusDescription", XmlTagEnum::kCopyStatusDescription},
{"ServerEncrypted", XmlTagEnum::kServerEncrypted},
{"IncrementalCopy", XmlTagEnum::kIncrementalCopy},
{"CopyDestinationSnapshot", XmlTagEnum::kCopyDestinationSnapshot},
{"DeletedTime", XmlTagEnum::kDeletedTime},
{"RemainingRetentionDays", XmlTagEnum::kRemainingRetentionDays},
{"AccessTier", XmlTagEnum::kAccessTier},
{"AccessTierInferred", XmlTagEnum::kAccessTierInferred},
{"ArchiveStatus", XmlTagEnum::kArchiveStatus},
{"CustomerProvidedKeySha256", XmlTagEnum::kCustomerProvidedKeySha256},
{"EncryptionScope", XmlTagEnum::kEncryptionScope},
{"AccessTierChangeTime", XmlTagEnum::kAccessTierChangeTime},
{"Expiry-Time", XmlTagEnum::kExpiryTime},
{"Sealed", XmlTagEnum::kSealed},
{"RehydratePriority", XmlTagEnum::kRehydratePriority},
{"LastAccessTime", XmlTagEnum::kLastAccessTime},
{"LegalHold", XmlTagEnum::kLegalHold},
{"Content-Type", XmlTagEnum::kContentType},
{"Content-Encoding", XmlTagEnum::kContentEncoding},
{"Content-Language", XmlTagEnum::kContentLanguage},
{"Content-MD5", XmlTagEnum::kContentMD5},
{"Content-Disposition", XmlTagEnum::kContentDisposition},
{"Cache-Control", XmlTagEnum::kCacheControl},
{"Metadata", XmlTagEnum::kMetadata},
{"Tags", XmlTagEnum::kTags},
{"TagSet", XmlTagEnum::kTagSet},
{"Tag", XmlTagEnum::kTag},
{"Key", XmlTagEnum::kKey},
{"Value", XmlTagEnum::kValue},
{"OrMetadata", XmlTagEnum::kOrMetadata},
{"ImmutabilityPolicyUntilDate", XmlTagEnum::kImmutabilityPolicyUntilDate},
{"ImmutabilityPolicyMode", XmlTagEnum::kImmutabilityPolicyMode},
{"HasVersionsOnly", XmlTagEnum::kHasVersionsOnly},
{"Content-Length", XmlTagEnum::kContentLength},
{"BlobType", XmlTagEnum::kBlobType},
{"DeletionId", XmlTagEnum::kDeletionId},
};
std::vector<XmlTagEnum> xmlPath;
Models::_detail::BlobItem vectorElement1;
std::string mapKey2;
std::string mapValue3;
std::string mapKey4;
std::string mapValue5;
Models::ObjectReplicationPolicy vectorElement6;
Models::ObjectReplicationRule vectorElement7;
while (true)
{
auto node = reader.Read();
if (node.Type == _internal::XmlNodeType::End)
{
break;
}
else if (node.Type == _internal::XmlNodeType::StartTag)
{
auto ite = XmlTagEnumMap.find(node.Name);
xmlPath.push_back(ite == XmlTagEnumMap.end() ? XmlTagEnum::kUnknown : ite->second);
if (xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kMetadata)
{
mapKey2 = node.Name;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kOrMetadata)
{
vectorElement6.PolicyId = node.Name;
vectorElement7.RuleId = node.Name;
}
else if (
((xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kImmutabilityPolicyUntilDate)
|| (xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kImmutabilityPolicyMode))
&& !vectorElement1.Details.ImmutabilityPolicy.HasValue())
{
vectorElement1.Details.ImmutabilityPolicy = Models::BlobImmutabilityPolicy();
}
}
else if (node.Type == _internal::XmlNodeType::Text)
{
if (xmlPath.size() == 2 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kPrefix)
{
response.Prefix = node.Value;
}
else if (
xmlPath.size() == 2 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kNextMarker)
{
response.ContinuationToken = node.Value;
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kName)
{
vectorElement1.Name.Content = node.Value;
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kDeleted)
{
vectorElement1.IsDeleted = node.Value == std::string("true");
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kSnapshot)
{
vectorElement1.Snapshot = node.Value;
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kVersionId)
{
vectorElement1.VersionId = node.Value;
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kIsCurrentVersion)
{
vectorElement1.IsCurrentVersion = node.Value == std::string("true");
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kCreationTime)
{
vectorElement1.Details.CreatedOn
= DateTime::Parse(node.Value, Azure::DateTime::DateFormat::Rfc1123);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kLastModified)
{
vectorElement1.Details.LastModified
= DateTime::Parse(node.Value, Azure::DateTime::DateFormat::Rfc1123);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kEtag)
{
vectorElement1.Details.ETag = ETag(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kXMsBlobSequenceNumber)
{
vectorElement1.Details.SequenceNumber = std::stoll(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kLeaseStatus)
{
vectorElement1.Details.LeaseStatus = Models::LeaseStatus(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kLeaseState)
{
vectorElement1.Details.LeaseState = Models::LeaseState(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kLeaseDuration)
{
vectorElement1.Details.LeaseDuration = Models::LeaseDurationType(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kCopyId)
{
vectorElement1.Details.CopyId = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kCopyStatus)
{
vectorElement1.Details.CopyStatus = Models::CopyStatus(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kCopySource)
{
vectorElement1.Details.CopySource = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kCopyProgress)
{
vectorElement1.Details.CopyProgress = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kCopyCompletionTime)
{
vectorElement1.Details.CopyCompletedOn
= DateTime::Parse(node.Value, Azure::DateTime::DateFormat::Rfc1123);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kCopyStatusDescription)
{
vectorElement1.Details.CopyStatusDescription = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kServerEncrypted)
{
vectorElement1.Details.IsServerEncrypted = node.Value == std::string("true");
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kIncrementalCopy)
{
vectorElement1.Details.IsIncrementalCopy = node.Value == std::string("true");
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kCopyDestinationSnapshot)
{
vectorElement1.Details.IncrementalCopyDestinationSnapshot = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kDeletedTime)
{
vectorElement1.Details.DeletedOn
= DateTime::Parse(node.Value, Azure::DateTime::DateFormat::Rfc1123);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kRemainingRetentionDays)
{
vectorElement1.Details.RemainingRetentionDays = std::stoi(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kAccessTier)
{
vectorElement1.Details.AccessTier = Models::AccessTier(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kAccessTierInferred)
{
vectorElement1.Details.IsAccessTierInferred = node.Value == std::string("true");
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kArchiveStatus)
{
vectorElement1.Details.ArchiveStatus = Models::ArchiveStatus(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kCustomerProvidedKeySha256)
{
vectorElement1.Details.EncryptionKeySha256 = Core::Convert::Base64Decode(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kEncryptionScope)
{
vectorElement1.Details.EncryptionScope = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kAccessTierChangeTime)
{
vectorElement1.Details.AccessTierChangedOn
= DateTime::Parse(node.Value, Azure::DateTime::DateFormat::Rfc1123);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kExpiryTime)
{
vectorElement1.Details.ExpiresOn
= DateTime::Parse(node.Value, Azure::DateTime::DateFormat::Rfc1123);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kSealed)
{
vectorElement1.Details.IsSealed = node.Value == std::string("true");
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kRehydratePriority)
{
vectorElement1.Details.RehydratePriority = Models::RehydratePriority(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kLastAccessTime)
{
vectorElement1.Details.LastAccessedOn
= DateTime::Parse(node.Value, Azure::DateTime::DateFormat::Rfc1123);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kLegalHold)
{
vectorElement1.Details.HasLegalHold = node.Value == std::string("true");
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kContentType)
{
vectorElement1.Details.HttpHeaders.ContentType = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kContentEncoding)
{
vectorElement1.Details.HttpHeaders.ContentEncoding = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kContentLanguage)
{
vectorElement1.Details.HttpHeaders.ContentLanguage = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kContentMD5)
{
vectorElement1.Details.HttpHeaders.ContentHash.Value
= Core::Convert::Base64Decode(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kContentDisposition)
{
vectorElement1.Details.HttpHeaders.ContentDisposition = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kCacheControl)
{
vectorElement1.Details.HttpHeaders.CacheControl = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kMetadata)
{
mapValue3 = node.Value;
}
else if (
xmlPath.size() == 7 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kTags && xmlPath[4] == XmlTagEnum::kTagSet
&& xmlPath[5] == XmlTagEnum::kTag && xmlPath[6] == XmlTagEnum::kKey)
{
mapKey4 = node.Value;
}
else if (
xmlPath.size() == 7 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kTags && xmlPath[4] == XmlTagEnum::kTagSet
&& xmlPath[5] == XmlTagEnum::kTag && xmlPath[6] == XmlTagEnum::kValue)
{
mapValue5 = node.Value;
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kOrMetadata)
{
vectorElement7.ReplicationStatus = Models::ObjectReplicationStatus(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kImmutabilityPolicyUntilDate)
{
vectorElement1.Details.ImmutabilityPolicy.Value().ExpiresOn
= DateTime::Parse(node.Value, Azure::DateTime::DateFormat::Rfc1123);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kImmutabilityPolicyMode)
{
vectorElement1.Details.ImmutabilityPolicy.Value().PolicyMode
= Models::BlobImmutabilityPolicyMode(node.Value);
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kHasVersionsOnly)
{
vectorElement1.HasVersionsOnly = node.Value == std::string("true");
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties
&& xmlPath[4] == XmlTagEnum::kContentLength)
{
vectorElement1.BlobSize = std::stoll(node.Value);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kProperties && xmlPath[4] == XmlTagEnum::kBlobType)
{
vectorElement1.BlobType = Models::BlobType(node.Value);
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kDeletionId)
{
vectorElement1.DeletionId = node.Value;
}
}
else if (node.Type == _internal::XmlNodeType::Attribute)
{
if (xmlPath.size() == 1 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& node.Name == "ServiceEndpoint")
{
response.ServiceEndpoint = node.Value;
}
else if (
xmlPath.size() == 1 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& node.Name == "ContainerName")
{
response.BlobContainerName = node.Value;
}
else if (
xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kName && node.Name == "Encoded")
{
vectorElement1.Name.Encoded = node.Value == std::string("true");
}
}
else if (node.Type == _internal::XmlNodeType::EndTag)
{
if (xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kMetadata)
{
vectorElement1.Details.Metadata[std::move(mapKey2)] = std::move(mapValue3);
}
else if (
xmlPath.size() == 7 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kTags && xmlPath[4] == XmlTagEnum::kTagSet
&& xmlPath[5] == XmlTagEnum::kTag && xmlPath[6] == XmlTagEnum::kValue)
{
vectorElement1.Details.Tags[std::move(mapKey4)] = std::move(mapValue5);
}
else if (
xmlPath.size() == 5 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob
&& xmlPath[3] == XmlTagEnum::kOrMetadata)
{
vectorElement6.Rules.push_back(std::move(vectorElement7));
vectorElement7 = Models::ObjectReplicationRule();
vectorElement1.Details.ObjectReplicationSourceProperties.push_back(
std::move(vectorElement6));
vectorElement6 = Models::ObjectReplicationPolicy();
}
else if (
xmlPath.size() == 3 && xmlPath[0] == XmlTagEnum::kEnumerationResults
&& xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob)
{
response.Items.push_back(std::move(vectorElement1));
vectorElement1 = Models::_detail::BlobItem();
}
xmlPath.pop_back();
}
}
}
return Response<Models::_detail::ListBlobsResult>(
std::move(response), std::move(pRawResponse));
}