[−][src]Crate stellar_horizon
Stellar Horizon
The stellar-horizon
crate provides a client to connect to Horizon.
Horizon is an API to interact with the Stellar network.
If you are looking for a way to create Stellar transactions, take
a look at stellar-base
.
Design Goals
This crate makes some design choices that come from my experience in writing server side application that interact with the Stellar network:
HorizonClient
is a trait to make writing unit tests easier.- Streaming responses are just a
Stream
, again to simplify testing. - Expose response headers to follow rate limiting and avoid error response.
- Responses can be serialized back to json, making it possible to write middleware services.
Connecting to Horizon and first request
You connect to horizon by creating an HorizonHttpClient
, then
you can use this client to send requests to Horizon.
use stellar_horizon::api; use stellar_horizon::client::{HorizonClient, HorizonHttpClient}; let client = HorizonHttpClient::new_from_str("https://horizon.stellar.org")?; let request = api::root::root(); let (headers, response) = client.request(request).await?; println!("Horizon Version = {}", response.horizon_version);
Account details
use stellar_base::PublicKey; use stellar_horizon::api; use stellar_horizon::client::{HorizonClient, HorizonHttpClient}; let client = HorizonHttpClient::new_from_str("https://horizon.stellar.org")?; let account = PublicKey::from_account_id("GA73S4WXZG7EONFCIFDSZ6VOJKFC2PMV5574YDJC4V4UBDGPAYN4SPAC")?; let request = api::accounts::single(&account); let (headers, response) = client.request(request).await?; println!("Account Sequence Number = {}", response.sequence);
Streaming responses
This crate has full support for streaming response from
Horizon. Since an Horizon stream is just a Stream
, you can use
all methods that work on a Stream
.
use stellar_horizon::api; use stellar_horizon::client::{HorizonClient, HorizonHttpClient}; use stellar_horizon::request::PageRequest; use futures::stream::{Stream, StreamExt, TryStreamExt}; let client = HorizonHttpClient::new_from_str("https://horizon.stellar.org")?; let request = api::transactions::all().with_cursor("now"); // Only take the first 5 events. let mut stream = client.stream(request)?.take(5); while let Some(event) = stream.try_next().await? { println!("Event = {:?}", event); }
Modules
api | Horizon API requests builders and types. |
client | Horizon client traits and types. |
error | Crate error type. |
headers | Helper functions to access Horizon headers. |
horizon_error | Horizon error response. |
link | Pagination link. |
page | Pagination page. |
request | Request traits. |
resources | Horizon resources. |
Constants
VERSION | The crate version. |