Skip to main content

shopify_client/
lib.rs

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