use crate::common::deserialize_ms;
use crate::error::Error;
use serde::{Deserialize, Serialize};
use std::fmt;
use std::time::SystemTime;
pub const SIGNATURE_HEADER: &str = "X-Sift-Science-Signature";
#[derive(Debug, Serialize)]
pub struct WebhookRequest {
pub payload_type: PayloadType,
pub status: Status,
pub url: String,
pub enabled_events: Vec<EnabledEvent>,
pub name: Option<String>,
pub description: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Webhook {
pub id: u64,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub description: Option<String>,
pub payload_type: PayloadType,
pub status: Status,
pub url: String,
pub enabled_events: Vec<EnabledEvent>,
#[serde(skip_serializing, deserialize_with = "deserialize_ms")]
pub created: SystemTime,
#[serde(skip_serializing, deserialize_with = "deserialize_ms")]
pub last_updated: SystemTime,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum PayloadType {
#[serde(rename = "ORDER_V1_0")]
OrderV10,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum Status {
Draft,
Active,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum EnabledEvent {
#[serde(rename = "$create_order")]
CreateOrder,
#[serde(rename = "$update_order")]
UpdateOrder,
#[serde(rename = "$order_status")]
OrderStatus,
#[serde(rename = "$transaction")]
Transaction,
#[serde(rename = "$chargeback")]
Chargeback,
}
#[derive(Deserialize)]
#[serde(untagged)]
pub(crate) enum WebhooksResponse {
Error(Error),
Webhooks { data: Vec<Webhook> },
}
#[derive(Deserialize)]
#[serde(untagged)]
pub(crate) enum WebhookResponse {
Error(Error),
Webhook(Webhook),
}
#[derive(Copy, Clone, Debug)]
pub enum ApiVersion {
V3,
}
impl fmt::Display for ApiVersion {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ApiVersion::V3 => write!(f, "v3"),
}
}
}