Skip to main content

shopify_client/
lib.rs

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}