exchange-pb

Crates.ioexchange-pb
lib.rsexchange-pb
version0.1.0
created_at2025-06-02 06:57:45.554575+00
updated_at2025-06-02 06:57:45.554575+00
descriptionprotobuf for crypto exchanges
homepagehttps://github.com/MoyuFunding/exchange-pb
repositoryhttps://github.com/MoyuFunding/exchange-pb
max_upload_size
id1697741
size50,339
x1957 (x1957)

documentation

README

Exchange Protocol Buffers

This Rust library provides Protocol Buffer definitions and generated code for MEXC exchange data structures.

Overview

This library contains protobuf definitions for various MEXC exchange APIs including:

  • Public market data (book tickers, mini tickers, deals, depths, klines)
  • Private account data (orders, deals, account info)
  • Batch operations for multiple data items
  • Aggregated data structures

Features

  • Modular Structure: Generated code is organized by package (e.g., mexc module)
  • Async-ready: Generated structs work seamlessly with async Rust code
  • Serde compatible: All generated types support JSON serialization/deserialization
  • Type-safe: Leverages Rust's type system for safe data handling
  • Performance: Uses prost for efficient protobuf encoding/decoding

Usage

Add this to your Cargo.toml:

[dependencies]
exchange-pb = { path = "." }

Basic Example

use exchange_pb::mexc::*;  // Import from mexc module

fn main() {
    // Create a book ticker
    let book_ticker = PublicBookTickerV3Api {
        bid_price: "50000.00".to_string(),
        bid_quantity: "1.5".to_string(),
        ask_price: "50001.00".to_string(),
        ask_quantity: "2.0".to_string(),
    };

    println!("Bid: {} @ {}", book_ticker.bid_quantity, book_ticker.bid_price);
    println!("Ask: {} @ {}", book_ticker.ask_quantity, book_ticker.ask_price);

    // Create a wrapper for push data
    let wrapper = PushDataV3ApiWrapper {
        channel: "spot@public.bookTicker.v3.api".to_string(),
        body: Some(push_data_v3_api_wrapper::Body::PublicBookTicker(book_ticker)),
        symbol: "BTCUSDT".to_string(),
        symbol_id: "BTC_USDT".to_string(),
        create_time: 1640995200000,
        send_time: 1640995200001,
    };
}

Module Structure

The library is organized into modules based on protobuf packages:

  • exchange_pb::mexc::* - All MEXC exchange related types

You can import types in different ways:

// Import all types from mexc module
use exchange_pb::mexc::*;

// Import specific types
use exchange_pb::mexc::{PublicBookTickerV3Api, PrivateOrdersV3Api};

// Use fully qualified names
let ticker = exchange_pb::mexc::PublicBookTickerV3Api { /* ... */ };

JSON Serialization

All generated types support serde serialization:

use exchange_pb::mexc::*;
use serde_json;

let ticker = PublicBookTickerV3Api {
    bid_price: "50000.00".to_string(),
    bid_quantity: "1.5".to_string(),
    ask_price: "50001.00".to_string(),
    ask_quantity: "2.0".to_string(),
};

// Serialize to JSON
let json = serde_json::to_string_pretty(&ticker)?;
println!("{}", json);

// Deserialize from JSON
let deserialized: PublicBookTickerV3Api = serde_json::from_str(&json)?;

Available Types

Public Market Data

  • PublicBookTickerV3Api - Best bid/ask prices and quantities
  • PublicBookTickerBatchV3Api - Batch of book tickers
  • PublicMiniTickerV3Api - Mini ticker with basic price info
  • PublicMiniTickersV3Api - Batch of mini tickers
  • PublicDealsV3Api - Trade execution data
  • PublicIncreaseDepthsV3Api - Order book depth updates
  • PublicLimitDepthsV3Api - Order book snapshot
  • PublicSpotKlineV3Api - Candlestick/kline data
  • PublicAggreDepthsV3Api - Aggregated depth data
  • PublicAggreDealsV3Api - Aggregated trade data
  • PublicAggreBookTickerV3Api - Aggregated book ticker

Private Account Data

  • PrivateOrdersV3Api - Order information
  • PrivateDealsV3Api - Private trade execution data
  • PrivateAccountV3Api - Account balance and info

Wrapper Types

  • PushDataV3ApiWrapper - Main wrapper for all push data types

Building

The project uses a custom build script to compile all protobuf files recursively:

cargo build

The build script will:

  1. Find all .proto files in the proto/ directory recursively
  2. Compile them using prost-build with package support
  3. Generate Rust code organized by package (e.g., mexc.rs)
  4. Include the generated code in the library modules

Proto File Structure

proto/
└── mexc/
    ├── PublicBookTickerV3Api.proto      (package mexc;)
    ├── PublicMiniTickerV3Api.proto      (package mexc;)
    ├── PrivateOrdersV3Api.proto         (package mexc;)
    ├── PushDataV3ApiWrapper.proto       (package mexc;)
    └── ... (other proto files)

All proto files in the mexc/ directory use package mexc; which results in generated code being placed in the mexc.rs file and accessible via the mexc module.

Development

To add new protobuf definitions:

  1. Add your .proto files to the appropriate directory under proto/
  2. Include the package declaration: package mexc;
  3. Ensure imports use just the filename (e.g., import "SomeType.proto") for files in the same package
  4. Run cargo build to regenerate the Rust code
  5. The new types will be available in the appropriate module

Testing

Run the tests to verify everything works:

cargo test

Run the examples:

# Basic usage example
cargo run --example basic_usage

# Modular usage example with JSON serialization
cargo run --example modular_usage

License

This project is licensed under the MIT License.

Commit count: 12

cargo fmt