shopify_client/admin/access_scope/
remote.rs1use reqwest::header::HeaderMap;
2
3use crate::{
4 admin::generated::types::access_scope::AccessScopesResp,
5 common::{http::http_client, types::APIError, utils::parse_response_from_text, ServiceContext},
6};
7
8pub async fn list_access_scopes(ctx: &ServiceContext) -> Result<AccessScopesResp, APIError> {
9 let endpoint = format!(
10 "{}/admin/oauth/access_scopes.json",
11 ctx.shop_url.trim_end_matches('/')
12 );
13
14 let callback_headers = HeaderMap::new();
15
16 ctx.callbacks
17 .call_before(&endpoint, None, &callback_headers);
18
19 let response = http_client()
20 .get(&endpoint)
21 .header("X-Shopify-Access-Token", &*ctx.access_token)
22 .header("Content-Type", "application/json")
23 .send()
24 .await;
25
26 match response {
27 Ok(resp) => {
28 let response_headers = resp.headers().clone();
29 let response_text = match resp.text().await {
30 Ok(text) => text,
31 Err(e) => {
32 let error_msg = format!("<failed to read response body: {}>", e);
33 ctx.callbacks
34 .call_after(&endpoint, &error_msg, &response_headers);
35 return Err(APIError::FailedToParse);
36 }
37 };
38
39 ctx.callbacks
40 .call_after(&endpoint, &response_text, &response_headers);
41
42 parse_response_from_text::<AccessScopesResp>(&response_text)
43 }
44 Err(e) => {
45 let error_msg = format!("<network error: {}>", e);
46 ctx.callbacks
47 .call_after(&endpoint, &error_msg, &HeaderMap::new());
48 Err(APIError::NetworkError)
49 }
50 }
51}