use std::fmt::Display;
use crate::controllers::Entity;
use chrono::NaiveDateTime;
use serde::{Deserialize, Serialize};
use crate::controllers::webhooks::{WebhookCreateBuilder, WebhookUpdateBuilder};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Webhook {
pub id: i32,
pub name: String,
pub status: WebhookStatus,
pub topic: String,
pub resource: Resource,
pub event: Event,
pub hooks: Vec<String>,
pub delivery_url: String,
pub secret: Option<String>,
pub date_created: NaiveDateTime,
pub date_created_gmt: NaiveDateTime,
pub date_modified: Option<NaiveDateTime>,
pub date_modified_gmt: Option<NaiveDateTime>,
}
impl Entity for Webhook {
fn endpoint() -> String {
String::from("webhooks/")
}
fn child_endpoint(parent_id: i32) -> String {
let _ = parent_id;
String::new()
}
}
#[derive(Default)]
pub struct NoResource;
#[derive(Default)]
pub struct NoEvent;
#[derive(Default)]
pub struct NoUrl;
impl Webhook {
pub fn create() -> WebhookCreateBuilder<NoResource, NoEvent, NoUrl> {
WebhookCreateBuilder::default()
}
pub fn update() -> WebhookUpdateBuilder {
WebhookUpdateBuilder::default()
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum WebhookStatus {
Active,
Paused,
Disabled,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Resource {
Coupon,
Customer,
Order,
Product,
}
impl Display for Resource {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Resource::Coupon => write!(f, "coupon"),
Resource::Customer => write!(f, "customer"),
Resource::Order => write!(f, "order"),
Resource::Product => write!(f, "product"),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Event {
Created,
Updated,
Deleted,
Restored,
}
impl Display for Event {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Event::Created => write!(f, "created"),
Event::Updated => write!(f, "updated"),
Event::Deleted => write!(f, "deleted"),
Event::Restored => write!(f, "restored"),
}
}
}