use super::BindingOptions;
use ferroui_reactive::concurrency::IScheduler;
use std::fmt;
use std::rc::Rc;
#[derive(Clone)]
pub struct SortAndBindOptions {
pub reset_threshold: usize,
pub use_replace_for_updates: bool,
pub use_binary_search: bool,
pub initial_capacity: Option<usize>,
pub reset_on_first_time_load: bool,
pub scheduler: Option<Rc<dyn IScheduler>>,
}
impl Default for SortAndBindOptions {
fn default() -> Self {
Self {
reset_threshold: BindingOptions::DEFAULT_RESET_THRESHOLD,
use_replace_for_updates: BindingOptions::DEFAULT_USE_REPLACE_FOR_UPDATES,
use_binary_search: false,
initial_capacity: None,
reset_on_first_time_load: false,
scheduler: None,
}
}
}
impl PartialEq for SortAndBindOptions {
fn eq(&self, other: &Self) -> bool {
self.reset_threshold == other.reset_threshold
&& self.use_replace_for_updates == other.use_replace_for_updates
&& self.use_binary_search == other.use_binary_search
&& self.initial_capacity == other.initial_capacity
&& self.reset_on_first_time_load == other.reset_on_first_time_load
&& match (&self.scheduler, &other.scheduler) {
(None, None) => true,
(Some(a), Some(b)) => std::ptr::addr_eq(Rc::as_ptr(a), Rc::as_ptr(b)),
_ => false,
}
}
}
impl fmt::Debug for SortAndBindOptions {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("SortAndBindOptions")
.field("reset_threshold", &self.reset_threshold)
.field("use_replace_for_updates", &self.use_replace_for_updates)
.field("use_binary_search", &self.use_binary_search)
.field("initial_capacity", &self.initial_capacity)
.field("reset_on_first_time_load", &self.reset_on_first_time_load)
.field("scheduler", &self.scheduler.is_some())
.finish()
}
}