mod data;
use crate::client::pike::{PikeAgent, PikeClient, PikeOrganization, PikeRole};
use crate::client::reqwest::{fetch_entities_list, fetch_entity, post_batches};
use crate::client::Client;
use crate::error::ClientError;
use sawtooth_sdk::messages::batch::BatchList;
const AGENT_ROUTE: &str = "agent";
const ORGANIZATION_ROUTE: &str = "organization";
const ROLE_ROUTE: &str = "role";
pub struct ReqwestPikeClient {
url: String,
}
impl ReqwestPikeClient {
pub fn new(url: String) -> Self {
Self { url }
}
}
impl Client for ReqwestPikeClient {
fn post_batches(
&self,
wait: u64,
batch_list: &BatchList,
service_id: Option<&str>,
) -> Result<(), ClientError> {
post_batches(&self.url, wait, batch_list, service_id)
}
}
impl PikeClient for ReqwestPikeClient {
fn get_agent(&self, id: String, service_id: Option<&str>) -> Result<PikeAgent, ClientError> {
let dto = fetch_entity::<data::PikeAgent>(
&self.url,
format!("{}/{}", AGENT_ROUTE, id),
service_id,
)?;
Ok(PikeAgent::from(&dto))
}
fn list_agents(&self, service_id: Option<&str>) -> Result<Vec<PikeAgent>, ClientError> {
let dto_vec = fetch_entities_list::<data::PikeAgent>(
&self.url,
AGENT_ROUTE.to_string(),
service_id,
None,
)?;
Ok(dto_vec.iter().map(PikeAgent::from).collect())
}
fn get_organization(
&self,
id: String,
service_id: Option<&str>,
) -> Result<PikeOrganization, ClientError> {
let dto = fetch_entity::<data::PikeOrganization>(
&self.url,
format!("{}/{}", ORGANIZATION_ROUTE, id),
service_id,
)?;
Ok(PikeOrganization::from(&dto))
}
fn list_organizations(
&self,
service_id: Option<&str>,
) -> Result<Vec<PikeOrganization>, ClientError> {
let dto_vec = fetch_entities_list::<data::PikeOrganization>(
&self.url,
ORGANIZATION_ROUTE.to_string(),
service_id,
None,
)?;
Ok(dto_vec.iter().map(PikeOrganization::from).collect())
}
fn get_role(
&self,
org_id: String,
name: String,
service_id: Option<&str>,
) -> Result<PikeRole, ClientError> {
let dto = fetch_entity::<data::PikeRole>(
&self.url,
format!("{}/{}/{}", ROLE_ROUTE, org_id, name),
service_id,
)?;
Ok(PikeRole::from(&dto))
}
fn list_roles(
&self,
org_id: String,
service_id: Option<&str>,
) -> Result<Vec<PikeRole>, ClientError> {
let dto_vec = fetch_entities_list::<data::PikeRole>(
&self.url,
format!("{}/{}", ROLE_ROUTE, org_id),
service_id,
None,
)?;
Ok(dto_vec.iter().map(PikeRole::from).collect())
}
}