Skip to content

[Storage] set_legal_hold, set/get_immutability_policy for BlobClient, set/get_access_policy for ContainerClient, get_service_stats #2814

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 7 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 47 additions & 5 deletions sdk/storage/azure_storage_blob/src/clients/blob_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@ use crate::{
generated::clients::BlobClient as GeneratedBlobClient,
generated::models::{
BlobClientAcquireLeaseResult, BlobClientBreakLeaseResult, BlobClientChangeLeaseResult,
BlobClientDownloadResult, BlobClientGetPropertiesResult, BlobClientReleaseLeaseResult,
BlobClientRenewLeaseResult, BlockBlobClientCommitBlockListResult,
BlockBlobClientStageBlockResult, BlockBlobClientUploadResult,
BlobClientDeleteImmutabilityPolicyResult, BlobClientDownloadResult,
BlobClientGetPropertiesResult, BlobClientReleaseLeaseResult, BlobClientRenewLeaseResult,
BlobClientSetImmutabilityPolicyResult, BlobClientSetLegalHoldResult,
BlockBlobClientCommitBlockListResult, BlockBlobClientStageBlockResult,
BlockBlobClientUploadResult,
},
models::{
AccessTier, BlobClientAcquireLeaseOptions, BlobClientBreakLeaseOptions,
BlobClientChangeLeaseOptions, BlobClientDeleteOptions, BlobClientDownloadOptions,
BlobClientGetPropertiesOptions, BlobClientReleaseLeaseOptions, BlobClientRenewLeaseOptions,
BlobClientChangeLeaseOptions, BlobClientDeleteImmutabilityPolicyOptions,
BlobClientDeleteOptions, BlobClientDownloadOptions, BlobClientGetPropertiesOptions,
BlobClientReleaseLeaseOptions, BlobClientRenewLeaseOptions,
BlobClientSetImmutabilityPolicyOptions, BlobClientSetLegalHoldOptions,
BlobClientSetMetadataOptions, BlobClientSetPropertiesOptions, BlobClientSetTierOptions,
BlockBlobClientCommitBlockListOptions, BlockBlobClientUploadOptions, BlockList,
BlockListType, BlockLookupList,
Expand Down Expand Up @@ -304,4 +308,42 @@ impl BlobClient {
) -> Result<Response<BlobClientRenewLeaseResult, NoFormat>> {
self.client.renew_lease(lease_id, options).await
}

/// Sets a legal hold on the blob.
///
/// # Arguments
///
/// * `legal_hold` - Specifies the legal hold status to set on the blob.
/// * `options` - Optional configuration for the request.
pub async fn set_legal_hold(
&self,
legal_hold: bool,
options: Option<BlobClientSetLegalHoldOptions<'_>>,
) -> Result<Response<BlobClientSetLegalHoldResult, NoFormat>> {
self.client.set_legal_hold(legal_hold, options).await
}

/// Sets the immutability policy on the blob.
///
/// # Arguments
///
/// * `options` - Optional configuration for the request.
pub async fn set_immutability_policy(
&self,
options: Option<BlobClientSetImmutabilityPolicyOptions<'_>>,
) -> Result<Response<BlobClientSetImmutabilityPolicyResult, NoFormat>> {
self.client.set_immutability_policy(options).await
}

/// Deletes the immutability policy on the blob.
///
/// # Arguments
///
/// * `options` - Optional configuration for the request.
pub async fn delete_immutability_policy(
&self,
options: Option<BlobClientDeleteImmutabilityPolicyOptions<'_>>,
) -> Result<Response<BlobClientDeleteImmutabilityPolicyResult, NoFormat>> {
self.client.delete_immutability_policy(options).await
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@ use crate::{
BlobContainerClientAcquireLeaseResult, BlobContainerClientBreakLeaseResult,
BlobContainerClientChangeLeaseResult, BlobContainerClientGetPropertiesResult,
BlobContainerClientReleaseLeaseResult, BlobContainerClientRenewLeaseResult,
BlobContainerClientSetAccessPolicyResult,
},
models::{
BlobContainerClientAcquireLeaseOptions, BlobContainerClientBreakLeaseOptions,
BlobContainerClientChangeLeaseOptions, BlobContainerClientCreateOptions,
BlobContainerClientDeleteOptions, BlobContainerClientGetPropertiesOptions,
BlobContainerClientListBlobFlatSegmentOptions, BlobContainerClientReleaseLeaseOptions,
BlobContainerClientRenewLeaseOptions, BlobContainerClientSetMetadataOptions,
ListBlobsFlatSegmentResponse,
BlobContainerClientDeleteOptions, BlobContainerClientGetAccessPolicyOptions,
BlobContainerClientGetPropertiesOptions, BlobContainerClientListBlobFlatSegmentOptions,
BlobContainerClientReleaseLeaseOptions, BlobContainerClientRenewLeaseOptions,
BlobContainerClientSetAccessPolicyOptions, BlobContainerClientSetMetadataOptions,
ListBlobsFlatSegmentResponse, SignedIdentifier,
},
pipeline::StorageHeadersPolicy,
BlobClient, BlobContainerClientOptions,
Expand All @@ -23,7 +25,7 @@ use azure_core::{
credentials::TokenCredential,
http::{
policies::{BearerTokenCredentialPolicy, Policy},
NoFormat, PageIterator, Pager, Response, Url, XmlFormat,
NoFormat, PageIterator, Pager, RequestContent, Response, Url, XmlFormat,
},
Result,
};
Expand Down Expand Up @@ -233,4 +235,32 @@ impl BlobContainerClient {
) -> Result<Response<BlobContainerClientRenewLeaseResult, NoFormat>> {
self.client.renew_lease(lease_id, options).await
}

/// Sets the permissions for the specified container. The permissions indicate whether blobs in a
/// container may be accessed publicly.
///
/// # Arguments
///
/// * `container_acl` - The access control list for the container.
/// * `options` - Optional configuration for the request.
pub async fn set_access_policy(
&self,
container_acl: RequestContent<Vec<SignedIdentifier>, XmlFormat>,
options: Option<BlobContainerClientSetAccessPolicyOptions<'_>>,
) -> Result<Response<BlobContainerClientSetAccessPolicyResult, NoFormat>> {
self.client.set_access_policy(container_acl, options).await
}

/// Gets the permissions for the specified container. The permissions indicate whether container data
/// may be accessed publicly.
///
/// # Arguments
///
/// * `options` - Optional configuration for the request.
pub async fn get_access_policy(
&self,
options: Option<BlobContainerClientGetAccessPolicyOptions<'_>>,
) -> Result<Response<Vec<SignedIdentifier>, XmlFormat>> {
self.client.get_access_policy(options).await
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
use crate::{
generated::clients::BlobServiceClient as GeneratedBlobServiceClient,
models::{
BlobServiceClientGetPropertiesOptions, BlobServiceClientListContainersSegmentOptions,
ListContainersSegmentResponse, StorageServiceProperties,
BlobServiceClientGetPropertiesOptions, BlobServiceClientGetServiceStatsOptions,
BlobServiceClientGetUserDelegationKeyOptions,
BlobServiceClientListContainersSegmentOptions, KeyInfo, ListContainersSegmentResponse,
StorageServiceProperties, StorageServiceStats, UserDelegationKey,
},
pipeline::StorageHeadersPolicy,
BlobContainerClient, BlobServiceClientOptions,
Expand All @@ -14,7 +16,7 @@ use azure_core::{
credentials::TokenCredential,
http::{
policies::{BearerTokenCredentialPolicy, Policy},
PageIterator, Response, Url, XmlFormat,
PageIterator, RequestContent, Response, Url, XmlFormat,
},
Result,
};
Expand Down Expand Up @@ -95,4 +97,17 @@ impl BlobServiceClient {
) -> Result<PageIterator<Response<ListContainersSegmentResponse, XmlFormat>>> {
self.client.list_containers_segment(options)
}

/// Retrieves statistics related to replication for the Blob service. It is only available on the secondary location endpoint
/// when read-access geo-redundant replication is enabled for the Storage account.
///
/// # Arguments
///
/// * `options` - Optional configuration for the request.
pub async fn get_service_stats(
&self,
options: Option<BlobServiceClientGetServiceStatsOptions<'_>>,
) -> Result<Response<StorageServiceStats, XmlFormat>> {
self.client.get_service_stats(options).await
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading