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