Rewrote sync_microsoft_skills.py (v4) to use each SKILL.md's frontmatter 'name' field as the flat directory name under skills/, replacing the nested skills/official/microsoft/<lang>/<category>/<service>/ hierarchy. This fixes CI failures caused by the indexing, validation, and catalog scripts expecting skills/<id>/SKILL.md (depth 1). Changes: - Rewrite scripts/sync_microsoft_skills.py for flat output with collision detection - Update scripts/tests/inspect_microsoft_repo.py for flat name mapping - Update scripts/tests/test_comprehensive_coverage.py for name uniqueness checks - Delete skills/official/ nested directory - Add 129 Microsoft skills as flat directories (e.g. skills/azure-mgmt-botservice-dotnet/) - Move attribution files to docs/ (LICENSE-MICROSOFT, microsoft-skills-attribution.json) - Rebuild skills_index.json, CATALOG.md, README.md (845 total skills)
136 lines
3.2 KiB
Markdown
136 lines
3.2 KiB
Markdown
---
|
|
name: azure-cosmos-rust
|
|
description: |
|
|
Azure Cosmos DB SDK for Rust (NoSQL API). Use for document CRUD, queries, containers, and globally distributed data.
|
|
Triggers: "cosmos db rust", "CosmosClient rust", "container", "document rust", "NoSQL rust", "partition key".
|
|
package: azure_data_cosmos
|
|
---
|
|
|
|
# Azure Cosmos DB SDK for Rust
|
|
|
|
Client library for Azure Cosmos DB NoSQL API — globally distributed, multi-model database.
|
|
|
|
## Installation
|
|
|
|
```sh
|
|
cargo add azure_data_cosmos azure_identity
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
```bash
|
|
COSMOS_ENDPOINT=https://<account>.documents.azure.com:443/
|
|
COSMOS_DATABASE=mydb
|
|
COSMOS_CONTAINER=mycontainer
|
|
```
|
|
|
|
## Authentication
|
|
|
|
```rust
|
|
use azure_identity::DeveloperToolsCredential;
|
|
use azure_data_cosmos::CosmosClient;
|
|
|
|
let credential = DeveloperToolsCredential::new(None)?;
|
|
let client = CosmosClient::new(
|
|
"https://<account>.documents.azure.com:443/",
|
|
credential.clone(),
|
|
None,
|
|
)?;
|
|
```
|
|
|
|
## Client Hierarchy
|
|
|
|
| Client | Purpose | Get From |
|
|
|--------|---------|----------|
|
|
| `CosmosClient` | Account-level operations | Direct instantiation |
|
|
| `DatabaseClient` | Database operations | `client.database_client()` |
|
|
| `ContainerClient` | Container/item operations | `database.container_client()` |
|
|
|
|
## Core Workflow
|
|
|
|
### Get Database and Container Clients
|
|
|
|
```rust
|
|
let database = client.database_client("myDatabase");
|
|
let container = database.container_client("myContainer");
|
|
```
|
|
|
|
### Create Item
|
|
|
|
```rust
|
|
use serde::{Serialize, Deserialize};
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
struct Item {
|
|
pub id: String,
|
|
pub partition_key: String,
|
|
pub value: String,
|
|
}
|
|
|
|
let item = Item {
|
|
id: "1".into(),
|
|
partition_key: "partition1".into(),
|
|
value: "hello".into(),
|
|
};
|
|
|
|
container.create_item("partition1", item, None).await?;
|
|
```
|
|
|
|
### Read Item
|
|
|
|
```rust
|
|
let response = container.read_item("partition1", "1", None).await?;
|
|
let item: Item = response.into_model()?;
|
|
```
|
|
|
|
### Replace Item
|
|
|
|
```rust
|
|
let mut item: Item = container.read_item("partition1", "1", None).await?.into_model()?;
|
|
item.value = "updated".into();
|
|
|
|
container.replace_item("partition1", "1", item, None).await?;
|
|
```
|
|
|
|
### Patch Item
|
|
|
|
```rust
|
|
use azure_data_cosmos::models::PatchDocument;
|
|
|
|
let patch = PatchDocument::default()
|
|
.with_add("/newField", "newValue")?
|
|
.with_remove("/oldField")?;
|
|
|
|
container.patch_item("partition1", "1", patch, None).await?;
|
|
```
|
|
|
|
### Delete Item
|
|
|
|
```rust
|
|
container.delete_item("partition1", "1", None).await?;
|
|
```
|
|
|
|
## Key Auth (Optional)
|
|
|
|
Enable key-based authentication with feature flag:
|
|
|
|
```sh
|
|
cargo add azure_data_cosmos --features key_auth
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Always specify partition key** — required for point reads and writes
|
|
2. **Use `into_model()?`** — to deserialize responses into your types
|
|
3. **Derive `Serialize` and `Deserialize`** — for all document types
|
|
4. **Use Entra ID auth** — prefer `DeveloperToolsCredential` over key auth
|
|
5. **Reuse client instances** — clients are thread-safe and reusable
|
|
|
|
## Reference Links
|
|
|
|
| Resource | Link |
|
|
|----------|------|
|
|
| API Reference | https://docs.rs/azure_data_cosmos |
|
|
| Source Code | https://github.com/Azure/azure-sdk-for-rust/tree/main/sdk/cosmos/azure_data_cosmos |
|
|
| crates.io | https://crates.io/crates/azure_data_cosmos |
|