a2a_rs_server/lib.rs
1//! A2A Server Library
2//!
3//! This library provides a generic, pluggable A2A RC 1.0 compliant JSON-RPC server
4//! framework. Implement the `MessageHandler` trait to create your own agent backend.
5//!
6//! # Generic Server Example
7//!
8//! ```rust,ignore
9//! use a2a_rs_server::{A2aServer, MessageHandler, HandlerResult, AuthContext, EchoHandler};
10//! use a2a_rs_core::{AgentCard, Message, Task};
11//! use async_trait::async_trait;
12//!
13//! // Use the built-in echo handler for demos
14//! A2aServer::echo()
15//! .bind("0.0.0.0:8080")
16//! .run()
17//! .await?;
18//!
19//! // Or implement your own handler
20//! struct MyAgent { /* ... */ }
21//!
22//! #[async_trait]
23//! impl MessageHandler for MyAgent {
24//! async fn handle_message(
25//! &self,
26//! message: Message,
27//! auth: Option<AuthContext>,
28//! ) -> HandlerResult<SendMessageResponse> {
29//! // Process message with your backend
30//! todo!()
31//! }
32//!
33//! fn agent_card(&self, base_url: &str) -> AgentCard {
34//! // Return your agent's card
35//! todo!()
36//! }
37//! }
38//!
39//! A2aServer::new(MyAgent { /* ... */ })
40//! .bind("0.0.0.0:8080")
41//! .auth_extractor(|headers| {
42//! // Extract auth from headers
43//! None
44//! })
45//! .run()
46//! .await?;
47//! ```
48
49mod handler;
50mod server;
51mod task_store;
52mod webhook_delivery;
53mod webhook_store;
54
55// Re-export handler types
56pub use handler::{AuthContext, BoxedHandler, EchoHandler, HandlerError, HandlerResult, MessageHandler};
57
58// Re-export server types
59pub use server::{A2aServer, AppState, AuthExtractor, ServerConfig, run_echo_server, run_server};
60
61// Re-export task store
62pub use task_store::TaskStore;
63
64// Re-export webhook types
65pub use webhook_delivery::{RetryConfig, WebhookDelivery, WebhookError};
66pub use webhook_store::{StoredWebhookConfig, WebhookStore};