Skip to main content

cloud_sdk/
lib.rs

1#![no_std]
2#![doc = include_str!("../README.md")]
3
4#[cfg(feature = "std")]
5extern crate std;
6
7pub mod buffer;
8
9/// Cloud provider namespace.
10#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
11pub enum Provider {
12    /// Hetzner Cloud and DNS APIs.
13    Hetzner,
14}
15
16/// Provider API family.
17#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
18pub enum ApiFamily {
19    /// Cloud infrastructure API.
20    Cloud,
21    /// DNS API.
22    Dns,
23    /// Security-related API resources.
24    Security,
25    /// Storage-related API resources.
26    Storage,
27    /// Provider-specific post-1.0 API surface.
28    Extended,
29}
30
31/// HTTP method for a provider operation.
32#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
33pub enum Method {
34    /// GET request.
35    Get,
36    /// POST request.
37    Post,
38    /// PUT request.
39    Put,
40    /// DELETE request.
41    Delete,
42}
43
44impl Method {
45    /// Returns the HTTP method token.
46    #[must_use]
47    pub const fn as_str(self) -> &'static str {
48        match self {
49            Self::Get => "GET",
50            Self::Post => "POST",
51            Self::Put => "PUT",
52            Self::Delete => "DELETE",
53        }
54    }
55}
56
57#[cfg(test)]
58mod tests {
59    use super::{ApiFamily, Method, Provider};
60
61    #[test]
62    fn exposes_provider_neutral_domains() {
63        assert_eq!(Provider::Hetzner, Provider::Hetzner);
64        assert_eq!(ApiFamily::Cloud, ApiFamily::Cloud);
65        assert_eq!(Method::Get, Method::Get);
66        assert_eq!(Method::Post.as_str(), "POST");
67    }
68}