diff --git a/src/domain/subscriber_email.rs b/src/domain/subscriber_email.rs index 34daccd..20f7c3e 100644 --- a/src/domain/subscriber_email.rs +++ b/src/domain/subscriber_email.rs @@ -22,7 +22,6 @@ impl AsRef for SubscriberEmail { #[cfg(test)] mod tests { use crate::domain::subscriber_email::SubscriberEmail; - use claims::assert_err; use fake::faker::internet::en::SafeEmail; use fake::Fake; diff --git a/src/routes/subscriptions.rs b/src/routes/subscriptions.rs index c863a19..f41c7db 100644 --- a/src/routes/subscriptions.rs +++ b/src/routes/subscriptions.rs @@ -10,6 +10,16 @@ pub struct FormData { name: String, } +impl TryFrom for NewSubscriber { + type Error = String; + + fn try_from(value: FormData) -> Result { + let name = SubscriberName::parse(value.name)?; + let email = SubscriberEmail::parse(value.email)?; + Ok(Self { email, name }) + } +} + #[tracing::instrument( name = "Adding a new subscriber", // functions args isn't really relevant to the span @@ -23,18 +33,10 @@ pub async fn subscribe_route( form: web::Form, db_conn_pool: web::Data, ) -> HttpResponse { - let name = match SubscriberName::parse(form.0.name) { - Ok(name) => name, + let new_subscriber = match form.0.try_into() { + Ok(form) => form, Err(_) => return HttpResponse::BadRequest().finish(), }; - - let email = match SubscriberEmail::parse(form.0.email) { - Ok(email) => email, - Err(_) => return HttpResponse::BadRequest().finish(), - }; - - let new_subscriber = NewSubscriber { email, name }; - match insert_subscriber(&db_conn_pool, &new_subscriber).await { Ok(_) => HttpResponse::Ok().finish(), Err(_) => HttpResponse::InternalServerError().finish(),