use derive_builder::Builder;
use ethers_core::types::{Address, U256};
use serde::{Deserialize, Serialize};
use serde_with::{serde_as, skip_serializing_none};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Cursor {
after: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaginationObject {
cursors: Cursor,
total_count: u64,
}
#[serde_as]
#[skip_serializing_none]
#[derive(Default, Builder, Debug, Clone, Serialize, Deserialize)]
#[builder(setter(into, strip_option), build_fn(validate = "Self::validate"))]
pub struct NftFilter {
contract_address: Address,
#[builder(default)]
token_id: Option<U256>,
}
impl NftFilter {
pub fn builder() -> NftFilterBuilder {
NftFilterBuilder::default()
}
}
impl NftFilterBuilder {
fn validate(&self) -> Result<(), String> {
if self.token_id.is_some() && self.contract_address.is_none() {
return Err("cannot set token_id if the contract_address is not set".to_string());
}
Ok(())
}
}