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
38pub struct EmailMessage<'a> {
41 email_path: &'a str,
42 json_path: &'a str,
43}
44
45impl<'a> EmailMessage<'a> {
46 pub fn create(email_path: &'a str, json_path: &'a str) -> EmailMessage<'a> {
48 EmailMessage { email_path, json_path }
49 }
50
51 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}