use crate::Client;
use crate::error::Result;
use crate::resource::Resource;
pub type CircuitTermination = crate::models::CircuitTermination;
pub type CircuitType = crate::models::CircuitType;
pub type Circuit = crate::models::Circuit;
pub type ProviderNetwork = crate::models::ProviderNetwork;
pub type Provider = crate::models::Provider;
pub type CircuitTerminationsApi = Resource<crate::models::CircuitTermination>;
pub type CircuitTypesApi = Resource<crate::models::CircuitType>;
pub type CircuitsResource = Resource<crate::models::Circuit>;
pub type ProviderNetworksApi = Resource<crate::models::ProviderNetwork>;
pub type ProvidersApi = Resource<crate::models::Provider>;
#[derive(Clone)]
pub struct CircuitsApi {
client: Client,
}
impl CircuitsApi {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub fn circuit_terminations(&self) -> CircuitTerminationsApi {
Resource::new(self.client.clone(), "circuits/circuit-terminations/")
}
pub async fn circuit_termination_trace(
&self,
id: &str,
) -> Result<crate::models::CircuitTermination> {
self.client
.get(&format!("circuits/circuit-terminations/{}/trace/", id))
.await
}
pub fn circuit_types(&self) -> CircuitTypesApi {
Resource::new(self.client.clone(), "circuits/circuit-types/")
}
pub fn circuits(&self) -> CircuitsResource {
Resource::new(self.client.clone(), "circuits/circuits/")
}
pub fn provider_networks(&self) -> ProviderNetworksApi {
Resource::new(self.client.clone(), "circuits/provider-networks/")
}
pub fn providers(&self) -> ProvidersApi {
Resource::new(self.client.clone(), "circuits/providers/")
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::ClientConfig;
use httpmock::{Method::GET, MockServer};
use serde_json::json;
#[cfg_attr(miri, ignore)]
#[tokio::test]
async fn circuits_trace_hits_expected_path() {
let server = MockServer::start();
let config = ClientConfig::new(server.base_url(), "token").with_max_retries(0);
let client = Client::new(config).unwrap();
let api = CircuitsApi::new(client);
server.mock(|when, then| {
when.method(GET)
.path("/api/circuits/circuit-terminations/1/trace/");
then.status(200)
.json_body(json!({"term_side": "A", "circuit": {}}));
});
let _ = api.circuit_termination_trace("1").await.unwrap();
}
}