shuttle-sdk 0.1.0

Stellar Horizon Server client.
Documentation
use shuttle_core::{Amount, PublicKey};
use error::Result;
use client::{self, InnerClient};
use link::Link;
use pagination::PaginatedResponse;
use deserialize;

#[derive(Debug, Clone)]
pub struct EffectsRequest {
    inner: InnerClient,
}

impl EffectsRequest {
    pub fn new(inner: InnerClient) -> EffectsRequest {
        EffectsRequest { inner }
    }

    pub fn for_account(self, account_id: &PublicKey) -> Result<EffectsForAccountRequest> {
        EffectsForAccountRequest::new(self.inner, &account_id)
    }

    pub fn send(&self) -> Result<PaginatedResponse<Effect>> {
        client::parse_response(&mut self.inner.get(&["effects"])?.send()?)
    }
}

#[derive(Debug, Clone)]
pub struct EffectsForAccountRequest {
    inner: InnerClient,
    account_id: String,
}

impl EffectsForAccountRequest {
    pub fn new(inner: InnerClient, account_id: &PublicKey) -> Result<EffectsForAccountRequest> {
        let account_id = account_id.account_id()?;
        Ok(EffectsForAccountRequest { inner, account_id })
    }

    pub fn send(&self) -> Result<PaginatedResponse<Effect>> {
        client::parse_response(&mut self.inner
            .get(&["accounts", &self.account_id, "effects"])?
            .send()?)
    }
}

#[derive(Debug, Clone, Deserialize)]
#[serde(tag = "type")]
pub enum Effect {
    #[serde(rename = "account_created")] AccountCreated(AccountCreatedEffect),
    #[serde(rename = "account_removed")] AccountRemoved(AccountRemovedEffect),
    #[serde(rename = "account_credited")] AccountCredited(AccountCreditedEffect),
    #[serde(rename = "account_debited")] AccountDebited(AccountDebitedEffect),

    #[serde(rename = "signer_created")] SignerCreated(SignerCreatedEffect),
}

#[derive(Debug, Clone, Deserialize)]
pub struct EffectLinks {
    pub operation: Link,
    pub succeeds: Link,
    pub precedes: Link,
}

#[derive(Debug, Clone, Deserialize)]
pub struct AccountCreatedEffect {
    #[serde(rename = "_links")] pub links: EffectLinks,
    #[serde(deserialize_with = "deserialize::account_id")] pub account: PublicKey,
    pub paging_token: String,
    #[serde(deserialize_with = "deserialize::from_str")] pub starting_balance: Amount,
}

#[derive(Debug, Clone, Deserialize)]
pub struct AccountRemovedEffect {
    #[serde(rename = "_links")] pub links: EffectLinks,
    #[serde(deserialize_with = "deserialize::account_id")] pub account: PublicKey,
    pub paging_token: String,
}

#[derive(Debug, Clone, Deserialize)]
pub struct AccountCreditedEffect {
    #[serde(rename = "_links")] pub links: EffectLinks,
    #[serde(deserialize_with = "deserialize::account_id")] pub account: PublicKey,
    pub paging_token: String,

    #[serde(deserialize_with = "deserialize::from_str")] pub amount: Amount,
}

#[derive(Debug, Clone, Deserialize)]
pub struct AccountDebitedEffect {
    #[serde(rename = "_links")] pub links: EffectLinks,
    #[serde(deserialize_with = "deserialize::account_id")] pub account: PublicKey,
    pub paging_token: String,
}

#[derive(Debug, Clone, Deserialize)]
pub struct SignerCreatedEffect {
    #[serde(rename = "_links")] pub links: EffectLinks,
    #[serde(deserialize_with = "deserialize::account_id")] pub account: PublicKey,
    pub paging_token: String,
}