12 releases (6 breaking)

0.7.0 Mar 8, 2024
0.5.0 Nov 30, 2023
0.2.5 May 30, 2023
0.2.4 Jan 12, 2023
0.2.3 Nov 8, 2022

#183 in Rust patterns

Download history 654/week @ 2023-12-22 647/week @ 2023-12-29 911/week @ 2024-01-05 888/week @ 2024-01-12 929/week @ 2024-01-19 842/week @ 2024-01-26 852/week @ 2024-02-02 873/week @ 2024-02-09 886/week @ 2024-02-16 742/week @ 2024-02-23 960/week @ 2024-03-01 1059/week @ 2024-03-08 968/week @ 2024-03-15 859/week @ 2024-03-22 459/week @ 2024-03-29 228/week @ 2024-04-05

2,643 downloads per month

MIT license

10KB
94 lines

Shopify Functions Rust Crate

A crate to help developers build Shopify Functions.

Dependencies

  • Make sure you have graphql_client in your dependencies

    cargo add graphql_client@0.13.0
    

Usage

  • The generate_types macro allows you to generate structs based on your input query. It will also generate output/response types for the current Function API, based on the provided schema.
    • It will automatically generate an .output.graphql file for code generation purposes. This file can be added to your .gitignore.
  • The shopify_function attribute macro marks the following function as the entry point for a Shopify Function. It manages the Functions STDIN input parsing and STDOUT output serialization for you.
  • The run_function_with_input function is a utility for unit testing which allows you to quickly add new tests based on a given JSON input string.

See the example for details on usage, or use the following guide to convert an existing Rust-based function.

Updating an existing function to use shopify_function

  1. cargo add shopify_function

  2. cargo add graphql_client@0.13.0

  3. Delete src/api.rs.

  4. In main.rs:

    1. Add imports for shopify_function.

      use shopify_function::prelude::*;
      use shopify_function::Result;
      
    2. Remove references to mod api.

    3. Add type generation, right under your imports.

      generate_types!(query_path = "./input.graphql", schema_path = "./schema.graphql");
      
    4. Remove the main function entirely.

    5. Attribute the function function with the shopify_function macro, and change its return type.

      #[shopify_function]
      fn function(input: input::ResponseData) -> Result<output::FunctionResult> {
      
    6. Update the types and fields utilized in the function to the new, auto-generated structs. For example:

      Old New
      input::Input input::ResponseData
      input::Metafield input::InputDiscountNodeMetafield
      input::DiscountNode input::InputDiscountNode
      FunctionResult output::FunctionResult
      DiscountApplicationStrategy::First output::DiscountApplicationStrategy::FIRST
  5. Add .output.graphql to your .gitignore.

Viewing the generated types

To preview the types generated by the generate_types macro, use the cargo doc command.

cargo doc --open

You can also use the cargo-expand crate to view the generated source, or use the rust-analyzer VSCode extension to get IntelliSense for Rust and the generated types.


License Apache-2.0

Dependencies

~2.5MB
~56K SLoC