#azure-sdk #azure #azure-rest #sdk #cloud #iot #wrapper

azure_data_cosmos

Microsoft Azure REST API 的 Rust 封装 - Azure Cosmos DB

19 个重大版本发布

0.20.0 2024年4月24日
0.19.0 2024年1月5日
0.18.0 2023年12月8日
0.17.0 2023年11月3日
0.1.0 2022年1月25日

#113 in 网页编程

Download history 504/week @ 2024-04-15 798/week @ 2024-04-22 744/week @ 2024-04-29 791/week @ 2024-05-06 793/week @ 2024-05-13 920/week @ 2024-05-20 518/week @ 2024-05-27 476/week @ 2024-06-03 723/week @ 2024-06-10 1275/week @ 2024-06-17 876/week @ 2024-06-24 511/week @ 2024-07-01 480/week @ 2024-07-08 472/week @ 2024-07-15 639/week @ 2024-07-22 634/week @ 2024-07-29

每月下载 2,265

MIT 许可证

505KB
12K SLoC

azure_data_cosmos

Cosmos DB 库。

azure-data-cosmos 提供了与 Cosmos DB 交互所需的功能。作为对 Cosmos DB Rest API 的抽象,通过该 Rest API 可实现的功能也应通过此库实现。

示例

// Using the prelude module of the Cosmos crate makes easier to use the Rust Azure SDK for Cosmos DB.
use azure_data_cosmos::prelude::*;
use azure_core::Context;
use serde::{Deserialize, Serialize};

// This is the stuct we want to use in our sample.
// Make sure to have a collection with partition key "number" for this example to
// work (you can create with this SDK too, check the examples folder for that task).
#[derive(Serialize, Deserialize, Debug)]
struct MySampleStruct {
    id: String,
    string: String,
    number: u64,
}

impl azure_data_cosmos::CosmosEntity for MySampleStruct {
    type Entity = u64;

    fn partition_key(&self) -> Self::Entity {
        self.number
    }
}

#[tokio::main]
async fn main() -> azure_core::Result<()> {
    // Let's get Cosmos primary key and account name from env variables.
    let primary_key =
        std::env::var("COSMOS_PRIMARY_KEY").expect("Set env variable COSMOS_PRIMARY_KEY first!");
    let account = std::env::var("COSMOS_ACCOUNT").expect("Set env variable COSMOS_ACCOUNT first!");

    let database_name = std::env::args()
        .nth(1)
        .expect("please specify the database name as the first command line parameter");
    let collection_name = std::env::args()
        .nth(2)
        .expect("please specify the collection name as the second command line parameter");

    // First, create an authorization token. There are two types of tokens: primary and resource constrained.
    // Please check the Azure documentation or the examples folder on how to create and use token-based permissions.
    let authorization_token = AuthorizationToken::primary_key(&primary_key)?;

    // Next we will create a Cosmos client.
    let client = CosmosClient::new(account, authorization_token);

    // We know the database so we can obtain a database client.
    let database = client.database_client(database_name);
    // We know the collection so we can obtain a collection client.
    let collection = database.collection_client(collection_name);

    // Insert 10 documents
    println!("Inserting 10 documents...");
    for i in 0..10 {
        // define the document.
        let document_to_insert = MySampleStruct {
            id: format!("unique_id{}", i),
            string: "Something here".to_owned(),
            number: i * 100, // this is the partition key
        };

        // insert it
        collection
            .create_document(document_to_insert)
            .is_upsert(true)
            .await?;
    }

    Ok(())
}

许可证:MIT

依赖项

~7–20MB
~306K SLoC