mail2couch/rust/README.md

111 lines
3.6 KiB
Markdown
Raw Normal View History

# 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
```rust
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
```rust
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
```rust
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:
```bash
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`](../couchdb-schemas.md): Complete schema specification
- [`../examples/`](../examples/): JSON example documents
- [`src/schemas.rs`](src/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.