1use std::sync::Arc;
2
3pub mod admin;
4pub mod common;
5#[cfg(feature = "storefront")]
6pub mod storefront;
7pub mod types;
8pub mod webhooks;
9
10pub use admin as services;
11pub use common::types::{AfterRequestCallback, BeforeRequestCallback, RequestCallbacks};
12pub use common::ServiceContext;
13
14pub struct ShopifyClient {
15 pub order: admin::order::Order,
16 pub subscription: admin::subscription::Subscription,
17 pub app_installation: admin::app_installation::AppInstallation,
18 pub discount: admin::discount::Discount,
19 pub cart_transform: admin::cart_transform::CartTransform,
20 pub shopify_functions: admin::shopify_functions::ShopifyFunctions,
21 pub shop: admin::shop::Shop,
22 pub storefront_access_token: admin::storefront_access_token::StorefrontAccessToken,
23 pub bulk_operation: admin::bulk_operation::BulkOperation,
24}
25
26impl ShopifyClient {
27 pub fn new(shop_url: String, access_token: String, api_version: Option<String>) -> Self {
28 Self::new_with_callbacks(shop_url, access_token, api_version, None, None)
29 }
30
31 pub fn new_with_callbacks(
32 shop_url: String,
33 access_token: String,
34 api_version: Option<String>,
35 before_request: Option<BeforeRequestCallback>,
36 after_request: Option<AfterRequestCallback>,
37 ) -> Self {
38 let api_version = api_version.unwrap_or_else(|| "2026-01".to_string());
39 let ctx = ServiceContext::new(
40 Arc::new(shop_url),
41 Arc::new(api_version),
42 Arc::new(access_token),
43 Arc::new(RequestCallbacks::new(before_request, after_request)),
44 );
45
46 ShopifyClient {
47 order: admin::order::Order::with_ctx(ctx.clone()),
48 subscription: admin::subscription::Subscription::with_ctx(ctx.clone()),
49 app_installation: admin::app_installation::AppInstallation::with_ctx(ctx.clone()),
50 discount: admin::discount::Discount::with_ctx(ctx.clone()),
51 cart_transform: admin::cart_transform::CartTransform::with_ctx(ctx.clone()),
52 shopify_functions: admin::shopify_functions::ShopifyFunctions::with_ctx(ctx.clone()),
53 shop: admin::shop::Shop::with_ctx(ctx.clone()),
54 storefront_access_token:
55 admin::storefront_access_token::StorefrontAccessToken::with_ctx(ctx.clone()),
56 bulk_operation: admin::bulk_operation::BulkOperation::with_ctx(ctx),
57 }
58 }
59}