Skip to content

line/centraldogma-rs

Repository files navigation

centraldogma-rs

Official Rust Client for Central Dogma.

Full documentation is available at https://docs.rs/centraldogma

Getting started

Installing

Add centraldogma crate and version to Cargo.toml.

centraldogma = "0.1"

Async support with tokio

The client uses reqwest to make HTTP calls, which internally uses the tokio runtime for async support. As such, you may require to take a dependency on tokio in order to use the client.

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

Create a client

Create a new client to make API to CentralDogma using the Client struct.

use centraldogma::Client;

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

Making typed API calls

Typed API calls are provided behind traits:

Examples

Get File
use centraldogma::{
    Client, ContentService,
    model::{Revision, Query},
};

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

    let file = client
        .repo("project", "repository")
        .get_file(Revision::HEAD, &Query::of_text("/a.yml").unwrap())
        .await
        .unwrap();
    // your code ...
}
Push
use centraldogma::{
    Client, ContentService,
    model::{Revision, Change, ChangeContent, CommitMessage},
};
use serde_json;

#[tokio::main]
async fn main() {
    let client = Client::new("http://localhost: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();
}
Watch file change
use centraldogma::{Client, WatchService, model::Query};
use futures::StreamExt;

#[tokio::main]
async fn main() {
    let client = Client::new("http://localhost:36462", None).await.unwrap();
    let mut 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

See CONTRIBUTING.md.

About

Official Rust client for Central Dogma

Topics

Resources

License

Code of conduct

Contributing

Stars

50 stars

Watchers

11 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages