#![doc(html_root_url = "https://docs.rs/mailboxvalidator/1.0.0")]
#![forbid(unsafe_code)]
#![warn(missing_docs)]
use serde::Deserialize;
use serde::Serialize;
pub use reqwest::Error as ReqError;
pub type MailboxValidatorResult<T> = Result<T, ReqError>;
#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)]
pub struct SingleEmailValidationRecord {
email_address: String,
domain: String,
is_free: String,
is_syntax: String,
is_domain: String,
is_smtp: String,
is_verified: String,
is_server_down: String,
is_greylisted: String,
is_disposable: String,
is_suppressed: String,
is_role: String,
is_high_risk: String,
is_catchall: String,
status: String,
error_code: String,
error_message: String,
mailboxvalidator_score: String,
time_taken: String,
credits_available: i64,
}
#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)]
pub struct DisposableEmailRecord {
email_address: String,
is_disposable: String,
error_code: String,
error_message: String,
credits_available: i64,
}
#[derive(PartialEq, Debug, Clone, Serialize, Deserialize)]
pub struct FreeEmailRecord {
email_address: String,
is_free: String,
error_code: String,
error_message: String,
credits_available: i64,
}
pub fn validate_email(email_address: &str, apikey: &str) -> MailboxValidatorResult<serde_json::value::Value> {
let client = reqwest::blocking::Client::new();
let url = format!(
"https://api.mailboxvalidator.com/v1/validation/single?email={}&key={}&format=json",
email_address, apikey
);
let res = client
.get(url)
.send()?
.error_for_status()?;
let parsed: SingleEmailValidationRecord = res.json()?;
let json_value = serde_json::json!(&parsed);
Ok(json_value)
}
pub fn is_disposable_email(email_address: &str, apikey: &str) -> MailboxValidatorResult<serde_json::value::Value> {
let client1 = reqwest::blocking::Client::new();
let url = format!(
"https://api.mailboxvalidator.com/v1/email/disposable?email={}&key={}&format=json",
email_address, apikey
);
let res = client1
.get(url)
.send()?
.error_for_status()?;
let parsed: DisposableEmailRecord = res.json()?;
let json_value = serde_json::json!(&parsed);
Ok(json_value)
}
pub fn is_free_email(email_address: &str, apikey: &str) -> MailboxValidatorResult<serde_json::value::Value> {
let client = reqwest::blocking::Client::new();
let url = format!(
"https://api.mailboxvalidator.com/v1/email/free?email={}&key={}&format=json",
email_address, apikey
);
let res = client
.get(url)
.send()?
.error_for_status()?;
let parsed: FreeEmailRecord = res.json()?;
let json_value = serde_json::json!(&parsed);
Ok(json_value)
}