shopify-client 1.5.4

Type-safe, async Rust client for the Shopify Admin and Storefront APIs
Documentation
use crate::common::ServiceContext;
use crate::{
    admin::generated::types::theme::{ListThemesResp, ThemeDuplicateResp},
    common::{http::execute_graphql, types::APIError},
};

use serde_json::json;

const THEME_FIELDS: &str = r#"
    id
    name
    role
    processing
    createdAt
    updatedAt
"#;

pub async fn list_themes(
    ctx: &ServiceContext,
    first: i64,
    roles: Option<&[&str]>,
) -> Result<ListThemesResp, APIError> {
    let query = format!(
        r#"
        query ListThemes($first: Int!, $roles: [ThemeRole!]) {{
            themes(first: $first, roles: $roles) {{
                edges {{
                    node {{{fields}}}
                }}
                pageInfo {{
                    hasNextPage
                    endCursor
                }}
            }}
        }}
    "#,
        fields = THEME_FIELDS
    );

    let variables = json!({
        "first": first,
        "roles": roles,
    });

    execute_graphql(ctx, &query, variables).await
}

pub async fn duplicate_theme(
    ctx: &ServiceContext,
    id: &str,
    name: Option<&str>,
) -> Result<ThemeDuplicateResp, APIError> {
    let query = format!(
        r#"
        mutation ThemeDuplicate($id: ID!, $name: String) {{
            themeDuplicate(id: $id, name: $name) {{
                newTheme {{{fields}}}
                userErrors {{
                    field
                    message
                }}
            }}
        }}
    "#,
        fields = THEME_FIELDS
    );

    let variables = json!({
        "id": id,
        "name": name,
    });

    execute_graphql(ctx, &query, variables).await
}