Add server-side folder filtering using IMAP LIST patterns and enhance message filtering to use IMAP SEARCH with keyword filters when available. Key improvements: - Add list_filtered_mailboxes() method using IMAP LIST with patterns - Use server-side filtering instead of client-side folder filtering - Enhance message search to use IMAP SEARCH for subject/sender keywords - Add has_keyword_filters() method to MessageFilter - Reduce network traffic by leveraging IMAP server capabilities - Remove dependency on client-side filter_folders function This achieves full feature parity with the updated Go implementation and ensures both versions use IMAP standards optimally. 🤖 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-no-filter.json | ||
| config-test-rust-single.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.