formulate 1.2.0

formulate is a standalone server that listens for web form data submissions.
use tera::{Error, Tera};

use crate::mailer::OptionalFields;

pub fn message_template(
    form_name: &str,
    form_subject: &str,
    form_message: &str,
    mail_subject: &str,
    form_optional: &OptionalFields,
    template_name: &str,
) -> Result<String, Error> {
    let mut tera = Tera::default();
    tera.add_raw_templates(vec![
        ("default.html", include_str!("templates/default.html")),
        ("welcome.html", include_str!("templates/welcome.html")),
        ("welcome.txt", include_str!("templates/welcome.txt")),
    ])?;

    let mut ctx = tera::Context::new();
    if let Some(last_name) = form_optional.last_name {
        ctx.insert("name", &format!("{form_name} {last_name}"));
    } else {
        ctx.insert("name", form_name);
    }
    ctx.insert("subject", form_subject);
    ctx.insert("message", form_message);
    ctx.insert("message_subject", mail_subject);
    if let Some(cta_link) = form_optional.cta_link {
        ctx.insert("cta_link", cta_link);
    }
    if let Some(logo_img) = form_optional.logo_img {
        ctx.insert("logo_img", logo_img);
    }
    if let Some(message_summary) = form_optional.message_summary {
        ctx.insert("message_summary", message_summary);
    }
    if let Some(company_name) = form_optional.company_name {
        ctx.insert("company_name", company_name);
    }
    if let Some(phone_number) = form_optional.phone_number {
        ctx.insert("phone_number", phone_number);
    }
    if let Some(ordered_items) = form_optional.ordered_items {
        ctx.insert("ordered_items", ordered_items.get_line_items().as_slice());
    }

    tera.render(template_name, &ctx)
}