shopify_client/
lib.rs

1use std::sync::Arc;
2
3pub mod common;
4pub mod services;
5pub mod types;
6pub mod webhooks;
7
8pub use common::types::{AfterRequestCallback, BeforeRequestCallback, RequestCallbacks};
9
10pub struct ShopifyClient {
11    pub order: services::order::Order,
12    pub subscription: services::subscription::Subscription,
13    pub app_installation: services::app_installation::AppInstallation,
14    pub discount: services::discount::Discount,
15    pub cart_transform: services::cart_transform::CartTransform,
16    pub shopify_functions: services::shopify_functions::ShopifyFunctions,
17}
18
19impl ShopifyClient {
20    pub fn new(shop_url: String, access_token: String, api_version: Option<String>) -> Self {
21        Self::new_with_callbacks(shop_url, access_token, api_version, None, None)
22    }
23
24    pub fn new_with_callbacks(
25        shop_url: String,
26        access_token: String,
27        api_version: Option<String>,
28        before_request: Option<BeforeRequestCallback>,
29        after_request: Option<AfterRequestCallback>,
30    ) -> Self {
31        let api_version = api_version.unwrap_or("2026-01".to_string());
32        let shop_url_arc = Arc::new(shop_url);
33        let api_version_arc = Arc::new(api_version);
34        let access_token_arc = Arc::new(access_token);
35        let callbacks_arc = Arc::new(RequestCallbacks::new(before_request, after_request));
36
37        ShopifyClient {
38            order: services::order::Order::new(
39                Arc::clone(&shop_url_arc),
40                Arc::clone(&api_version_arc),
41                Arc::clone(&access_token_arc),
42                Arc::clone(&callbacks_arc),
43            ),
44            subscription: services::subscription::Subscription::new(
45                Arc::clone(&shop_url_arc),
46                Arc::clone(&api_version_arc),
47                Arc::clone(&access_token_arc),
48                Arc::clone(&callbacks_arc),
49            ),
50            app_installation: services::app_installation::AppInstallation::new(
51                Arc::clone(&shop_url_arc),
52                Arc::clone(&api_version_arc),
53                Arc::clone(&access_token_arc),
54                Arc::clone(&callbacks_arc),
55            ),
56            discount: services::discount::Discount::new(
57                Arc::clone(&shop_url_arc),
58                Arc::clone(&api_version_arc),
59                Arc::clone(&access_token_arc),
60                Arc::clone(&callbacks_arc),
61            ),
62            cart_transform: services::cart_transform::CartTransform::new(
63                Arc::clone(&shop_url_arc),
64                Arc::clone(&api_version_arc),
65                Arc::clone(&access_token_arc),
66                Arc::clone(&callbacks_arc),
67            ),
68            shopify_functions: services::shopify_functions::ShopifyFunctions::new(
69                Arc::clone(&shop_url_arc),
70                Arc::clone(&api_version_arc),
71                Arc::clone(&access_token_arc),
72                Arc::clone(&callbacks_arc),
73            ),
74        }
75    }
76}