summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 58f187a..7788bb0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,3 +1,109 @@
+//! This crate provides a general interface for using template engine with the mail crate.
+//!
+//! It's core is the `TemplateEngine` trait which can be implemented to bind a template engine.
+//! When rendering a template the template engine implementing the `TemplateEngine` trait will
+//! produce a number of (wrapped) `Resource` instances representing the alternate bodies of a mail as well
+//! as a number of additional `Resources` used for embedded content (e.g. logo images) and
+//! attachments. This crate then takes this parts and composes a multipart mime mail from
+//! it.
+//!
+//! # Template Engine implementations
+//!
+//! A mail template engine has to do more then just taking a single text
+//! template (e.g. a handlebars template) and produce some output using
+//! string magic. It has to:
+//!
+//! 1. consider alternate bodies, so it should render at last two
+//! "text templates" (one text/plain, one html)
+//! 2. consider which additional embeddings/attachments should be included
+//! (all in the given template data are included, but you might
+//! add additional ones, e.g. some logo image)
+//!
+//! As such text template engines like `Handle` bar can not directly
+//! be bound to the `TemplateEngine` trait.
+//!
+//! For using text template engine it's recommended to use
+//! the `mail-template-render-engine` (also exposed through the
+//! mail facade) which implements this overhead for any engine
+//! which can "just" render some text and provides default
+//! bindings to some common template engines (e.g. Handlebars).
+//!
+//! # Derive
+//!
+//! This crate requires template data to implement `InspectEmbeddedResources`
+//! which combined with some typing/generic design decisions allows to bind
+//! not just to template engines which use serialization to access template
+//! data but also to such which use static typing (like `askama`).
+//!
+//! As such it re-exports the `InspectEmbeddedResources` derive from
+//! `mail-derive`. Note that if you use the mail facade it also does
+//! re-export the derive.
+//!
+//! # Features
+//!
+//! - `askama-engine`, includes bindings for the askama template engine.
+//! - `serialize-to-content-id`, implements Serialize for `Embedded`,
+//! `EmbeddedWithCId` which serializes the embedded type **into its
+//! content id**. E.g. a image with content id `"q09cu3@example.com"`
+//! will be serialized to the string `"q09cu3@example.com"`. This is
+//! extremely useful for all template engines which use serialization
+//! as their way to access template data.
+//!
+//!
+//! # Example
+//!
+//! ```
+//!
+//! ```
+//!
+//! # Road Map
+//!
+//! The current implementation has a number of limitations which should be lifted with
+//! future versions:
+//!
+//! - Only a limited subset of headers are/can be set through the template engine
+//! (`Sender`, `From`, `To`, `Subject`) while some headers are set implicitly
+//! when encoding the mail (e.g. `Date`, `Content-Type`, `Content-Disposition`).
+//! But sometimes it would be useful to add some custom headers through the template
+//! engine (both on the outermost and inner bodies).
+//!
+//! - `From`, `To`, `Subject` have to be given, but sometimes you might want to just
+//! create the `Mail` type and then set them by yourself (through you _can_ currently
+//! override them)
+//!
+//! - Re-use/integration of existing mail instances: Some times you might want to
+//! use a `Mail` instance created some where else as a body for a multipart mail
+//! generated from a template (e.g. some thing generating "special" attachments).
+//!
+//!
+//! Also there are some parts which are likely to change:
+//!
+//! - `MailSendData`/`MailSendDataBuilder` the name is
+//! not very good it also needs to change to handle
+//! the thinks listed above
+//!
+//! - `Embedded`, `EmbeddedWithCid`, embeddings and attachments
+//! currently a `Embedded` instance is a wrapper around `Resource`
+//! representing something which will become a mail body but is not
+//! a main body (i.e. it not the text/html/.. you send) instead it
+//! something embedded in the mail which is either used as attachment
+//! or as a embedding (e.g. a logo image). Through the content disposition
+//! the `Embedded` instance differs between thing embedded and internally
+//! used or embedded and used as attachment at the same time many different
+//! arrays are sometimes used to differ between them (e.g. in `MailParts`)
+//! but there is no (type system) check to make sure a array of thinks used
+//! as attachments can not contain a `Embedded` instance with content disposition
+//! inline. The result will still be a valid mail, but likely not in the
+//! way you expect it to be. This should be fixed one way or another (making
+//! the different array type safe and lifting disposition to the type level
+//! had been used but didn't play out nicely).
+//!
+//! - `serialize-to-content-id`, is a nice idea but has some problems in
+//! some edge cases (e.g. when you want to serialize anything containing
+//! a `Embedded` type for any usage BUT accessing it in an template). So
+//! it might be removed, which means a import like `cid:{{data.mything}}`
+//! (using some mustach pseudo template syntax) would become `cid:{{data.mything.cid}}`.
+//!
extern crate mail_types as mail;
extern crate mail_common as common;
#[macro_use]