use crate::models::{is_public_key, Request};
#[derive(Default, Clone)]
pub struct AccountId(String);
#[derive(Default, Clone)]
pub struct NoAccountId;
#[derive(Default)]
pub struct SingleAccountRequest<I> {
account_id: I,
}
impl SingleAccountRequest<NoAccountId> {
pub fn new() -> Self {
SingleAccountRequest::default()
}
pub fn set_account_id(
self,
account_id: impl Into<String>,
) -> Result<SingleAccountRequest<AccountId>, String> {
let account_id = account_id.into();
if let Err(e) = is_public_key(&account_id) {
return Err(e.to_string());
}
Ok(SingleAccountRequest {
account_id: AccountId(account_id),
})
}
}
impl Request for SingleAccountRequest<AccountId> {
fn get_query_parameters(&self) -> String {
let mut query = String::new();
query.push_str(&format!("{}", self.account_id.0));
query.trim_end_matches('&').to_string()
}
fn build_url(&self, base_url: &str) -> String {
format!(
"{}/{}/{}",
base_url,
super::ACCOUNTS_PATH,
self.get_query_parameters()
)
}
}