diff options
Diffstat (limited to 'core/examples/readme.rs')
-rw-r--r-- | core/examples/readme.rs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/core/examples/readme.rs b/core/examples/readme.rs new file mode 100644 index 0000000..5e0cd42 --- /dev/null +++ b/core/examples/readme.rs @@ -0,0 +1,57 @@ +extern crate futures; +// Note that the `mail` crate provides a facade re-exporting +// all relevant parts. +extern crate mail_core; +extern crate mail_internals; +#[macro_use] +extern crate mail_headers; + +use std::str; +use futures::Future; + +use mail_internals::MailType; + +// In the facade this is the `headers` module. +use mail_headers::{ + headers::*, + header_components::Domain +}; + +// In the facade this types (and the default_impl module) +// are also exposed at top level +use mail_core::{ + Mail, + default_impl::simple_context, + error::MailError +}; + +fn print_some_mail() -> Result<(), MailError> { + // Domain will implement `from_str` in the future, + // currently it doesn't have a validator/parser. + // So this will become `"example.com".parse()` + let domain = Domain::from_unchecked("example.com".to_owned()); + // Normally you create this _once per application_. + let ctx = simple_context::new(domain, "xqi93".parse().expect("we know it's ascii")) + .expect("this is basically: failed to get cwd from env"); + + let mut mail = Mail::plain_text("Hy there! 😁", &ctx); + mail.insert_headers(headers! { + _From: [("I'm Awesome 😁", "bla@examle.com")], + _To: ["unknow@example.com"], + Subject: "Hy there message 😁" + }?); + + // We don't added any think which needs loading but we could have + // and all of it would have been loaded concurrent and async. + let encoded = mail.into_encodable_mail(ctx.clone()) + .wait()? + .encode_into_bytes(MailType::Ascii)?; + + let mail_str = str::from_utf8(&encoded).unwrap(); + println!("{}", mail_str); + Ok(()) +} + +fn main() { + print_some_mail().unwrap() +}
\ No newline at end of file |