Skip to main content

nash_protocol/protocol/cancel_orders/
request.rs

1use super::types::CancelOrdersRequest;
2use super::super::signer::Signer;
3use crate::protocol::multi_request::DynamicQueryBody;
4use std::collections::HashMap;
5
6impl CancelOrdersRequest {
7    pub fn make_query(
8        &self,
9        signer: &Signer,
10    ) -> DynamicQueryBody {
11        let mut variables = HashMap::new();
12        let mut params = String::new();
13        let mut calls = String::new();
14        for (index, variable) in self.requests.iter().enumerate() {
15            let variable = variable.make_variables(signer);
16
17            // FIXME: This is also replicated in MarketOrdersConstructor::signed_graphql_request
18            let payload = format!("payload{}", index);
19            let signature = format!("signature{}", index);
20            params = if index == 0 { params } else { format!("{}, ", params)};
21            params = format!("{}${}: CancelOrderParams!, ${}: Signature!", params, payload, signature);
22            calls = format!(r#"
23                {}
24                response{}: cancelOrder(payload: ${}, signature: ${}) {{
25                    orderId
26                }}
27                "#, calls, index, payload, signature);
28            variables.insert(payload, serde_json::to_value(variable.payload).unwrap());
29            variables.insert(signature, serde_json::to_value(variable.signature).unwrap());
30        }
31        DynamicQueryBody {
32            variables,
33            operation_name: "CancelOrder",
34            query: format!(r#"
35                mutation CancelOrder({}) {{
36                    {}
37                }}
38            "#, params, calls)
39        }
40    }
41}