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