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}