I wanted to change my Shopify topic matching logic, and needed to extract all the topics from my original code so I could write it as a Rust match statement. ChatGPT was able to extract the different topics and their handler methods and, step by step, convert them into the inside of a Rust match statement. This was enough

Me

Extract the different webhook topics and their handler methods from the following code block:

let order_paid = warp::header::exact_ignore_case("X-Shopify-Topic", "orders/paid")
   .and(warp::body::json::<ShopifyOrder>())
    .and(with_request_context(ctx.clone()))
    .then(handle_shopify_order_paid)
    .boxed();
 
let contract_create = warp::header::exact_ignore_case("X-Shopify-Topic", "subscription_contracts/create")
    .and(warp::body::json::<ShopifySubscriptionContract>())
    .and(with_request_context(ctx.clone()))
    .then(handled_shopify_subscription_contracts)
    .boxed();
 
let contract_update = warp::header::exact_ignore_case("X-Shopify-Topic", "subscription_contracts/update")
    .and(warp::body::json::<ShopifySubscriptionContract>())
    .and(with_request_context(ctx.clone()))
    .then(handled_shopify_subscription_contracts)
    .boxed();
 
let contract_success = warp::header::exact_ignore_case("X-Shopify-Topic", "subscription_billing_attempts/success")
    .and(warp::body::json::<ShopifyBillingAttempt>())
    .and(with_request_context(ctx.clone()))
    .then(handle_shopify_billing_attempt_success)
    .boxed();
 
let contract_failure = warp::header::exact_ignore_case("X-Shopify-Topic", "subscription_billing_attempts/failure")
    .and(warp::body::json::<ShopifyBillingAttempt>())
    .and(with_request_context(ctx.clone()))
    .then(handle_shopify_billing_attempt_failure)
    .boxed();
 
let contract_challenged = warp::header::exact_ignore_case("X-Shopify-Topic", "subscription_contracts/challenged")
    .and(warp::body::json::<ShopifyBillingAttempt>())
    .and(with_request_context(ctx))
    .then(handle_shopify_billing_attempt_challenged)
    .boxed();

ChatGPT

The different webhook topics and their handler methods in the given code block are:

  • orders/paid -> handle_shopify_order_paid
  • subscription_contracts/create -> handled_shopify_subscription_contracts
  • subscription_contracts/update -> handled_shopify_subscription_contracts
  • subscription_billing_attempts/success -> handle_shopify_billing_attempt_success
  • subscription_billing_attempts/failure -> handle_shopify_billing_attempt_failure
  • subscription_contracts/challenged -> handle_shopify_billing_attempt_challenged

Me

Now convert the topics to a CamelCase format without the slash

ChatGPT

The topics in CamelCase format without the slash are:

  • ordersPaid -> handle_shopify_order_paid
  • subscriptionContractsCreate -> handled_shopify_subscription_contracts
  • subscriptionContractsUpdate -> handled_shopify_subscription_contracts
  • subscriptionBillingAttemptsSuccess -> handle_shopify_billing_attempt_success
  • subscriptionBillingAttemptsFailure -> handle_shopify_billing_attempt_failure
  • subscriptionContractsChallenged -> handle_shopify_billing_attempt_challenged

Me

Use => instead of ->

ChatGPT

The topics in CamelCase format without the slash are:

  • ordersPaid => handle_shopify_order_paid
  • subscriptionContractsCreate => handled_shopify_subscription_contracts
  • subscriptionContractsUpdate => handled_shopify_subscription_contracts
  • subscriptionBillingAttemptsSuccess => handle_shopify_billing_attempt_success
  • subscriptionBillingAttemptsFailure => handle_shopify_billing_attempt_failure
  • subscriptionContractsChallenged => handle_shopify_billing_attempt_challenged

Me

List only the topics, with their first letters capitalized

ChatGPT

The topics with their first letters capitalized are:

  • OrdersPaid
  • SubscriptionContractsCreate
  • SubscriptionContractsUpdate
  • SubscriptionBillingAttemptsSuccess
  • SubscriptionBillingAttemptsFailure
  • SubscriptionContractsChallenged

Me

Now put the original format of the topics with the slash next to these versions

ChatGPT

The original topics with their corresponding CamelCase versions are:

  • orders/paid => OrdersPaid
  • subscription_contracts/create => SubscriptionContractsCreate
  • subscription_contracts/update => SubscriptionContractsUpdate
  • subscription_billing_attempts/success => SubscriptionBillingAttemptsSuccess
  • subscription_billing_attempts/failure => SubscriptionBillingAttemptsFailure
  • subscription_contracts/challenged => SubscriptionContractsChallenged

Me

Put the original versions in double quotes

ChatGPT

The original topics with their corresponding CamelCase versions are:

  • “orders/paid” => OrdersPaid
  • “subscription_contracts/create” => SubscriptionContractsCreate
  • “subscription_contracts/update” => SubscriptionContractsUpdate
  • “subscription_billing_attempts/success” => SubscriptionBillingAttemptsSuccess
  • “subscription_billing_attempts/failure” => SubscriptionBillingAttemptsFailure
  • “subscription_contracts/challenged” => SubscriptionContractsChallenged

An additional minor refactor:

Me

Convert these values: “OPTIONS”, “GET”, “POST”, “PATCH”, “DELETE” to remove the quotes and prefix each with Method::

ChatGPT

To convert the given values and remove the quotes, you can use the following code:

`Method::OPTIONS, Method::GET, Method::POST, Method::PATCH, Method::DELETE`

This code will convert the values to the correct format and prefix each with Method::.