Skip to content

Commit 307b0ee

Browse files
committed
Support extern_enums in generate_output_struct
1 parent 21de3ec commit 307b0ee

File tree

1 file changed

+16
-5
lines changed
  • shopify_function_macro/src

1 file changed

+16
-5
lines changed

shopify_function_macro/src/lib.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,8 @@ pub fn shopify_function_target(
339339
output_result_type,
340340
&target_handle_string.to_case(Case::Camel)
341341
);
342-
let output_struct = generate_output_struct(&output_query, schema_path.as_str());
342+
let output_struct =
343+
generate_output_struct(&output_query, schema_path.as_str(), extern_enums.as_deref());
343344

344345
if let Err(error) = extract_shopify_function_return_type(&ast) {
345346
return error.to_compile_error().into();
@@ -417,7 +418,7 @@ pub fn generate_types(attr: proc_macro::TokenStream) -> proc_macro::TokenStream
417418
);
418419
let output_query =
419420
"mutation Output($result: FunctionResult!) {\n handleResult(result: $result)\n}\n";
420-
let output_struct = generate_output_struct(output_query, &schema_path);
421+
let output_struct = generate_output_struct(output_query, &schema_path, extern_enums.as_deref());
421422

422423
quote! {
423424
#input_struct
@@ -451,18 +452,28 @@ fn generate_input_struct(
451452
}
452453
}
453454

454-
fn graphql_codegen_options(operation_name: String) -> GraphQLClientCodegenOptions {
455+
fn graphql_codegen_options(
456+
operation_name: String,
457+
extern_enums: Option<&[String]>,
458+
) -> GraphQLClientCodegenOptions {
455459
let mut options = GraphQLClientCodegenOptions::new(CodegenMode::Derive);
456460
options.set_operation_name(operation_name);
457461
options.set_response_derives("Clone,Debug,PartialEq,Deserialize,Serialize".to_string());
458462
options.set_variables_derives("Clone,Debug,PartialEq,Deserialize".to_string());
459463
options.set_skip_serializing_none(true);
464+
if let Some(extern_enums) = extern_enums {
465+
options.set_extern_enums(extern_enums.to_vec());
466+
}
460467

461468
options
462469
}
463470

464-
fn generate_output_struct(query: &str, schema_path: &str) -> proc_macro2::TokenStream {
465-
let options = graphql_codegen_options("Output".to_string());
471+
fn generate_output_struct(
472+
query: &str,
473+
schema_path: &str,
474+
extern_enums: Option<&[String]>,
475+
) -> proc_macro2::TokenStream {
476+
let options = graphql_codegen_options("Output".to_string(), extern_enums);
466477
let cargo_manifest_dir =
467478
std::env::var("CARGO_MANIFEST_DIR").expect("Error reading CARGO_MANIFEST_DIR from env");
468479
let schema_path = Path::new(&cargo_manifest_dir).join(schema_path);

0 commit comments

Comments
 (0)