Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Blob Storage SDK for Rust. Use for uploading, downloading, and managing blobs and containers.
.claude/skills/azure-storage-blob-rust/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 9 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-12 | ✗→✓ | ▲ Improved | — | — |
| case-08 | ✗→✓ | ▲ Improved | — | — |
| case-15 | ✗→✓ | ▲ Improved | — | — |
| case-13 | ✗→✓ | ▲ Improved | — | — |
| case-19 | ✗→✓ | ▲ Improved | — | — |
Client library for Azure Blob Storage — Microsoft's object storage solution for the cloud.
shcargo add azure_storage_blob azure_identity
bashAZURE_STORAGE_ACCOUNT_NAME=<storage-account-name> # Endpoint: https://<account>.blob.core.windows.net/
rustuse azure_identity::DeveloperToolsCredential; use azure_storage_blob::{BlobClient, BlobClientOptions}; let credential = DeveloperToolsCredential::new(None)?; let blob_client = BlobClient::new( "https://<account>.blob.core.windows.net/", "container-name", "blob-name", Some(credential), Some(BlobClientOptions::default()), )?;
| Client | Purpose | |--------|---------| | BlobServiceClient | Account-level operations, list containers | | BlobContainerClient | Container operations, list blobs | | BlobClient | Individual blob operations |
rustuse azure_core::http::RequestContent; let data = b"hello world"; blob_client .upload( RequestContent::from(data.to_vec()), false, // overwrite u64::try_from(data.len())?, None, ) .await?;
rustlet response = blob_client.download(None).await?; let content = response.into_body().collect_bytes().await?; println!("Content: {:?}", content);
rustlet properties = blob_client.get_properties(None).await?; println!("Content-Length: {:?}", properties.content_length);
rustblob_client.delete(None).await?;
rustuse azure_storage_blob::BlobContainerClient; let container_client = BlobContainerClient::new( "https://<account>.blob.core.windows.net/", "container-name", Some(credential), None, )?; // Create container container_client.create(None).await?; // List blobs let mut pager = container_client.list_blobs(None)?; while let Some(blob) = pager.try_next().await? { println!("Blob: {}", blob.name); }
DeveloperToolsCredential for dev, ManagedIdentityCredential for productionRequestContent::from() — to wrap upload datatokio runtimeFor Entra ID auth, assign one of these roles:
Storage Blob Data Reader — read-onlyStorage Blob Data Contributor — read/writeStorage Blob Data Owner — full access including RBAC| Resource | Link | |----------|------| | API Reference | https://docs.rs/azure_storage_blob | | Source Code | https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/storage/azure_storage_blob | | crates.io | https://crates.io/crates/azure_storage_blob |
This skill is applicable to execute the workflow or actions described in the overview.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | pass→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 comparable cases.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.