This commit completes the Rust implementation of mail2couch with full feature parity to the Go version, including: - Complete IMAP client with TLS support and retry logic - Advanced email parsing with MIME multipart support using mail-parser - Email attachment extraction and CouchDB storage - Sync mode implementation with deleted message handling - Enhanced error handling and retry mechanisms - Identical command-line interface with bash completion - Test configurations for both implementations The Rust implementation now provides: - Memory safety and type safety guarantees - Modern async/await patterns with tokio/async-std - Comprehensive error handling with anyhow/thiserror - Structured logging and progress reporting - Performance optimizations and retry logic Test configurations created: - rust/config-test-rust.json - Rust implementation test config - go/config-test-go.json - Go implementation test config - test-config-comparison.md - Detailed comparison documentation - test-both-implementations.sh - Automated testing script Both implementations can now be tested side-by-side with identical configurations to validate feature parity and performance. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||
| config-gmail-example.json | ||
| config-test-rust.json | ||
| config-tls-test.json | ||
| README.md | ||
| TLS_SUPPORT.md | ||
Mail2Couch Rust Implementation
This directory contains the Rust implementation of mail2couch, which will provide the same functionality as the Go implementation while maintaining full compatibility with the CouchDB document schemas.
Current Status
🚧 Work in Progress - The Rust implementation is planned for future development.
Currently available:
- ✅ CouchDB Schema Definitions: Complete Rust structs that match the Go implementation
- ✅ Serialization Support: Full serde integration for JSON handling
- ✅ Type Safety: Strongly typed structures for all CouchDB documents
- ✅ Compatibility Tests: Validated against example documents
- ✅ Database Naming: Same database naming logic as Go implementation
Schema Compatibility
The Rust implementation uses the same CouchDB document schemas as the Go implementation:
Mail Documents
use mail2couch::{MailDocument, generate_database_name};
let mut doc = MailDocument::new(
"123".to_string(), // IMAP UID
"INBOX".to_string(), // Mailbox
vec!["sender@example.com".to_string()], // From
vec!["recipient@example.com".to_string()], // To
"Subject".to_string(), // Subject
Utc::now(), // Date
"Body content".to_string(), // Body
HashMap::new(), // Headers
false, // Has attachments
);
doc.set_id(); // Sets ID to "INBOX_123"
Sync Metadata
use mail2couch::SyncMetadata;
let metadata = SyncMetadata::new(
"INBOX".to_string(), // Mailbox
Utc::now(), // Last sync time
456, // Last message UID
100, // Message count
);
// ID automatically set to "sync_metadata_INBOX"
Database Naming
use mail2couch::generate_database_name;
let db_name = generate_database_name("Personal Gmail", "");
// Returns: "m2c_personal_gmail"
let db_name = generate_database_name("", "user@example.com");
// Returns: "m2c_user_example_com"
Dependencies
The Rust implementation uses these key dependencies:
- serde: JSON serialization/deserialization
- chrono: Date/time handling with ISO8601 support
- reqwest: HTTP client for CouchDB API
- tokio: Async runtime
- anyhow/thiserror: Error handling
Testing
Run the schema compatibility tests:
cargo test
All tests validate that the Rust structures produce JSON compatible with the Go implementation and documented schemas.
Future Implementation
The planned Rust implementation will include:
- IMAP Client: Connect to mail servers and retrieve messages
- CouchDB Integration: Store documents using native Rust CouchDB client
- Configuration: Same JSON config format as Go implementation
- CLI Interface: Compatible command-line interface
- Performance: Leveraging Rust's performance characteristics
- Memory Safety: Rust's ownership model for reliable operation
Schema Documentation
See the following files for complete schema documentation:
../couchdb-schemas.md: Complete schema specification../examples/: JSON example documentssrc/schemas.rs: Rust type definitions
Cross-Implementation Compatibility
Both Go and Rust implementations:
- Use identical CouchDB document schemas
- Generate the same database names
- Store documents with the same field names and types
- Support incremental sync with compatible metadata
- Handle attachments using CouchDB native attachment storage
This ensures that databases created by either implementation can be used interchangeably.