Files
foxhunt/crates/common/README.md
jgrusewski 9c3d741a08 refactor: restructure repo — crates/, bin/, testing/ layout
Move 17 library crates into crates/, CLI binary into bin/fxt,
consolidate 10 test crates into testing/, split config crate
from deployment config files.

Root directory reduced from 38+ to ~17 directories.
All Cargo.toml paths and build.rs proto refs updated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 11:56:00 +01:00

43 lines
2.0 KiB
Markdown

# Common Crate
## Overview
The `common` crate provides a foundational set of shared types and utilities essential for building high-frequency trading applications within the Foxhunt ecosystem. It encapsulates core data structures, error handling patterns, and common helpers used across various components.
## Features
* **Market Data & Order Types:** Defines standardized structs for market data (e.g., `Tick`, `OrderBook`) and various order types (e.g., `LimitOrder`, `MarketOrder`).
* **High-Precision Time Utilities:** Offers utilities for working with nanosecond-resolution timestamps and duration calculations critical for HFT.
* **Robust Error Handling:** Implements a custom `FoxhuntError` enum and `Result` type for consistent and traceable error management across the system.
* **Data Validation Helpers:** Provides functions for validating common HFT parameters such as prices, quantities, and instrument IDs.
* **Serialization/Deserialization:** Includes helpers and derive macros for efficient data serialization (e.g., using `serde`) for inter-process communication or persistence.
* **Instrument & Asset Definitions:** Standardized types for defining trading instruments, assets, and exchanges.
## Usage
```rust
use common::types::{Order, OrderSide, Price, Quantity, InstrumentId};
use common::errors::FoxhuntError;
fn create_limit_order(instrument: InstrumentId, price: Price, quantity: Quantity) -> Result<Order, FoxhuntError> {
if price.value() <= 0.0 || quantity.value() <= 0.0 {
return Err(FoxhuntError::ValidationError("Price and quantity must be positive".to_string()));
}
Ok(Order::new_limit(instrument, OrderSide::Buy, price, quantity))
}
let instrument = InstrumentId::new("BTCUSD".to_string());
let order = create_limit_order(instrument, Price::new(60000.0), Quantity::new(0.5));
println!("{:?}", order);
```
## Testing
```bash
cargo test --package common
```
## Documentation
Comprehensive API documentation is available at [docs.rs/common](https://docs.rs/common).