claude_rust_types/domain/
provider.rs1use claude_rust_errors::AppResult;
2use futures::stream::BoxStream;
3use serde_json::Value;
4
5use super::message::Conversation;
6
7#[derive(Debug, Clone)]
8pub enum StopReason {
9 EndTurn,
10 ToolUse,
11 MaxTokens,
12}
13
14#[derive(Debug, Clone)]
15pub enum StreamEvent {
16 ContentDelta { text: String },
17 ToolUseStart { id: String, name: String },
18 ToolUseDelta { json_chunk: String },
19 Stop { reason: StopReason },
20 Error { message: String },
21}
22
23#[async_trait::async_trait]
24pub trait Provider: Send + Sync {
25 async fn stream(
26 &self,
27 conversation: &Conversation,
28 tools: &[Value],
29 ) -> AppResult<BoxStream<'static, StreamEvent>>;
30}