Skip to main content

bullet_ws_interface/
request.rs

1use std::fmt;
2
3use serde::{Deserialize, Serialize};
4
5/// Request ID for matching responses to requests (Binance uses integers)
6#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
7#[serde(transparent)]
8pub struct RequestId(u64);
9
10impl RequestId {
11    pub fn new(id: u64) -> Self {
12        Self(id)
13    }
14
15    pub fn as_u64(&self) -> u64 {
16        self.0
17    }
18}
19
20impl fmt::Display for RequestId {
21    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22        write!(f, "{}", self.0)
23    }
24}
25
26impl From<u64> for RequestId {
27    fn from(n: u64) -> Self {
28        RequestId(n)
29    }
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35
36    #[test]
37    fn test_request_id_serde() {
38        let id: RequestId = serde_json::from_str("123").unwrap();
39        assert_eq!(id, RequestId(123));
40
41        let id = RequestId(456);
42        assert_eq!(serde_json::to_string(&id).unwrap(), "456");
43
44        assert_eq!(RequestId(42).to_string(), "42");
45    }
46}