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}