cargo install cargo-wasi
The following command will create an order discount Function at extensions/order-discount-rust, using our Rust boilerplate.
npm run generate extension -- --type order_discounts --template rust --name order-discount-rust
Replace the contents of extensions/order-discount-rust/input.graphql with the following from GitHub:
You need to inform Shopify about the UI paths for configuring your function. These paths are already provided by the app template you used.
In shopify.function.extension.toml, replace the [ui.paths] section with the following:
[ui.paths]
create = "/discount/:functionId/new"
details = "/discount/:functionId/:id"
You also need to inform Shopify about where to find GraphQL variable values that will be used when executing your input query.
Add the following to shopify.function.extension.toml:
[input.variables]
namespace = "$app:polyglot-functions"
key = "function-configuration"
In extensions/order-discount-rust/src/main.rs, implement the following function logic, outputting appropriate JSON for an order discount function result.
IF customer has VIP metafield with a value of 'true'
AND products in their cart with tag X have a total of more than $Y
THEN discount the order by Z%
Hint: You can find a completed example on GitHub:
cd extensions/order-discount-rust
shopify.function.extension.toml:npm run function:build
FunctionResult GraphQL type:npm run function:validate
npm run function:preview
Use the following steps, selecting the order-discount-rust discount type, and using RUST as your discount code.
cd ../..
npm run deploy
npm run dev executing in a terminal window.
The workshop app includes a test script which will execute all the function wasm modules you have created so far, and print a comparison of their instruction count and binary size.
cd ../..
npm run function:test-all
You're a Rust champion. Onto another language?