Skip to content

Commit 64bdf1a

Browse files
committed
Format
1 parent 8ed327b commit 64bdf1a

6 files changed

+71
-93
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
use shopify_function::prelude::*;
2+
use shopify_function::Result;
3+
4+
#[shopify_function_target(
5+
query_path = "src/cart_delivery_options_discounts_generate_run.graphql",
6+
schema_path = "schema.graphql"
7+
)]
8+
fn cart_delivery_options_discounts_generate_run(
9+
input: input::ResponseData,
10+
) -> Result<output::CartDeliveryOptionsDiscountsGenerateRunResult> {
11+
let has_shipping_discount_class = input
12+
.discount
13+
.discount_classes
14+
.contains(&input::DiscountClass::SHIPPING);
15+
if !has_shipping_discount_class {
16+
return Ok(output::CartDeliveryOptionsDiscountsGenerateRunResult { operations: vec![] });
17+
}
18+
19+
let first_delivery_group = input
20+
.cart
21+
.delivery_groups
22+
.first()
23+
.ok_or("No delivery groups found")?;
24+
25+
Ok(output::CartDeliveryOptionsDiscountsGenerateRunResult {
26+
operations: vec![output::DeliveryOperation::DeliveryDiscountsAdd(
27+
output::DeliveryDiscountsAddOperation {
28+
selection_strategy: output::DeliveryDiscountSelectionStrategy::ALL,
29+
candidates: vec![output::DeliveryDiscountCandidate {
30+
targets: vec![output::DeliveryDiscountCandidateTarget::DeliveryGroup(
31+
output::DeliveryGroupTarget {
32+
id: first_delivery_group.id.clone(),
33+
},
34+
)],
35+
value: output::DeliveryDiscountCandidateValue::Percentage(output::Percentage {
36+
value: Decimal(100.0),
37+
}),
38+
message: Some("FREE DELIVERY".to_string()),
39+
associated_discount_code: None,
40+
}],
41+
},
42+
)],
43+
})
44+
}

discounts/rust/discount/default/src/cart_delivery_options_generate_run.rs

-46
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,15 +1 @@
1-
query Input {
2-
cart {
3-
lines {
4-
id
5-
cost {
6-
subtotalAmount {
7-
amount
8-
}
9-
}
10-
}
11-
}
12-
discount {
13-
discountClasses
14-
}
15-
}
1+
query Input { cart { lines { id cost { subtotalAmount { amount } } } } discount { discountClasses } }

discounts/rust/discount/default/src/cart_lines_discounts_generate_run.rs

