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