coil_runtime/builder/
customer_plugins.rs1use coil_customer_sdk::{
2 BackendError, CheckoutHooks, CmsHooks, VerifiedWebhookAssetHooks, VerifiedWebhookHooks,
3};
4use std::fmt;
5use std::sync::Arc;
6
7pub use coil_customer_sdk::{CustomerBackendPlugin, CustomerHookRegistry, RegisteredHookKind};
8
9#[derive(Clone, Default)]
10pub(crate) struct CustomerHookSet {
11 pub(crate) checkout: Vec<Arc<dyn CheckoutHooks>>,
12 pub(crate) cms: Vec<Arc<dyn CmsHooks>>,
13 pub(crate) verified_webhooks: Vec<Arc<dyn VerifiedWebhookHooks>>,
14 pub(crate) verified_webhook_assets: Vec<Arc<dyn VerifiedWebhookAssetHooks>>,
15}
16
17impl fmt::Debug for CustomerHookSet {
18 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19 f.debug_struct("CustomerHookSet")
20 .field("checkout", &self.checkout.len())
21 .field("cms", &self.cms.len())
22 .field("verified_webhooks", &self.verified_webhooks.len())
23 .field(
24 "verified_webhook_assets",
25 &self.verified_webhook_assets.len(),
26 )
27 .finish()
28 }
29}
30
31#[derive(Debug, Clone, PartialEq, Eq)]
32pub struct LinkedCustomerPluginSummary {
33 pub plugin_id: String,
34 pub display_name: String,
35 pub version: String,
36 pub registered_hooks: Vec<RegisteredHookKind>,
37}
38
39#[derive(Default)]
40pub(crate) struct RuntimeCustomerHookRegistry {
41 hooks: CustomerHookSet,
42 registered_hooks: Vec<RegisteredHookKind>,
43}
44
45impl RuntimeCustomerHookRegistry {
46 pub(crate) fn into_parts(self) -> (CustomerHookSet, Vec<RegisteredHookKind>) {
47 (self.hooks, self.registered_hooks)
48 }
49}
50
51impl CustomerHookRegistry for RuntimeCustomerHookRegistry {
52 fn register_checkout_hooks(
53 &mut self,
54 hooks: Arc<dyn CheckoutHooks>,
55 ) -> Result<(), BackendError> {
56 self.hooks.checkout.push(hooks);
57 self.registered_hooks.push(RegisteredHookKind::Checkout);
58 Ok(())
59 }
60
61 fn register_cms_hooks(&mut self, hooks: Arc<dyn CmsHooks>) -> Result<(), BackendError> {
62 self.hooks.cms.push(hooks);
63 self.registered_hooks
64 .push(RegisteredHookKind::CmsPagePublish);
65 Ok(())
66 }
67
68 fn register_verified_webhook_hooks(
69 &mut self,
70 hooks: Arc<dyn VerifiedWebhookHooks>,
71 ) -> Result<(), BackendError> {
72 self.hooks.verified_webhooks.push(hooks);
73 self.registered_hooks
74 .push(RegisteredHookKind::VerifiedWebhook);
75 Ok(())
76 }
77
78 fn register_verified_webhook_asset_hooks(
79 &mut self,
80 hooks: Arc<dyn VerifiedWebhookAssetHooks>,
81 ) -> Result<(), BackendError> {
82 self.hooks.verified_webhook_assets.push(hooks);
83 self.registered_hooks
84 .push(RegisteredHookKind::VerifiedWebhookAssets);
85 Ok(())
86 }
87}