scufflecloud_email/services/email.rs
1use ext_traits::{RequestExt, ResultExt};
2
3use crate::services::EmailSvc;
4use crate::{aws_ses, email_builder};
5
6#[async_trait::async_trait]
7impl<G: email_traits::Global> pb::scufflecloud::email::v1::email_service_server::EmailService for EmailSvc<G> {
8 async fn send_email(
9 &self,
10 req: tonic::Request<pb::scufflecloud::email::v1::SendEmailRequest>,
11 ) -> Result<tonic::Response<()>, tonic::Status> {
12 let global = &req.global::<G>()?;
13
14 let raw_email = email_builder::build_raw_email(req.into_inner())?;
15 aws_ses::send_email(global, raw_email)
16 .await
17 .into_tonic_internal_err("failed to send email with AWS SES")?;
18
19 Ok(tonic::Response::new(()))
20 }
21}