use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum WebhookTopic {
#[serde(rename = "orders/create")]
OrdersCreate,
#[serde(rename = "orders/updated")]
OrdersUpdated,
#[serde(rename = "orders/paid")]
OrdersPaid,
#[serde(rename = "orders/cancelled")]
OrdersCancelled,
#[serde(rename = "orders/fulfilled")]
OrdersFulfilled,
#[serde(rename = "orders/partially_fulfilled")]
OrdersPartiallyFulfilled,
#[serde(rename = "orders/delete")]
OrdersDelete,
#[serde(rename = "products/create")]
ProductsCreate,
#[serde(rename = "products/update")]
ProductsUpdate,
#[serde(rename = "products/delete")]
ProductsDelete,
#[serde(rename = "customers/create")]
CustomersCreate,
#[serde(rename = "customers/update")]
CustomersUpdate,
#[serde(rename = "customers/delete")]
CustomersDelete,
#[serde(rename = "customers/enable")]
CustomersEnable,
#[serde(rename = "customers/disable")]
CustomersDisable,
#[serde(rename = "collections/create")]
CollectionsCreate,
#[serde(rename = "collections/update")]
CollectionsUpdate,
#[serde(rename = "collections/delete")]
CollectionsDelete,
#[serde(rename = "checkouts/create")]
CheckoutsCreate,
#[serde(rename = "checkouts/update")]
CheckoutsUpdate,
#[serde(rename = "checkouts/delete")]
CheckoutsDelete,
#[serde(rename = "carts/create")]
CartsCreate,
#[serde(rename = "carts/update")]
CartsUpdate,
#[serde(rename = "fulfillments/create")]
FulfillmentsCreate,
#[serde(rename = "fulfillments/update")]
FulfillmentsUpdate,
#[serde(rename = "refunds/create")]
RefundsCreate,
#[serde(rename = "app/uninstalled")]
AppUninstalled,
#[serde(rename = "shop/update")]
ShopUpdate,
#[serde(rename = "themes/create")]
ThemesCreate,
#[serde(rename = "themes/update")]
ThemesUpdate,
#[serde(rename = "themes/publish")]
ThemesPublish,
#[serde(rename = "themes/delete")]
ThemesDelete,
#[serde(rename = "inventory_levels/update")]
InventoryLevelsUpdate,
#[serde(rename = "inventory_levels/connect")]
InventoryLevelsConnect,
#[serde(rename = "inventory_levels/disconnect")]
InventoryLevelsDisconnect,
#[serde(rename = "inventory_items/create")]
InventoryItemsCreate,
#[serde(rename = "inventory_items/update")]
InventoryItemsUpdate,
#[serde(rename = "inventory_items/delete")]
InventoryItemsDelete,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
#[serde(rename_all = "lowercase")]
pub enum WebhookFormat {
#[default]
Json,
Xml,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_webhook_topic_serialization() {
let topic = WebhookTopic::OrdersCreate;
let json = serde_json::to_string(&topic).unwrap();
assert_eq!(json, "\"orders/create\"");
let topic = WebhookTopic::ProductsUpdate;
let json = serde_json::to_string(&topic).unwrap();
assert_eq!(json, "\"products/update\"");
let topic = WebhookTopic::AppUninstalled;
let json = serde_json::to_string(&topic).unwrap();
assert_eq!(json, "\"app/uninstalled\"");
}
#[test]
fn test_webhook_topic_deserialization() {
let topic: WebhookTopic = serde_json::from_str("\"orders/create\"").unwrap();
assert_eq!(topic, WebhookTopic::OrdersCreate);
let topic: WebhookTopic = serde_json::from_str("\"customers/delete\"").unwrap();
assert_eq!(topic, WebhookTopic::CustomersDelete);
let topic: WebhookTopic = serde_json::from_str("\"app/uninstalled\"").unwrap();
assert_eq!(topic, WebhookTopic::AppUninstalled);
}
#[test]
fn test_webhook_format_serialization() {
let format = WebhookFormat::Json;
let json = serde_json::to_string(&format).unwrap();
assert_eq!(json, "\"json\"");
let format = WebhookFormat::Xml;
let json = serde_json::to_string(&format).unwrap();
assert_eq!(json, "\"xml\"");
}
#[test]
fn test_webhook_format_deserialization() {
let format: WebhookFormat = serde_json::from_str("\"json\"").unwrap();
assert_eq!(format, WebhookFormat::Json);
let format: WebhookFormat = serde_json::from_str("\"xml\"").unwrap();
assert_eq!(format, WebhookFormat::Xml);
}
#[test]
fn test_webhook_format_default() {
let format = WebhookFormat::default();
assert_eq!(format, WebhookFormat::Json);
}
}