use crate::client::Client;
use crate::error::Result;
use serde::{Deserialize, Serialize};
pub struct QrCodesApi {
client: Client,
}
impl QrCodesApi {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub async fn create(
&self,
prefilled_message: &str,
generate_qr_image: QrImageFormat,
) -> Result<QrCodeResponse> {
let body = CreateQrCodeRequest {
prefilled_message: prefilled_message.to_string(),
generate_qr_image: generate_qr_image.as_str().to_string(),
};
let url = format!("{}/message_qrdls", self.client.base_url());
self.client.post(&url, &body).await
}
pub async fn list(&self) -> Result<QrCodesListResponse> {
let url = format!("{}/message_qrdls", self.client.base_url());
self.client.get(&url).await
}
pub async fn get(&self, qr_code_id: &str) -> Result<QrCode> {
let url = format!("{}/message_qrdls/{}", self.client.base_url(), qr_code_id);
self.client.get(&url).await
}
pub async fn update(
&self,
qr_code_id: &str,
prefilled_message: &str,
) -> Result<QrCodeResponse> {
let body = UpdateQrCodeRequest {
prefilled_message: prefilled_message.to_string(),
};
let url = format!("{}/message_qrdls/{}", self.client.base_url(), qr_code_id);
self.client.post(&url, &body).await
}
pub async fn delete(&self, qr_code_id: &str) -> Result<crate::types::SuccessResponse> {
let url = format!("{}/message_qrdls/{}", self.client.base_url(), qr_code_id);
self.client.delete(&url).await
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum QrImageFormat {
Png,
Svg,
}
impl QrImageFormat {
fn as_str(&self) -> &'static str {
match self {
QrImageFormat::Png => "PNG",
QrImageFormat::Svg => "SVG",
}
}
}
#[derive(Debug, Serialize)]
struct CreateQrCodeRequest {
prefilled_message: String,
generate_qr_image: String,
}
#[derive(Debug, Serialize)]
struct UpdateQrCodeRequest {
prefilled_message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QrCodeResponse {
pub code: String,
pub prefilled_message: String,
pub deep_link_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub qr_image_url: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QrCodesListResponse {
pub data: Vec<QrCode>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QrCode {
pub code: String,
pub prefilled_message: String,
pub deep_link_url: String,
}