shilp-sdk 0.15.0

Rust SDK for the Shilp Vector Database API
Documentation
# SDK Implementation Comparison

This document compares the Rust SDK implementation with the Go SDK.

## Feature Parity

### ✅ Core Client
- [x] Client initialization with custom HTTP client support
- [x] Request/response handling with proper error handling
- [x] File upload support
- [x] File download support

### ✅ Collection Management
- [x] `list_collections()` - List all collections
- [x] `add_collection()` - Create a new collection
- [x] `drop_collection()` - Delete a collection
- [x] `rename_collection()` - Rename a collection
- [x] `load_collection()` - Load collection into memory
- [x] `unload_collection()` - Unload collection from memory
- [x] `flush_collection()` - Flush collection to disk
- [x] `reindex_collection()` - Re-index a collection
- [x] `pq_train()` - Product Quantization training
- [x] `export_collection()` - Export collection
- [x] `import_collection()` - Import collection

### ✅ Record Management
- [x] `insert_record()` - Insert a record
- [x] `delete_record()` - Delete a record
- [x] `expiry_cleanup()` - Clean up expired records

### ✅ Data Ingestion & Search
- [x] `ingest_data()` - Ingest data into collection
- [x] `search_data()` - Search with POST request
- [x] Advanced search with filters, sorts, and weights
- [x] `list_storage()` - List storage contents
- [x] `list_ingest_sources()` - List ingestion sources
- [x] `read_document()` - Read document preview
- [x] `upload_data_file()` - Upload data file
- [x] `list_embedding_models()` - List embedding models

### ✅ Debug Operations
- [x] `get_collection_distance()` - Get distance to node
- [x] `get_collection_node_info()` - Get node information
- [x] `get_collection_node_neighbors_at_level()` - Get neighbors
- [x] `get_collection_levels()` - Get collection levels
- [x] `get_collection_nodes_at_level()` - Get nodes at level
- [x] `get_collection_node_by_reference_node_id()` - Get by reference ID

### ✅ Oplog Operations
- [x] `get_oplog_entries()` - Retrieve oplog entries
- [x] `update_replica_lsn()` - Update replica LSN (heartbeat)
- [x] `register_replica()` - Register replica
- [x] `unregister_replica()` - Unregister replica
- [x] `get_oplog_status()` - Get oplog status

### ✅ Discovery Service
- [x] `DiscoveryClient` - Separate client for discovery
- [x] `get_shilp_stats()` - Get statistics
- [x] `update_shilp_sync_status()` - Update sync status
- [x] `register_shilp_service()` - Register Shilp service
- [x] `unregister_shilp_service()` - Unregister Shilp service
- [x] `register_tei_service()` - Register TEI service
- [x] `unregister_tei_service()` - Unregister TEI service

### ✅ Health Check
- [x] `health_check()` - Check API health

## API Design Differences

### Naming Conventions
- Go uses PascalCase for exports, Rust uses snake_case
- Go: `HealthCheck()` → Rust: `health_check()`
- Go: `AddCollection()` → Rust: `add_collection()`

### Error Handling
- Go: Returns `(result, error)` tuple
- Rust: Returns `Result<T, ShilpError>` using the `?` operator

### Async/Await
- Go: Uses goroutines implicitly
- Rust: Explicit `async`/`await` with Tokio runtime

### Type System
- Both use strongly typed request/response models
- Rust uses `Option<T>` for optional fields (more explicit)
- Go uses pointers for optional fields

### Example Comparison

**Go:**
```go
client := shilp.NewClient("http://localhost:3000")
health, err := client.HealthCheck()
if err != nil {
    log.Fatalf("Health check failed: %v", err)
}
fmt.Printf("Health: %v\n", health.Success)
```

**Rust:**
```rust
let client = Client::new("http://localhost:3000");
let health = client.health_check().await?;
println!("Health: {}", health.success);
```

## Additional Features in Rust SDK

1. **Type Safety**: Stronger compile-time guarantees
2. **Zero-Cost Abstractions**: No runtime overhead
3. **Memory Safety**: No garbage collection, guaranteed memory safety
4. **Error Types**: Custom error types with `thiserror`
5. **Comprehensive Documentation**: Doc comments with examples

## File Structure Comparison

### Go SDK Structure
```
shilp-sdk-go/
├── client.go          # Main client
├── collections.go     # Collection methods
├── data.go           # Data methods
├── debug.go          # Debug methods
├── oplog.go          # Oplog methods
├── discovery_client.go # Discovery client
├── health.go         # Health check
└── models.go         # All type definitions
```

### Rust SDK Structure
```
shilp-sdk-rs/
├── src/
│   ├── lib.rs        # Library entry point
│   ├── client.rs     # Main client
│   ├── collections.rs # Collection methods
│   ├── data.rs       # Data methods
│   ├── debug.rs      # Debug methods
│   ├── oplog.rs      # Oplog methods
│   ├── discovery.rs  # Discovery client
│   ├── health.rs     # Health check
│   ├── models.rs     # All type definitions
│   └── error.rs      # Error types
├── examples/
│   └── basic_usage.rs
├── Cargo.toml        # Dependencies
└── README.md         # Documentation
```

## Statistics

- **Lines of Code**: ~1,726 lines (excluding tests)
- **Modules**: 10
- **Public Types**: 80+
- **Public Methods**: 40+
- **Dependencies**: 6 main crates

## Conclusion

The Rust SDK achieves 100% feature parity with the Go SDK while providing:
- Type safety and memory safety guarantees
- Idiomatic Rust patterns
- Comprehensive documentation
- Zero-cost abstractions
- Async/await support with Tokio