use crate::{ID_LEN, Id};
use arrayvec::ArrayString;
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct ListOptions {
pub prefix: Option<ArrayString<{ 2 * ID_LEN }>>,
pub start_after: Option<Id>,
pub limit: Option<usize>,
}
impl ListOptions {
pub fn new() -> Self {
Self::default()
}
pub fn with_prefix(mut self, prefix: &str) -> Self {
self.prefix = Some(ArrayString::from(prefix).expect("prefix no longer than a full ID"));
self
}
pub fn with_start_after(mut self, id: Id) -> Self {
self.start_after = Some(id);
self
}
pub fn with_limit(mut self, limit: usize) -> Self {
self.limit = Some(limit);
self
}
pub fn matches(&self, id: &Id) -> bool {
if let Some(prefix) = &self.prefix {
if !id.to_hex().starts_with(prefix.as_str()) {
return false;
}
}
if let Some(start_after) = &self.start_after {
if id <= start_after {
return false;
}
}
true
}
}