use serde::{Deserialize, Serialize};
pub const DEFAULT_API_VERSION: &str = "v21.0";
pub const GRAPH_API_URL: &str = "https://graph.facebook.com";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageResponse {
pub messaging_product: String,
pub contacts: Vec<ContactInfo>,
pub messages: Vec<MessageInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContactInfo {
pub input: String,
pub wa_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageInfo {
pub id: String,
pub message_status: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SuccessResponse {
pub success: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PhoneNumber {
pub verified_name: String,
pub display_phone_number: String,
pub id: String,
pub quality_rating: String,
#[serde(default)]
pub code_verification_status: Option<String>,
#[serde(default)]
pub platform_type: Option<String>,
#[serde(default)]
pub throughput: Option<Throughput>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Throughput {
pub level: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PhoneNumbersResponse {
pub data: Vec<PhoneNumber>,
#[serde(default)]
pub paging: Option<Paging>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Paging {
pub cursors: Option<Cursors>,
pub next: Option<String>,
pub previous: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Cursors {
pub before: String,
pub after: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WhatsAppBusinessAccount {
pub id: String,
pub name: String,
pub timezone_id: String,
pub message_template_namespace: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WabaListResponse {
pub data: Vec<WhatsAppBusinessAccount>,
#[serde(default)]
pub paging: Option<Paging>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum QualityRating {
Green,
Yellow,
Red,
#[serde(rename = "NA")]
Na,
}
impl std::fmt::Display for QualityRating {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
QualityRating::Green => write!(f, "GREEN"),
QualityRating::Yellow => write!(f, "YELLOW"),
QualityRating::Red => write!(f, "RED"),
QualityRating::Na => write!(f, "NA"),
}
}
}