Skip to main content

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    pub shop: services::shop::Shop,
18    pub storefront_access_token: services::storefront_access_token::StorefrontAccessToken,
19    pub bulk_operation: services::bulk_operation::BulkOperation,
20}
21
22impl ShopifyClient {
23    pub fn new(shop_url: String, access_token: String, api_version: Option<String>) -> Self {
24        Self::new_with_callbacks(shop_url, access_token, api_version, None, None)
25    }
26
27    pub fn new_with_callbacks(
28        shop_url: String,
29        access_token: String,
30        api_version: Option<String>,
31        before_request: Option<BeforeRequestCallback>,
32        after_request: Option<AfterRequestCallback>,
33    ) -> Self {
34        let api_version = api_version.unwrap_or("2026-01".to_string());
35        let shop_url_arc = Arc::new(shop_url);
36        let api_version_arc = Arc::new(api_version);
37        let access_token_arc = Arc::new(access_token);
38        let callbacks_arc = Arc::new(RequestCallbacks::new(before_request, after_request));
39
40        ShopifyClient {
41            order: services::order::Order::new(
42                Arc::clone(&shop_url_arc),
43                Arc::clone(&api_version_arc),
44                Arc::clone(&access_token_arc),
45                Arc::clone(&callbacks_arc),
46            ),
47            subscription: services::subscription::Subscription::new(
48                Arc::clone(&shop_url_arc),
49                Arc::clone(&api_version_arc),
50                Arc::clone(&access_token_arc),
51                Arc::clone(&callbacks_arc),
52            ),
53            app_installation: services::app_installation::AppInstallation::new(
54                Arc::clone(&shop_url_arc),
55                Arc::clone(&api_version_arc),
56                Arc::clone(&access_token_arc),
57                Arc::clone(&callbacks_arc),
58            ),
59            discount: services::discount::Discount::new(
60                Arc::clone(&shop_url_arc),
61                Arc::clone(&api_version_arc),
62                Arc::clone(&access_token_arc),
63                Arc::clone(&callbacks_arc),
64            ),
65            cart_transform: services::cart_transform::CartTransform::new(
66                Arc::clone(&shop_url_arc),
67                Arc::clone(&api_version_arc),
68                Arc::clone(&access_token_arc),
69                Arc::clone(&callbacks_arc),
70            ),
71            shopify_functions: services::shopify_functions::ShopifyFunctions::new(
72                Arc::clone(&shop_url_arc),
73                Arc::clone(&api_version_arc),
74                Arc::clone(&access_token_arc),
75                Arc::clone(&callbacks_arc),
76            ),
77            shop: services::shop::Shop::new(
78                Arc::clone(&shop_url_arc),
79                Arc::clone(&api_version_arc),
80                Arc::clone(&access_token_arc),
81                Arc::clone(&callbacks_arc),
82            ),
83            storefront_access_token: services::storefront_access_token::StorefrontAccessToken::new(
84                Arc::clone(&shop_url_arc),
85                Arc::clone(&api_version_arc),
86                Arc::clone(&access_token_arc),
87                Arc::clone(&callbacks_arc),
88            ),
89            bulk_operation: services::bulk_operation::BulkOperation::new(
90                Arc::clone(&shop_url_arc),
91                Arc::clone(&api_version_arc),
92                Arc::clone(&access_token_arc),
93                Arc::clone(&callbacks_arc),
94            ),
95        }
96    }
97}