Skip to main content

nash_protocol/protocol/cancel_order/
request.rs

1use super::super::{general_canonical_string, RequestPayloadSignature};
2use super::types::CancelOrderRequest;
3use crate::graphql;
4use crate::graphql::cancel_order;
5use crate::utils::current_time_as_i64;
6
7use super::super::signer::Signer;
8
9use graphql_client::GraphQLQuery;
10
11impl CancelOrderRequest {
12    pub fn make_variables(&self, signer: &Signer) -> cancel_order::Variables {
13        let mut cancel_args = cancel_order::Variables {
14            payload: cancel_order::CancelOrderParams {
15                market_name: self.market.clone(),
16                order_id: self.order_id.clone(),
17                timestamp: current_time_as_i64(),
18            },
19            signature: RequestPayloadSignature::empty().into(),
20        };
21        let sig_payload = cancel_all_canonical_string(&cancel_args);
22        let sig = signer.sign_canonical_string(&sig_payload);
23        cancel_args.signature = sig.into();
24        cancel_args
25    }
26
27    pub fn make_query(
28        &self,
29        signer: &Signer,
30    ) -> graphql_client::QueryBody<cancel_order::Variables> {
31        let variables = self.make_variables(signer);
32        graphql::CancelOrder::build_query(variables)
33    }
34}
35
36fn cancel_all_canonical_string(variables: &cancel_order::Variables) -> String {
37    let serialized_all = serde_json::to_string(variables).unwrap();
38    general_canonical_string(
39        "cancel_order".to_string(),
40        serde_json::from_str(&serialized_all).unwrap(),
41        vec![],
42    )
43}
44
45impl From<RequestPayloadSignature> for cancel_order::Signature {
46    fn from(sig: RequestPayloadSignature) -> Self {
47        cancel_order::Signature {
48            signed_digest: sig.signed_digest,
49            public_key: sig.public_key,
50        }
51    }
52}