+24-30
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use shopify_function::Result;
66
schema_path = "schema.graphql"
77
)]
88
fn cart_lines_discounts_generate_run(
9-
input: cart_lines_discounts_generate_run::input::ResponseData,
10-
) -> Result<cart_lines_discounts_generate_run::output::CartLinesDiscountsGenerateRunResult> {
9+
input: input::ResponseData,
10+
) -> Result<output::CartLinesDiscountsGenerateRunResult> {
1111
let max_cart_line = input
1212
.cart
1313
.lines
@@ -24,35 +24,31 @@ fn cart_lines_discounts_generate_run(
2424
let has_order_discount_class = input
2525
.discount
2626
.discount_classes
27-
.contains(&cart_lines_discounts_generate_run::input::DiscountClass::ORDER);
27+
.contains(&input::DiscountClass::ORDER);
2828
let has_product_discount_class = input
2929
.discount
3030
.discount_classes
31-
.contains(&cart_lines_discounts_generate_run::input::DiscountClass::PRODUCT);
31+
.contains(&input::DiscountClass::PRODUCT);
3232

3333
if !has_order_discount_class && !has_product_discount_class {
34-
return Ok(
35-
cart_lines_discounts_generate_run::output::CartLinesDiscountsGenerateRunResult {
36-
operations: vec![],
37-
},
38-
);
34+
return Ok(output::CartLinesDiscountsGenerateRunResult { operations: vec![] });
3935
}
4036

4137
let mut operations = vec![];
4238

4339
// Check if the discount has the ORDER class
4440
if has_order_discount_class {
45-
operations.push(cart_lines_discounts_generate_run::output::CartOperation::OrderDiscountsAdd(
46-
cart_lines_discounts_generate_run::output::OrderDiscountsAddOperation {
47-
selection_strategy: cart_lines_discounts_generate_run::output::OrderDiscountSelectionStrategy::FIRST,
48-
candidates: vec![cart_lines_discounts_generate_run::output::OrderDiscountCandidate {
49-
targets: vec![cart_lines_discounts_generate_run::output::OrderDiscountCandidateTarget::OrderSubtotal(
50-
cart_lines_discounts_generate_run::output::OrderSubtotalTarget {
41+
operations.push(output::CartOperation::OrderDiscountsAdd(
42+
output::OrderDiscountsAddOperation {
43+
selection_strategy: output::OrderDiscountSelectionStrategy::FIRST,
44+
candidates: vec![output::OrderDiscountCandidate {
45+
targets: vec![output::OrderDiscountCandidateTarget::OrderSubtotal(
46+
output::OrderSubtotalTarget {
5147
excluded_cart_line_ids: vec![],
5248
},
5349
)],
5450
message: Some("10% OFF ORDER".to_string()),
55-
value: cart_lines_discounts_generate_run::output::OrderDiscountCandidateValue::Percentage(cart_lines_discounts_generate_run::output::Percentage {
51+
value: output::OrderDiscountCandidateValue::Percentage(output::Percentage {
5652
value: Decimal(10.0),
5753
}),
5854
conditions: None,
@@ -64,16 +60,18 @@ fn cart_lines_discounts_generate_run(
6460

6561
// Check if the discount has the PRODUCT class
6662
if has_product_discount_class {
67-
operations.push(cart_lines_discounts_generate_run::output::CartOperation::ProductDiscountsAdd(
68-
cart_lines_discounts_generate_run::output::ProductDiscountsAddOperation {
69-
selection_strategy: cart_lines_discounts_generate_run::output::ProductDiscountSelectionStrategy::FIRST,
70-
candidates: vec![cart_lines_discounts_generate_run::output::ProductDiscountCandidate {
71-
targets: vec![cart_lines_discounts_generate_run::output::ProductDiscountCandidateTarget::CartLine(cart_lines_discounts_generate_run::output::CartLineTarget {
72-
id: max_cart_line.id.clone(),
73-
quantity: None,
74-
})],
63+
operations.push(output::CartOperation::ProductDiscountsAdd(
64+
output::ProductDiscountsAddOperation {
65+
selection_strategy: output::ProductDiscountSelectionStrategy::FIRST,
66+
candidates: vec![output::ProductDiscountCandidate {
67+
targets: vec![output::ProductDiscountCandidateTarget::CartLine(
68+
output::CartLineTarget {
69+
id: max_cart_line.id.clone(),
70+
quantity: None,
71+
},
72+
)],
7573
message: Some("20% OFF PRODUCT".to_string()),
76-
value: cart_lines_discounts_generate_run::output::ProductDiscountCandidateValue::Percentage(cart_lines_discounts_generate_run::output::Percentage {
74+
value: output::ProductDiscountCandidateValue::Percentage(output::Percentage {
7775
value: Decimal(20.0),
7876
}),
7977
associated_discount_code: None,
@@ -82,9 +80,5 @@ fn cart_lines_discounts_generate_run(
8280
));
8381
}
8482

85-
Ok(
86-
cart_lines_discounts_generate_run::output::CartLinesDiscountsGenerateRunResult {
87-
operations,
88-
},
89-
)
83+
Ok(output::CartLinesDiscountsGenerateRunResult { operations })
9084
}

discounts/rust/discount/default/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use std::process;
2-
pub mod generate_cart_run;
3-
pub mod generate_delivery_run;
2+
pub mod cart_delivery_options_discounts_generate_run;
3+
pub mod cart_lines_discounts_generate_run;
44

55
fn main() {
66
eprintln!("Please invoke a named export.");

0 commit comments

Comments
 (0)