Skip to main content

nash_protocol/protocol/cancel_all_orders/
request.rs

1use super::super::{general_canonical_string, RequestPayloadSignature};
2use super::types::CancelAllOrders;
3use crate::graphql;
4use crate::graphql::cancel_all_orders;
5use crate::utils::current_time_as_i64;
6
7use super::super::signer::Signer;
8
9use graphql_client::GraphQLQuery;
10
11impl CancelAllOrders {
12    pub fn make_query(
13        &self,
14        signer: &Signer,
15    ) -> graphql_client::QueryBody<cancel_all_orders::Variables> {
16        let mut cancel_args = cancel_all_orders::Variables {
17            payload: cancel_all_orders::CancelAllOrdersParams {
18                market_name: Some(self.market.clone()),
19                timestamp: current_time_as_i64(),
20            },
21            signature: RequestPayloadSignature::empty().into(),
22        };
23        let sig_payload = cancel_all_canonical_string(&cancel_args);
24        let sig = signer.sign_canonical_string(&sig_payload);
25        cancel_args.signature = sig.into();
26        graphql::CancelAllOrders::build_query(cancel_args)
27    }
28}
29
30/// Generate payload string for signing a request to cancel all orders
31fn cancel_all_canonical_string(variables: &cancel_all_orders::Variables) -> String {
32    let serialized_all = serde_json::to_string(variables).unwrap();
33    general_canonical_string(
34        "cancel_all_orders".to_string(),
35        serde_json::from_str(&serialized_all).unwrap(),
36        vec![],
37    )
38}
39
40/// Convert ugly generated `cancel_all_orders::Signature` type into common signature
41impl From<RequestPayloadSignature> for cancel_all_orders::Signature {
42    fn from(sig: RequestPayloadSignature) -> Self {
43        cancel_all_orders::Signature {
44            signed_digest: sig.signed_digest,
45            public_key: sig.public_key,
46        }
47    }
48}