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