use crate::client::ClientRequest;
use crate::errors::SDKError;
use crate::response::ClientResponse;
use std::future::Future;
pub trait Client {
fn send_request(
&self,
request: ClientRequest,
) -> impl Future<Output = Result<ClientResponse, SDKError>> + Send;
}
#[cfg(test)]
mod tests {
use super::*;
use crate::conversation::Conversation;
use crate::message::{Message, Role};
struct MockClient;
impl Client for MockClient {
async fn send_request(&self, _request: ClientRequest) -> Result<ClientResponse, SDKError> {
Ok(ClientResponse::new(Message::new(
Role::Assistant,
"Mock response",
)))
}
}
#[tokio::test]
async fn test_mock_client_send_request() {
let client = MockClient;
let mut conv = Conversation::new();
conv.add_message(Message::new(Role::User, "Hello"));
let req = ClientRequest::new(conv);
let response = client.send_request(req).await.unwrap();
assert_eq!(
response.message,
Message::new(Role::Assistant, "Mock response")
);
}
}