web_arena_indigo/
lib.rs

1mod error;
2pub(crate) mod http;
3mod instance;
4mod access_token;
5mod ssh;
6
7pub use error::*;
8use crate::access_token::AccessTokenApi;
9use crate::instance::InstanceApi;
10use crate::ssh::SshApi;
11
12pub use ssh::{UpdateSshKeyRequest, SshKeyStatus};
13pub use instance::{RequestCreateInstance, InstanceStatus};
14
15pub struct WebArenaIndigoApi {
16    client_id: String,
17    client_secret: String,
18    access_token: String,
19    issued_at: u32,
20    expires_in: u32,
21}
22
23impl WebArenaIndigoApi {
24    pub fn new<T: Into<String>, U: Into<String>>(client_id: T, client_secret: U) -> WebArenaIndigoApi {
25        let api = WebArenaIndigoApi {
26            client_id: client_id.into(),
27            client_secret: client_secret.into(),
28            access_token: "".to_string(),
29            issued_at: 0,
30            expires_in: 0,
31        };
32        api
33    }
34    pub async fn update_access_token(&mut self) -> Result<&str, WebArenaIndigoApiError> {
35        let res = AccessTokenApi::access_token_generate(self.client_id.as_str(), self.client_secret.as_str()).await?;
36        self.access_token = res.access_token.to_string();
37        self.issued_at = res.issued_at.to_string().parse().unwrap_or_default();
38        self.expires_in = res.expires_in.to_string().parse().unwrap_or_default();
39        Ok(self.access_token.as_str())
40    }
41
42    pub fn access_token(&self) -> &str {
43        self.access_token.as_str()
44    }
45    pub fn instance(&mut self) -> InstanceApi {
46        InstanceApi::new(self)
47    }
48    pub fn ssh(&mut self) -> SshApi {
49        SshApi::new(self)
50    }
51}
52
53pub(crate) trait IndigoApi<'a> {
54    fn new(api: &'a WebArenaIndigoApi) -> Self;
55    fn indigo(&self) -> &WebArenaIndigoApi;
56}