refactor: flatten Microsoft skills from nested to flat directory structure
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)
This commit is contained in:
135
skills/azure-cosmos-rust/SKILL.md
Normal file
135
skills/azure-cosmos-rust/SKILL.md
Normal file
@@ -0,0 +1,135 @@
|
||||
---
|
||||
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 |
|
||||
Reference in New Issue
Block a user