Response FileClient::Rename()

in sdk/storage/azure-storage-files-shares/src/rest_client.cpp [4902:5015]


    Response<Models::_detail::RenameFileResult> FileClient::Rename(
        Core::Http::_internal::HttpPipeline& pipeline,
        const Core::Url& url,
        const RenameFileOptions& options,
        const Core::Context& context)
    {
      auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url);
      request.GetUrl().AppendQueryParameter("comp", "rename");
      request.SetHeader("x-ms-version", "2025-05-05");
      if (!options.RenameSource.empty())
      {
        request.SetHeader("x-ms-file-rename-source", options.RenameSource);
      }
      if (options.ReplaceIfExists.HasValue())
      {
        request.SetHeader(
            "x-ms-file-rename-replace-if-exists",
            options.ReplaceIfExists.Value() ? "true" : "false");
      }
      if (options.IgnoreReadOnly.HasValue())
      {
        request.SetHeader(
            "x-ms-file-rename-ignore-readonly", options.IgnoreReadOnly.Value() ? "true" : "false");
      }
      if (options.SourceLeaseId.HasValue() && !options.SourceLeaseId.Value().empty())
      {
        request.SetHeader("x-ms-source-lease-id", options.SourceLeaseId.Value());
      }
      if (options.DestinationLeaseId.HasValue() && !options.DestinationLeaseId.Value().empty())
      {
        request.SetHeader("x-ms-destination-lease-id", options.DestinationLeaseId.Value());
      }
      if (options.FileAttributes.HasValue() && !options.FileAttributes.Value().empty())
      {
        request.SetHeader("x-ms-file-attributes", options.FileAttributes.Value());
      }
      if (options.FileCreationTime.HasValue() && !options.FileCreationTime.Value().empty())
      {
        request.SetHeader("x-ms-file-creation-time", options.FileCreationTime.Value());
      }
      if (options.FileLastWriteTime.HasValue() && !options.FileLastWriteTime.Value().empty())
      {
        request.SetHeader("x-ms-file-last-write-time", options.FileLastWriteTime.Value());
      }
      if (options.FileChangeTime.HasValue() && !options.FileChangeTime.Value().empty())
      {
        request.SetHeader("x-ms-file-change-time", options.FileChangeTime.Value());
      }
      if (options.FilePermission.HasValue() && !options.FilePermission.Value().empty())
      {
        request.SetHeader("x-ms-file-permission", options.FilePermission.Value());
      }
      if (options.FilePermissionFormat.HasValue()
          && !options.FilePermissionFormat.Value().ToString().empty())
      {
        request.SetHeader(
            "x-ms-file-permission-format", options.FilePermissionFormat.Value().ToString());
      }
      if (options.FilePermissionKey.HasValue() && !options.FilePermissionKey.Value().empty())
      {
        request.SetHeader("x-ms-file-permission-key", options.FilePermissionKey.Value());
      }
      for (const auto& p : options.Metadata)
      {
        request.SetHeader("x-ms-meta-" + p.first, p.second);
      }
      if (options.FileContentType.HasValue() && !options.FileContentType.Value().empty())
      {
        request.SetHeader("x-ms-content-type", options.FileContentType.Value());
      }
      if (options.AllowTrailingDot.HasValue())
      {
        request.SetHeader(
            "x-ms-allow-trailing-dot", options.AllowTrailingDot.Value() ? "true" : "false");
      }
      if (options.AllowSourceTrailingDot.HasValue())
      {
        request.SetHeader(
            "x-ms-source-allow-trailing-dot",
            options.AllowSourceTrailingDot.Value() ? "true" : "false");
      }
      if (options.FileRequestIntent.HasValue()
          && !options.FileRequestIntent.Value().ToString().empty())
      {
        request.SetHeader("x-ms-file-request-intent", options.FileRequestIntent.Value().ToString());
      }
      auto pRawResponse = pipeline.Send(request, context);
      auto httpStatusCode = pRawResponse->GetStatusCode();
      if (httpStatusCode != Core::Http::HttpStatusCode::Ok)
      {
        throw StorageException::CreateFromResponse(std::move(pRawResponse));
      }
      Models::_detail::RenameFileResult response;
      response.ETag = ETag(pRawResponse->GetHeaders().at("ETag"));
      response.LastModified = DateTime::Parse(
          pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123);
      response.IsServerEncrypted
          = pRawResponse->GetHeaders().at("x-ms-request-server-encrypted") == std::string("true");
      response.FilePermissionKey = pRawResponse->GetHeaders().at("x-ms-file-permission-key");
      response.FileAttributes = pRawResponse->GetHeaders().at("x-ms-file-attributes");
      response.FileCreationTime = DateTime::Parse(
          pRawResponse->GetHeaders().at("x-ms-file-creation-time"),
          Azure::DateTime::DateFormat::Rfc3339);
      response.FileLastWriteTime = DateTime::Parse(
          pRawResponse->GetHeaders().at("x-ms-file-last-write-time"),
          Azure::DateTime::DateFormat::Rfc3339);
      response.FileChangeTime = DateTime::Parse(
          pRawResponse->GetHeaders().at("x-ms-file-change-time"),
          Azure::DateTime::DateFormat::Rfc3339);
      response.FileId = pRawResponse->GetHeaders().at("x-ms-file-id");
      response.FileParentId = pRawResponse->GetHeaders().at("x-ms-file-parent-id");
      return Response<Models::_detail::RenameFileResult>(
          std::move(response), std::move(pRawResponse));
    }