Initial commit: telfax - Rust Fax Server

- Modem driver (serialport) with AT command interface
- Class 1 fax protocol (T.30 session, HDLC framing)
- T.4/T.6 image codec (fax crate integration)
- Document conversion (image to fax, TIFF-F output)
- REST API (axum) for fax job management
- SQLite/InMemory job queue
- CLI interface (detect/serve/send/test)
- Integration tests passing
This commit is contained in:
Warren
2026-07-01 09:06:41 +08:00
commit 13438289fe
28 changed files with 4615 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
pub type JobId = Uuid;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum JobStatus {
Queued,
Dialing,
Sending,
Completed,
Failed(String),
Cancelled,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FaxJob {
pub id: JobId,
pub recipient: String,
pub document_path: String,
pub status: JobStatus,
pub pages: u32,
pub retries: u8,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
impl FaxJob {
pub fn new(recipient: String, document_path: String) -> Self {
let now = Utc::now();
Self {
id: Uuid::new_v4(),
recipient,
document_path,
status: JobStatus::Queued,
pages: 0,
retries: 0,
created_at: now,
updated_at: now,
}
}
}