Profile picture

Emmanuel Obiabo

Little Plunk Rust SDK

Rust plunk

RUST
use common_manifold::types::plunk_types::PlunkClient;
use reqwest::Client;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct PlunkPayloads {
pub to: String,
pub subject: Option<String>,
pub body: String,
}

const PLUNK_API: &str = "https://api.useplunk.com/v1/send";

pub trait PlunkClientTrait {
fn new(public_api_key: String) -> Self;

async fn send_transactional_email(
&self,
payload: PlunkPayloads,
) -> Result<String, Box<dyn std::error::Error>>;
}

impl PlunkClientTrait for PlunkClient {
fn new(public_api_key: String) -> Self {
PlunkClient { public_api_key }
}

async fn send_transactional_email(
&self,
payload: PlunkPayloads,
) -> Result<String, Box<dyn std::error::Error>> {
let client = Client::new();
let response = client
.post(PLUNK_API)
.header("Content-Type", "application/json")
.header("Authorization", format!("Bearer {}", self.public_api_key))
.json(&payload)
.send()
.await?;

if response.status().is_success() {
Ok("Email sent successfully".to_string())
} else {
Err(format!("Failed to send email: {}", response.status()).into())
}
}
}
Loading reactions...
loading mentions...

Comments

Loading comments...

← Back to Notes