1use crate::client::ClientRequest;
4use crate::errors::SDKError;
5use crate::response::ClientResponse;
6use std::future::Future;
7
8pub trait Client {
12 fn send_request(
14 &self,
15 request: ClientRequest,
16 ) -> impl Future<Output = Result<ClientResponse, SDKError>> + Send;
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22 use crate::conversation::Conversation;
23 use crate::message::{Message, Role};
24
25 struct MockClient;
26
27 impl Client for MockClient {
28 async fn send_request(&self, _request: ClientRequest) -> Result<ClientResponse, SDKError> {
29 Ok(ClientResponse::new(Message::new(
30 Role::Assistant,
31 "Mock response",
32 )))
33 }
34 }
35
36 #[tokio::test]
37 async fn test_mock_client_send_request() {
38 let client = MockClient;
39 let mut conv = Conversation::new();
40 conv.add_message(Message::new(Role::User, "Hello"));
41 let req = ClientRequest::new(conv);
42 let response = client.send_request(req).await.unwrap();
43 assert_eq!(
44 response.message,
45 Message::new(Role::Assistant, "Mock response")
46 );
47 }
48}