seersdk_rs/
lib.rs

1//! # Seer RBK SDK for Rust
2//!
3//! A Rust client library for communicating with RBK robots via TCP.
4//!
5//! ## Example
6//!
7//! ```no_run
8//! use seersdk_rs::{RbkClient, BatteryStatusRequest};
9//! use std::time::Duration;
10//!
11//! #[tokio::main]
12//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
13//!     let client = RbkClient::new("192.168.8.114");
14//!     
15//!     let request = BatteryStatusRequest::new();
16//!     let response = client.request(request, Duration::from_secs(10)).await?;
17//!     
18//!     println!("Response: {:?}", response);
19//!     
20//!     Ok(())
21//! }
22//! ```
23
24mod api;
25mod client;
26mod error;
27mod frame;
28mod port_client;
29mod protocol;
30
31pub use api::*;
32pub use client::RbkClient;
33pub use error::{RbkError, RbkResult};
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38
39    #[test]
40    fn test_request_types_exist() {
41        // Test that all major request types are generated and accessible
42        let _ = CommonInfoRequest::new();
43        let _ = BatteryStatusRequest::new();
44        let _ = StopExerciseRequest::new();
45        let _ = MoveToTargetRequest::new(MoveToTarget::new("target1"));
46        let _ = MoveToTarget::new("target1").into_request();
47        let _ = SwitchMapRequest::new();
48        let _ = LoadJackRequest::new();
49    }
50
51    #[test]
52    fn test_request_body_serialization() {
53        use crate::api::ToRequestBody;
54
55        // Test request without payload returns empty string
56        let request = CommonInfoRequest::new();
57        assert_eq!(request.to_request_body().unwrap(), "");
58
59        // Verify all requests have proper API variants
60        let api = request.to_api_request();
61        assert_eq!(api.api_no(), 1000);
62    }
63
64    #[test]
65    fn test_response_type_associations() {
66        use crate::api::FromResponseBody;
67
68        // Verify response type associations work
69        type Response = <CommonInfoRequest as FromResponseBody>::Response;
70
71        // Response should be StatusMessage
72        let _: Response = CommonInfo {
73            id: "robot1".to_string(),
74            version: "1.0".to_string(),
75            model: "RBK-1".to_string(),
76            code: None,
77            message: "".to_string(),
78        };
79    }
80}