pub struct WaterfallRouter { /* private fields */ }Expand description
Waterfall router: tries each step in order, falls back to next on failure. Optimizes cost by trying cheaper channels (email) before expensive ones (SMS).
Implementations§
Source§impl WaterfallRouter
impl WaterfallRouter
pub fn new() -> Self
pub fn add_sms(self, provider: Arc<dyn SmsSender>) -> Self
pub fn add_email(self, provider: Arc<dyn EmailSender>) -> Self
Sourcepub async fn send_otp(
&self,
recipient: &str,
code: &str,
app_name: &str,
) -> Result<SendResult, ChorusError>
pub async fn send_otp( &self, recipient: &str, code: &str, app_name: &str, ) -> Result<SendResult, ChorusError>
Send a message through the waterfall chain. For OTP: recipient can be email or phone — tries each step in order.
Sourcepub async fn send_sms(
&self,
msg: &SmsMessage,
) -> Result<SendResult, ChorusError>
pub async fn send_sms( &self, msg: &SmsMessage, ) -> Result<SendResult, ChorusError>
Send SMS directly (bypass waterfall).
Sourcepub async fn send_email(
&self,
msg: &EmailMessage,
) -> Result<SendResult, ChorusError>
pub async fn send_email( &self, msg: &EmailMessage, ) -> Result<SendResult, ChorusError>
Send email directly (bypass waterfall).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for WaterfallRouter
impl !RefUnwindSafe for WaterfallRouter
impl Send for WaterfallRouter
impl Sync for WaterfallRouter
impl Unpin for WaterfallRouter
impl UnsafeUnpin for WaterfallRouter
impl !UnwindSafe for WaterfallRouter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more