1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//! # ContextLite Rust Client
//!
//! A high-performance, async Rust client for the ContextLite context engine.
//!
//! ## Features
//!
//! - **Async/Await Support**: Built on Tokio for high-performance async operations
//! - **Type Safety**: Comprehensive type definitions with builder patterns
//! - **Error Handling**: Rich error types with proper error chaining
//! - **Connection Pooling**: HTTP connection pooling for optimal performance
//! - **Authentication**: Bearer token authentication support
//! - **Validation**: Client-side validation for better error messages
//! - **Flexible API**: Builder patterns for easy configuration
//!
//! ## Quick Start
//!
//! ```rust,no_run
//! use contextlite_client::{ContextLiteClient, ClientConfig, Document, SearchQuery};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//! // Create a client with default configuration
//! let client = ContextLiteClient::new("http://localhost:8080")?;
//!
//! // Or with custom configuration
//! let config = ClientConfig::new("http://localhost:8083")
//! .with_auth_token("your-token")
//! .with_timeout(60);
//! let client = ContextLiteClient::with_config(config)?;
//!
//! // Add a document
//! let document = Document::new("example.txt", "This is an example document");
//! let doc_id = client.add_document(&document).await?;
//!
//! // Search for documents
//! let query = SearchQuery::new("example").with_limit(10);
//! let results = client.search(&query).await?;
//!
//! println!("Found {} documents", results.documents.len());
//!
//! Ok(())
//! }
//! ```
//!
//! ## Error Handling
//!
//! The client provides comprehensive error handling with detailed error messages:
//!
//! ```rust,no_run
//! use contextlite_client::{ContextLiteClient, ContextLiteError};
//!
//! #[tokio::main]
//! async fn main() {
//! let client = ContextLiteClient::new("http://localhost:8080").unwrap();
//!
//! match client.health().await {
//! Ok(health) => println!("Server is healthy: {}", health.status),
//! Err(ContextLiteError::AuthError { message }) => {
//! eprintln!("Authentication failed: {}", message);
//! },
//! Err(ContextLiteError::ServerError { status, message }) => {
//! eprintln!("Server error {}: {}", status, message);
//! },
//! Err(err) => eprintln!("Error: {}", err),
//! }
//! }
//! ```
// Re-export main types for convenience
pub use ContextLiteClient;
pub use ;
pub use ;
/// Convenience alias for the main client type
pub type Client = ContextLiteClient;