3个版本

0.1.2 2022年1月5日
0.1.1 2022年1月4日
0.1.0 2021年6月7日

#263 in HTTP客户端

Download history 113/week @ 2024-03-13 37/week @ 2024-03-20 69/week @ 2024-03-27 188/week @ 2024-04-03 85/week @ 2024-04-10 103/week @ 2024-04-17 122/week @ 2024-04-24 57/week @ 2024-05-01 88/week @ 2024-05-08 98/week @ 2024-05-15 123/week @ 2024-05-22 170/week @ 2024-05-29 152/week @ 2024-06-05 209/week @ 2024-06-12 176/week @ 2024-06-19 113/week @ 2024-06-26

每月 693次下载

Apache-2.0

89KB
2K SLoC

centraldogma-rs

官方Rust客户端,用于Central Dogma

完整文档可在https://docs.rs/centraldogma找到

入门指南

安装

在Cargo.toml中添加centraldogma crate及其版本。

centraldogma = "0.1.0"

使用tokio的异步支持

客户端使用reqwest进行HTTP调用,该库内部使用tokio运行时实现异步支持。因此,为了使用客户端,您可能需要添加对tokio的依赖。

tokio = { version = "1.2.0", features = ["full"] }

创建客户端

使用Client结构体创建一个新客户端,以便通过API与CentralDogma进行交互。

use centraldogma::Client;

#[tokio::main]
fn main() {
    // with token
    let client = Client::new("https://127.0.0.1:36462", Some("token")).await.unwrap();
    // without token
    let client = Client::new("https://127.0.0.1:36462", None).await.unwrap();
    // your code ...
}

制作类型化的API调用

类型化API调用通过特质提供

示例

获取文件
use centraldogma::{Client, ContentService};

#[tokio::main]
fn main() {
    // without token
    let client = Client::new("https://127.0.0.1:36462", None).await.unwrap();

    let file = client
        .repo("project", "repository")
        .get_file(Revision::HEAD, Query::of_text("/a.yml"))
        .await
        .unwrap();
    // your code ...
}
推送
use centraldogma::{Client, ContentService};

#[tokio::main]
fn main() {
    let client = Client::new("https://127.0.0.1:36462", None).await.unwrap();
    let changes = vec![Change {
        path: "/a.json".to_string(),
        content: ChangeContent::UpsertJson(serde_json::json!({"a":"b"})),
    }];
    let result = client
        .repo("foo", "bar")
        .push(
            Revision::HEAD,
            CommitMessage::only_summary("Add a.json"),
            changes,
        )
        .await
        .unwrap();
监控文件更改
use centraldogma::{Client, WatchService};

#[tokio::main]
fn main() {
    let client = Client::new("https://127.0.0.1:36462", None).await.unwrap();
    let stream = client
        .repo("foo", "bar")
        .watch_file_stream(&Query::identity("/a.json").unwrap())
        .unwrap();

    tokio::spawn(async move {
        while let Some(result) = stream.next().await {
            // your code ...
        }
    })

贡献

请参阅CONTRIBUTING.md

依赖关系

~6–21MB
~287K SLoC