Skip to main content

nubis_sdk/
lib.rs

1//! Official Nubis SDK for Rust
2//!
3//! This SDK provides a type-safe interface to the Nubis API.
4//!
5//! # Example
6//!
7//! ```no_run
8//! use nubis_sdk::NubisClient;
9//!
10//! #[tokio::main]
11//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
12//!     let client = NubisClient::new(
13//!         std::env::var("NUBIS_API_KEY")?
14//!     );
15//!
16//!     // List all VMs in a project
17//!     let vms = client
18//!         .vms()
19//!         .list("proj_01J5X...")
20//!         .await?;
21//!
22//!     // Create a new VM
23//!     use nubis_sdk::types::CreateVmRequest;
24//!     let vm = client
25//!         .vms()
26//!         .create(CreateVmRequest {
27//!             project_id: "proj_01J5X...".into(),
28//!             name: "api-server".into(),
29//!             size: "s-1vcpu-1gb".into(),
30//!             region: "nyc1".into(),
31//!             image: "ubuntu-24.04-x64".into(),
32//!             ssh_keys: vec![],
33//!             ssh_public_key: None,
34//!             ssh_public_key_id: None,
35//!             network_id: None,
36//!             firewall_id: None,
37//!             public_ip: Some(true),
38//!             tags: None,
39//!             enable_password_auth: None,
40//!             admin_password: None,
41//!             ssh_allowed_cidrs: vec![],
42//!         })
43//!         .await?;
44//!
45//!     println!("Created VM: {}", vm.id);
46//!     Ok(())
47//! }
48//! ```
49
50pub mod client;
51pub mod error;
52pub mod resources;
53pub mod types;
54
55pub use client::NubisClient;
56pub use error::{NubisError, Result};
57pub use types::*;
58
59use resources::*;
60
61/// Main Nubis SDK client with resource accessors
62impl NubisClient {
63    /// Access VMs API
64    pub fn vms(&self) -> Vms<'_> {
65        Vms::new(self)
66    }
67
68    /// Access projects API
69    pub fn projects(&self) -> Projects<'_> {
70        Projects::new(self)
71    }
72
73    /// Access organizations API
74    pub fn orgs(&self) -> Orgs<'_> {
75        Orgs::new(self)
76    }
77
78    /// Access regions API
79    pub fn regions(&self) -> Regions<'_> {
80        Regions::new(self)
81    }
82
83    /// Access sizes API
84    pub fn sizes(&self) -> Sizes<'_> {
85        Sizes::new(self)
86    }
87
88    /// Access images API
89    pub fn images(&self) -> Images<'_> {
90        Images::new(self)
91    }
92}