jules_core/builder/
request.rs1use crate::client::ClientRequest;
2use crate::conversation::Conversation;
3use crate::message::Message;
4
5#[derive(Debug, Clone, Default)]
7pub struct RequestBuilder {
8 conversation: Conversation,
9}
10
11impl RequestBuilder {
12 #[must_use]
14 pub fn new() -> Self {
15 Self::default()
16 }
17
18 #[must_use]
20 pub fn conversation(mut self, conversation: Conversation) -> Self {
21 self.conversation = conversation;
22 self
23 }
24
25 #[must_use]
27 pub fn add_message(mut self, message: Message) -> Self {
28 self.conversation.add_message(message);
29 self
30 }
31
32 #[must_use]
34 pub fn build(self) -> ClientRequest {
35 ClientRequest::new(self.conversation)
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42 use crate::message::Role;
43
44 #[test]
45 fn test_request_builder_default() {
46 let builder = RequestBuilder::new();
47 let req = builder.build();
48 assert!(req.conversation.messages().is_empty());
49 }
50
51 #[test]
52 fn test_request_builder_with_conversation() {
53 let mut conv = Conversation::new();
54 conv.add_message(Message::new(Role::User, "Hello"));
55
56 let builder = RequestBuilder::new().conversation(conv.clone());
57 let req = builder.build();
58
59 assert_eq!(req.conversation, conv);
60 }
61
62 #[test]
63 fn test_request_builder_add_message() {
64 let builder = RequestBuilder::new().add_message(Message::new(Role::User, "Hello"));
65 let req = builder.build();
66
67 assert_eq!(req.conversation.messages().len(), 1);
68 assert_eq!(req.conversation.messages()[0].content(), "Hello");
69 }
70}