pub const GENERAL_REQUEST_LIMIT: usize = 1000;
#[expect(missing_docs)]
#[derive(Debug, thiserror::Error)]
#[error("parameter {which} exceeded limit {limit}: {size}")]
pub struct QueryLimitError {
which: &'static str,
size: usize,
limit: usize,
}
pub trait QueryParamLimiter {
const PARAM_NAME: &'static str;
const LIMIT: usize;
fn check(size: usize) -> Result<(), QueryLimitError> {
if size > Self::LIMIT {
Err(QueryLimitError {
which: Self::PARAM_NAME,
size,
limit: Self::LIMIT,
})?;
}
Ok(())
}
}
pub const MAX_RESPONSE_PAYLOAD_BYTES: usize = 4 * 1024 * 1024;
pub struct QueryParamAccountIdLimit;
impl QueryParamLimiter for QueryParamAccountIdLimit {
const PARAM_NAME: &str = "account_id";
const LIMIT: usize = GENERAL_REQUEST_LIMIT;
}
pub struct QueryParamNullifierPrefixLimit;
impl QueryParamLimiter for QueryParamNullifierPrefixLimit {
const PARAM_NAME: &str = "nullifier_prefix";
const LIMIT: usize = GENERAL_REQUEST_LIMIT;
}
pub struct QueryParamNullifierLimit;
impl QueryParamLimiter for QueryParamNullifierLimit {
const PARAM_NAME: &str = "nullifier";
const LIMIT: usize = GENERAL_REQUEST_LIMIT;
}
pub struct QueryParamNoteTagLimit;
impl QueryParamLimiter for QueryParamNoteTagLimit {
const PARAM_NAME: &str = "note_tag";
const LIMIT: usize = GENERAL_REQUEST_LIMIT;
}
pub struct QueryParamNoteIdLimit;
impl QueryParamLimiter for QueryParamNoteIdLimit {
const PARAM_NAME: &str = "note_id";
const LIMIT: usize = 100;
}
pub struct QueryParamNoteCommitmentLimit;
impl QueryParamLimiter for QueryParamNoteCommitmentLimit {
const PARAM_NAME: &str = "note_commitment";
const LIMIT: usize = GENERAL_REQUEST_LIMIT;
}
pub struct QueryParamBlockLimit;
impl QueryParamLimiter for QueryParamBlockLimit {
const PARAM_NAME: &str = "block_header";
const LIMIT: usize = GENERAL_REQUEST_LIMIT;
}
pub struct QueryParamStorageMapKeyTotalLimit;
impl QueryParamLimiter for QueryParamStorageMapKeyTotalLimit {
const PARAM_NAME: &str = "storage_map_key";
const LIMIT: usize = 64;
}