# Longbridge OpenAPI SDK for Rust
Crates.io version docs.rs docs Unsafe Rust forbidden rustc 1.56.1+
`longbridge` provides an easy-to-use interface for invokes [`Longbridge OpenAPI`](https://open.longbridgeapp.com/en/). ## Quickstart _Add dependencies to `Cargo.toml`_ ```toml [dependencies] longbridge = "0.1.0" ``` _Setting environment variables(MacOS/Linux)_ ```bash export LONGBRIDGE_APP_KEY="App Key get from user center" export LONGBRIDGE_APP_SECRET="App Secret get from user center" export LONGBRIDGE_ACCESS_TOKEN="Access Token get from user center" ``` _Setting environment variables(Windows)_ ```powershell setx LONGBRIDGE_APP_KEY "App Key get from user center" setx LONGBRIDGE_APP_SECRET "App Secret get from user center" setx LONGBRIDGE_ACCESS_TOKEN "Access Token get from user center" ``` ## Quote API _(Get basic information of securities)_ ```rust,no_run use std::sync::Arc; use longbridge::{ decimal, trade::{OrderSide, OrderType, SubmitOrderOptions, TimeInForceType}, Config, QuoteContext, TradeContext, }; #[tokio::main] async fn main() -> Result<(), Box> { // Load configuration from environment variables let config = Arc::new(Config::from_env()?); // Create a context for quote APIs let (ctx, _) = QuoteContext::try_new(config.clone()).await?; // Get basic information of securities let resp = ctx .quote(["700.HK", "AAPL.US", "TSLA.US", "NFLX.US"]) .await?; println!("{:?}", resp); Ok(()) } ``` ## Quote API _(Subscribe quotes)_ ```rust, no_run use std::sync::Arc; use longbridge::{quote::SubFlags, Config, QuoteContext}; #[tokio::main] async fn main() -> Result<(), Box> { // Load configuration from environment variables let config = Arc::new(Config::from_env()?); // Create a context for quote APIs let (ctx, mut receiver) = QuoteContext::try_new(config).await?; // Subscribe ctx.subscribe(["700.HK"], SubFlags::QUOTE, true).await?; // Receive push events while let Some(event) = receiver.recv().await { println!("{:?}", event); } Ok(()) } ``` ## Trade API _(Submit order)_ ```rust, no_run use std::sync::Arc; use longbridge::{ decimal, trade::{OrderSide, OrderType, SubmitOrderOptions, TimeInForceType}, Config, TradeContext, }; #[tokio::main] async fn main() -> Result<(), Box> { // Load configuration from environment variables let config = Arc::new(Config::from_env()?); // Create a context for trade APIs let (ctx, _) = TradeContext::try_new(config).await?; // Submit order let opts = SubmitOrderOptions::new( "700.HK", OrderType::LO, OrderSide::Buy, 500, TimeInForceType::Day, ) .submitted_price(decimal!(50i32)) .remark("Hello from Rust SDK".to_string()); let resp = ctx.submit_order(opts).await?; println!("{:?}", resp); Ok(()) } ``` ## Crate features To avoid compiling unused dependencies, Longbridge gates certain features, all of which are disabled by default: | Feature | Description | |----------|-------------------------------------| | blocking | Provides the `blocking` client API. | ## License Licensed under either of * Apache License, Version 2.0,([LICENSE-APACHE](./LICENSE-APACHE) or ) * MIT license ([LICENSE-MIT](./LICENSE-MIT) or ) at your option.