turboclaude_protocol/
lib.rs

1//! Shared protocol types and definitions for TurboClaude REST and Agent SDKs
2//!
3//! This crate provides the core type definitions and protocol structures used by both
4//! the REST client (turboclaude) and the Agent client (turboclaudeagent). By centralizing
5//! these types, we achieve DRY principles and ensure consistency across the ecosystem.
6//!
7//! # Type Organization
8//!
9//! - **Content types**: [`content`] - Text, images, tool use/results
10//! - **Message types**: [`message`] - Messages, content blocks
11//! - **Common types**: [`types`] - Models, usage, cache info
12//! - **Agent protocol**: [`agent`] - Control requests, hooks, permissions
13//! - **Error types**: [`error`] - Protocol and message errors
14//!
15//! # Design Principles
16//!
17//! - **Zero I/O**: All types are pure data structures
18//! - **Serialization**: serde-based for both JSON and future formats
19//! - **Idiomatic Rust**: Owned types, `Result<T>` for errors, `Option<T>` for optional values
20//! - **No circular dependencies**: turboclaude-protocol depends only on serde/chrono
21
22#![deny(unsafe_code)]
23#![warn(missing_docs)]
24//!
25//! # Usage
26//!
27//! ```ignore
28//! use turboclaude_protocol::message::Message;
29//! use turboclaude_protocol::content::ContentBlock;
30//!
31//! let msg = Message {
32//!     id: "msg_123".to_string(),
33//!     content: vec![ContentBlock::Text { text: "Hello".to_string() }],
34//!     // ...
35//! };
36//! ```
37
38pub mod agent;
39pub mod content;
40pub mod error;
41pub mod hooks;
42pub mod message;
43pub mod permissions;
44pub mod protocol;
45pub mod types;
46
47// Re-export commonly used types at crate level
48pub use agent::{AgentDefinition, ControlRequest, HookEvent, ToolPermissionRequest};
49pub use content::ContentBlock;
50pub use error::{ProtocolError, Result};
51pub use hooks::{ContinueReason, HookContext, HookMatcher, PermissionDecision, StopReason};
52pub use message::{
53    AssistantMessage, AssistantMessageError, Message, MessageRequest, MessageRole, ResultMessage,
54    StreamEvent, SystemMessage, UserMessage,
55};
56pub use permissions::{
57    AddDirectoriesUpdate, AddRulesUpdate, PermissionBehavior, PermissionRuleValue,
58    PermissionUpdate, PermissionUpdateDestination, RemoveDirectoriesUpdate, RemoveRulesUpdate,
59    ReplaceRulesUpdate, SetModeUpdate,
60};
61pub use protocol::{
62    ControlCommand, ControlResponse, HookRequest, HookResponse, ModifiedInputs,
63    PermissionCheckRequest, PermissionResponse, ProtocolErrorMessage, ProtocolMessage,
64    QueryRequest, QueryResponse, RequestId,
65};
66pub use types::{Model, PermissionMode, ToolDefinition, Usage};