Skip to main content

GateHttpClient

Struct GateHttpClient 

Source
pub struct GateHttpClient { /* private fields */ }
Expand description

Synchronous HTTP client for Gate.io API using ureq.

This client provides blocking I/O operations and is the default client for the Gate.io Rust SDK. It automatically handles request signing, authentication, and provides a simple interface for all API endpoints.

§Features

  • Request Signing: Automatic HMAC SHA-512 signing for authenticated endpoints
  • Error Handling: Comprehensive error handling with detailed error types
  • Flexible Configuration: Configurable base URL, timeouts, and credentials
  • Thread Safe: Can be safely shared across threads using Arc

§Examples

§Basic Usage (Public API)

use gateio_rs::{api::spot::get_ticker, ureq::GateHttpClient};

let client = GateHttpClient::default();
let request = get_ticker().currency_pair("BTC_USDT");
let response = client.send(request)?;

§Authenticated Usage

use gateio_rs::{
    api::spot::get_account,
    http::Credentials,
    ureq::GateHttpClient,
};

let credentials = Credentials::new("api_key", "api_secret");
let client = GateHttpClient::default().credentials(credentials);
let request = get_account();
let response = client.send(request)?;

§Custom Configuration

use gateio_rs::{http::Credentials, ureq::GateHttpClient};

let client = GateHttpClient::with_url("https://api.gateio.ws")
    .credentials(Credentials::new("api_key", "api_secret"))
    .timestamp_delta(1000); // Adjust for server time differences

Implementations§

Source§

impl GateHttpClient

Source

pub fn default() -> Self

Creates a new client with default settings and Gate.io production URL

Examples found in repository?
examples/sync/get_server_time.rs (line 7)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let client = GateHttpClient::default();
8
9    // Get server time (public endpoint, no credentials needed)
10    let req = spot::get_server_time();
11
12    let resp = client.send(req)?;
13    let body = resp.into_body_str()?;
14    let resp_obj: Value = serde_json::from_str(&body).unwrap();
15    println!("{:?}", resp_obj);
16
17    Ok(())
18}
More examples
Hide additional examples
examples/sync/get_open_orders.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    let req = spot::get_open_orders().page(1).limit(100);
14
15    let resp = client.send(req)?;
16    let body = resp.into_body_str()?;
17    let resp_obj: Value = serde_json::from_str(&body).unwrap();
18    println!("{:?}", resp_obj);
19
20    Ok(())
21}
examples/sync/get_currencies.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get all available currencies
14    let req = spot::get_currencies();
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency_pairs.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get all available currency pairs
14    let req = spot::get_currency_pairs();
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get details for a specific currency
14    let req = spot::get_currency("BTC");
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency_pair.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get details for a specific currency pair
14    let req = spot::get_currency_pair("BTC_USDT");
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
Source

pub fn with_url(url: &str) -> Self

Creates a new client with a custom base URL

Source

pub fn with_custom_agent(agent: Agent, url: &str) -> Self

Creates a new client with a custom ureq Agent and base URL

Source

pub fn credentials(self, credentials: Credentials) -> Self

Sets the default API credentials for all requests

Examples found in repository?
examples/sync/get_open_orders.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    let req = spot::get_open_orders().page(1).limit(100);
14
15    let resp = client.send(req)?;
16    let body = resp.into_body_str()?;
17    let resp_obj: Value = serde_json::from_str(&body).unwrap();
18    println!("{:?}", resp_obj);
19
20    Ok(())
21}
More examples
Hide additional examples
examples/sync/get_currencies.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get all available currencies
14    let req = spot::get_currencies();
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency_pairs.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get all available currency pairs
14    let req = spot::get_currency_pairs();
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get details for a specific currency
14    let req = spot::get_currency("BTC");
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency_pair.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get details for a specific currency pair
14    let req = spot::get_currency_pair("BTC_USDT");
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_orderbook.rs (line 11)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get orderbook for BTC_USDT
14    let req = spot::get_orderbook("BTC_USDT").limit(100).interval("0");
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
Source

pub fn timestamp_delta(self, timestamp_delta: u64) -> Self

Sets the timestamp delta to adjust for server time differences

Source

pub fn send<R: Into<Request>>(&self, request: R) -> Result<Response, Box<Error>>

Sends an HTTP request to the Gate.io API

Examples found in repository?
examples/sync/get_server_time.rs (line 12)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let client = GateHttpClient::default();
8
9    // Get server time (public endpoint, no credentials needed)
10    let req = spot::get_server_time();
11
12    let resp = client.send(req)?;
13    let body = resp.into_body_str()?;
14    let resp_obj: Value = serde_json::from_str(&body).unwrap();
15    println!("{:?}", resp_obj);
16
17    Ok(())
18}
More examples
Hide additional examples
examples/sync/get_open_orders.rs (line 15)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    let req = spot::get_open_orders().page(1).limit(100);
14
15    let resp = client.send(req)?;
16    let body = resp.into_body_str()?;
17    let resp_obj: Value = serde_json::from_str(&body).unwrap();
18    println!("{:?}", resp_obj);
19
20    Ok(())
21}
examples/sync/get_currencies.rs (line 16)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get all available currencies
14    let req = spot::get_currencies();
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency_pairs.rs (line 16)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get all available currency pairs
14    let req = spot::get_currency_pairs();
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency.rs (line 16)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get details for a specific currency
14    let req = spot::get_currency("BTC");
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}
examples/sync/get_currency_pair.rs (line 16)
4fn main() -> Result<(), Box<gateio_rs::ureq::Error>> {
5    dotenv::dotenv().ok();
6
7    let api_key = std::env::var("GATE_API_KEY").expect("GATE_API_KEY not set");
8    let api_secret = std::env::var("GATE_API_SECRET").expect("GATE_API_SECRET not set");
9    let credentials = Credentials::new(api_key, api_secret);
10
11    let client = GateHttpClient::default().credentials(credentials.clone());
12
13    // Get details for a specific currency pair
14    let req = spot::get_currency_pair("BTC_USDT");
15
16    let resp = client.send(req)?;
17    let body = resp.into_body_str()?;
18    let resp_obj: Value = serde_json::from_str(&body).unwrap();
19    println!("{:?}", resp_obj);
20
21    Ok(())
22}

Trait Implementations§

Source§

impl Clone for GateHttpClient

Source§

fn clone(&self) -> GateHttpClient

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.