use reqwest::IntoUrl;
use shuttle_core::{PublicKey, SignedTransaction};
use client::InnerClient;
use error::{Error, Result};
use accounts::AccountsRequest;
use assets::AssetsRequest;
use effects::EffectsRequest;
use ledgers::LedgersRequest;
use offers::OffersRequest;
use operations::OperationsRequest;
use orderbook::OrderbookRequest;
use paths::PathsRequest;
use payments::PaymentsRequest;
use trade_aggregations::TradeAggregationsRequest;
use trades::TradesRequest;
use transactions::TransactionsRequest;
use submit_transaction::SubmitTransactionRequest;
use friendbot::FriendbotRequest;
#[derive(Debug, Clone)]
pub struct Server {
inner: InnerClient,
}
impl Server {
pub fn new<U: IntoUrl>(horizon_url: U) -> Result<Server> {
let horizon_url = horizon_url.into_url()?;
if horizon_url.scheme() == "http" {
return Err(Error::UnsecureConnection);
}
Self::new_unsecure(horizon_url)
}
pub fn new_unsecure<U: IntoUrl>(horizon_url: U) -> Result<Server> {
let inner = InnerClient::new(horizon_url.into_url()?)?;
Ok(Server { inner })
}
pub fn accounts(&self) -> AccountsRequest {
AccountsRequest::new(self.inner.clone())
}
pub fn assets(&self) -> AssetsRequest {
AssetsRequest::new(self.inner.clone())
}
pub fn effects(&self) -> EffectsRequest {
EffectsRequest::new(self.inner.clone())
}
pub fn ledgers(&self) -> LedgersRequest {
LedgersRequest::new()
}
pub fn offers(&self) -> OffersRequest {
unimplemented!()
}
pub fn operations(&self) -> OperationsRequest {
unimplemented!()
}
pub fn orderbook(&self) -> OrderbookRequest {
unimplemented!()
}
pub fn paths(&self) -> PathsRequest {
unimplemented!()
}
pub fn payments(&self) -> PaymentsRequest {
unimplemented!()
}
pub fn trade_aggregations(&self) -> TradeAggregationsRequest {
unimplemented!()
}
pub fn trades(&self) -> TradesRequest {
unimplemented!()
}
pub fn transactions(&self) -> TransactionsRequest {
unimplemented!()
}
pub fn friendbot(&self, account_id: &PublicKey) -> Result<FriendbotRequest> {
FriendbotRequest::new(self.inner.clone(), &account_id)
}
pub fn submit_transaction(&self, tx: &SignedTransaction) -> Result<SubmitTransactionRequest> {
SubmitTransactionRequest::new(self.inner.clone(), &tx)
}
}