nubis-sdk 1.2.0

Official Nubis Rust SDK
Documentation

Nubis Rust SDK

Official Rust SDK for Nubis.

Designed for backend services and platform automation that need:

  • broad API coverage with generated endpoint methods
  • explicit request control (method, path params, query, body)
  • consistent error types for production monitoring and retries

Install

From crates.io:

[dependencies]
nubis-sdk = "1.2"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
serde_json = "1"

For local development:

[dependencies]
nubis-sdk = { path = "../nubis-core/sdk-rust" }

Quick Start

use nubis_sdk::NubisClient;
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), nubis_sdk::NubisError> {
    let client = NubisClient::builder()
        .base_url("https://nubis-core.onrender.com")
        .api_key("your_api_key")
        .build()?;

    let orgs = client.get_api_v1_orgs(None).await?;
    println!("orgs: {orgs}");

    let payload = json!({ "name": "acme", "slug": "acme" });
    let created = client.post_api_v1_orgs(Some(&payload), None).await?;
    println!("created: {created}");

    Ok(())
}

How Endpoint Methods Are Named

Endpoint methods are generated from backend routes and follow:

<http_method>_<normalized_path>

Examples:

  • GET /api/v1/orgs -> get_api_v1_orgs(...)
  • POST /api/v1/orgs/:org_id/projects -> post_api_v1_orgs_by_org_id_projects(...)

Path params become function arguments in order. Query/body are passed explicitly.

Calling Patterns

Read-style routes:

let data = client
    .get_api_v1_projects_by_project_id("proj_123", None)
    .await?;

Write-style routes:

let payload = serde_json::json!({ "name": "new-name" });
let data = client
    .post_api_v1_orgs(Some(&payload), None)
    .await?;

With query params:

let query = [("range_minutes", "60")];
let metrics = client
    .get_api_v1_orgs_by_org_id_metrics_compute("org_123", Some(&query))
    .await?;

Error Handling

All SDK errors use NubisError:

  • NubisError::Transport(reqwest::Error)
  • NubisError::Serialization(serde_json::Error)
  • NubisError::Http { status, message, body }
match client.get_api_v1_orgs(None).await {
    Ok(data) => println!("{data}"),
    Err(nubis_sdk::NubisError::Http { status, message, .. }) => {
        eprintln!("request failed: {status} - {message}");
    }
    Err(err) => eprintln!("sdk error: {err}"),
}

What Is Generated

  • Route methods are generated from:
    • services/api-gateway/src/main.rs
  • Generated output file:
    • src/generated/endpoints.rs

This ensures coverage keeps pace with backend route additions.

Regeneration Workflow

Run this after route changes:

python scripts/generate_sdk_rust.py
cargo fmt
cargo check

Publishing to crates.io

  1. Update version in Cargo.toml
  2. Validate package: cargo publish --dry-run
  3. Publish: cargo publish
  4. Verify: crates.io/nubis-sdk

License

MIT. See LICENSE.md.

Related SDK

Need JavaScript or TypeScript? See:

  • ../sdk-js/README.md