email_template/
lib.rs

1mod utils;
2
3use serde_json::Value;
4use serde::{Deserialize, Serialize};
5use lettre::{Message};
6use crate::utils::{get_headers, get_bodies, generate_emails, get_json_data, get_email_contents};
7
8#[derive(Debug, Deserialize)]
9pub struct JsonData {
10    header: JsonHeader,
11    bodies: Vec<Value>,
12}
13
14#[derive(Debug, Serialize, Deserialize)]
15pub struct JsonHeader {
16    from: String,
17    recipients: Vec<String>,
18    subject: String,
19}
20
21#[derive(Debug, Clone)]
22pub struct Header {
23    from: String,
24    recipient: String,
25    subject: String,
26}
27
28impl Header {
29    fn create(from: String, recipient: String, subject: String) -> Header {
30        Header {
31            from,
32            recipient,
33            subject,
34        }
35    }
36}
37
38/// EmailMessage struct.
39/// It is mandatory to instantiate EmailMessage by EmailMessage::create
40pub struct EmailMessage<'a> {
41    email_path: &'a str,
42    json_path: &'a str,
43}
44
45impl<'a> EmailMessage<'a> {
46    /// Instantiate EmailMessage
47    pub fn create(email_path: &'a str, json_path: &'a str) -> EmailMessage<'a> {
48        EmailMessage { email_path, json_path }
49    }
50
51    /// Build emails
52    pub fn build_emails(&self) -> Vec<Message> {
53        let json_data = get_json_data(self.json_path);
54        let contents = get_email_contents(self.email_path);
55
56        let json_data_header = json_data.header;
57        let headers = get_headers(
58            json_data_header.recipients,
59            json_data_header.from,
60            json_data_header.subject,
61        );
62
63        let bodies = get_bodies(contents, json_data.bodies);
64        generate_emails(headers, bodies)
65    }
66}