Skip to main content

lightcone_sdk/shared/
mod.rs

1//! Shared utilities and types used across API and WebSocket modules.
2
3pub mod price;
4pub mod types;
5
6// Re-export commonly used items
7pub use price::{format_decimal, parse_decimal};
8pub use types::*;
9
10/// Derive orderbook ID from base and quote token pubkeys.
11///
12/// Format: `{base_token[0:8]}_{quote_token[0:8]}`
13///
14/// # Example
15///
16/// ```rust
17/// use lightcone_sdk::shared::derive_orderbook_id;
18///
19/// let orderbook_id = derive_orderbook_id(
20///     "7BgBvyjrZX1YKz4oh9mjb8ZScatkkwb8DzFx7LoiVkM3",
21///     "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
22/// );
23/// assert_eq!(orderbook_id, "7BgBvyjr_EPjFWdd5");
24/// ```
25pub fn derive_orderbook_id(base_token: &str, quote_token: &str) -> String {
26    let base_prefix = &base_token[..8.min(base_token.len())];
27    let quote_prefix = &quote_token[..8.min(quote_token.len())];
28    format!("{}_{}", base_prefix, quote_prefix)
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34
35    #[test]
36    fn test_derive_orderbook_id() {
37        let orderbook_id = derive_orderbook_id(
38            "7BgBvyjrZX1YKz4oh9mjb8ZScatkkwb8DzFx7LoiVkM3",
39            "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
40        );
41        assert_eq!(orderbook_id, "7BgBvyjr_EPjFWdd5");
42    }
43
44    #[test]
45    fn test_derive_orderbook_id_short_tokens() {
46        // Test with shorter token strings
47        let orderbook_id = derive_orderbook_id("ABCD", "XYZ");
48        assert_eq!(orderbook_id, "ABCD_XYZ");
49    }
50
51    #[test]
52    fn test_derive_orderbook_id_exact_length() {
53        let orderbook_id = derive_orderbook_id("12345678", "ABCDEFGH");
54        assert_eq!(orderbook_id, "12345678_ABCDEFGH");
55    }
56}