nado-sdk 0.3.7

Official Rust SDK for the Nado Protocol API
Documentation
use crate::core::query::NadoQuery;
use crate::utils::nonce::default_recv_time;
use crate::{build_and_call, nado_builder};
use ethers::types::Bytes;
use eyre::Result;

use crate::eip712_structs;
use crate::trigger;
use crate::trigger::ListTriggerOrdersResponse;
use crate::utils::wrapped_option_utils::{wrapped_option_bytes32, wrapped_option_vec_bytes32};

nado_builder!(
    ListTriggerOrdersBuilder ,
    NadoQuery,
    recv_time: u64,
    product_ids: Vec<u32>,
    trigger_types: Vec<trigger::TriggerType>,
    status_types: Vec<trigger::TriggerOrderStatusType>,
    linked_sender: [u8; 32],
    pending: bool,
    digests: Vec<[u8; 32]>,
    max_digest: [u8; 32],
    max_update_time: u64,
    limit: u32,
    reduce_only: bool;

    build_and_call!(self, query, list_trigger_orders => ListTriggerOrdersResponse);

    pub fn build(&self) -> Result<trigger::Query> {
        let tx = self.list_trigger_orders()?;
        let signature = Bytes::from(self.nado.endpoint_signature(&tx)?);
        let mut status_types = self.status_types.clone();
        if self.pending.unwrap_or(false) {
            assert!(status_types.is_none(), "should not specify status_types when pending is true");
            status_types = Some(trigger::TriggerOrderStatusType::pending());
        }

        Ok(trigger::Query::ListTriggerOrders {
            tx,
            signature,
            product_ids: self.product_ids.clone(),
            trigger_types: self.trigger_types.clone(),
            status_types,
            digests: wrapped_option_vec_bytes32(self.digests.clone()),
            max_update_time: self.max_update_time,
            max_digest: wrapped_option_bytes32(self.max_digest),
            limit: self.limit,
            reduce_only: self.reduce_only,
        })
    }


    fn list_trigger_orders(&self) -> Result<eip712_structs::ListTriggerOrders> {
        let default_sender =  self.nado.subaccount()?;
        let sender = self.linked_sender.unwrap_or(default_sender);
        let recv_time = self.recv_time.unwrap_or(default_recv_time());
        Ok(eip712_structs::ListTriggerOrders {
            sender,
            recvTime: recv_time,
        })
    }
);