nado-sdk 0.3.7

Official Rust SDK for the Nado Protocol API
Documentation
use eyre::Result;

use crate::eip712_structs;
use crate::engine::{CancelOrdersResponse, Execute};
use crate::utils::client_error::none_error;
use crate::utils::response::match_cancel_orders_response;

use crate::core::execute::NadoExecute;
use crate::utils::nonce::order_nonce;
use crate::{build_and_call, fields_to_vars, nado_builder};

nado_builder!(
    CancellationBuilder,
    NadoExecute,
    product_ids: Vec<u32>,
    linked_sender: [u8; 32],
    digests: Vec<[u8; 32]>,
    required_unfilled_amount: i128,
    nonce: u64,
    recv_time: u64;

    build_and_call!(self, execute_trigger, cancel_trigger_orders => ());

    pub async fn execute(&self) -> Result<Option<CancelOrdersResponse>> {
        let tx = self.build()?;
        let signature = self.nado.endpoint_signature(&tx)?;
        let execute = Execute::CancelOrders {
            tx,
            signature,
            required_unfilled_amount: self.required_unfilled_amount,
            id: None,
        };
        match_cancel_orders_response(self.nado.execute(execute).await?)
    }

    pub fn build(&self) -> Result<eip712_structs::Cancellation> {
        let default_sender = self.nado.subaccount()?;
        let sender = self.linked_sender.unwrap_or(default_sender);
        let nonce = self.nonce.unwrap_or(order_nonce(self.recv_time));
        fields_to_vars!(self, (product_ids: clone), (digests: clone));

        Ok(eip712_structs::Cancellation {
            sender,
            productIds: product_ids,
            digests,
            nonce,
        })
    }
);