diff --git a/lettre/Cargo.toml b/lettre/Cargo.toml index b662848..ea556dc 100644 --- a/lettre/Cargo.toml +++ b/lettre/Cargo.toml @@ -21,12 +21,15 @@ native-tls = "^0.1" base64 = "^0.6" hex = "^0.2" rust-crypto = "^0.2" -serde = "^1.0" -serde_json = "^1.0" -serde_derive = "^1.0" +serde = { version = "^1.0", optional = true } +serde_json = { version = "^1.0", optional = true } +serde_derive = { version = "^1.0", optional = true } [dev-dependencies] env_logger = "^0.4" [features] +default = ["file-transport"] unstable = [] +serde-impls = ["serde", "serde_derive"] +file-transport = ["serde-impls", "serde_json"] diff --git a/lettre/src/lib.rs b/lettre/src/lib.rs index 25ba59a..dd02188 100644 --- a/lettre/src/lib.rs +++ b/lettre/src/lib.rs @@ -13,20 +13,25 @@ extern crate hex; extern crate crypto; extern crate bufstream; extern crate native_tls; +#[cfg(feature = "file-transport")] extern crate serde_json; +#[cfg(feature = "serde-impls")] extern crate serde; +#[cfg(feature = "serde-impls")] #[macro_use] extern crate serde_derive; pub mod smtp; pub mod sendmail; pub mod stub; +#[cfg(feature = "file-transport")] pub mod file; use std::fmt; use std::fmt::{Display, Formatter}; /// Email address -#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] +#[derive(PartialEq, Eq, Clone, Debug)] +#[cfg_attr(feature = "serde-impls", derive(Serialize, Deserialize))] pub struct EmailAddress(pub String); impl Display for EmailAddress { @@ -63,7 +68,8 @@ pub trait EmailTransport { } /// Minimal email structure -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone)] +#[cfg_attr(feature = "serde-impls", derive(Serialize, Deserialize))] pub struct SimpleSendableEmail { /// To to: Vec, diff --git a/lettre/tests/lib.rs b/lettre/tests/lib.rs index 1e446d5..6b9b76d 100644 --- a/lettre/tests/lib.rs +++ b/lettre/tests/lib.rs @@ -3,4 +3,5 @@ extern crate lettre; mod transport_smtp; mod transport_sendmail; mod transport_stub; +#[cfg(feature = "file-transport")] mod transport_file; diff --git a/lettre/tests/transport_file.rs b/lettre/tests/transport_file.rs index f31b06a..1c1497d 100644 --- a/lettre/tests/transport_file.rs +++ b/lettre/tests/transport_file.rs @@ -1,7 +1,7 @@ extern crate lettre; use lettre::{EmailAddress, EmailTransport, SendableEmail, SimpleSendableEmail}; - +#[cfg(feature = "file-transport")] use lettre::file::FileEmailTransport; use std::env::temp_dir; use std::fs::File; @@ -9,6 +9,7 @@ use std::fs::remove_file; use std::io::Read; #[test] +#[cfg(feature = "file-transport")] fn file_transport() { let mut sender = FileEmailTransport::new(temp_dir()); let email = SimpleSendableEmail::new(