Use thiserror crate for email (instead of manually implementing all 'From' traits)
authorGreg Burri <greg.burri@gmail.com>
Thu, 27 Mar 2025 16:32:56 +0000 (17:32 +0100)
committerGreg Burri <greg.burri@gmail.com>
Thu, 27 Mar 2025 16:32:56 +0000 (17:32 +0100)
backend/src/email.rs

index 32cf5c3..d9c0ea4 100644 (file)
@@ -1,37 +1,22 @@
-use derive_more::Display;
 use lettre::{
-    transport::smtp::{authentication::Credentials, AsyncSmtpTransport},
     AsyncTransport, Message, Tokio1Executor,
+    transport::smtp::{AsyncSmtpTransport, authentication::Credentials},
 };
-use tracing::{event, Level};
+use tracing::{Level, event};
 
 use crate::consts;
 
-#[derive(Debug, Display)]
+#[derive(Debug, thiserror::Error)]
 pub enum Error {
-    Parse(lettre::address::AddressError),
-    Smtp(lettre::transport::smtp::Error),
-    Email(lettre::error::Error),
-}
-
-impl From<lettre::address::AddressError> for Error {
-    fn from(error: lettre::address::AddressError) -> Self {
-        Error::Parse(error)
-    }
-}
+    #[error("Parse error: {0}")]
+    Parse(#[from] lettre::address::AddressError),
 
-impl From<lettre::transport::smtp::Error> for Error {
-    fn from(error: lettre::transport::smtp::Error) -> Self {
-        Error::Smtp(error)
-    }
-}
+    #[error("SMTP error: {0}")]
+    Smtp(#[from] lettre::transport::smtp::Error),
 
-impl From<lettre::error::Error> for Error {
-    fn from(error: lettre::error::Error) -> Self {
-        Error::Email(error)
-    }
+    #[error("Email error: {0}")]
+    Email(#[from] lettre::error::Error),
 }
-
 pub async fn send_email(
     email: &str,
     message: &str,