use std::convert::Into;
use std::collections::HashMap;
use shuttle_core::PublicKey;
use error::Result;
use client::{self, InnerClient};
use link::Link;
use pagination::PaginatedResponse;
#[derive(Debug, Clone)]
pub struct AssetsRequest {
inner: InnerClient,
}
impl AssetsRequest {
pub fn new(inner: InnerClient) -> AssetsRequest {
AssetsRequest { inner }
}
pub fn for_code<S: Into<String>>(self, code: S) -> AssetsForCodeRequest {
let code = code.into();
AssetsForCodeRequest::new(self.inner, code)
}
pub fn for_issuer(self, issuer: &PublicKey) -> Result<AssetsForIssuerRequest> {
AssetsForIssuerRequest::new(self.inner, &issuer)
}
pub fn send(&self) -> Result<PaginatedResponse<AssetRecord>> {
client::parse_response(&mut self.inner.get(&["assets"])?.send()?)
}
}
#[derive(Debug, Clone)]
pub struct AssetsForCodeRequest {
inner: InnerClient,
code: String,
}
impl AssetsForCodeRequest {
pub fn new(inner: InnerClient, code: String) -> AssetsForCodeRequest {
AssetsForCodeRequest { inner, code }
}
pub fn send(&self) -> Result<PaginatedResponse<AssetRecord>> {
client::parse_response(&mut self.inner
.get(&["assets"])?
.query(&[("asset_code", &self.code)])
.send()?)
}
}
#[derive(Debug, Clone)]
pub struct AssetsForIssuerRequest {
inner: InnerClient,
issuer: String,
}
impl AssetsForIssuerRequest {
pub fn new(inner: InnerClient, issuer: &PublicKey) -> Result<AssetsForIssuerRequest> {
Ok(AssetsForIssuerRequest {
inner,
issuer: issuer.account_id()?,
})
}
pub fn send(&self) -> Result<PaginatedResponse<AssetRecord>> {
client::parse_response(&mut self.inner
.get(&["assets"])?
.query(&[("asset_issuer", &self.issuer)])
.send()?)
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct AssetRecord {
#[serde(rename = "_links")] links: AssetRecordLinks,
pub asset_type: String,
pub asset_code: String,
pub asset_issuer: String,
pub paging_token: String,
pub amount: String,
pub num_accounts: u64,
pub flags: HashMap<String, bool>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct AssetRecordLinks {
pub toml: Link,
}