Response PathClient::Create()

in sdk/storage/azure-storage-files-datalake/src/rest_client.cpp [145:332]


    Response<Models::CreatePathResult> PathClient::Create(
        Core::Http::_internal::HttpPipeline& pipeline,
        const Core::Url& url,
        const CreatePathOptions& options,
        const Core::Context& context)
    {
      auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
      if (options.RequestId.HasValue() && !options.RequestId.Value().empty())
      {
        request.SetHeader("x-ms-client-request-id", options.RequestId.Value());
      }
      if (options.Timeout.HasValue())
      {
        request.GetUrl().AppendQueryParameter("timeout", std::to_string(options.Timeout.Value()));
      }
      request.SetHeader("x-ms-version", "2024-08-04");
      if (options.Resource.HasValue() && !options.Resource.Value().ToString().empty())
      {
        request.GetUrl().AppendQueryParameter(
            "resource", _internal::UrlEncodeQueryParameter(options.Resource.Value().ToString()));
      }
      if (options.ContinuationToken.HasValue() && !options.ContinuationToken.Value().empty())
      {
        request.GetUrl().AppendQueryParameter(
            "continuation", _internal::UrlEncodeQueryParameter(options.ContinuationToken.Value()));
      }
      if (options.Mode.HasValue() && !options.Mode.Value().empty())
      {
        request.GetUrl().AppendQueryParameter(
            "mode", _internal::UrlEncodeQueryParameter(options.Mode.Value()));
      }
      if (options.CacheControl.HasValue() && !options.CacheControl.Value().empty())
      {
        request.SetHeader("x-ms-cache-control", options.CacheControl.Value());
      }
      if (options.ContentEncoding.HasValue() && !options.ContentEncoding.Value().empty())
      {
        request.SetHeader("x-ms-content-encoding", options.ContentEncoding.Value());
      }
      if (options.ContentLanguage.HasValue() && !options.ContentLanguage.Value().empty())
      {
        request.SetHeader("x-ms-content-language", options.ContentLanguage.Value());
      }
      if (options.ContentDisposition.HasValue() && !options.ContentDisposition.Value().empty())
      {
        request.SetHeader("x-ms-content-disposition", options.ContentDisposition.Value());
      }
      if (options.ContentType.HasValue() && !options.ContentType.Value().empty())
      {
        request.SetHeader("x-ms-content-type", options.ContentType.Value());
      }
      if (options.RenameSource.HasValue() && !options.RenameSource.Value().empty())
      {
        request.SetHeader("x-ms-rename-source", options.RenameSource.Value());
      }
      if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty())
      {
        request.SetHeader("x-ms-lease-id", options.LeaseId.Value());
      }
      if (options.SourceLeaseId.HasValue() && !options.SourceLeaseId.Value().empty())
      {
        request.SetHeader("x-ms-source-lease-id", options.SourceLeaseId.Value());
      }
      if (options.Properties.HasValue() && !options.Properties.Value().empty())
      {
        request.SetHeader("x-ms-properties", options.Properties.Value());
      }
      if (options.Permissions.HasValue() && !options.Permissions.Value().empty())
      {
        request.SetHeader("x-ms-permissions", options.Permissions.Value());
      }
      if (options.Umask.HasValue() && !options.Umask.Value().empty())
      {
        request.SetHeader("x-ms-umask", options.Umask.Value());
      }
      if (options.IfMatch.HasValue() && !options.IfMatch.ToString().empty())
      {
        request.SetHeader("If-Match", options.IfMatch.ToString());
      }
      if (options.IfNoneMatch.HasValue() && !options.IfNoneMatch.ToString().empty())
      {
        request.SetHeader("If-None-Match", options.IfNoneMatch.ToString());
      }
      if (options.IfModifiedSince.HasValue())
      {
        request.SetHeader(
            "If-Modified-Since",
            options.IfModifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
      }
      if (options.IfUnmodifiedSince.HasValue())
      {
        request.SetHeader(
            "If-Unmodified-Since",
            options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
      }
      if (options.SourceIfMatch.HasValue() && !options.SourceIfMatch.ToString().empty())
      {
        request.SetHeader("x-ms-source-if-match", options.SourceIfMatch.ToString());
      }
      if (options.SourceIfNoneMatch.HasValue() && !options.SourceIfNoneMatch.ToString().empty())
      {
        request.SetHeader("x-ms-source-if-none-match", options.SourceIfNoneMatch.ToString());
      }
      if (options.SourceIfModifiedSince.HasValue())
      {
        request.SetHeader(
            "x-ms-source-if-modified-since",
            options.SourceIfModifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
      }
      if (options.SourceIfUnmodifiedSince.HasValue())
      {
        request.SetHeader(
            "x-ms-source-if-unmodified-since",
            options.SourceIfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123));
      }
      if (options.EncryptionKey.HasValue() && !options.EncryptionKey.Value().empty())
      {
        request.SetHeader("x-ms-encryption-key", options.EncryptionKey.Value());
      }
      if (options.EncryptionKeySha256.HasValue()
          && !Core::Convert::Base64Encode(options.EncryptionKeySha256.Value()).empty())
      {
        request.SetHeader(
            "x-ms-encryption-key-sha256",
            Core::Convert::Base64Encode(options.EncryptionKeySha256.Value()));
      }
      if (options.EncryptionAlgorithm.HasValue() && !options.EncryptionAlgorithm.Value().empty())
      {
        request.SetHeader("x-ms-encryption-algorithm", options.EncryptionAlgorithm.Value());
      }
      if (options.Owner.HasValue() && !options.Owner.Value().empty())
      {
        request.SetHeader("x-ms-owner", options.Owner.Value());
      }
      if (options.Group.HasValue() && !options.Group.Value().empty())
      {
        request.SetHeader("x-ms-group", options.Group.Value());
      }
      if (options.Acl.HasValue() && !options.Acl.Value().empty())
      {
        request.SetHeader("x-ms-acl", options.Acl.Value());
      }
      if (options.ProposedLeaseId.HasValue() && !options.ProposedLeaseId.Value().empty())
      {
        request.SetHeader("x-ms-proposed-lease-id", options.ProposedLeaseId.Value());
      }
      if (options.LeaseDuration.HasValue())
      {
        request.SetHeader("x-ms-lease-duration", std::to_string(options.LeaseDuration.Value()));
      }
      if (options.ExpiryOptions.HasValue() && !options.ExpiryOptions.Value().empty())
      {
        request.SetHeader("x-ms-expiry-option", options.ExpiryOptions.Value());
      }
      if (options.ExpiresOn.HasValue() && !options.ExpiresOn.Value().empty())
      {
        request.SetHeader("x-ms-expiry-time", options.ExpiresOn.Value());
      }
      if (options.EncryptionContext.HasValue() && !options.EncryptionContext.Value().empty())
      {
        request.SetHeader("x-ms-encryption-context", options.EncryptionContext.Value());
      }
      auto pRawResponse = pipeline.Send(request, context);
      auto httpStatusCode = pRawResponse->GetStatusCode();
      if (httpStatusCode != Core::Http::HttpStatusCode::Created)
      {
        throw StorageException::CreateFromResponse(std::move(pRawResponse));
      }
      Models::CreatePathResult response;
      response.ETag = ETag(pRawResponse->GetHeaders().at("ETag"));
      response.LastModified = DateTime::Parse(
          pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123);
      if (pRawResponse->GetHeaders().count("Content-Length") != 0)
      {
        response.FileSize = std::stoll(pRawResponse->GetHeaders().at("Content-Length"));
      }
      if (pRawResponse->GetHeaders().count("x-ms-request-server-encrypted") != 0)
      {
        response.IsServerEncrypted
            = pRawResponse->GetHeaders().at("x-ms-request-server-encrypted") == std::string("true");
      }
      if (pRawResponse->GetHeaders().count("x-ms-encryption-key-sha256") != 0)
      {
        response.EncryptionKeySha256 = Core::Convert::Base64Decode(
            pRawResponse->GetHeaders().at("x-ms-encryption-key-sha256"));
      }
      return Response<Models::CreatePathResult>(std::move(response), std::move(pRawResponse));
    }