7 releases (breaking)

new 0.8.0+20241009.0 Oct 15, 2024
0.7.0+20240821.0 Sep 3, 2024
0.6.0+20240710.0 Jul 15, 2024
0.5.0+20240502.0 May 8, 2024
0.1.0 Aug 28, 2023

#490 in Database interfaces

Download history 121/week @ 2024-07-15 7/week @ 2024-07-22 15/week @ 2024-07-29 20/week @ 2024-08-19 9/week @ 2024-08-26 151/week @ 2024-09-02 29/week @ 2024-09-16 22/week @ 2024-09-23 42/week @ 2024-09-30 20/week @ 2024-10-07

113 downloads per month
Used in oxide-httpmock

MPL-2.0 license

2.5MB
51K SLoC

The Oxide Rust SDK

SDK for the Oxide API.

Installation

The oxide crate is available on crates.io. You'll probably want to use tokio as well. Add them to your Cargo.toml file or use cargo add:

$ cargo add oxide
$ cargo add tokio

Authentication

To connect to the Oxide API, the SDK needs a host URL and a token. There are several ways to specify these:

  • Configuration files: the CLI's oxide auth login command generates config.toml and credentials.toml in $HOME/.config/oxide/. The credentials file contains sensitive information such as tokens and user IDs.
  • Environment variables: You can set the OXIDE_HOST and OXIDE_TOKEN environment variables.
  • Explicit host URL and token.

The simplest way to create an authenticated client is to use oxide::Client::new_authenticated(), which uses the same credentials and authentication logic as the CLI. By default, it reads data from configuration files in $HOME/.config/oxide.

Example

Create a new oxide::Client like this:

use futures::StreamExt;
use oxide::{Client, prelude::*};

#[tokio::main]
async fn main() {
    // Make a client from the on-disk configuration.
    let client = Client::new_authenticated()
        .expect("unable to create an authenticated client");

    // Start using the client!

    // For example we can look at the projects in our silo:
    let mut projects = client.project_list().stream();
    loop {
        match projects.next().await {
            // No more items.
            None => break,
            // Print the name of a project.
            Some(Ok(project)) => println!("project {}", *project.name),
            // Something went wrong
            Some(Err(err)) => println!("error {}", err),
        }
    }
}

Dependencies

~11–26MB
~432K SLoC