pub mod common;
pub mod messages;
pub mod prelude {
pub use crate::common::errors::{AnthropicToolError, Result};
pub use crate::common::usage::Usage;
pub use crate::common::tool::{CacheControl, JsonSchema, PropertyDef, Tool};
pub use crate::messages::request::{
Messages,
body::{Body, Metadata, ThinkingConfig, ToolChoice},
content::{ContentBlock, DocumentSource, ImageSource, MediaType},
message::{Message, SystemBlock, SystemPrompt},
model::Model,
role::Role,
};
pub use crate::messages::response::{Response, StopReason};
pub use crate::messages::streaming::{Delta, MessageDelta, StreamAccumulator, StreamEvent};
}
pub use common::{AnthropicToolError, Result, Tool, Usage};
pub use messages::request::Messages;
pub use messages::response::Response;
#[cfg(test)]
mod tests {
use super::prelude::*;
#[test]
fn test_messages_builder() {
let mut client = Messages::with_api_key("test_key");
client
.model(Model::Sonnet4)
.max_tokens(1024)
.system("You are a helpful assistant.")
.user("Hello!");
let body = client.body();
assert_eq!(body.model, Model::Sonnet4);
assert_eq!(body.max_tokens, 1024);
assert_eq!(body.messages.len(), 1);
}
#[test]
fn test_messages_builder_with_string_model() {
let mut client = Messages::with_api_key("test_key");
client
.model("claude-opus-4-20250514") .max_tokens(2048)
.user("Test");
let body = client.body();
assert_eq!(body.model, Model::Opus4);
}
#[test]
fn test_tool_builder() {
let mut tool = Tool::new("search");
tool.description("Search for information")
.add_string_property("query", Some("Search query"), true);
assert_eq!(tool.name, "search");
assert!(tool.input_schema.properties.is_some());
}
#[test]
fn test_message_creation() {
let msg = Message::user("Hello!");
assert_eq!(msg.role, Role::User);
assert_eq!(msg.content.len(), 1);
}
#[test]
fn test_content_block() {
let block = ContentBlock::text("Test text");
let json = serde_json::to_string(&block).unwrap();
assert!(json.contains("\"type\":\"text\""));
assert!(json.contains("\"text\":\"Test text\""));
}
}